[virtio] Fix implementation of vpm_ioread32()

The current implementation of vpm_ioread32() erroneously reads only 16
bits of data, which fails when used with the (stricter) virtio device
emulation in VirtualBox.

Fix by using the correct readl()/inl() I/O wrappers.

Reworded-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/1028/head
Alexander Eichner 2023-08-18 13:32:15 +02:00 committed by Michael Brown
parent c1834f323f
commit 9e99a55b31
1 changed files with 2 additions and 2 deletions

View File

@ -230,10 +230,10 @@ u32 vpm_ioread32(struct virtio_pci_modern_device *vdev,
uint32_t data; uint32_t data;
switch (region->flags & VIRTIO_PCI_REGION_TYPE_MASK) { switch (region->flags & VIRTIO_PCI_REGION_TYPE_MASK) {
case VIRTIO_PCI_REGION_MEMORY: case VIRTIO_PCI_REGION_MEMORY:
data = readw(region->base + offset); data = readl(region->base + offset);
break; break;
case VIRTIO_PCI_REGION_PORT: case VIRTIO_PCI_REGION_PORT:
data = inw(region->base + offset); data = inl(region->base + offset);
break; break;
case VIRTIO_PCI_REGION_PCI_CONFIG: case VIRTIO_PCI_REGION_PCI_CONFIG:
prep_pci_cfg_cap(vdev, region, offset, 4); prep_pci_cfg_cap(vdev, region, offset, 4);