blob: c1b17f780eebfba5d55ccd0d58ac5a148820d248 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#include <sys/types.h>
#include <memory>
#include <fvm-host/file-wrapper.h>
#include <lib/ftl/volume.h>
namespace ftl_mtd {
class FtlVolumeWrapper : public ftl::FtlInstance, public fvm::host::FileWrapper {
public:
// Contructs an FtlVolumeWrapper.
FtlVolumeWrapper() : volume_(new ftl::VolumeImpl(this)) {}
// Contructs an FtlVolumeWrapper with the given |volume| instance.
// Used for testing.
FtlVolumeWrapper(std::unique_ptr<ftl::Volume> volume) : volume_(std::move(volume)) {}
// Initializes the FtlVolumeWrapper. Must be called before any operation is performed
// with the FtlVolumeWrapper.
zx_status_t Init(std::unique_ptr<ftl::NdmDriver> driver);
// Formats the FTL volume (erases all data).
zx_status_t Format();
// FtlInstance interface:
bool OnVolumeAdded(uint32_t page_size, uint32_t num_pages) override;
// FileWrapper interface:
ssize_t Read(void* buffer, size_t count) override;
ssize_t Write(void* buffer, size_t count) override;
ssize_t Seek(off_t offset, int whence) override;
ssize_t Size() override;
ssize_t Tell() override;
zx_status_t Truncate(size_t size) override;
zx_status_t Sync() override;
DISALLOW_COPY_AND_ASSIGN_ALLOW_MOVE(FtlVolumeWrapper);
private:
std::unique_ptr<ftl::Volume> volume_;
uint32_t page_ = 0;
uint32_t page_size_ = 0;
uint32_t num_pages_ = 0;
};
} // namespace mtd