Loading exec.c +18 −0 Original line number Diff line number Diff line Loading @@ -2587,6 +2587,24 @@ int cpu_memory_rw_debug(CPUArchState *env, target_ulong addr, } #endif #if !defined(CONFIG_USER_ONLY) /* * A helper function for the _utterly broken_ virtio device model to find out if * it's running on a big endian machine. Don't do this at home kids! */ bool virtio_is_big_endian(void); bool virtio_is_big_endian(void) { #if defined(TARGET_WORDS_BIGENDIAN) return true; #else return false; #endif } #endif #ifndef CONFIG_USER_ONLY bool cpu_physical_memory_is_io(hwaddr phys_addr) { Loading hw/virtio-pci.c +16 −1 Original line number Diff line number Diff line Loading @@ -92,6 +92,9 @@ */ #define wmb() do { } while (0) /* HACK for virtio to determine if it's running a big endian guest */ bool virtio_is_big_endian(void); /* virtio device */ /* DeviceState to VirtIOPCIProxy. For use off data-path. TODO: use QOM. */ static inline VirtIOPCIProxy *to_virtio_pci_proxy(DeviceState *d) Loading Loading @@ -400,9 +403,15 @@ static uint64_t virtio_pci_config_read(void *opaque, hwaddr addr, break; case 2: val = virtio_config_readw(proxy->vdev, addr); if (virtio_is_big_endian()) { val = bswap16(val); } break; case 4: val = virtio_config_readl(proxy->vdev, addr); if (virtio_is_big_endian()) { val = bswap32(val); } break; } return val; Loading @@ -427,9 +436,15 @@ static void virtio_pci_config_write(void *opaque, hwaddr addr, virtio_config_writeb(proxy->vdev, addr, val); break; case 2: if (virtio_is_big_endian()) { val = bswap16(val); } virtio_config_writew(proxy->vdev, addr, val); break; case 4: if (virtio_is_big_endian()) { val = bswap32(val); } virtio_config_writel(proxy->vdev, addr, val); break; } Loading @@ -442,7 +457,7 @@ static const MemoryRegionOps virtio_pci_config_ops = { .min_access_size = 1, .max_access_size = 4, }, .endianness = DEVICE_NATIVE_ENDIAN, .endianness = DEVICE_LITTLE_ENDIAN, }; static void virtio_write_config(PCIDevice *pci_dev, uint32_t address, Loading Loading
exec.c +18 −0 Original line number Diff line number Diff line Loading @@ -2587,6 +2587,24 @@ int cpu_memory_rw_debug(CPUArchState *env, target_ulong addr, } #endif #if !defined(CONFIG_USER_ONLY) /* * A helper function for the _utterly broken_ virtio device model to find out if * it's running on a big endian machine. Don't do this at home kids! */ bool virtio_is_big_endian(void); bool virtio_is_big_endian(void) { #if defined(TARGET_WORDS_BIGENDIAN) return true; #else return false; #endif } #endif #ifndef CONFIG_USER_ONLY bool cpu_physical_memory_is_io(hwaddr phys_addr) { Loading
hw/virtio-pci.c +16 −1 Original line number Diff line number Diff line Loading @@ -92,6 +92,9 @@ */ #define wmb() do { } while (0) /* HACK for virtio to determine if it's running a big endian guest */ bool virtio_is_big_endian(void); /* virtio device */ /* DeviceState to VirtIOPCIProxy. For use off data-path. TODO: use QOM. */ static inline VirtIOPCIProxy *to_virtio_pci_proxy(DeviceState *d) Loading Loading @@ -400,9 +403,15 @@ static uint64_t virtio_pci_config_read(void *opaque, hwaddr addr, break; case 2: val = virtio_config_readw(proxy->vdev, addr); if (virtio_is_big_endian()) { val = bswap16(val); } break; case 4: val = virtio_config_readl(proxy->vdev, addr); if (virtio_is_big_endian()) { val = bswap32(val); } break; } return val; Loading @@ -427,9 +436,15 @@ static void virtio_pci_config_write(void *opaque, hwaddr addr, virtio_config_writeb(proxy->vdev, addr, val); break; case 2: if (virtio_is_big_endian()) { val = bswap16(val); } virtio_config_writew(proxy->vdev, addr, val); break; case 4: if (virtio_is_big_endian()) { val = bswap32(val); } virtio_config_writel(proxy->vdev, addr, val); break; } Loading @@ -442,7 +457,7 @@ static const MemoryRegionOps virtio_pci_config_ops = { .min_access_size = 1, .max_access_size = 4, }, .endianness = DEVICE_NATIVE_ENDIAN, .endianness = DEVICE_LITTLE_ENDIAN, }; static void virtio_write_config(PCIDevice *pci_dev, uint32_t address, Loading