aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hw/pci-hotplug.c4
-rw-r--r--hw/pci.c11
-rw-r--r--hw/pci.h1
3 files changed, 16 insertions, 0 deletions
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index f3dc42103d..89974a0668 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -46,6 +46,10 @@ static PCIDevice *qemu_pci_hot_add_nic(Monitor *mon,
monitor_printf(mon, "Parameter addr not supported\n");
return NULL;
}
+
+ if (nd_table[ret].model && !pci_nic_supported(nd_table[ret].model))
+ return NULL;
+
return pci_nic_init(&nd_table[ret], "rtl8139", devaddr);
}
diff --git a/hw/pci.c b/hw/pci.c
index c46410aae3..c656bd047c 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -806,6 +806,17 @@ static const char * const pci_nic_names[] = {
NULL
};
+int pci_nic_supported(const char *model)
+{
+ int i;
+
+ for (i = 0; pci_nic_names[i]; i++)
+ if (strcmp(model, pci_nic_names[i]) == 0)
+ return 1;
+
+ return 0;
+}
+
/* Initialize a PCI NIC. */
PCIDevice *pci_nic_init(NICInfo *nd, const char *default_model,
const char *default_devaddr)
diff --git a/hw/pci.h b/hw/pci.h
index caba5c8518..ba748ff9cd 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -252,6 +252,7 @@ PCIBus *pci_register_bus(DeviceState *parent, const char *name,
pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
void *irq_opaque, int devfn_min, int nirq);
+int pci_nic_supported(const char *model);
PCIDevice *pci_nic_init(NICInfo *nd, const char *default_model,
const char *default_devaddr);
void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len);