[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] qdev: remove DeviceType
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH] qdev: remove DeviceType |
Date: |
Mon, 15 Jun 2009 16:53:54 +0200 |
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 <address@hidden>
---
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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [PATCH] qdev: remove DeviceType,
Gerd Hoffmann <=