From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MOtGn-00028F-HP for qemu-devel@nongnu.org; Thu, 09 Jul 2009 09:02:37 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MOtGi-000266-GF for qemu-devel@nongnu.org; Thu, 09 Jul 2009 09:02:36 -0400 Received: from [199.232.76.173] (port=42383 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MOtGi-000261-3O for qemu-devel@nongnu.org; Thu, 09 Jul 2009 09:02:32 -0400 Received: from mx2.redhat.com ([66.187.237.31]:54495) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MOtGg-0002BP-Tq for qemu-devel@nongnu.org; Thu, 09 Jul 2009 09:02:31 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n69D2UPS016214 for ; Thu, 9 Jul 2009 09:02:30 -0400 From: Gerd Hoffmann Date: Thu, 9 Jul 2009 15:02:24 +0200 Message-Id: <1247144544-8885-6-git-send-email-kraxel@redhat.com> In-Reply-To: <1247144544-8885-1-git-send-email-kraxel@redhat.com> References: <1247144544-8885-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 5/5] qdev/class: make pci_nic_init() use qdev's device list. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann Signed-off-by: Gerd Hoffmann --- hw/pci.c | 58 +++++++++++++++++++----------------------------------- hw/virtio-pci.c | 1 + 2 files changed, 22 insertions(+), 37 deletions(-) diff --git a/hw/pci.c b/hw/pci.c index cc4882e..948611e 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -784,53 +784,37 @@ DeviceState *pci_create(const char *name, const char *devaddr) return dev; } -static const char * const pci_nic_models[] = { - "ne2k_pci", - "i82551", - "i82557b", - "i82559er", - "rtl8139", - "e1000", - "pcnet", - "virtio", - NULL -}; - -static const char * const pci_nic_names[] = { - "ne2k_pci", - "i82551", - "i82557b", - "i82559er", - "rtl8139", - "e1000", - "pcnet", - "virtio-net-pci", - NULL -}; - /* Initialize a PCI NIC. */ PCIDevice *pci_nic_init(NICInfo *nd, const char *default_model, const char *default_devaddr) { const char *devaddr = nd->devaddr ? nd->devaddr : default_devaddr; + char buf[256]; DeviceState *dev; - int i; + DeviceInfo *info; + int ret = 0; - 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) { - dev = pci_create(pci_nic_names[i], devaddr); - if (nd->id) - snprintf(dev->id, sizeof(dev->id), "%s", nd->id); - dev->nd = nd; - qdev_init(dev); - nd->private = dev; - return DO_UPCAST(PCIDevice, qdev, dev); + if (!nd->model) + nd->model = strdup(default_model); + + info = qdev_find_info(&pci_bus_info, nd->model, DEV_CLASS_NETWORK); + if (!info) { + if (strcmp(nd->model, "?") != 0) { + fprintf(stderr, "qemu: Unsupported NIC model: %s\n", nd->model); + ret = 1; } + qdev_list_devices(&pci_bus_info, DEV_CLASS_NETWORK, buf, sizeof(buf)); + fprintf(stderr, "qemu: Supported NIC models: %s\n", buf); + exit(ret); } - return NULL; + dev = pci_create(info->name, devaddr); + if (nd->id) + snprintf(dev->id, sizeof(dev->id), "%s", nd->id); + dev->nd = nd; + qdev_init(dev); + nd->private = dev; + return DO_UPCAST(PCIDevice, qdev, dev); } typedef struct { diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c index d28d7b3..0b3f41f 100644 --- a/hw/virtio-pci.c +++ b/hw/virtio-pci.c @@ -473,6 +473,7 @@ static PCIDeviceInfo virtio_info[] = { .init = virtio_blk_init_pci, },{ .qdev.name = "virtio-net-pci", + .qdev.alias = "virtio", .qdev.size = sizeof(VirtIOPCIProxy), .qdev.class = DEV_CLASS_NETWORK, .init = virtio_net_init_pci, -- 1.6.2.5