SimpleKernel 1.17.0
Loading...
Searching...
No Matches
virtio Namespace Reference

Namespaces

namespace  blk
 

Classes

class  DeviceInitializer
 Virtio 设备初始化器 More...
 
struct  IoVec
 Scatter-Gather IO 物理内存向量 More...
 
class  MmioTransport
 Virtio MMIO 传输层 More...
 
class  PciTransport
 Virtio PCI 传输层(占位) More...
 
class  SplitVirtqueue
 Split Virtqueue 管理类 More...
 
class  Transport
 Virtio 传输层基类(零虚表开销,C++23 Deducing this) More...
 
class  VirtqueueBase
 Virtqueue 基类(C++23 Deducing this 编译期多态) More...
 

Concepts

concept  TransportConcept
 Virtio 传输层接口约束
 

Enumerations

enum class  DeviceId : uint32_t {
  kReserved = 0 , kNetwork = 1 , kBlock = 2 , kConsole = 3 ,
  kEntropy = 4 , kMemoryBalloonTraditional = 5 , kIoMemory = 6 , kRpmsg = 7 ,
  kScsiHost = 8 , kNinepTransport = 9 , kMac80211Wlan = 10 , kRprocSerial = 11 ,
  kVirtioCaif = 12 , kMemoryBalloon = 13 , kGpu = 16 , kTimerClock = 17 ,
  kInput = 18 , kSocket = 19 , kCrypto = 20 , kSignalDist = 21 ,
  kPstore = 22 , kIommu = 23 , kMemory = 24 , kSound = 25 ,
  kFilesystem = 26 , kPmem = 27 , kRpmb = 28 , kScmi = 32 ,
  kI2cAdapter = 34 , kCan = 36 , kParameterServer = 38 , kAudioPolicy = 39 ,
  kBluetooth = 40 , kGpio = 41 , kRdma = 42
}
 Virtio 设备 ID 定义 More...
 
enum class  ReservedFeature : uint64_t {
  kIndirectDesc = 0x10000000 , kEventIdx = 0x20000000 , kVersion1 = 0x100000000 , kAccessPlatform = 0x200000000 ,
  kRingPacked = 0x400000000 , kInOrder = 0x800000000 , kOrderPlatform = 0x1000000000 , kSrIov = 0x2000000000 ,
  kNotificationData = 0x4000000000 , kNotifConfigData = 0x8000000000 , kRingReset = 0x10000000000
}
 保留特性位定义 (Reserved Feature Bits) More...
 
enum class  InterruptStatus : uint32_t { kUsedBuffer = 0x01 , kConfigChange = 0x02 }
 MMIO 中断状态位 More...
 

Functions

constexpr auto AlignUp (size_t value, size_t align) -> size_t
 将值向上对齐到指定边界
 
constexpr auto IsPowerOfTwo (size_t value) -> bool
 检查值是否为 2 的幂
 

Variables

static constexpr uint32_t kMmioMagicValue = 0x74726976
 MMIO 魔数: little-endian "virt" = 0x74726976.
 
static constexpr uint32_t kMmioVersionModern = 0x02
 Modern VirtIO MMIO 版本号(VirtIO 1.0+)
 

Detailed Description

Enumeration Type Documentation

◆ DeviceId

enum class virtio::DeviceId : uint32_t
strong

Virtio 设备 ID 定义

See also
virtio-v1.2#5 Device Types
Enumerator
kReserved 
kNetwork 
kBlock 
kConsole 
kEntropy 
kMemoryBalloonTraditional 
kIoMemory 
kRpmsg 
kScsiHost 
kNinepTransport 
kMac80211Wlan 
kRprocSerial 
kVirtioCaif 
kMemoryBalloon 
kGpu 
kTimerClock 
kInput 
kSocket 
kCrypto 
kSignalDist 
kPstore 
kIommu 
kMemory 
kSound 
kFilesystem 
kPmem 
kRpmb 
kScmi 
kI2cAdapter 
kCan 
kParameterServer 
kAudioPolicy 
kBluetooth 
kGpio 
kRdma 

Definition at line 15 of file defs.h.

15 : uint32_t {
16 kReserved = 0,
17 kNetwork = 1,
18 kBlock = 2,
19 kConsole = 3,
20 kEntropy = 4,
22 kIoMemory = 6,
23 kRpmsg = 7,
24 kScsiHost = 8,
26 kMac80211Wlan = 10,
27 kRprocSerial = 11,
28 kVirtioCaif = 12,
29 kMemoryBalloon = 13,
30 // 14-15 保留
31 kGpu = 16,
32 kTimerClock = 17,
33 kInput = 18,
34 kSocket = 19,
35 kCrypto = 20,
36 kSignalDist = 21,
37 kPstore = 22,
38 kIommu = 23,
39 kMemory = 24,
40 kSound = 25,
41 kFilesystem = 26,
42 kPmem = 27,
43 kRpmb = 28,
44 // 29-31 保留
45 kScmi = 32,
46 // 33 保留
47 kI2cAdapter = 34,
48 // 35 保留
49 kCan = 36,
50 // 37 保留
52 kAudioPolicy = 39,
53 kBluetooth = 40,
54 kGpio = 41,
55 kRdma = 42,
56};
@ kBlock
块设备(磁盘等)

◆ InterruptStatus

enum class virtio::InterruptStatus : uint32_t
strong

MMIO 中断状态位

See also
virtio-v1.2#4.2.2 Table 4.1: MMIO Device Register Layout
Enumerator
kUsedBuffer 

设备在至少一个活动虚拟队列中使用了缓冲区 Used Buffer Notification

kConfigChange 

设备配置已更改 Configuration Change Notification

Definition at line 20 of file mmio.hpp.

20 : uint32_t {
22 kUsedBuffer = 0x01,
24 kConfigChange = 0x02,
25};
@ kConfigChange
设备配置已更改 Configuration Change Notification
@ kUsedBuffer
设备在至少一个活动虚拟队列中使用了缓冲区 Used Buffer Notification

◆ ReservedFeature

enum class virtio::ReservedFeature : uint64_t
strong

保留特性位定义 (Reserved Feature Bits)

See also
virtio-v1.2#6
Enumerator
kIndirectDesc 

设备支持间接描述符 (VIRTIO_F_INDIRECT_DESC) [1 << 28]

kEventIdx 

设备支持 avail_event 和 used_event 字段 (VIRTIO_F_EVENT_IDX) [1 << 29]

kVersion1 

设备符合 virtio 1.0+ 规范 (VIRTIO_F_VERSION_1) [1 << 32]

kAccessPlatform 

设备可被 IOMMU 限定的平台访问 (VIRTIO_F_ACCESS_PLATFORM) [1 << 33]

kRingPacked 

支持 Packed Virtqueue 布局 (VIRTIO_F_RING_PACKED) [1 << 34]

kInOrder 

按顺序使用缓冲区 (VIRTIO_F_IN_ORDER) [1 << 35]

kOrderPlatform 

平台提供内存排序保证 (VIRTIO_F_ORDER_PLATFORM) [1 << 36]

kSrIov 

支持 Single Root I/O Virtualization (VIRTIO_F_SR_IOV) [1 << 37]

kNotificationData 

驱动在通知中传递额外数据 (VIRTIO_F_NOTIFICATION_DATA) [1 << 38]

kNotifConfigData 

驱动使用设备提供的数据作为可用缓冲区通知的 virtqueue 标识符 (VIRTIO_F_NOTIF_CONFIG_DATA) [1 << 39]

kRingReset 

驱动可以单独重置队列 (VIRTIO_F_RING_RESET) [1 << 40]

Definition at line 62 of file defs.h.

62 : uint64_t {
64 kIndirectDesc = 0x10000000,
66 kEventIdx = 0x20000000,
68 kVersion1 = 0x100000000,
70 kAccessPlatform = 0x200000000,
72 kRingPacked = 0x400000000,
74 kInOrder = 0x800000000,
76 kOrderPlatform = 0x1000000000,
78 kSrIov = 0x2000000000,
80 kNotificationData = 0x4000000000,
83 kNotifConfigData = 0x8000000000,
85 kRingReset = 0x10000000000,
86};
@ kEventIdx
设备支持 avail_event 和 used_event 字段 (VIRTIO_F_EVENT_IDX) [1 << 29]
@ kRingReset
驱动可以单独重置队列 (VIRTIO_F_RING_RESET) [1 << 40]
@ kVersion1
设备符合 virtio 1.0+ 规范 (VIRTIO_F_VERSION_1) [1 << 32]
@ kOrderPlatform
平台提供内存排序保证 (VIRTIO_F_ORDER_PLATFORM) [1 << 36]
@ kNotificationData
驱动在通知中传递额外数据 (VIRTIO_F_NOTIFICATION_DATA) [1 << 38]
@ kAccessPlatform
设备可被 IOMMU 限定的平台访问 (VIRTIO_F_ACCESS_PLATFORM) [1 << 33]
@ kSrIov
支持 Single Root I/O Virtualization (VIRTIO_F_SR_IOV) [1 << 37]
@ kRingPacked
支持 Packed Virtqueue 布局 (VIRTIO_F_RING_PACKED) [1 << 34]
@ kIndirectDesc
设备支持间接描述符 (VIRTIO_F_INDIRECT_DESC) [1 << 28]
@ kInOrder
按顺序使用缓冲区 (VIRTIO_F_IN_ORDER) [1 << 35]

Function Documentation

◆ AlignUp()

constexpr auto virtio::AlignUp ( size_t  value,
size_t  align 
) -> size_t
constexpr

将值向上对齐到指定边界

Parameters
value要对齐的值(字节数)
align对齐边界(字节数,必须为 2 的幂)
Returns
对齐后的值
See also
virtio-v1.2#2.7.5 The Virtqueue Descriptor Table

Definition at line 20 of file misc.hpp.

20 {
21 return (value + align - 1) & ~(align - 1);
22}
Here is the caller graph for this function:

◆ IsPowerOfTwo()

constexpr auto virtio::IsPowerOfTwo ( size_t  value) -> bool
constexpr

检查值是否为 2 的幂

Parameters
value要检查的值
Returns
true 表示 value 是 2 的幂,false 表示不是
Note
value 为 0 时返回 false
See also
virtio-v1.2#2.6 Split Virtqueues

Definition at line 32 of file misc.hpp.

32 {
33 return value != 0 && (value & (value - 1)) == 0;
34}
Here is the caller graph for this function:

Variable Documentation

◆ kMmioMagicValue

constexpr uint32_t virtio::kMmioMagicValue = 0x74726976
staticconstexpr

MMIO 魔数: little-endian "virt" = 0x74726976.

See also
virtio-v1.2#4.2.2

Definition at line 31 of file mmio.hpp.

◆ kMmioVersionModern

constexpr uint32_t virtio::kMmioVersionModern = 0x02
staticconstexpr

Modern VirtIO MMIO 版本号(VirtIO 1.0+)

See also
virtio-v1.2#4.2.2

Definition at line 37 of file mmio.hpp.