diff options
author | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-02-11 15:19:52 +0000 |
---|---|---|
committer | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-02-11 15:19:52 +0000 |
commit | 72da42085924f65c78e6ec478373f51a9e49e48d (patch) | |
tree | 1b065d0e96fb147fd75447a5fec8ed119a746e2d /hw/pci.c | |
parent | 3ae806189842c70cf47e041b3c498c65683e5a21 (diff) |
qemu: return PCIDevice on net device init and record devfn (Marcelo Tosatti)
Change the PCI network drivers init functions to return the PCIDev, to
inform which slot has been hot-plugged.
Also record PCIDevice structure on NICInfo to locate for release on
hot-removal.
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6593 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw/pci.c')
-rw-r--r-- | hw/pci.c | 15 |
1 files changed, 11 insertions, 4 deletions
@@ -662,7 +662,7 @@ static const char * const pci_nic_models[] = { NULL }; -typedef void (*PCINICInitFn)(PCIBus *, NICInfo *, int); +typedef PCIDevice *(*PCINICInitFn)(PCIBus *, NICInfo *, int); static PCINICInitFn pci_nic_init_fns[] = { pci_ne2000_init, @@ -677,16 +677,23 @@ static PCINICInitFn pci_nic_init_fns[] = { }; /* Initialize a PCI NIC. */ -void pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn, +PCIDevice *pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn, const char *default_model) { + PCIDevice *pci_dev; int i; qemu_check_nic_model_list(nd, pci_nic_models, default_model); for (i = 0; pci_nic_models[i]; i++) - if (strcmp(nd->model, pci_nic_models[i]) == 0) - pci_nic_init_fns[i](bus, nd, devfn); + if (strcmp(nd->model, pci_nic_models[i]) == 0) { + pci_dev = pci_nic_init_fns[i](bus, nd, devfn); + if (pci_dev) + nd->private = pci_dev; + return pci_dev; + } + + return NULL; } typedef struct { |