mirror of https://github.com/xqemu/xqemu.git
memory: add backward compatibility for old mmio registration
This eases the transition to the new API. Reviewed-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
627a0e90dc
commit
74901c3bd0
10
memory.c
10
memory.c
|
@ -14,6 +14,7 @@
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "exec-memory.h"
|
#include "exec-memory.h"
|
||||||
#include "ioport.h"
|
#include "ioport.h"
|
||||||
|
#include "bitops.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
typedef struct AddrRange AddrRange;
|
typedef struct AddrRange AddrRange;
|
||||||
|
@ -506,6 +507,10 @@ static uint32_t memory_region_read_thunk_n(void *_mr,
|
||||||
return -1U; /* FIXME: better signalling */
|
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 */
|
/* FIXME: support unaligned access */
|
||||||
|
|
||||||
access_size_min = mr->ops->impl.min_access_size;
|
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 */
|
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 */
|
/* FIXME: support unaligned access */
|
||||||
|
|
||||||
access_size_min = mr->ops->impl.min_access_size;
|
access_size_min = mr->ops->impl.min_access_size;
|
||||||
|
|
10
memory.h
10
memory.h
|
@ -28,6 +28,7 @@
|
||||||
typedef struct MemoryRegionOps MemoryRegionOps;
|
typedef struct MemoryRegionOps MemoryRegionOps;
|
||||||
typedef struct MemoryRegion MemoryRegion;
|
typedef struct MemoryRegion MemoryRegion;
|
||||||
typedef struct MemoryRegionPortio MemoryRegionPortio;
|
typedef struct MemoryRegionPortio MemoryRegionPortio;
|
||||||
|
typedef struct MemoryRegionMmio MemoryRegionMmio;
|
||||||
|
|
||||||
/* Must match *_DIRTY_FLAGS in cpu-all.h. To be replaced with dynamic
|
/* Must match *_DIRTY_FLAGS in cpu-all.h. To be replaced with dynamic
|
||||||
* registration.
|
* registration.
|
||||||
|
@ -36,6 +37,11 @@ typedef struct MemoryRegionPortio MemoryRegionPortio;
|
||||||
#define DIRTY_MEMORY_CODE 1
|
#define DIRTY_MEMORY_CODE 1
|
||||||
#define DIRTY_MEMORY_MIGRATION 3
|
#define DIRTY_MEMORY_MIGRATION 3
|
||||||
|
|
||||||
|
struct MemoryRegionMmio {
|
||||||
|
CPUReadMemoryFunc *read[3];
|
||||||
|
CPUWriteMemoryFunc *write[3];
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Memory region callbacks
|
* Memory region callbacks
|
||||||
*/
|
*/
|
||||||
|
@ -85,6 +91,10 @@ struct MemoryRegionOps {
|
||||||
* backwards compatibility with old portio registration
|
* backwards compatibility with old portio registration
|
||||||
*/
|
*/
|
||||||
const MemoryRegionPortio *old_portio;
|
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;
|
typedef struct CoalescedMemoryRange CoalescedMemoryRange;
|
||||||
|
|
Loading…
Reference in New Issue