[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 11/23] memory: add backward compatibility for old
From: |
Avi Kivity |
Subject: |
[Qemu-devel] [PATCH v2 11/23] memory: add backward compatibility for old mmio registration |
Date: |
Tue, 26 Jul 2011 14:26:10 +0300 |
This eases the transition to the new API.
Reviewed-by: Anthony Liguori <address@hidden>
Signed-off-by: Avi Kivity <address@hidden>
---
memory.c | 10 ++++++++++
memory.h | 10 ++++++++++
2 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/memory.c b/memory.c
index 5f2c9ef..7dd7cac 100644
--- a/memory.c
+++ b/memory.c
@@ -14,6 +14,7 @@
#include "memory.h"
#include "exec-memory.h"
#include "ioport.h"
+#include "bitops.h"
#include <assert.h>
typedef struct AddrRange AddrRange;
@@ -506,6 +507,10 @@ static uint32_t memory_region_read_thunk_n(void *_mr,
return -1U; /* FIXME: better signalling */
}
+ if (!mr->ops->read) {
+ return mr->ops->old_mmio.read[bitops_ffsl(size)](mr->opaque, addr);
+ }
+
/* FIXME: support unaligned access */
access_size_min = mr->ops->impl.min_access_size;
@@ -542,6 +547,11 @@ static void memory_region_write_thunk_n(void *_mr,
return; /* FIXME: better signalling */
}
+ if (!mr->ops->write) {
+ mr->ops->old_mmio.write[bitops_ffsl(size)](mr->opaque, addr, data);
+ return;
+ }
+
/* FIXME: support unaligned access */
access_size_min = mr->ops->impl.min_access_size;
diff --git a/memory.h b/memory.h
index 40ab95a..003c999 100644
--- a/memory.h
+++ b/memory.h
@@ -28,6 +28,7 @@
typedef struct MemoryRegionOps MemoryRegionOps;
typedef struct MemoryRegion MemoryRegion;
typedef struct MemoryRegionPortio MemoryRegionPortio;
+typedef struct MemoryRegionMmio MemoryRegionMmio;
/* Must match *_DIRTY_FLAGS in cpu-all.h. To be replaced with dynamic
* registration.
@@ -36,6 +37,11 @@ typedef struct MemoryRegionPortio MemoryRegionPortio;
#define DIRTY_MEMORY_CODE 1
#define DIRTY_MEMORY_MIGRATION 3
+struct MemoryRegionMmio {
+ CPUReadMemoryFunc *read[3];
+ CPUWriteMemoryFunc *write[3];
+};
+
/*
* Memory region callbacks
*/
@@ -85,6 +91,10 @@ struct MemoryRegionOps {
* backwards compatibility with old portio registration
*/
const MemoryRegionPortio *old_portio;
+ /* If .read and .write are not present, old_mmio may be used for
+ * backwards compatibility with old mmio registration
+ */
+ const MemoryRegionMmio old_mmio;
};
typedef struct CoalescedMemoryRange CoalescedMemoryRange;
--
1.7.5.3
[Qemu-devel] [PATCH v2 03/23] memory: implement dirty tracking, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 10/23] memory: add backward compatibility for old portio registration, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 17/23] pc: grab system_memory, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 08/23] memory: late initialization of ram_addr, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 11/23] memory: add backward compatibility for old mmio registration,
Avi Kivity <=
[Qemu-devel] [PATCH v2 13/23] memory: separate building the final memory map into two steps, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 06/23] memory: abstract address space operations, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 14/23] memory: transaction API, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 09/23] memory: I/O address space support, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 15/23] exec.c: initialize memory map, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 05/23] Internal interfaces for memory API, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 19/23] pc: move global memory map out of pc_init1() and into its callers, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 02/23] Hierarchical memory region API, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 07/23] memory: rename MemoryRegion::has_ram_addr to ::terminates, Avi Kivity, 2011/07/26
[Qemu-devel] [PATCH v2 22/23] sysbus: add MemoryRegion based memory management API, Avi Kivity, 2011/07/26