[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 14/22] exec: implement .valid.accepts for subpages
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 14/22] exec: implement .valid.accepts for subpages |
Date: |
Fri, 24 May 2013 19:05:49 +0200 |
Signed-off-by: Paolo Bonzini <address@hidden>
---
exec.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/exec.c b/exec.c
index 519a82d..8107530 100644
--- a/exec.c
+++ b/exec.c
@@ -1555,9 +1555,29 @@ static void subpage_write(void *opaque, hwaddr addr,
io_mem_write(section->mr, addr, value, len);
}
+static bool subpage_accepts(void *opaque, hwaddr addr,
+ unsigned size, bool is_write)
+{
+ subpage_t *mmio = opaque;
+ unsigned int idx = SUBPAGE_IDX(addr);
+ MemoryRegionSection *section;
+#if defined(DEBUG_SUBPAGE)
+ printf("%s: subpage %p %c len %d addr " TARGET_FMT_plx
+ " idx %d\n", __func__, mmio,
+ is_write ? 'w' : 'r', len, addr, idx);
+#endif
+
+ section = &phys_sections[mmio->sub_section[idx]];
+ addr += mmio->base;
+ addr -= section->offset_within_address_space;
+ addr += section->offset_within_region;
+ return memory_region_access_valid(section->mr, addr, size, is_write);
+}
+
static const MemoryRegionOps subpage_ops = {
.read = subpage_read,
.write = subpage_write,
+ .valid.accepts = subpage_accepts,
.endianness = DEVICE_NATIVE_ENDIAN,
};
--
1.8.1.4
- [Qemu-devel] [PATCH 04/22] exec: make io_mem_unassigned private, (continued)
- [Qemu-devel] [PATCH 04/22] exec: make io_mem_unassigned private, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 05/22] exec: do not use error_mem_read, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 06/22] memory: dispatch unassigned accesses based on .valid.accepts, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 08/22] memory: move unassigned_mem_ops to memory.c, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 07/22] memory: add address_space_translate, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 09/22] memory: assign MemoryRegionOps to all regions, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 11/22] exec: introduce memory_access_is_direct, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 12/22] exec: introduce memory_access_size, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 10/22] exec: expect mr->ops to be initialized for ROM, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 13/22] memory: export memory_region_access_valid to exec.c, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 14/22] exec: implement .valid.accepts for subpages,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 20/22] exec: just use io_mem_read/io_mem_write for 8-byte I/O accesses, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 21/22] memory: propagate errors on I/O dispatch, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 22/22] memory: add return value to address_space_rw/read/write, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 18/22] memory: split accesses even when the old MMIO callbacks are used, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 19/22] memory: correctly handle endian-swapped 64-bit accesses, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 15/22] memory: add address_space_access_valid, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 17/22] memory: add big endian support to access_with_adjusted_size, Paolo Bonzini, 2013/05/24
- [Qemu-devel] [PATCH 16/22] memory: accept mismatching sizes in memory_region_access_valid, Paolo Bonzini, 2013/05/24
- Re: [Qemu-devel] [PATCH 00/22] Memory/IOMMU patches, part 2: unassigned access detection, Richard Henderson, 2013/05/24