Preparation to replace device_endian with MemOp. Mapping device_endian onto MemOp limits behaviour changes to this relatively smaller patch.
The next patch will replace all device_endian usages with the equivalent MemOp. That patch will be large but have no behaviour changes. A subsequent patch will then delete unused device_endian. Signed-off-by: Tony Nguyen <tony.ngu...@bt.com> Reviewed-by: Richard Henderson <richard.hender...@linaro.org> --- hw/char/serial.c | 18 ++++++------------ include/exec/cpu-common.h | 10 +++++++--- memory.c | 1 - 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/hw/char/serial.c b/hw/char/serial.c index b4aa250950..6328476f52 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -1016,22 +1016,15 @@ static void serial_mm_write(void *opaque, hwaddr addr, serial_ioport_write(s, addr >> s->it_shift, value, 1); } -static const MemoryRegionOps serial_mm_ops[3] = { - [DEVICE_NATIVE_ENDIAN] = { - .read = serial_mm_read, - .write = serial_mm_write, - .endianness = DEVICE_NATIVE_ENDIAN, - .valid.max_access_size = 8, - .impl.max_access_size = 8, - }, - [DEVICE_LITTLE_ENDIAN] = { +static const MemoryRegionOps serial_mm_ops[2] = { + [0] = { .read = serial_mm_read, .write = serial_mm_write, .endianness = DEVICE_LITTLE_ENDIAN, .valid.max_access_size = 8, .impl.max_access_size = 8, }, - [DEVICE_BIG_ENDIAN] = { + [1] = { .read = serial_mm_read, .write = serial_mm_write, .endianness = DEVICE_BIG_ENDIAN, @@ -1057,8 +1050,9 @@ SerialState *serial_mm_init(MemoryRegion *address_space, serial_realize_core(s, &error_fatal); vmstate_register(NULL, base, &vmstate_serial, s); - memory_region_init_io(&s->io, NULL, &serial_mm_ops[end], s, - "serial", 8 << it_shift); + memory_region_init_io(&s->io, NULL, + &serial_mm_ops[end == DEVICE_BIG_ENDIAN], + s, "serial", 8 << it_shift); memory_region_add_subregion(address_space, base, &s->io); return s; } diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h index f7dbe75fbc..c388453ed7 100644 --- a/include/exec/cpu-common.h +++ b/include/exec/cpu-common.h @@ -16,10 +16,14 @@ void tcg_flush_softmmu_tlb(CPUState *cs); #if !defined(CONFIG_USER_ONLY) +#include "exec/memop.h" + enum device_endian { - DEVICE_NATIVE_ENDIAN, - DEVICE_BIG_ENDIAN, - DEVICE_LITTLE_ENDIAN, +#ifdef NEED_CPU_H + DEVICE_NATIVE_ENDIAN = MO_TE, +#endif + DEVICE_BIG_ENDIAN = MO_BE, + DEVICE_LITTLE_ENDIAN = MO_LE, }; #if defined(HOST_WORDS_BIGENDIAN) diff --git a/memory.c b/memory.c index 11a9b08060..f30ce520c9 100644 --- a/memory.c +++ b/memory.c @@ -3283,7 +3283,6 @@ MemOp devend_memop(enum device_endian end) switch (end) { case DEVICE_LITTLE_ENDIAN: case DEVICE_BIG_ENDIAN: - case DEVICE_NATIVE_ENDIAN: return conv[end]; default: g_assert_not_reached(); -- 2.23.0