XenevaOS
Loading...
Searching...
No Matches
virtio.h
Go to the documentation of this file.
32#ifndef __VIRTIO_H__
33#define __VIRTIO_H__
34
35#include <stdint.h>
36#include <stddef.h>
37#include <aurora.h>
38#if defined(__GNUC__) || defined(__clang__)
39#ifndef __cplusplus
40#include <stdbool.h>
41#endif
42#endif
43
64
66 volatile uint8_t select;
67 volatile uint8_t subsel;
68 volatile uint8_t size;
69 volatile uint8_t pad[5];
70 union {
71 struct {
72 volatile uint32_t min;
73 volatile uint32_t max;
74 volatile uint32_t fuzz;
75 volatile uint32_t flat;
76 volatile uint32_t res;
80};
81
88
95
100
107
113
119
120
121#define OFFSETOF(s,m) ((size_t)&(((s*)0)->m))
122
123#define VIRTIO_NET_F_CSUM (1ULL << 0)
124#define VIRTIO_NET_F_GUEST_CSUM (1ULL << 2)
125#define VIRTIO_NET_F_MAC (1ULL << 5)
126#define VIRTIO_NET_F_CTRL_VQ (1ULL << 17)
127#define VIRTIO_NET_HDR_GSO_NONE 0
128
129#ifdef _MSC_VER
130#pragma pack(push, 1)
131#endif
132typedef struct _virtio_net_hdr_ {
139 uint16_t num_buffers; /* QEMU virtio-net consumes 12-byte hdr on TX */
140#ifdef _MSC_VER
141} virtio_net_hdr_t;
142#pragma pack(pop)
143#else
144} __attribute__((packed)) virtio_net_hdr_t;
145#endif
146
147
158
159
160
165
166/* modern virtio-pci capability types, virtio-v1.1 sec 4.1.4 */
167#define VIRTIO_PCI_CAP_VENDOR_ID 0x09 /* PCI capability ID for "vendor specific" */
168#define VIRTIO_PCI_CAP_COMMON_CFG 1
169#define VIRTIO_PCI_CAP_NOTIFY_CFG 2
170#define VIRTIO_PCI_CAP_ISR_CFG 3
171#define VIRTIO_PCI_CAP_DEVICE_CFG 4
172#define VIRTIO_PCI_CAP_PCI_CFG 5
173
174/* device status register bits, virtio-v1.1 sec 2.1 */
175#define VIRTIO_STATUS_ACKNOWLEDGE 0x01
176#define VIRTIO_STATUS_DRIVER 0x02
177#define VIRTIO_STATUS_DRIVER_OK 0x04
178#define VIRTIO_STATUS_FEATURES_OK 0x08
179#define VIRTIO_STATUS_DEVICE_NEEDS_RESET 0x40
180#define VIRTIO_STATUS_FAILED 0x80
181
182/* bit 32 of the feature bitmap (high half, feature-select 1) --
183 * required on every modern (non-transitional-legacy) negotiation --axiss */
184#define VIRTIO_F_VERSION_1_BIT 32
185
186#define VIRTQ_DESC_F_NEXT 1
187#define VIRTQ_DESC_F_WRITE 2
188#define VIRTIO_MSI_NO_VECTOR 0xFFFF
189
190/* split-ring layout, sized to whatever queue size the device reports --
191 * NOT the fixed 64-entry VirtioQueue above. Modern virtio-pci gives
192 * QueueDesc/QueueAvail/QueueUsed as independent 64-bit addresses, so
193 * these don't need to be contiguous or share a struct --axiss */
194struct VirtqDesc {
195 volatile uint64_t addr;
196 volatile uint32_t len;
197 volatile uint16_t flags;
198 volatile uint16_t next;
199};
200
202 volatile uint16_t flags;
203 volatile uint16_t idx;
204 volatile uint16_t ring[];
205};
206
208 volatile uint32_t id;
209 volatile uint32_t len;
210};
211
213 volatile uint16_t flags;
214 volatile uint16_t idx;
215 volatile struct VirtqUsedElem ring[];
216};
217
231
232#ifdef __cplusplus
233extern "C" {
234#endif
242AU_EXTERN AU_EXPORT bool AuVirtioPCIInit(uint64_t address, int bus, int dev, int func,
243 uint32_t wantedFeaturesLow, struct VirtioPCIDevice* out);
244
254 uint16_t qidx,
255 struct VirtqDesc** outDesc,
256 struct VirtqAvailHdr** outAvail,
257 struct VirtqUsedHdr** outUsed,
258 uint16_t msixVector);
259
264
266 struct VirtqAvailHdr* avail, uint16_t qsize, uint64_t bufPhys, uint32_t bufSize,
267 uint16_t nbuf, uint16_t flags);
268#ifdef __cplusplus
269}
270#endif
271
275extern void AuVirtioBlkInitialize(uint64_t device, int bus, int dev, int func);
276
280extern void AuVirtioKbdInitialize(uint64_t device, int bus, int dev, int func);
281
285extern void AuVirtioTabletInitialize(uint64_t device, int bus, int dev, int func);
286
287extern void AuVirtioKbdDown();
288
289extern void AuVirtioTabletDown();
290
300#endif
#define AU_EXTERN
Definition aurora.h:54
#define AU_EXPORT
Definition aurora.h:40
void AuVirtioKbdDown()
Definition virtiokbd.c:180
uint8_t flags
Definition virtio.h:0
typedef __attribute__
Definition list_sort.h:12
void AuVirtioTabletInitialize(uint64_t device, int bus, int dev, int func)
AuVirtioTabletInitialize – initialize virtio tablet.
Definition virtiotablet.c:216
void AuVirtioNetInitialize(uint64_t device)
AuVirtioNetInitialize – initialize the virtio network device.
Definition virtionet.c:393
void AuVirtioTabletDown()
Definition virtiotablet.c:193
void AuVirtioBlkInitialize(uint64_t device, int bus, int dev, int func)
AuVirtioBlkInitialize – initialize the virtio block device.
Definition virtioblk.c:204
void AuVirtioKbdInitialize(uint64_t device, int bus, int dev, int func)
AuVirtioKbdInitialize – initialize the virtio keyboard.
Definition virtiokbd.c:203
#define out(...)
Definition main.cpp:65
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
const struct device * dev
Definition drm_print.h:519
void AuVirtioPCINotifyQueue(void)
void AuVirtioPCISetupQueue(void)
void AuVirtioPCIInit(void)
void AuVirtioPCIPostAvail(void)
Definition virtio.h:89
uint16_t flags
Definition virtio.h:90
volatile uint16_t index
Definition virtio.h:91
uint16_t int_index
Definition virtio.h:93
uint16_t ring[64]
Definition virtio.h:92
Definition virtio.h:82
uint16_t Flags
Definition virtio.h:85
uint16_t Next
Definition virtio.h:86
uint32_t Length
Definition virtio.h:84
uint64_t Addr
Definition virtio.h:83
Definition virtio.h:44
volatile uint16_t QueueEnable
Definition virtio.h:57
volatile uint8_t ConfigGeneration
Definition virtio.h:52
volatile uint16_t Queues
Definition virtio.h:50
volatile uint64_t QueueAvail
Definition virtio.h:61
volatile uint16_t QueueMSixVector
Definition virtio.h:56
volatile uint64_t QueueUsed
Definition virtio.h:62
volatile uint16_t MSix
Definition virtio.h:49
volatile uint32_t DevFeature
Definition virtio.h:46
volatile uint32_t GuestFeatureSelect
Definition virtio.h:47
volatile uint16_t QueueSelect
Definition virtio.h:54
volatile uint64_t QueueDesc
Definition virtio.h:60
volatile uint16_t QueueSize
Definition virtio.h:55
volatile uint32_t DevFeatureSelect
Definition virtio.h:45
volatile uint8_t DeviceStatus
Definition virtio.h:51
volatile uint32_t GuestFeature
Definition virtio.h:48
volatile uint16_t QueueNotifyOff
Definition virtio.h:58
Definition virtio.h:65
volatile uint32_t fuzz
Definition virtio.h:74
volatile uint8_t select
Definition virtio.h:66
union VirtioDeviceConfig::@11 data
volatile uint32_t res
Definition virtio.h:76
struct VirtioDeviceConfig::@11::@12 tablet_data
volatile uint32_t min
Definition virtio.h:72
volatile uint32_t max
Definition virtio.h:73
volatile uint8_t subsel
Definition virtio.h:67
volatile uint32_t flat
Definition virtio.h:75
volatile uint8_t pad[5]
Definition virtio.h:69
uint8_t str[128]
Definition virtio.h:78
volatile uint8_t size
Definition virtio.h:68
Definition virtio.h:114
uint32_t value
Definition virtio.h:117
uint16_t type
Definition virtio.h:115
uint16_t code
Definition virtio.h:116
a mapped, reset-and-negotiated modern virtio-pci device. Per-device drivers build their own virtqueue...
Definition virtio.h:222
struct VirtioCommonCfg * common
Definition virtio.h:225
volatile uint8_t * isr
Definition virtio.h:226
uint32_t notifyOffMultiplier
Definition virtio.h:229
uint8_t * notifyBase
Definition virtio.h:228
int func
Definition virtio.h:224
int bus
Definition virtio.h:224
void * deviceCfg
Definition virtio.h:227
uint64_t address
Definition virtio.h:223
int dev
Definition virtio.h:224
Definition virtio.h:108
struct VirtioAvail available
Definition virtio.h:110
struct VirtioUsed used
Definition virtio.h:111
struct VirtioBuffer buffers[64]
Definition virtio.h:109
Definition virtio.h:96
uint32_t index
Definition virtio.h:97
uint32_t length
Definition virtio.h:98
Definition virtio.h:101
uint16_t int_index
Definition virtio.h:105
volatile uint16_t index
Definition virtio.h:103
uint16_t flags
Definition virtio.h:102
struct VirtioRing ring[64]
Definition virtio.h:104
Definition virtio.h:201
volatile uint16_t flags
Definition virtio.h:202
volatile uint16_t idx
Definition virtio.h:203
volatile uint16_t ring[]
Definition virtio.h:204
Definition virtio.h:194
volatile uint16_t next
Definition virtio.h:198
volatile uint32_t len
Definition virtio.h:196
volatile uint64_t addr
Definition virtio.h:195
volatile uint16_t flags
Definition virtio.h:197
Definition virtio.h:207
volatile uint32_t len
Definition virtio.h:209
volatile uint32_t id
Definition virtio.h:208
Definition virtio.h:212
volatile uint16_t idx
Definition virtio.h:214
volatile uint16_t flags
Definition virtio.h:213
volatile struct VirtqUsedElem ring[]
Definition virtio.h:215
Definition virtio.h:132
uint8_t gso_type
Definition virtio.h:134
uint16_t num_buffers
Definition virtio.h:139
uint16_t hdr_len
Definition virtio.h:135
uint16_t csum_offset
Definition virtio.h:138
uint8_t flags
Definition virtio.h:133
uint16_t csum_start
Definition virtio.h:137
uint16_t gso_size
Definition virtio.h:136
Definition fs.h:255
Definition virtio.h:161
virtio_pci_cap cap
Definition virtio.h:162
uint32_t notifer_mult_base
Definition virtio.h:163
Definition virtio.h:148
uint8_t bar
Definition virtio.h:153
uint32_t offset
Definition virtio.h:155
uint8_t cap_len
Definition virtio.h:151
uint32_t length
Definition virtio.h:156
uint8_t cap_vndr
Definition virtio.h:149
uint8_t cap_next
Definition virtio.h:150
uint8_t cfg_type
Definition virtio.h:152