//\r
// Virtio IDs\r
//\r
-#define VIRTIO_VENDOR_ID 0x1AF4\r
-#define VIRTIO_MMIO_MAGIC 0x74726976 // "virt"\r
-\r
+#define VIRTIO_VENDOR_ID 0x1AF4\r
+#define VIRTIO_MMIO_MAGIC 0x74726976 // "virt"\r
\r
//\r
// VirtIo Device Specific Configuration Offsets\r
//\r
// PCI VirtIo Header Offsets\r
//\r
-#define VIRTIO_PCI_OFFSET_DEVICE_FEATURES 0x00\r
-#define VIRTIO_PCI_OFFSET_GUEST_FEATURES 0x04\r
-#define VIRTIO_PCI_OFFSET_QUEUE_ADDRESS 0x08\r
-#define VIRTIO_PCI_OFFSET_QUEUE_SIZE 0x0C\r
-#define VIRTIO_PCI_OFFSET_QUEUE_SELECT 0x0E\r
-#define VIRTIO_PCI_OFFSET_QUEUE_NOTIFY 0x10\r
-#define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS 0x12\r
-#define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_ISR 0x13\r
+#define VIRTIO_PCI_OFFSET_DEVICE_FEATURES 0x00\r
+#define VIRTIO_PCI_OFFSET_GUEST_FEATURES 0x04\r
+#define VIRTIO_PCI_OFFSET_QUEUE_ADDRESS 0x08\r
+#define VIRTIO_PCI_OFFSET_QUEUE_SIZE 0x0C\r
+#define VIRTIO_PCI_OFFSET_QUEUE_SELECT 0x0E\r
+#define VIRTIO_PCI_OFFSET_QUEUE_NOTIFY 0x10\r
+#define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS 0x12\r
+#define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_ISR 0x13\r
\r
//\r
// MMIO VirtIo Header Offsets\r
//\r
-#define VIRTIO_MMIO_OFFSET_MAGIC 0x00\r
-#define VIRTIO_MMIO_OFFSET_VERSION 0x04\r
-#define VIRTIO_MMIO_OFFSET_DEVICE_ID 0x08\r
-#define VIRTIO_MMIO_OFFSET_VENDOR_ID 0x0C\r
-#define VIRTIO_MMIO_OFFSET_HOST_FEATURES 0x10\r
-#define VIRTIO_MMIO_OFFSET_HOST_FEATURES_SEL 0x14\r
-#define VIRTIO_MMIO_OFFSET_GUEST_FEATURES 0x20\r
-#define VIRTIO_MMIO_OFFSET_GUEST_FEATURES_SEL 0x24\r
-#define VIRTIO_MMIO_OFFSET_GUEST_PAGE_SIZE 0x28\r
-#define VIRTIO_MMIO_OFFSET_QUEUE_SEL 0x30\r
-#define VIRTIO_MMIO_OFFSET_QUEUE_NUM_MAX 0x34\r
-#define VIRTIO_MMIO_OFFSET_QUEUE_NUM 0x38\r
-#define VIRTIO_MMIO_OFFSET_QUEUE_ALIGN 0x3C\r
-#define VIRTIO_MMIO_OFFSET_QUEUE_PFN 0x40\r
-#define VIRTIO_MMIO_OFFSET_QUEUE_NOTIFY 0x50\r
-#define VIRTIO_MMIO_OFFSET_INTERRUPT_STATUS 0x60\r
-#define VIRTIO_MMIO_OFFSET_INTERRUPT_ACK 0x64\r
-#define VIRTIO_MMIO_OFFSET_STATUS 0x70\r
+#define VIRTIO_MMIO_OFFSET_MAGIC 0x00\r
+#define VIRTIO_MMIO_OFFSET_VERSION 0x04\r
+#define VIRTIO_MMIO_OFFSET_DEVICE_ID 0x08\r
+#define VIRTIO_MMIO_OFFSET_VENDOR_ID 0x0C\r
+#define VIRTIO_MMIO_OFFSET_HOST_FEATURES 0x10\r
+#define VIRTIO_MMIO_OFFSET_HOST_FEATURES_SEL 0x14\r
+#define VIRTIO_MMIO_OFFSET_GUEST_FEATURES 0x20\r
+#define VIRTIO_MMIO_OFFSET_GUEST_FEATURES_SEL 0x24\r
+#define VIRTIO_MMIO_OFFSET_GUEST_PAGE_SIZE 0x28\r
+#define VIRTIO_MMIO_OFFSET_QUEUE_SEL 0x30\r
+#define VIRTIO_MMIO_OFFSET_QUEUE_NUM_MAX 0x34\r
+#define VIRTIO_MMIO_OFFSET_QUEUE_NUM 0x38\r
+#define VIRTIO_MMIO_OFFSET_QUEUE_ALIGN 0x3C\r
+#define VIRTIO_MMIO_OFFSET_QUEUE_PFN 0x40\r
+#define VIRTIO_MMIO_OFFSET_QUEUE_NOTIFY 0x50\r
+#define VIRTIO_MMIO_OFFSET_INTERRUPT_STATUS 0x60\r
+#define VIRTIO_MMIO_OFFSET_INTERRUPT_ACK 0x64\r
+#define VIRTIO_MMIO_OFFSET_STATUS 0x70\r
\r
//\r
// Data in the communication area is defined as packed and accessed as\r
//\r
// virtio-0.9.5, 2.3.4 Available Ring\r
//\r
-#define VRING_AVAIL_F_NO_INTERRUPT BIT0\r
+#define VRING_AVAIL_F_NO_INTERRUPT BIT0\r
\r
typedef struct {\r
- volatile UINT16 *Flags;\r
- volatile UINT16 *Idx;\r
+ volatile UINT16 *Flags;\r
+ volatile UINT16 *Idx;\r
\r
- volatile UINT16 *Ring; // QueueSize elements\r
- volatile UINT16 *UsedEvent; // unused as per negotiation\r
+ volatile UINT16 *Ring; // QueueSize elements\r
+ volatile UINT16 *UsedEvent; // unused as per negotiation\r
} VRING_AVAIL;\r
\r
-\r
//\r
// virtio-0.9.5, 2.3.5 Used Ring\r
//\r
-#define VRING_USED_F_NO_NOTIFY BIT0\r
+#define VRING_USED_F_NO_NOTIFY BIT0\r
\r
#pragma pack(1)\r
typedef struct {\r
- UINT32 Id;\r
- UINT32 Len;\r
+ UINT32 Id;\r
+ UINT32 Len;\r
} VRING_USED_ELEM;\r
#pragma pack()\r
\r
typedef struct {\r
- volatile UINT16 *Flags;\r
- volatile UINT16 *Idx;\r
- volatile VRING_USED_ELEM *UsedElem; // QueueSize elements\r
- volatile UINT16 *AvailEvent; // unused as per negotiation\r
+ volatile UINT16 *Flags;\r
+ volatile UINT16 *Idx;\r
+ volatile VRING_USED_ELEM *UsedElem; // QueueSize elements\r
+ volatile UINT16 *AvailEvent; // unused as per negotiation\r
} VRING_USED;\r
\r
-\r
//\r
// virtio-0.9.5, 2.3.2 Descriptor Table\r
//\r
-#define VRING_DESC_F_NEXT BIT0 // more descriptors in this request\r
-#define VRING_DESC_F_WRITE BIT1 // buffer to be written *by the host*\r
-#define VRING_DESC_F_INDIRECT BIT2 // unused\r
+#define VRING_DESC_F_NEXT BIT0 // more descriptors in this request\r
+#define VRING_DESC_F_WRITE BIT1 // buffer to be written *by the host*\r
+#define VRING_DESC_F_INDIRECT BIT2 // unused\r
\r
#pragma pack(1)\r
typedef struct {\r
- UINT64 Addr;\r
- UINT32 Len;\r
- UINT16 Flags;\r
- UINT16 Next;\r
+ UINT64 Addr;\r
+ UINT32 Len;\r
+ UINT16 Flags;\r
+ UINT16 Next;\r
} VRING_DESC;\r
#pragma pack()\r
\r
typedef struct {\r
- UINTN NumPages;\r
- VOID *Base; // deallocate only this field\r
- volatile VRING_DESC *Desc; // QueueSize elements\r
- VRING_AVAIL Avail;\r
- VRING_USED Used;\r
- UINT16 QueueSize;\r
+ UINTN NumPages;\r
+ VOID *Base; // deallocate only this field\r
+ volatile VRING_DESC *Desc; // QueueSize elements\r
+ VRING_AVAIL Avail;\r
+ VRING_USED Used;\r
+ UINT16 QueueSize;\r
} VRING;\r
\r
//\r
// virtio-0.9.5, 2.2.2.1 Device Status\r
//\r
-#define VSTAT_ACK BIT0\r
-#define VSTAT_DRIVER BIT1\r
-#define VSTAT_DRIVER_OK BIT2\r
-#define VSTAT_FAILED BIT7\r
+#define VSTAT_ACK BIT0\r
+#define VSTAT_DRIVER BIT1\r
+#define VSTAT_DRIVER_OK BIT2\r
+#define VSTAT_FAILED BIT7\r
\r
//\r
// virtio-0.9.5, Appendix B: Reserved (Device-Independent) Feature Bits\r
//\r
-#define VIRTIO_F_NOTIFY_ON_EMPTY BIT24\r
-#define VIRTIO_F_RING_INDIRECT_DESC BIT28\r
-#define VIRTIO_F_RING_EVENT_IDX BIT29\r
-\r
+#define VIRTIO_F_NOTIFY_ON_EMPTY BIT24\r
+#define VIRTIO_F_RING_INDIRECT_DESC BIT28\r
+#define VIRTIO_F_RING_EVENT_IDX BIT29\r
\r
#endif // _VIRTIO_0_9_5_H_\r