Revision 9d07d757 hw/pci.c
b/hw/pci.c | ||
---|---|---|
799 | 799 |
NULL |
800 | 800 |
}; |
801 | 801 |
|
802 |
typedef PCIDevice *(*PCINICInitFn)(PCIBus *, NICInfo *, int); |
|
803 |
|
|
804 |
static PCINICInitFn pci_nic_init_fns[] = { |
|
805 |
pci_ne2000_init, |
|
806 |
pci_i82551_init, |
|
807 |
pci_i82557b_init, |
|
808 |
pci_i82559er_init, |
|
809 |
pci_rtl8139_init, |
|
810 |
pci_e1000_init, |
|
811 |
pci_pcnet_init, |
|
812 |
virtio_net_init, |
|
802 |
static const char * const pci_nic_names[] = { |
|
803 |
"ne2k_pci", |
|
804 |
"i82551", |
|
805 |
"i82557b", |
|
806 |
"i82559er", |
|
807 |
"rtl8139", |
|
808 |
"e1000", |
|
809 |
"pcnet", |
|
810 |
"virtio_net", |
|
813 | 811 |
NULL |
814 | 812 |
}; |
815 | 813 |
|
... | ... | |
817 | 815 |
PCIDevice *pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn, |
818 | 816 |
const char *default_model) |
819 | 817 |
{ |
820 |
PCIDevice *pci_dev;
|
|
818 |
DeviceState *dev;
|
|
821 | 819 |
int i; |
822 | 820 |
|
823 | 821 |
qemu_check_nic_model_list(nd, pci_nic_models, default_model); |
824 | 822 |
|
825 |
for (i = 0; pci_nic_models[i]; i++) |
|
823 |
for (i = 0; pci_nic_models[i]; i++) {
|
|
826 | 824 |
if (strcmp(nd->model, pci_nic_models[i]) == 0) { |
827 |
pci_dev = pci_nic_init_fns[i](bus, nd, devfn); |
|
828 |
if (pci_dev) |
|
829 |
nd->private = pci_dev; |
|
830 |
return pci_dev; |
|
825 |
dev = qdev_create(bus, pci_nic_names[i]); |
|
826 |
qdev_set_prop_int(dev, "devfn", devfn); |
|
827 |
qdev_set_netdev(dev, nd); |
|
828 |
qdev_init(dev); |
|
829 |
nd->private = dev; |
|
830 |
return (PCIDevice *)dev; |
|
831 | 831 |
} |
832 |
} |
|
832 | 833 |
|
833 | 834 |
return NULL; |
834 | 835 |
} |
Also available in: Unified diff