Now that all call sites of these functions are fixed to pass non-NULL ISADevices, the ISABus can be determined from the ISADevice argument.
Patch based on https://lists.nongnu.org/archive/html/qemu-devel/2021-05/ msg05785.html. Signed-off-by: Bernhard Beschow <shen...@gmail.com> --- hw/ide/ioport.c | 4 ++-- hw/isa/isa-bus.c | 21 +++++++++++++-------- include/hw/isa/isa.h | 2 +- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/hw/ide/ioport.c b/hw/ide/ioport.c index 69e4fa15d4..112726e415 100644 --- a/hw/ide/ioport.c +++ b/hw/ide/ioport.c @@ -53,8 +53,8 @@ static const MemoryRegionPortio ide_portio2_list[] = { void isa_ide_init_ioport(IDEBus *bus, ISADevice *dev, int iobase, int iobase2) { - /* ??? Assume only ISA and PCI configurations, and that the PCI-ISA - bridge has been setup properly to always register with ISA. */ + assert(dev); + isa_register_portio_list(dev, &bus->portio_list, iobase, ide_portio_list, bus, "ide"); diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c index 9e8b5da027..5518db93cd 100644 --- a/hw/isa/isa-bus.c +++ b/hw/isa/isa-bus.c @@ -116,6 +116,10 @@ static inline void isa_init_ioport(ISADevice *dev, uint16_t ioport) void isa_register_ioport(ISADevice *dev, MemoryRegion *io, uint16_t start) { + ISABus *isabus; + + assert(dev); + isabus = isa_bus_from_device(dev); memory_region_add_subregion(isabus->address_space_io, start, io); isa_init_ioport(dev, start); } @@ -125,8 +129,13 @@ void isa_register_portio_list(ISADevice *dev, const MemoryRegionPortio *pio_start, void *opaque, const char *name) { + ISABus *isabus; + + assert(dev); assert(piolist && !piolist->owner); + isabus = isa_bus_from_device(dev); + /* START is how we should treat DEV, regardless of the actual contents of the portio array. This is how the old code actually handled e.g. the FDC device. */ @@ -246,20 +255,16 @@ static char *isabus_get_fw_dev_path(DeviceState *dev) MemoryRegion *isa_address_space(ISADevice *dev) { - if (dev) { - return isa_bus_from_device(dev)->address_space; - } + assert(dev); - return isabus->address_space; + return isa_bus_from_device(dev)->address_space; } MemoryRegion *isa_address_space_io(ISADevice *dev) { - if (dev) { - return isa_bus_from_device(dev)->address_space_io; - } + assert(dev); - return isabus->address_space_io; + return isa_bus_from_device(dev)->address_space_io; } type_init(isabus_register_types) diff --git a/include/hw/isa/isa.h b/include/hw/isa/isa.h index 8dd2953211..486851e7cb 100644 --- a/include/hw/isa/isa.h +++ b/include/hw/isa/isa.h @@ -108,7 +108,7 @@ void isa_register_ioport(ISADevice *dev, MemoryRegion *io, uint16_t start); * function makes it easy to create multiple MemoryRegions for a single * device and use the legacy portio routines. * - * @dev: the ISADevice against which these are registered; may be NULL. + * @dev: the ISADevice against which these are registered * @piolist: the PortioList associated with the io ports * @start: the base I/O port against which the portio->offset is applied. * @portio: the ports, sorted by offset. -- 2.36.1