summary refs log tree commit diff stats
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);