mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-28 16:14:04 +02:00
OvmfPkg/VirtioMmioDeviceLib: virtio 1.0: Add default QueueNum
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>
This commit is contained in:
parent
537a724421
commit
6a3e9576b8
@ -30,6 +30,7 @@
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
UINT32 Signature;
|
UINT32 Signature;
|
||||||
UINT32 Version;
|
UINT32 Version;
|
||||||
|
UINT16 QueueNum;
|
||||||
VIRTIO_DEVICE_PROTOCOL VirtioDevice;
|
VIRTIO_DEVICE_PROTOCOL VirtioDevice;
|
||||||
PHYSICAL_ADDRESS BaseAddress;
|
PHYSICAL_ADDRESS BaseAddress;
|
||||||
} VIRTIO_MMIO_DEVICE;
|
} VIRTIO_MMIO_DEVICE;
|
||||||
|
@ -83,7 +83,11 @@ VirtioMmioSetQueueSize (
|
|||||||
|
|
||||||
Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This);
|
Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This);
|
||||||
|
|
||||||
VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM, QueueSize);
|
if (Device->Version == VIRTIO_MMIO_DEVICE_VERSION_0_95) {
|
||||||
|
VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM, QueueSize);
|
||||||
|
} else {
|
||||||
|
Device->QueueNum = QueueSize;
|
||||||
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -171,6 +175,10 @@ VirtioMmioSetQueueSel (
|
|||||||
|
|
||||||
VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_SEL, Sel);
|
VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_SEL, Sel);
|
||||||
|
|
||||||
|
if (Device->Version == VIRTIO_MMIO_DEVICE_VERSION_0_95) {
|
||||||
|
Device->QueueNum = VIRTIO_CFG_READ (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM_MAX) & 0xFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,6 +201,8 @@ VirtioMmioSetQueueAddress (
|
|||||||
VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_PFN,
|
VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_PFN,
|
||||||
(UINT32)((UINTN)Ring->Base >> EFI_PAGE_SHIFT));
|
(UINT32)((UINTN)Ring->Base >> EFI_PAGE_SHIFT));
|
||||||
} else {
|
} else {
|
||||||
|
VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM, Device->QueueNum);
|
||||||
|
|
||||||
Address = (UINTN)Ring->Base;
|
Address = (UINTN)Ring->Base;
|
||||||
VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_DESC_LO,
|
VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_DESC_LO,
|
||||||
(UINT32)Address);
|
(UINT32)Address);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user