37#if defined(__GNUC__) || defined(__clang__)
120#define OFFSETOF(s,m) ((size_t)&(((s*)0)->m))
122#define VIRTIO_NET_F_CSUM (1ULL << 0)
123#define VIRTIO_NET_F_GUEST_CSUM (1ULL << 2)
124#define VIRTIO_NET_F_MAC (1ULL << 5)
125#define VIRTIO_NET_F_CTRL_VQ (1ULL << 17)
126#define VIRTIO_NET_HDR_GSO_NONE 0
158#define VIRTIO_PCI_CAP_VENDOR_ID 0x09
159#define VIRTIO_PCI_CAP_COMMON_CFG 1
160#define VIRTIO_PCI_CAP_NOTIFY_CFG 2
161#define VIRTIO_PCI_CAP_ISR_CFG 3
162#define VIRTIO_PCI_CAP_DEVICE_CFG 4
163#define VIRTIO_PCI_CAP_PCI_CFG 5
166#define VIRTIO_STATUS_ACKNOWLEDGE 0x01
167#define VIRTIO_STATUS_DRIVER 0x02
168#define VIRTIO_STATUS_DRIVER_OK 0x04
169#define VIRTIO_STATUS_FEATURES_OK 0x08
170#define VIRTIO_STATUS_DEVICE_NEEDS_RESET 0x40
171#define VIRTIO_STATUS_FAILED 0x80
175#define VIRTIO_F_VERSION_1_BIT 32
177#define VIRTQ_DESC_F_NEXT 1
178#define VIRTQ_DESC_F_WRITE 2
179#define VIRTIO_MSI_NO_VECTOR 0xFFFF
AuUSBDeviceStruc * device
Definition main.cpp:148
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
uint16_t flags
Definition virtio.h:89
volatile uint16_t index
Definition virtio.h:90
uint16_t int_index
Definition virtio.h:92
uint16_t ring[64]
Definition virtio.h:91
uint16_t Flags
Definition virtio.h:84
uint16_t Next
Definition virtio.h:85
uint32_t Length
Definition virtio.h:83
uint64_t Addr
Definition virtio.h:82
volatile uint16_t QueueEnable
Definition virtio.h:56
volatile uint8_t ConfigGeneration
Definition virtio.h:51
volatile uint16_t Queues
Definition virtio.h:49
volatile uint64_t QueueAvail
Definition virtio.h:60
volatile uint16_t QueueMSixVector
Definition virtio.h:55
volatile uint64_t QueueUsed
Definition virtio.h:61
volatile uint16_t MSix
Definition virtio.h:48
volatile uint32_t DevFeature
Definition virtio.h:45
volatile uint32_t GuestFeatureSelect
Definition virtio.h:46
volatile uint16_t QueueSelect
Definition virtio.h:53
volatile uint64_t QueueDesc
Definition virtio.h:59
volatile uint16_t QueueSize
Definition virtio.h:54
volatile uint32_t DevFeatureSelect
Definition virtio.h:44
volatile uint8_t DeviceStatus
Definition virtio.h:50
volatile uint32_t GuestFeature
Definition virtio.h:47
volatile uint16_t QueueNotifyOff
Definition virtio.h:57
volatile uint32_t fuzz
Definition virtio.h:73
volatile uint8_t select
Definition virtio.h:65
union VirtioDeviceConfig::@11 data
volatile uint32_t res
Definition virtio.h:75
struct VirtioDeviceConfig::@11::@12 tablet_data
volatile uint32_t min
Definition virtio.h:71
volatile uint32_t max
Definition virtio.h:72
volatile uint8_t subsel
Definition virtio.h:66
volatile uint32_t flat
Definition virtio.h:74
volatile uint8_t pad[5]
Definition virtio.h:68
uint8_t str[128]
Definition virtio.h:77
volatile uint8_t size
Definition virtio.h:67
a mapped, reset-and-negotiated modern virtio-pci device. Per-device drivers build their own virtqueue...
Definition virtio.h:213
struct VirtioCommonCfg * common
Definition virtio.h:216
volatile uint8_t * isr
Definition virtio.h:217
uint32_t notifyOffMultiplier
Definition virtio.h:220
uint8_t * notifyBase
Definition virtio.h:219
int func
Definition virtio.h:215
int bus
Definition virtio.h:215
void * deviceCfg
Definition virtio.h:218
uint64_t address
Definition virtio.h:214
int dev
Definition virtio.h:215
struct VirtioAvail available
Definition virtio.h:109
struct VirtioUsed used
Definition virtio.h:110
struct VirtioBuffer buffers[64]
Definition virtio.h:108
uint32_t index
Definition virtio.h:96
uint32_t length
Definition virtio.h:97
uint16_t int_index
Definition virtio.h:104
volatile uint16_t index
Definition virtio.h:102
uint16_t flags
Definition virtio.h:101
struct VirtioRing ring[64]
Definition virtio.h:103
volatile uint16_t flags
Definition virtio.h:193
volatile uint16_t idx
Definition virtio.h:194
volatile uint16_t ring[]
Definition virtio.h:195
volatile uint16_t next
Definition virtio.h:189
volatile uint32_t len
Definition virtio.h:187
volatile uint64_t addr
Definition virtio.h:186
volatile uint16_t flags
Definition virtio.h:188
volatile uint32_t len
Definition virtio.h:200
volatile uint32_t id
Definition virtio.h:199
volatile uint16_t idx
Definition virtio.h:205
volatile uint16_t flags
Definition virtio.h:204
volatile struct VirtqUsedElem ring[]
Definition virtio.h:206
uint8_t gso_type
Definition virtio.h:130
uint16_t hdr_len
Definition virtio.h:131
uint16_t csum_offset
Definition virtio.h:134
uint8_t flags
Definition virtio.h:129
uint16_t csum_start
Definition virtio.h:133
uint16_t gso_size
Definition virtio.h:132
uint16_t padding
Definition virtio.h:135
virtio_pci_cap cap
Definition virtio.h:153
uint32_t notifer_mult_base
Definition virtio.h:154
uint8_t bar
Definition virtio.h:144
uint32_t offset
Definition virtio.h:146
uint8_t cap_len
Definition virtio.h:142
uint32_t length
Definition virtio.h:147
uint8_t cap_vndr
Definition virtio.h:140
uint8_t cap_next
Definition virtio.h:141
uint8_t cfg_type
Definition virtio.h:143
void AuVirtioKbdDown()
Definition virtiokbd.c:135
void AuVirtioPCINotifyQueue(struct VirtioPCIDevice *dev, uint16_t qidx)
AuVirtioPCINotifyQueue – kicks the device for queue qidx.
Definition virtiopci.c:268
void AuVirtioTabletInitialize(uint64_t device, int bus, int dev, int func)
AuVirtioTabletInitialize – initialize virtio tablet.
Definition virtiotablet.c:150
bool AuVirtioPCIInit(uint64_t address, int bus, int dev, int func, uint32_t wantedFeaturesLow, struct VirtioPCIDevice *out)
AuVirtioPCIInit – walks the PCI capability list of a modern virtio-pci device, maps its common/notify...
Definition virtiopci.c:98
struct _virtio_net_hdr_ virtio_net_hdr_t
uint16_t AuVirtioPCISetupQueue(struct VirtioPCIDevice *dev, uint16_t qidx, struct VirtqDesc **outDesc, struct VirtqAvailHdr **outAvail, struct VirtqUsedHdr **outUsed, uint16_t msixVector)
AuVirtioPCISetupQueue – selects queue qidx, allocates desc/avail/used rings sized to the device-repor...
Definition virtiopci.c:201
void AuVirtioNetInitialize(uint64_t device)
AuVirtioNetInitialize – initialize the virtio network device.
Definition virtionet.cpp:378
void AuVirtioTabletDown()
Definition virtiotablet.c:127
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:158