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