aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2014-09-24 12:00:08 +0100
committerPeter Maydell <peter.maydell@linaro.org>2014-09-24 12:00:08 +0100
commitca976d1803a16e8f9d4a657634823a8c5b9d661a (patch)
treee28ff712eb0351ad3aac1204cd2511fc9d665353 /hw
parent01f7cecf0037997cb0e58ec0d56bf9b5a6f7cb2a (diff)
parent75bd0c7253f384e868b638db5c6350796cf584f7 (diff)
Merge remote-tracking branch 'remotes/awilliam/tags/vfio-pci-for-qemu-20140923.0' into staging
Endian updates to re-fix cross endian host and guest and enable the same for ROM loading (Alexey) # gpg: Signature made Tue 23 Sep 2014 18:03:03 BST using RSA key ID 3BB08B22 # gpg: Can't check signature: public key not found * remotes/awilliam/tags/vfio-pci-for-qemu-20140923.0: vfio: make rom read endian sensitive Revert "vfio: Make BARs native endian" Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw')
-rw-r--r--hw/misc/vfio.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c
index 40dcaa6558..d66f3d2425 100644
--- a/hw/misc/vfio.c
+++ b/hw/misc/vfio.c
@@ -1098,10 +1098,10 @@ static void vfio_bar_write(void *opaque, hwaddr addr,
buf.byte = data;
break;
case 2:
- buf.word = data;
+ buf.word = cpu_to_le16(data);
break;
case 4:
- buf.dword = data;
+ buf.dword = cpu_to_le32(data);
break;
default:
hw_error("vfio: unsupported write size, %d bytes", size);
@@ -1158,10 +1158,10 @@ static uint64_t vfio_bar_read(void *opaque,
data = buf.byte;
break;
case 2:
- data = buf.word;
+ data = le16_to_cpu(buf.word);
break;
case 4:
- data = buf.dword;
+ data = le32_to_cpu(buf.dword);
break;
default:
hw_error("vfio: unsupported read size, %d bytes", size);
@@ -1188,7 +1188,7 @@ static uint64_t vfio_bar_read(void *opaque,
static const MemoryRegionOps vfio_bar_ops = {
.read = vfio_bar_read,
.write = vfio_bar_write,
- .endianness = DEVICE_NATIVE_ENDIAN,
+ .endianness = DEVICE_LITTLE_ENDIAN,
};
static void vfio_pci_load_rom(VFIODevice *vdev)
@@ -1255,7 +1255,7 @@ static uint64_t vfio_rom_read(void *opaque, hwaddr addr, unsigned size)
uint16_t word;
uint32_t dword;
uint64_t qword;
- } buf;
+ } val;
uint64_t data = 0;
/* Load the ROM lazily when the guest tries to read it */
@@ -1263,21 +1263,21 @@ static uint64_t vfio_rom_read(void *opaque, hwaddr addr, unsigned size)
vfio_pci_load_rom(vdev);
}
- memcpy(&buf, vdev->rom + addr,
+ memcpy(&val, vdev->rom + addr,
(addr < vdev->rom_size) ? MIN(size, vdev->rom_size - addr) : 0);
switch (size) {
case 1:
- data = buf.byte;
+ data = val.byte;
break;
case 2:
- data = buf.word;
+ data = le16_to_cpu(val.word);
break;
case 4:
- data = buf.dword;
+ data = le32_to_cpu(val.dword);
break;
default:
- hw_error("vfio: unsupported read size, %d bytes", size);
+ hw_error("vfio: unsupported read size, %d bytes\n", size);
break;
}
@@ -1296,7 +1296,7 @@ static void vfio_rom_write(void *opaque, hwaddr addr,
static const MemoryRegionOps vfio_rom_ops = {
.read = vfio_rom_read,
.write = vfio_rom_write,
- .endianness = DEVICE_NATIVE_ENDIAN,
+ .endianness = DEVICE_LITTLE_ENDIAN,
};
static bool vfio_blacklist_opt_rom(VFIODevice *vdev)