Adapts VirtioBlk<> to vfs::BlockDevice.
More...
#include <virtio_blk_vfs_adapter.hpp>
Adapts VirtioBlk<> to vfs::BlockDevice.
Wraps a VirtioBlk instance and forwards ReadSectors/WriteSectors to the underlying VirtIO block device.
Definition at line 21 of file virtio_blk_vfs_adapter.hpp.
◆ VirtioBlkType
◆ VirtioBlkVfsAdapter() [1/4]
| virtio::blk::VirtioBlkVfsAdapter::VirtioBlkVfsAdapter |
( |
VirtioBlkType * |
_dev, |
|
|
uint32_t |
_index = 0 |
|
) |
| |
|
inlineexplicit |
◆ VirtioBlkVfsAdapter() [2/4]
| virtio::blk::VirtioBlkVfsAdapter::VirtioBlkVfsAdapter |
( |
| ) |
|
|
delete |
◆ VirtioBlkVfsAdapter() [3/4]
◆ VirtioBlkVfsAdapter() [4/4]
◆ ~VirtioBlkVfsAdapter()
| virtio::blk::VirtioBlkVfsAdapter::~VirtioBlkVfsAdapter |
( |
| ) |
|
|
overridedefault |
◆ GetName()
| auto virtio::blk::VirtioBlkVfsAdapter::GetName |
( |
| ) |
const -> const char *override |
|
inlineoverridevirtual |
获取设备名称(如 "virtio-blk0")
- Returns
- 设备名称
Implements vfs::BlockDevice.
Definition at line 74 of file virtio_blk_vfs_adapter.hpp.
74 {
75 static constexpr std::array<const char*, 4> kNames = {
76 "virtio-blk0", "virtio-blk1", "virtio-blk2", "virtio-blk3"};
77 return (
index_ < kNames.size()) ? kNames[
index_] :
"virtio-blk?";
78 }
◆ GetSectorCount()
| auto virtio::blk::VirtioBlkVfsAdapter::GetSectorCount |
( |
| ) |
const -> uint64_t |
|
inlineoverridevirtual |
◆ GetSectorSize()
| auto virtio::blk::VirtioBlkVfsAdapter::GetSectorSize |
( |
| ) |
const -> uint32_t |
|
inlineoverridevirtual |
◆ operator=() [1/2]
◆ operator=() [2/2]
◆ ReadSectors()
| auto virtio::blk::VirtioBlkVfsAdapter::ReadSectors |
( |
uint64_t |
sector_start, |
|
|
uint32_t |
sector_count, |
|
|
void * |
buffer |
|
) |
| -> Expected< size_t > |
|
inlineoverridevirtual |
读取连续扇区
- Parameters
-
| sector_start | 起始扇区号(LBA) |
| sector_count | 扇区数量 |
| buffer | 输出缓冲区,大小至少为 sector_count * GetSectorSize() |
- Returns
- Expected<size_t> 成功时返回实际读取的字节数
- Precondition
- buffer != nullptr
-
sector_start + sector_count <= GetSectorCount()
- Postcondition
- 返回值 == sector_count * GetSectorSize() 或错误
Implements vfs::BlockDevice.
Definition at line 42 of file virtio_blk_vfs_adapter.hpp.
43 {
44 auto* ptr = static_cast<uint8_t*>(buf);
45 for (uint32_t i = 0; i < count; ++i) {
47 if (!result) {
48 return std::unexpected(
Error(result.error().code));
49 }
50 }
52 }
auto Read(uint64_t sector, uint8_t *data) -> Expected< void >
同步读取一个扇区
◆ WriteSectors()
| auto virtio::blk::VirtioBlkVfsAdapter::WriteSectors |
( |
uint64_t |
sector_start, |
|
|
uint32_t |
sector_count, |
|
|
const void * |
buffer |
|
) |
| -> Expected< size_t > |
|
inlineoverridevirtual |
写入连续扇区
- Parameters
-
| sector_start | 起始扇区号(LBA) |
| sector_count | 扇区数量 |
| buffer | 输入缓冲区 |
- Returns
- Expected<size_t> 成功时返回实际写入的字节数
- Precondition
- buffer != nullptr
-
sector_start + sector_count <= GetSectorCount()
Implements vfs::BlockDevice.
Definition at line 54 of file virtio_blk_vfs_adapter.hpp.
55 {
56 const auto* ptr = static_cast<const uint8_t*>(buf);
57 for (uint32_t i = 0; i < count; ++i) {
59 if (!result) {
60 return std::unexpected(
Error(result.error().code));
61 }
62 }
64 }
auto Write(uint64_t sector, const uint8_t *data) -> Expected< void >
同步写入一个扇区
◆ dev_
◆ index_
| uint32_t virtio::blk::VirtioBlkVfsAdapter::index_ {0} |
|
private |
◆ kSectorSize
| constexpr uint32_t virtio::blk::VirtioBlkVfsAdapter::kSectorSize = 512 |
|
staticconstexprprivate |
The documentation for this class was generated from the following file: