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