[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 030/197] qdev: move qdev->info to class
From: |
Anthony Liguori |
Subject: |
[Qemu-devel] [PATCH v3 030/197] qdev: move qdev->info to class |
Date: |
Mon, 12 Dec 2011 14:18:26 -0600 |
Use an accessor to let clients cope.
Signed-off-by: Anthony Liguori <address@hidden>
---
hw/acpi_piix4.c | 4 +-
hw/cirrus_vga.c | 2 +-
hw/e1000.c | 2 +-
hw/eepro100.c | 4 +-
hw/hda-audio.c | 2 +-
hw/ide/piix.c | 6 ++++
hw/intel-hda.c | 6 ++--
hw/lsi53c895a.c | 2 +-
hw/ne2000-isa.c | 2 +-
hw/ne2000.c | 2 +-
hw/pci.c | 14 ++++----
hw/pcnet.c | 2 +-
hw/qdev-properties.c | 20 ++++++------
hw/qdev.c | 72 ++++++++++++++++++++++++++++-------------------
hw/qdev.h | 14 ++++++++-
hw/rtl8139.c | 2 +-
hw/usb-bus.c | 2 +-
hw/usb-ccid.c | 2 +-
hw/usb-net.c | 2 +-
hw/usb-ohci.c | 2 +-
hw/virtio-console.c | 2 +-
hw/virtio-net.c | 2 +-
hw/virtio-serial-bus.c | 8 ++--
23 files changed, 103 insertions(+), 73 deletions(-)
diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c
index 401baaa..697f0de 100644
--- a/hw/acpi_piix4.c
+++ b/hw/acpi_piix4.c
@@ -277,7 +277,7 @@ static void piix4_update_hotplug(PIIX4PMState *s)
s->pci0_hotplug_enable = ~0;
QTAILQ_FOREACH_SAFE(qdev, &bus->children, sibling, next) {
- PCIDeviceInfo *info = container_of(qdev->info, PCIDeviceInfo, qdev);
+ PCIDeviceInfo *info = container_of(qdev_get_info(qdev), PCIDeviceInfo,
qdev);
PCIDevice *pdev = DO_UPCAST(PCIDevice, qdev, qdev);
int slot = PCI_SLOT(pdev->devfn);
@@ -489,7 +489,7 @@ static void pciej_write(void *opaque, uint32_t addr,
uint32_t val)
QTAILQ_FOREACH_SAFE(qdev, &bus->children, sibling, next) {
dev = DO_UPCAST(PCIDevice, qdev, qdev);
- info = container_of(qdev->info, PCIDeviceInfo, qdev);
+ info = container_of(qdev_get_info(qdev), PCIDeviceInfo, qdev);
if (PCI_SLOT(dev->devfn) == slot && !info->no_hotplug) {
qdev_free(qdev);
}
diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c
index c0db315..d6d9d70 100644
--- a/hw/cirrus_vga.c
+++ b/hw/cirrus_vga.c
@@ -2927,7 +2927,7 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev)
{
PCICirrusVGAState *d = DO_UPCAST(PCICirrusVGAState, dev, dev);
CirrusVGAState *s = &d->cirrus_vga;
- PCIDeviceInfo *info = DO_UPCAST(PCIDeviceInfo, qdev, dev->qdev.info);
+ PCIDeviceInfo *info = DO_UPCAST(PCIDeviceInfo, qdev,
qdev_get_info(&dev->qdev));
int16_t device_id = info->device_id;
/* setup VGA */
diff --git a/hw/e1000.c b/hw/e1000.c
index 986ed9c..ce30ad8 100644
--- a/hw/e1000.c
+++ b/hw/e1000.c
@@ -1175,7 +1175,7 @@ static int pci_e1000_init(PCIDevice *pci_dev)
d->eeprom_data[EEPROM_CHECKSUM_REG] = checksum;
d->nic = qemu_new_nic(&net_e1000_info, &d->conf,
- d->dev.qdev.info->name, d->dev.qdev.id, d);
+ qdev_get_info(&d->dev.qdev)->name, d->dev.qdev.id,
d);
qemu_format_nic_info_str(&d->nic->nc, macaddr);
diff --git a/hw/eepro100.c b/hw/eepro100.c
index 29ec5b4..287d1f1 100644
--- a/hw/eepro100.c
+++ b/hw/eepro100.c
@@ -1849,7 +1849,7 @@ static int e100_nic_init(PCIDevice *pci_dev)
{
EEPRO100State *s = DO_UPCAST(EEPRO100State, dev, pci_dev);
E100PCIDeviceInfo *e100_device = DO_UPCAST(E100PCIDeviceInfo, pci.qdev,
- pci_dev->qdev.info);
+ qdev_get_info(&pci_dev->qdev));
TRACE(OTHER, logout("\n"));
@@ -1879,7 +1879,7 @@ static int e100_nic_init(PCIDevice *pci_dev)
nic_reset(s);
s->nic = qemu_new_nic(&net_eepro100_info, &s->conf,
- pci_dev->qdev.info->name, pci_dev->qdev.id, s);
+ qdev_get_info(&pci_dev->qdev)->name,
pci_dev->qdev.id, s);
qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a);
TRACE(OTHER, logout("%s\n", s->nic->nc.info_str));
diff --git a/hw/hda-audio.c b/hw/hda-audio.c
index 9b089e6..0bc0a25 100644
--- a/hw/hda-audio.c
+++ b/hw/hda-audio.c
@@ -777,7 +777,7 @@ static int hda_audio_init(HDACodecDevice *hda, const struct
desc_codec *desc)
uint32_t i, type;
a->desc = desc;
- a->name = a->hda.qdev.info->name;
+ a->name = qdev_get_info(&a->hda.qdev)->name;
dprint(a, 1, "%s: cad %d\n", __FUNCTION__, a->hda.cad);
AUD_register_card("hda", &a->card);
diff --git a/hw/ide/piix.c b/hw/ide/piix.c
index 08cbbe2..7d8f2c7 100644
--- a/hw/ide/piix.c
+++ b/hw/ide/piix.c
@@ -164,6 +164,7 @@ static int pci_piix_ide_initfn(PCIDevice *dev)
return 0;
}
+#if 0
static int pci_piix3_xen_ide_unplug(DeviceState *dev)
{
PCIDevice *pci_dev;
@@ -189,13 +190,18 @@ static int pci_piix3_xen_ide_unplug(DeviceState *dev)
qdev_reset_all(&(pci_ide->dev.qdev));
return 0;
}
+#endif
PCIDevice *pci_piix3_xen_ide_init(PCIBus *bus, DriveInfo **hd_table, int devfn)
{
PCIDevice *dev;
dev = pci_create_simple(bus, devfn, "piix3-ide-xen");
+ /* FIXME: BROKEN! */
+ abort();
+#if 0
dev->qdev.info->unplug = pci_piix3_xen_ide_unplug;
+#endif
pci_ide_create_devs(dev, hd_table);
return dev;
}
diff --git a/hw/intel-hda.c b/hw/intel-hda.c
index 10769e0..12dcc84 100644
--- a/hw/intel-hda.c
+++ b/hw/intel-hda.c
@@ -1116,8 +1116,8 @@ static void intel_hda_reset(DeviceState *dev)
/* reset codecs */
QTAILQ_FOREACH(qdev, &d->codecs.qbus.children, sibling) {
cdev = DO_UPCAST(HDACodecDevice, qdev, qdev);
- if (qdev->info->reset) {
- qdev->info->reset(qdev);
+ if (qdev_get_info(qdev)->reset) {
+ qdev_get_info(qdev)->reset(qdev);
}
d->state_sts |= (1 << cdev->cad);
}
@@ -1129,7 +1129,7 @@ static int intel_hda_init(PCIDevice *pci)
IntelHDAState *d = DO_UPCAST(IntelHDAState, pci, pci);
uint8_t *conf = d->pci.config;
- d->name = d->pci.qdev.info->name;
+ d->name = qdev_get_info(&d->pci.qdev)->name;
pci_config_set_interrupt_pin(conf, 1);
diff --git a/hw/lsi53c895a.c b/hw/lsi53c895a.c
index fcc27d7..b313f83 100644
--- a/hw/lsi53c895a.c
+++ b/hw/lsi53c895a.c
@@ -1681,7 +1681,7 @@ static void lsi_reg_writeb(LSIState *s, int offset,
uint8_t val)
DeviceState *dev;
QTAILQ_FOREACH(dev, &s->bus.qbus.children, sibling) {
- dev->info->reset(dev);
+ qdev_get_info(dev)->reset(dev);
}
s->sstat0 |= LSI_SSTAT0_RST;
lsi_script_scsi_interrupt(s, LSI_SIST0_RST, 0);
diff --git a/hw/ne2000-isa.c b/hw/ne2000-isa.c
index 11ffee7..60dc333 100644
--- a/hw/ne2000-isa.c
+++ b/hw/ne2000-isa.c
@@ -76,7 +76,7 @@ static int isa_ne2000_initfn(ISADevice *dev)
ne2000_reset(s);
s->nic = qemu_new_nic(&net_ne2000_isa_info, &s->c,
- dev->qdev.info->name, dev->qdev.id, s);
+ qdev_get_info(&dev->qdev)->name, dev->qdev.id, s);
qemu_format_nic_info_str(&s->nic->nc, s->c.macaddr.a);
return 0;
diff --git a/hw/ne2000.c b/hw/ne2000.c
index 62e082f..d016b8e 100644
--- a/hw/ne2000.c
+++ b/hw/ne2000.c
@@ -760,7 +760,7 @@ static int pci_ne2000_init(PCIDevice *pci_dev)
ne2000_reset(s);
s->nic = qemu_new_nic(&net_ne2000_info, &s->c,
- pci_dev->qdev.info->name, pci_dev->qdev.id, s);
+ qdev_get_info(&pci_dev->qdev)->name,
pci_dev->qdev.id, s);
qemu_format_nic_info_str(&s->nic->nc, s->c.macaddr.a);
if (!pci_dev->qdev.hotplugged) {
diff --git a/hw/pci.c b/hw/pci.c
index 399227f..46b7dac 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -161,7 +161,7 @@ void pci_device_reset(PCIDevice *dev)
int r;
/* TODO: call the below unconditionally once all pci devices
* are qdevified */
- if (dev->qdev.info) {
+ if (qdev_get_info(&dev->qdev)) {
qdev_reset_all(&dev->qdev);
}
@@ -844,7 +844,7 @@ static void pci_unregister_io_regions(PCIDevice *pci_dev)
static int pci_unregister_device(DeviceState *dev)
{
PCIDevice *pci_dev = DO_UPCAST(PCIDevice, qdev, dev);
- PCIDeviceInfo *info = DO_UPCAST(PCIDeviceInfo, qdev, dev->info);
+ PCIDeviceInfo *info = DO_UPCAST(PCIDeviceInfo, qdev, qdev_get_info(dev));
int ret = 0;
if (info->exit)
@@ -1534,7 +1534,7 @@ static int pci_qdev_init(DeviceState *qdev, DeviceInfo
*base)
static int pci_unplug_device(DeviceState *qdev)
{
PCIDevice *dev = DO_UPCAST(PCIDevice, qdev, qdev);
- PCIDeviceInfo *info = container_of(qdev->info, PCIDeviceInfo, qdev);
+ PCIDeviceInfo *info = container_of(qdev_get_info(qdev), PCIDeviceInfo,
qdev);
if (info->no_hotplug) {
qerror_report(QERR_DEVICE_NO_HOTPLUG, info->qdev.name);
@@ -1760,10 +1760,10 @@ static int pci_add_option_rom(PCIDevice *pdev, bool
is_default_rom)
size = 1 << qemu_fls(size);
}
- if (pdev->qdev.info->vmsd)
- snprintf(name, sizeof(name), "%s.rom", pdev->qdev.info->vmsd->name);
+ if (qdev_get_info(&pdev->qdev)->vmsd)
+ snprintf(name, sizeof(name), "%s.rom",
qdev_get_info(&pdev->qdev)->vmsd->name);
else
- snprintf(name, sizeof(name), "%s.rom", pdev->qdev.info->name);
+ snprintf(name, sizeof(name), "%s.rom",
qdev_get_info(&pdev->qdev)->name);
pdev->has_rom = true;
memory_region_init_ram(&pdev->rom, &pdev->qdev, name, size);
ptr = memory_region_get_ram_ptr(&pdev->rom);
@@ -2002,7 +2002,7 @@ static int pci_qdev_find_recursive(PCIBus *bus,
}
/* roughly check if given qdev is pci device */
- if (qdev->info->init == &pci_qdev_init &&
+ if (qdev_get_info(qdev)->init == &pci_qdev_init &&
qdev->parent_bus->info == &pci_bus_info) {
*pdev = DO_UPCAST(PCIDevice, qdev, qdev);
return 0;
diff --git a/hw/pcnet.c b/hw/pcnet.c
index cba253b..e58b195 100644
--- a/hw/pcnet.c
+++ b/hw/pcnet.c
@@ -1718,7 +1718,7 @@ int pcnet_common_init(DeviceState *dev, PCNetState *s,
NetClientInfo *info)
s->poll_timer = qemu_new_timer_ns(vm_clock, pcnet_poll_timer, s);
qemu_macaddr_default_if_unset(&s->conf.macaddr);
- s->nic = qemu_new_nic(info, &s->conf, dev->info->name, dev->id, s);
+ s->nic = qemu_new_nic(info, &s->conf, qdev_get_info(dev)->name, dev->id,
s);
qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a);
add_boot_device_path(s->conf.bootindex, dev, "/address@hidden");
diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index f0b811c..f235a26 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -597,7 +597,7 @@ static Property *qdev_prop_find(DeviceState *dev, const
char *name)
Property *prop;
/* device properties */
- prop = qdev_prop_walk(dev->info->props, name);
+ prop = qdev_prop_walk(qdev_get_info(dev)->props, name);
if (prop)
return prop;
@@ -627,7 +627,7 @@ int qdev_prop_parse(DeviceState *dev, const char *name,
const char *value)
* removed along with it.
*/
if (!prop || !prop->info->parse) {
- qerror_report(QERR_PROPERTY_NOT_FOUND, dev->info->name, name);
+ qerror_report(QERR_PROPERTY_NOT_FOUND, qdev_get_info(dev)->name, name);
return -1;
}
ret = prop->info->parse(dev, prop, value);
@@ -635,16 +635,16 @@ int qdev_prop_parse(DeviceState *dev, const char *name,
const char *value)
switch (ret) {
case -EEXIST:
qerror_report(QERR_PROPERTY_VALUE_IN_USE,
- dev->info->name, name, value);
+ qdev_get_info(dev)->name, name, value);
break;
default:
case -EINVAL:
qerror_report(QERR_PROPERTY_VALUE_BAD,
- dev->info->name, name, value);
+ qdev_get_info(dev)->name, name, value);
break;
case -ENOENT:
qerror_report(QERR_PROPERTY_VALUE_NOT_FOUND,
- dev->info->name, name, value);
+ qdev_get_info(dev)->name, name, value);
break;
}
return -1;
@@ -659,12 +659,12 @@ void qdev_prop_set(DeviceState *dev, const char *name,
void *src, enum PropertyT
prop = qdev_prop_find(dev, name);
if (!prop) {
fprintf(stderr, "%s: property \"%s.%s\" not found\n",
- __FUNCTION__, dev->info->name, name);
+ __FUNCTION__, qdev_get_info(dev)->name, name);
abort();
}
if (prop->info->type != type) {
fprintf(stderr, "%s: property \"%s.%s\" type mismatch\n",
- __FUNCTION__, dev->info->name, name);
+ __FUNCTION__, qdev_get_info(dev)->name, name);
abort();
}
qdev_prop_cpy(dev, prop, src);
@@ -713,7 +713,7 @@ int qdev_prop_set_drive(DeviceState *dev, const char *name,
BlockDriverState *va
if (res < 0) {
error_report("Can't attach drive %s to %s.%s: %s",
bdrv_get_device_name(value),
- dev->id ? dev->id : dev->info->name,
+ dev->id ? dev->id : qdev_get_info(dev)->name,
name, strerror(-res));
return -1;
}
@@ -785,8 +785,8 @@ void qdev_prop_set_globals(DeviceState *dev)
GlobalProperty *prop;
QTAILQ_FOREACH(prop, &global_props, next) {
- if (strcmp(dev->info->name, prop->driver) != 0 &&
- strcmp(dev->info->bus_info->name, prop->driver) != 0) {
+ if (strcmp(qdev_get_info(dev)->name, prop->driver) != 0 &&
+ strcmp(qdev_get_info(dev)->bus_info->name, prop->driver) != 0) {
continue;
}
if (qdev_prop_parse(dev, prop->property, prop->value) != 0) {
diff --git a/hw/qdev.c b/hw/qdev.c
index 7a5aa9f..2edbc61 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -46,8 +46,21 @@ static BusState *qbus_find(const char *path);
#define TYPE_DEVICE "device"
#define DEVICE(obj) OBJECT_CHECK(DeviceState, (obj), TYPE_DEVICE)
+#define DEVICE_CLASS(klass) OBJECT_CLASS_CHECK(DeviceClass, (klass),
TYPE_DEVICE)
+#define DEVICE_GET_CLASS(obj) OBJECT_GET_CLASS(DeviceClass, (obj), TYPE_DEVICE)
/* Register a new device type. */
+static void qdev_subclass_init(ObjectClass *klass, void *data)
+{
+ DeviceClass *dc = DEVICE_CLASS(klass);
+ dc->info = data;
+}
+
+DeviceInfo *qdev_get_info(DeviceState *dev)
+{
+ return DEVICE_GET_CLASS(dev)->info;
+}
+
void qdev_register(DeviceInfo *info)
{
TypeInfo type_info = {};
@@ -58,6 +71,8 @@ void qdev_register(DeviceInfo *info)
type_info.name = info->name;
type_info.parent = TYPE_DEVICE;
type_info.instance_size = info->size;
+ type_info.class_init = qdev_subclass_init;
+ type_info.class_data = info;
type_register_static(&type_info);
@@ -98,9 +113,8 @@ static DeviceState *qdev_create_from_info(BusState *bus,
DeviceInfo *info)
assert(bus->info == info->bus_info);
dev = DEVICE(object_new(info->name));
- dev->info = info;
dev->parent_bus = bus;
- qdev_prop_set_defaults(dev, dev->info->props);
+ qdev_prop_set_defaults(dev, qdev_get_info(dev)->props);
qdev_prop_set_defaults(dev, dev->parent_bus->info->props);
qdev_prop_set_globals(dev);
QTAILQ_INSERT_HEAD(&bus->children, dev, sibling);
@@ -113,11 +127,11 @@ static DeviceState *qdev_create_from_info(BusState *bus,
DeviceInfo *info)
QTAILQ_INIT(&dev->properties);
dev->state = DEV_STATE_CREATED;
- for (prop = dev->info->props; prop && prop->name; prop++) {
+ for (prop = qdev_get_info(dev)->props; prop && prop->name; prop++) {
qdev_property_add_legacy(dev, prop, NULL);
}
- for (prop = dev->info->bus_info->props; prop && prop->name; prop++) {
+ for (prop = qdev_get_info(dev)->bus_info->props; prop && prop->name;
prop++) {
qdev_property_add_legacy(dev, prop, NULL);
}
@@ -347,19 +361,19 @@ int qdev_init(DeviceState *dev)
int rc;
assert(dev->state == DEV_STATE_CREATED);
- rc = dev->info->init(dev, dev->info);
+ rc = qdev_get_info(dev)->init(dev, qdev_get_info(dev));
if (rc < 0) {
qdev_free(dev);
return rc;
}
- if (dev->info->vmsd) {
- vmstate_register_with_alias_id(dev, -1, dev->info->vmsd, dev,
+ if (qdev_get_info(dev)->vmsd) {
+ vmstate_register_with_alias_id(dev, -1, qdev_get_info(dev)->vmsd, dev,
dev->instance_id_alias,
dev->alias_required_for_version);
}
dev->state = DEV_STATE_INITIALIZED;
- if (dev->hotplugged && dev->info->reset) {
- dev->info->reset(dev);
+ if (dev->hotplugged && qdev_get_info(dev)->reset) {
+ qdev_get_info(dev)->reset(dev);
}
return 0;
}
@@ -378,7 +392,7 @@ int qdev_unplug(DeviceState *dev)
qerror_report(QERR_BUS_NO_HOTPLUG, dev->parent_bus->name);
return -1;
}
- assert(dev->info->unplug != NULL);
+ assert(qdev_get_info(dev)->unplug != NULL);
if (dev->ref != 0) {
qerror_report(QERR_DEVICE_IN_USE, dev->id?:"");
@@ -387,13 +401,13 @@ int qdev_unplug(DeviceState *dev)
qdev_hot_removed = true;
- return dev->info->unplug(dev);
+ return qdev_get_info(dev)->unplug(dev);
}
static int qdev_reset_one(DeviceState *dev, void *opaque)
{
- if (dev->info->reset) {
- dev->info->reset(dev);
+ if (qdev_get_info(dev)->reset) {
+ qdev_get_info(dev)->reset(dev);
}
return 0;
@@ -444,7 +458,7 @@ int qdev_simple_unplug_cb(DeviceState *dev)
way is somewhat unclean, and best avoided. */
void qdev_init_nofail(DeviceState *dev)
{
- DeviceInfo *info = dev->info;
+ DeviceInfo *info = qdev_get_info(dev);
if (qdev_init(dev) < 0) {
error_report("Initialization of device %s failed", info->name);
@@ -482,15 +496,15 @@ void qdev_free(DeviceState *dev)
bus = QLIST_FIRST(&dev->child_bus);
qbus_free(bus);
}
- if (dev->info->vmsd)
- vmstate_unregister(dev, dev->info->vmsd, dev);
- if (dev->info->exit)
- dev->info->exit(dev);
+ if (qdev_get_info(dev)->vmsd)
+ vmstate_unregister(dev, qdev_get_info(dev)->vmsd, dev);
+ if (qdev_get_info(dev)->exit)
+ qdev_get_info(dev)->exit(dev);
if (dev->opts)
qemu_opts_del(dev->opts);
}
QTAILQ_REMOVE(&dev->parent_bus->children, dev, sibling);
- for (prop = dev->info->props; prop && prop->name; prop++) {
+ for (prop = qdev_get_info(dev)->props; prop && prop->name; prop++) {
if (prop->info->free) {
prop->info->free(dev, prop);
}
@@ -676,7 +690,7 @@ static void qbus_list_bus(DeviceState *dev)
const char *sep = " ";
error_printf("child busses at \"%s\":",
- dev->id ? dev->id : dev->info->name);
+ dev->id ? dev->id : qdev_get_info(dev)->name);
QLIST_FOREACH(child, &dev->child_bus, sibling) {
error_printf("%s\"%s\"", sep, child->name);
sep = ", ";
@@ -691,7 +705,7 @@ static void qbus_list_dev(BusState *bus)
error_printf("devices at \"%s\":", bus->name);
QTAILQ_FOREACH(dev, &bus->children, sibling) {
- error_printf("%s\"%s\"", sep, dev->info->name);
+ error_printf("%s\"%s\"", sep, qdev_get_info(dev)->name);
if (dev->id)
error_printf("/\"%s\"", dev->id);
sep = ", ";
@@ -727,12 +741,12 @@ static DeviceState *qbus_find_dev(BusState *bus, char
*elem)
}
}
QTAILQ_FOREACH(dev, &bus->children, sibling) {
- if (strcmp(dev->info->name, elem) == 0) {
+ if (strcmp(qdev_get_info(dev)->name, elem) == 0) {
return dev;
}
}
QTAILQ_FOREACH(dev, &bus->children, sibling) {
- if (dev->info->alias && strcmp(dev->info->alias, elem) == 0) {
+ if (qdev_get_info(dev)->alias && strcmp(qdev_get_info(dev)->alias,
elem) == 0) {
return dev;
}
}
@@ -934,7 +948,7 @@ static void qdev_print_props(Monitor *mon, DeviceState
*dev, Property *props,
static void qdev_print(Monitor *mon, DeviceState *dev, int indent)
{
BusState *child;
- qdev_printf("dev: %s, id \"%s\"\n", dev->info->name,
+ qdev_printf("dev: %s, id \"%s\"\n", qdev_get_info(dev)->name,
dev->id ? dev->id : "");
indent += 2;
if (dev->num_gpio_in) {
@@ -943,7 +957,7 @@ static void qdev_print(Monitor *mon, DeviceState *dev, int
indent)
if (dev->num_gpio_out) {
qdev_printf("gpio-out %d\n", dev->num_gpio_out);
}
- qdev_print_props(mon, dev, dev->info->props, "dev", indent);
+ qdev_print_props(mon, dev, qdev_get_info(dev)->props, "dev", indent);
qdev_print_props(mon, dev, dev->parent_bus->info->props, "bus", indent);
if (dev->parent_bus->info->print_dev)
dev->parent_bus->info->print_dev(mon, dev, indent);
@@ -1024,7 +1038,7 @@ static int qdev_get_fw_dev_path_helper(DeviceState *dev,
char *p, int size)
l += snprintf(p + l, size - l, "%s", d);
g_free(d);
} else {
- l += snprintf(p + l, size - l, "%s", dev->info->name);
+ l += snprintf(p + l, size - l, "%s", qdev_get_info(dev)->name);
}
}
l += snprintf(p + l , size - l, "/");
@@ -1046,7 +1060,7 @@ char* qdev_get_fw_dev_path(DeviceState *dev)
char *qdev_get_type(DeviceState *dev, Error **errp)
{
- return g_strdup(dev->info->name);
+ return g_strdup(qdev_get_info(dev)->name);
}
void qdev_ref(DeviceState *dev)
@@ -1241,7 +1255,7 @@ void qdev_property_add_child(DeviceState *dev, const char
*name,
{
gchar *type;
- type = g_strdup_printf("child<%s>", child->info->name);
+ type = g_strdup_printf("child<%s>", qdev_get_info(child)->name);
qdev_property_add(dev, name, type, qdev_get_child_property,
NULL, NULL, child, errp);
@@ -1292,7 +1306,7 @@ static void qdev_set_link_property(DeviceState *dev,
Visitor *v, void *opaque,
if (target) {
gchar *target_type;
- target_type = g_strdup_printf("link<%s>", target->info->name);
+ target_type = g_strdup_printf("link<%s>",
qdev_get_info(target)->name);
if (strcmp(target_type, type) == 0) {
*child = target;
qdev_ref(target);
diff --git a/hw/qdev.h b/hw/qdev.h
index aabaaa3..01dd1d6 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -69,6 +69,7 @@ typedef struct DeviceProperty
typedef struct DeviceClass {
ObjectClass parent_class;
+ DeviceInfo *info;
} DeviceClass;
/* This structure should not be accessed directly. We declare it here
@@ -80,7 +81,6 @@ struct DeviceState {
enum DevState state;
QemuOpts *opts;
int hotplugged;
- DeviceInfo *info;
BusState *parent_bus;
int num_gpio_out;
qemu_irq *gpio_out;
@@ -378,9 +378,19 @@ void qdev_prop_set_defaults(DeviceState *dev, Property
*props);
void qdev_prop_register_global_list(GlobalProperty *props);
void qdev_prop_set_globals(DeviceState *dev);
+DeviceInfo *qdev_get_info(DeviceState *dev);
+
static inline const char *qdev_fw_name(DeviceState *dev)
{
- return dev->info->fw_name ? : dev->info->alias ? : dev->info->name;
+ DeviceInfo *info = qdev_get_info(dev);
+
+ if (info->fw_name) {
+ return info->fw_name;
+ } else if (info->alias) {
+ return info->alias;
+ }
+
+ return info->name;
}
char *qdev_get_fw_dev_path(DeviceState *dev);
diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index aa8ed0a..c087506 100644
--- a/hw/rtl8139.c
+++ b/hw/rtl8139.c
@@ -3478,7 +3478,7 @@ static int pci_rtl8139_init(PCIDevice *dev)
s->eeprom.contents[9] = s->conf.macaddr.a[4] | s->conf.macaddr.a[5] << 8;
s->nic = qemu_new_nic(&net_rtl8139_info, &s->conf,
- dev->qdev.info->name, dev->qdev.id, s);
+ qdev_get_info(&dev->qdev)->name, dev->qdev.id, s);
qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a);
s->cplus_txbuffer = NULL;
diff --git a/hw/usb-bus.c b/hw/usb-bus.c
index 8cafb76..e1bcab1 100644
--- a/hw/usb-bus.c
+++ b/hw/usb-bus.c
@@ -251,7 +251,7 @@ int usb_claim_port(USBDevice *dev)
return -1;
}
} else {
- if (bus->nfree == 1 && strcmp(dev->qdev.info->name, "usb-hub") != 0) {
+ if (bus->nfree == 1 && strcmp(qdev_get_info(&dev->qdev)->name,
"usb-hub") != 0) {
/* Create a new hub and chain it on */
usb_create_simple(bus, "usb-hub");
}
diff --git a/hw/usb-ccid.c b/hw/usb-ccid.c
index cd349f3..8a79729 100644
--- a/hw/usb-ccid.c
+++ b/hw/usb-ccid.c
@@ -1122,7 +1122,7 @@ static int ccid_card_exit(DeviceState *qdev)
{
int ret = 0;
CCIDCardState *card = DO_UPCAST(CCIDCardState, qdev, qdev);
- CCIDCardInfo *info = DO_UPCAST(CCIDCardInfo, qdev, qdev->info);
+ CCIDCardInfo *info = DO_UPCAST(CCIDCardInfo, qdev, qdev_get_info(qdev));
USBCCIDState *s =
DO_UPCAST(USBCCIDState, dev.qdev, card->qdev.parent_bus->parent);
diff --git a/hw/usb-net.c b/hw/usb-net.c
index a8b7c8d..5d7bfcf 100644
--- a/hw/usb-net.c
+++ b/hw/usb-net.c
@@ -1350,7 +1350,7 @@ static int usb_net_initfn(USBDevice *dev)
qemu_macaddr_default_if_unset(&s->conf.macaddr);
s->nic = qemu_new_nic(&net_usbnet_info, &s->conf,
- s->dev.qdev.info->name, s->dev.qdev.id, s);
+ qdev_get_info(&s->dev.qdev)->name, s->dev.qdev.id,
s);
qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a);
snprintf(s->usbstring_mac, sizeof(s->usbstring_mac),
"%02x%02x%02x%02x%02x%02x",
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index c2981c5..51c96b7 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -1775,7 +1775,7 @@ static int usb_ohci_init(OHCIState *ohci, DeviceState
*dev,
memory_region_init_io(&ohci->mem, &ohci_mem_ops, ohci, "ohci", 256);
ohci->localmem_base = localmem_base;
- ohci->name = dev->info->name;
+ ohci->name = qdev_get_info(dev)->name;
usb_packet_init(&ohci->usb_packet);
ohci->async_td = 0;
diff --git a/hw/virtio-console.c b/hw/virtio-console.c
index d3351c8..f922400 100644
--- a/hw/virtio-console.c
+++ b/hw/virtio-console.c
@@ -99,7 +99,7 @@ static int virtconsole_initfn(VirtIOSerialPort *port)
{
VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port);
VirtIOSerialPortInfo *info = DO_UPCAST(VirtIOSerialPortInfo, qdev,
- vcon->port.dev.info);
+ qdev_get_info(&vcon->port.dev));
if (port->id == 0 && !info->is_console) {
error_report("Port number 0 on virtio-serial devices reserved for
virtconsole devices for backward compatibility.");
diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index 8c2f460..6c785d0 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -1030,7 +1030,7 @@ VirtIODevice *virtio_net_init(DeviceState *dev, NICConf
*conf,
memcpy(&n->mac[0], &conf->macaddr, sizeof(n->mac));
n->status = VIRTIO_NET_S_LINK_UP;
- n->nic = qemu_new_nic(&net_virtio_info, conf, dev->info->name, dev->id, n);
+ n->nic = qemu_new_nic(&net_virtio_info, conf, qdev_get_info(dev)->name,
dev->id, n);
qemu_format_nic_info_str(&n->nic->nc, conf->macaddr.a);
diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
index a4825b9..b9c8ca7 100644
--- a/hw/virtio-serial-bus.c
+++ b/hw/virtio-serial-bus.c
@@ -135,7 +135,7 @@ static void do_flush_queued_data(VirtIOSerialPort *port,
VirtQueue *vq,
assert(port);
assert(virtio_queue_ready(vq));
- info = DO_UPCAST(VirtIOSerialPortInfo, qdev, port->dev.info);
+ info = DO_UPCAST(VirtIOSerialPortInfo, qdev, qdev_get_info(&port->dev));
while (!port->throttled) {
unsigned int i;
@@ -358,7 +358,7 @@ static void handle_control_message(VirtIOSerial *vser, void
*buf, size_t len)
trace_virtio_serial_handle_control_message_port(port->id);
- info = DO_UPCAST(VirtIOSerialPortInfo, qdev, port->dev.info);
+ info = DO_UPCAST(VirtIOSerialPortInfo, qdev, qdev_get_info(&port->dev));
switch(cpkt.event) {
case VIRTIO_CONSOLE_PORT_READY:
@@ -470,7 +470,7 @@ static void handle_output(VirtIODevice *vdev, VirtQueue *vq)
vser = DO_UPCAST(VirtIOSerial, vdev, vdev);
port = find_port_by_vq(vser, vq);
- info = port ? DO_UPCAST(VirtIOSerialPortInfo, qdev, port->dev.info) : NULL;
+ info = port ? DO_UPCAST(VirtIOSerialPortInfo, qdev,
qdev_get_info(&port->dev)) : NULL;
if (!port || !port->host_connected || !info->have_data) {
discard_vq_data(vq, vdev);
@@ -809,7 +809,7 @@ static int virtser_port_qdev_exit(DeviceState *qdev)
{
VirtIOSerialPort *port = DO_UPCAST(VirtIOSerialPort, dev, qdev);
VirtIOSerialPortInfo *info = DO_UPCAST(VirtIOSerialPortInfo, qdev,
- port->dev.info);
+ qdev_get_info(&port->dev));
VirtIOSerial *vser = port->vser;
qemu_bh_delete(port->bh);
--
1.7.4.1
- Re: [Qemu-devel] [PATCH v3 064/197] killall VIOsPAPRDeviceInfo, (continued)
- [Qemu-devel] [PATCH v3 065/197] qxl: be more patch monkey friendly, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 066/197] make es1370 more script monkey friendly, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 067/197] remove arrays of PCIDeviceInfo, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 050/197] accessors for scsideviceinfo, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 012/197] qdev: add explicitly named devices to the root complex, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 043/197] kill off ISADeviceInfo, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 013/197] dev: add an anonymous peripheral container, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 041/197] add class_init to deviceinfo, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 069/197] patch monkey, that funky monkey, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 030/197] qdev: move qdev->info to class,
Anthony Liguori <=
- [Qemu-devel] [PATCH v3 032/197] qdev: user a wrapper to access reset and promote reset to a class method, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 027/197] rename qobject -> object, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 057/197] add SMBusDevice to the type hiearchy, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 029/197] Start integration of qom w/qdev., Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 062/197] killall HDACodecDeviceInfo, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 028/197] more renames, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 053/197] kill off SCSIDeviceInfo, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 019/197] bug fix spotted by paolo, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 014/197] rtc: make piix3 set the rtc as a child (v2), Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 031/197] qdev: don't access name through info, Anthony Liguori, 2011/12/12