]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c
OvmfPkg/VirtioMmioDeviceLib: virtio 1.0: Add default QueueNum
[mirror_edk2.git] / OvmfPkg / Library / VirtioMmioDeviceLib / VirtioMmioDeviceFunctions.c
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