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