Revision 074f2fff hw/qdev.c
b/hw/qdev.c | ||
---|---|---|
42 | 42 |
}; |
43 | 43 |
|
44 | 44 |
struct DeviceType { |
45 |
const char *name; |
|
46 | 45 |
DeviceInfo *info; |
47 |
int size; |
|
48 | 46 |
DeviceType *next; |
49 | 47 |
}; |
50 | 48 |
|
... | ... | |
54 | 52 |
static DeviceType *device_type_list; |
55 | 53 |
|
56 | 54 |
/* Register a new device type. */ |
57 |
void qdev_register(const char *name, int size, DeviceInfo *info)
|
|
55 |
void qdev_register(DeviceInfo *info) |
|
58 | 56 |
{ |
59 | 57 |
DeviceType *t; |
60 | 58 |
|
61 |
assert(size >= sizeof(DeviceState)); |
|
59 |
assert(info->size >= sizeof(DeviceState));
|
|
62 | 60 |
|
63 | 61 |
t = qemu_mallocz(sizeof(DeviceType)); |
64 | 62 |
t->next = device_type_list; |
65 | 63 |
device_type_list = t; |
66 |
t->name = qemu_strdup(name); |
|
67 |
t->size = size; |
|
68 | 64 |
t->info = info; |
69 | 65 |
} |
70 | 66 |
|
... | ... | |
77 | 73 |
DeviceState *dev; |
78 | 74 |
|
79 | 75 |
for (t = device_type_list; t; t = t->next) { |
80 |
if (strcmp(t->name, name) == 0) { |
|
76 |
if (strcmp(t->info->name, name) == 0) {
|
|
81 | 77 |
break; |
82 | 78 |
} |
83 | 79 |
} |
... | ... | |
85 | 81 |
hw_error("Unknown device '%s'\n", name); |
86 | 82 |
} |
87 | 83 |
|
88 |
dev = qemu_mallocz(t->size); |
|
84 |
dev = qemu_mallocz(t->info->size);
|
|
89 | 85 |
dev->type = t; |
90 | 86 |
|
91 | 87 |
if (!bus) { |
... | ... | |
173 | 169 |
static int next_serial; |
174 | 170 |
static int next_virtconsole; |
175 | 171 |
/* FIXME: This is a nasty hack that needs to go away. */ |
176 |
if (strncmp(dev->type->name, "virtio", 6) == 0) { |
|
172 |
if (strncmp(dev->type->info->name, "virtio", 6) == 0) {
|
|
177 | 173 |
return virtcon_hds[next_virtconsole++]; |
178 | 174 |
} else { |
179 | 175 |
return serial_hds[next_serial++]; |
... | ... | |
355 | 351 |
{ |
356 | 352 |
DeviceProperty *prop; |
357 | 353 |
BusState *child; |
358 |
qdev_printf("dev: %s\n", dev->type->name); |
|
354 |
qdev_printf("dev: %s\n", dev->type->info->name);
|
|
359 | 355 |
indent += 2; |
360 | 356 |
if (dev->num_gpio_in) { |
361 | 357 |
qdev_printf("gpio-in %d\n", dev->num_gpio_in); |
... | ... | |
374 | 370 |
break; |
375 | 371 |
case PROP_TYPE_DEV: |
376 | 372 |
qdev_printf("prop-dev %s %s\n", prop->name, |
377 |
((DeviceState *)prop->value.ptr)->type->name); |
|
373 |
((DeviceState *)prop->value.ptr)->type->info->name);
|
|
378 | 374 |
break; |
379 | 375 |
default: |
380 | 376 |
qdev_printf("prop-unknown%d %s\n", prop->type, prop->name); |
Also available in: Unified diff