[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 10/23] memory: add backward compatibility for old mm
From: |
Avi Kivity |
Subject: |
[Qemu-devel] [PATCH 10/23] memory: add backward compatibility for old mmio registration |
Date: |
Mon, 25 Jul 2011 17:02:51 +0300 |
This eases the transition to the new API.
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 bb04952..e4446a0 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;
@@ -499,6 +500,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;
@@ -535,6 +540,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 f026eae..4624946 100644
--- a/memory.h
+++ b/memory.h
@@ -15,6 +15,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.
@@ -23,6 +24,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
*/
@@ -72,6 +78,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
- Re: [Qemu-devel] [PATCH 01/23] Hierarchical memory region API, (continued)
- [Qemu-devel] [PATCH 09/23] memory: add backward compatibility for old portio registration, Avi Kivity, 2011/07/25
- [Qemu-devel] [PATCH 04/23] Internal interfaces for memory API, Avi Kivity, 2011/07/25
- [Qemu-devel] [PATCH 06/23] memory: rename MemoryRegion::has_ram_addr to ::terminates, Avi Kivity, 2011/07/25
- [Qemu-devel] [PATCH 18/23] pc: convert pc_memory_init() to memory API, Avi Kivity, 2011/07/25
- [Qemu-devel] [PATCH 10/23] memory: add backward compatibility for old mmio registration,
Avi Kivity <=
- [Qemu-devel] [PATCH 16/23] ioport: register ranges by byte aligned addresses always, Avi Kivity, 2011/07/25
- [Qemu-devel] [PATCH 23/23] usb-ohci: convert to MemoryRegion, Avi Kivity, 2011/07/25
- [Qemu-devel] [PATCH 22/23] sysbus: add MemoryRegion based memory management API, Avi Kivity, 2011/07/25
- [Qemu-devel] [PATCH 11/23] memory: add ioeventfd support, Avi Kivity, 2011/07/25