From: Anthony Liguori <anthony@codemonkey.ws>
To: "Hervé Poussineau" <hpoussin@reactos.org>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 01/11] isa: give ISABus/ISADevice to isa_create(), isa_bus_irqs() and isa_get_irq() functions
Date: Mon, 12 Dec 2011 10:38:43 -0600 [thread overview]
Message-ID: <4EE62E13.6040909@codemonkey.ws> (raw)
In-Reply-To: <1319487505-5915-2-git-send-email-hpoussin@reactos.org>
On 10/24/2011 03:18 PM, Hervé Poussineau wrote:
> NULL is a valid bus/device, so there is no change in behaviour.
>
> Signed-off-by: Hervé Poussineau<hpoussin@reactos.org>
Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>
Regards,
Anthony Liguori
> ---
> arch_init.c | 8 ++++----
> arch_init.h | 2 +-
> hw/adlib.c | 2 +-
> hw/alpha_dp264.c | 10 ++++++----
> hw/alpha_typhoon.c | 7 ++++---
> hw/audiodev.h | 8 ++++----
> hw/cs4231a.c | 4 ++--
> hw/fdc.h | 4 ++--
> hw/gus.c | 4 ++--
> hw/i8254.c | 2 +-
> hw/i8259.c | 6 +++---
> hw/ide.h | 2 +-
> hw/ide/isa.c | 4 ++--
> hw/ide/piix.c | 2 +-
> hw/ide/via.c | 2 +-
> hw/isa-bus.c | 18 +++++++++++-------
> hw/isa.h | 10 +++++-----
> hw/m48t59.c | 5 +++--
> hw/mc146818rtc.c | 4 ++--
> hw/mc146818rtc.h | 2 +-
> hw/mips_fulong2e.c | 16 +++++++++-------
> hw/mips_jazz.c | 13 +++++++------
> hw/mips_malta.c | 26 ++++++++++++++------------
> hw/mips_r4k.c | 21 +++++++++++----------
> hw/nvram.h | 3 ++-
> hw/pc.c | 30 +++++++++++++++---------------
> hw/pc.h | 35 ++++++++++++++++++-----------------
> hw/pc_piix.c | 19 +++++++++++--------
> hw/pcspk.c | 2 +-
> hw/ppc_prep.c | 20 +++++++++++---------
> hw/sb16.c | 4 ++--
> hw/sun4u.c | 20 ++++++++++++--------
> qemu-common.h | 1 +
> 33 files changed, 171 insertions(+), 145 deletions(-)
>
> diff --git a/arch_init.c b/arch_init.c
> index a411fdf..3bc2a41 100644
> --- a/arch_init.c
> +++ b/arch_init.c
> @@ -473,7 +473,7 @@ struct soundhw {
> int enabled;
> int isa;
> union {
> - int (*init_isa) (qemu_irq *pic);
> + int (*init_isa) (ISABus *bus, qemu_irq *pic);
> int (*init_pci) (PCIBus *bus);
> } init;
> };
> @@ -628,7 +628,7 @@ void select_soundhw(const char *optarg)
> }
> }
>
> -void audio_init(qemu_irq *isa_pic, PCIBus *pci_bus)
> +void audio_init(ISABus *isa_bus, qemu_irq *isa_pic, PCIBus *pci_bus)
> {
> struct soundhw *c;
>
> @@ -636,7 +636,7 @@ void audio_init(qemu_irq *isa_pic, PCIBus *pci_bus)
> if (c->enabled) {
> if (c->isa) {
> if (isa_pic) {
> - c->init.init_isa(isa_pic);
> + c->init.init_isa(isa_bus, isa_pic);
> }
> } else {
> if (pci_bus) {
> @@ -650,7 +650,7 @@ void audio_init(qemu_irq *isa_pic, PCIBus *pci_bus)
> void select_soundhw(const char *optarg)
> {
> }
> -void audio_init(qemu_irq *isa_pic, PCIBus *pci_bus)
> +void audio_init(ISABus *isa_bus, qemu_irq *isa_pic, PCIBus *pci_bus)
> {
> }
> #endif
> diff --git a/arch_init.h b/arch_init.h
> index a74187a..074f02a 100644
> --- a/arch_init.h
> +++ b/arch_init.h
> @@ -27,7 +27,7 @@ void do_acpitable_option(const char *optarg);
> void do_smbios_option(const char *optarg);
> void cpudef_init(void);
> int audio_available(void);
> -void audio_init(qemu_irq *isa_pic, PCIBus *pci_bus);
> +void audio_init(ISABus *isa_bus, qemu_irq *isa_pic, PCIBus *pci_bus);
> int tcg_available(void);
> int kvm_available(void);
> int xen_available(void);
> diff --git a/hw/adlib.c b/hw/adlib.c
> index e4bfcc6..b5e1564 100644
> --- a/hw/adlib.c
> +++ b/hw/adlib.c
> @@ -275,7 +275,7 @@ static void Adlib_fini (AdlibState *s)
> AUD_remove_card (&s->card);
> }
>
> -int Adlib_init (qemu_irq *pic)
> +int Adlib_init (ISABus *bus, qemu_irq *pic)
> {
> AdlibState *s =&glob_adlib;
> struct audsettings as;
> diff --git a/hw/alpha_dp264.c b/hw/alpha_dp264.c
> index fcc20e9..a87d6ef 100644
> --- a/hw/alpha_dp264.c
> +++ b/hw/alpha_dp264.c
> @@ -50,6 +50,7 @@ static void clipper_init(ram_addr_t ram_size,
> {
> CPUState *cpus[4];
> PCIBus *pci_bus;
> + ISABus *isa_bus;
> qemu_irq rtc_irq;
> long size, i;
> const char *palcode_filename;
> @@ -68,10 +69,11 @@ static void clipper_init(ram_addr_t ram_size,
>
> /* Init the chipset. */
> pci_bus = typhoon_init(ram_size,&rtc_irq, cpus, clipper_pci_map_irq);
> + isa_bus = NULL;
>
> - rtc_init(1980, rtc_irq);
> - pit_init(0x40, 0);
> - isa_create_simple("i8042");
> + rtc_init(isa_bus, 1980, rtc_irq);
> + pit_init(isa_bus, 0x40, 0);
> + isa_create_simple(isa_bus, "i8042");
>
> /* VGA setup. Don't bother loading the bios. */
> alpha_pci_vga_setup(pci_bus);
> @@ -79,7 +81,7 @@ static void clipper_init(ram_addr_t ram_size,
> /* Serial code setup. */
> for (i = 0; i< MAX_SERIAL_PORTS; ++i) {
> if (serial_hds[i]) {
> - serial_isa_init(i, serial_hds[i]);
> + serial_isa_init(isa_bus, i, serial_hds[i]);
> }
> }
>
> diff --git a/hw/alpha_typhoon.c b/hw/alpha_typhoon.c
> index c7608bb..113837d 100644
> --- a/hw/alpha_typhoon.c
> +++ b/hw/alpha_typhoon.c
> @@ -791,11 +791,12 @@ PCIBus *typhoon_init(ram_addr_t ram_size, qemu_irq *p_rtc_irq,
> /* ??? Technically there should be a cy82c693ub pci-isa bridge. */
> {
> qemu_irq isa_pci_irq, *isa_irqs;
> + ISABus *isa_bus;
>
> - isa_bus_new(NULL, addr_space_io);
> + isa_bus = isa_bus_new(NULL, addr_space_io);
> isa_pci_irq = *qemu_allocate_irqs(typhoon_set_isa_irq, s, 1);
> - isa_irqs = i8259_init(isa_pci_irq);
> - isa_bus_irqs(isa_irqs);
> + isa_irqs = i8259_init(isa_bus, isa_pci_irq);
> + isa_bus_irqs(isa_bus, isa_irqs);
> }
>
> return b;
> diff --git a/hw/audiodev.h b/hw/audiodev.h
> index 8e930b2..9aac3bc 100644
> --- a/hw/audiodev.h
> +++ b/hw/audiodev.h
> @@ -2,19 +2,19 @@
> int es1370_init(PCIBus *bus);
>
> /* sb16.c */
> -int SB16_init(qemu_irq *pic);
> +int SB16_init(ISABus *bus, qemu_irq *pic);
>
> /* adlib.c */
> -int Adlib_init(qemu_irq *pic);
> +int Adlib_init(ISABus *bus, qemu_irq *pic);
>
> /* gus.c */
> -int GUS_init(qemu_irq *pic);
> +int GUS_init(ISABus *bus, qemu_irq *pic);
>
> /* ac97.c */
> int ac97_init(PCIBus *buf);
>
> /* cs4231a.c */
> -int cs4231a_init(qemu_irq *pic);
> +int cs4231a_init(ISABus *bus, qemu_irq *pic);
>
> /* intel-hda.c + hda-audio.c */
> int intel_hda_and_codec_init(PCIBus *bus);
> diff --git a/hw/cs4231a.c b/hw/cs4231a.c
> index a7e03a3..0238829 100644
> --- a/hw/cs4231a.c
> +++ b/hw/cs4231a.c
> @@ -659,9 +659,9 @@ static int cs4231a_initfn (ISADevice *dev)
> return 0;
> }
>
> -int cs4231a_init (qemu_irq *pic)
> +int cs4231a_init (ISABus *bus, qemu_irq *pic)
> {
> - isa_create_simple ("cs4231a");
> + isa_create_simple (bus, "cs4231a");
> return 0;
> }
>
> diff --git a/hw/fdc.h b/hw/fdc.h
> index 09f73c6..30bd56e 100644
> --- a/hw/fdc.h
> +++ b/hw/fdc.h
> @@ -7,11 +7,11 @@
> /* fdc.c */
> #define MAX_FD 2
>
> -static inline void fdctrl_init_isa(DriveInfo **fds)
> +static inline void fdctrl_init_isa(ISABus *bus, DriveInfo **fds)
> {
> ISADevice *dev;
>
> - dev = isa_try_create("isa-fdc");
> + dev = isa_try_create(bus, "isa-fdc");
> if (!dev) {
> return;
> }
> diff --git a/hw/gus.c b/hw/gus.c
> index b5eb548..17cceee 100644
> --- a/hw/gus.c
> +++ b/hw/gus.c
> @@ -293,9 +293,9 @@ static int gus_initfn (ISADevice *dev)
> return 0;
> }
>
> -int GUS_init (qemu_irq *pic)
> +int GUS_init (ISABus *bus, qemu_irq *pic)
> {
> - isa_create_simple ("gus");
> + isa_create_simple (bus, "gus");
> return 0;
> }
>
> diff --git a/hw/i8254.c b/hw/i8254.c
> index 12571ef..cf9ed2f 100644
> --- a/hw/i8254.c
> +++ b/hw/i8254.c
> @@ -525,7 +525,7 @@ static int pit_initfn(ISADevice *dev)
> s =&pit->channels[0];
> /* the timer 0 is connected to an IRQ */
> s->irq_timer = qemu_new_timer_ns(vm_clock, pit_irq_timer, s);
> - s->irq = isa_get_irq(pit->irq);
> + s->irq = isa_get_irq(dev, pit->irq);
>
> memory_region_init_io(&pit->ioports,&pit_ioport_ops, pit, "pit", 4);
> isa_register_ioport(dev,&pit->ioports, pit->iobase);
> diff --git a/hw/i8259.c b/hw/i8259.c
> index ab519de..4446339 100644
> --- a/hw/i8259.c
> +++ b/hw/i8259.c
> @@ -518,7 +518,7 @@ void irq_info(Monitor *mon)
> #endif
> }
>
> -qemu_irq *i8259_init(qemu_irq parent_irq)
> +qemu_irq *i8259_init(ISABus *bus, qemu_irq parent_irq)
> {
> qemu_irq *irq_set;
> ISADevice *dev;
> @@ -526,7 +526,7 @@ qemu_irq *i8259_init(qemu_irq parent_irq)
>
> irq_set = g_malloc(ISA_NUM_IRQS * sizeof(qemu_irq));
>
> - dev = isa_create("isa-i8259");
> + dev = isa_create(bus, "isa-i8259");
> qdev_prop_set_uint32(&dev->qdev, "iobase", 0x20);
> qdev_prop_set_uint32(&dev->qdev, "elcr_addr", 0x4d0);
> qdev_prop_set_uint8(&dev->qdev, "elcr_mask", 0xf8);
> @@ -540,7 +540,7 @@ qemu_irq *i8259_init(qemu_irq parent_irq)
>
> isa_pic = DO_UPCAST(PicState, dev, dev);
>
> - dev = isa_create("isa-i8259");
> + dev = isa_create(bus, "isa-i8259");
> qdev_prop_set_uint32(&dev->qdev, "iobase", 0xa0);
> qdev_prop_set_uint32(&dev->qdev, "elcr_addr", 0x4d1);
> qdev_prop_set_uint8(&dev->qdev, "elcr_mask", 0xde);
> diff --git a/hw/ide.h b/hw/ide.h
> index 9059aae..7075170 100644
> --- a/hw/ide.h
> +++ b/hw/ide.h
> @@ -7,7 +7,7 @@
> #define MAX_IDE_DEVS 2
>
> /* ide-isa.c */
> -ISADevice *isa_ide_init(int iobase, int iobase2, int isairq,
> +ISADevice *isa_ide_init(ISABus *bus, int iobase, int iobase2, int isairq,
> DriveInfo *hd0, DriveInfo *hd1);
>
> /* ide-pci.c */
> diff --git a/hw/ide/isa.c b/hw/ide/isa.c
> index 01a9e59..219f3a4 100644
> --- a/hw/ide/isa.c
> +++ b/hw/ide/isa.c
> @@ -73,13 +73,13 @@ static int isa_ide_initfn(ISADevice *dev)
> return 0;
> };
>
> -ISADevice *isa_ide_init(int iobase, int iobase2, int isairq,
> +ISADevice *isa_ide_init(ISABus *bus, int iobase, int iobase2, int isairq,
> DriveInfo *hd0, DriveInfo *hd1)
> {
> ISADevice *dev;
> ISAIDEState *s;
>
> - dev = isa_create("isa-ide");
> + dev = isa_create(bus, "isa-ide");
> qdev_prop_set_uint32(&dev->qdev, "iobase", iobase);
> qdev_prop_set_uint32(&dev->qdev, "iobase2", iobase2);
> qdev_prop_set_uint32(&dev->qdev, "irq", isairq);
> diff --git a/hw/ide/piix.c b/hw/ide/piix.c
> index 08cbbe2..3473345 100644
> --- a/hw/ide/piix.c
> +++ b/hw/ide/piix.c
> @@ -136,7 +136,7 @@ static void pci_piix_init_ports(PCIIDEState *d) {
> ide_bus_new(&d->bus[i],&d->dev.qdev, i);
> ide_init_ioport(&d->bus[i], NULL, port_info[i].iobase,
> port_info[i].iobase2);
> - ide_init2(&d->bus[i], isa_get_irq(port_info[i].isairq));
> + ide_init2(&d->bus[i], isa_get_irq(NULL, port_info[i].isairq));
>
> bmdma_init(&d->bus[i],&d->bmdma[i], d);
> d->bmdma[i].bus =&d->bus[i];
> diff --git a/hw/ide/via.c b/hw/ide/via.c
> index 098f150..d4af968 100644
> --- a/hw/ide/via.c
> +++ b/hw/ide/via.c
> @@ -160,7 +160,7 @@ static void vt82c686b_init_ports(PCIIDEState *d) {
> ide_bus_new(&d->bus[i],&d->dev.qdev, i);
> ide_init_ioport(&d->bus[i], NULL, port_info[i].iobase,
> port_info[i].iobase2);
> - ide_init2(&d->bus[i], isa_get_irq(port_info[i].isairq));
> + ide_init2(&d->bus[i], isa_get_irq(NULL, port_info[i].isairq));
>
> bmdma_init(&d->bus[i],&d->bmdma[i], d);
> d->bmdma[i].bus =&d->bus[i];
> diff --git a/hw/isa-bus.c b/hw/isa-bus.c
> index 7c2c261..dcbb134 100644
> --- a/hw/isa-bus.c
> +++ b/hw/isa-bus.c
> @@ -56,8 +56,9 @@ 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)
> {
> + assert(!bus || bus == isabus);
> isabus->irqs = irqs;
> }
>
> @@ -67,8 +68,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 +81,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,10 +131,11 @@ 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;
>
> + assert(!bus || bus == isabus);
> if (!isabus) {
> hw_error("Tried to create isa device %s with no isa bus present.",
> name);
> @@ -141,10 +144,11 @@ ISADevice *isa_create(const char *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;
>
> + assert(!bus || bus == isabus);
> if (!isabus) {
> hw_error("Tried to create isa device %s with no isa bus present.",
> name);
> @@ -153,11 +157,11 @@ ISADevice *isa_try_create(const char *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;
> }
> diff --git a/hw/isa.h b/hw/isa.h
> index 5eb9c78..4b58e37 100644
> --- a/hw/isa.h
> +++ b/hw/isa.h
> @@ -27,14 +27,14 @@ struct ISADeviceInfo {
> };
>
> ISABus *isa_bus_new(DeviceState *dev, MemoryRegion *address_space_io);
> -void isa_bus_irqs(qemu_irq *irqs);
> -qemu_irq isa_get_irq(int isairq);
> +void isa_bus_irqs(ISABus *bus, qemu_irq *irqs);
> +qemu_irq isa_get_irq(ISADevice *dev, int isairq);
> void isa_init_irq(ISADevice *dev, qemu_irq *p, int isairq);
> void isa_qdev_register(ISADeviceInfo *info);
> MemoryRegion *isa_address_space(ISADevice *dev);
> -ISADevice *isa_create(const char *name);
> -ISADevice *isa_try_create(const char *name);
> -ISADevice *isa_create_simple(const char *name);
> +ISADevice *isa_create(ISABus *bus, const char *name);
> +ISADevice *isa_try_create(ISABus *bus, const char *name);
> +ISADevice *isa_create_simple(ISABus *bus, const char *name);
>
> /**
> * isa_register_ioport: Install an I/O port region on the ISA bus.
> diff --git a/hw/m48t59.c b/hw/m48t59.c
> index f318e67..6ef812c 100644
> --- a/hw/m48t59.c
> +++ b/hw/m48t59.c
> @@ -665,13 +665,14 @@ M48t59State *m48t59_init(qemu_irq IRQ, target_phys_addr_t mem_base,
> return state;
> }
>
> -M48t59State *m48t59_init_isa(uint32_t io_base, uint16_t size, int type)
> +M48t59State *m48t59_init_isa(ISABus *bus, uint32_t io_base, uint16_t size,
> + int type)
> {
> M48t59ISAState *d;
> ISADevice *dev;
> M48t59State *s;
>
> - dev = isa_create("m48t59_isa");
> + dev = isa_create(bus, "m48t59_isa");
> qdev_prop_set_uint32(&dev->qdev, "type", type);
> qdev_prop_set_uint32(&dev->qdev, "size", size);
> qdev_prop_set_uint32(&dev->qdev, "io_base", io_base);
> diff --git a/hw/mc146818rtc.c b/hw/mc146818rtc.c
> index 2aaca2f..881d8d1 100644
> --- a/hw/mc146818rtc.c
> +++ b/hw/mc146818rtc.c
> @@ -650,12 +650,12 @@ static int rtc_initfn(ISADevice *dev)
> return 0;
> }
>
> -ISADevice *rtc_init(int base_year, qemu_irq intercept_irq)
> +ISADevice *rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq)
> {
> ISADevice *dev;
> RTCState *s;
>
> - dev = isa_create("mc146818rtc");
> + dev = isa_create(bus, "mc146818rtc");
> s = DO_UPCAST(RTCState, dev, dev);
> qdev_prop_set_int32(&dev->qdev, "base_year", base_year);
> qdev_init_nofail(&dev->qdev);
> diff --git a/hw/mc146818rtc.h b/hw/mc146818rtc.h
> index 575968c..f119930 100644
> --- a/hw/mc146818rtc.h
> +++ b/hw/mc146818rtc.h
> @@ -5,7 +5,7 @@
>
> #define RTC_ISA_IRQ 8
>
> -ISADevice *rtc_init(int base_year, qemu_irq intercept_irq);
> +ISADevice *rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq);
> void rtc_set_memory(ISADevice *dev, int addr, int val);
> void rtc_set_date(ISADevice *dev, const struct tm *tm);
>
> diff --git a/hw/mips_fulong2e.c b/hw/mips_fulong2e.c
> index 04921c1..e6e120c 100644
> --- a/hw/mips_fulong2e.c
> +++ b/hw/mips_fulong2e.c
> @@ -266,6 +266,7 @@ static void mips_fulong2e_init(ram_addr_t ram_size, const char *boot_device,
> qemu_irq *cpu_exit_irq;
> int via_devfn;
> PCIBus *pci_bus;
> + ISABus *isa_bus;
> i2c_bus *smbus;
> int i;
> DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
> @@ -342,11 +343,12 @@ static void mips_fulong2e_init(ram_addr_t ram_size, const char *boot_device,
> fprintf(stderr, "vt82c686b_init error\n");
> exit(1);
> }
> + isa_bus = NULL;
>
> /* Interrupt controller */
> /* The 8259 -> IP5 */
> - i8259 = i8259_init(env->irq[5]);
> - isa_bus_irqs(i8259);
> + i8259 = i8259_init(isa_bus, env->irq[5]);
> + isa_bus_irqs(isa_bus, i8259);
>
> vt82c686b_ide_init(pci_bus, hd, PCI_DEVFN(FULONG2E_VIA_SLOT, 1));
> usb_uhci_vt82c686b_init(pci_bus, PCI_DEVFN(FULONG2E_VIA_SLOT, 2));
> @@ -358,23 +360,23 @@ static void mips_fulong2e_init(ram_addr_t ram_size, const char *boot_device,
> smbus_eeprom_init(smbus, 1, eeprom_spd, sizeof(eeprom_spd));
>
> /* init other devices */
> - pit = pit_init(0x40, 0);
> + pit = pit_init(isa_bus, 0x40, 0);
> cpu_exit_irq = qemu_allocate_irqs(cpu_request_exit, NULL, 1);
> DMA_init(0, cpu_exit_irq);
>
> /* Super I/O */
> - isa_create_simple("i8042");
> + isa_create_simple(isa_bus, "i8042");
>
> - rtc_init(2000, NULL);
> + rtc_init(isa_bus, 2000, NULL);
>
> for(i = 0; i< MAX_SERIAL_PORTS; i++) {
> if (serial_hds[i]) {
> - serial_isa_init(i, serial_hds[i]);
> + serial_isa_init(isa_bus, i, serial_hds[i]);
> }
> }
>
> if (parallel_hds[0]) {
> - parallel_init(0, parallel_hds[0]);
> + parallel_init(isa_bus, 0, parallel_hds[0]);
> }
>
> /* Sound card */
> diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
> index 14beea2..ef6c83f 100644
> --- a/hw/mips_jazz.c
> +++ b/hw/mips_jazz.c
> @@ -120,6 +120,7 @@ static void mips_jazz_init(MemoryRegion *address_space,
> NICInfo *nd;
> DeviceState *dev;
> SysBusDevice *sysbus;
> + ISABus *isa_bus;
> ISADevice *pit;
> DriveInfo *fds[MAX_FD];
> qemu_irq esp_reset, dma_enable;
> @@ -182,12 +183,12 @@ static void mips_jazz_init(MemoryRegion *address_space,
> memory_region_add_subregion(address_space, 0x8000d000, dma_dummy);
>
> /* ISA devices */
> - isa_bus_new(NULL, address_space_io);
> - i8259 = i8259_init(env->irq[4]);
> - isa_bus_irqs(i8259);
> + isa_bus = isa_bus_new(NULL, address_space_io);
> + i8259 = i8259_init(isa_bus, env->irq[4]);
> + isa_bus_irqs(isa_bus, i8259);
> cpu_exit_irq = qemu_allocate_irqs(cpu_request_exit, NULL, 1);
> DMA_init(0, cpu_exit_irq);
> - pit = pit_init(0x40, 0);
> + pit = pit_init(isa_bus, 0x40, 0);
> pcspk_init(pit);
>
> /* ISA IO space at 0x90000000 */
> @@ -254,7 +255,7 @@ static void mips_jazz_init(MemoryRegion *address_space,
> fdctrl_init_sysbus(rc4030[1], 0, 0x80003000, fds);
>
> /* Real time clock */
> - rtc_init(1980, NULL);
> + rtc_init(isa_bus, 1980, NULL);
> memory_region_init_io(rtc,&rtc_ops, NULL, "rtc", 0x1000);
> memory_region_add_subregion(address_space, 0x80004000, rtc);
>
> @@ -278,7 +279,7 @@ static void mips_jazz_init(MemoryRegion *address_space,
>
> /* Sound card */
> /* FIXME: missing Jazz sound at 0x8000c000, rc4030[2] */
> - audio_init(i8259, NULL);
> + audio_init(isa_bus, i8259, NULL);
>
> /* NVRAM */
> dev = qdev_create(NULL, "ds1225y");
> diff --git a/hw/mips_malta.c b/hw/mips_malta.c
> index bb49749..98177f3 100644
> --- a/hw/mips_malta.c
> +++ b/hw/mips_malta.c
> @@ -774,6 +774,7 @@ void mips_malta_init (ram_addr_t ram_size,
> target_long bios_size;
> int64_t kernel_entry;
> PCIBus *pci_bus;
> + ISABus *isa_bus;
> CPUState *env;
> qemu_irq *i8259 = NULL, *isa_irq;
> qemu_irq *cpu_exit_irq;
> @@ -941,37 +942,38 @@ void mips_malta_init (ram_addr_t ram_size,
> ide_drive_get(hd, MAX_IDE_BUS);
>
> piix4_devfn = piix4_init(pci_bus, 80);
> + isa_bus = NULL;
>
> /* Interrupt controller */
> /* The 8259 is attached to the MIPS CPU INT0 pin, ie interrupt 2 */
> - i8259 = i8259_init(env->irq[2]);
> + i8259 = i8259_init(isa_bus, env->irq[2]);
>
> - isa_bus_irqs(i8259);
> + isa_bus_irqs(isa_bus, i8259);
> pci_piix4_ide_init(pci_bus, hd, piix4_devfn + 1);
> usb_uhci_piix4_init(pci_bus, piix4_devfn + 2);
> - smbus = piix4_pm_init(pci_bus, piix4_devfn + 3, 0x1100, isa_get_irq(9),
> - NULL, NULL, 0);
> + smbus = piix4_pm_init(pci_bus, piix4_devfn + 3, 0x1100,
> + isa_get_irq(NULL, 9), NULL, NULL, 0);
> /* TODO: Populate SPD eeprom data. */
> smbus_eeprom_init(smbus, 8, NULL, 0);
> - pit = pit_init(0x40, 0);
> + pit = pit_init(isa_bus, 0x40, 0);
> cpu_exit_irq = qemu_allocate_irqs(cpu_request_exit, NULL, 1);
> DMA_init(0, cpu_exit_irq);
>
> /* Super I/O */
> - isa_create_simple("i8042");
> + isa_create_simple(isa_bus, "i8042");
>
> - rtc_init(2000, NULL);
> - serial_isa_init(0, serial_hds[0]);
> - serial_isa_init(1, serial_hds[1]);
> + rtc_init(isa_bus, 2000, NULL);
> + serial_isa_init(isa_bus, 0, serial_hds[0]);
> + serial_isa_init(isa_bus, 1, serial_hds[1]);
> if (parallel_hds[0])
> - parallel_init(0, parallel_hds[0]);
> + parallel_init(isa_bus, 0, parallel_hds[0]);
> for(i = 0; i< MAX_FD; i++) {
> fd[i] = drive_get(IF_FLOPPY, 0, i);
> }
> - fdctrl_init_isa(fd);
> + fdctrl_init_isa(isa_bus, fd);
>
> /* Sound card */
> - audio_init(NULL, pci_bus);
> + audio_init(isa_bus, NULL, pci_bus);
>
> /* Network card */
> network_init();
> diff --git a/hw/mips_r4k.c b/hw/mips_r4k.c
> index d0564d4..c078078 100644
> --- a/hw/mips_r4k.c
> +++ b/hw/mips_r4k.c
> @@ -165,6 +165,7 @@ void mips_r4k_init (ram_addr_t ram_size,
> ResetData *reset_info;
> int i;
> qemu_irq *i8259;
> + ISABus *isa_bus;
> DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
> DriveInfo *dinfo;
> int be;
> @@ -256,36 +257,36 @@ void mips_r4k_init (ram_addr_t ram_size,
> cpu_mips_clock_init(env);
>
> /* The PIC is attached to the MIPS CPU INT0 pin */
> - isa_bus_new(NULL, get_system_io());
> - i8259 = i8259_init(env->irq[2]);
> - isa_bus_irqs(i8259);
> + isa_bus = isa_bus_new(NULL, get_system_io());
> + i8259 = i8259_init(isa_bus, env->irq[2]);
> + isa_bus_irqs(isa_bus, i8259);
>
> - rtc_init(2000, NULL);
> + rtc_init(isa_bus, 2000, NULL);
>
> /* Register 64 KB of ISA IO space at 0x14000000 */
> isa_mmio_init(0x14000000, 0x00010000);
> isa_mem_base = 0x10000000;
>
> - pit = pit_init(0x40, 0);
> + pit = pit_init(isa_bus, 0x40, 0);
>
> for(i = 0; i< MAX_SERIAL_PORTS; i++) {
> if (serial_hds[i]) {
> - serial_isa_init(i, serial_hds[i]);
> + serial_isa_init(isa_bus, i, serial_hds[i]);
> }
> }
>
> - isa_vga_init();
> + isa_vga_init(isa_bus);
>
> if (nd_table[0].vlan)
> - isa_ne2000_init(0x300, 9,&nd_table[0]);
> + isa_ne2000_init(isa_bus, 0x300, 9,&nd_table[0]);
>
> ide_drive_get(hd, MAX_IDE_BUS);
> for(i = 0; i< MAX_IDE_BUS; i++)
> - isa_ide_init(ide_iobase[i], ide_iobase2[i], ide_irq[i],
> + isa_ide_init(isa_bus, ide_iobase[i], ide_iobase2[i], ide_irq[i],
> hd[MAX_IDE_DEVS * i],
> hd[MAX_IDE_DEVS * i + 1]);
>
> - isa_create_simple("i8042");
> + isa_create_simple(isa_bus, "i8042");
> }
>
> static QEMUMachine mips_machine = {
> diff --git a/hw/nvram.h b/hw/nvram.h
> index 0f55b24..8924da4 100644
> --- a/hw/nvram.h
> +++ b/hw/nvram.h
> @@ -34,7 +34,8 @@ typedef struct M48t59State M48t59State;
> void m48t59_write (void *private, uint32_t addr, uint32_t val);
> uint32_t m48t59_read (void *private, uint32_t addr);
> void m48t59_toggle_lock (void *private, int lock);
> -M48t59State *m48t59_init_isa(uint32_t io_base, uint16_t size, int type);
> +M48t59State *m48t59_init_isa(ISABus *bus, uint32_t io_base, uint16_t size,
> + int type);
> M48t59State *m48t59_init(qemu_irq IRQ, target_phys_addr_t mem_base,
> uint32_t io_base, uint16_t size, int type);
> void m48t59_set_addr (void *opaque, uint32_t addr);
> diff --git a/hw/pc.c b/hw/pc.c
> index f0802b7..3a1bb8e 100644
> --- a/hw/pc.c
> +++ b/hw/pc.c
> @@ -849,13 +849,13 @@ static const int ne2000_irq[NE2000_NB_MAX] = { 9, 10, 11, 3, 4, 5 };
> static const int parallel_io[MAX_PARALLEL_PORTS] = { 0x378, 0x278, 0x3bc };
> static const int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 };
>
> -void pc_init_ne2k_isa(NICInfo *nd)
> +void pc_init_ne2k_isa(ISABus *bus, NICInfo *nd)
> {
> static int nb_ne2k = 0;
>
> if (nb_ne2k == NE2000_NB_MAX)
> return;
> - isa_ne2000_init(ne2000_io[nb_ne2k],
> + isa_ne2000_init(bus, ne2000_io[nb_ne2k],
> ne2000_irq[nb_ne2k], nd);
> nb_ne2k++;
> }
> @@ -1070,7 +1070,7 @@ qemu_irq *pc_allocate_cpu_irq(void)
> return qemu_allocate_irqs(pic_irq_request, NULL, 1);
> }
>
> -void pc_vga_init(PCIBus *pci_bus)
> +void pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus)
> {
> if (cirrus_vga_enabled) {
> if (pci_bus) {
> @@ -1099,7 +1099,7 @@ void pc_vga_init(PCIBus *pci_bus)
> if (pci_bus) {
> pci_vga_init(pci_bus);
> } else {
> - isa_vga_init();
> + isa_vga_init(isa_bus);
> }
> }
>
> @@ -1109,7 +1109,7 @@ void pc_vga_init(PCIBus *pci_bus)
> * For nographic case, sga is enabled at all times
> */
> if (display_type == DT_NOGRAPHIC) {
> - isa_create_simple("sga");
> + isa_create_simple(isa_bus, "sga");
> }
> }
>
> @@ -1122,7 +1122,7 @@ static void cpu_request_exit(void *opaque, int irq, int level)
> }
> }
>
> -void pc_basic_device_init(qemu_irq *gsi,
> +void pc_basic_device_init(ISABus *isa_bus, qemu_irq *gsi,
> ISADevice **rtc_state,
> bool no_vmport)
> {
> @@ -1147,31 +1147,31 @@ void pc_basic_device_init(qemu_irq *gsi,
> rtc_irq = qdev_get_gpio_in(hpet, 0);
> }
> }
> - *rtc_state = rtc_init(2000, rtc_irq);
> + *rtc_state = rtc_init(isa_bus, 2000, rtc_irq);
>
> qemu_register_boot_set(pc_boot_set, *rtc_state);
>
> - pit = pit_init(0x40, 0);
> + pit = pit_init(isa_bus, 0x40, 0);
> pcspk_init(pit);
>
> for(i = 0; i< MAX_SERIAL_PORTS; i++) {
> if (serial_hds[i]) {
> - serial_isa_init(i, serial_hds[i]);
> + serial_isa_init(isa_bus, i, serial_hds[i]);
> }
> }
>
> for(i = 0; i< MAX_PARALLEL_PORTS; i++) {
> if (parallel_hds[i]) {
> - parallel_init(i, parallel_hds[i]);
> + parallel_init(isa_bus, i, parallel_hds[i]);
> }
> }
>
> a20_line = qemu_allocate_irqs(handle_a20_line_change, first_cpu, 2);
> - i8042 = isa_create_simple("i8042");
> + i8042 = isa_create_simple(isa_bus, "i8042");
> i8042_setup_a20_line(i8042,&a20_line[0]);
> if (!no_vmport) {
> - vmport_init();
> - vmmouse = isa_try_create("vmmouse");
> + vmport_init(isa_bus);
> + vmmouse = isa_try_create(isa_bus, "vmmouse");
> } else {
> vmmouse = NULL;
> }
> @@ -1179,7 +1179,7 @@ void pc_basic_device_init(qemu_irq *gsi,
> qdev_prop_set_ptr(&vmmouse->qdev, "ps2_mouse", i8042);
> qdev_init_nofail(&vmmouse->qdev);
> }
> - port92 = isa_create_simple("port92");
> + port92 = isa_create_simple(isa_bus, "port92");
> port92_init(port92,&a20_line[1]);
>
> cpu_exit_irq = qemu_allocate_irqs(cpu_request_exit, NULL, 1);
> @@ -1188,7 +1188,7 @@ void pc_basic_device_init(qemu_irq *gsi,
> for(i = 0; i< MAX_FD; i++) {
> fd[i] = drive_get(IF_FLOPPY, 0, i);
> }
> - fdctrl_init_isa(fd);
> + fdctrl_init_isa(isa_bus, fd);
> }
>
> void pc_pci_device_init(PCIBus *pci_bus)
> diff --git a/hw/pc.h b/hw/pc.h
> index b8ad9a3..c43fa73 100644
> --- a/hw/pc.h
> +++ b/hw/pc.h
> @@ -20,11 +20,12 @@ SerialState *serial_mm_init(MemoryRegion *address_space,
> target_phys_addr_t base, int it_shift,
> qemu_irq irq, int baudbase,
> CharDriverState *chr, enum device_endian);
> -static inline bool serial_isa_init(int index, CharDriverState *chr)
> +static inline bool serial_isa_init(ISABus *bus, int index,
> + CharDriverState *chr)
> {
> ISADevice *dev;
>
> - dev = isa_try_create("isa-serial");
> + dev = isa_try_create(bus, "isa-serial");
> if (!dev) {
> return false;
> }
> @@ -39,11 +40,11 @@ static inline bool serial_isa_init(int index, CharDriverState *chr)
> void serial_set_frequency(SerialState *s, uint32_t frequency);
>
> /* parallel.c */
> -static inline bool parallel_init(int index, CharDriverState *chr)
> +static inline bool parallel_init(ISABus *bus, int index, CharDriverState *chr)
> {
> ISADevice *dev;
>
> - dev = isa_try_create("isa-parallel");
> + dev = isa_try_create(bus, "isa-parallel");
> if (!dev) {
> return false;
> }
> @@ -62,7 +63,7 @@ bool parallel_mm_init(target_phys_addr_t base, int it_shift, qemu_irq irq,
>
> typedef struct PicState PicState;
> extern PicState *isa_pic;
> -qemu_irq *i8259_init(qemu_irq parent_irq);
> +qemu_irq *i8259_init(ISABus *bus, qemu_irq parent_irq);
> int pic_read_irq(PicState *s);
> int pic_get_output(PicState *s);
> void pic_info(Monitor *mon);
> @@ -83,11 +84,11 @@ void gsi_handler(void *opaque, int n, int level);
>
> #define PIT_FREQ 1193182
>
> -static inline ISADevice *pit_init(int base, int irq)
> +static inline ISADevice *pit_init(ISABus *bus, int base, int irq)
> {
> ISADevice *dev;
>
> - dev = isa_create("isa-pit");
> + dev = isa_create(bus, "isa-pit");
> qdev_prop_set_uint32(&dev->qdev, "iobase", base);
> qdev_prop_set_uint32(&dev->qdev, "irq", irq);
> qdev_init_nofail(&dev->qdev);
> @@ -105,9 +106,9 @@ void hpet_pit_disable(void);
> void hpet_pit_enable(void);
>
> /* vmport.c */
> -static inline void vmport_init(void)
> +static inline void vmport_init(ISABus *bus)
> {
> - isa_create_simple("vmport");
> + isa_create_simple(bus, "vmport");
> }
> void vmport_register(unsigned char command, IOPortReadFunc *func, void *opaque);
> void vmmouse_get_data(uint32_t *data);
> @@ -139,11 +140,11 @@ void pc_memory_init(MemoryRegion *system_memory,
> MemoryRegion *rom_memory,
> MemoryRegion **ram_memory);
> qemu_irq *pc_allocate_cpu_irq(void);
> -void pc_vga_init(PCIBus *pci_bus);
> -void pc_basic_device_init(qemu_irq *gsi,
> +void pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus);
> +void pc_basic_device_init(ISABus *isa_bus, qemu_irq *gsi,
> ISADevice **rtc_state,
> bool no_vmport);
> -void pc_init_ne2k_isa(NICInfo *nd);
> +void pc_init_ne2k_isa(ISABus *bus, NICInfo *nd);
> void pc_cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size,
> const char *boot_device,
> BusState *ide0, BusState *ide1,
> @@ -173,7 +174,7 @@ extern int no_hpet;
>
> /* pcspk.c */
> void pcspk_init(ISADevice *pit);
> -int pcspk_audio_init(qemu_irq *pic);
> +int pcspk_audio_init(ISABus *bus, qemu_irq *pic);
>
> /* piix_pci.c */
> struct PCII440FXState;
> @@ -203,11 +204,11 @@ enum vga_retrace_method {
>
> extern enum vga_retrace_method vga_retrace_method;
>
> -static inline int isa_vga_init(void)
> +static inline int isa_vga_init(ISABus *bus)
> {
> ISADevice *dev;
>
> - dev = isa_try_create("isa-vga");
> + dev = isa_try_create(bus, "isa-vga");
> if (!dev) {
> fprintf(stderr, "Warning: isa-vga not available\n");
> return 0;
> @@ -226,13 +227,13 @@ void pci_cirrus_vga_init(PCIBus *bus);
> void isa_cirrus_vga_init(MemoryRegion *address_space);
>
> /* ne2000.c */
> -static inline bool isa_ne2000_init(int base, int irq, NICInfo *nd)
> +static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd)
> {
> ISADevice *dev;
>
> qemu_check_nic_model(nd, "ne2k_isa");
>
> - dev = isa_try_create("ne2k_isa");
> + dev = isa_try_create(bus, "ne2k_isa");
> if (!dev) {
> return false;
> }
> diff --git a/hw/pc_piix.c b/hw/pc_piix.c
> index c89042f..6bc1f60 100644
> --- a/hw/pc_piix.c
> +++ b/hw/pc_piix.c
> @@ -84,6 +84,7 @@ static void pc_init1(MemoryRegion *system_memory,
> int i;
> ram_addr_t below_4g_mem_size, above_4g_mem_size;
> PCIBus *pci_bus;
> + ISABus *isa_bus;
> PCII440FXState *i440fx_state;
> int piix3_devfn = -1;
> qemu_irq *cpu_irq;
> @@ -143,17 +144,18 @@ static void pc_init1(MemoryRegion *system_memory,
> ? 0
> : ((uint64_t)1<< 62)),
> pci_memory, ram_memory);
> + isa_bus = NULL;
> } else {
> pci_bus = NULL;
> i440fx_state = NULL;
> - isa_bus_new(NULL, system_io);
> + isa_bus = isa_bus_new(NULL, system_io);
> no_hpet = 1;
> }
> - isa_bus_irqs(gsi);
> + isa_bus_irqs(isa_bus, gsi);
>
> if (!xen_enabled()) {
> cpu_irq = pc_allocate_cpu_irq();
> - i8259 = i8259_init(cpu_irq[0]);
> + i8259 = i8259_init(isa_bus, cpu_irq[0]);
> } else {
> i8259 = xen_interrupt_controller_init();
> }
> @@ -167,20 +169,20 @@ static void pc_init1(MemoryRegion *system_memory,
>
> pc_register_ferr_irq(gsi[13]);
>
> - pc_vga_init(pci_enabled? pci_bus: NULL);
> + pc_vga_init(isa_bus, pci_enabled ? pci_bus : NULL);
>
> if (xen_enabled()) {
> pci_create_simple(pci_bus, -1, "xen-platform");
> }
>
> /* init basic PC hardware */
> - pc_basic_device_init(gsi,&rtc_state, xen_enabled());
> + pc_basic_device_init(isa_bus, gsi,&rtc_state, xen_enabled());
>
> for(i = 0; i< nb_nics; i++) {
> NICInfo *nd =&nd_table[i];
>
> if (!pci_enabled || (nd->model&& strcmp(nd->model, "ne2k_isa") == 0))
> - pc_init_ne2k_isa(nd);
> + pc_init_ne2k_isa(isa_bus, nd);
> else
> pci_nic_init_nofail(nd, "e1000", NULL);
> }
> @@ -198,13 +200,14 @@ static void pc_init1(MemoryRegion *system_memory,
> } else {
> for(i = 0; i< MAX_IDE_BUS; i++) {
> ISADevice *dev;
> - dev = isa_ide_init(ide_iobase[i], ide_iobase2[i], ide_irq[i],
> + dev = isa_ide_init(isa_bus, ide_iobase[i], ide_iobase2[i],
> + ide_irq[i],
> hd[MAX_IDE_DEVS * i], hd[MAX_IDE_DEVS * i + 1]);
> idebus[i] = qdev_get_child_bus(&dev->qdev, "ide.0");
> }
> }
>
> - audio_init(gsi, pci_enabled ? pci_bus : NULL);
> + audio_init(isa_bus, gsi, pci_enabled ? pci_bus : NULL);
>
> pc_cmos_init(below_4g_mem_size, above_4g_mem_size, boot_device,
> idebus[0], idebus[1], rtc_state);
> diff --git a/hw/pcspk.c b/hw/pcspk.c
> index 7fa2d36..4d949fb 100644
> --- a/hw/pcspk.c
> +++ b/hw/pcspk.c
> @@ -96,7 +96,7 @@ static void pcspk_callback(void *opaque, int free)
> }
> }
>
> -int pcspk_audio_init(qemu_irq *pic)
> +int pcspk_audio_init(ISABus *bus, qemu_irq *pic)
> {
> PCSpkState *s =&pcspk_state;
> struct audsettings as = {PCSPK_SAMPLE_RATE, 1, AUD_FMT_U8, 0};
> diff --git a/hw/ppc_prep.c b/hw/ppc_prep.c
> index f22d5b9..a7d73bf 100644
> --- a/hw/ppc_prep.c
> +++ b/hw/ppc_prep.c
> @@ -523,6 +523,7 @@ static void ppc_prep_init (ram_addr_t ram_size,
> uint32_t kernel_base, initrd_base;
> long kernel_size, initrd_size;
> PCIBus *pci_bus;
> + ISABus *isa_bus;
> qemu_irq *i8259;
> qemu_irq *cpu_exit_irq;
> int ppc_boot_device;
> @@ -628,10 +629,10 @@ static void ppc_prep_init (ram_addr_t ram_size,
> hw_error("Only 6xx bus is supported on PREP machine\n");
> }
> /* Hmm, prep has no pci-isa bridge ??? */
> - isa_bus_new(NULL, get_system_io());
> - i8259 = i8259_init(first_cpu->irq_inputs[PPC6xx_INPUT_INT]);
> + isa_bus = isa_bus_new(NULL, get_system_io());
> + i8259 = i8259_init(isa_bus, first_cpu->irq_inputs[PPC6xx_INPUT_INT]);
> pci_bus = pci_prep_init(i8259, get_system_memory(), get_system_io());
> - isa_bus_irqs(i8259);
> + isa_bus_irqs(isa_bus, i8259);
> // pci_bus = i440fx_init();
> /* Register 8 MB of ISA IO space (needed for non-contiguous map) */
> memory_region_init_io(PPC_io_memory,&PPC_prep_io_ops, sysctrl,
> @@ -642,10 +643,10 @@ static void ppc_prep_init (ram_addr_t ram_size,
> pci_vga_init(pci_bus);
> // openpic = openpic_init(0x00000000, 0xF0000000, 1);
> // pit = pit_init(0x40, 0);
> - rtc_init(2000, NULL);
> + rtc_init(isa_bus, 2000, NULL);
>
> if (serial_hds[0])
> - serial_isa_init(0, serial_hds[0]);
> + serial_isa_init(isa_bus, 0, serial_hds[0]);
> nb_nics1 = nb_nics;
> if (nb_nics1> NE2000_NB_MAX)
> nb_nics1 = NE2000_NB_MAX;
> @@ -654,7 +655,8 @@ static void ppc_prep_init (ram_addr_t ram_size,
> nd_table[i].model = g_strdup("ne2k_isa");
> }
> if (strcmp(nd_table[i].model, "ne2k_isa") == 0) {
> - isa_ne2000_init(ne2000_io[i], ne2000_irq[i],&nd_table[i]);
> + isa_ne2000_init(isa_bus, ne2000_io[i], ne2000_irq[i],
> +&nd_table[i]);
> } else {
> pci_nic_init_nofail(&nd_table[i], "ne2k_pci", NULL);
> }
> @@ -662,11 +664,11 @@ static void ppc_prep_init (ram_addr_t ram_size,
>
> ide_drive_get(hd, MAX_IDE_BUS);
> for(i = 0; i< MAX_IDE_BUS; i++) {
> - isa_ide_init(ide_iobase[i], ide_iobase2[i], ide_irq[i],
> + isa_ide_init(isa_bus, ide_iobase[i], ide_iobase2[i], ide_irq[i],
> hd[2 * i],
> hd[2 * i + 1]);
> }
> - isa_create_simple("i8042");
> + isa_create_simple(isa_bus, "i8042");
>
> cpu_exit_irq = qemu_allocate_irqs(cpu_request_exit, NULL, 1);
> DMA_init(1, cpu_exit_irq);
> @@ -676,7 +678,7 @@ static void ppc_prep_init (ram_addr_t ram_size,
> for(i = 0; i< MAX_FD; i++) {
> fd[i] = drive_get(IF_FLOPPY, 0, i);
> }
> - fdctrl_init_isa(fd);
> + fdctrl_init_isa(isa_bus, fd);
>
> /* Register speaker port */
> register_ioport_read(0x61, 1, 1, speaker_ioport_read, NULL);
> diff --git a/hw/sb16.c b/hw/sb16.c
> index f0658ac..88ad8e8 100644
> --- a/hw/sb16.c
> +++ b/hw/sb16.c
> @@ -1385,9 +1385,9 @@ static int sb16_initfn (ISADevice *dev)
> return 0;
> }
>
> -int SB16_init (qemu_irq *pic)
> +int SB16_init (ISABus *bus, qemu_irq *pic)
> {
> - isa_create_simple ("sb16");
> + isa_create_simple (bus, "sb16");
> return 0;
> }
>
> diff --git a/hw/sun4u.c b/hw/sun4u.c
> index eaaefe3..1e45192 100644
> --- a/hw/sun4u.c
> +++ b/hw/sun4u.c
> @@ -526,14 +526,17 @@ static void dummy_isa_irq_handler(void *opaque, int n, int level)
> }
>
> /* EBUS (Eight bit bus) bridge */
> -static void
> +static ISABus *
> pci_ebus_init(PCIBus *bus, int devfn)
> {
> qemu_irq *isa_irq;
> + ISABus *isa_bus;
>
> pci_create_simple(bus, devfn, "ebus");
> + isa_bus = NULL;
> isa_irq = qemu_allocate_irqs(dummy_isa_irq_handler, NULL, 16);
> - isa_bus_irqs(isa_irq);
> + isa_bus_irqs(isa_bus, isa_irq);
> + return isa_bus;
> }
>
> static int
> @@ -744,6 +747,7 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
> unsigned int i;
> long initrd_size, kernel_size;
> PCIBus *pci_bus, *pci_bus2, *pci_bus3;
> + ISABus *isa_bus;
> qemu_irq *irq;
> DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
> DriveInfo *fd[MAX_FD];
> @@ -764,7 +768,7 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
> pci_vga_init(pci_bus);
>
> // XXX Should be pci_bus3
> - pci_ebus_init(pci_bus, -1);
> + isa_bus = pci_ebus_init(pci_bus, -1);
>
> i = 0;
> if (hwdef->console_serial_base) {
> @@ -774,13 +778,13 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
> }
> for(; i< MAX_SERIAL_PORTS; i++) {
> if (serial_hds[i]) {
> - serial_isa_init(i, serial_hds[i]);
> + serial_isa_init(isa_bus, i, serial_hds[i]);
> }
> }
>
> for(i = 0; i< MAX_PARALLEL_PORTS; i++) {
> if (parallel_hds[i]) {
> - parallel_init(i, parallel_hds[i]);
> + parallel_init(isa_bus, i, parallel_hds[i]);
> }
> }
>
> @@ -791,12 +795,12 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
>
> pci_cmd646_ide_init(pci_bus, hd, 1);
>
> - isa_create_simple("i8042");
> + isa_create_simple(isa_bus, "i8042");
> for(i = 0; i< MAX_FD; i++) {
> fd[i] = drive_get(IF_FLOPPY, 0, i);
> }
> - fdctrl_init_isa(fd);
> - nvram = m48t59_init_isa(0x0074, NVRAM_SIZE, 59);
> + fdctrl_init_isa(isa_bus, fd);
> + nvram = m48t59_init_isa(isa_bus, 0x0074, NVRAM_SIZE, 59);
>
> initrd_size = 0;
> kernel_size = sun4u_load_kernel(kernel_filename, initrd_filename,
> diff --git a/qemu-common.h b/qemu-common.h
> index 5e87bdf..522f328 100644
> --- a/qemu-common.h
> +++ b/qemu-common.h
> @@ -242,6 +242,7 @@ typedef struct VLANState VLANState;
> typedef struct VLANClientState VLANClientState;
> typedef struct i2c_bus i2c_bus;
> typedef struct i2c_slave i2c_slave;
> +typedef struct ISABus ISABus;
> typedef struct SMBusDevice SMBusDevice;
> typedef struct PCIHostState PCIHostState;
> typedef struct PCIExpressHost PCIExpressHost;
next prev parent reply other threads:[~2011-12-12 16:39 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-24 20:18 [Qemu-devel] [PATCH 00/11] isa: preliminary work for multiple buses Hervé Poussineau
2011-10-24 20:18 ` [Qemu-devel] [PATCH 01/11] isa: give ISABus/ISADevice to isa_create(), isa_bus_irqs() and isa_get_irq() functions Hervé Poussineau
2011-12-12 16:38 ` Anthony Liguori [this message]
2011-10-24 20:18 ` [Qemu-devel] [PATCH 02/11] isa: move ISABus structure definition to header file Hervé Poussineau
2011-12-12 16:39 ` Anthony Liguori
2011-10-24 20:18 ` [Qemu-devel] [PATCH 03/11] i8259: give ISA device to isa_register_ioport() Hervé Poussineau
2011-12-12 16:39 ` Anthony Liguori
2011-10-24 20:18 ` [Qemu-devel] [PATCH 04/11] pc: give ISA bus to ISA methods Hervé Poussineau
2011-12-12 16:40 ` Anthony Liguori
2011-10-24 20:18 ` [Qemu-devel] [PATCH 05/11] alpha: " Hervé Poussineau
2011-10-24 20:18 ` [Qemu-devel] [PATCH 06/11] sun4u: " Hervé Poussineau
2011-10-24 20:18 ` [Qemu-devel] [PATCH 07/11] fulong2e: " Hervé Poussineau
2011-10-24 20:18 ` [Qemu-devel] [PATCH 08/11] malta: " Hervé Poussineau
2011-10-24 20:18 ` [Qemu-devel] [PATCH 09/11] isa: always use provided ISA bus when creating an isa device Hervé Poussineau
2011-10-24 20:18 ` [Qemu-devel] [PATCH 10/11] isa: always use provided ISA bus in isa_bus_irqs() Hervé Poussineau
2011-10-24 20:18 ` [Qemu-devel] [PATCH 11/11] audio: remove unused parameter isa_pic Hervé Poussineau
2011-10-28 17:24 ` [Qemu-devel] [PATCH 00/11] isa: preliminary work for multiple buses Hervé Poussineau
2011-11-05 8:27 ` Hervé Poussineau
2011-12-12 16:41 ` Anthony Liguori
-- strict thread matches above, loose matches on Subject: below --
2011-12-14 23:02 [Qemu-devel] [PATCH v2 " Hervé Poussineau
2011-12-14 23:02 ` [Qemu-devel] [PATCH 01/11] isa: give ISABus/ISADevice to isa_create(), isa_bus_irqs() and isa_get_irq() functions Hervé Poussineau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4EE62E13.6040909@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=hpoussin@reactos.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).