aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlfredo Dal'Ava Junior <alfredo@FreeBSD.org>2021-05-07 05:40:35 +0000
committerAlfredo Dal'Ava Junior <alfredo@FreeBSD.org>2021-05-07 05:40:35 +0000
commitfb53b42e36a9745d0a33821175a962c7a15eeeaa (patch)
tree2973a23dc23853d33056bf66353ee8ae4cf0a080
parentd5b20eaafc0bd8668e5deb8d2b4043c25df4134b (diff)
virtio-modern: fix PCI common read/write functions on big endian targets
Virtio modern has the common data organized in little endian, but on powerpc64 BE it was reading and writing in the wrong endian. Submitted by: Leonardo Bianconi <leonardo.bianconi@eldorado.org.br> Reviewed by: bryanv, alfredo Sponsored by: Eldorado Research Institute (eldorado.org.br) MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D28947
-rw-r--r--sys/dev/virtio/pci/virtio_pci_modern.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/sys/dev/virtio/pci/virtio_pci_modern.c b/sys/dev/virtio/pci/virtio_pci_modern.c
index 7029d2ff76ce..33fdebf19402 100644
--- a/sys/dev/virtio/pci/virtio_pci_modern.c
+++ b/sys/dev/virtio/pci/virtio_pci_modern.c
@@ -1315,13 +1315,15 @@ vtpci_modern_read_common_1(struct vtpci_modern_softc *sc, bus_size_t off)
static uint16_t
vtpci_modern_read_common_2(struct vtpci_modern_softc *sc, bus_size_t off)
{
- return (bus_read_2(&sc->vtpci_common_res_map.vtrm_map, off));
+ return virtio_htog16(true,
+ bus_read_2(&sc->vtpci_common_res_map.vtrm_map, off));
}
static uint32_t
vtpci_modern_read_common_4(struct vtpci_modern_softc *sc, bus_size_t off)
{
- return (bus_read_4(&sc->vtpci_common_res_map.vtrm_map, off));
+ return virtio_htog32(true,
+ bus_read_4(&sc->vtpci_common_res_map.vtrm_map, off));
}
static void
@@ -1335,14 +1337,16 @@ static void
vtpci_modern_write_common_2(struct vtpci_modern_softc *sc, bus_size_t off,
uint16_t val)
{
- bus_write_2(&sc->vtpci_common_res_map.vtrm_map, off, val);
+ bus_write_2(&sc->vtpci_common_res_map.vtrm_map,
+ off, virtio_gtoh16(true, val));
}
static void
vtpci_modern_write_common_4(struct vtpci_modern_softc *sc, bus_size_t off,
uint32_t val)
{
- bus_write_4(&sc->vtpci_common_res_map.vtrm_map, off, val);
+ bus_write_4(&sc->vtpci_common_res_map.vtrm_map,
+ off, virtio_gtoh32(true, val));
}
static void