7#include <etl/io_port.h>
8#include <etl/singleton.h>
56 .match_table = etl::span<const MatchEntry>(
kMatchTable),
57 .match = etl::delegate<bool(
58 DeviceNode&)>::create<&VirtioDriver::MatchStatic>(),
59 .probe = etl::delegate<Expected<void>(
DeviceNode&)>::create<
61 etl::singleton<VirtioDriver>::instance()),
64 etl::singleton<VirtioDriver>::instance()),
121 [[nodiscard]]
auto GetIrq() const -> uint32_t {
130 template <
typename CompletionCallback>
135 static_cast<CompletionCallback&&
>(on_complete));
157 std::array<std::optional<virtio::blk::VirtioBlk<>>,
kMaxBlkDevices>
161 std::array<uint32_t, kMaxBlkDevices>
irqs_{};
165 std::array<std::optional<virtio::blk::VirtioBlkVfsAdapter>,
kMaxBlkDevices>
size_t blk_adapter_count_
DeviceId
VirtIO 设备类型枚举(来自 VirtIO 1.2 规范)
static constexpr size_t kMinDmaBufferSize
static constexpr uint32_t kDefaultQueueSize
static constexpr uint32_t kDefaultQueueCount
VirtioDriver(const VirtioDriver &)=delete
static constexpr size_t kMaxBlkDevices
static auto GetEntry() -> const DriverEntry &
返回驱动注册入口
VirtioDriver(VirtioDriver &&)=delete
auto HandleInterrupt(CompletionCallback &&on_complete) -> void
处理所有块设备中断
auto GetIrq() const -> uint32_t
获取第一个块设备的 IRQ 号
auto Remove(DeviceNode &node) -> Expected< void >
卸载所有 VirtIO 块设备
std::array< etl::unique_ptr< IoBuffer >, kMaxBlkDevices > dma_buffers_
auto Probe(DeviceNode &node) -> Expected< void >
初始化 VirtIO 设备
std::array< etl::unique_ptr< IoBuffer >, kMaxBlkDevices > slot_buffers_
static constexpr MatchEntry kMatchTable[]
std::array< std::optional< virtio::blk::VirtioBlk<> >, kMaxBlkDevices > blk_devices_
auto operator=(VirtioDriver &&) -> VirtioDriver &=delete
std::array< std::optional< virtio::blk::VirtioBlkVfsAdapter >, kMaxBlkDevices > blk_adapters_
std::array< uint32_t, kMaxBlkDevices > irqs_
static auto MatchStatic(DeviceNode &node) -> bool
硬件检测:验证 VirtIO magic number
auto GetBlkDevice() -> virtio::blk::VirtioBlk<> *
获取第一个 VirtIO 块设备实例
auto operator=(const VirtioDriver &) -> VirtioDriver &=delete
std::expected< T, Error > Expected
std::expected 别名模板
etl::singleton< VirtioDriver > VirtioDriverSingleton