SimpleKernel 1.17.0
Loading...
Searching...
No Matches
virtio::TransportConcept Concept Reference

Virtio 传输层接口约束 More...

#include <transport.hpp>

Concept definition

template<typename T>
requires(T t, const T ct, uint32_t u32, uint64_t u64) {
{ ct.IsValid() } -> std::same_as<bool>;
{ ct.GetDeviceId() } -> std::same_as<uint32_t>;
{ ct.GetVendorId() } -> std::same_as<uint32_t>;
{ ct.GetStatus() } -> std::same_as<uint32_t>;
{ t.SetStatus(u32) } -> std::same_as<void>;
{ t.GetDeviceFeatures() } -> std::same_as<uint64_t>;
{ t.SetDriverFeatures(u64) } -> std::same_as<void>;
{ t.GetQueueNumMax(u32) } -> std::same_as<uint32_t>;
{ t.SetQueueNum(u32, u32) } -> std::same_as<void>;
{ t.SetQueueDesc(u32, u64) } -> std::same_as<void>;
{ t.SetQueueAvail(u32, u64) } -> std::same_as<void>;
{ t.SetQueueUsed(u32, u64) } -> std::same_as<void>;
{ t.GetQueueReady(u32) } -> std::same_as<bool>;
{ t.SetQueueReady(u32, static_cast<bool>(true)) } -> std::same_as<void>;
{ t.NotifyQueue(u32) } -> std::same_as<void>;
{ ct.GetInterruptStatus() } -> std::same_as<uint32_t>;
{ t.AckInterrupt(u32) } -> std::same_as<void>;
{ ct.ReadConfigU8(u32) } -> std::same_as<uint8_t>;
{ ct.ReadConfigU16(u32) } -> std::same_as<uint16_t>;
{ ct.ReadConfigU32(u32) } -> std::same_as<uint32_t>;
{ ct.ReadConfigU64(u32) } -> std::same_as<uint64_t>;
{ ct.GetConfigGeneration() } -> std::same_as<uint32_t>;
}
Virtio 传输层接口约束
Definition transport.hpp:27

Detailed Description

Virtio 传输层接口约束

编译期约束传输层实现必须提供的完整方法集。 DeviceInitializer 的 TransportImpl 参数必须满足此 concept。

Note
部分方法(GetDeviceFeatures、GetQueueNumMax、GetQueueReady) 在 MMIO 实现中非 const(需写选择器寄存器),因此 concept 对 这些方法不要求 const 限定。
See also
virtio-v1.2#4 Virtio Transport Options

Definition at line 27 of file transport.hpp.