summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Eichner2023-08-18 13:32:15 +0200
committerMichael Brown2023-08-22 14:45:44 +0200
commit9e99a55b317f5da66f5110891b154084b337a031 (patch)
tree8c64b9a6b046ca90fd445197831278485a079b33
parent[dhcp] Request NTP server option (diff)
downloadipxe-9e99a55b317f5da66f5110891b154084b337a031.tar.gz
ipxe-9e99a55b317f5da66f5110891b154084b337a031.tar.xz
ipxe-9e99a55b317f5da66f5110891b154084b337a031.zip
[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>
-rw-r--r--src/drivers/bus/virtio-pci.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/drivers/bus/virtio-pci.c b/src/drivers/bus/virtio-pci.c
index 8b34c727..3fc93a90 100644
--- a/src/drivers/bus/virtio-pci.c
+++ b/src/drivers/bus/virtio-pci.c
@@ -230,10 +230,10 @@ u32 vpm_ioread32(struct virtio_pci_modern_device *vdev,
uint32_t data;
switch (region->flags & VIRTIO_PCI_REGION_TYPE_MASK) {
case VIRTIO_PCI_REGION_MEMORY:
- data = readw(region->base + offset);
+ data = readl(region->base + offset);
break;
case VIRTIO_PCI_REGION_PORT:
- data = inw(region->base + offset);
+ data = inl(region->base + offset);
break;
case VIRTIO_PCI_REGION_PCI_CONFIG:
prep_pci_cfg_cap(vdev, region, offset, 4);