diff options
Diffstat (limited to 'hw/isa-bus.c')
| -rw-r--r-- | hw/isa-bus.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/hw/isa-bus.c b/hw/isa-bus.c index 7c2c2619d0..5af790bf81 100644 --- a/hw/isa-bus.c +++ b/hw/isa-bus.c @@ -22,11 +22,6 @@ #include "isa.h" #include "exec-memory.h" -struct ISABus { - BusState qbus; - MemoryRegion *address_space_io; - qemu_irq *irqs; -}; static ISABus *isabus; target_phys_addr_t isa_mem_base = 0; @@ -56,9 +51,12 @@ ISABus *isa_bus_new(DeviceState *dev, MemoryRegion *address_space_io) return isabus; } -void isa_bus_irqs(qemu_irq *irqs) +void isa_bus_irqs(ISABus *bus, qemu_irq *irqs) { - isabus->irqs = irqs; + if (!bus) { + hw_error("Can't set isa irqs with no isa bus present."); + } + bus->irqs = irqs; } /* @@ -67,8 +65,9 @@ void isa_bus_irqs(qemu_irq *irqs) * This function is only for special cases such as the 'ferr', and * temporary use for normal devices until they are converted to qdev. */ -qemu_irq isa_get_irq(int isairq) +qemu_irq isa_get_irq(ISADevice *dev, int isairq) { + assert(!dev || DO_UPCAST(ISABus, qbus, dev->qdev.parent_bus) == isabus); if (isairq < 0 || isairq > 15) { hw_error("isa irq %d invalid", isairq); } @@ -79,7 +78,7 @@ void isa_init_irq(ISADevice *dev, qemu_irq *p, int isairq) { assert(dev->nirqs < ARRAY_SIZE(dev->isairq)); dev->isairq[dev->nirqs] = isairq; - *p = isa_get_irq(isairq); + *p = isa_get_irq(dev, isairq); dev->nirqs++; } @@ -129,35 +128,35 @@ void isa_qdev_register(ISADeviceInfo *info) qdev_register(&info->qdev); } -ISADevice *isa_create(const char *name) +ISADevice *isa_create(ISABus *bus, const char *name) { DeviceState *dev; - if (!isabus) { + if (!bus) { hw_error("Tried to create isa device %s with no isa bus present.", name); } - dev = qdev_create(&isabus->qbus, name); + dev = qdev_create(&bus->qbus, name); return DO_UPCAST(ISADevice, qdev, dev); } -ISADevice *isa_try_create(const char *name) +ISADevice *isa_try_create(ISABus *bus, const char *name) { DeviceState *dev; - if (!isabus) { + if (!bus) { hw_error("Tried to create isa device %s with no isa bus present.", name); } - dev = qdev_try_create(&isabus->qbus, name); + dev = qdev_try_create(&bus->qbus, name); return DO_UPCAST(ISADevice, qdev, dev); } -ISADevice *isa_create_simple(const char *name) +ISADevice *isa_create_simple(ISABus *bus, const char *name) { ISADevice *dev; - dev = isa_create(name); + dev = isa_create(bus, name); qdev_init_nofail(&dev->qdev); return dev; } |