From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MGDZW-0001Tf-8n for qemu-devel@nongnu.org; Mon, 15 Jun 2009 10:54:06 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MGDZR-0001Iz-Er for qemu-devel@nongnu.org; Mon, 15 Jun 2009 10:54:05 -0400 Received: from [199.232.76.173] (port=37772 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MGDZR-0001If-7z for qemu-devel@nongnu.org; Mon, 15 Jun 2009 10:54:01 -0400 Received: from mx2.redhat.com ([66.187.237.31]:33547) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MGDZQ-0002dN-Lw for qemu-devel@nongnu.org; Mon, 15 Jun 2009 10:54:00 -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 n5FErxvE022168 for ; Mon, 15 Jun 2009 10:53:59 -0400 From: Gerd Hoffmann Date: Mon, 15 Jun 2009 16:53:54 +0200 Message-Id: <1245077634-4202-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH] qdev: remove DeviceType List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann The only purpose DeviceType serves is creating a linked list of DeviceInfo structs. This removes DeviceType and add a next field to DeviceInfo instead, so the DeviceInfo structs can be changed that way. Elimitates a pointless extra level of indirection. Signed-off-by: Gerd Hoffmann --- hw/qdev.c | 37 ++++++++++++++----------------------- hw/qdev.h | 7 +++---- 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/hw/qdev.c b/hw/qdev.c index 18f03ed..c3ceff0 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -41,28 +41,19 @@ struct DeviceProperty { DeviceProperty *next; }; -struct DeviceType { - DeviceInfo *info; - DeviceType *next; -}; - /* This is a nasty hack to allow passing a NULL bus to qdev_create. */ static BusState *main_system_bus; extern struct BusInfo system_bus_info; -static DeviceType *device_type_list; +static DeviceInfo *device_info_list; /* Register a new device type. */ void qdev_register(DeviceInfo *info) { - DeviceType *t; - assert(info->size >= sizeof(DeviceState)); - t = qemu_mallocz(sizeof(DeviceType)); - t->next = device_type_list; - device_type_list = t; - t->info = info; + info->next = device_info_list; + device_info_list = info; } /* Create a new device. This only initializes the device state structure @@ -70,7 +61,7 @@ void qdev_register(DeviceInfo *info) initialize the actual device emulation. */ DeviceState *qdev_create(BusState *bus, const char *name) { - DeviceType *t; + DeviceInfo *info; DeviceState *dev; if (!bus) { @@ -80,19 +71,19 @@ DeviceState *qdev_create(BusState *bus, const char *name) bus = main_system_bus; } - for (t = device_type_list; t; t = t->next) { - if (t->info->bus_info != bus->info) + for (info = device_info_list; info != NULL; info = info->next) { + if (info->bus_info != bus->info) continue; - if (strcmp(t->info->name, name) != 0) + if (strcmp(info->name, name) != 0) continue; break; } - if (!t) { + if (!info) { hw_error("Unknown device '%s' for bus '%s'\n", name, bus->info->name); } - dev = qemu_mallocz(t->info->size); - dev->type = t; + dev = qemu_mallocz(info->size); + dev->info = info; dev->parent_bus = bus; LIST_INSERT_HEAD(&bus->children, dev, sibling); return dev; @@ -103,7 +94,7 @@ DeviceState *qdev_create(BusState *bus, const char *name) calling this function. */ void qdev_init(DeviceState *dev) { - dev->type->info->init(dev, dev->type->info); + dev->info->init(dev, dev->info); } /* Unlink device from bus and free the structure. */ @@ -165,7 +156,7 @@ CharDriverState *qdev_init_chardev(DeviceState *dev) static int next_serial; static int next_virtconsole; /* FIXME: This is a nasty hack that needs to go away. */ - if (strncmp(dev->type->info->name, "virtio", 6) == 0) { + if (strncmp(dev->info->name, "virtio", 6) == 0) { return virtcon_hds[next_virtconsole++]; } else { return serial_hds[next_serial++]; @@ -319,7 +310,7 @@ static void qdev_print(Monitor *mon, DeviceState *dev, int indent) { DeviceProperty *prop; BusState *child; - qdev_printf("dev: %s\n", dev->type->info->name); + qdev_printf("dev: %s\n", dev->info->name); indent += 2; if (dev->num_gpio_in) { qdev_printf("gpio-in %d\n", dev->num_gpio_in); @@ -338,7 +329,7 @@ static void qdev_print(Monitor *mon, DeviceState *dev, int indent) break; case PROP_TYPE_DEV: qdev_printf("prop-dev %s %s\n", prop->name, - ((DeviceState *)prop->value.ptr)->type->info->name); + ((DeviceState *)prop->value.ptr)->info->name); break; default: qdev_printf("prop-unknown%d %s\n", prop->type, prop->name); diff --git a/hw/qdev.h b/hw/qdev.h index 7f4236d..fa0e96b 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -4,7 +4,7 @@ #include "hw.h" #include "sys-queue.h" -typedef struct DeviceType DeviceType; +typedef struct DeviceInfo DeviceInfo; typedef struct DeviceProperty DeviceProperty; @@ -15,7 +15,7 @@ typedef struct BusInfo BusInfo; /* This structure should not be accessed directly. We declare it here so that it can be embedded in individual device state structures. */ struct DeviceState { - DeviceType *type; + DeviceInfo *info; BusState *parent_bus; DeviceProperty *props; int num_gpio_out; @@ -72,8 +72,6 @@ typedef struct { DevicePropType type; } DevicePropList; -typedef struct DeviceInfo DeviceInfo; - typedef void (*qdev_initfn)(DeviceState *dev, DeviceInfo *info); struct DeviceInfo { @@ -84,6 +82,7 @@ struct DeviceInfo { /* Private to qdev / bus. */ qdev_initfn init; BusInfo *bus_info; + struct DeviceInfo *next; }; void qdev_register(DeviceInfo *info); -- 1.6.2.2