OvmfPkg/VirtioLib: take VirtIo instance in VirtioRingInit/VirtioRingUninit
authorBrijesh Singh <brijesh.singh@amd.com>
Wed, 23 Aug 2017 10:57:17 +0000 (06:57 -0400)
committerLaszlo Ersek <lersek@redhat.com>
Fri, 25 Aug 2017 08:42:18 +0000 (10:42 +0200)
Passing the VirtIo protocol instance will allow the vring to use
VIRTIO_DEVICE_PROTOCOL.AllocateSharedPages () to allocate vring buffer.

Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
OvmfPkg/Include/Library/VirtioLib.h
OvmfPkg/Library/VirtioLib/VirtioLib.c
OvmfPkg/VirtioBlkDxe/VirtioBlk.c
OvmfPkg/VirtioGpuDxe/Commands.c
OvmfPkg/VirtioNetDxe/SnpInitialize.c
OvmfPkg/VirtioNetDxe/SnpShutdown.c
OvmfPkg/VirtioRngDxe/VirtioRng.c
OvmfPkg/VirtioScsiDxe/VirtioScsi.c

index 660ea2767781b940126f8ad022deb0200d13f040..929e00c5f7d53cccb5b430786de92e2f195d0595 100644 (file)
@@ -35,6 +35,8 @@
   - 1.1 Virtqueues,\r
   - 2.3 Virtqueue Configuration.\r
 \r
+  @param[in]  VirtIo            The virtio device which will use the ring.\r
+\r
   @param[in]                    The number of descriptors to allocate for the\r
                                 virtio ring, as requested by the host.\r
 \r
@@ -52,8 +54,9 @@
 EFI_STATUS\r
 EFIAPI\r
 VirtioRingInit (\r
-  IN  UINT16 QueueSize,\r
-  OUT VRING  *Ring\r
+  IN  VIRTIO_DEVICE_PROTOCOL *VirtIo,\r
+  IN  UINT16                 QueueSize,\r
+  OUT VRING                  *Ring\r
   );\r
 \r
 \r
@@ -65,13 +68,16 @@ VirtioRingInit (
   invoking this function: the VSTAT_DRIVER_OK bit must be clear in\r
   VhdrDeviceStatus.\r
 \r
-  @param[out] Ring  The virtio ring to clean up.\r
+  @param[in]  VirtIo  The virtio device which was using the ring.\r
+\r
+  @param[out] Ring    The virtio ring to clean up.\r
 \r
 **/\r
 VOID\r
 EFIAPI\r
 VirtioRingUninit (\r
-  IN OUT VRING *Ring\r
+  IN     VIRTIO_DEVICE_PROTOCOL *VirtIo,\r
+  IN OUT VRING                  *Ring\r
   );\r
 \r
 \r
index 4ad38f06982612a6799801f9250e04a1d8a9a37e..78405c7d9d7d42e815d94158e6bf30d0427b3697 100644 (file)
@@ -37,6 +37,8 @@
   - 1.1 Virtqueues,\r
   - 2.3 Virtqueue Configuration.\r
 \r
+  @param[in]  VirtIo            The virtio device which will use the ring.\r
+\r
   @param[in]                    The number of descriptors to allocate for the\r
                                 virtio ring, as requested by the host.\r
 \r
@@ -54,8 +56,9 @@
 EFI_STATUS\r
 EFIAPI\r
 VirtioRingInit (\r
-  IN  UINT16 QueueSize,\r
-  OUT VRING  *Ring\r
+  IN  VIRTIO_DEVICE_PROTOCOL *VirtIo,\r
+  IN  UINT16                 QueueSize,\r
+  OUT VRING                  *Ring\r
   )\r
 {\r
   UINTN          RingSize;\r
@@ -128,13 +131,16 @@ VirtioRingInit (
   invoking this function: the VSTAT_DRIVER_OK bit must be clear in\r
   VhdrDeviceStatus.\r
 \r
-  @param[out] Ring  The virtio ring to clean up.\r
+  @param[in]  VirtIo  The virtio device which was using the ring.\r
+\r
+  @param[out] Ring    The virtio ring to clean up.\r
 \r
 **/\r
 VOID\r
 EFIAPI\r
 VirtioRingUninit (\r
-  IN OUT VRING *Ring\r
+  IN     VIRTIO_DEVICE_PROTOCOL *VirtIo,\r
+  IN OUT VRING                  *Ring\r
   )\r
 {\r
   FreePages (Ring->Base, Ring->NumPages);\r
index 3ce72281c204f611614bc9bc13a1f97d21afe9b0..61b9cab4ff02f41363340d5666e7cb3606008bba 100644 (file)
@@ -12,6 +12,7 @@
 \r
   Copyright (C) 2012, Red Hat, Inc.\r
   Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2017, AMD Inc, All rights reserved.<BR>\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
@@ -722,7 +723,7 @@ VirtioBlkInit (
     goto Failed;\r
   }\r
 \r
-  Status = VirtioRingInit (QueueSize, &Dev->Ring);\r
+  Status = VirtioRingInit (Dev->VirtIo, QueueSize, &Dev->Ring);\r
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
@@ -811,7 +812,7 @@ VirtioBlkInit (
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
-  VirtioRingUninit (&Dev->Ring);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->Ring);\r
 \r
 Failed:\r
   //\r
@@ -848,7 +849,7 @@ VirtioBlkUninit (
   //\r
   Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0);\r
 \r
-  VirtioRingUninit (&Dev->Ring);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->Ring);\r
 \r
   SetMem (&Dev->BlockIo,      sizeof Dev->BlockIo,      0x00);\r
   SetMem (&Dev->BlockIoMedia, sizeof Dev->BlockIoMedia, 0x00);\r
index 962087cfec97cdb4a42fdc9b5f0cde954e3c1409..c2e4d72feb679cd64b3d607268d2e548c714ef19 100644 (file)
@@ -3,6 +3,7 @@
   VirtIo GPU initialization, and commands (primitives) for the GPU device.\r
 \r
   Copyright (C) 2016, Red Hat, Inc.\r
+  Copyright (c) 2017, AMD Inc, All rights reserved.<BR>\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
@@ -127,7 +128,7 @@ VirtioGpuInit (
   //\r
   // [...] population of virtqueues [...]\r
   //\r
-  Status = VirtioRingInit (QueueSize, &VgpuDev->Ring);\r
+  Status = VirtioRingInit (VgpuDev->VirtIo, QueueSize, &VgpuDev->Ring);\r
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
@@ -148,7 +149,7 @@ VirtioGpuInit (
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
-  VirtioRingUninit (&VgpuDev->Ring);\r
+  VirtioRingUninit (VgpuDev->VirtIo, &VgpuDev->Ring);\r
 \r
 Failed:\r
   //\r
@@ -183,7 +184,7 @@ VirtioGpuUninit (
   // configuration.\r
   //\r
   VgpuDev->VirtIo->SetDeviceStatus (VgpuDev->VirtIo, 0);\r
-  VirtioRingUninit (&VgpuDev->Ring);\r
+  VirtioRingUninit (VgpuDev->VirtIo, &VgpuDev->Ring);\r
 }\r
 \r
 /**\r
index 430670a980f2fe7dc2033462b8b4928a8cf89fcb..6d9b81a9f9399e08c73b13f7d204c2d77d2ab472 100644 (file)
@@ -5,6 +5,7 @@
 \r
   Copyright (C) 2013, Red Hat, Inc.\r
   Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2017, AMD Inc, All rights reserved.<BR>\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
@@ -73,7 +74,7 @@ VirtioNetInitRing (
   if (QueueSize < 2) {\r
     return EFI_UNSUPPORTED;\r
   }\r
-  Status = VirtioRingInit (QueueSize, Ring);\r
+  Status = VirtioRingInit (Dev->VirtIo, QueueSize, Ring);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
@@ -103,7 +104,7 @@ VirtioNetInitRing (
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
-  VirtioRingUninit (Ring);\r
+  VirtioRingUninit (Dev->VirtIo, Ring);\r
 \r
   return Status;\r
 }\r
@@ -509,10 +510,10 @@ AbortDevice:
   Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0);\r
 \r
 ReleaseTxRing:\r
-  VirtioRingUninit (&Dev->TxRing);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->TxRing);\r
 \r
 ReleaseRxRing:\r
-  VirtioRingUninit (&Dev->RxRing);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->RxRing);\r
 \r
 DeviceFailed:\r
   //\r
index 01409c0ce714f551750cdf34c3db601c7ff6ede2..5e84191fbbdd7003cc4b3bf5d1948d53627da04e 100644 (file)
@@ -4,6 +4,7 @@
 \r
   Copyright (C) 2013, Red Hat, Inc.\r
   Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2017, AMD Inc, All rights reserved.<BR>\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
@@ -66,8 +67,8 @@ VirtioNetShutdown (
   Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0);\r
   VirtioNetShutdownRx (Dev);\r
   VirtioNetShutdownTx (Dev);\r
-  VirtioRingUninit (&Dev->TxRing);\r
-  VirtioRingUninit (&Dev->RxRing);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->TxRing);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->RxRing);\r
 \r
   Dev->Snm.State = EfiSimpleNetworkStarted;\r
   Status = EFI_SUCCESS;\r
index 1a186d04082a3d5250c8a456333bbd3e9617fad6..e20602ac722525d9d7c5a1e1f872b67730e6b910 100644 (file)
@@ -6,6 +6,7 @@
 \r
   Copyright (C) 2012, Red Hat, Inc.\r
   Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2017, AMD Inc, All rights reserved.<BR>\r
 \r
   This driver:\r
 \r
@@ -275,7 +276,7 @@ VirtioRngInit (
     goto Failed;\r
   }\r
 \r
-  Status = VirtioRingInit (QueueSize, &Dev->Ring);\r
+  Status = VirtioRingInit (Dev->VirtIo, QueueSize, &Dev->Ring);\r
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
@@ -331,7 +332,7 @@ VirtioRngInit (
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
-  VirtioRingUninit (&Dev->Ring);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->Ring);\r
 \r
 Failed:\r
   //\r
@@ -358,7 +359,7 @@ VirtioRngUninit (
   // the old comms area.\r
   //\r
   Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0);\r
-  VirtioRingUninit (&Dev->Ring);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->Ring);\r
 }\r
 \r
 //\r
index c080404330e55a941507a488b61e08626bab7601..c2f6f412ff408f2f602948a59ffbda930bc41f14 100644 (file)
@@ -27,6 +27,7 @@
 \r
   Copyright (C) 2012, Red Hat, Inc.\r
   Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2017, AMD Inc, All rights reserved.<BR>\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
@@ -832,7 +833,7 @@ VirtioScsiInit (
     goto Failed;\r
   }\r
 \r
-  Status = VirtioRingInit (QueueSize, &Dev->Ring);\r
+  Status = VirtioRingInit (Dev->VirtIo, QueueSize, &Dev->Ring);\r
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
@@ -926,7 +927,7 @@ VirtioScsiInit (
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
-  VirtioRingUninit (&Dev->Ring);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->Ring);\r
 \r
 Failed:\r
   //\r
@@ -964,7 +965,7 @@ VirtioScsiUninit (
   Dev->MaxLun         = 0;\r
   Dev->MaxSectors     = 0;\r
 \r
-  VirtioRingUninit (&Dev->Ring);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->Ring);\r
 \r
   SetMem (&Dev->PassThru,     sizeof Dev->PassThru,     0x00);\r
   SetMem (&Dev->PassThruMode, sizeof Dev->PassThruMode, 0x00);\r