]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Include/IndustryStandard/Virtio.h
OvmfPkg/Virtio.h: Added the Virtio Vendor and MMIO IDs
[mirror_edk2.git] / OvmfPkg / Include / IndustryStandard / Virtio.h
index f55994ecb1583718b2b9f0f087d586ec35ad5449..9b97e6db2f62e6710f846e4480aa194368950dd9 100644 (file)
@@ -1,8 +1,10 @@
 /** @file\r
 \r
-  Type and macro definitions corresponding to the virtio-0.9.5 specification.\r
+  Generic type and macro definitions corresponding to the virtio-0.9.5\r
+  specification.\r
 \r
   Copyright (C) 2012, Red Hat, Inc.\r
+  Portion of Copyright (C) 2013, ARM Ltd.\r
 \r
   This program and the accompanying materials are licensed and made available\r
   under the terms and conditions of the BSD License which accompanies this\r
 \r
 #include <Base.h>\r
 \r
+//\r
+// VirtIo Subsystem Device IDs\r
+//\r
+#define VIRTIO_SUBSYSTEM_NETWORK_CARD       1\r
+#define VIRTIO_SUBSYSTEM_BLOCK_DEVICE       2\r
+#define VIRTIO_SUBSYSTEM_CONSOLE            3\r
+#define VIRTIO_SUBSYSTEM_ENTROPY_SOURCE     4\r
+#define VIRTIO_SUBSYSTEM_MEMORY_BALLOONING  5\r
+#define VIRTIO_SUBSYSTEM_IO_MEMORY          6\r
+#define VIRTIO_SUBSYSTEM_RPMSG              7\r
+#define VIRTIO_SUBSYSTEM_SCSI_HOST          8\r
+#define VIRTIO_SUBSYSTEM_9P_TRANSPORT       9\r
+#define VIRTIO_SUBSYSTEM_MAC80211_WLAN      10\r
+\r
+//\r
+// Virtio IDs\r
+//\r
+#define VIRTIO_VENDOR_ID                    0x1AF4\r
+#define VIRTIO_MMIO_MAGIC                   0x74726976 // "virt"\r
+\r
+\r
+//\r
+// VirtIo Device Specific Configuration Offsets\r
+//\r
+#define VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_PCI             20\r
+#define VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_PCI_WITH_MSI_X  24\r
+#define VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_MMIO            0x100\r
+\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
+\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
 \r
 //\r
 // Data in the communication area is defined as packed and accessed as\r
@@ -108,25 +171,8 @@ typedef struct {
   UINT8  VhdrDeviceStatus;\r
   UINT8  VhdrISR;\r
 } VIRTIO_HDR;\r
-\r
-//\r
-// virtio-0.9.5, Appendix D: Block Device\r
-//\r
-typedef struct {\r
-  VIRTIO_HDR Generic;\r
-  UINT64     VhdrCapacity;\r
-  UINT32     VhdrSizeMax;\r
-  UINT32     VhdrSegMax;\r
-  UINT16     VhdrCylinders;\r
-  UINT8      VhdrHeads;\r
-  UINT8      VhdrSectors;\r
-  UINT32     VhdrBlkSize;\r
-} VBLK_HDR;\r
 #pragma pack()\r
 \r
-#define OFFSET_OF_VHDR(Field) OFFSET_OF (VBLK_HDR, Field)\r
-#define SIZE_OF_VHDR(Field)   (sizeof ((VBLK_HDR *) 0)->Field)\r
-\r
 \r
 //\r
 // virtio-0.9.5, 2.2.2.1 Device Status\r
@@ -143,45 +189,5 @@ typedef struct {
 #define VIRTIO_F_RING_INDIRECT_DESC BIT28\r
 #define VIRTIO_F_RING_EVENT_IDX     BIT29\r
 \r
-//\r
-// virtio-0.9.5, Appendix D: Block Device\r
-//\r
-#define VIRTIO_BLK_F_BARRIER  BIT0\r
-#define VIRTIO_BLK_F_SIZE_MAX BIT1\r
-#define VIRTIO_BLK_F_SEG_MAX  BIT2\r
-#define VIRTIO_BLK_F_GEOMETRY BIT4\r
-#define VIRTIO_BLK_F_RO       BIT5\r
-#define VIRTIO_BLK_F_BLK_SIZE BIT6 // treated as "logical block size" in\r
-                                   // practice; actual host side implementation\r
-                                   // negotiates "optimal" block size\r
-                                   // separately\r
-#define VIRTIO_BLK_F_SCSI     BIT7\r
-#define VIRTIO_BLK_F_FLUSH    BIT9 // identical to "write cache enabled"\r
-\r
-\r
-//\r
-// We keep the status byte separate from the rest of the virtio-blk request\r
-// header. See description of historical scattering at the end of Appendix D:\r
-// we're going to put the status byte in a separate VRING_DESC.\r
-//\r
-#pragma pack(1)\r
-typedef struct {\r
-  UINT32 Type;\r
-  UINT32 IoPrio;\r
-  UINT64 Sector;\r
-} VIRTIO_BLK_REQ;\r
-#pragma pack()\r
-\r
-#define VIRTIO_BLK_T_IN           0x00000000\r
-#define VIRTIO_BLK_T_OUT          0x00000001\r
-#define VIRTIO_BLK_T_SCSI_CMD     0x00000002\r
-#define VIRTIO_BLK_T_SCSI_CMD_OUT 0x00000003\r
-#define VIRTIO_BLK_T_FLUSH        0x00000004\r
-#define VIRTIO_BLK_T_FLUSH_OUT    0x00000005\r
-#define VIRTIO_BLK_T_BARRIER      BIT31\r
-\r
-#define VIRTIO_BLK_S_OK           0x00\r
-#define VIRTIO_BLK_S_IOERR        0x01\r
-#define VIRTIO_BLK_S_UNSUPP       0x02\r
 \r
 #endif // _VIRTIO_H_\r