[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 05/11] exec: allows 8-byte accesses in subpage_op
From: |
Laszlo Ersek |
Subject: |
[Qemu-devel] [PATCH v5 05/11] exec: allows 8-byte accesses in subpage_ops |
Date: |
Wed, 17 Dec 2014 22:10:07 +0100 |
From: Paolo Bonzini <address@hidden>
Otherwise fw_cfg accesses are split into 4-byte ones before they reach the
fw_cfg ops / handlers.
Signed-off-by: Paolo Bonzini <address@hidden>
Signed-off-by: Laszlo Ersek <address@hidden>
---
Notes:
v5:
- new in v5 [reported by Laszlo, fixed by Paolo]
exec.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/exec.c b/exec.c
index 963481a..619e046 100644
--- a/exec.c
+++ b/exec.c
@@ -1767,9 +1767,9 @@ static const MemoryRegionOps watch_mem_ops = {
static uint64_t subpage_read(void *opaque, hwaddr addr,
unsigned len)
{
subpage_t *subpage = opaque;
- uint8_t buf[4];
+ uint8_t buf[8];
#if defined(DEBUG_SUBPAGE)
printf("%s: subpage %p len %u addr " TARGET_FMT_plx "\n", __func__,
subpage, len, addr);
@@ -1781,8 +1781,10 @@ static uint64_t subpage_read(void *opaque, hwaddr addr,
case 2:
return lduw_p(buf);
case 4:
return ldl_p(buf);
+ case 8:
+ return ldq_p(buf);
default:
abort();
}
}
@@ -1790,9 +1792,9 @@ static uint64_t subpage_read(void *opaque, hwaddr addr,
static void subpage_write(void *opaque, hwaddr addr,
uint64_t value, unsigned len)
{
subpage_t *subpage = opaque;
- uint8_t buf[4];
+ uint8_t buf[8];
#if defined(DEBUG_SUBPAGE)
printf("%s: subpage %p len %u addr " TARGET_FMT_plx
" value %"PRIx64"\n",
@@ -1807,8 +1809,11 @@ static void subpage_write(void *opaque, hwaddr addr,
break;
case 4:
stl_p(buf, value);
break;
+ case 8:
+ stq_p(buf, value);
+ break;
default:
abort();
}
address_space_write(subpage->as, addr + subpage->base, buf, len);
@@ -1829,8 +1834,12 @@ static bool subpage_accepts(void *opaque, hwaddr addr,
static const MemoryRegionOps subpage_ops = {
.read = subpage_read,
.write = subpage_write,
+ .impl.min_access_size = 1,
+ .impl.max_access_size = 8,
+ .valid.min_access_size = 1,
+ .valid.max_access_size = 8,
.valid.accepts = subpage_accepts,
.endianness = DEVICE_NATIVE_ENDIAN,
};
--
1.8.3.1
- [Qemu-devel] [PATCH v5 00/11] fw_cfg, bootorder, and UEFI+'-kernel' on arm/virt, Laszlo Ersek, 2014/12/17
- [Qemu-devel] [PATCH v5 02/11] fw_cfg: move boards to fw_cfg_init_io() / fw_cfg_init_mem(), Laszlo Ersek, 2014/12/17
- [Qemu-devel] [PATCH v5 03/11] fw_cfg_mem: max access size and region size are the same for data register, Laszlo Ersek, 2014/12/17
- [Qemu-devel] [PATCH v5 04/11] fw_cfg_mem: flip ctl_mem_ops and data_mem_ops to DEVICE_BIG_ENDIAN, Laszlo Ersek, 2014/12/17
- [Qemu-devel] [PATCH v5 05/11] exec: allows 8-byte accesses in subpage_ops,
Laszlo Ersek <=
- [Qemu-devel] [PATCH v5 06/11] fw_cfg_mem: introduce the "data_width" property, Laszlo Ersek, 2014/12/17
- [Qemu-devel] [PATCH v5 07/11] fw_cfg_mem: expose the "data_width" property with fw_cfg_init_mem_wide(), Laszlo Ersek, 2014/12/17
- [Qemu-devel] [PATCH v5 08/11] arm: add fw_cfg to "virt" board, Laszlo Ersek, 2014/12/17
- [Qemu-devel] [PATCH v5 09/11] hw/loader: split out load_image_gzipped_buffer(), Laszlo Ersek, 2014/12/17
- [Qemu-devel] [PATCH v5 10/11] hw/arm: pass pristine kernel image to guest firmware over fw_cfg, Laszlo Ersek, 2014/12/17
- [Qemu-devel] [PATCH v5 11/11] hw/arm/virt: enable passing of EFI-stubbed kernel to guest UEFI firmware, Laszlo Ersek, 2014/12/17
- Re: [Qemu-devel] [PATCH v5 00/11] fw_cfg, bootorder, and UEFI+'-kernel' on arm/virt, Paolo Bonzini, 2014/12/18
- Re: [Qemu-devel] [PATCH v5 00/11] fw_cfg, bootorder, and UEFI+'-kernel' on arm/virt, Gerd Hoffmann, 2014/12/19