diff mbox

[03/11] isa: implement isa_address_space() as a method of ISA bus

Message ID 1316357803-2366-4-git-send-email-hpoussin@reactos.org
State New
Headers show

Commit Message

Hervé Poussineau Sept. 18, 2011, 2:56 p.m. UTC
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(-)
diff mbox

Patch

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);