xref: /openbmc/qemu/hw/core/qdev.c (revision 2194abd6231b36704b77adfdec2a32d38b7dc848)
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  * Plug @dev into @bus if non-null, else into the main system bus.
412  * This takes a reference to @dev.
413  * If @dev has no QOM parent, make one up, taking another reference.
414  * On success, return true.
415  * On failure, store an error through @errp and return false.
416  */
417 bool qdev_realize(DeviceState *dev, BusState *bus, Error **errp)
418 {
419     Error *err = NULL;
420 
421     assert(!dev->realized && !dev->parent_bus);
422 
423     if (!bus) {
424         /*
425          * Assert that the device really is a SysBusDevice before we
426          * put it onto the sysbus.  Non-sysbus devices which aren't
427          * being put onto a bus should be realized with
428          * object_property_set_bool(OBJECT(dev), true, "realized",
429          * errp);
430          */
431         g_assert(object_dynamic_cast(OBJECT(dev), TYPE_SYS_BUS_DEVICE));
432         bus = sysbus_get_default();
433     }
434 
435     qdev_set_parent_bus(dev, bus);
436 
437     object_property_set_bool(OBJECT(dev), true, "realized", &err);
438     if (err) {
439         error_propagate(errp, err);
440     }
441     return !err;
442 }
443 
444 /*
445  * Realize @dev and drop a reference.
446  * This is like qdev_realize(), except the caller must hold a
447  * (private) reference, which is dropped on return regardless of
448  * success or failure.  Intended use:
449  *     dev = qdev_new();
450  *     [...]
451  *     qdev_realize_and_unref(dev, bus, errp);
452  * Now @dev can go away without further ado.
453  */
454 bool qdev_realize_and_unref(DeviceState *dev, BusState *bus, Error **errp)
455 {
456     bool ret;
457 
458     ret = qdev_realize(dev, bus, errp);
459     object_unref(OBJECT(dev));
460     return ret;
461 }
462 
463 void qdev_unrealize(DeviceState *dev)
464 {
465     object_property_set_bool(OBJECT(dev), false, "realized", &error_abort);
466 }
467 
468 static int qdev_assert_realized_properly(Object *obj, void *opaque)
469 {
470     DeviceState *dev = DEVICE(object_dynamic_cast(obj, TYPE_DEVICE));
471     DeviceClass *dc;
472 
473     if (dev) {
474         dc = DEVICE_GET_CLASS(dev);
475         assert(dev->realized);
476         assert(dev->parent_bus || !dc->bus_type);
477     }
478     return 0;
479 }
480 
481 void qdev_machine_creation_done(void)
482 {
483     /*
484      * ok, initial machine setup is done, starting from now we can
485      * only create hotpluggable devices
486      */
487     qdev_hotplug = true;
488 
489     object_child_foreach_recursive(object_get_root(),
490                                    qdev_assert_realized_properly, NULL);
491 }
492 
493 bool qdev_machine_modified(void)
494 {
495     return qdev_hot_added || qdev_hot_removed;
496 }
497 
498 BusState *qdev_get_parent_bus(DeviceState *dev)
499 {
500     return dev->parent_bus;
501 }
502 
503 static NamedGPIOList *qdev_get_named_gpio_list(DeviceState *dev,
504                                                const char *name)
505 {
506     NamedGPIOList *ngl;
507 
508     QLIST_FOREACH(ngl, &dev->gpios, node) {
509         /* NULL is a valid and matchable name. */
510         if (g_strcmp0(name, ngl->name) == 0) {
511             return ngl;
512         }
513     }
514 
515     ngl = g_malloc0(sizeof(*ngl));
516     ngl->name = g_strdup(name);
517     QLIST_INSERT_HEAD(&dev->gpios, ngl, node);
518     return ngl;
519 }
520 
521 void qdev_init_gpio_in_named_with_opaque(DeviceState *dev,
522                                          qemu_irq_handler handler,
523                                          void *opaque,
524                                          const char *name, int n)
525 {
526     int i;
527     NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
528 
529     assert(gpio_list->num_out == 0 || !name);
530     gpio_list->in = qemu_extend_irqs(gpio_list->in, gpio_list->num_in, handler,
531                                      opaque, n);
532 
533     if (!name) {
534         name = "unnamed-gpio-in";
535     }
536     for (i = gpio_list->num_in; i < gpio_list->num_in + n; i++) {
537         gchar *propname = g_strdup_printf("%s[%u]", name, i);
538 
539         object_property_add_child(OBJECT(dev), propname,
540                                   OBJECT(gpio_list->in[i]));
541         g_free(propname);
542     }
543 
544     gpio_list->num_in += n;
545 }
546 
547 void qdev_init_gpio_in(DeviceState *dev, qemu_irq_handler handler, int n)
548 {
549     qdev_init_gpio_in_named(dev, handler, NULL, n);
550 }
551 
552 void qdev_init_gpio_out_named(DeviceState *dev, qemu_irq *pins,
553                               const char *name, int n)
554 {
555     int i;
556     NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
557 
558     assert(gpio_list->num_in == 0 || !name);
559 
560     if (!name) {
561         name = "unnamed-gpio-out";
562     }
563     memset(pins, 0, sizeof(*pins) * n);
564     for (i = 0; i < n; ++i) {
565         gchar *propname = g_strdup_printf("%s[%u]", name,
566                                           gpio_list->num_out + i);
567 
568         object_property_add_link(OBJECT(dev), propname, TYPE_IRQ,
569                                  (Object **)&pins[i],
570                                  object_property_allow_set_link,
571                                  OBJ_PROP_LINK_STRONG);
572         g_free(propname);
573     }
574     gpio_list->num_out += n;
575 }
576 
577 void qdev_init_gpio_out(DeviceState *dev, qemu_irq *pins, int n)
578 {
579     qdev_init_gpio_out_named(dev, pins, NULL, n);
580 }
581 
582 qemu_irq qdev_get_gpio_in_named(DeviceState *dev, const char *name, int n)
583 {
584     NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
585 
586     assert(n >= 0 && n < gpio_list->num_in);
587     return gpio_list->in[n];
588 }
589 
590 qemu_irq qdev_get_gpio_in(DeviceState *dev, int n)
591 {
592     return qdev_get_gpio_in_named(dev, NULL, n);
593 }
594 
595 void qdev_connect_gpio_out_named(DeviceState *dev, const char *name, int n,
596                                  qemu_irq pin)
597 {
598     char *propname = g_strdup_printf("%s[%d]",
599                                      name ? name : "unnamed-gpio-out", n);
600     if (pin && !OBJECT(pin)->parent) {
601         /* We need a name for object_property_set_link to work */
602         object_property_add_child(container_get(qdev_get_machine(),
603                                                 "/unattached"),
604                                   "non-qdev-gpio[*]", OBJECT(pin));
605     }
606     object_property_set_link(OBJECT(dev), OBJECT(pin), propname, &error_abort);
607     g_free(propname);
608 }
609 
610 qemu_irq qdev_get_gpio_out_connector(DeviceState *dev, const char *name, int n)
611 {
612     g_autofree char *propname = g_strdup_printf("%s[%d]",
613                                      name ? name : "unnamed-gpio-out", n);
614 
615     qemu_irq ret = (qemu_irq)object_property_get_link(OBJECT(dev), propname,
616                                                       NULL);
617 
618     return ret;
619 }
620 
621 /* disconnect a GPIO output, returning the disconnected input (if any) */
622 
623 static qemu_irq qdev_disconnect_gpio_out_named(DeviceState *dev,
624                                                const char *name, int n)
625 {
626     char *propname = g_strdup_printf("%s[%d]",
627                                      name ? name : "unnamed-gpio-out", n);
628 
629     qemu_irq ret = (qemu_irq)object_property_get_link(OBJECT(dev), propname,
630                                                       NULL);
631     if (ret) {
632         object_property_set_link(OBJECT(dev), NULL, propname, NULL);
633     }
634     g_free(propname);
635     return ret;
636 }
637 
638 qemu_irq qdev_intercept_gpio_out(DeviceState *dev, qemu_irq icpt,
639                                  const char *name, int n)
640 {
641     qemu_irq disconnected = qdev_disconnect_gpio_out_named(dev, name, n);
642     qdev_connect_gpio_out_named(dev, name, n, icpt);
643     return disconnected;
644 }
645 
646 void qdev_connect_gpio_out(DeviceState * dev, int n, qemu_irq pin)
647 {
648     qdev_connect_gpio_out_named(dev, NULL, n, pin);
649 }
650 
651 void qdev_pass_gpios(DeviceState *dev, DeviceState *container,
652                      const char *name)
653 {
654     int i;
655     NamedGPIOList *ngl = qdev_get_named_gpio_list(dev, name);
656 
657     for (i = 0; i < ngl->num_in; i++) {
658         const char *nm = ngl->name ? ngl->name : "unnamed-gpio-in";
659         char *propname = g_strdup_printf("%s[%d]", nm, i);
660 
661         object_property_add_alias(OBJECT(container), propname,
662                                   OBJECT(dev), propname);
663         g_free(propname);
664     }
665     for (i = 0; i < ngl->num_out; i++) {
666         const char *nm = ngl->name ? ngl->name : "unnamed-gpio-out";
667         char *propname = g_strdup_printf("%s[%d]", nm, i);
668 
669         object_property_add_alias(OBJECT(container), propname,
670                                   OBJECT(dev), propname);
671         g_free(propname);
672     }
673     QLIST_REMOVE(ngl, node);
674     QLIST_INSERT_HEAD(&container->gpios, ngl, node);
675 }
676 
677 BusState *qdev_get_child_bus(DeviceState *dev, const char *name)
678 {
679     BusState *bus;
680     Object *child = object_resolve_path_component(OBJECT(dev), name);
681 
682     bus = (BusState *)object_dynamic_cast(child, TYPE_BUS);
683     if (bus) {
684         return bus;
685     }
686 
687     QLIST_FOREACH(bus, &dev->child_bus, sibling) {
688         if (strcmp(name, bus->name) == 0) {
689             return bus;
690         }
691     }
692     return NULL;
693 }
694 
695 int qdev_walk_children(DeviceState *dev,
696                        qdev_walkerfn *pre_devfn, qbus_walkerfn *pre_busfn,
697                        qdev_walkerfn *post_devfn, qbus_walkerfn *post_busfn,
698                        void *opaque)
699 {
700     BusState *bus;
701     int err;
702 
703     if (pre_devfn) {
704         err = pre_devfn(dev, opaque);
705         if (err) {
706             return err;
707         }
708     }
709 
710     QLIST_FOREACH(bus, &dev->child_bus, sibling) {
711         err = qbus_walk_children(bus, pre_devfn, pre_busfn,
712                                  post_devfn, post_busfn, opaque);
713         if (err < 0) {
714             return err;
715         }
716     }
717 
718     if (post_devfn) {
719         err = post_devfn(dev, opaque);
720         if (err) {
721             return err;
722         }
723     }
724 
725     return 0;
726 }
727 
728 DeviceState *qdev_find_recursive(BusState *bus, const char *id)
729 {
730     BusChild *kid;
731     DeviceState *ret;
732     BusState *child;
733 
734     QTAILQ_FOREACH(kid, &bus->children, sibling) {
735         DeviceState *dev = kid->child;
736 
737         if (dev->id && strcmp(dev->id, id) == 0) {
738             return dev;
739         }
740 
741         QLIST_FOREACH(child, &dev->child_bus, sibling) {
742             ret = qdev_find_recursive(child, id);
743             if (ret) {
744                 return ret;
745             }
746         }
747     }
748     return NULL;
749 }
750 
751 char *qdev_get_dev_path(DeviceState *dev)
752 {
753     BusClass *bc;
754 
755     if (!dev || !dev->parent_bus) {
756         return NULL;
757     }
758 
759     bc = BUS_GET_CLASS(dev->parent_bus);
760     if (bc->get_dev_path) {
761         return bc->get_dev_path(dev);
762     }
763 
764     return NULL;
765 }
766 
767 /**
768  * Legacy property handling
769  */
770 
771 static void qdev_get_legacy_property(Object *obj, Visitor *v,
772                                      const char *name, void *opaque,
773                                      Error **errp)
774 {
775     DeviceState *dev = DEVICE(obj);
776     Property *prop = opaque;
777 
778     char buffer[1024];
779     char *ptr = buffer;
780 
781     prop->info->print(dev, prop, buffer, sizeof(buffer));
782     visit_type_str(v, name, &ptr, errp);
783 }
784 
785 /**
786  * qdev_class_add_legacy_property:
787  * @dev: Device to add the property to.
788  * @prop: The qdev property definition.
789  *
790  * Add a legacy QOM property to @dev for qdev property @prop.
791  *
792  * Legacy properties are string versions of QOM properties.  The format of
793  * the string depends on the property type.  Legacy properties are only
794  * needed for "info qtree".
795  *
796  * Do not use this in new code!  QOM Properties added through this interface
797  * will be given names in the "legacy" namespace.
798  */
799 static void qdev_class_add_legacy_property(DeviceClass *dc, Property *prop)
800 {
801     g_autofree char *name = NULL;
802 
803     /* Register pointer properties as legacy properties */
804     if (!prop->info->print && prop->info->get) {
805         return;
806     }
807 
808     name = g_strdup_printf("legacy-%s", prop->name);
809     object_class_property_add(OBJECT_CLASS(dc), name, "str",
810         prop->info->print ? qdev_get_legacy_property : prop->info->get,
811         NULL, NULL, prop);
812 }
813 
814 void qdev_property_add_static(DeviceState *dev, Property *prop)
815 {
816     Object *obj = OBJECT(dev);
817     ObjectProperty *op;
818 
819     assert(!prop->info->create);
820 
821     op = object_property_add(obj, prop->name, prop->info->name,
822                              prop->info->get, prop->info->set,
823                              prop->info->release,
824                              prop);
825 
826     object_property_set_description(obj, prop->name,
827                                     prop->info->description);
828 
829     if (prop->set_default) {
830         prop->info->set_default_value(op, prop);
831         if (op->init) {
832             op->init(obj, op);
833         }
834     }
835 }
836 
837 static void qdev_class_add_property(DeviceClass *klass, Property *prop)
838 {
839     ObjectClass *oc = OBJECT_CLASS(klass);
840 
841     if (prop->info->create) {
842         prop->info->create(oc, prop);
843     } else {
844         ObjectProperty *op;
845 
846         op = object_class_property_add(oc,
847                                        prop->name, prop->info->name,
848                                        prop->info->get, prop->info->set,
849                                        prop->info->release,
850                                        prop);
851         if (prop->set_default) {
852             prop->info->set_default_value(op, prop);
853         }
854     }
855     object_class_property_set_description(oc, prop->name,
856                                           prop->info->description);
857 }
858 
859 /* @qdev_alias_all_properties - Add alias properties to the source object for
860  * all qdev properties on the target DeviceState.
861  */
862 void qdev_alias_all_properties(DeviceState *target, Object *source)
863 {
864     ObjectClass *class;
865     Property *prop;
866 
867     class = object_get_class(OBJECT(target));
868     do {
869         DeviceClass *dc = DEVICE_CLASS(class);
870 
871         for (prop = dc->props_; prop && prop->name; prop++) {
872             object_property_add_alias(source, prop->name,
873                                       OBJECT(target), prop->name);
874         }
875         class = object_class_get_parent(class);
876     } while (class != object_class_by_name(TYPE_DEVICE));
877 }
878 
879 static bool device_get_realized(Object *obj, Error **errp)
880 {
881     DeviceState *dev = DEVICE(obj);
882     return dev->realized;
883 }
884 
885 static bool check_only_migratable(Object *obj, Error **errp)
886 {
887     DeviceClass *dc = DEVICE_GET_CLASS(obj);
888 
889     if (!vmstate_check_only_migratable(dc->vmsd)) {
890         error_setg(errp, "Device %s is not migratable, but "
891                    "--only-migratable was specified",
892                    object_get_typename(obj));
893         return false;
894     }
895 
896     return true;
897 }
898 
899 static void device_set_realized(Object *obj, bool value, Error **errp)
900 {
901     DeviceState *dev = DEVICE(obj);
902     DeviceClass *dc = DEVICE_GET_CLASS(dev);
903     HotplugHandler *hotplug_ctrl;
904     BusState *bus;
905     NamedClockList *ncl;
906     Error *local_err = NULL;
907     bool unattached_parent = false;
908     static int unattached_count;
909 
910     if (dev->hotplugged && !dc->hotpluggable) {
911         error_setg(errp, QERR_DEVICE_NO_HOTPLUG, object_get_typename(obj));
912         return;
913     }
914 
915     if (value && !dev->realized) {
916         if (!check_only_migratable(obj, &local_err)) {
917             goto fail;
918         }
919 
920         if (!obj->parent) {
921             gchar *name = g_strdup_printf("device[%d]", unattached_count++);
922 
923             object_property_add_child(container_get(qdev_get_machine(),
924                                                     "/unattached"),
925                                       name, obj);
926             unattached_parent = true;
927             g_free(name);
928         }
929 
930         hotplug_ctrl = qdev_get_hotplug_handler(dev);
931         if (hotplug_ctrl) {
932             hotplug_handler_pre_plug(hotplug_ctrl, dev, &local_err);
933             if (local_err != NULL) {
934                 goto fail;
935             }
936         }
937 
938         if (dc->realize) {
939             dc->realize(dev, &local_err);
940             if (local_err != NULL) {
941                 goto fail;
942             }
943         }
944 
945         DEVICE_LISTENER_CALL(realize, Forward, dev);
946 
947         /*
948          * always free/re-initialize here since the value cannot be cleaned up
949          * in device_unrealize due to its usage later on in the unplug path
950          */
951         g_free(dev->canonical_path);
952         dev->canonical_path = object_get_canonical_path(OBJECT(dev));
953         QLIST_FOREACH(ncl, &dev->clocks, node) {
954             if (ncl->alias) {
955                 continue;
956             } else {
957                 clock_setup_canonical_path(ncl->clock);
958             }
959         }
960 
961         if (qdev_get_vmsd(dev)) {
962             if (vmstate_register_with_alias_id(VMSTATE_IF(dev),
963                                                VMSTATE_INSTANCE_ID_ANY,
964                                                qdev_get_vmsd(dev), dev,
965                                                dev->instance_id_alias,
966                                                dev->alias_required_for_version,
967                                                &local_err) < 0) {
968                 goto post_realize_fail;
969             }
970         }
971 
972         /*
973          * Clear the reset state, in case the object was previously unrealized
974          * with a dirty state.
975          */
976         resettable_state_clear(&dev->reset);
977 
978         QLIST_FOREACH(bus, &dev->child_bus, sibling) {
979             if (!qbus_realize(bus, errp)) {
980                 goto child_realize_fail;
981             }
982         }
983         if (dev->hotplugged) {
984             /*
985              * Reset the device, as well as its subtree which, at this point,
986              * should be realized too.
987              */
988             resettable_assert_reset(OBJECT(dev), RESET_TYPE_COLD);
989             resettable_change_parent(OBJECT(dev), OBJECT(dev->parent_bus),
990                                      NULL);
991             resettable_release_reset(OBJECT(dev), RESET_TYPE_COLD);
992         }
993         dev->pending_deleted_event = false;
994 
995         if (hotplug_ctrl) {
996             hotplug_handler_plug(hotplug_ctrl, dev, &local_err);
997             if (local_err != NULL) {
998                 goto child_realize_fail;
999             }
1000        }
1001 
1002     } else if (!value && dev->realized) {
1003         QLIST_FOREACH(bus, &dev->child_bus, sibling) {
1004             qbus_unrealize(bus);
1005         }
1006         if (qdev_get_vmsd(dev)) {
1007             vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev);
1008         }
1009         if (dc->unrealize) {
1010             dc->unrealize(dev);
1011         }
1012         dev->pending_deleted_event = true;
1013         DEVICE_LISTENER_CALL(unrealize, Reverse, dev);
1014     }
1015 
1016     assert(local_err == NULL);
1017     dev->realized = value;
1018     return;
1019 
1020 child_realize_fail:
1021     QLIST_FOREACH(bus, &dev->child_bus, sibling) {
1022         qbus_unrealize(bus);
1023     }
1024 
1025     if (qdev_get_vmsd(dev)) {
1026         vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev);
1027     }
1028 
1029 post_realize_fail:
1030     g_free(dev->canonical_path);
1031     dev->canonical_path = NULL;
1032     if (dc->unrealize) {
1033         dc->unrealize(dev);
1034     }
1035 
1036 fail:
1037     error_propagate(errp, local_err);
1038     if (unattached_parent) {
1039         /*
1040          * Beware, this doesn't just revert
1041          * object_property_add_child(), it also runs bus_remove()!
1042          */
1043         object_unparent(OBJECT(dev));
1044         unattached_count--;
1045     }
1046 }
1047 
1048 static bool device_get_hotpluggable(Object *obj, Error **errp)
1049 {
1050     DeviceClass *dc = DEVICE_GET_CLASS(obj);
1051     DeviceState *dev = DEVICE(obj);
1052 
1053     return dc->hotpluggable && (dev->parent_bus == NULL ||
1054                                 qbus_is_hotpluggable(dev->parent_bus));
1055 }
1056 
1057 static bool device_get_hotplugged(Object *obj, Error **errp)
1058 {
1059     DeviceState *dev = DEVICE(obj);
1060 
1061     return dev->hotplugged;
1062 }
1063 
1064 static void device_initfn(Object *obj)
1065 {
1066     DeviceState *dev = DEVICE(obj);
1067 
1068     if (qdev_hotplug) {
1069         dev->hotplugged = 1;
1070         qdev_hot_added = true;
1071     }
1072 
1073     dev->instance_id_alias = -1;
1074     dev->realized = false;
1075     dev->allow_unplug_during_migration = false;
1076 
1077     QLIST_INIT(&dev->gpios);
1078     QLIST_INIT(&dev->clocks);
1079 }
1080 
1081 static void device_post_init(Object *obj)
1082 {
1083     /*
1084      * Note: ordered so that the user's global properties take
1085      * precedence.
1086      */
1087     object_apply_compat_props(obj);
1088     qdev_prop_set_globals(DEVICE(obj));
1089 }
1090 
1091 /* Unlink device from bus and free the structure.  */
1092 static void device_finalize(Object *obj)
1093 {
1094     NamedGPIOList *ngl, *next;
1095 
1096     DeviceState *dev = DEVICE(obj);
1097 
1098     QLIST_FOREACH_SAFE(ngl, &dev->gpios, node, next) {
1099         QLIST_REMOVE(ngl, node);
1100         qemu_free_irqs(ngl->in, ngl->num_in);
1101         g_free(ngl->name);
1102         g_free(ngl);
1103         /* ngl->out irqs are owned by the other end and should not be freed
1104          * here
1105          */
1106     }
1107 
1108     qdev_finalize_clocklist(dev);
1109 
1110     /* Only send event if the device had been completely realized */
1111     if (dev->pending_deleted_event) {
1112         g_assert(dev->canonical_path);
1113 
1114         qapi_event_send_device_deleted(!!dev->id, dev->id, dev->canonical_path);
1115         g_free(dev->canonical_path);
1116         dev->canonical_path = NULL;
1117     }
1118 
1119     qemu_opts_del(dev->opts);
1120 }
1121 
1122 static void device_class_base_init(ObjectClass *class, void *data)
1123 {
1124     DeviceClass *klass = DEVICE_CLASS(class);
1125 
1126     /* We explicitly look up properties in the superclasses,
1127      * so do not propagate them to the subclasses.
1128      */
1129     klass->props_ = NULL;
1130 }
1131 
1132 static void device_unparent(Object *obj)
1133 {
1134     DeviceState *dev = DEVICE(obj);
1135     BusState *bus;
1136 
1137     if (dev->realized) {
1138         qdev_unrealize(dev);
1139     }
1140     while (dev->num_child_bus) {
1141         bus = QLIST_FIRST(&dev->child_bus);
1142         object_unparent(OBJECT(bus));
1143     }
1144     if (dev->parent_bus) {
1145         bus_remove_child(dev->parent_bus, dev);
1146         object_unref(OBJECT(dev->parent_bus));
1147         dev->parent_bus = NULL;
1148     }
1149 }
1150 
1151 static char *
1152 device_vmstate_if_get_id(VMStateIf *obj)
1153 {
1154     DeviceState *dev = DEVICE(obj);
1155 
1156     return qdev_get_dev_path(dev);
1157 }
1158 
1159 /**
1160  * device_phases_reset:
1161  * Transition reset method for devices to allow moving
1162  * smoothly from legacy reset method to multi-phases
1163  */
1164 static void device_phases_reset(DeviceState *dev)
1165 {
1166     ResettableClass *rc = RESETTABLE_GET_CLASS(dev);
1167 
1168     if (rc->phases.enter) {
1169         rc->phases.enter(OBJECT(dev), RESET_TYPE_COLD);
1170     }
1171     if (rc->phases.hold) {
1172         rc->phases.hold(OBJECT(dev));
1173     }
1174     if (rc->phases.exit) {
1175         rc->phases.exit(OBJECT(dev));
1176     }
1177 }
1178 
1179 static void device_transitional_reset(Object *obj)
1180 {
1181     DeviceClass *dc = DEVICE_GET_CLASS(obj);
1182 
1183     /*
1184      * This will call either @device_phases_reset (for multi-phases transitioned
1185      * devices) or a device's specific method for not-yet transitioned devices.
1186      * In both case, it does not reset children.
1187      */
1188     if (dc->reset) {
1189         dc->reset(DEVICE(obj));
1190     }
1191 }
1192 
1193 /**
1194  * device_get_transitional_reset:
1195  * check if the device's class is ready for multi-phase
1196  */
1197 static ResettableTrFunction device_get_transitional_reset(Object *obj)
1198 {
1199     DeviceClass *dc = DEVICE_GET_CLASS(obj);
1200     if (dc->reset != device_phases_reset) {
1201         /*
1202          * dc->reset has been overridden by a subclass,
1203          * the device is not ready for multi phase yet.
1204          */
1205         return device_transitional_reset;
1206     }
1207     return NULL;
1208 }
1209 
1210 static void device_class_init(ObjectClass *class, void *data)
1211 {
1212     DeviceClass *dc = DEVICE_CLASS(class);
1213     VMStateIfClass *vc = VMSTATE_IF_CLASS(class);
1214     ResettableClass *rc = RESETTABLE_CLASS(class);
1215 
1216     class->unparent = device_unparent;
1217 
1218     /* by default all devices were considered as hotpluggable,
1219      * so with intent to check it in generic qdev_unplug() /
1220      * device_set_realized() functions make every device
1221      * hotpluggable. Devices that shouldn't be hotpluggable,
1222      * should override it in their class_init()
1223      */
1224     dc->hotpluggable = true;
1225     dc->user_creatable = true;
1226     vc->get_id = device_vmstate_if_get_id;
1227     rc->get_state = device_get_reset_state;
1228     rc->child_foreach = device_reset_child_foreach;
1229 
1230     /*
1231      * @device_phases_reset is put as the default reset method below, allowing
1232      * to do the multi-phase transition from base classes to leaf classes. It
1233      * allows a legacy-reset Device class to extend a multi-phases-reset
1234      * Device class for the following reason:
1235      * + If a base class B has been moved to multi-phase, then it does not
1236      *   override this default reset method and may have defined phase methods.
1237      * + A child class C (extending class B) which uses
1238      *   device_class_set_parent_reset() (or similar means) to override the
1239      *   reset method will still work as expected. @device_phases_reset function
1240      *   will be registered as the parent reset method and effectively call
1241      *   parent reset phases.
1242      */
1243     dc->reset = device_phases_reset;
1244     rc->get_transitional_function = device_get_transitional_reset;
1245 
1246     object_class_property_add_bool(class, "realized",
1247                                    device_get_realized, device_set_realized);
1248     object_class_property_add_bool(class, "hotpluggable",
1249                                    device_get_hotpluggable, NULL);
1250     object_class_property_add_bool(class, "hotplugged",
1251                                    device_get_hotplugged, NULL);
1252     object_class_property_add_link(class, "parent_bus", TYPE_BUS,
1253                                    offsetof(DeviceState, parent_bus), NULL, 0);
1254 }
1255 
1256 void device_class_set_props(DeviceClass *dc, Property *props)
1257 {
1258     Property *prop;
1259 
1260     dc->props_ = props;
1261     for (prop = props; prop && prop->name; prop++) {
1262         qdev_class_add_legacy_property(dc, prop);
1263         qdev_class_add_property(dc, prop);
1264     }
1265 }
1266 
1267 void device_class_set_parent_reset(DeviceClass *dc,
1268                                    DeviceReset dev_reset,
1269                                    DeviceReset *parent_reset)
1270 {
1271     *parent_reset = dc->reset;
1272     dc->reset = dev_reset;
1273 }
1274 
1275 void device_class_set_parent_realize(DeviceClass *dc,
1276                                      DeviceRealize dev_realize,
1277                                      DeviceRealize *parent_realize)
1278 {
1279     *parent_realize = dc->realize;
1280     dc->realize = dev_realize;
1281 }
1282 
1283 void device_class_set_parent_unrealize(DeviceClass *dc,
1284                                        DeviceUnrealize dev_unrealize,
1285                                        DeviceUnrealize *parent_unrealize)
1286 {
1287     *parent_unrealize = dc->unrealize;
1288     dc->unrealize = dev_unrealize;
1289 }
1290 
1291 void device_legacy_reset(DeviceState *dev)
1292 {
1293     DeviceClass *klass = DEVICE_GET_CLASS(dev);
1294 
1295     trace_qdev_reset(dev, object_get_typename(OBJECT(dev)));
1296     if (klass->reset) {
1297         klass->reset(dev);
1298     }
1299 }
1300 
1301 Object *qdev_get_machine(void)
1302 {
1303     static Object *dev;
1304 
1305     if (dev == NULL) {
1306         dev = container_get(object_get_root(), "/machine");
1307     }
1308 
1309     return dev;
1310 }
1311 
1312 static const TypeInfo device_type_info = {
1313     .name = TYPE_DEVICE,
1314     .parent = TYPE_OBJECT,
1315     .instance_size = sizeof(DeviceState),
1316     .instance_init = device_initfn,
1317     .instance_post_init = device_post_init,
1318     .instance_finalize = device_finalize,
1319     .class_base_init = device_class_base_init,
1320     .class_init = device_class_init,
1321     .abstract = true,
1322     .class_size = sizeof(DeviceClass),
1323     .interfaces = (InterfaceInfo[]) {
1324         { TYPE_VMSTATE_IF },
1325         { TYPE_RESETTABLE_INTERFACE },
1326         { }
1327     }
1328 };
1329 
1330 static void qdev_register_types(void)
1331 {
1332     type_register_static(&device_type_info);
1333 }
1334 
1335 type_init(qdev_register_types)
1336