SimpleKernel 1.17.0
Loading...
Searching...
No Matches
virtio::blk::VirtioBlkVfsAdapter Class Referencefinal

Adapts VirtioBlk<> to vfs::BlockDevice. More...

#include <virtio_blk_vfs_adapter.hpp>

Inheritance diagram for virtio::blk::VirtioBlkVfsAdapter:
Inheritance graph
Collaboration diagram for virtio::blk::VirtioBlkVfsAdapter:
Collaboration graph

Public Types

using VirtioBlkType = VirtioBlk<>
 

Public Member Functions

auto ReadSectors (uint64_t lba, uint32_t count, void *buf) -> Expected< size_t > override
 读取连续扇区
 
auto WriteSectors (uint64_t lba, uint32_t count, const void *buf) -> Expected< size_t > override
 写入连续扇区
 
auto GetSectorSize () const -> uint32_t override
 获取扇区大小(通常为 512 字节)
 
auto GetSectorCount () const -> uint64_t override
 获取设备总扇区数
 
auto GetName () const -> const char *override
 获取设备名称(如 "virtio-blk0")
 
构造/析构函数
 VirtioBlkVfsAdapter (VirtioBlkType *_dev, uint32_t _index=0)
 构造函数
 
 VirtioBlkVfsAdapter ()=delete
 
 VirtioBlkVfsAdapter (const VirtioBlkVfsAdapter &)=delete
 
 VirtioBlkVfsAdapter (VirtioBlkVfsAdapter &&)=delete
 
auto operator= (const VirtioBlkVfsAdapter &) -> VirtioBlkVfsAdapter &=delete
 
auto operator= (VirtioBlkVfsAdapter &&) -> VirtioBlkVfsAdapter &=delete
 
 ~VirtioBlkVfsAdapter () override=default
 
- Public Member Functions inherited from vfs::BlockDevice
virtual ~BlockDevice ()=default
 
virtual auto Flush () -> Expected< void >
 刷新设备缓存到物理介质
 

Private Attributes

VirtioBlkTypedev_ {nullptr}
 
uint32_t index_ {0}
 

Static Private Attributes

static constexpr uint32_t kSectorSize = 512
 

Detailed Description

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.

Member Typedef Documentation

◆ VirtioBlkType

Constructor & Destructor Documentation

◆ VirtioBlkVfsAdapter() [1/4]

virtio::blk::VirtioBlkVfsAdapter::VirtioBlkVfsAdapter ( VirtioBlkType _dev,
uint32_t  _index = 0 
)
inlineexplicit

构造函数

Parameters
_devVirtIO 块设备实例
_index设备索引

Definition at line 32 of file virtio_blk_vfs_adapter.hpp.

◆ VirtioBlkVfsAdapter() [2/4]

virtio::blk::VirtioBlkVfsAdapter::VirtioBlkVfsAdapter ( )
delete

◆ VirtioBlkVfsAdapter() [3/4]

virtio::blk::VirtioBlkVfsAdapter::VirtioBlkVfsAdapter ( const VirtioBlkVfsAdapter )
delete

◆ VirtioBlkVfsAdapter() [4/4]

virtio::blk::VirtioBlkVfsAdapter::VirtioBlkVfsAdapter ( VirtioBlkVfsAdapter &&  )
delete

◆ ~VirtioBlkVfsAdapter()

virtio::blk::VirtioBlkVfsAdapter::~VirtioBlkVfsAdapter ( )
overridedefault

Member Function Documentation

◆ 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

获取设备总扇区数

Returns
总扇区数

Implements vfs::BlockDevice.

Definition at line 70 of file virtio_blk_vfs_adapter.hpp.

70 {
71 return dev_->GetCapacity();
72 }
auto GetCapacity() const -> uint64_t
获取设备容量
Here is the call graph for this function:

◆ GetSectorSize()

auto virtio::blk::VirtioBlkVfsAdapter::GetSectorSize ( ) const -> uint32_t
inlineoverridevirtual

获取扇区大小(通常为 512 字节)

Returns
扇区大小(字节)

Implements vfs::BlockDevice.

Definition at line 66 of file virtio_blk_vfs_adapter.hpp.

66 {
67 return kSectorSize;
68 }

◆ operator=() [1/2]

auto virtio::blk::VirtioBlkVfsAdapter::operator= ( const VirtioBlkVfsAdapter ) -> VirtioBlkVfsAdapter &=delete
delete

◆ operator=() [2/2]

auto virtio::blk::VirtioBlkVfsAdapter::operator= ( VirtioBlkVfsAdapter &&  ) -> VirtioBlkVfsAdapter &=delete
delete

◆ 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) {
46 auto result = dev_->Read(lba + i, ptr + i * kSectorSize);
47 if (!result) {
48 return std::unexpected(Error(result.error().code));
49 }
50 }
51 return static_cast<size_t>(count) * kSectorSize;
52 }
auto Read(uint64_t sector, uint8_t *data) -> Expected< void >
同步读取一个扇区
错误类型,用于 std::expected
Definition expected.hpp:343
Here is the call graph for this function:

◆ 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) {
58 auto result = dev_->Write(lba + i, ptr + i * kSectorSize);
59 if (!result) {
60 return std::unexpected(Error(result.error().code));
61 }
62 }
63 return static_cast<size_t>(count) * kSectorSize;
64 }
auto Write(uint64_t sector, const uint8_t *data) -> Expected< void >
同步写入一个扇区
Here is the call graph for this function:

Member Data Documentation

◆ dev_

VirtioBlkType* virtio::blk::VirtioBlkVfsAdapter::dev_ {nullptr}
private

Definition at line 82 of file virtio_blk_vfs_adapter.hpp.

82{nullptr};

◆ index_

uint32_t virtio::blk::VirtioBlkVfsAdapter::index_ {0}
private

Definition at line 83 of file virtio_blk_vfs_adapter.hpp.

83{0};

◆ kSectorSize

constexpr uint32_t virtio::blk::VirtioBlkVfsAdapter::kSectorSize = 512
staticconstexprprivate

Definition at line 81 of file virtio_blk_vfs_adapter.hpp.


The documentation for this class was generated from the following file: