| // 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 <memory> |
| #include <optional> |
| |
| #include <fs-management/mount.h> |
| #include <zircon/types.h> |
| |
| #include "block-device-interface.h" |
| #include "filesystem-mounter.h" |
| |
| namespace devmgr { |
| |
| // A concrete implementation of the block device interface. |
| // |
| // Used by fshost to attach either drivers or filesystems to |
| // incoming block devices. |
| class BlockDevice final : public BlockDeviceInterface { |
| public: |
| BlockDevice(FilesystemMounter* mounter, fbl::unique_fd fd); |
| |
| disk_format_t GetFormat() final; |
| void SetFormat(disk_format_t format) final; |
| bool Netbooting() final; |
| zx_status_t GetInfo(fuchsia_hardware_block_BlockInfo* out_info) final; |
| zx_status_t GetTypeGUID(fuchsia_hardware_block_partition_GUID* out_guid) final; |
| zx_status_t AttachDriver(const fbl::StringPiece& driver) final; |
| zx_status_t UnsealZxcrypt() final; |
| zx_status_t IsUnsealedZxcrypt(bool* is_unsealed_zxcrypt) final; |
| zx_status_t FormatZxcrypt() final; |
| bool ShouldCheckFilesystems() final; |
| zx_status_t CheckFilesystem() final; |
| zx_status_t FormatFilesystem() final; |
| zx_status_t MountFilesystem() final; |
| |
| private: |
| FilesystemMounter* mounter_ = nullptr; |
| fbl::unique_fd fd_; |
| std::optional<fuchsia_hardware_block_BlockInfo> info_ = {}; |
| disk_format_t format_ = DISK_FORMAT_UNKNOWN; |
| }; |
| |
| } // namespace devmgr |