xref: /openbmc/qemu/hw/core/qdev.c (revision bfb27e60)
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 "hw/qdev.h"
29 #include "hw/fw-path-provider.h"
30 #include "sysemu/sysemu.h"
31 #include "qapi/error.h"
32 #include "qapi/qmp/qerror.h"
33 #include "qapi/visitor.h"
34 #include "qapi/qmp/qjson.h"
35 #include "hw/hotplug.h"
36 #include "hw/boards.h"
37 #include "qapi-event.h"
38 
39 int qdev_hotplug = 0;
40 static bool qdev_hot_added = false;
41 static bool qdev_hot_removed = false;
42 
43 const VMStateDescription *qdev_get_vmsd(DeviceState *dev)
44 {
45     DeviceClass *dc = DEVICE_GET_CLASS(dev);
46     return dc->vmsd;
47 }
48 
49 const char *qdev_fw_name(DeviceState *dev)
50 {
51     DeviceClass *dc = DEVICE_GET_CLASS(dev);
52 
53     if (dc->fw_name) {
54         return dc->fw_name;
55     }
56 
57     return object_get_typename(OBJECT(dev));
58 }
59 
60 static void qdev_property_add_legacy(DeviceState *dev, Property *prop,
61                                      Error **errp);
62 
63 static void bus_remove_child(BusState *bus, DeviceState *child)
64 {
65     BusChild *kid;
66 
67     QTAILQ_FOREACH(kid, &bus->children, sibling) {
68         if (kid->child == child) {
69             char name[32];
70 
71             snprintf(name, sizeof(name), "child[%d]", kid->index);
72             QTAILQ_REMOVE(&bus->children, kid, sibling);
73 
74             /* This gives back ownership of kid->child back to us.  */
75             object_property_del(OBJECT(bus), name, NULL);
76             object_unref(OBJECT(kid->child));
77             g_free(kid);
78             return;
79         }
80     }
81 }
82 
83 static void bus_add_child(BusState *bus, DeviceState *child)
84 {
85     char name[32];
86     BusChild *kid = g_malloc0(sizeof(*kid));
87 
88     if (qdev_hotplug) {
89         assert(bus->allow_hotplug);
90     }
91 
92     kid->index = bus->max_index++;
93     kid->child = child;
94     object_ref(OBJECT(kid->child));
95 
96     QTAILQ_INSERT_HEAD(&bus->children, kid, sibling);
97 
98     /* This transfers ownership of kid->child to the property.  */
99     snprintf(name, sizeof(name), "child[%d]", kid->index);
100     object_property_add_link(OBJECT(bus), name,
101                              object_get_typename(OBJECT(child)),
102                              (Object **)&kid->child,
103                              NULL, /* read-only property */
104                              0, /* return ownership on prop deletion */
105                              NULL);
106 }
107 
108 void qdev_set_parent_bus(DeviceState *dev, BusState *bus)
109 {
110     dev->parent_bus = bus;
111     object_ref(OBJECT(bus));
112     bus_add_child(bus, dev);
113 }
114 
115 /* Create a new device.  This only initializes the device state structure
116    and allows properties to be set.  qdev_init should be called to
117    initialize the actual device emulation.  */
118 DeviceState *qdev_create(BusState *bus, const char *name)
119 {
120     DeviceState *dev;
121 
122     dev = qdev_try_create(bus, name);
123     if (!dev) {
124         if (bus) {
125             error_report("Unknown device '%s' for bus '%s'", name,
126                          object_get_typename(OBJECT(bus)));
127         } else {
128             error_report("Unknown device '%s' for default sysbus", name);
129         }
130         abort();
131     }
132 
133     return dev;
134 }
135 
136 DeviceState *qdev_try_create(BusState *bus, const char *type)
137 {
138     DeviceState *dev;
139 
140     if (object_class_by_name(type) == NULL) {
141         return NULL;
142     }
143     dev = DEVICE(object_new(type));
144     if (!dev) {
145         return NULL;
146     }
147 
148     if (!bus) {
149         bus = sysbus_get_default();
150     }
151 
152     qdev_set_parent_bus(dev, bus);
153     object_unref(OBJECT(dev));
154     return dev;
155 }
156 
157 /* Initialize a device.  Device properties should be set before calling
158    this function.  IRQs and MMIO regions should be connected/mapped after
159    calling this function.
160    On failure, destroy the device and return negative value.
161    Return 0 on success.  */
162 int qdev_init(DeviceState *dev)
163 {
164     Error *local_err = NULL;
165 
166     assert(!dev->realized);
167 
168     object_property_set_bool(OBJECT(dev), true, "realized", &local_err);
169     if (local_err != NULL) {
170         qerror_report_err(local_err);
171         error_free(local_err);
172         object_unparent(OBJECT(dev));
173         return -1;
174     }
175     return 0;
176 }
177 
178 static void device_realize(DeviceState *dev, Error **errp)
179 {
180     DeviceClass *dc = DEVICE_GET_CLASS(dev);
181 
182     if (dc->init) {
183         int rc = dc->init(dev);
184         if (rc < 0) {
185             error_setg(errp, "Device initialization failed.");
186             return;
187         }
188     }
189 }
190 
191 static void device_unrealize(DeviceState *dev, Error **errp)
192 {
193     DeviceClass *dc = DEVICE_GET_CLASS(dev);
194 
195     if (dc->exit) {
196         int rc = dc->exit(dev);
197         if (rc < 0) {
198             error_setg(errp, "Device exit failed.");
199             return;
200         }
201     }
202 }
203 
204 void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
205                                  int required_for_version)
206 {
207     assert(!dev->realized);
208     dev->instance_id_alias = alias_id;
209     dev->alias_required_for_version = required_for_version;
210 }
211 
212 void qdev_unplug(DeviceState *dev, Error **errp)
213 {
214     DeviceClass *dc = DEVICE_GET_CLASS(dev);
215 
216     if (dev->parent_bus && !dev->parent_bus->allow_hotplug) {
217         error_set(errp, QERR_BUS_NO_HOTPLUG, dev->parent_bus->name);
218         return;
219     }
220 
221     if (!dc->hotpluggable) {
222         error_set(errp, QERR_DEVICE_NO_HOTPLUG,
223                   object_get_typename(OBJECT(dev)));
224         return;
225     }
226 
227     qdev_hot_removed = true;
228 
229     if (dev->parent_bus && dev->parent_bus->hotplug_handler) {
230         hotplug_handler_unplug(dev->parent_bus->hotplug_handler, dev, errp);
231     } else {
232         assert(dc->unplug != NULL);
233         if (dc->unplug(dev) < 0) { /* legacy handler */
234             error_set(errp, QERR_UNDEFINED_ERROR);
235         }
236     }
237 }
238 
239 static int qdev_reset_one(DeviceState *dev, void *opaque)
240 {
241     device_reset(dev);
242 
243     return 0;
244 }
245 
246 static int qbus_reset_one(BusState *bus, void *opaque)
247 {
248     BusClass *bc = BUS_GET_CLASS(bus);
249     if (bc->reset) {
250         bc->reset(bus);
251     }
252     return 0;
253 }
254 
255 void qdev_reset_all(DeviceState *dev)
256 {
257     qdev_walk_children(dev, NULL, NULL, qdev_reset_one, qbus_reset_one, NULL);
258 }
259 
260 void qbus_reset_all(BusState *bus)
261 {
262     qbus_walk_children(bus, NULL, NULL, qdev_reset_one, qbus_reset_one, NULL);
263 }
264 
265 void qbus_reset_all_fn(void *opaque)
266 {
267     BusState *bus = opaque;
268     qbus_reset_all(bus);
269 }
270 
271 /* can be used as ->unplug() callback for the simple cases */
272 int qdev_simple_unplug_cb(DeviceState *dev)
273 {
274     /* just zap it */
275     object_unparent(OBJECT(dev));
276     return 0;
277 }
278 
279 
280 /* Like qdev_init(), but terminate program via error_report() instead of
281    returning an error value.  This is okay during machine creation.
282    Don't use for hotplug, because there callers need to recover from
283    failure.  Exception: if you know the device's init() callback can't
284    fail, then qdev_init_nofail() can't fail either, and is therefore
285    usable even then.  But relying on the device implementation that
286    way is somewhat unclean, and best avoided.  */
287 void qdev_init_nofail(DeviceState *dev)
288 {
289     const char *typename = object_get_typename(OBJECT(dev));
290 
291     if (qdev_init(dev) < 0) {
292         error_report("Initialization of device %s failed", typename);
293         exit(1);
294     }
295 }
296 
297 void qdev_machine_creation_done(void)
298 {
299     /*
300      * ok, initial machine setup is done, starting from now we can
301      * only create hotpluggable devices
302      */
303     qdev_hotplug = 1;
304 }
305 
306 bool qdev_machine_modified(void)
307 {
308     return qdev_hot_added || qdev_hot_removed;
309 }
310 
311 BusState *qdev_get_parent_bus(DeviceState *dev)
312 {
313     return dev->parent_bus;
314 }
315 
316 static NamedGPIOList *qdev_get_named_gpio_list(DeviceState *dev,
317                                                const char *name)
318 {
319     NamedGPIOList *ngl;
320 
321     QLIST_FOREACH(ngl, &dev->gpios, node) {
322         /* NULL is a valid and matchable name, otherwise do a normal
323          * strcmp match.
324          */
325         if ((!ngl->name && !name) ||
326                 (name && ngl->name && strcmp(name, ngl->name) == 0)) {
327             return ngl;
328         }
329     }
330 
331     ngl = g_malloc0(sizeof(*ngl));
332     ngl->name = g_strdup(name);
333     QLIST_INSERT_HEAD(&dev->gpios, ngl, node);
334     return ngl;
335 }
336 
337 void qdev_init_gpio_in_named(DeviceState *dev, qemu_irq_handler handler,
338                              const char *name, int n)
339 {
340     NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
341 
342     gpio_list->in = qemu_extend_irqs(gpio_list->in, gpio_list->num_in, handler,
343                                      dev, n);
344     gpio_list->num_in += n;
345 }
346 
347 void qdev_init_gpio_in(DeviceState *dev, qemu_irq_handler handler, int n)
348 {
349     qdev_init_gpio_in_named(dev, handler, NULL, n);
350 }
351 
352 void qdev_init_gpio_out_named(DeviceState *dev, qemu_irq *pins,
353                               const char *name, int n)
354 {
355     NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
356 
357     assert(gpio_list->num_out == 0);
358     gpio_list->num_out = n;
359     gpio_list->out = pins;
360 }
361 
362 void qdev_init_gpio_out(DeviceState *dev, qemu_irq *pins, int n)
363 {
364     qdev_init_gpio_out_named(dev, pins, NULL, n);
365 }
366 
367 qemu_irq qdev_get_gpio_in_named(DeviceState *dev, const char *name, int n)
368 {
369     NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
370 
371     assert(n >= 0 && n < gpio_list->num_in);
372     return gpio_list->in[n];
373 }
374 
375 qemu_irq qdev_get_gpio_in(DeviceState *dev, int n)
376 {
377     return qdev_get_gpio_in_named(dev, NULL, n);
378 }
379 
380 void qdev_connect_gpio_out_named(DeviceState *dev, const char *name, int n,
381                                  qemu_irq pin)
382 {
383     NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
384 
385     assert(n >= 0 && n < gpio_list->num_out);
386     gpio_list->out[n] = pin;
387 }
388 
389 void qdev_connect_gpio_out(DeviceState * dev, int n, qemu_irq pin)
390 {
391     qdev_connect_gpio_out_named(dev, NULL, n, pin);
392 }
393 
394 BusState *qdev_get_child_bus(DeviceState *dev, const char *name)
395 {
396     BusState *bus;
397 
398     QLIST_FOREACH(bus, &dev->child_bus, sibling) {
399         if (strcmp(name, bus->name) == 0) {
400             return bus;
401         }
402     }
403     return NULL;
404 }
405 
406 int qbus_walk_children(BusState *bus,
407                        qdev_walkerfn *pre_devfn, qbus_walkerfn *pre_busfn,
408                        qdev_walkerfn *post_devfn, qbus_walkerfn *post_busfn,
409                        void *opaque)
410 {
411     BusChild *kid;
412     int err;
413 
414     if (pre_busfn) {
415         err = pre_busfn(bus, opaque);
416         if (err) {
417             return err;
418         }
419     }
420 
421     QTAILQ_FOREACH(kid, &bus->children, sibling) {
422         err = qdev_walk_children(kid->child,
423                                  pre_devfn, pre_busfn,
424                                  post_devfn, post_busfn, opaque);
425         if (err < 0) {
426             return err;
427         }
428     }
429 
430     if (post_busfn) {
431         err = post_busfn(bus, opaque);
432         if (err) {
433             return err;
434         }
435     }
436 
437     return 0;
438 }
439 
440 int qdev_walk_children(DeviceState *dev,
441                        qdev_walkerfn *pre_devfn, qbus_walkerfn *pre_busfn,
442                        qdev_walkerfn *post_devfn, qbus_walkerfn *post_busfn,
443                        void *opaque)
444 {
445     BusState *bus;
446     int err;
447 
448     if (pre_devfn) {
449         err = pre_devfn(dev, opaque);
450         if (err) {
451             return err;
452         }
453     }
454 
455     QLIST_FOREACH(bus, &dev->child_bus, sibling) {
456         err = qbus_walk_children(bus, pre_devfn, pre_busfn,
457                                  post_devfn, post_busfn, opaque);
458         if (err < 0) {
459             return err;
460         }
461     }
462 
463     if (post_devfn) {
464         err = post_devfn(dev, opaque);
465         if (err) {
466             return err;
467         }
468     }
469 
470     return 0;
471 }
472 
473 DeviceState *qdev_find_recursive(BusState *bus, const char *id)
474 {
475     BusChild *kid;
476     DeviceState *ret;
477     BusState *child;
478 
479     QTAILQ_FOREACH(kid, &bus->children, sibling) {
480         DeviceState *dev = kid->child;
481 
482         if (dev->id && strcmp(dev->id, id) == 0) {
483             return dev;
484         }
485 
486         QLIST_FOREACH(child, &dev->child_bus, sibling) {
487             ret = qdev_find_recursive(child, id);
488             if (ret) {
489                 return ret;
490             }
491         }
492     }
493     return NULL;
494 }
495 
496 static void qbus_realize(BusState *bus, DeviceState *parent, const char *name)
497 {
498     const char *typename = object_get_typename(OBJECT(bus));
499     BusClass *bc;
500     char *buf;
501     int i, len, bus_id;
502 
503     bus->parent = parent;
504 
505     if (name) {
506         bus->name = g_strdup(name);
507     } else if (bus->parent && bus->parent->id) {
508         /* parent device has id -> use it plus parent-bus-id for bus name */
509         bus_id = bus->parent->num_child_bus;
510 
511         len = strlen(bus->parent->id) + 16;
512         buf = g_malloc(len);
513         snprintf(buf, len, "%s.%d", bus->parent->id, bus_id);
514         bus->name = buf;
515     } else {
516         /* no id -> use lowercase bus type plus global bus-id for bus name */
517         bc = BUS_GET_CLASS(bus);
518         bus_id = bc->automatic_ids++;
519 
520         len = strlen(typename) + 16;
521         buf = g_malloc(len);
522         len = snprintf(buf, len, "%s.%d", typename, bus_id);
523         for (i = 0; i < len; i++) {
524             buf[i] = qemu_tolower(buf[i]);
525         }
526         bus->name = buf;
527     }
528 
529     if (bus->parent) {
530         QLIST_INSERT_HEAD(&bus->parent->child_bus, bus, sibling);
531         bus->parent->num_child_bus++;
532         object_property_add_child(OBJECT(bus->parent), bus->name, OBJECT(bus), NULL);
533         object_unref(OBJECT(bus));
534     } else if (bus != sysbus_get_default()) {
535         /* TODO: once all bus devices are qdevified,
536            only reset handler for main_system_bus should be registered here. */
537         qemu_register_reset(qbus_reset_all_fn, bus);
538     }
539 }
540 
541 static void bus_unparent(Object *obj)
542 {
543     BusState *bus = BUS(obj);
544     BusChild *kid;
545 
546     while ((kid = QTAILQ_FIRST(&bus->children)) != NULL) {
547         DeviceState *dev = kid->child;
548         object_unparent(OBJECT(dev));
549     }
550     if (bus->parent) {
551         QLIST_REMOVE(bus, sibling);
552         bus->parent->num_child_bus--;
553         bus->parent = NULL;
554     } else {
555         assert(bus != sysbus_get_default()); /* main_system_bus is never freed */
556         qemu_unregister_reset(qbus_reset_all_fn, bus);
557     }
558 }
559 
560 static bool bus_get_realized(Object *obj, Error **errp)
561 {
562     BusState *bus = BUS(obj);
563 
564     return bus->realized;
565 }
566 
567 static void bus_set_realized(Object *obj, bool value, Error **errp)
568 {
569     BusState *bus = BUS(obj);
570     BusClass *bc = BUS_GET_CLASS(bus);
571     BusChild *kid;
572     Error *local_err = NULL;
573 
574     if (value && !bus->realized) {
575         if (bc->realize) {
576             bc->realize(bus, &local_err);
577         }
578 
579         /* TODO: recursive realization */
580     } else if (!value && bus->realized) {
581         QTAILQ_FOREACH(kid, &bus->children, sibling) {
582             DeviceState *dev = kid->child;
583             object_property_set_bool(OBJECT(dev), false, "realized",
584                                      &local_err);
585             if (local_err != NULL) {
586                 break;
587             }
588         }
589         if (bc->unrealize && local_err == NULL) {
590             bc->unrealize(bus, &local_err);
591         }
592     }
593 
594     if (local_err != NULL) {
595         error_propagate(errp, local_err);
596         return;
597     }
598 
599     bus->realized = value;
600 }
601 
602 void qbus_create_inplace(void *bus, size_t size, const char *typename,
603                          DeviceState *parent, const char *name)
604 {
605     object_initialize(bus, size, typename);
606     qbus_realize(bus, parent, name);
607 }
608 
609 BusState *qbus_create(const char *typename, DeviceState *parent, const char *name)
610 {
611     BusState *bus;
612 
613     bus = BUS(object_new(typename));
614     qbus_realize(bus, parent, name);
615 
616     return bus;
617 }
618 
619 static char *bus_get_fw_dev_path(BusState *bus, DeviceState *dev)
620 {
621     BusClass *bc = BUS_GET_CLASS(bus);
622 
623     if (bc->get_fw_dev_path) {
624         return bc->get_fw_dev_path(dev);
625     }
626 
627     return NULL;
628 }
629 
630 static char *qdev_get_fw_dev_path_from_handler(BusState *bus, DeviceState *dev)
631 {
632     Object *obj = OBJECT(dev);
633     char *d = NULL;
634 
635     while (!d && obj->parent) {
636         obj = obj->parent;
637         d = fw_path_provider_try_get_dev_path(obj, bus, dev);
638     }
639     return d;
640 }
641 
642 static int qdev_get_fw_dev_path_helper(DeviceState *dev, char *p, int size)
643 {
644     int l = 0;
645 
646     if (dev && dev->parent_bus) {
647         char *d;
648         l = qdev_get_fw_dev_path_helper(dev->parent_bus->parent, p, size);
649         d = qdev_get_fw_dev_path_from_handler(dev->parent_bus, dev);
650         if (!d) {
651             d = bus_get_fw_dev_path(dev->parent_bus, dev);
652         }
653         if (d) {
654             l += snprintf(p + l, size - l, "%s", d);
655             g_free(d);
656         } else {
657             return l;
658         }
659     }
660     l += snprintf(p + l , size - l, "/");
661 
662     return l;
663 }
664 
665 char* qdev_get_fw_dev_path(DeviceState *dev)
666 {
667     char path[128];
668     int l;
669 
670     l = qdev_get_fw_dev_path_helper(dev, path, 128);
671 
672     path[l-1] = '\0';
673 
674     return g_strdup(path);
675 }
676 
677 char *qdev_get_dev_path(DeviceState *dev)
678 {
679     BusClass *bc;
680 
681     if (!dev || !dev->parent_bus) {
682         return NULL;
683     }
684 
685     bc = BUS_GET_CLASS(dev->parent_bus);
686     if (bc->get_dev_path) {
687         return bc->get_dev_path(dev);
688     }
689 
690     return NULL;
691 }
692 
693 /**
694  * Legacy property handling
695  */
696 
697 static void qdev_get_legacy_property(Object *obj, Visitor *v, void *opaque,
698                                      const char *name, Error **errp)
699 {
700     DeviceState *dev = DEVICE(obj);
701     Property *prop = opaque;
702 
703     char buffer[1024];
704     char *ptr = buffer;
705 
706     prop->info->print(dev, prop, buffer, sizeof(buffer));
707     visit_type_str(v, &ptr, name, errp);
708 }
709 
710 /**
711  * @qdev_add_legacy_property - adds a legacy property
712  *
713  * Do not use this is new code!  Properties added through this interface will
714  * be given names and types in the "legacy" namespace.
715  *
716  * Legacy properties are string versions of other OOM properties.  The format
717  * of the string depends on the property type.
718  */
719 static void qdev_property_add_legacy(DeviceState *dev, Property *prop,
720                                      Error **errp)
721 {
722     gchar *name;
723 
724     /* Register pointer properties as legacy properties */
725     if (!prop->info->print && prop->info->get) {
726         return;
727     }
728 
729     name = g_strdup_printf("legacy-%s", prop->name);
730     object_property_add(OBJECT(dev), name, "str",
731                         prop->info->print ? qdev_get_legacy_property : prop->info->get,
732                         NULL,
733                         NULL,
734                         prop, errp);
735 
736     g_free(name);
737 }
738 
739 /**
740  * @qdev_property_add_static - add a @Property to a device.
741  *
742  * Static properties access data in a struct.  The actual type of the
743  * property and the field depends on the property type.
744  */
745 void qdev_property_add_static(DeviceState *dev, Property *prop,
746                               Error **errp)
747 {
748     Error *local_err = NULL;
749     Object *obj = OBJECT(dev);
750 
751     /*
752      * TODO qdev_prop_ptr does not have getters or setters.  It must
753      * go now that it can be replaced with links.  The test should be
754      * removed along with it: all static properties are read/write.
755      */
756     if (!prop->info->get && !prop->info->set) {
757         return;
758     }
759 
760     object_property_add(obj, prop->name, prop->info->name,
761                         prop->info->get, prop->info->set,
762                         prop->info->release,
763                         prop, &local_err);
764 
765     if (local_err) {
766         error_propagate(errp, local_err);
767         return;
768     }
769     if (prop->qtype == QTYPE_NONE) {
770         return;
771     }
772 
773     if (prop->qtype == QTYPE_QBOOL) {
774         object_property_set_bool(obj, prop->defval, prop->name, &error_abort);
775     } else if (prop->info->enum_table) {
776         object_property_set_str(obj, prop->info->enum_table[prop->defval],
777                                 prop->name, &error_abort);
778     } else if (prop->qtype == QTYPE_QINT) {
779         object_property_set_int(obj, prop->defval, prop->name, &error_abort);
780     }
781 }
782 
783 /* @qdev_alias_all_properties - Add alias properties to the source object for
784  * all qdev properties on the target DeviceState.
785  */
786 void qdev_alias_all_properties(DeviceState *target, Object *source)
787 {
788     ObjectClass *class;
789     Property *prop;
790 
791     class = object_get_class(OBJECT(target));
792     do {
793         DeviceClass *dc = DEVICE_CLASS(class);
794 
795         for (prop = dc->props; prop && prop->name; prop++) {
796             object_property_add_alias(source, prop->name,
797                                       OBJECT(target), prop->name,
798                                       &error_abort);
799         }
800         class = object_class_get_parent(class);
801     } while (class != object_class_by_name(TYPE_DEVICE));
802 }
803 
804 static bool device_get_realized(Object *obj, Error **errp)
805 {
806     DeviceState *dev = DEVICE(obj);
807     return dev->realized;
808 }
809 
810 static void device_set_realized(Object *obj, bool value, Error **errp)
811 {
812     DeviceState *dev = DEVICE(obj);
813     DeviceClass *dc = DEVICE_GET_CLASS(dev);
814     BusState *bus;
815     Error *local_err = NULL;
816 
817     if (dev->hotplugged && !dc->hotpluggable) {
818         error_set(errp, QERR_DEVICE_NO_HOTPLUG, object_get_typename(obj));
819         return;
820     }
821 
822     if (value && !dev->realized) {
823         if (!obj->parent) {
824             static int unattached_count;
825             gchar *name = g_strdup_printf("device[%d]", unattached_count++);
826 
827             object_property_add_child(container_get(qdev_get_machine(),
828                                                     "/unattached"),
829                                       name, obj, &error_abort);
830             g_free(name);
831         }
832 
833         if (dc->realize) {
834             dc->realize(dev, &local_err);
835         }
836 
837         if (local_err != NULL) {
838             goto fail;
839         }
840 
841         if (dev->parent_bus && dev->parent_bus->hotplug_handler) {
842             hotplug_handler_plug(dev->parent_bus->hotplug_handler,
843                                  dev, &local_err);
844         } else if (object_dynamic_cast(qdev_get_machine(), TYPE_MACHINE)) {
845             HotplugHandler *hotplug_ctrl;
846             MachineState *machine = MACHINE(qdev_get_machine());
847             MachineClass *mc = MACHINE_GET_CLASS(machine);
848 
849             if (mc->get_hotplug_handler) {
850                 hotplug_ctrl = mc->get_hotplug_handler(machine, dev);
851                 if (hotplug_ctrl) {
852                     hotplug_handler_plug(hotplug_ctrl, dev, &local_err);
853                 }
854             }
855         }
856 
857         if (local_err != NULL) {
858             goto post_realize_fail;
859         }
860 
861         if (qdev_get_vmsd(dev)) {
862             vmstate_register_with_alias_id(dev, -1, qdev_get_vmsd(dev), dev,
863                                            dev->instance_id_alias,
864                                            dev->alias_required_for_version);
865         }
866 
867         QLIST_FOREACH(bus, &dev->child_bus, sibling) {
868             object_property_set_bool(OBJECT(bus), true, "realized",
869                                          &local_err);
870             if (local_err != NULL) {
871                 goto child_realize_fail;
872             }
873         }
874         if (dev->hotplugged) {
875             device_reset(dev);
876         }
877         dev->pending_deleted_event = false;
878     } else if (!value && dev->realized) {
879         Error **local_errp = NULL;
880         QLIST_FOREACH(bus, &dev->child_bus, sibling) {
881             local_errp = local_err ? NULL : &local_err;
882             object_property_set_bool(OBJECT(bus), false, "realized",
883                                      local_errp);
884         }
885         if (qdev_get_vmsd(dev)) {
886             vmstate_unregister(dev, qdev_get_vmsd(dev), dev);
887         }
888         if (dc->unrealize) {
889             local_errp = local_err ? NULL : &local_err;
890             dc->unrealize(dev, local_errp);
891         }
892         dev->pending_deleted_event = true;
893     }
894 
895     if (local_err != NULL) {
896         goto fail;
897     }
898 
899     dev->realized = value;
900     return;
901 
902 child_realize_fail:
903     QLIST_FOREACH(bus, &dev->child_bus, sibling) {
904         object_property_set_bool(OBJECT(bus), false, "realized",
905                                  NULL);
906     }
907 
908     if (qdev_get_vmsd(dev)) {
909         vmstate_unregister(dev, qdev_get_vmsd(dev), dev);
910     }
911 
912 post_realize_fail:
913     if (dc->unrealize) {
914         dc->unrealize(dev, NULL);
915     }
916 
917 fail:
918     error_propagate(errp, local_err);
919     return;
920 }
921 
922 static bool device_get_hotpluggable(Object *obj, Error **errp)
923 {
924     DeviceClass *dc = DEVICE_GET_CLASS(obj);
925     DeviceState *dev = DEVICE(obj);
926 
927     return dc->hotpluggable && (dev->parent_bus == NULL ||
928                                 dev->parent_bus->allow_hotplug);
929 }
930 
931 static bool device_get_hotplugged(Object *obj, Error **err)
932 {
933     DeviceState *dev = DEVICE(obj);
934 
935     return dev->hotplugged;
936 }
937 
938 static void device_set_hotplugged(Object *obj, bool value, Error **err)
939 {
940     DeviceState *dev = DEVICE(obj);
941 
942     dev->hotplugged = value;
943 }
944 
945 static void device_initfn(Object *obj)
946 {
947     DeviceState *dev = DEVICE(obj);
948     ObjectClass *class;
949     Property *prop;
950 
951     if (qdev_hotplug) {
952         dev->hotplugged = 1;
953         qdev_hot_added = true;
954     }
955 
956     dev->instance_id_alias = -1;
957     dev->realized = false;
958 
959     object_property_add_bool(obj, "realized",
960                              device_get_realized, device_set_realized, NULL);
961     object_property_add_bool(obj, "hotpluggable",
962                              device_get_hotpluggable, NULL, NULL);
963     object_property_add_bool(obj, "hotplugged",
964                              device_get_hotplugged, device_set_hotplugged,
965                              &error_abort);
966 
967     class = object_get_class(OBJECT(dev));
968     do {
969         for (prop = DEVICE_CLASS(class)->props; prop && prop->name; prop++) {
970             qdev_property_add_legacy(dev, prop, &error_abort);
971             qdev_property_add_static(dev, prop, &error_abort);
972         }
973         class = object_class_get_parent(class);
974     } while (class != object_class_by_name(TYPE_DEVICE));
975 
976     object_property_add_link(OBJECT(dev), "parent_bus", TYPE_BUS,
977                              (Object **)&dev->parent_bus, NULL, 0,
978                              &error_abort);
979     QLIST_INIT(&dev->gpios);
980 }
981 
982 static void device_post_init(Object *obj)
983 {
984     Error *err = NULL;
985     qdev_prop_set_globals(DEVICE(obj), &err);
986     if (err) {
987         qerror_report_err(err);
988         error_free(err);
989         exit(EXIT_FAILURE);
990     }
991 }
992 
993 /* Unlink device from bus and free the structure.  */
994 static void device_finalize(Object *obj)
995 {
996     NamedGPIOList *ngl, *next;
997 
998     DeviceState *dev = DEVICE(obj);
999     if (dev->opts) {
1000         qemu_opts_del(dev->opts);
1001     }
1002 
1003     QLIST_FOREACH_SAFE(ngl, &dev->gpios, node, next) {
1004         QLIST_REMOVE(ngl, node);
1005         qemu_free_irqs(ngl->in, ngl->num_in);
1006         g_free(ngl->name);
1007         g_free(ngl);
1008         /* ngl->out irqs are owned by the other end and should not be freed
1009          * here
1010          */
1011     }
1012 }
1013 
1014 static void device_class_base_init(ObjectClass *class, void *data)
1015 {
1016     DeviceClass *klass = DEVICE_CLASS(class);
1017 
1018     /* We explicitly look up properties in the superclasses,
1019      * so do not propagate them to the subclasses.
1020      */
1021     klass->props = NULL;
1022 }
1023 
1024 static void device_unparent(Object *obj)
1025 {
1026     DeviceState *dev = DEVICE(obj);
1027     BusState *bus;
1028 
1029     if (dev->realized) {
1030         object_property_set_bool(obj, false, "realized", NULL);
1031     }
1032     while (dev->num_child_bus) {
1033         bus = QLIST_FIRST(&dev->child_bus);
1034         object_unparent(OBJECT(bus));
1035     }
1036     if (dev->parent_bus) {
1037         bus_remove_child(dev->parent_bus, dev);
1038         object_unref(OBJECT(dev->parent_bus));
1039         dev->parent_bus = NULL;
1040     }
1041 
1042     /* Only send event if the device had been completely realized */
1043     if (dev->pending_deleted_event) {
1044         gchar *path = object_get_canonical_path(OBJECT(dev));
1045 
1046         qapi_event_send_device_deleted(!!dev->id, dev->id, path, &error_abort);
1047         g_free(path);
1048     }
1049 }
1050 
1051 static void device_class_init(ObjectClass *class, void *data)
1052 {
1053     DeviceClass *dc = DEVICE_CLASS(class);
1054 
1055     class->unparent = device_unparent;
1056     dc->realize = device_realize;
1057     dc->unrealize = device_unrealize;
1058 
1059     /* by default all devices were considered as hotpluggable,
1060      * so with intent to check it in generic qdev_unplug() /
1061      * device_set_realized() functions make every device
1062      * hotpluggable. Devices that shouldn't be hotpluggable,
1063      * should override it in their class_init()
1064      */
1065     dc->hotpluggable = true;
1066 }
1067 
1068 void device_reset(DeviceState *dev)
1069 {
1070     DeviceClass *klass = DEVICE_GET_CLASS(dev);
1071 
1072     if (klass->reset) {
1073         klass->reset(dev);
1074     }
1075 }
1076 
1077 Object *qdev_get_machine(void)
1078 {
1079     static Object *dev;
1080 
1081     if (dev == NULL) {
1082         dev = container_get(object_get_root(), "/machine");
1083     }
1084 
1085     return dev;
1086 }
1087 
1088 static const TypeInfo device_type_info = {
1089     .name = TYPE_DEVICE,
1090     .parent = TYPE_OBJECT,
1091     .instance_size = sizeof(DeviceState),
1092     .instance_init = device_initfn,
1093     .instance_post_init = device_post_init,
1094     .instance_finalize = device_finalize,
1095     .class_base_init = device_class_base_init,
1096     .class_init = device_class_init,
1097     .abstract = true,
1098     .class_size = sizeof(DeviceClass),
1099 };
1100 
1101 static void qbus_initfn(Object *obj)
1102 {
1103     BusState *bus = BUS(obj);
1104 
1105     QTAILQ_INIT(&bus->children);
1106     object_property_add_link(obj, QDEV_HOTPLUG_HANDLER_PROPERTY,
1107                              TYPE_HOTPLUG_HANDLER,
1108                              (Object **)&bus->hotplug_handler,
1109                              object_property_allow_set_link,
1110                              OBJ_PROP_LINK_UNREF_ON_RELEASE,
1111                              NULL);
1112     object_property_add_bool(obj, "realized",
1113                              bus_get_realized, bus_set_realized, NULL);
1114 }
1115 
1116 static char *default_bus_get_fw_dev_path(DeviceState *dev)
1117 {
1118     return g_strdup(object_get_typename(OBJECT(dev)));
1119 }
1120 
1121 static void bus_class_init(ObjectClass *class, void *data)
1122 {
1123     BusClass *bc = BUS_CLASS(class);
1124 
1125     class->unparent = bus_unparent;
1126     bc->get_fw_dev_path = default_bus_get_fw_dev_path;
1127 }
1128 
1129 static void qbus_finalize(Object *obj)
1130 {
1131     BusState *bus = BUS(obj);
1132 
1133     g_free((char *)bus->name);
1134 }
1135 
1136 static const TypeInfo bus_info = {
1137     .name = TYPE_BUS,
1138     .parent = TYPE_OBJECT,
1139     .instance_size = sizeof(BusState),
1140     .abstract = true,
1141     .class_size = sizeof(BusClass),
1142     .instance_init = qbus_initfn,
1143     .instance_finalize = qbus_finalize,
1144     .class_init = bus_class_init,
1145 };
1146 
1147 static void qdev_register_types(void)
1148 {
1149     type_register_static(&bus_info);
1150     type_register_static(&device_type_info);
1151 }
1152 
1153 type_init(qdev_register_types)
1154