Signed-off-by: Hervé Poussineau <hpous...@reactos.org> --- hw/isa-bridge.c | 6 ++++++ hw/isa-bus.c | 11 ++++++++++- hw/isa.h | 1 + 3 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/hw/isa-bridge.c b/hw/isa-bridge.c index 49fa033..bb2d8b0 100644 --- a/hw/isa-bridge.c +++ b/hw/isa-bridge.c @@ -42,9 +42,15 @@ static qemu_irq isabus_bridge_get_irq(ISABus *bus, int isairq) return s->irqs[isairq]; } +static MemoryRegion *isabus_bridge_get_address_space(ISABus *bus) +{ + return get_system_memory(); +} + static ISABusOps isabus_bridge_ops = { .set_irqs = isabus_bridge_set_irqs, .get_irq = isabus_bridge_get_irq, + .get_address_space = isabus_bridge_get_address_space, }; static int isabus_bridge_init(SysBusDevice *dev) diff --git a/hw/isa-bus.c b/hw/isa-bus.c index 27cffb3..03e7381 100644 --- a/hw/isa-bus.c +++ b/hw/isa-bus.c @@ -49,9 +49,15 @@ static qemu_irq isa_bus_default_get_irq(ISABus *bus, int isairq) return isa_bus_default_irqs[isairq]; } +static MemoryRegion *isa_bus_default_get_address_space(ISABus *bus) +{ + return get_system_memory(); +} + static ISABusOps isa_bus_default_ops = { .set_irqs = isa_bus_default_set_irqs, .get_irq = isa_bus_default_get_irq, + .get_address_space = isa_bus_default_get_address_space, }; ISABus *isa_bus_bridge_init(DeviceState *dev) @@ -215,6 +221,9 @@ static char *isabus_get_fw_dev_path(DeviceState *dev) MemoryRegion *isa_address_space(ISADevice *dev) { - return get_system_memory(); + if (!isabus || !isabus->ops->get_address_space) { + hw_error("Tried to get isa address space with no isa bus present."); + } + return isabus->ops->get_address_space(isabus); } diff --git a/hw/isa.h b/hw/isa.h index 129f129..22a2783 100644 --- a/hw/isa.h +++ b/hw/isa.h @@ -35,6 +35,7 @@ struct ISABus { struct ISABusOps { void (*set_irqs)(ISABus *bus, qemu_irq *irqs); qemu_irq (*get_irq)(ISABus *bus, int isairq); + MemoryRegion *(*get_address_space)(ISABus *bus); }; ISABus *isa_bus_bridge_init(DeviceState *dev); -- 1.7.5.4