This patch replaces all register_ioport* with a MemoryRegion. It permits to use the new Memory stuff like listener.
For more flexibility, the IO address space is passed as an argument. Signed-off-by: Julien Grall <julien.gr...@citrix.com> --- hw/pc.h | 2 +- hw/serial.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/hw/pc.h b/hw/pc.h index 74d3369..e6135a5 100644 --- a/hw/pc.h +++ b/hw/pc.h @@ -15,7 +15,7 @@ /* serial.c */ SerialState *serial_init(int base, qemu_irq irq, int baudbase, - CharDriverState *chr); + CharDriverState *chr, MemoryRegion *system_io); SerialState *serial_mm_init(MemoryRegion *address_space, target_phys_addr_t base, int it_shift, qemu_irq irq, int baudbase, diff --git a/hw/serial.c b/hw/serial.c index c0ee55d..9e755e8 100644 --- a/hw/serial.c +++ b/hw/serial.c @@ -28,6 +28,7 @@ #include "pc.h" #include "qemu-timer.h" #include "sysemu.h" +#include "exec-memory.h" //#define DEBUG_SERIAL @@ -807,7 +808,7 @@ static const VMStateDescription vmstate_isa_serial = { }; SerialState *serial_init(int base, qemu_irq irq, int baudbase, - CharDriverState *chr) + CharDriverState *chr, MemoryRegion *system_io) { SerialState *s; @@ -820,8 +821,9 @@ SerialState *serial_init(int base, qemu_irq irq, int baudbase, vmstate_register(NULL, base, &vmstate_serial, s); - register_ioport_write(base, 8, 1, serial_ioport_write, s); - register_ioport_read(base, 8, 1, serial_ioport_read, s); + memory_region_init_io(&s->io, &serial_io_ops, s, "serial", 8); + memory_region_add_subregion(system_io, base, &s->io); + return s; } -- Julien Grall