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