2 * Dynamic device configuration and creation.
4 * Copyright (c) 2009 CodeSourcery
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.1 of the License, or (at your option) any later version.
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.
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/>.
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
28 #include "qemu/osdep.h"
29 #include "qapi/error.h"
30 #include "qapi/qapi-events-qdev.h"
31 #include "qapi/qmp/qdict.h"
32 #include "qapi/visitor.h"
33 #include "qemu/error-report.h"
34 #include "qemu/option.h"
36 #include "hw/qdev-properties.h"
37 #include "hw/boards.h"
38 #include "hw/sysbus.h"
39 #include "hw/qdev-clock.h"
40 #include "migration/vmstate.h"
43 static bool qdev_hot_added
= false;
44 bool qdev_hot_removed
= false;
46 const VMStateDescription
*qdev_get_vmsd(DeviceState
*dev
)
48 DeviceClass
*dc
= DEVICE_GET_CLASS(dev
);
52 static void bus_free_bus_child(BusChild
*kid
)
54 object_unref(OBJECT(kid
->child
));
58 static void bus_remove_child(BusState
*bus
, DeviceState
*child
)
62 QTAILQ_FOREACH(kid
, &bus
->children
, sibling
) {
63 if (kid
->child
== child
) {
66 snprintf(name
, sizeof(name
), "child[%d]", kid
->index
);
67 QTAILQ_REMOVE_RCU(&bus
->children
, kid
, sibling
);
71 /* This gives back ownership of kid->child back to us. */
72 object_property_del(OBJECT(bus
), name
);
74 /* free the bus kid, when it is safe to do so*/
75 call_rcu(kid
, bus_free_bus_child
, rcu
);
81 static void bus_add_child(BusState
*bus
, DeviceState
*child
)
84 BusChild
*kid
= g_malloc0(sizeof(*kid
));
87 kid
->index
= bus
->max_index
++;
89 object_ref(OBJECT(kid
->child
));
91 QTAILQ_INSERT_HEAD_RCU(&bus
->children
, kid
, sibling
);
93 /* This transfers ownership of kid->child to the property. */
94 snprintf(name
, sizeof(name
), "child[%d]", kid
->index
);
95 object_property_add_link(OBJECT(bus
), name
,
96 object_get_typename(OBJECT(child
)),
97 (Object
**)&kid
->child
,
98 NULL
, /* read-only property */
102 static bool bus_check_address(BusState
*bus
, DeviceState
*child
, Error
**errp
)
104 BusClass
*bc
= BUS_GET_CLASS(bus
);
105 return !bc
->check_address
|| bc
->check_address(bus
, child
, errp
);
108 bool qdev_set_parent_bus(DeviceState
*dev
, BusState
*bus
, Error
**errp
)
110 BusState
*old_parent_bus
= dev
->parent_bus
;
111 DeviceClass
*dc
= DEVICE_GET_CLASS(dev
);
113 assert(dc
->bus_type
&& object_dynamic_cast(OBJECT(bus
), dc
->bus_type
));
115 if (!bus_check_address(bus
, dev
, errp
)) {
119 if (old_parent_bus
) {
120 trace_qdev_update_parent_bus(dev
, object_get_typename(OBJECT(dev
)),
121 old_parent_bus
, object_get_typename(OBJECT(old_parent_bus
)),
122 OBJECT(bus
), object_get_typename(OBJECT(bus
)));
124 * Keep a reference to the device while it's not plugged into
125 * any bus, to avoid it potentially evaporating when it is
126 * dereffed in bus_remove_child().
127 * Also keep the ref of the parent bus until the end, so that
128 * we can safely call resettable_change_parent() below.
130 object_ref(OBJECT(dev
));
131 bus_remove_child(dev
->parent_bus
, dev
);
133 dev
->parent_bus
= bus
;
134 object_ref(OBJECT(bus
));
135 bus_add_child(bus
, dev
);
137 resettable_change_parent(OBJECT(dev
), OBJECT(bus
),
138 OBJECT(old_parent_bus
));
140 if (old_parent_bus
) {
141 object_unref(OBJECT(old_parent_bus
));
142 object_unref(OBJECT(dev
));
147 DeviceState
*qdev_new(const char *name
)
149 ObjectClass
*oc
= object_class_by_name(name
);
150 #ifdef CONFIG_MODULES
152 int rv
= module_load_qom(name
, &error_fatal
);
154 oc
= object_class_by_name(name
);
156 error_report("could not find a module for type '%s'", name
);
162 error_report("unknown type '%s'", name
);
165 return DEVICE(object_new(name
));
168 DeviceState
*qdev_try_new(const char *name
)
170 if (!module_object_class_by_name(name
)) {
173 return DEVICE(object_new(name
));
176 static QTAILQ_HEAD(, DeviceListener
) device_listeners
177 = QTAILQ_HEAD_INITIALIZER(device_listeners
);
179 enum ListenerDirection
{ Forward
, Reverse
};
181 #define DEVICE_LISTENER_CALL(_callback, _direction, _args...) \
183 DeviceListener *_listener; \
185 switch (_direction) { \
187 QTAILQ_FOREACH(_listener, &device_listeners, link) { \
188 if (_listener->_callback) { \
189 _listener->_callback(_listener, ##_args); \
194 QTAILQ_FOREACH_REVERSE(_listener, &device_listeners, \
196 if (_listener->_callback) { \
197 _listener->_callback(_listener, ##_args); \
206 static int device_listener_add(DeviceState
*dev
, void *opaque
)
208 DEVICE_LISTENER_CALL(realize
, Forward
, dev
);
213 void device_listener_register(DeviceListener
*listener
)
215 QTAILQ_INSERT_TAIL(&device_listeners
, listener
, link
);
217 qbus_walk_children(sysbus_get_default(), NULL
, NULL
, device_listener_add
,
221 void device_listener_unregister(DeviceListener
*listener
)
223 QTAILQ_REMOVE(&device_listeners
, listener
, link
);
226 bool qdev_should_hide_device(const QDict
*opts
, bool from_json
, Error
**errp
)
229 DeviceListener
*listener
;
231 QTAILQ_FOREACH(listener
, &device_listeners
, link
) {
232 if (listener
->hide_device
) {
233 if (listener
->hide_device(listener
, opts
, from_json
, errp
)) {
244 void qdev_set_legacy_instance_id(DeviceState
*dev
, int alias_id
,
245 int required_for_version
)
247 assert(!dev
->realized
);
248 dev
->instance_id_alias
= alias_id
;
249 dev
->alias_required_for_version
= required_for_version
;
252 void device_cold_reset(DeviceState
*dev
)
254 resettable_reset(OBJECT(dev
), RESET_TYPE_COLD
);
257 bool device_is_in_reset(DeviceState
*dev
)
259 return resettable_is_in_reset(OBJECT(dev
));
262 static ResettableState
*device_get_reset_state(Object
*obj
)
264 DeviceState
*dev
= DEVICE(obj
);
268 static void device_reset_child_foreach(Object
*obj
, ResettableChildCallback cb
,
269 void *opaque
, ResetType type
)
271 DeviceState
*dev
= DEVICE(obj
);
274 QLIST_FOREACH(bus
, &dev
->child_bus
, sibling
) {
275 cb(OBJECT(bus
), opaque
, type
);
279 bool qdev_realize(DeviceState
*dev
, BusState
*bus
, Error
**errp
)
281 assert(!dev
->realized
&& !dev
->parent_bus
);
284 if (!qdev_set_parent_bus(dev
, bus
, errp
)) {
288 assert(!DEVICE_GET_CLASS(dev
)->bus_type
);
291 return object_property_set_bool(OBJECT(dev
), "realized", true, errp
);
294 bool qdev_realize_and_unref(DeviceState
*dev
, BusState
*bus
, Error
**errp
)
298 ret
= qdev_realize(dev
, bus
, errp
);
299 object_unref(OBJECT(dev
));
303 void qdev_unrealize(DeviceState
*dev
)
305 object_property_set_bool(OBJECT(dev
), "realized", false, &error_abort
);
308 static int qdev_assert_realized_properly_cb(Object
*obj
, void *opaque
)
310 DeviceState
*dev
= DEVICE(object_dynamic_cast(obj
, TYPE_DEVICE
));
314 dc
= DEVICE_GET_CLASS(dev
);
315 assert(dev
->realized
);
316 assert(dev
->parent_bus
|| !dc
->bus_type
);
321 void qdev_assert_realized_properly(void)
323 object_child_foreach_recursive(object_get_root(),
324 qdev_assert_realized_properly_cb
, NULL
);
327 bool qdev_machine_modified(void)
329 return qdev_hot_added
|| qdev_hot_removed
;
332 BusState
*qdev_get_parent_bus(const DeviceState
*dev
)
334 return dev
->parent_bus
;
337 BusState
*qdev_get_child_bus(DeviceState
*dev
, const char *name
)
340 Object
*child
= object_resolve_path_component(OBJECT(dev
), name
);
342 bus
= (BusState
*)object_dynamic_cast(child
, TYPE_BUS
);
347 QLIST_FOREACH(bus
, &dev
->child_bus
, sibling
) {
348 if (strcmp(name
, bus
->name
) == 0) {
355 int qdev_walk_children(DeviceState
*dev
,
356 qdev_walkerfn
*pre_devfn
, qbus_walkerfn
*pre_busfn
,
357 qdev_walkerfn
*post_devfn
, qbus_walkerfn
*post_busfn
,
364 err
= pre_devfn(dev
, opaque
);
370 QLIST_FOREACH(bus
, &dev
->child_bus
, sibling
) {
371 err
= qbus_walk_children(bus
, pre_devfn
, pre_busfn
,
372 post_devfn
, post_busfn
, opaque
);
379 err
= post_devfn(dev
, opaque
);
388 DeviceState
*qdev_find_recursive(BusState
*bus
, const char *id
)
394 WITH_RCU_READ_LOCK_GUARD() {
395 QTAILQ_FOREACH_RCU(kid
, &bus
->children
, sibling
) {
396 DeviceState
*dev
= kid
->child
;
398 if (dev
->id
&& strcmp(dev
->id
, id
) == 0) {
402 QLIST_FOREACH(child
, &dev
->child_bus
, sibling
) {
403 ret
= qdev_find_recursive(child
, id
);
413 char *qdev_get_dev_path(DeviceState
*dev
)
417 if (!dev
|| !dev
->parent_bus
) {
421 bc
= BUS_GET_CLASS(dev
->parent_bus
);
422 if (bc
->get_dev_path
) {
423 return bc
->get_dev_path(dev
);
429 void qdev_add_unplug_blocker(DeviceState
*dev
, Error
*reason
)
431 dev
->unplug_blockers
= g_slist_prepend(dev
->unplug_blockers
, reason
);
434 void qdev_del_unplug_blocker(DeviceState
*dev
, Error
*reason
)
436 dev
->unplug_blockers
= g_slist_remove(dev
->unplug_blockers
, reason
);
439 bool qdev_unplug_blocked(DeviceState
*dev
, Error
**errp
)
441 if (dev
->unplug_blockers
) {
442 error_propagate(errp
, error_copy(dev
->unplug_blockers
->data
));
449 static bool device_get_realized(Object
*obj
, Error
**errp
)
451 DeviceState
*dev
= DEVICE(obj
);
452 return dev
->realized
;
455 static bool check_only_migratable(Object
*obj
, Error
**errp
)
457 DeviceClass
*dc
= DEVICE_GET_CLASS(obj
);
459 if (!vmstate_check_only_migratable(dc
->vmsd
)) {
460 error_setg(errp
, "Device %s is not migratable, but "
461 "--only-migratable was specified",
462 object_get_typename(obj
));
469 static void device_set_realized(Object
*obj
, bool value
, Error
**errp
)
471 DeviceState
*dev
= DEVICE(obj
);
472 DeviceClass
*dc
= DEVICE_GET_CLASS(dev
);
473 HotplugHandler
*hotplug_ctrl
;
476 Error
*local_err
= NULL
;
477 bool unattached_parent
= false;
478 static int unattached_count
;
480 if (dev
->hotplugged
&& !dc
->hotpluggable
) {
481 error_setg(errp
, "Device '%s' does not support hotplugging",
482 object_get_typename(obj
));
486 if (value
&& !dev
->realized
) {
487 if (!check_only_migratable(obj
, errp
)) {
492 gchar
*name
= g_strdup_printf("device[%d]", unattached_count
++);
494 object_property_add_child(container_get(qdev_get_machine(),
497 unattached_parent
= true;
501 hotplug_ctrl
= qdev_get_hotplug_handler(dev
);
503 hotplug_handler_pre_plug(hotplug_ctrl
, dev
, &local_err
);
504 if (local_err
!= NULL
) {
510 dc
->realize(dev
, &local_err
);
511 if (local_err
!= NULL
) {
516 DEVICE_LISTENER_CALL(realize
, Forward
, dev
);
519 * always free/re-initialize here since the value cannot be cleaned up
520 * in device_unrealize due to its usage later on in the unplug path
522 g_free(dev
->canonical_path
);
523 dev
->canonical_path
= object_get_canonical_path(OBJECT(dev
));
524 QLIST_FOREACH(ncl
, &dev
->clocks
, node
) {
528 clock_setup_canonical_path(ncl
->clock
);
532 if (qdev_get_vmsd(dev
)) {
533 if (vmstate_register_with_alias_id(VMSTATE_IF(dev
),
534 VMSTATE_INSTANCE_ID_ANY
,
535 qdev_get_vmsd(dev
), dev
,
536 dev
->instance_id_alias
,
537 dev
->alias_required_for_version
,
539 goto post_realize_fail
;
544 * Clear the reset state, in case the object was previously unrealized
545 * with a dirty state.
547 resettable_state_clear(&dev
->reset
);
549 QLIST_FOREACH(bus
, &dev
->child_bus
, sibling
) {
550 if (!qbus_realize(bus
, errp
)) {
551 goto child_realize_fail
;
554 if (dev
->hotplugged
) {
556 * Reset the device, as well as its subtree which, at this point,
557 * should be realized too.
559 resettable_assert_reset(OBJECT(dev
), RESET_TYPE_COLD
);
560 resettable_change_parent(OBJECT(dev
), OBJECT(dev
->parent_bus
),
562 resettable_release_reset(OBJECT(dev
), RESET_TYPE_COLD
);
564 dev
->pending_deleted_event
= false;
567 hotplug_handler_plug(hotplug_ctrl
, dev
, &local_err
);
568 if (local_err
!= NULL
) {
569 goto child_realize_fail
;
573 qatomic_store_release(&dev
->realized
, value
);
575 } else if (!value
&& dev
->realized
) {
578 * Change the value so that any concurrent users are aware
579 * that the device is going to be unrealized
581 * TODO: change .realized property to enum that states
582 * each phase of the device realization/unrealization
585 qatomic_set(&dev
->realized
, value
);
587 * Ensure that concurrent users see this update prior to
588 * any other changes done by unrealize.
592 QLIST_FOREACH(bus
, &dev
->child_bus
, sibling
) {
595 if (qdev_get_vmsd(dev
)) {
596 vmstate_unregister(VMSTATE_IF(dev
), qdev_get_vmsd(dev
), dev
);
601 dev
->pending_deleted_event
= true;
602 DEVICE_LISTENER_CALL(unrealize
, Reverse
, dev
);
605 assert(local_err
== NULL
);
609 QLIST_FOREACH(bus
, &dev
->child_bus
, sibling
) {
613 if (qdev_get_vmsd(dev
)) {
614 vmstate_unregister(VMSTATE_IF(dev
), qdev_get_vmsd(dev
), dev
);
618 g_free(dev
->canonical_path
);
619 dev
->canonical_path
= NULL
;
625 error_propagate(errp
, local_err
);
626 if (unattached_parent
) {
628 * Beware, this doesn't just revert
629 * object_property_add_child(), it also runs bus_remove()!
631 object_unparent(OBJECT(dev
));
636 static bool device_get_hotpluggable(Object
*obj
, Error
**errp
)
638 DeviceClass
*dc
= DEVICE_GET_CLASS(obj
);
639 DeviceState
*dev
= DEVICE(obj
);
641 return dc
->hotpluggable
&& (dev
->parent_bus
== NULL
||
642 qbus_is_hotpluggable(dev
->parent_bus
));
645 static bool device_get_hotplugged(Object
*obj
, Error
**errp
)
647 DeviceState
*dev
= DEVICE(obj
);
649 return dev
->hotplugged
;
652 static void device_initfn(Object
*obj
)
654 DeviceState
*dev
= DEVICE(obj
);
656 if (phase_check(PHASE_MACHINE_READY
)) {
658 qdev_hot_added
= true;
661 dev
->instance_id_alias
= -1;
662 dev
->realized
= false;
663 dev
->allow_unplug_during_migration
= false;
665 QLIST_INIT(&dev
->gpios
);
666 QLIST_INIT(&dev
->clocks
);
669 static void device_post_init(Object
*obj
)
672 * Note: ordered so that the user's global properties take
675 object_apply_compat_props(obj
);
676 qdev_prop_set_globals(DEVICE(obj
));
679 /* Unlink device from bus and free the structure. */
680 static void device_finalize(Object
*obj
)
682 NamedGPIOList
*ngl
, *next
;
684 DeviceState
*dev
= DEVICE(obj
);
686 g_assert(!dev
->unplug_blockers
);
688 QLIST_FOREACH_SAFE(ngl
, &dev
->gpios
, node
, next
) {
689 QLIST_REMOVE(ngl
, node
);
690 qemu_free_irqs(ngl
->in
, ngl
->num_in
);
693 /* ngl->out irqs are owned by the other end and should not be freed
698 qdev_finalize_clocklist(dev
);
700 /* Only send event if the device had been completely realized */
701 if (dev
->pending_deleted_event
) {
702 g_assert(dev
->canonical_path
);
704 qapi_event_send_device_deleted(dev
->id
, dev
->canonical_path
);
705 g_free(dev
->canonical_path
);
706 dev
->canonical_path
= NULL
;
709 qobject_unref(dev
->opts
);
713 static void device_class_base_init(ObjectClass
*class, void *data
)
715 DeviceClass
*klass
= DEVICE_CLASS(class);
717 /* We explicitly look up properties in the superclasses,
718 * so do not propagate them to the subclasses.
720 klass
->props_
= NULL
;
723 static void device_unparent(Object
*obj
)
725 DeviceState
*dev
= DEVICE(obj
);
731 while (dev
->num_child_bus
) {
732 bus
= QLIST_FIRST(&dev
->child_bus
);
733 object_unparent(OBJECT(bus
));
735 if (dev
->parent_bus
) {
736 bus_remove_child(dev
->parent_bus
, dev
);
737 object_unref(OBJECT(dev
->parent_bus
));
738 dev
->parent_bus
= NULL
;
743 device_vmstate_if_get_id(VMStateIf
*obj
)
745 DeviceState
*dev
= DEVICE(obj
);
747 return qdev_get_dev_path(dev
);
750 static void device_class_init(ObjectClass
*class, void *data
)
752 DeviceClass
*dc
= DEVICE_CLASS(class);
753 VMStateIfClass
*vc
= VMSTATE_IF_CLASS(class);
754 ResettableClass
*rc
= RESETTABLE_CLASS(class);
756 class->unparent
= device_unparent
;
758 /* by default all devices were considered as hotpluggable,
759 * so with intent to check it in generic qdev_unplug() /
760 * device_set_realized() functions make every device
761 * hotpluggable. Devices that shouldn't be hotpluggable,
762 * should override it in their class_init()
764 dc
->hotpluggable
= true;
765 dc
->user_creatable
= true;
766 vc
->get_id
= device_vmstate_if_get_id
;
767 rc
->get_state
= device_get_reset_state
;
768 rc
->child_foreach
= device_reset_child_foreach
;
771 * A NULL legacy_reset implies a three-phase reset device. Devices can
772 * only be reset using three-phase aware mechanisms, but we still support
773 * for transitional purposes leaf classes which set the old legacy_reset
774 * method via device_class_set_legacy_reset().
776 dc
->legacy_reset
= NULL
;
778 object_class_property_add_bool(class, "realized",
779 device_get_realized
, device_set_realized
);
780 object_class_property_add_bool(class, "hotpluggable",
781 device_get_hotpluggable
, NULL
);
782 object_class_property_add_bool(class, "hotplugged",
783 device_get_hotplugged
, NULL
);
784 object_class_property_add_link(class, "parent_bus", TYPE_BUS
,
785 offsetof(DeviceState
, parent_bus
), NULL
, 0);
788 static void do_legacy_reset(Object
*obj
, ResetType type
)
790 DeviceClass
*dc
= DEVICE_GET_CLASS(obj
);
792 dc
->legacy_reset(DEVICE(obj
));
795 void device_class_set_legacy_reset(DeviceClass
*dc
, DeviceReset dev_reset
)
798 * A legacy DeviceClass::reset has identical semantics to the
799 * three-phase "hold" method, with no "enter" or "exit"
800 * behaviour. Classes that use this legacy function must be leaf
801 * classes that do not chain up to their parent class reset.
802 * There is no mechanism for resetting a device that does not
803 * use the three-phase APIs, so the only place which calls
804 * the legacy_reset hook is do_legacy_reset().
806 ResettableClass
*rc
= RESETTABLE_CLASS(dc
);
808 rc
->phases
.enter
= NULL
;
809 rc
->phases
.hold
= do_legacy_reset
;
810 rc
->phases
.exit
= NULL
;
811 dc
->legacy_reset
= dev_reset
;
814 void device_class_set_parent_realize(DeviceClass
*dc
,
815 DeviceRealize dev_realize
,
816 DeviceRealize
*parent_realize
)
818 *parent_realize
= dc
->realize
;
819 dc
->realize
= dev_realize
;
822 void device_class_set_parent_unrealize(DeviceClass
*dc
,
823 DeviceUnrealize dev_unrealize
,
824 DeviceUnrealize
*parent_unrealize
)
826 *parent_unrealize
= dc
->unrealize
;
827 dc
->unrealize
= dev_unrealize
;
830 Object
*qdev_get_machine(void)
835 dev
= container_get(object_get_root(), "/machine");
841 char *qdev_get_human_name(DeviceState
*dev
)
843 g_assert(dev
!= NULL
);
846 g_strdup(dev
->id
) : object_get_canonical_path(OBJECT(dev
));
849 static MachineInitPhase machine_phase
;
851 bool phase_check(MachineInitPhase phase
)
853 return machine_phase
>= phase
;
856 void phase_advance(MachineInitPhase phase
)
858 assert(machine_phase
== phase
- 1);
859 machine_phase
= phase
;
862 static const TypeInfo device_type_info
= {
864 .parent
= TYPE_OBJECT
,
865 .instance_size
= sizeof(DeviceState
),
866 .instance_init
= device_initfn
,
867 .instance_post_init
= device_post_init
,
868 .instance_finalize
= device_finalize
,
869 .class_base_init
= device_class_base_init
,
870 .class_init
= device_class_init
,
872 .class_size
= sizeof(DeviceClass
),
873 .interfaces
= (InterfaceInfo
[]) {
875 { TYPE_RESETTABLE_INTERFACE
},
880 static void qdev_register_types(void)
882 type_register_static(&device_type_info
);
885 type_init(qdev_register_types
)