]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/Virtio10Dxe: add the RingBaseShift offset
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:19 +0000 (10:42 +0200)
virtio drivers use VIRTIO_DEVICE_PROTOCOL.MapSharedBuffer() to map the
ring buffer host address to a device address. If an IOMMU is present then
RingBaseShift contains the offset from the host address.

Suggested-by: Laszlo Ersek <lersek@redhat.com>
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/Virtio10Dxe/Virtio10.c

index ef9a00710668daf041b011224a1a9cbc1ba69e7c..e9b50b6e437b268456840e8f3ab11dab34edfe15 100644 (file)
@@ -498,11 +498,10 @@ Virtio10SetQueueAddress (
   UINT64         Address;\r
   UINT16         Enable;\r
 \r
-  ASSERT (RingBaseShift == 0);\r
-\r
   Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This);\r
 \r
   Address = (UINTN)Ring->Desc;\r
+  Address += RingBaseShift;\r
   Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
              OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueDesc),\r
              sizeof Address, &Address);\r
@@ -511,6 +510,7 @@ Virtio10SetQueueAddress (
   }\r
 \r
   Address = (UINTN)Ring->Avail.Flags;\r
+  Address += RingBaseShift;\r
   Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
              OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueAvail),\r
              sizeof Address, &Address);\r
@@ -519,6 +519,7 @@ Virtio10SetQueueAddress (
   }\r
 \r
   Address = (UINTN)Ring->Used.Flags;\r
+  Address += RingBaseShift;\r
   Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE,\r
              OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueUsed),\r
              sizeof Address, &Address);\r