@@ -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)
@@ -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);
}
@@ -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);
Signed-off-by: Hervé Poussineau <hpoussin@reactos.org> --- hw/isa-bridge.c | 6 ++++++ hw/isa-bus.c | 11 ++++++++++- hw/isa.h | 1 + 3 files changed, 17 insertions(+), 1 deletions(-)