Commit cb457d7679840b95de361c42921e601bd224ecf5

Authored by aliguori
1 parent 0ae18cee

Make pci_nic_init() use qemu_setup_nic_model() (Mark McLoughlin)

Add a table of PCI NIC models to pass to qemu_setup_nic_model().

While we're at it, also add a corresponding table of NIC init
functions.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>



git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6287 c046a42c-6fe2-441c-8c8c-71466251a162
hw/mips_malta.c
... ... @@ -487,19 +487,16 @@ static void audio_init (PCIBus *pci_bus)
487 487 static void network_init (PCIBus *pci_bus)
488 488 {
489 489 int i;
490   - NICInfo *nd;
491 490  
492 491 for(i = 0; i < nb_nics; i++) {
493   - nd = &nd_table[i];
494   - if (!nd->model) {
495   - nd->model = "pcnet";
496   - }
497   - if (i == 0 && strcmp(nd->model, "pcnet") == 0) {
  492 + NICInfo *nd = &nd_table[i];
  493 + int devfn = -1;
  494 +
  495 + if (i == 0 && (!nd->model || strcmp(nd->model, "pcnet") == 0))
498 496 /* The malta board has a PCNet card using PCI SLOT 11 */
499   - pci_nic_init(pci_bus, nd, 88);
500   - } else {
501   - pci_nic_init(pci_bus, nd, -1);
502   - }
  497 + devfn = 88;
  498 +
  499 + pci_nic_init(pci_bus, nd, devfn, "pcnet");
503 500 }
504 501 }
505 502  
... ...
... ... @@ -764,7 +764,6 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size,
764 764 PCIBus *pci_bus;
765 765 int piix3_devfn = -1;
766 766 CPUState *env;
767   - NICInfo *nd;
768 767 qemu_irq *cpu_irq;
769 768 qemu_irq *i8259;
770 769 int index;
... ... @@ -1000,27 +999,12 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size,
1000 999 }
1001 1000  
1002 1001 for(i = 0; i < nb_nics; i++) {
1003   - nd = &nd_table[i];
1004   - if (!nd->model) {
1005   - if (pci_enabled) {
1006   - nd->model = "ne2k_pci";
1007   - } else {
1008   - nd->model = "ne2k_isa";
1009   - }
1010   - }
1011   - if (strcmp(nd->model, "ne2k_isa") == 0) {
  1002 + NICInfo *nd = &nd_table[i];
  1003 +
  1004 + if (!pci_enabled || (nd->model && strcmp(nd->model, "ne2k_isa") == 0))
1012 1005 pc_init_ne2k_isa(nd, i8259);
1013   - } else if (pci_enabled) {
1014   - if (strcmp(nd->model, "?") == 0)
1015   - fprintf(stderr, "qemu: Supported ISA NICs: ne2k_isa\n");
1016   - pci_nic_init(pci_bus, nd, -1);
1017   - } else if (strcmp(nd->model, "?") == 0) {
1018   - fprintf(stderr, "qemu: Supported ISA NICs: ne2k_isa\n");
1019   - exit(1);
1020   - } else {
1021   - fprintf(stderr, "qemu: Unsupported NIC: %s\n", nd->model);
1022   - exit(1);
1023   - }
  1006 + else
  1007 + pci_nic_init(pci_bus, nd, -1, "ne2k_pci");
1024 1008 }
1025 1009  
1026 1010 if (drive_get_max_bus(IF_IDE) >= MAX_IDE_BUS) {
... ...
hw/pci.c
... ... @@ -652,33 +652,43 @@ void pci_info(void)
652 652 pci_for_each_device(0, pci_info_device);
653 653 }
654 654  
  655 +static const char * const pci_nic_models[] = {
  656 + "ne2k_pci",
  657 + "i82551",
  658 + "i82557b",
  659 + "i82559er",
  660 + "rtl8139",
  661 + "e1000",
  662 + "pcnet",
  663 + "virtio",
  664 + NULL
  665 +};
  666 +
  667 +typedef void (*PCINICInitFn)(PCIBus *, NICInfo *, int);
  668 +
  669 +static PCINICInitFn pci_nic_init_fns[] = {
  670 + pci_ne2000_init,
  671 + pci_i82551_init,
  672 + pci_i82557b_init,
  673 + pci_i82559er_init,
  674 + pci_rtl8139_init,
  675 + pci_e1000_init,
  676 + pci_pcnet_init,
  677 + virtio_net_init,
  678 + NULL
  679 +};
  680 +
655 681 /* Initialize a PCI NIC. */
656   -void pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn)
  682 +void pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn,
  683 + const char *default_model)
657 684 {
658   - if (strcmp(nd->model, "ne2k_pci") == 0) {
659   - pci_ne2000_init(bus, nd, devfn);
660   - } else if (strcmp(nd->model, "i82551") == 0) {
661   - pci_i82551_init(bus, nd, devfn);
662   - } else if (strcmp(nd->model, "i82557b") == 0) {
663   - pci_i82557b_init(bus, nd, devfn);
664   - } else if (strcmp(nd->model, "i82559er") == 0) {
665   - pci_i82559er_init(bus, nd, devfn);
666   - } else if (strcmp(nd->model, "rtl8139") == 0) {
667   - pci_rtl8139_init(bus, nd, devfn);
668   - } else if (strcmp(nd->model, "e1000") == 0) {
669   - pci_e1000_init(bus, nd, devfn);
670   - } else if (strcmp(nd->model, "pcnet") == 0) {
671   - pci_pcnet_init(bus, nd, devfn);
672   - } else if (strcmp(nd->model, "virtio") == 0) {
673   - virtio_net_init(bus, nd, devfn);
674   - } else if (strcmp(nd->model, "?") == 0) {
675   - fprintf(stderr, "qemu: Supported PCI NICs: i82551 i82557b i82559er"
676   - " ne2k_pci pcnet rtl8139 e1000 virtio\n");
677   - exit (1);
678   - } else {
679   - fprintf(stderr, "qemu: Unsupported NIC: %s\n", nd->model);
680   - exit (1);
681   - }
  685 + int i;
  686 +
  687 + qemu_check_nic_model_list(nd, pci_nic_models, default_model);
  688 +
  689 + for (i = 0; pci_nic_models[i]; i++)
  690 + if (strcmp(nd->model, pci_nic_models[i]) == 0)
  691 + pci_nic_init_fns[i](bus, nd, devfn);
682 692 }
683 693  
684 694 typedef struct {
... ...
hw/pci.h
... ... @@ -118,7 +118,8 @@ typedef int (*pci_map_irq_fn)(PCIDevice *pci_dev, int irq_num);
118 118 PCIBus *pci_register_bus(pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
119 119 qemu_irq *pic, int devfn_min, int nirq);
120 120  
121   -void pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn);
  121 +void pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn,
  122 + const char *default_model);
122 123 void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len);
123 124 uint32_t pci_data_read(void *opaque, uint32_t addr, int len);
124 125 int pci_bus_num(PCIBus *s);
... ...
hw/ppc440_bamboo.c
... ... @@ -90,7 +90,6 @@ static void bamboo_init(ram_addr_t ram_size, int vga_ram_size,
90 90 const char *cpu_model)
91 91 {
92 92 unsigned int pci_irq_nrs[4] = { 28, 27, 26, 25 };
93   - NICInfo *nd;
94 93 PCIBus *pcibus;
95 94 CPUState *env;
96 95 uint64_t elf_entry;
... ... @@ -118,13 +117,9 @@ static void bamboo_init(ram_addr_t ram_size, int vga_ram_size,
118 117  
119 118 /* Register network interfaces. */
120 119 for (i = 0; i < nb_nics; i++) {
121   - nd = &nd_table[i];
122   - if (!nd->model) {
123   - /* There are no PCI NICs on the Bamboo board, but there are
124   - * PCI slots, so we can pick model whatever we want. */
125   - nd->model = "e1000";
126   - }
127   - pci_nic_init(pcibus, nd, -1);
  120 + /* There are no PCI NICs on the Bamboo board, but there are
  121 + * PCI slots, so we can pick whatever default model we want. */
  122 + pci_nic_init(pcibus, &nd_table[i], -1, "e1000");
128 123 }
129 124 }
130 125  
... ...
hw/ppc_chrp.c
... ... @@ -265,11 +265,10 @@ static void ppc_core99_init (ram_addr_t ram_size, int vga_ram_size,
265 265  
266 266 escc_mem_index = escc_init(0x80013000, dummy_irq[4], serial_hds[0],
267 267 serial_hds[1], ESCC_CLOCK, 4);
268   - for(i = 0; i < nb_nics; i++) {
269   - if (!nd_table[i].model)
270   - nd_table[i].model = "ne2k_pci";
271   - pci_nic_init(pci_bus, &nd_table[i], -1);
272   - }
  268 +
  269 + for(i = 0; i < nb_nics; i++)
  270 + pci_nic_init(pci_bus, &nd_table[i], -1, "ne2k_pci");
  271 +
273 272 if (drive_get_max_bus(IF_IDE) >= MAX_IDE_BUS) {
274 273 fprintf(stderr, "qemu: too many IDE bus\n");
275 274 exit(1);
... ...
hw/ppc_oldworld.c
... ... @@ -307,11 +307,8 @@ static void ppc_heathrow_init (ram_addr_t ram_size, int vga_ram_size,
307 307 escc_mem_index = escc_init(0x80013000, pic[0x10], serial_hds[0],
308 308 serial_hds[1], ESCC_CLOCK, 4);
309 309  
310   - for(i = 0; i < nb_nics; i++) {
311   - if (!nd_table[i].model)
312   - nd_table[i].model = "ne2k_pci";
313   - pci_nic_init(pci_bus, &nd_table[i], -1);
314   - }
  310 + for(i = 0; i < nb_nics; i++)
  311 + pci_nic_init(pci_bus, &nd_table[i], -1, "ne2k_pci");
315 312  
316 313 /* First IDE channel is a CMD646 on the PCI bus */
317 314  
... ...
hw/ppc_prep.c
... ... @@ -677,7 +677,7 @@ static void ppc_prep_init (ram_addr_t ram_size, int vga_ram_size,
677 677 if (strcmp(nd_table[i].model, "ne2k_isa") == 0) {
678 678 isa_ne2000_init(ne2000_io[i], i8259[ne2000_irq[i]], &nd_table[i]);
679 679 } else {
680   - pci_nic_init(pci_bus, &nd_table[i], -1);
  680 + pci_nic_init(pci_bus, &nd_table[i], -1, "ne2k_pci");
681 681 }
682 682 }
683 683  
... ...
hw/r2d.c
... ... @@ -230,9 +230,9 @@ static void r2d_init(ram_addr_t ram_size, int vga_ram_size,
230 230 drives_table[drive_get_index(IF_IDE, 0, 0)].bdrv, NULL);
231 231  
232 232 /* NIC: rtl8139 on-board, and 2 slots. */
233   - pci_rtl8139_init(pci, &nd_table[0], 2 << 3);
  233 + pci_nic_init(pci, &nd_table[0], 2 << 3, "rtl8139");
234 234 for (i = 1; i < nb_nics; i++)
235   - pci_nic_init(pci, &nd_table[i], -1);
  235 + pci_nic_init(pci, &nd_table[i], -1, "ne2k_pci");
236 236  
237 237 /* Todo: register on board registers */
238 238 {
... ...
hw/realview.c
... ... @@ -126,9 +126,7 @@ static void realview_init(ram_addr_t ram_size, int vga_ram_size,
126 126 smc91c111_init(nd, 0x4e000000, pic[28]);
127 127 done_smc = 1;
128 128 } else {
129   - if (!nd->model)
130   - nd->model = "rtl8139";
131   - pci_nic_init(pci_bus, nd, -1);
  129 + pci_nic_init(pci_bus, nd, -1, "rtl8139");
132 130 }
133 131 }
134 132  
... ...
hw/sun4u.c
... ... @@ -535,11 +535,8 @@ static void sun4uv_init(ram_addr_t RAM_size, int vga_ram_size,
535 535 }
536 536 }
537 537  
538   - for(i = 0; i < nb_nics; i++) {
539   - if (!nd_table[i].model)
540   - nd_table[i].model = "ne2k_pci";
541   - pci_nic_init(pci_bus, &nd_table[i], -1);
542   - }
  538 + for(i = 0; i < nb_nics; i++)
  539 + pci_nic_init(pci_bus, &nd_table[i], -1, "ne2k_pci");
543 540  
544 541 irq = qemu_allocate_irqs(cpu_set_irq, env, MAX_PILS);
545 542 if (drive_get_max_bus(IF_IDE) >= MAX_IDE_BUS) {
... ...
hw/versatilepb.c
... ... @@ -199,9 +199,7 @@ static void versatile_init(ram_addr_t ram_size, int vga_ram_size,
199 199 smc91c111_init(nd, 0x10010000, sic[25]);
200 200 done_smc = 1;
201 201 } else {
202   - if (!nd->model)
203   - nd->model = "rtl8139";
204   - pci_nic_init(pci_bus, nd, -1);
  202 + pci_nic_init(pci_bus, nd, -1, "rtl8139");
205 203 }
206 204 }
207 205 if (usb_enabled) {
... ...