xref: /openbmc/qemu/hw/core/qdev.c (revision a69bef1cf12159233b0ba193bd9dc9b173cea453)
1 /*
2  *  Dynamic device configuration and creation.
3  *
4  *  Copyright (c) 2009 CodeSourcery
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 /* The theory here is that it should be possible to create a machine without
21    knowledge of specific devices.  Historically board init routines have
22    passed a bunch of arguments to each device, requiring the board know
23    exactly which device it is dealing with.  This file provides an abstract
24    API for device configuration and initialization.  Devices will generally
25    inherit from a particular bus (e.g. PCI or I2C) rather than
26    this API directly.  */
27 
28 #include "hw/qdev.h"
29 #include "hw/fw-path-provider.h"
30 #include "sysemu/sysemu.h"
31 #include "qapi/error.h"
32 #include "qapi/qmp/qerror.h"
33 #include "qapi/visitor.h"
34 #include "qapi/qmp/qjson.h"
35 #include "hw/hotplug.h"
36 #include "hw/boards.h"
37 #include "qapi-event.h"
38 
39 int qdev_hotplug = 0;
40 static bool qdev_hot_added = false;
41 static bool qdev_hot_removed = false;
42 
43 const VMStateDescription *qdev_get_vmsd(DeviceState *dev)
44 {
45     DeviceClass *dc = DEVICE_GET_CLASS(dev);
46     return dc->vmsd;
47 }
48 
49 const char *qdev_fw_name(DeviceState *dev)
50 {
51     DeviceClass *dc = DEVICE_GET_CLASS(dev);
52 
53     if (dc->fw_name) {
54         return dc->fw_name;
55     }
56 
57     return object_get_typename(OBJECT(dev));
58 }
59 
60 static void qdev_property_add_legacy(DeviceState *dev, Property *prop,
61                                      Error **errp);
62 
63 static void bus_remove_child(BusState *bus, DeviceState *child)
64 {
65     BusChild *kid;
66 
67     QTAILQ_FOREACH(kid, &bus->children, sibling) {
68         if (kid->child == child) {
69             char name[32];
70 
71             snprintf(name, sizeof(name), "child[%d]", kid->index);
72             QTAILQ_REMOVE(&bus->children, kid, sibling);
73 
74             /* This gives back ownership of kid->child back to us.  */
75             object_property_del(OBJECT(bus), name, NULL);
76             object_unref(OBJECT(kid->child));
77             g_free(kid);
78             return;
79         }
80     }
81 }
82 
83 static void bus_add_child(BusState *bus, DeviceState *child)
84 {
85     char name[32];
86     BusChild *kid = g_malloc0(sizeof(*kid));
87 
88     if (qdev_hotplug) {
89         assert(bus->allow_hotplug);
90     }
91 
92     kid->index = bus->max_index++;
93     kid->child = child;
94     object_ref(OBJECT(kid->child));
95 
96     QTAILQ_INSERT_HEAD(&bus->children, kid, sibling);
97 
98     /* This transfers ownership of kid->child to the property.  */
99     snprintf(name, sizeof(name), "child[%d]", kid->index);
100     object_property_add_link(OBJECT(bus), name,
101                              object_get_typename(OBJECT(child)),
102                              (Object **)&kid->child,
103                              NULL, /* read-only property */
104                              0, /* return ownership on prop deletion */
105                              NULL);
106 }
107 
108 void qdev_set_parent_bus(DeviceState *dev, BusState *bus)
109 {
110     dev->parent_bus = bus;
111     object_ref(OBJECT(bus));
112     bus_add_child(bus, dev);
113 }
114 
115 /* Create a new device.  This only initializes the device state structure
116    and allows properties to be set.  qdev_init should be called to
117    initialize the actual device emulation.  */
118 DeviceState *qdev_create(BusState *bus, const char *name)
119 {
120     DeviceState *dev;
121 
122     dev = qdev_try_create(bus, name);
123     if (!dev) {
124         if (bus) {
125             error_report("Unknown device '%s' for bus '%s'", name,
126                          object_get_typename(OBJECT(bus)));
127         } else {
128             error_report("Unknown device '%s' for default sysbus", name);
129         }
130         abort();
131     }
132 
133     return dev;
134 }
135 
136 DeviceState *qdev_try_create(BusState *bus, const char *type)
137 {
138     DeviceState *dev;
139 
140     if (object_class_by_name(type) == NULL) {
141         return NULL;
142     }
143     dev = DEVICE(object_new(type));
144     if (!dev) {
145         return NULL;
146     }
147 
148     if (!bus) {
149         bus = sysbus_get_default();
150     }
151 
152     qdev_set_parent_bus(dev, bus);
153     object_unref(OBJECT(dev));
154     return dev;
155 }
156 
157 /* Initialize a device.  Device properties should be set before calling
158    this function.  IRQs and MMIO regions should be connected/mapped after
159    calling this function.
160    On failure, destroy the device and return negative value.
161    Return 0 on success.  */
162 int qdev_init(DeviceState *dev)
163 {
164     Error *local_err = NULL;
165 
166     assert(!dev->realized);
167 
168     object_property_set_bool(OBJECT(dev), true, "realized", &local_err);
169     if (local_err != NULL) {
170         qerror_report_err(local_err);
171         error_free(local_err);
172         object_unparent(OBJECT(dev));
173         return -1;
174     }
175     return 0;
176 }
177 
178 static void device_realize(DeviceState *dev, Error **errp)
179 {
180     DeviceClass *dc = DEVICE_GET_CLASS(dev);
181 
182     if (dc->init) {
183         int rc = dc->init(dev);
184         if (rc < 0) {
185             error_setg(errp, "Device initialization failed.");
186             return;
187         }
188     }
189 }
190 
191 static void device_unrealize(DeviceState *dev, Error **errp)
192 {
193     DeviceClass *dc = DEVICE_GET_CLASS(dev);
194 
195     if (dc->exit) {
196         int rc = dc->exit(dev);
197         if (rc < 0) {
198             error_setg(errp, "Device exit failed.");
199             return;
200         }
201     }
202 }
203 
204 void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
205                                  int required_for_version)
206 {
207     assert(!dev->realized);
208     dev->instance_id_alias = alias_id;
209     dev->alias_required_for_version = required_for_version;
210 }
211 
212 void qdev_unplug(DeviceState *dev, Error **errp)
213 {
214     DeviceClass *dc = DEVICE_GET_CLASS(dev);
215 
216     if (dev->parent_bus && !dev->parent_bus->allow_hotplug) {
217         error_set(errp, QERR_BUS_NO_HOTPLUG, dev->parent_bus->name);
218         return;
219     }
220 
221     if (!dc->hotpluggable) {
222         error_set(errp, QERR_DEVICE_NO_HOTPLUG,
223                   object_get_typename(OBJECT(dev)));
224         return;
225     }
226 
227     qdev_hot_removed = true;
228 
229     if (dev->parent_bus && dev->parent_bus->hotplug_handler) {
230         hotplug_handler_unplug(dev->parent_bus->hotplug_handler, dev, errp);
231     } else {
232         assert(dc->unplug != NULL);
233         if (dc->unplug(dev) < 0) { /* legacy handler */
234             error_set(errp, QERR_UNDEFINED_ERROR);
235         }
236     }
237 }
238 
239 static int qdev_reset_one(DeviceState *dev, void *opaque)
240 {
241     device_reset(dev);
242 
243     return 0;
244 }
245 
246 static int qbus_reset_one(BusState *bus, void *opaque)
247 {
248     BusClass *bc = BUS_GET_CLASS(bus);
249     if (bc->reset) {
250         bc->reset(bus);
251     }
252     return 0;
253 }
254 
255 void qdev_reset_all(DeviceState *dev)
256 {
257     qdev_walk_children(dev, NULL, NULL, qdev_reset_one, qbus_reset_one, NULL);
258 }
259 
260 void qbus_reset_all(BusState *bus)
261 {
262     qbus_walk_children(bus, NULL, NULL, qdev_reset_one, qbus_reset_one, NULL);
263 }
264 
265 void qbus_reset_all_fn(void *opaque)
266 {
267     BusState *bus = opaque;
268     qbus_reset_all(bus);
269 }
270 
271 /* can be used as ->unplug() callback for the simple cases */
272 int qdev_simple_unplug_cb(DeviceState *dev)
273 {
274     /* just zap it */
275     object_unparent(OBJECT(dev));
276     return 0;
277 }
278 
279 
280 /* Like qdev_init(), but terminate program via error_report() instead of
281    returning an error value.  This is okay during machine creation.
282    Don't use for hotplug, because there callers need to recover from
283    failure.  Exception: if you know the device's init() callback can't
284    fail, then qdev_init_nofail() can't fail either, and is therefore
285    usable even then.  But relying on the device implementation that
286    way is somewhat unclean, and best avoided.  */
287 void qdev_init_nofail(DeviceState *dev)
288 {
289     const char *typename = object_get_typename(OBJECT(dev));
290 
291     if (qdev_init(dev) < 0) {
292         error_report("Initialization of device %s failed", typename);
293         exit(1);
294     }
295 }
296 
297 void qdev_machine_creation_done(void)
298 {
299     /*
300      * ok, initial machine setup is done, starting from now we can
301      * only create hotpluggable devices
302      */
303     qdev_hotplug = 1;
304 }
305 
306 bool qdev_machine_modified(void)
307 {
308     return qdev_hot_added || qdev_hot_removed;
309 }
310 
311 BusState *qdev_get_parent_bus(DeviceState *dev)
312 {
313     return dev->parent_bus;
314 }
315 
316 static NamedGPIOList *qdev_get_named_gpio_list(DeviceState *dev,
317                                                const char *name)
318 {
319     NamedGPIOList *ngl;
320 
321     QLIST_FOREACH(ngl, &dev->gpios, node) {
322         /* NULL is a valid and matchable name, otherwise do a normal
323          * strcmp match.
324          */
325         if ((!ngl->name && !name) ||
326                 (name && ngl->name && strcmp(name, ngl->name) == 0)) {
327             return ngl;
328         }
329     }
330 
331     ngl = g_malloc0(sizeof(*ngl));
332     ngl->name = g_strdup(name);
333     QLIST_INSERT_HEAD(&dev->gpios, ngl, node);
334     return ngl;
335 }
336 
337 void qdev_init_gpio_in_named(DeviceState *dev, qemu_irq_handler handler,
338                              const char *name, int n)
339 {
340     int i;
341     NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
342     char *propname = g_strdup_printf("%s[*]", name ? name : "unnamed-gpio-in");
343 
344     assert(gpio_list->num_out == 0 || !name);
345     gpio_list->in = qemu_extend_irqs(gpio_list->in, gpio_list->num_in, handler,
346                                      dev, n);
347 
348     for (i = gpio_list->num_in; i < gpio_list->num_in + n; i++) {
349         object_property_add_child(OBJECT(dev), propname,
350                                   OBJECT(gpio_list->in[i]), &error_abort);
351     }
352     g_free(propname);
353 
354     gpio_list->num_in += n;
355 }
356 
357 void qdev_init_gpio_in(DeviceState *dev, qemu_irq_handler handler, int n)
358 {
359     qdev_init_gpio_in_named(dev, handler, NULL, n);
360 }
361 
362 void qdev_init_gpio_out_named(DeviceState *dev, qemu_irq *pins,
363                               const char *name, int n)
364 {
365     NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
366 
367     assert(gpio_list->num_in == 0 || !name);
368     assert(gpio_list->num_out == 0);
369     gpio_list->num_out = n;
370     gpio_list->out = pins;
371 }
372 
373 void qdev_init_gpio_out(DeviceState *dev, qemu_irq *pins, int n)
374 {
375     qdev_init_gpio_out_named(dev, pins, NULL, n);
376 }
377 
378 qemu_irq qdev_get_gpio_in_named(DeviceState *dev, const char *name, int n)
379 {
380     NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
381 
382     assert(n >= 0 && n < gpio_list->num_in);
383     return gpio_list->in[n];
384 }
385 
386 qemu_irq qdev_get_gpio_in(DeviceState *dev, int n)
387 {
388     return qdev_get_gpio_in_named(dev, NULL, n);
389 }
390 
391 void qdev_connect_gpio_out_named(DeviceState *dev, const char *name, int n,
392                                  qemu_irq pin)
393 {
394     NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
395 
396     assert(n >= 0 && n < gpio_list->num_out);
397     gpio_list->out[n] = pin;
398 }
399 
400 void qdev_connect_gpio_out(DeviceState * dev, int n, qemu_irq pin)
401 {
402     qdev_connect_gpio_out_named(dev, NULL, n, pin);
403 }
404 
405 BusState *qdev_get_child_bus(DeviceState *dev, const char *name)
406 {
407     BusState *bus;
408 
409     QLIST_FOREACH(bus, &dev->child_bus, sibling) {
410         if (strcmp(name, bus->name) == 0) {
411             return bus;
412         }
413     }
414     return NULL;
415 }
416 
417 int qbus_walk_children(BusState *bus,
418                        qdev_walkerfn *pre_devfn, qbus_walkerfn *pre_busfn,
419                        qdev_walkerfn *post_devfn, qbus_walkerfn *post_busfn,
420                        void *opaque)
421 {
422     BusChild *kid;
423     int err;
424 
425     if (pre_busfn) {
426         err = pre_busfn(bus, opaque);
427         if (err) {
428             return err;
429         }
430     }
431 
432     QTAILQ_FOREACH(kid, &bus->children, sibling) {
433         err = qdev_walk_children(kid->child,
434                                  pre_devfn, pre_busfn,
435                                  post_devfn, post_busfn, opaque);
436         if (err < 0) {
437             return err;
438         }
439     }
440 
441     if (post_busfn) {
442         err = post_busfn(bus, opaque);
443         if (err) {
444             return err;
445         }
446     }
447 
448     return 0;
449 }
450 
451 int qdev_walk_children(DeviceState *dev,
452                        qdev_walkerfn *pre_devfn, qbus_walkerfn *pre_busfn,
453                        qdev_walkerfn *post_devfn, qbus_walkerfn *post_busfn,
454                        void *opaque)
455 {
456     BusState *bus;
457     int err;
458 
459     if (pre_devfn) {
460         err = pre_devfn(dev, opaque);
461         if (err) {
462             return err;
463         }
464     }
465 
466     QLIST_FOREACH(bus, &dev->child_bus, sibling) {
467         err = qbus_walk_children(bus, pre_devfn, pre_busfn,
468                                  post_devfn, post_busfn, opaque);
469         if (err < 0) {
470             return err;
471         }
472     }
473 
474     if (post_devfn) {
475         err = post_devfn(dev, opaque);
476         if (err) {
477             return err;
478         }
479     }
480 
481     return 0;
482 }
483 
484 DeviceState *qdev_find_recursive(BusState *bus, const char *id)
485 {
486     BusChild *kid;
487     DeviceState *ret;
488     BusState *child;
489 
490     QTAILQ_FOREACH(kid, &bus->children, sibling) {
491         DeviceState *dev = kid->child;
492 
493         if (dev->id && strcmp(dev->id, id) == 0) {
494             return dev;
495         }
496 
497         QLIST_FOREACH(child, &dev->child_bus, sibling) {
498             ret = qdev_find_recursive(child, id);
499             if (ret) {
500                 return ret;
501             }
502         }
503     }
504     return NULL;
505 }
506 
507 static void qbus_realize(BusState *bus, DeviceState *parent, const char *name)
508 {
509     const char *typename = object_get_typename(OBJECT(bus));
510     BusClass *bc;
511     char *buf;
512     int i, len, bus_id;
513 
514     bus->parent = parent;
515 
516     if (name) {
517         bus->name = g_strdup(name);
518     } else if (bus->parent && bus->parent->id) {
519         /* parent device has id -> use it plus parent-bus-id for bus name */
520         bus_id = bus->parent->num_child_bus;
521 
522         len = strlen(bus->parent->id) + 16;
523         buf = g_malloc(len);
524         snprintf(buf, len, "%s.%d", bus->parent->id, bus_id);
525         bus->name = buf;
526     } else {
527         /* no id -> use lowercase bus type plus global bus-id for bus name */
528         bc = BUS_GET_CLASS(bus);
529         bus_id = bc->automatic_ids++;
530 
531         len = strlen(typename) + 16;
532         buf = g_malloc(len);
533         len = snprintf(buf, len, "%s.%d", typename, bus_id);
534         for (i = 0; i < len; i++) {
535             buf[i] = qemu_tolower(buf[i]);
536         }
537         bus->name = buf;
538     }
539 
540     if (bus->parent) {
541         QLIST_INSERT_HEAD(&bus->parent->child_bus, bus, sibling);
542         bus->parent->num_child_bus++;
543         object_property_add_child(OBJECT(bus->parent), bus->name, OBJECT(bus), NULL);
544         object_unref(OBJECT(bus));
545     } else if (bus != sysbus_get_default()) {
546         /* TODO: once all bus devices are qdevified,
547            only reset handler for main_system_bus should be registered here. */
548         qemu_register_reset(qbus_reset_all_fn, bus);
549     }
550 }
551 
552 static void bus_unparent(Object *obj)
553 {
554     BusState *bus = BUS(obj);
555     BusChild *kid;
556 
557     while ((kid = QTAILQ_FIRST(&bus->children)) != NULL) {
558         DeviceState *dev = kid->child;
559         object_unparent(OBJECT(dev));
560     }
561     if (bus->parent) {
562         QLIST_REMOVE(bus, sibling);
563         bus->parent->num_child_bus--;
564         bus->parent = NULL;
565     } else {
566         assert(bus != sysbus_get_default()); /* main_system_bus is never freed */
567         qemu_unregister_reset(qbus_reset_all_fn, bus);
568     }
569 }
570 
571 static bool bus_get_realized(Object *obj, Error **errp)
572 {
573     BusState *bus = BUS(obj);
574 
575     return bus->realized;
576 }
577 
578 static void bus_set_realized(Object *obj, bool value, Error **errp)
579 {
580     BusState *bus = BUS(obj);
581     BusClass *bc = BUS_GET_CLASS(bus);
582     BusChild *kid;
583     Error *local_err = NULL;
584 
585     if (value && !bus->realized) {
586         if (bc->realize) {
587             bc->realize(bus, &local_err);
588         }
589 
590         /* TODO: recursive realization */
591     } else if (!value && bus->realized) {
592         QTAILQ_FOREACH(kid, &bus->children, sibling) {
593             DeviceState *dev = kid->child;
594             object_property_set_bool(OBJECT(dev), false, "realized",
595                                      &local_err);
596             if (local_err != NULL) {
597                 break;
598             }
599         }
600         if (bc->unrealize && local_err == NULL) {
601             bc->unrealize(bus, &local_err);
602         }
603     }
604 
605     if (local_err != NULL) {
606         error_propagate(errp, local_err);
607         return;
608     }
609 
610     bus->realized = value;
611 }
612 
613 void qbus_create_inplace(void *bus, size_t size, const char *typename,
614                          DeviceState *parent, const char *name)
615 {
616     object_initialize(bus, size, typename);
617     qbus_realize(bus, parent, name);
618 }
619 
620 BusState *qbus_create(const char *typename, DeviceState *parent, const char *name)
621 {
622     BusState *bus;
623 
624     bus = BUS(object_new(typename));
625     qbus_realize(bus, parent, name);
626 
627     return bus;
628 }
629 
630 static char *bus_get_fw_dev_path(BusState *bus, DeviceState *dev)
631 {
632     BusClass *bc = BUS_GET_CLASS(bus);
633 
634     if (bc->get_fw_dev_path) {
635         return bc->get_fw_dev_path(dev);
636     }
637 
638     return NULL;
639 }
640 
641 static char *qdev_get_fw_dev_path_from_handler(BusState *bus, DeviceState *dev)
642 {
643     Object *obj = OBJECT(dev);
644     char *d = NULL;
645 
646     while (!d && obj->parent) {
647         obj = obj->parent;
648         d = fw_path_provider_try_get_dev_path(obj, bus, dev);
649     }
650     return d;
651 }
652 
653 static int qdev_get_fw_dev_path_helper(DeviceState *dev, char *p, int size)
654 {
655     int l = 0;
656 
657     if (dev && dev->parent_bus) {
658         char *d;
659         l = qdev_get_fw_dev_path_helper(dev->parent_bus->parent, p, size);
660         d = qdev_get_fw_dev_path_from_handler(dev->parent_bus, dev);
661         if (!d) {
662             d = bus_get_fw_dev_path(dev->parent_bus, dev);
663         }
664         if (d) {
665             l += snprintf(p + l, size - l, "%s", d);
666             g_free(d);
667         } else {
668             return l;
669         }
670     }
671     l += snprintf(p + l , size - l, "/");
672 
673     return l;
674 }
675 
676 char* qdev_get_fw_dev_path(DeviceState *dev)
677 {
678     char path[128];
679     int l;
680 
681     l = qdev_get_fw_dev_path_helper(dev, path, 128);
682 
683     path[l-1] = '\0';
684 
685     return g_strdup(path);
686 }
687 
688 char *qdev_get_dev_path(DeviceState *dev)
689 {
690     BusClass *bc;
691 
692     if (!dev || !dev->parent_bus) {
693         return NULL;
694     }
695 
696     bc = BUS_GET_CLASS(dev->parent_bus);
697     if (bc->get_dev_path) {
698         return bc->get_dev_path(dev);
699     }
700 
701     return NULL;
702 }
703 
704 /**
705  * Legacy property handling
706  */
707 
708 static void qdev_get_legacy_property(Object *obj, Visitor *v, void *opaque,
709                                      const char *name, Error **errp)
710 {
711     DeviceState *dev = DEVICE(obj);
712     Property *prop = opaque;
713 
714     char buffer[1024];
715     char *ptr = buffer;
716 
717     prop->info->print(dev, prop, buffer, sizeof(buffer));
718     visit_type_str(v, &ptr, name, errp);
719 }
720 
721 /**
722  * @qdev_add_legacy_property - adds a legacy property
723  *
724  * Do not use this is new code!  Properties added through this interface will
725  * be given names and types in the "legacy" namespace.
726  *
727  * Legacy properties are string versions of other OOM properties.  The format
728  * of the string depends on the property type.
729  */
730 static void qdev_property_add_legacy(DeviceState *dev, Property *prop,
731                                      Error **errp)
732 {
733     gchar *name;
734 
735     /* Register pointer properties as legacy properties */
736     if (!prop->info->print && prop->info->get) {
737         return;
738     }
739 
740     name = g_strdup_printf("legacy-%s", prop->name);
741     object_property_add(OBJECT(dev), name, "str",
742                         prop->info->print ? qdev_get_legacy_property : prop->info->get,
743                         NULL,
744                         NULL,
745                         prop, errp);
746 
747     g_free(name);
748 }
749 
750 /**
751  * @qdev_property_add_static - add a @Property to a device.
752  *
753  * Static properties access data in a struct.  The actual type of the
754  * property and the field depends on the property type.
755  */
756 void qdev_property_add_static(DeviceState *dev, Property *prop,
757                               Error **errp)
758 {
759     Error *local_err = NULL;
760     Object *obj = OBJECT(dev);
761 
762     /*
763      * TODO qdev_prop_ptr does not have getters or setters.  It must
764      * go now that it can be replaced with links.  The test should be
765      * removed along with it: all static properties are read/write.
766      */
767     if (!prop->info->get && !prop->info->set) {
768         return;
769     }
770 
771     object_property_add(obj, prop->name, prop->info->name,
772                         prop->info->get, prop->info->set,
773                         prop->info->release,
774                         prop, &local_err);
775 
776     if (local_err) {
777         error_propagate(errp, local_err);
778         return;
779     }
780     if (prop->qtype == QTYPE_NONE) {
781         return;
782     }
783 
784     if (prop->qtype == QTYPE_QBOOL) {
785         object_property_set_bool(obj, prop->defval, prop->name, &error_abort);
786     } else if (prop->info->enum_table) {
787         object_property_set_str(obj, prop->info->enum_table[prop->defval],
788                                 prop->name, &error_abort);
789     } else if (prop->qtype == QTYPE_QINT) {
790         object_property_set_int(obj, prop->defval, prop->name, &error_abort);
791     }
792 }
793 
794 /* @qdev_alias_all_properties - Add alias properties to the source object for
795  * all qdev properties on the target DeviceState.
796  */
797 void qdev_alias_all_properties(DeviceState *target, Object *source)
798 {
799     ObjectClass *class;
800     Property *prop;
801 
802     class = object_get_class(OBJECT(target));
803     do {
804         DeviceClass *dc = DEVICE_CLASS(class);
805 
806         for (prop = dc->props; prop && prop->name; prop++) {
807             object_property_add_alias(source, prop->name,
808                                       OBJECT(target), prop->name,
809                                       &error_abort);
810         }
811         class = object_class_get_parent(class);
812     } while (class != object_class_by_name(TYPE_DEVICE));
813 }
814 
815 static bool device_get_realized(Object *obj, Error **errp)
816 {
817     DeviceState *dev = DEVICE(obj);
818     return dev->realized;
819 }
820 
821 static void device_set_realized(Object *obj, bool value, Error **errp)
822 {
823     DeviceState *dev = DEVICE(obj);
824     DeviceClass *dc = DEVICE_GET_CLASS(dev);
825     BusState *bus;
826     Error *local_err = NULL;
827 
828     if (dev->hotplugged && !dc->hotpluggable) {
829         error_set(errp, QERR_DEVICE_NO_HOTPLUG, object_get_typename(obj));
830         return;
831     }
832 
833     if (value && !dev->realized) {
834         if (!obj->parent) {
835             static int unattached_count;
836             gchar *name = g_strdup_printf("device[%d]", unattached_count++);
837 
838             object_property_add_child(container_get(qdev_get_machine(),
839                                                     "/unattached"),
840                                       name, obj, &error_abort);
841             g_free(name);
842         }
843 
844         if (dc->realize) {
845             dc->realize(dev, &local_err);
846         }
847 
848         if (local_err != NULL) {
849             goto fail;
850         }
851 
852         if (dev->parent_bus && dev->parent_bus->hotplug_handler) {
853             hotplug_handler_plug(dev->parent_bus->hotplug_handler,
854                                  dev, &local_err);
855         } else if (object_dynamic_cast(qdev_get_machine(), TYPE_MACHINE)) {
856             HotplugHandler *hotplug_ctrl;
857             MachineState *machine = MACHINE(qdev_get_machine());
858             MachineClass *mc = MACHINE_GET_CLASS(machine);
859 
860             if (mc->get_hotplug_handler) {
861                 hotplug_ctrl = mc->get_hotplug_handler(machine, dev);
862                 if (hotplug_ctrl) {
863                     hotplug_handler_plug(hotplug_ctrl, dev, &local_err);
864                 }
865             }
866         }
867 
868         if (local_err != NULL) {
869             goto post_realize_fail;
870         }
871 
872         if (qdev_get_vmsd(dev)) {
873             vmstate_register_with_alias_id(dev, -1, qdev_get_vmsd(dev), dev,
874                                            dev->instance_id_alias,
875                                            dev->alias_required_for_version);
876         }
877 
878         QLIST_FOREACH(bus, &dev->child_bus, sibling) {
879             object_property_set_bool(OBJECT(bus), true, "realized",
880                                          &local_err);
881             if (local_err != NULL) {
882                 goto child_realize_fail;
883             }
884         }
885         if (dev->hotplugged) {
886             device_reset(dev);
887         }
888         dev->pending_deleted_event = false;
889     } else if (!value && dev->realized) {
890         Error **local_errp = NULL;
891         QLIST_FOREACH(bus, &dev->child_bus, sibling) {
892             local_errp = local_err ? NULL : &local_err;
893             object_property_set_bool(OBJECT(bus), false, "realized",
894                                      local_errp);
895         }
896         if (qdev_get_vmsd(dev)) {
897             vmstate_unregister(dev, qdev_get_vmsd(dev), dev);
898         }
899         if (dc->unrealize) {
900             local_errp = local_err ? NULL : &local_err;
901             dc->unrealize(dev, local_errp);
902         }
903         dev->pending_deleted_event = true;
904     }
905 
906     if (local_err != NULL) {
907         goto fail;
908     }
909 
910     dev->realized = value;
911     return;
912 
913 child_realize_fail:
914     QLIST_FOREACH(bus, &dev->child_bus, sibling) {
915         object_property_set_bool(OBJECT(bus), false, "realized",
916                                  NULL);
917     }
918 
919     if (qdev_get_vmsd(dev)) {
920         vmstate_unregister(dev, qdev_get_vmsd(dev), dev);
921     }
922 
923 post_realize_fail:
924     if (dc->unrealize) {
925         dc->unrealize(dev, NULL);
926     }
927 
928 fail:
929     error_propagate(errp, local_err);
930     return;
931 }
932 
933 static bool device_get_hotpluggable(Object *obj, Error **errp)
934 {
935     DeviceClass *dc = DEVICE_GET_CLASS(obj);
936     DeviceState *dev = DEVICE(obj);
937 
938     return dc->hotpluggable && (dev->parent_bus == NULL ||
939                                 dev->parent_bus->allow_hotplug);
940 }
941 
942 static bool device_get_hotplugged(Object *obj, Error **err)
943 {
944     DeviceState *dev = DEVICE(obj);
945 
946     return dev->hotplugged;
947 }
948 
949 static void device_set_hotplugged(Object *obj, bool value, Error **err)
950 {
951     DeviceState *dev = DEVICE(obj);
952 
953     dev->hotplugged = value;
954 }
955 
956 static void device_initfn(Object *obj)
957 {
958     DeviceState *dev = DEVICE(obj);
959     ObjectClass *class;
960     Property *prop;
961 
962     if (qdev_hotplug) {
963         dev->hotplugged = 1;
964         qdev_hot_added = true;
965     }
966 
967     dev->instance_id_alias = -1;
968     dev->realized = false;
969 
970     object_property_add_bool(obj, "realized",
971                              device_get_realized, device_set_realized, NULL);
972     object_property_add_bool(obj, "hotpluggable",
973                              device_get_hotpluggable, NULL, NULL);
974     object_property_add_bool(obj, "hotplugged",
975                              device_get_hotplugged, device_set_hotplugged,
976                              &error_abort);
977 
978     class = object_get_class(OBJECT(dev));
979     do {
980         for (prop = DEVICE_CLASS(class)->props; prop && prop->name; prop++) {
981             qdev_property_add_legacy(dev, prop, &error_abort);
982             qdev_property_add_static(dev, prop, &error_abort);
983         }
984         class = object_class_get_parent(class);
985     } while (class != object_class_by_name(TYPE_DEVICE));
986 
987     object_property_add_link(OBJECT(dev), "parent_bus", TYPE_BUS,
988                              (Object **)&dev->parent_bus, NULL, 0,
989                              &error_abort);
990     QLIST_INIT(&dev->gpios);
991 }
992 
993 static void device_post_init(Object *obj)
994 {
995     Error *err = NULL;
996     qdev_prop_set_globals(DEVICE(obj), &err);
997     if (err) {
998         qerror_report_err(err);
999         error_free(err);
1000         exit(EXIT_FAILURE);
1001     }
1002 }
1003 
1004 /* Unlink device from bus and free the structure.  */
1005 static void device_finalize(Object *obj)
1006 {
1007     NamedGPIOList *ngl, *next;
1008 
1009     DeviceState *dev = DEVICE(obj);
1010     if (dev->opts) {
1011         qemu_opts_del(dev->opts);
1012     }
1013 
1014     QLIST_FOREACH_SAFE(ngl, &dev->gpios, node, next) {
1015         QLIST_REMOVE(ngl, node);
1016         qemu_free_irqs(ngl->in, ngl->num_in);
1017         g_free(ngl->name);
1018         g_free(ngl);
1019         /* ngl->out irqs are owned by the other end and should not be freed
1020          * here
1021          */
1022     }
1023 }
1024 
1025 static void device_class_base_init(ObjectClass *class, void *data)
1026 {
1027     DeviceClass *klass = DEVICE_CLASS(class);
1028 
1029     /* We explicitly look up properties in the superclasses,
1030      * so do not propagate them to the subclasses.
1031      */
1032     klass->props = NULL;
1033 }
1034 
1035 static void device_unparent(Object *obj)
1036 {
1037     DeviceState *dev = DEVICE(obj);
1038     BusState *bus;
1039 
1040     if (dev->realized) {
1041         object_property_set_bool(obj, false, "realized", NULL);
1042     }
1043     while (dev->num_child_bus) {
1044         bus = QLIST_FIRST(&dev->child_bus);
1045         object_unparent(OBJECT(bus));
1046     }
1047     if (dev->parent_bus) {
1048         bus_remove_child(dev->parent_bus, dev);
1049         object_unref(OBJECT(dev->parent_bus));
1050         dev->parent_bus = NULL;
1051     }
1052 
1053     /* Only send event if the device had been completely realized */
1054     if (dev->pending_deleted_event) {
1055         gchar *path = object_get_canonical_path(OBJECT(dev));
1056 
1057         qapi_event_send_device_deleted(!!dev->id, dev->id, path, &error_abort);
1058         g_free(path);
1059     }
1060 }
1061 
1062 static void device_class_init(ObjectClass *class, void *data)
1063 {
1064     DeviceClass *dc = DEVICE_CLASS(class);
1065 
1066     class->unparent = device_unparent;
1067     dc->realize = device_realize;
1068     dc->unrealize = device_unrealize;
1069 
1070     /* by default all devices were considered as hotpluggable,
1071      * so with intent to check it in generic qdev_unplug() /
1072      * device_set_realized() functions make every device
1073      * hotpluggable. Devices that shouldn't be hotpluggable,
1074      * should override it in their class_init()
1075      */
1076     dc->hotpluggable = true;
1077 }
1078 
1079 void device_reset(DeviceState *dev)
1080 {
1081     DeviceClass *klass = DEVICE_GET_CLASS(dev);
1082 
1083     if (klass->reset) {
1084         klass->reset(dev);
1085     }
1086 }
1087 
1088 Object *qdev_get_machine(void)
1089 {
1090     static Object *dev;
1091 
1092     if (dev == NULL) {
1093         dev = container_get(object_get_root(), "/machine");
1094     }
1095 
1096     return dev;
1097 }
1098 
1099 static const TypeInfo device_type_info = {
1100     .name = TYPE_DEVICE,
1101     .parent = TYPE_OBJECT,
1102     .instance_size = sizeof(DeviceState),
1103     .instance_init = device_initfn,
1104     .instance_post_init = device_post_init,
1105     .instance_finalize = device_finalize,
1106     .class_base_init = device_class_base_init,
1107     .class_init = device_class_init,
1108     .abstract = true,
1109     .class_size = sizeof(DeviceClass),
1110 };
1111 
1112 static void qbus_initfn(Object *obj)
1113 {
1114     BusState *bus = BUS(obj);
1115 
1116     QTAILQ_INIT(&bus->children);
1117     object_property_add_link(obj, QDEV_HOTPLUG_HANDLER_PROPERTY,
1118                              TYPE_HOTPLUG_HANDLER,
1119                              (Object **)&bus->hotplug_handler,
1120                              object_property_allow_set_link,
1121                              OBJ_PROP_LINK_UNREF_ON_RELEASE,
1122                              NULL);
1123     object_property_add_bool(obj, "realized",
1124                              bus_get_realized, bus_set_realized, NULL);
1125 }
1126 
1127 static char *default_bus_get_fw_dev_path(DeviceState *dev)
1128 {
1129     return g_strdup(object_get_typename(OBJECT(dev)));
1130 }
1131 
1132 static void bus_class_init(ObjectClass *class, void *data)
1133 {
1134     BusClass *bc = BUS_CLASS(class);
1135 
1136     class->unparent = bus_unparent;
1137     bc->get_fw_dev_path = default_bus_get_fw_dev_path;
1138 }
1139 
1140 static void qbus_finalize(Object *obj)
1141 {
1142     BusState *bus = BUS(obj);
1143 
1144     g_free((char *)bus->name);
1145 }
1146 
1147 static const TypeInfo bus_info = {
1148     .name = TYPE_BUS,
1149     .parent = TYPE_OBJECT,
1150     .instance_size = sizeof(BusState),
1151     .abstract = true,
1152     .class_size = sizeof(BusClass),
1153     .instance_init = qbus_initfn,
1154     .instance_finalize = qbus_finalize,
1155     .class_init = bus_class_init,
1156 };
1157 
1158 static void qdev_register_types(void)
1159 {
1160     type_register_static(&bus_info);
1161     type_register_static(&device_type_info);
1162 }
1163 
1164 type_init(qdev_register_types)
1165