[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] Fixed devfn number for PCI devices
From: |
Aurelien Jarno |
Subject: |
[Qemu-devel] [PATCH] Fixed devfn number for PCI devices |
Date: |
Sun, 19 Nov 2006 21:49:26 +0100 |
User-agent: |
Mutt/1.5.13 (2006-08-11) |
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
`. `' address@hidden | address@hidden
`- 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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [PATCH] Fixed devfn number for PCI devices,
Aurelien Jarno <=