From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:54277) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RAOcj-0004iI-MR for qemu-devel@nongnu.org; Sun, 02 Oct 2011 12:10:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RAOci-000848-2B for qemu-devel@nongnu.org; Sun, 02 Oct 2011 12:10:41 -0400 Received: from smtp5-g21.free.fr ([212.27.42.5]:45740) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RAOch-00083d-Ew for qemu-devel@nongnu.org; Sun, 02 Oct 2011 12:10:40 -0400 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 2 Oct 2011 18:10:15 +0200 Message-Id: <1317571828-9059-4-git-send-email-hpoussin@reactos.org> In-Reply-To: <1317571828-9059-1-git-send-email-hpoussin@reactos.org> References: <1317571828-9059-1-git-send-email-hpoussin@reactos.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v3 03/16] isa: correctly implement isa_address_space(), by calling a bus-specific function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Herv=C3=A9=20Poussineau?= This method can be used later to remove the isa_mem_base variable. Signed-off-by: Herv=C3=A9 Poussineau --- hw/isa-bridge.c | 7 +++++++ hw/isa-bus.c | 13 ++++++++++++- hw/isa.h | 6 ++++++ 3 files changed, 25 insertions(+), 1 deletions(-) diff --git a/hw/isa-bridge.c b/hw/isa-bridge.c index 6f51701..de7c46b 100644 --- a/hw/isa-bridge.c +++ b/hw/isa-bridge.c @@ -19,6 +19,7 @@ =20 #include "isa.h" #include "sysbus.h" +#include "exec-memory.h" =20 typedef struct { SysBusDevice busdev; @@ -54,11 +55,17 @@ static MemoryRegion *isa_bridge_get_io_space(ISABus *= bus) return s->io_space; } =20 +static MemoryRegion *isa_bridge_get_memory_space(ISABus *bus) +{ + return get_system_memory(); +} + static ISABusOps isabus_bridge_ops =3D { .set_irqs =3D isabus_bridge_set_irqs, .get_irq =3D isabus_bridge_get_irq, .set_io_space =3D isa_bridge_set_io_space, .get_io_space =3D isa_bridge_get_io_space, + .get_memory_space =3D isa_bridge_get_memory_space, }; =20 static int isabus_bridge_init(SysBusDevice *dev) diff --git a/hw/isa-bus.c b/hw/isa-bus.c index f8b5dcb..dd539e5 100644 --- a/hw/isa-bus.c +++ b/hw/isa-bus.c @@ -60,11 +60,17 @@ static MemoryRegion *isa_bus_default_get_io_space(ISA= Bus *bus) return isa_bus_io_space; } =20 +static MemoryRegion *isa_bus_default_get_memory_space(ISABus *bus) +{ + return get_system_memory(); +} + static ISABusOps isa_bus_default_ops =3D { .set_irqs =3D isa_bus_default_set_irqs, .get_irq =3D isa_bus_default_get_irq, .set_io_space =3D isa_bus_default_set_io_space, .get_io_space =3D isa_bus_default_get_io_space, + .get_memory_space =3D isa_bus_default_get_memory_space, }; =20 ISABus *isa_bus_bridge_init(DeviceState *dev, MemoryRegion *address_spac= e_io) @@ -247,6 +253,11 @@ static char *isabus_get_fw_dev_path(DeviceState *dev= ) =20 MemoryRegion *isa_address_space(ISADevice *dev) { - return get_system_memory(); + ISABus *bus =3D isa_bus_from_device(dev); + + if (!bus->ops->get_memory_space) { + hw_error("Tried to get isa address space on invalid isa bus."); + } + return bus->ops->get_memory_space(bus); } =20 diff --git a/hw/isa.h b/hw/isa.h index 3437199..8d439b5 100644 --- a/hw/isa.h +++ b/hw/isa.h @@ -39,6 +39,7 @@ struct ISABusOps { qemu_irq (*get_irq)(ISABus *bus, int isairq); void (*set_io_space)(ISABus *bus, MemoryRegion *address_space); MemoryRegion *(*get_io_space)(ISABus *bus); + MemoryRegion *(*get_memory_space)(ISABus *bus); }; =20 ISABus *isa_bus_bridge_init(DeviceState *dev, MemoryRegion *address_spac= e_io); @@ -56,6 +57,11 @@ ISADevice *isa_create(const char *name); ISADevice *isa_try_create(const char *name); ISADevice *isa_create_simple(const char *name); =20 +static inline ISABus *isa_bus_from_device(ISADevice *d) +{ + return FROM_QBUS(ISABus, qdev_get_parent_bus(&d->qdev)); +} + extern target_phys_addr_t isa_mem_base; =20 void isa_mmio_setup(MemoryRegion *mr, target_phys_addr_t size); --=20 1.7.6.3