+ if (Device->Version == VIRTIO_MMIO_DEVICE_VERSION_0_95) {\r
+ VIRTIO_CFG_WRITE (\r
+ Device,\r
+ VIRTIO_MMIO_OFFSET_QUEUE_PFN,\r
+ (UINT32)((UINTN)Ring->Base >> EFI_PAGE_SHIFT)\r
+ );\r
+ } else {\r
+ VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM, Device->QueueNum);\r
+\r
+ Address = (UINTN)Ring->Base;\r
+ VIRTIO_CFG_WRITE (\r
+ Device,\r
+ VIRTIO_MMIO_OFFSET_QUEUE_DESC_LO,\r
+ (UINT32)Address\r
+ );\r
+ VIRTIO_CFG_WRITE (\r
+ Device,\r
+ VIRTIO_MMIO_OFFSET_QUEUE_DESC_HI,\r
+ (UINT32)RShiftU64 (Address, 32)\r
+ );\r
+\r
+ Address = (UINTN)Ring->Avail.Flags;\r
+ VIRTIO_CFG_WRITE (\r
+ Device,\r
+ VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_LO,\r
+ (UINT32)Address\r
+ );\r
+ VIRTIO_CFG_WRITE (\r
+ Device,\r
+ VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_HI,\r
+ (UINT32)RShiftU64 (Address, 32)\r
+ );\r
+\r
+ Address = (UINTN)Ring->Used.Flags;\r
+ VIRTIO_CFG_WRITE (\r
+ Device,\r
+ VIRTIO_MMIO_OFFSET_QUEUE_USED_LO,\r
+ (UINT32)Address\r
+ );\r
+ VIRTIO_CFG_WRITE (\r
+ Device,\r
+ VIRTIO_MMIO_OFFSET_QUEUE_USED_HI,\r
+ (UINT32)RShiftU64 (Address, 32)\r
+ );\r
+\r
+ VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_READY, 1);\r
+ }\r