]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c
OvmfPkg/Virtio: take RingBaseShift in SetQueueAddress()
[mirror_edk2.git] / OvmfPkg / VirtioPciDeviceDxe / VirtioPciFunctions.c
index d8d30f9af63d6d7638928020c0e02bae462d320a..b52060d13d97024b4fa4cc19ca0997bb5161fef8 100644 (file)
@@ -5,6 +5,7 @@
   Copyright (C) 2012, Red Hat, Inc.\r
   Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>\r
   Copyright (C) 2013, ARM Ltd.\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
@@ -122,25 +123,6 @@ VirtioPciGetDeviceFeatures (
   return Status;\r
 }\r
 \r
-EFI_STATUS\r
-EFIAPI\r
-VirtioPciGetQueueAddress (\r
-  IN  VIRTIO_DEVICE_PROTOCOL *This,\r
-  OUT UINT32                 *QueueAddress\r
-  )\r
-{\r
-  VIRTIO_PCI_DEVICE         *Dev;\r
-\r
-  if (QueueAddress == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-  Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This);\r
-\r
-  return VirtioPciIoRead (Dev, VIRTIO_PCI_OFFSET_QUEUE_ADDRESS, sizeof (UINT32),\r
-      sizeof (UINT32), QueueAddress);\r
-}\r
-\r
 EFI_STATUS\r
 EFIAPI\r
 VirtioPciGetQueueSize (\r
@@ -200,23 +182,26 @@ VirtioPciSetGuestFeatures (
 EFI_STATUS\r
 EFIAPI\r
 VirtioPciSetQueueAddress (\r
-  VIRTIO_DEVICE_PROTOCOL    *This,\r
-  UINT32                    Address\r
+  IN VIRTIO_DEVICE_PROTOCOL  *This,\r
+  IN VRING                   *Ring,\r
+  IN UINT64                  RingBaseShift\r
   )\r
 {\r
   VIRTIO_PCI_DEVICE *Dev;\r
 \r
+  ASSERT (RingBaseShift == 0);\r
+\r
   Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This);\r
 \r
   return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_QUEUE_ADDRESS, sizeof (UINT32),\r
-      Address);\r
+      (UINT32)((UINTN)Ring->Base >> EFI_PAGE_SHIFT));\r
 }\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioPciSetQueueSel (\r
-  VIRTIO_DEVICE_PROTOCOL    *This,\r
-  UINT16                    Sel\r
+  IN  VIRTIO_DEVICE_PROTOCOL    *This,\r
+  IN  UINT16                    Sel\r
   )\r
 {\r
   VIRTIO_PCI_DEVICE *Dev;\r
@@ -230,8 +215,8 @@ VirtioPciSetQueueSel (
 EFI_STATUS\r
 EFIAPI\r
 VirtioPciSetQueueAlignment (\r
-  VIRTIO_DEVICE_PROTOCOL *This,\r
-  UINT32                  Alignment\r
+  IN  VIRTIO_DEVICE_PROTOCOL *This,\r
+  IN  UINT32                  Alignment\r
   )\r
 {\r
   return EFI_SUCCESS;\r
@@ -240,8 +225,8 @@ VirtioPciSetQueueAlignment (
 EFI_STATUS\r
 EFIAPI\r
 VirtioPciSetPageSize (\r
-  VIRTIO_DEVICE_PROTOCOL *This,\r
-  UINT32                  PageSize\r
+  IN  VIRTIO_DEVICE_PROTOCOL *This,\r
+  IN  UINT32                  PageSize\r
   )\r
 {\r
   return (PageSize == EFI_PAGE_SIZE) ? EFI_SUCCESS : EFI_UNSUPPORTED;\r
@@ -250,8 +235,8 @@ VirtioPciSetPageSize (
 EFI_STATUS\r
 EFIAPI\r
 VirtioPciSetQueueNotify (\r
-  VIRTIO_DEVICE_PROTOCOL *This,\r
-  UINT16                 Index\r
+  IN  VIRTIO_DEVICE_PROTOCOL *This,\r
+  IN  UINT16                 Index\r
   )\r
 {\r
   VIRTIO_PCI_DEVICE *Dev;\r
@@ -265,8 +250,8 @@ VirtioPciSetQueueNotify (
 EFI_STATUS\r
 EFIAPI\r
 VirtioPciSetQueueSize (\r
-  VIRTIO_DEVICE_PROTOCOL *This,\r
-  UINT16                 Size\r
+  IN  VIRTIO_DEVICE_PROTOCOL *This,\r
+  IN  UINT16                 Size\r
   )\r
 {\r
   //\r
@@ -279,8 +264,8 @@ VirtioPciSetQueueSize (
 EFI_STATUS\r
 EFIAPI\r
 VirtioPciSetDeviceStatus (\r
-  VIRTIO_DEVICE_PROTOCOL *This,\r
-  UINT8                  DeviceStatus\r
+  IN  VIRTIO_DEVICE_PROTOCOL *This,\r
+  IN  UINT8                  DeviceStatus\r
   )\r
 {\r
   VIRTIO_PCI_DEVICE *Dev;\r
@@ -290,3 +275,60 @@ VirtioPciSetDeviceStatus (
   return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS,\r
       sizeof (UINT8), DeviceStatus);\r
 }\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciAllocateSharedPages (\r
+  IN  VIRTIO_DEVICE_PROTOCOL  *This,\r
+  IN  UINTN                   NumPages,\r
+  OUT VOID                    **HostAddress\r
+  )\r
+{\r
+  VOID        *Buffer;\r
+\r
+  Buffer = AllocatePages (NumPages);\r
+  if (Buffer == NULL) {\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
+\r
+  *HostAddress = Buffer;\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+VOID\r
+EFIAPI\r
+VirtioPciFreeSharedPages (\r
+  IN  VIRTIO_DEVICE_PROTOCOL  *This,\r
+  IN  UINTN                   NumPages,\r
+  IN  VOID                    *HostAddress\r
+  )\r
+{\r
+  FreePages (HostAddress, NumPages);\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciMapSharedBuffer (\r
+  IN      VIRTIO_DEVICE_PROTOCOL  *This,\r
+  IN      VIRTIO_MAP_OPERATION    Operation,\r
+  IN      VOID                    *HostAddress,\r
+  IN OUT  UINTN                   *NumberOfBytes,\r
+  OUT     EFI_PHYSICAL_ADDRESS    *DeviceAddress,\r
+  OUT     VOID                    **Mapping\r
+  )\r
+{\r
+  *DeviceAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) HostAddress;\r
+  *Mapping = NULL;\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciUnmapSharedBuffer (\r
+  IN VIRTIO_DEVICE_PROTOCOL    *This,\r
+  IN VOID                      *Mapping\r
+  )\r
+{\r
+  return EFI_SUCCESS;\r
+}\r