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