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