]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg: regroup virtio config fields into generic & specific structs
authorjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 12 Oct 2012 18:53:06 +0000 (18:53 +0000)
committerjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 12 Oct 2012 18:53:06 +0000 (18:53 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13839 6f19259b-4bc3-4df7-8a09-765794883524

OvmfPkg/Include/IndustryStandard/Virtio.h
OvmfPkg/VirtioBlkDxe/VirtioBlk.c

index 600d3d272b6a1865d5a348b1a91517415b6351d0..f55994ecb1583718b2b9f0f087d586ec35ad5449 100644 (file)
@@ -96,7 +96,6 @@ typedef struct {
 \r
 //\r
 // virtio-0.9.5, 2.2.2 Virtio Header -- no MSI-X\r
-// virtio-0.9.5, Appendix D\r
 //\r
 #pragma pack(1)\r
 typedef struct {\r
@@ -108,13 +107,20 @@ typedef struct {
   UINT16 VhdrQueueNotify;\r
   UINT8  VhdrDeviceStatus;\r
   UINT8  VhdrISR;\r
-  UINT64 VhdrCapacity;\r
-  UINT32 VhdrSizeMax;\r
-  UINT32 VhdrSegMax;\r
-  UINT16 VhdrCylinders;\r
-  UINT8  VhdrHeads;\r
-  UINT8  VhdrSectors;\r
-  UINT32 VhdrBlkSize;\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
index 9969aab66fe425adee41aab5fb201adcf81bf354..178fe331a42a52e261959903c3054650cd89c1a9 100644 (file)
@@ -538,7 +538,7 @@ SynchronousRequest (
   // OK. virtio-blk's only virtqueue is #0, called "requestq" (see Appendix D).\r
   //\r
   MemoryFence();\r
-  if (EFI_ERROR (VIRTIO_CFG_WRITE (Dev, VhdrQueueNotify, 0))) {\r
+  if (EFI_ERROR (VIRTIO_CFG_WRITE (Dev, Generic.VhdrQueueNotify, 0))) {\r
     return EFI_DEVICE_ERROR;\r
   }\r
 \r
@@ -984,19 +984,19 @@ VirtioBlkInit (
   // Execute virtio-0.9.5, 2.2.1 Device Initialization Sequence.\r
   //\r
   NextDevStat = 0;             // step 1 -- reset device\r
-  Status = VIRTIO_CFG_WRITE (Dev, VhdrDeviceStatus, NextDevStat);\r
+  Status = VIRTIO_CFG_WRITE (Dev, Generic.VhdrDeviceStatus, NextDevStat);\r
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
 \r
   NextDevStat |= VSTAT_ACK;    // step 2 -- acknowledge device presence\r
-  Status = VIRTIO_CFG_WRITE (Dev, VhdrDeviceStatus, NextDevStat);\r
+  Status = VIRTIO_CFG_WRITE (Dev, Generic.VhdrDeviceStatus, NextDevStat);\r
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
 \r
   NextDevStat |= VSTAT_DRIVER; // step 3 -- we know how to drive it\r
-  Status = VIRTIO_CFG_WRITE (Dev, VhdrDeviceStatus, NextDevStat);\r
+  Status = VIRTIO_CFG_WRITE (Dev, Generic.VhdrDeviceStatus, NextDevStat);\r
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
@@ -1004,7 +1004,7 @@ VirtioBlkInit (
   //\r
   // step 4a -- retrieve and validate features\r
   //\r
-  Status = VIRTIO_CFG_READ (Dev, VhdrDeviceFeatureBits, &Features);\r
+  Status = VIRTIO_CFG_READ (Dev, Generic.VhdrDeviceFeatureBits, &Features);\r
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
@@ -1039,11 +1039,11 @@ VirtioBlkInit (
   //\r
   // step 4b -- allocate virtqueue\r
   //\r
-  Status = VIRTIO_CFG_WRITE (Dev, VhdrQueueSelect, 0);\r
+  Status = VIRTIO_CFG_WRITE (Dev, Generic.VhdrQueueSelect, 0);\r
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
-  Status = VIRTIO_CFG_READ (Dev, VhdrQueueSize, &QueueSize);\r
+  Status = VIRTIO_CFG_READ (Dev, Generic.VhdrQueueSize, &QueueSize);\r
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
@@ -1061,7 +1061,7 @@ VirtioBlkInit (
   // step 4c -- Report GPFN (guest-physical frame number) of queue. If anything\r
   // fails from here on, we must release the ring resources.\r
   //\r
-  Status = VIRTIO_CFG_WRITE (Dev, VhdrQueueAddress,\r
+  Status = VIRTIO_CFG_WRITE (Dev, Generic.VhdrQueueAddress,\r
              (UINTN) Dev->Ring.Base >> EFI_PAGE_SHIFT);\r
   if (EFI_ERROR (Status)) {\r
     goto ReleaseQueue;\r
@@ -1073,7 +1073,7 @@ VirtioBlkInit (
   // device-independent (known or unknown) VIRTIO_F_* capabilities (see\r
   // Appendix B).\r
   //\r
-  Status = VIRTIO_CFG_WRITE (Dev, VhdrGuestFeatureBits, 0);\r
+  Status = VIRTIO_CFG_WRITE (Dev, Generic.VhdrGuestFeatureBits, 0);\r
   if (EFI_ERROR (Status)) {\r
     goto ReleaseQueue;\r
   }\r
@@ -1082,7 +1082,7 @@ VirtioBlkInit (
   // step 6 -- initialization complete\r
   //\r
   NextDevStat |= VSTAT_DRIVER_OK;\r
-  Status = VIRTIO_CFG_WRITE (Dev, VhdrDeviceStatus, NextDevStat);\r
+  Status = VIRTIO_CFG_WRITE (Dev, Generic.VhdrDeviceStatus, NextDevStat);\r
   if (EFI_ERROR (Status)) {\r
     goto ReleaseQueue;\r
   }\r
@@ -1118,7 +1118,7 @@ Failed:
   // Status. PCI IO access failure here should not mask the original error.\r
   //\r
   NextDevStat |= VSTAT_FAILED;\r
-  VIRTIO_CFG_WRITE (Dev, VhdrDeviceStatus, NextDevStat);\r
+  VIRTIO_CFG_WRITE (Dev, Generic.VhdrDeviceStatus, NextDevStat);\r
 \r
   return Status; // reached only via Failed above\r
 }\r
@@ -1145,7 +1145,7 @@ VirtioBlkUninit (
   // VIRTIO_CFG_WRITE() returns, the host will have learned to stay away from\r
   // the old comms area.\r
   //\r
-  VIRTIO_CFG_WRITE (Dev, VhdrDeviceStatus, 0);\r
+  VIRTIO_CFG_WRITE (Dev, Generic.VhdrDeviceStatus, 0);\r
 \r
   VirtioRingUninit (&Dev->Ring);\r
 \r