]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/VirtioMmioDeviceLib: virtio 1.0: Add default QueueNum
authorGerd Hoffmann <kraxel@redhat.com>
Fri, 27 Aug 2021 13:44:57 +0000 (21:44 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 30 Aug 2021 01:05:49 +0000 (01:05 +0000)
Use QueueNumMax as QueueNum default for drivers which do not
explicitly call VIRTIO_DEVICE_PROTOCOL->SetQueueSize().

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h
OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c

index 0c2f99633c469a54fe4bdd06596df51830b81297..5ad951f4154a48cd181dd35b536b206a7a5b7694 100644 (file)
@@ -30,6 +30,7 @@
 typedef struct {\r
   UINT32                 Signature;\r
   UINT32                 Version;\r
+  UINT16                 QueueNum;\r
   VIRTIO_DEVICE_PROTOCOL VirtioDevice;\r
   PHYSICAL_ADDRESS       BaseAddress;\r
 } VIRTIO_MMIO_DEVICE;\r
index cb1f9358eabd029e66123c127b9221271bc11b88..436da2a2b4977915d1474ec229180a14d3fce250 100644 (file)
@@ -83,7 +83,11 @@ VirtioMmioSetQueueSize (
 \r
   Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This);\r
 \r
-  VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM, QueueSize);\r
+  if (Device->Version == VIRTIO_MMIO_DEVICE_VERSION_0_95) {\r
+    VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM, QueueSize);\r
+  } else {\r
+    Device->QueueNum = QueueSize;\r
+  }\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -171,6 +175,10 @@ VirtioMmioSetQueueSel (
 \r
   VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_SEL, Sel);\r
 \r
+  if (Device->Version == VIRTIO_MMIO_DEVICE_VERSION_0_95) {\r
+    Device->QueueNum = VIRTIO_CFG_READ (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM_MAX) & 0xFFFF;\r
+  }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -193,6 +201,8 @@ VirtioMmioSetQueueAddress (
     VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_PFN,\r
       (UINT32)((UINTN)Ring->Base >> EFI_PAGE_SHIFT));\r
   } else {\r
+    VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM, Device->QueueNum);\r
+\r
     Address = (UINTN)Ring->Base;\r
     VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_DESC_LO,\r
                       (UINT32)Address);\r