xref: /openbmc/qemu/hw/core/qdev.c (revision 7b7d00e0)
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         object_property_add(obj, prop->name, prop->info->name,
740                             prop->info->get, prop->info->set,
741                             prop->info->release,
742                             prop, &local_err);
743     }
744 
745     if (local_err) {
746         error_propagate(errp, local_err);
747         return;
748     }
749 
750     object_property_set_description(obj, prop->name,
751                                     prop->info->description,
752                                     &error_abort);
753 
754     if (prop->set_default) {
755         prop->info->set_default_value(obj, prop);
756     }
757 }
758 
759 /* @qdev_alias_all_properties - Add alias properties to the source object for
760  * all qdev properties on the target DeviceState.
761  */
762 void qdev_alias_all_properties(DeviceState *target, Object *source)
763 {
764     ObjectClass *class;
765     Property *prop;
766 
767     class = object_get_class(OBJECT(target));
768     do {
769         DeviceClass *dc = DEVICE_CLASS(class);
770 
771         for (prop = dc->props; prop && prop->name; prop++) {
772             object_property_add_alias(source, prop->name,
773                                       OBJECT(target), prop->name,
774                                       &error_abort);
775         }
776         class = object_class_get_parent(class);
777     } while (class != object_class_by_name(TYPE_DEVICE));
778 }
779 
780 static int qdev_add_hotpluggable_device(Object *obj, void *opaque)
781 {
782     GSList **list = opaque;
783     DeviceState *dev = (DeviceState *)object_dynamic_cast(OBJECT(obj),
784                                                           TYPE_DEVICE);
785 
786     if (dev == NULL) {
787         return 0;
788     }
789 
790     if (dev->realized && object_property_get_bool(obj, "hotpluggable", NULL)) {
791         *list = g_slist_append(*list, dev);
792     }
793 
794     return 0;
795 }
796 
797 GSList *qdev_build_hotpluggable_device_list(Object *peripheral)
798 {
799     GSList *list = NULL;
800 
801     object_child_foreach(peripheral, qdev_add_hotpluggable_device, &list);
802 
803     return list;
804 }
805 
806 static bool device_get_realized(Object *obj, Error **errp)
807 {
808     DeviceState *dev = DEVICE(obj);
809     return dev->realized;
810 }
811 
812 static bool check_only_migratable(Object *obj, Error **errp)
813 {
814     DeviceClass *dc = DEVICE_GET_CLASS(obj);
815 
816     if (!vmstate_check_only_migratable(dc->vmsd)) {
817         error_setg(errp, "Device %s is not migratable, but "
818                    "--only-migratable was specified",
819                    object_get_typename(obj));
820         return false;
821     }
822 
823     return true;
824 }
825 
826 static void device_set_realized(Object *obj, bool value, Error **errp)
827 {
828     DeviceState *dev = DEVICE(obj);
829     DeviceClass *dc = DEVICE_GET_CLASS(dev);
830     HotplugHandler *hotplug_ctrl;
831     BusState *bus;
832     Error *local_err = NULL;
833     bool unattached_parent = false;
834     static int unattached_count;
835 
836     if (dev->hotplugged && !dc->hotpluggable) {
837         error_setg(errp, QERR_DEVICE_NO_HOTPLUG, object_get_typename(obj));
838         return;
839     }
840 
841     if (value && !dev->realized) {
842         if (!check_only_migratable(obj, &local_err)) {
843             goto fail;
844         }
845 
846         if (!obj->parent) {
847             gchar *name = g_strdup_printf("device[%d]", unattached_count++);
848 
849             object_property_add_child(container_get(qdev_get_machine(),
850                                                     "/unattached"),
851                                       name, obj, &error_abort);
852             unattached_parent = true;
853             g_free(name);
854         }
855 
856         hotplug_ctrl = qdev_get_hotplug_handler(dev);
857         if (hotplug_ctrl) {
858             hotplug_handler_pre_plug(hotplug_ctrl, dev, &local_err);
859             if (local_err != NULL) {
860                 goto fail;
861             }
862         }
863 
864         if (dc->realize) {
865             dc->realize(dev, &local_err);
866             if (local_err != NULL) {
867                 goto fail;
868             }
869         }
870 
871         DEVICE_LISTENER_CALL(realize, Forward, dev);
872 
873         /*
874          * always free/re-initialize here since the value cannot be cleaned up
875          * in device_unrealize due to its usage later on in the unplug path
876          */
877         g_free(dev->canonical_path);
878         dev->canonical_path = object_get_canonical_path(OBJECT(dev));
879 
880         if (qdev_get_vmsd(dev)) {
881             if (vmstate_register_with_alias_id(VMSTATE_IF(dev),
882                                                VMSTATE_INSTANCE_ID_ANY,
883                                                qdev_get_vmsd(dev), dev,
884                                                dev->instance_id_alias,
885                                                dev->alias_required_for_version,
886                                                &local_err) < 0) {
887                 goto post_realize_fail;
888             }
889         }
890 
891         QLIST_FOREACH(bus, &dev->child_bus, sibling) {
892             object_property_set_bool(OBJECT(bus), true, "realized",
893                                          &local_err);
894             if (local_err != NULL) {
895                 goto child_realize_fail;
896             }
897         }
898         if (dev->hotplugged) {
899             device_reset(dev);
900         }
901         dev->pending_deleted_event = false;
902 
903         if (hotplug_ctrl) {
904             hotplug_handler_plug(hotplug_ctrl, dev, &local_err);
905             if (local_err != NULL) {
906                 goto child_realize_fail;
907             }
908        }
909 
910     } else if (!value && dev->realized) {
911         /* We want local_err to track only the first error */
912         QLIST_FOREACH(bus, &dev->child_bus, sibling) {
913             object_property_set_bool(OBJECT(bus), false, "realized",
914                                      local_err ? NULL : &local_err);
915         }
916         if (qdev_get_vmsd(dev)) {
917             vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev);
918         }
919         if (dc->unrealize) {
920             dc->unrealize(dev, local_err ? NULL : &local_err);
921         }
922         dev->pending_deleted_event = true;
923         DEVICE_LISTENER_CALL(unrealize, Reverse, dev);
924 
925         if (local_err != NULL) {
926             goto fail;
927         }
928     }
929 
930     assert(local_err == NULL);
931     dev->realized = value;
932     return;
933 
934 child_realize_fail:
935     QLIST_FOREACH(bus, &dev->child_bus, sibling) {
936         object_property_set_bool(OBJECT(bus), false, "realized",
937                                  NULL);
938     }
939 
940     if (qdev_get_vmsd(dev)) {
941         vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev);
942     }
943 
944 post_realize_fail:
945     g_free(dev->canonical_path);
946     dev->canonical_path = NULL;
947     if (dc->unrealize) {
948         dc->unrealize(dev, NULL);
949     }
950 
951 fail:
952     error_propagate(errp, local_err);
953     if (unattached_parent) {
954         object_unparent(OBJECT(dev));
955         unattached_count--;
956     }
957 }
958 
959 static bool device_get_hotpluggable(Object *obj, Error **errp)
960 {
961     DeviceClass *dc = DEVICE_GET_CLASS(obj);
962     DeviceState *dev = DEVICE(obj);
963 
964     return dc->hotpluggable && (dev->parent_bus == NULL ||
965                                 qbus_is_hotpluggable(dev->parent_bus));
966 }
967 
968 static bool device_get_hotplugged(Object *obj, Error **errp)
969 {
970     DeviceState *dev = DEVICE(obj);
971 
972     return dev->hotplugged;
973 }
974 
975 static void device_initfn(Object *obj)
976 {
977     DeviceState *dev = DEVICE(obj);
978     ObjectClass *class;
979     Property *prop;
980 
981     if (qdev_hotplug) {
982         dev->hotplugged = 1;
983         qdev_hot_added = true;
984     }
985 
986     dev->instance_id_alias = -1;
987     dev->realized = false;
988     dev->allow_unplug_during_migration = false;
989 
990     object_property_add_bool(obj, "realized",
991                              device_get_realized, device_set_realized, NULL);
992     object_property_add_bool(obj, "hotpluggable",
993                              device_get_hotpluggable, NULL, NULL);
994     object_property_add_bool(obj, "hotplugged",
995                              device_get_hotplugged, NULL,
996                              &error_abort);
997 
998     class = object_get_class(OBJECT(dev));
999     do {
1000         for (prop = DEVICE_CLASS(class)->props; prop && prop->name; prop++) {
1001             qdev_property_add_legacy(dev, prop, &error_abort);
1002             qdev_property_add_static(dev, prop, &error_abort);
1003         }
1004         class = object_class_get_parent(class);
1005     } while (class != object_class_by_name(TYPE_DEVICE));
1006 
1007     object_property_add_link(OBJECT(dev), "parent_bus", TYPE_BUS,
1008                              (Object **)&dev->parent_bus, NULL, 0,
1009                              &error_abort);
1010     QLIST_INIT(&dev->gpios);
1011 }
1012 
1013 static void device_post_init(Object *obj)
1014 {
1015     /*
1016      * Note: ordered so that the user's global properties take
1017      * precedence.
1018      */
1019     object_apply_compat_props(obj);
1020     qdev_prop_set_globals(DEVICE(obj));
1021 }
1022 
1023 /* Unlink device from bus and free the structure.  */
1024 static void device_finalize(Object *obj)
1025 {
1026     NamedGPIOList *ngl, *next;
1027 
1028     DeviceState *dev = DEVICE(obj);
1029 
1030     QLIST_FOREACH_SAFE(ngl, &dev->gpios, node, next) {
1031         QLIST_REMOVE(ngl, node);
1032         qemu_free_irqs(ngl->in, ngl->num_in);
1033         g_free(ngl->name);
1034         g_free(ngl);
1035         /* ngl->out irqs are owned by the other end and should not be freed
1036          * here
1037          */
1038     }
1039 
1040     /* Only send event if the device had been completely realized */
1041     if (dev->pending_deleted_event) {
1042         g_assert(dev->canonical_path);
1043 
1044         qapi_event_send_device_deleted(!!dev->id, dev->id, dev->canonical_path);
1045         g_free(dev->canonical_path);
1046         dev->canonical_path = NULL;
1047     }
1048 
1049     qemu_opts_del(dev->opts);
1050 }
1051 
1052 static void device_class_base_init(ObjectClass *class, void *data)
1053 {
1054     DeviceClass *klass = DEVICE_CLASS(class);
1055 
1056     /* We explicitly look up properties in the superclasses,
1057      * so do not propagate them to the subclasses.
1058      */
1059     klass->props = NULL;
1060 }
1061 
1062 static void device_unparent(Object *obj)
1063 {
1064     DeviceState *dev = DEVICE(obj);
1065     BusState *bus;
1066 
1067     if (dev->realized) {
1068         object_property_set_bool(obj, false, "realized", NULL);
1069     }
1070     while (dev->num_child_bus) {
1071         bus = QLIST_FIRST(&dev->child_bus);
1072         object_unparent(OBJECT(bus));
1073     }
1074     if (dev->parent_bus) {
1075         bus_remove_child(dev->parent_bus, dev);
1076         object_unref(OBJECT(dev->parent_bus));
1077         dev->parent_bus = NULL;
1078     }
1079 }
1080 
1081 static char *
1082 device_vmstate_if_get_id(VMStateIf *obj)
1083 {
1084     DeviceState *dev = DEVICE(obj);
1085 
1086     return qdev_get_dev_path(dev);
1087 }
1088 
1089 static void device_class_init(ObjectClass *class, void *data)
1090 {
1091     DeviceClass *dc = DEVICE_CLASS(class);
1092     VMStateIfClass *vc = VMSTATE_IF_CLASS(class);
1093 
1094     class->unparent = device_unparent;
1095 
1096     /* by default all devices were considered as hotpluggable,
1097      * so with intent to check it in generic qdev_unplug() /
1098      * device_set_realized() functions make every device
1099      * hotpluggable. Devices that shouldn't be hotpluggable,
1100      * should override it in their class_init()
1101      */
1102     dc->hotpluggable = true;
1103     dc->user_creatable = true;
1104     vc->get_id = device_vmstate_if_get_id;
1105 }
1106 
1107 void device_class_set_parent_reset(DeviceClass *dc,
1108                                    DeviceReset dev_reset,
1109                                    DeviceReset *parent_reset)
1110 {
1111     *parent_reset = dc->reset;
1112     dc->reset = dev_reset;
1113 }
1114 
1115 void device_class_set_parent_realize(DeviceClass *dc,
1116                                      DeviceRealize dev_realize,
1117                                      DeviceRealize *parent_realize)
1118 {
1119     *parent_realize = dc->realize;
1120     dc->realize = dev_realize;
1121 }
1122 
1123 void device_class_set_parent_unrealize(DeviceClass *dc,
1124                                        DeviceUnrealize dev_unrealize,
1125                                        DeviceUnrealize *parent_unrealize)
1126 {
1127     *parent_unrealize = dc->unrealize;
1128     dc->unrealize = dev_unrealize;
1129 }
1130 
1131 void device_reset(DeviceState *dev)
1132 {
1133     DeviceClass *klass = DEVICE_GET_CLASS(dev);
1134 
1135     if (klass->reset) {
1136         klass->reset(dev);
1137     }
1138 }
1139 
1140 Object *qdev_get_machine(void)
1141 {
1142     static Object *dev;
1143 
1144     if (dev == NULL) {
1145         dev = container_get(object_get_root(), "/machine");
1146     }
1147 
1148     return dev;
1149 }
1150 
1151 static const TypeInfo device_type_info = {
1152     .name = TYPE_DEVICE,
1153     .parent = TYPE_OBJECT,
1154     .instance_size = sizeof(DeviceState),
1155     .instance_init = device_initfn,
1156     .instance_post_init = device_post_init,
1157     .instance_finalize = device_finalize,
1158     .class_base_init = device_class_base_init,
1159     .class_init = device_class_init,
1160     .abstract = true,
1161     .class_size = sizeof(DeviceClass),
1162     .interfaces = (InterfaceInfo[]) {
1163         { TYPE_VMSTATE_IF },
1164         { }
1165     }
1166 };
1167 
1168 static void qdev_register_types(void)
1169 {
1170     type_register_static(&device_type_info);
1171 }
1172 
1173 type_init(qdev_register_types)
1174