]> git.proxmox.com Git - mirror_edk2.git/commitdiff
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
   - 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
   @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
 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
   );\r
 \r
 \r
@@ -65,13 +68,16 @@ VirtioRingInit (
   invoking this function: the VSTAT_DRIVER_OK bit must be clear in\r
   VhdrDeviceStatus.\r
 \r
   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
 \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
   );\r
 \r
 \r
index 4ad38f06982612a6799801f9250e04a1d8a9a37e..78405c7d9d7d42e815d94158e6bf30d0427b3697 100644 (file)
@@ -37,6 +37,8 @@
   - 1.1 Virtqueues,\r
   - 2.3 Virtqueue Configuration.\r
 \r
   - 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
   @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
 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
   )\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
   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
 \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
   )\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
 \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
 \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
     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
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
@@ -811,7 +812,7 @@ VirtioBlkInit (
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
-  VirtioRingUninit (&Dev->Ring);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->Ring);\r
 \r
 Failed:\r
   //\r
 \r
 Failed:\r
   //\r
@@ -848,7 +849,7 @@ VirtioBlkUninit (
   //\r
   Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0);\r
 \r
   //\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
 \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
   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
 \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
   //\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
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
@@ -148,7 +149,7 @@ VirtioGpuInit (
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
-  VirtioRingUninit (&VgpuDev->Ring);\r
+  VirtioRingUninit (VgpuDev->VirtIo, &VgpuDev->Ring);\r
 \r
 Failed:\r
   //\r
 \r
 Failed:\r
   //\r
@@ -183,7 +184,7 @@ VirtioGpuUninit (
   // configuration.\r
   //\r
   VgpuDev->VirtIo->SetDeviceStatus (VgpuDev->VirtIo, 0);\r
   // configuration.\r
   //\r
   VgpuDev->VirtIo->SetDeviceStatus (VgpuDev->VirtIo, 0);\r
-  VirtioRingUninit (&VgpuDev->Ring);\r
+  VirtioRingUninit (VgpuDev->VirtIo, &VgpuDev->Ring);\r
 }\r
 \r
 /**\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
 \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
 \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
   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
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
@@ -103,7 +104,7 @@ VirtioNetInitRing (
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
-  VirtioRingUninit (Ring);\r
+  VirtioRingUninit (Dev->VirtIo, Ring);\r
 \r
   return Status;\r
 }\r
 \r
   return Status;\r
 }\r
@@ -509,10 +510,10 @@ AbortDevice:
   Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0);\r
 \r
 ReleaseTxRing:\r
   Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0);\r
 \r
 ReleaseTxRing:\r
-  VirtioRingUninit (&Dev->TxRing);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->TxRing);\r
 \r
 ReleaseRxRing:\r
 \r
 ReleaseRxRing:\r
-  VirtioRingUninit (&Dev->RxRing);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->RxRing);\r
 \r
 DeviceFailed:\r
   //\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
 \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
 \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
   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
 \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
 \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
 \r
   This driver:\r
 \r
@@ -275,7 +276,7 @@ VirtioRngInit (
     goto Failed;\r
   }\r
 \r
     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
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
@@ -331,7 +332,7 @@ VirtioRngInit (
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
-  VirtioRingUninit (&Dev->Ring);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->Ring);\r
 \r
 Failed:\r
   //\r
 \r
 Failed:\r
   //\r
@@ -358,7 +359,7 @@ VirtioRngUninit (
   // the old comms area.\r
   //\r
   Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0);\r
   // 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
 }\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
 \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
 \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
     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
   if (EFI_ERROR (Status)) {\r
     goto Failed;\r
   }\r
@@ -926,7 +927,7 @@ VirtioScsiInit (
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
   return EFI_SUCCESS;\r
 \r
 ReleaseQueue:\r
-  VirtioRingUninit (&Dev->Ring);\r
+  VirtioRingUninit (Dev->VirtIo, &Dev->Ring);\r
 \r
 Failed:\r
   //\r
 \r
 Failed:\r
   //\r
@@ -964,7 +965,7 @@ VirtioScsiUninit (
   Dev->MaxLun         = 0;\r
   Dev->MaxSectors     = 0;\r
 \r
   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
 \r
   SetMem (&Dev->PassThru,     sizeof Dev->PassThru,     0x00);\r
   SetMem (&Dev->PassThruMode, sizeof Dev->PassThruMode, 0x00);\r