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