Similarly to sysbus_has_mmio() and sysbus_mmio_get_region(), add sysbus_has_pio() and sysbus_pio_get_address() for PIO.
Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- include/hw/sysbus.h | 2 ++ hw/core/sysbus.c | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h index 69eb62e29c8..07a307b5ca0 100644 --- a/include/hw/sysbus.h +++ b/include/hw/sysbus.h @@ -71,6 +71,7 @@ typedef void FindSysbusDeviceFunc(SysBusDevice *sbdev, void *opaque); void sysbus_init_mmio(SysBusDevice *dev, MemoryRegion *memory); MemoryRegion *sysbus_mmio_get_region(const SysBusDevice *dev, int n); +uint32_t sysbus_pio_get_address(const SysBusDevice *dev, int n); void sysbus_init_irq(SysBusDevice *dev, qemu_irq *p); void sysbus_pass_irq(SysBusDevice *dev, SysBusDevice *target); void sysbus_init_ioports(SysBusDevice *dev, uint32_t ioport, uint32_t size); @@ -78,6 +79,7 @@ void sysbus_init_ioports(SysBusDevice *dev, uint32_t ioport, uint32_t size); bool sysbus_has_irq(const SysBusDevice *dev, int n); bool sysbus_has_mmio(const SysBusDevice *dev, unsigned int n); +bool sysbus_has_pio(const SysBusDevice *dev, unsigned int n); void sysbus_connect_irq(SysBusDevice *dev, int n, qemu_irq irq); bool sysbus_is_irq_connected(const SysBusDevice *dev, int n); qemu_irq sysbus_get_connected_irq(const SysBusDevice *dev, int n); diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c index d33be6b2b52..1dbc345a3ef 100644 --- a/hw/core/sysbus.c +++ b/hw/core/sysbus.c @@ -206,6 +206,17 @@ void sysbus_init_ioports(SysBusDevice *dev, uint32_t ioport, uint32_t size) } } +bool sysbus_has_pio(const SysBusDevice *dev, unsigned int n) +{ + return (n < dev->num_pio); +} + +uint32_t sysbus_pio_get_address(const SysBusDevice *dev, int n) +{ + assert(n >= 0 && n < QDEV_MAX_PIO); + return dev->pio[n]; +} + /* The purpose of preserving this empty realize function * is to prevent the parent_realize field of some subclasses * from being set to NULL to break the normal init/realize -- 2.51.0
