From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GltbY-0006aj-RS for qemu-devel@nongnu.org; Sun, 19 Nov 2006 15:49:32 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GltbX-0006Zf-D0 for qemu-devel@nongnu.org; Sun, 19 Nov 2006 15:49:32 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GltbW-0006Yz-SA for qemu-devel@nongnu.org; Sun, 19 Nov 2006 15:49:30 -0500 Received: from [82.232.2.251] (helo=farad.aurel32.net) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA:32) (Exim 4.52) id 1GltbV-0000bw-Pt for qemu-devel@nongnu.org; Sun, 19 Nov 2006 15:49:30 -0500 Received: from bode.aurel32.net ([2001:618:400:fc13:211:9ff:feed:c498]) by farad.aurel32.net with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA:32) (Exim 4.50) id 1GltbT-000454-OF for qemu-devel@nongnu.org; Sun, 19 Nov 2006 21:49:27 +0100 Received: from aurel32 by bode.aurel32.net with local (Exim 4.63) (envelope-from ) id 1GltbS-0001Tw-Rq for qemu-devel@nongnu.org; Sun, 19 Nov 2006 21:49:26 +0100 Date: Sun, 19 Nov 2006 21:49:26 +0100 From: Aurelien Jarno Message-ID: <20061119204926.GA5614@bode.aurel32.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline Subject: [Qemu-devel] [PATCH] Fixed devfn number for PCI devices Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Some platforms (at least the malta boards) rely on the slot number to assign the PCI IRQ. The patch below allows to specify a devfn (and thus a slot number) to emulated PCI devices that can be used on more than one architecture (ie video cards, IDE controllers, NIC, etc.). -- .''`. Aurelien Jarno | GPG: 1024D/F1BCDB73 : :' : Debian developer | Electrical Engineer `. `' aurel32@debian.org | aurelien@aurel32.net `- people.debian.org/~aurel32 | www.aurel32.net Index: vl.h =================================================================== RCS file: /sources/qemu/qemu/vl.h,v retrieving revision 1.154 diff -u -d -p -r1.154 vl.h --- vl.h 24 Sep 2006 18:49:43 -0000 1.154 +++ vl.h 19 Nov 2006 20:35:41 -0000 @@ -761,7 +761,7 @@ typedef int (*pci_map_irq_fn)(PCIDevice PCIBus *pci_register_bus(pci_set_irq_fn set_irq, pci_map_irq_fn map_irq, void *pic, int devfn_min, int nirq); -void pci_nic_init(PCIBus *bus, NICInfo *nd); +void pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn); void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len); uint32_t pci_data_read(void *opaque, uint32_t addr, int len); int pci_bus_num(PCIBus *s); @@ -789,7 +789,7 @@ PCIBus *pci_vpb_init(void *pic, int irq, /* piix_pci.c */ PCIBus *i440fx_init(PCIDevice **pi440fx_state); void i440fx_set_smm(PCIDevice *d, int val); -int piix3_init(PCIBus *bus); +int piix3_init(PCIBus *bus, int devfn); void i440fx_init_memory_mappings(PCIDevice *d); /* openpic.c */ @@ -811,7 +811,7 @@ struct soundhw { int isa; union { int (*init_isa) (AudioState *s); - int (*init_pci) (PCIBus *bus, AudioState *s); + int (*init_pci) (PCIBus *bus, AudioState *s, int devfn); } init; }; @@ -851,11 +851,11 @@ int isa_vga_init(DisplayState *ds, uint8 unsigned long vga_ram_offset, int vga_ram_size); int pci_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base, unsigned long vga_ram_offset, int vga_ram_size, - unsigned long vga_bios_offset, int vga_bios_size); + unsigned long vga_bios_offset, int vga_bios_size, int devfn); /* cirrus_vga.c */ void pci_cirrus_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base, - unsigned long vga_ram_offset, int vga_ram_size); + unsigned long vga_ram_offset, int vga_ram_size, int devfn); void isa_cirrus_vga_init(DisplayState *ds, uint8_t *vga_ram_base, unsigned long vga_ram_offset, int vga_ram_size); @@ -876,7 +876,7 @@ extern BlockDriverState *bs_table[MAX_DI void isa_ide_init(int iobase, int iobase2, int irq, BlockDriverState *hd0, BlockDriverState *hd1); void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table, - int secondary_ide_enabled); + int secondary_ide_enabled, int devfn); void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn); int pmac_ide_init (BlockDriverState **hd_table, SetIRQFunc *set_irq, void *irq_opaque, int irq); @@ -886,7 +886,7 @@ int cdrom_read_toc(int nb_sectors, uint8 int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num); /* es1370.c */ -int es1370_init (PCIBus *bus, AudioState *s); +int es1370_init (PCIBus *bus, AudioState *s, int devfn); /* sb16.c */ int SB16_init (AudioState *s); @@ -924,15 +924,15 @@ int fdctrl_get_drive_type(fdctrl_t *fdct /* ne2000.c */ void isa_ne2000_init(int base, int irq, NICInfo *nd); -void pci_ne2000_init(PCIBus *bus, NICInfo *nd); +void pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn); /* rtl8139.c */ -void pci_rtl8139_init(PCIBus *bus, NICInfo *nd); +void pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn); /* pcnet.c */ -void pci_pcnet_init(PCIBus *bus, NICInfo *nd); +void pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn); void pcnet_h_reset(void *opaque); void *lance_init(NICInfo *nd, uint32_t leaddr, void *dma_opaque); Index: hw/cirrus_vga.c =================================================================== RCS file: /sources/qemu/qemu/hw/cirrus_vga.c,v retrieving revision 1.23 diff -u -d -p -r1.23 cirrus_vga.c --- hw/cirrus_vga.c 18 Aug 2006 09:32:04 -0000 1.23 +++ hw/cirrus_vga.c 19 Nov 2006 20:35:41 -0000 @@ -3165,7 +3165,7 @@ static void cirrus_pci_mmio_map(PCIDevic } void pci_cirrus_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base, - unsigned long vga_ram_offset, int vga_ram_size) + unsigned long vga_ram_offset, int vga_ram_size, int devfn) { PCICirrusVGAState *d; uint8_t *pci_conf; @@ -3177,7 +3177,7 @@ void pci_cirrus_vga_init(PCIBus *bus, Di /* setup PCI configuration registers */ d = (PCICirrusVGAState *)pci_register_device(bus, "Cirrus VGA", sizeof(PCICirrusVGAState), - -1, NULL, NULL); + devfn, NULL, NULL); pci_conf = d->dev.config; pci_conf[0x00] = (uint8_t) (PCI_VENDOR_CIRRUS & 0xff); pci_conf[0x01] = (uint8_t) (PCI_VENDOR_CIRRUS >> 8); Index: hw/es1370.c =================================================================== RCS file: /sources/qemu/qemu/hw/es1370.c,v retrieving revision 1.6 diff -u -d -p -r1.6 es1370.c --- hw/es1370.c 4 Jul 2006 21:47:22 -0000 1.6 +++ hw/es1370.c 19 Nov 2006 20:35:41 -0000 @@ -996,7 +996,7 @@ static void es1370_on_reset (void *opaqu es1370_reset (s); } -int es1370_init (PCIBus *bus, AudioState *audio) +int es1370_init (PCIBus *bus, AudioState *audio, int devfn) { PCIES1370State *d; ES1370State *s; @@ -1014,7 +1014,7 @@ int es1370_init (PCIBus *bus, AudioState d = (PCIES1370State *) pci_register_device (bus, "ES1370", sizeof (PCIES1370State), - -1, NULL, NULL); + devfn, NULL, NULL); if (!d) { AUD_log (NULL, "Failed to register PCI device for ES1370\n"); Index: hw/ide.c =================================================================== RCS file: /sources/qemu/qemu/hw/ide.c,v retrieving revision 1.48 diff -u -d -p -r1.48 ide.c --- hw/ide.c 19 Aug 2006 11:44:21 -0000 1.48 +++ hw/ide.c 19 Nov 2006 20:35:42 -0000 @@ -2377,7 +2377,7 @@ static void cmd646_set_irq(void *opaque, /* CMD646 PCI IDE controller */ void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table, - int secondary_ide_enabled) + int secondary_ide_enabled, int devfn) { PCIIDEState *d; uint8_t *pci_conf; @@ -2385,7 +2385,7 @@ void pci_cmd646_ide_init(PCIBus *bus, Bl d = (PCIIDEState *)pci_register_device(bus, "CMD646 IDE", sizeof(PCIIDEState), - -1, + devfn, NULL, NULL); d->type = IDE_TYPE_CMD646; pci_conf = d->dev.config; Index: hw/ne2000.c =================================================================== RCS file: /sources/qemu/qemu/hw/ne2000.c,v retrieving revision 1.21 diff -u -d -p -r1.21 ne2000.c --- hw/ne2000.c 17 Aug 2006 10:46:34 -0000 1.21 +++ hw/ne2000.c 19 Nov 2006 20:35:42 -0000 @@ -781,7 +781,7 @@ static void ne2000_map(PCIDevice *pci_de register_ioport_read(addr + 0x1f, 1, 1, ne2000_reset_ioport_read, s); } -void pci_ne2000_init(PCIBus *bus, NICInfo *nd) +void pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn) { PCINE2000State *d; NE2000State *s; @@ -789,7 +789,7 @@ void pci_ne2000_init(PCIBus *bus, NICInf d = (PCINE2000State *)pci_register_device(bus, "NE2000", sizeof(PCINE2000State), - -1, + devfn, NULL, NULL); pci_conf = d->dev.config; pci_conf[0x00] = 0xec; // Realtek 8029 Index: hw/openpic.c =================================================================== RCS file: /sources/qemu/qemu/hw/openpic.c,v retrieving revision 1.9 diff -u -d -p -r1.9 openpic.c --- hw/openpic.c 23 Nov 2005 21:13:45 -0000 1.9 +++ hw/openpic.c 19 Nov 2006 20:35:42 -0000 @@ -975,7 +975,7 @@ openpic_t *openpic_init (PCIBus *bus, in return NULL; if (bus) { opp = (openpic_t *)pci_register_device(bus, "OpenPIC", sizeof(openpic_t), - -1, NULL, NULL); + devfn, NULL, NULL); if (opp == NULL) return NULL; pci_conf = opp->pci_dev.config; Index: hw/pc.c =================================================================== RCS file: /sources/qemu/qemu/hw/pc.c,v retrieving revision 1.62 diff -u -d -p -r1.62 pc.c --- hw/pc.c 24 Sep 2006 18:48:00 -0000 1.62 +++ hw/pc.c 19 Nov 2006 20:35:42 -0000 @@ -444,7 +444,7 @@ static void audio_init (PCIBus *pci_bus) } else { if (pci_bus) { - c->init.init_pci (pci_bus, s); + c->init.init_pci (pci_bus, s, -1); } } } @@ -604,7 +604,7 @@ static void pc_init1(int ram_size, int v if (pci_enabled) { pci_bus = i440fx_init(&i440fx_state); - piix3_devfn = piix3_init(pci_bus); + piix3_devfn = piix3_init(pci_bus, -1); } else { pci_bus = NULL; } @@ -618,7 +618,7 @@ static void pc_init1(int ram_size, int v if (pci_enabled) { pci_cirrus_vga_init(pci_bus, ds, phys_ram_base + ram_size, ram_size, - vga_ram_size); + vga_ram_size, -1); } else { isa_cirrus_vga_init(ds, phys_ram_base + ram_size, ram_size, vga_ram_size); @@ -626,7 +626,7 @@ static void pc_init1(int ram_size, int v } else { if (pci_enabled) { pci_vga_init(pci_bus, ds, phys_ram_base + ram_size, ram_size, - vga_ram_size, 0, 0); + vga_ram_size, 0, 0, -1); } else { isa_vga_init(ds, phys_ram_base + ram_size, ram_size, vga_ram_size); @@ -673,7 +673,7 @@ static void pc_init1(int ram_size, int v if (strcmp(nd->model, "ne2k_isa") == 0) { pc_init_ne2k_isa(nd); } else if (pci_enabled) { - pci_nic_init(pci_bus, nd); + pci_nic_init(pci_bus, nd, -1); } else { fprintf(stderr, "qemu: Unsupported NIC: %s\n", nd->model); exit(1); Index: hw/pci.c =================================================================== RCS file: /sources/qemu/qemu/hw/pci.c,v retrieving revision 1.32 diff -u -d -p -r1.32 pci.c --- hw/pci.c 28 Sep 2006 19:52:59 -0000 1.32 +++ hw/pci.c 19 Nov 2006 20:35:42 -0000 @@ -536,14 +536,14 @@ void pci_info(void) } /* Initialize a PCI NIC. */ -void pci_nic_init(PCIBus *bus, NICInfo *nd) +void pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn) { if (strcmp(nd->model, "ne2k_pci") == 0) { - pci_ne2000_init(bus, nd); + pci_ne2000_init(bus, nd, devfn); } else if (strcmp(nd->model, "rtl8139") == 0) { - pci_rtl8139_init(bus, nd); + pci_rtl8139_init(bus, nd, devfn); } else if (strcmp(nd->model, "pcnet") == 0) { - pci_pcnet_init(bus, nd); + pci_pcnet_init(bus, nd, devfn); } else { fprintf(stderr, "qemu: Unsupported NIC: %s\n", nd->model); exit (1); Index: hw/pcnet.c =================================================================== RCS file: /sources/qemu/qemu/hw/pcnet.c,v retrieving revision 1.7 diff -u -d -p -r1.7 pcnet.c --- hw/pcnet.c 3 Sep 2006 19:48:17 -0000 1.7 +++ hw/pcnet.c 19 Nov 2006 20:35:42 -0000 @@ -1889,7 +1889,7 @@ static void pci_physical_memory_read(voi cpu_physical_memory_read(addr, buf, len); } -void pci_pcnet_init(PCIBus *bus, NICInfo *nd) +void pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn) { PCNetState *d; uint8_t *pci_conf; @@ -1900,7 +1900,7 @@ void pci_pcnet_init(PCIBus *bus, NICInfo #endif d = (PCNetState *)pci_register_device(bus, "PCNet", sizeof(PCNetState), - -1, NULL, NULL); + devfn, NULL, NULL); pci_conf = d->dev.config; Index: hw/piix_pci.c =================================================================== RCS file: /sources/qemu/qemu/hw/piix_pci.c,v retrieving revision 1.6 diff -u -d -p -r1.6 piix_pci.c --- hw/piix_pci.c 24 Sep 2006 19:31:43 -0000 1.6 +++ hw/piix_pci.c 19 Nov 2006 20:35:42 -0000 @@ -273,13 +273,13 @@ static int piix_load(QEMUFile* f, void * return pci_device_load(d, f); } -int piix3_init(PCIBus *bus) +int piix3_init(PCIBus *bus, int devfn) { PCIDevice *d; uint8_t *pci_conf; d = pci_register_device(bus, "PIIX3", sizeof(PCIDevice), - -1, NULL, NULL); + devfn, NULL, NULL); register_savevm("PIIX3", 0, 2, piix_save, piix_load, d); piix3_dev = d; Index: hw/ppc_chrp.c =================================================================== RCS file: /sources/qemu/qemu/hw/ppc_chrp.c,v retrieving revision 1.25 diff -u -d -p -r1.25 ppc_chrp.c --- hw/ppc_chrp.c 18 Sep 2006 01:15:29 -0000 1.25 +++ hw/ppc_chrp.c 19 Nov 2006 20:35:42 -0000 @@ -425,7 +425,7 @@ static void ppc_chrp_init(int ram_size, pci_bus = pci_grackle_init(0xfec00000, pic); pci_vga_init(pci_bus, ds, phys_ram_base + ram_size, ram_size, vga_ram_size, - vga_bios_offset, vga_bios_size); + vga_bios_offset, vga_bios_size, -1); /* XXX: suppress that */ isa_pic = pic_init(pic_irq_request, NULL); @@ -436,10 +436,10 @@ static void ppc_chrp_init(int ram_size, for(i = 0; i < nb_nics; i++) { if (!nd_table[i].model) nd_table[i].model = "ne2k_pci"; - pci_nic_init(pci_bus, &nd_table[i]); + pci_nic_init(pci_bus, &nd_table[i], -1); } - pci_cmd646_ide_init(pci_bus, &bs_table[0], 0); + pci_cmd646_ide_init(pci_bus, &bs_table[0], 0, -1); /* cuda also initialize ADB */ cuda_mem_index = cuda_init(set_irq, pic, 0x12); @@ -474,7 +474,7 @@ static void ppc_chrp_init(int ram_size, /* init basic PC hardware */ pci_vga_init(pci_bus, ds, phys_ram_base + ram_size, ram_size, vga_ram_size, - vga_bios_offset, vga_bios_size); + vga_bios_offset, vga_bios_size, -1); /* XXX: suppress that */ isa_pic = pic_init(pic_irq_request, NULL); @@ -483,14 +483,14 @@ static void ppc_chrp_init(int ram_size, serial_init(&pic_set_irq_new, isa_pic, 0x3f8, 4, serial_hds[0]); for(i = 0; i < nb_nics; i++) { - pci_ne2000_init(pci_bus, &nd_table[i]); + pci_ne2000_init(pci_bus, &nd_table[i], -1); } #if 1 ide0_mem_index = pmac_ide_init(&bs_table[0], set_irq, pic, 0x13); ide1_mem_index = pmac_ide_init(&bs_table[2], set_irq, pic, 0x14); #else - pci_cmd646_ide_init(pci_bus, &bs_table[0], 0); + pci_cmd646_ide_init(pci_bus, &bs_table[0], 0, -1); #endif /* cuda also initialize ADB */ cuda_mem_index = cuda_init(set_irq, pic, 0x19); Index: hw/ppc_prep.c =================================================================== RCS file: /sources/qemu/qemu/hw/ppc_prep.c,v retrieving revision 1.28 diff -u -d -p -r1.28 ppc_prep.c --- hw/ppc_prep.c 17 Aug 2006 10:45:20 -0000 1.28 +++ hw/ppc_prep.c 19 Nov 2006 20:35:42 -0000 @@ -613,7 +613,7 @@ static void ppc_prep_init(int ram_size, /* init basic PC hardware */ pci_vga_init(pci_bus, ds, phys_ram_base + ram_size, ram_size, - vga_ram_size, 0, 0); + vga_ram_size, 0, 0, -1); rtc_init(0x70, 8); // openpic = openpic_init(0x00000000, 0xF0000000, 1); isa_pic = pic_init(pic_irq_request, first_cpu); Index: hw/realview.c =================================================================== RCS file: /sources/qemu/qemu/hw/realview.c,v retrieving revision 1.1 diff -u -d -p -r1.1 realview.c --- hw/realview.c 23 Sep 2006 17:40:58 -0000 1.1 +++ hw/realview.c 19 Nov 2006 20:35:42 -0000 @@ -71,7 +71,7 @@ static void realview_init(int ram_size, if (strcmp(nd->model, "smc91c111") == 0) { smc91c111_init(nd, 0x4e000000, pic, 28); } else { - pci_nic_init(pci_bus, nd); + pci_nic_init(pci_bus, nd, -1); } } Index: hw/rtl8139.c =================================================================== RCS file: /sources/qemu/qemu/hw/rtl8139.c,v retrieving revision 1.5 diff -u -d -p -r1.5 rtl8139.c --- hw/rtl8139.c 17 Aug 2006 10:46:34 -0000 1.5 +++ hw/rtl8139.c 19 Nov 2006 20:35:42 -0000 @@ -3409,7 +3409,7 @@ static void rtl8139_timer(void *opaque) } #endif /* RTL8139_ONBOARD_TIMER */ -void pci_rtl8139_init(PCIBus *bus, NICInfo *nd) +void pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn) { PCIRTL8139State *d; RTL8139State *s; @@ -3417,7 +3417,7 @@ void pci_rtl8139_init(PCIBus *bus, NICIn d = (PCIRTL8139State *)pci_register_device(bus, "RTL8139", sizeof(PCIRTL8139State), - -1, + devfn, NULL, NULL); pci_conf = d->dev.config; pci_conf[0x00] = 0xec; /* Realtek 8139 */ Index: hw/sun4u.c =================================================================== RCS file: /sources/qemu/qemu/hw/sun4u.c,v retrieving revision 1.11 diff -u -d -p -r1.11 sun4u.c --- hw/sun4u.c 18 Jun 2006 19:41:28 -0000 1.11 +++ hw/sun4u.c 19 Nov 2006 20:35:42 -0000 @@ -326,7 +326,7 @@ static void sun4u_init(int ram_size, int } pci_bus = pci_apb_init(APB_SPECIAL_BASE, APB_MEM_BASE, NULL); isa_mem_base = VGA_BASE; - pci_cirrus_vga_init(pci_bus, ds, phys_ram_base + ram_size, ram_size, vga_ram_size); + pci_cirrus_vga_init(pci_bus, ds, phys_ram_base + ram_size, ram_size, vga_ram_size, -1); for(i = 0; i < MAX_SERIAL_PORTS; i++) { if (serial_hds[i]) { @@ -344,10 +344,10 @@ static void sun4u_init(int ram_size, int for(i = 0; i < nb_nics; i++) { if (!nd_table[i].model) nd_table[i].model = "ne2k_pci"; - pci_nic_init(pci_bus, &nd_table[i]); + pci_nic_init(pci_bus, &nd_table[i], -1); } - pci_cmd646_ide_init(pci_bus, bs_table, 1); + pci_cmd646_ide_init(pci_bus, bs_table, 1, -1); kbd_init(); floppy_controller = fdctrl_init(6, 2, 0, 0x3f0, fd_table); nvram = m48t59_init(8, 0, 0x0074, NVRAM_SIZE, 59); Index: hw/versatilepb.c =================================================================== RCS file: /sources/qemu/qemu/hw/versatilepb.c,v retrieving revision 1.6 diff -u -d -p -r1.6 versatilepb.c --- hw/versatilepb.c 23 Sep 2006 17:40:58 -0000 1.6 +++ hw/versatilepb.c 19 Nov 2006 20:35:42 -0000 @@ -188,7 +188,7 @@ static void versatile_init(int ram_size, if (strcmp(nd->model, "smc91c111") == 0) { smc91c111_init(nd, 0x10010000, sic, 25); } else { - pci_nic_init(pci_bus, nd); + pci_nic_init(pci_bus, nd, -1); } } if (usb_enabled) { Index: hw/vga.c =================================================================== RCS file: /sources/qemu/qemu/hw/vga.c,v retrieving revision 1.48 diff -u -d -p -r1.48 vga.c --- hw/vga.c 25 Sep 2006 21:41:20 -0000 1.48 +++ hw/vga.c 19 Nov 2006 20:35:42 -0000 @@ -1866,7 +1866,7 @@ int isa_vga_init(DisplayState *ds, uint8 int pci_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base, unsigned long vga_ram_offset, int vga_ram_size, - unsigned long vga_bios_offset, int vga_bios_size) + unsigned long vga_bios_offset, int vga_bios_size, int devfn) { PCIVGAState *d; VGAState *s; @@ -1874,7 +1874,7 @@ int pci_vga_init(PCIBus *bus, DisplaySta d = (PCIVGAState *)pci_register_device(bus, "VGA", sizeof(PCIVGAState), - -1, NULL, NULL); + devfn, NULL, NULL); if (!d) return -1; s = &d->vga_state;