diff options
author | Anthony Liguori <aliguori@us.ibm.com> | 2011-12-22 15:14:27 -0600 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2012-02-03 10:41:08 -0600 |
commit | 9fbe61277ff72748850eb746ac33fb9c110d2ae5 (patch) | |
tree | 8cfc3eba484ad0557eb71e045ff5d7900cc5e402 /hw/qdev.c | |
parent | 9674bfe42070e58242f0048f4f03fde69d570a75 (diff) | |
download | qemu-9fbe61277ff72748850eb746ac33fb9c110d2ae5.zip |
qdev: refactor away qdev_create_from_info
Note that the FIXME gets fixed in series 4/4. We need to convert BusState to
QOM before we can make parent_bus a link.
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/qdev.c')
-rw-r--r-- | hw/qdev.c | 35 |
1 files changed, 22 insertions, 13 deletions
@@ -124,30 +124,22 @@ bool qdev_exists(const char *name) static void qdev_property_add_legacy(DeviceState *dev, Property *prop, Error **errp); -static DeviceState *qdev_create_from_info(BusState *bus, const char *typename) +void qdev_set_parent_bus(DeviceState *dev, BusState *bus) { - DeviceState *dev; Property *prop; - dev = DEVICE(object_new(typename)); - - dev->parent_bus = bus; - qdev_prop_set_defaults(dev, dev->parent_bus->info->props); - if (qdev_hotplug) { assert(bus->allow_hotplug); } + dev->parent_bus = bus; QTAILQ_INSERT_HEAD(&bus->children, dev, sibling); + qdev_prop_set_defaults(dev, dev->parent_bus->info->props); for (prop = qdev_get_bus_info(dev)->props; prop && prop->name; prop++) { qdev_property_add_legacy(dev, prop, NULL); qdev_property_add_static(dev, prop, NULL); } - - qdev_prop_set_globals(dev); - - return dev; } /* Create a new device. This only initializes the device state structure @@ -172,11 +164,21 @@ DeviceState *qdev_create(BusState *bus, const char *name) DeviceState *qdev_try_create(BusState *bus, const char *name) { + DeviceState *dev; + + dev = DEVICE(object_new(name)); + if (!dev) { + return NULL; + } + if (!bus) { bus = sysbus_get_default(); } - return qdev_create_from_info(bus, name); + qdev_set_parent_bus(dev, bus); + qdev_prop_set_globals(dev); + + return dev; } static void qdev_print_devinfo(ObjectClass *klass, void *opaque) @@ -373,8 +375,15 @@ DeviceState *qdev_device_add(QemuOpts *opts) return NULL; } + if (!bus) { + bus = sysbus_get_default(); + } + /* create device, set properties */ - qdev = qdev_create_from_info(bus, driver); + qdev = DEVICE(object_new(driver)); + qdev_set_parent_bus(qdev, bus); + qdev_prop_set_globals(qdev); + id = qemu_opts_id(opts); if (id) { qdev->id = id; |