Lines Matching refs:dev
46 const VMStateDescription *qdev_get_vmsd(DeviceState *dev) in qdev_get_vmsd() argument
48 DeviceClass *dc = DEVICE_GET_CLASS(dev); in qdev_get_vmsd()
108 bool qdev_set_parent_bus(DeviceState *dev, BusState *bus, Error **errp) in qdev_set_parent_bus() argument
110 BusState *old_parent_bus = dev->parent_bus; in qdev_set_parent_bus()
111 DeviceClass *dc = DEVICE_GET_CLASS(dev); in qdev_set_parent_bus()
115 if (!bus_check_address(bus, dev, errp)) { in qdev_set_parent_bus()
120 trace_qdev_update_parent_bus(dev, object_get_typename(OBJECT(dev)), in qdev_set_parent_bus()
130 object_ref(OBJECT(dev)); in qdev_set_parent_bus()
131 bus_remove_child(dev->parent_bus, dev); in qdev_set_parent_bus()
133 dev->parent_bus = bus; in qdev_set_parent_bus()
135 bus_add_child(bus, dev); in qdev_set_parent_bus()
136 if (dev->realized) { in qdev_set_parent_bus()
137 resettable_change_parent(OBJECT(dev), OBJECT(bus), in qdev_set_parent_bus()
142 object_unref(OBJECT(dev)); in qdev_set_parent_bus()
191 static int device_listener_add(DeviceState *dev, void *opaque) in device_listener_add() argument
193 DEVICE_LISTENER_CALL(realize, Forward, dev); in device_listener_add()
229 void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id, in qdev_set_legacy_instance_id() argument
232 assert(!dev->realized); in qdev_set_legacy_instance_id()
233 dev->instance_id_alias = alias_id; in qdev_set_legacy_instance_id()
234 dev->alias_required_for_version = required_for_version; in qdev_set_legacy_instance_id()
237 void device_cold_reset(DeviceState *dev) in device_cold_reset() argument
239 resettable_reset(OBJECT(dev), RESET_TYPE_COLD); in device_cold_reset()
242 bool device_is_in_reset(DeviceState *dev) in device_is_in_reset() argument
244 return resettable_is_in_reset(OBJECT(dev)); in device_is_in_reset()
249 DeviceState *dev = DEVICE(obj); in device_get_reset_state() local
250 return &dev->reset; in device_get_reset_state()
256 DeviceState *dev = DEVICE(obj); in device_reset_child_foreach() local
259 QLIST_FOREACH(bus, &dev->child_bus, sibling) { in device_reset_child_foreach()
264 bool qdev_realize(DeviceState *dev, BusState *bus, Error **errp) in qdev_realize() argument
266 assert(!dev->realized && !dev->parent_bus); in qdev_realize()
269 if (!qdev_set_parent_bus(dev, bus, errp)) { in qdev_realize()
273 assert(!DEVICE_GET_CLASS(dev)->bus_type); in qdev_realize()
276 return object_property_set_bool(OBJECT(dev), "realized", true, errp); in qdev_realize()
279 bool qdev_realize_and_unref(DeviceState *dev, BusState *bus, Error **errp) in qdev_realize_and_unref() argument
283 ret = qdev_realize(dev, bus, errp); in qdev_realize_and_unref()
284 object_unref(OBJECT(dev)); in qdev_realize_and_unref()
288 void qdev_unrealize(DeviceState *dev) in qdev_unrealize() argument
290 object_property_set_bool(OBJECT(dev), "realized", false, &error_abort); in qdev_unrealize()
295 DeviceState *dev = DEVICE(object_dynamic_cast(obj, TYPE_DEVICE)); in qdev_assert_realized_properly_cb() local
298 if (dev) { in qdev_assert_realized_properly_cb()
299 dc = DEVICE_GET_CLASS(dev); in qdev_assert_realized_properly_cb()
300 assert(dev->realized); in qdev_assert_realized_properly_cb()
301 assert(dev->parent_bus || !dc->bus_type); in qdev_assert_realized_properly_cb()
317 BusState *qdev_get_parent_bus(const DeviceState *dev) in qdev_get_parent_bus() argument
319 return dev->parent_bus; in qdev_get_parent_bus()
322 BusState *qdev_get_child_bus(DeviceState *dev, const char *name) in qdev_get_child_bus() argument
325 Object *child = object_resolve_path_component(OBJECT(dev), name); in qdev_get_child_bus()
332 QLIST_FOREACH(bus, &dev->child_bus, sibling) { in qdev_get_child_bus()
340 int qdev_walk_children(DeviceState *dev, in qdev_walk_children() argument
349 err = pre_devfn(dev, opaque); in qdev_walk_children()
355 QLIST_FOREACH(bus, &dev->child_bus, sibling) { in qdev_walk_children()
364 err = post_devfn(dev, opaque); in qdev_walk_children()
381 DeviceState *dev = kid->child; in qdev_find_recursive() local
383 if (dev->id && strcmp(dev->id, id) == 0) { in qdev_find_recursive()
384 return dev; in qdev_find_recursive()
387 QLIST_FOREACH(child, &dev->child_bus, sibling) { in qdev_find_recursive()
398 char *qdev_get_dev_path(DeviceState *dev) in qdev_get_dev_path() argument
402 if (!dev || !dev->parent_bus) { in qdev_get_dev_path()
406 bc = BUS_GET_CLASS(dev->parent_bus); in qdev_get_dev_path()
408 return bc->get_dev_path(dev); in qdev_get_dev_path()
414 void qdev_add_unplug_blocker(DeviceState *dev, Error *reason) in qdev_add_unplug_blocker() argument
416 dev->unplug_blockers = g_slist_prepend(dev->unplug_blockers, reason); in qdev_add_unplug_blocker()
419 void qdev_del_unplug_blocker(DeviceState *dev, Error *reason) in qdev_del_unplug_blocker() argument
421 dev->unplug_blockers = g_slist_remove(dev->unplug_blockers, reason); in qdev_del_unplug_blocker()
424 bool qdev_unplug_blocked(DeviceState *dev, Error **errp) in qdev_unplug_blocked() argument
426 if (dev->unplug_blockers) { in qdev_unplug_blocked()
427 error_propagate(errp, error_copy(dev->unplug_blockers->data)); in qdev_unplug_blocked()
436 DeviceState *dev = DEVICE(obj); in device_get_realized() local
437 return dev->realized; in device_get_realized()
456 DeviceState *dev = DEVICE(obj); in device_set_realized() local
457 DeviceClass *dc = DEVICE_GET_CLASS(dev); in device_set_realized()
465 if (dev->hotplugged && !dc->hotpluggable) { in device_set_realized()
471 if (value && !dev->realized) { in device_set_realized()
485 hotplug_ctrl = qdev_get_hotplug_handler(dev); in device_set_realized()
487 hotplug_handler_pre_plug(hotplug_ctrl, dev, &local_err); in device_set_realized()
494 dc->realize(dev, &local_err); in device_set_realized()
500 DEVICE_LISTENER_CALL(realize, Forward, dev); in device_set_realized()
506 g_free(dev->canonical_path); in device_set_realized()
507 dev->canonical_path = object_get_canonical_path(OBJECT(dev)); in device_set_realized()
508 QLIST_FOREACH(ncl, &dev->clocks, node) { in device_set_realized()
516 if (qdev_get_vmsd(dev)) { in device_set_realized()
517 if (vmstate_register_with_alias_id(VMSTATE_IF(dev), in device_set_realized()
519 qdev_get_vmsd(dev), dev, in device_set_realized()
520 dev->instance_id_alias, in device_set_realized()
521 dev->alias_required_for_version, in device_set_realized()
531 resettable_state_clear(&dev->reset); in device_set_realized()
533 QLIST_FOREACH(bus, &dev->child_bus, sibling) { in device_set_realized()
538 if (dev->hotplugged) { in device_set_realized()
543 resettable_assert_reset(OBJECT(dev), RESET_TYPE_COLD); in device_set_realized()
544 resettable_change_parent(OBJECT(dev), OBJECT(dev->parent_bus), in device_set_realized()
546 resettable_release_reset(OBJECT(dev), RESET_TYPE_COLD); in device_set_realized()
548 dev->pending_deleted_event = false; in device_set_realized()
551 hotplug_handler_plug(hotplug_ctrl, dev, &local_err); in device_set_realized()
557 qatomic_store_release(&dev->realized, value); in device_set_realized()
559 } else if (!value && dev->realized) { in device_set_realized()
569 qatomic_set(&dev->realized, value); in device_set_realized()
576 QLIST_FOREACH(bus, &dev->child_bus, sibling) { in device_set_realized()
579 if (qdev_get_vmsd(dev)) { in device_set_realized()
580 vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev); in device_set_realized()
583 dc->unrealize(dev); in device_set_realized()
585 dev->pending_deleted_event = true; in device_set_realized()
586 DEVICE_LISTENER_CALL(unrealize, Reverse, dev); in device_set_realized()
593 QLIST_FOREACH(bus, &dev->child_bus, sibling) { in device_set_realized()
597 if (qdev_get_vmsd(dev)) { in device_set_realized()
598 vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev); in device_set_realized()
602 g_free(dev->canonical_path); in device_set_realized()
603 dev->canonical_path = NULL; in device_set_realized()
605 dc->unrealize(dev); in device_set_realized()
615 object_unparent(OBJECT(dev)); in device_set_realized()
623 DeviceState *dev = DEVICE(obj); in device_get_hotpluggable() local
625 return dc->hotpluggable && (dev->parent_bus == NULL || in device_get_hotpluggable()
626 qbus_is_hotpluggable(dev->parent_bus)); in device_get_hotpluggable()
631 DeviceState *dev = DEVICE(obj); in device_get_hotplugged() local
633 return dev->hotplugged; in device_get_hotplugged()
638 DeviceState *dev = DEVICE(obj); in device_initfn() local
641 dev->hotplugged = 1; in device_initfn()
645 dev->instance_id_alias = -1; in device_initfn()
646 dev->realized = false; in device_initfn()
647 dev->allow_unplug_during_migration = false; in device_initfn()
649 QLIST_INIT(&dev->gpios); in device_initfn()
650 QLIST_INIT(&dev->clocks); in device_initfn()
668 DeviceState *dev = DEVICE(obj); in device_finalize() local
670 g_assert(!dev->unplug_blockers); in device_finalize()
672 QLIST_FOREACH_SAFE(ngl, &dev->gpios, node, next) { in device_finalize()
682 qdev_finalize_clocklist(dev); in device_finalize()
685 if (dev->pending_deleted_event) { in device_finalize()
686 g_assert(dev->canonical_path); in device_finalize()
688 qapi_event_send_device_deleted(dev->id, dev->canonical_path); in device_finalize()
689 g_free(dev->canonical_path); in device_finalize()
690 dev->canonical_path = NULL; in device_finalize()
693 g_free(dev->id); in device_finalize()
709 DeviceState *dev = DEVICE(obj); in device_unparent() local
712 if (dev->realized) { in device_unparent()
713 qdev_unrealize(dev); in device_unparent()
715 while (dev->num_child_bus) { in device_unparent()
716 bus = QLIST_FIRST(&dev->child_bus); in device_unparent()
719 if (dev->parent_bus) { in device_unparent()
720 bus_remove_child(dev->parent_bus, dev); in device_unparent()
721 object_unref(OBJECT(dev->parent_bus)); in device_unparent()
722 dev->parent_bus = NULL; in device_unparent()
729 DeviceState *dev = DEVICE(obj); in device_vmstate_if_get_id() local
731 return qdev_get_dev_path(dev); in device_vmstate_if_get_id()
816 static Object *dev; in qdev_get_machine() local
818 if (dev == NULL) { in qdev_get_machine()
819 dev = object_resolve_path_component(object_get_root(), "machine"); in qdev_get_machine()
824 assert(dev); in qdev_get_machine()
827 return dev; in qdev_get_machine()
841 char *qdev_get_human_name(DeviceState *dev) in qdev_get_human_name() argument
843 g_assert(dev != NULL); in qdev_get_human_name()
845 return dev->id ? in qdev_get_human_name()
846 g_strdup(dev->id) : object_get_canonical_path(OBJECT(dev)); in qdev_get_human_name()