Lines Matching +full:dc +full:- +full:id

28 #include "qapi/qapi-commands-qdev.h"
33 #include "qapi/qobject-input-visitor.h"
34 #include "qemu/config-file.h"
35 #include "qemu/error-report.h"
38 #include "qemu/qemu-print.h"
40 #include "sysemu/block-backend.h"
43 #include "hw/qdev-properties.h"
76 { "AC97", "ac97" }, /* -soundhw name */
77 { "e1000", "e1000-82540em" },
78 { "ES1370", "es1370" }, /* -soundhw name */
79 { "ich9-ahci", "ahci" },
81 { "virtio-9p-device", "virtio-9p", QEMU_ARCH_VIRTIO_MMIO },
82 { "virtio-9p-ccw", "virtio-9p", QEMU_ARCH_VIRTIO_CCW },
83 { "virtio-9p-pci", "virtio-9p", QEMU_ARCH_VIRTIO_PCI },
84 { "virtio-balloon-device", "virtio-balloon", QEMU_ARCH_VIRTIO_MMIO },
85 { "virtio-balloon-ccw", "virtio-balloon", QEMU_ARCH_VIRTIO_CCW },
86 { "virtio-balloon-pci", "virtio-balloon", QEMU_ARCH_VIRTIO_PCI },
87 { "virtio-blk-device", "virtio-blk", QEMU_ARCH_VIRTIO_MMIO },
88 { "virtio-blk-ccw", "virtio-blk", QEMU_ARCH_VIRTIO_CCW },
89 { "virtio-blk-pci", "virtio-blk", QEMU_ARCH_VIRTIO_PCI },
90 { "virtio-gpu-device", "virtio-gpu", QEMU_ARCH_VIRTIO_MMIO },
91 { "virtio-gpu-ccw", "virtio-gpu", QEMU_ARCH_VIRTIO_CCW },
92 { "virtio-gpu-pci", "virtio-gpu", QEMU_ARCH_VIRTIO_PCI },
93 { "virtio-gpu-gl-device", "virtio-gpu-gl", QEMU_ARCH_VIRTIO_MMIO },
94 { "virtio-gpu-gl-pci", "virtio-gpu-gl", QEMU_ARCH_VIRTIO_PCI },
95 { "virtio-gpu-rutabaga-device", "virtio-gpu-rutabaga",
97 { "virtio-gpu-rutabaga-pci", "virtio-gpu-rutabaga", QEMU_ARCH_VIRTIO_PCI },
98 { "virtio-input-host-device", "virtio-input-host", QEMU_ARCH_VIRTIO_MMIO },
99 { "virtio-input-host-ccw", "virtio-input-host", QEMU_ARCH_VIRTIO_CCW },
100 { "virtio-input-host-pci", "virtio-input-host", QEMU_ARCH_VIRTIO_PCI },
101 { "virtio-iommu-pci", "virtio-iommu", QEMU_ARCH_VIRTIO_PCI },
102 { "virtio-keyboard-device", "virtio-keyboard", QEMU_ARCH_VIRTIO_MMIO },
103 { "virtio-keyboard-ccw", "virtio-keyboard", QEMU_ARCH_VIRTIO_CCW },
104 { "virtio-keyboard-pci", "virtio-keyboard", QEMU_ARCH_VIRTIO_PCI },
105 { "virtio-mouse-device", "virtio-mouse", QEMU_ARCH_VIRTIO_MMIO },
106 { "virtio-mouse-ccw", "virtio-mouse", QEMU_ARCH_VIRTIO_CCW },
107 { "virtio-mouse-pci", "virtio-mouse", QEMU_ARCH_VIRTIO_PCI },
108 { "virtio-net-device", "virtio-net", QEMU_ARCH_VIRTIO_MMIO },
109 { "virtio-net-ccw", "virtio-net", QEMU_ARCH_VIRTIO_CCW },
110 { "virtio-net-pci", "virtio-net", QEMU_ARCH_VIRTIO_PCI },
111 { "virtio-rng-device", "virtio-rng", QEMU_ARCH_VIRTIO_MMIO },
112 { "virtio-rng-ccw", "virtio-rng", QEMU_ARCH_VIRTIO_CCW },
113 { "virtio-rng-pci", "virtio-rng", QEMU_ARCH_VIRTIO_PCI },
114 { "virtio-scsi-device", "virtio-scsi", QEMU_ARCH_VIRTIO_MMIO },
115 { "virtio-scsi-ccw", "virtio-scsi", QEMU_ARCH_VIRTIO_CCW },
116 { "virtio-scsi-pci", "virtio-scsi", QEMU_ARCH_VIRTIO_PCI },
117 { "virtio-serial-device", "virtio-serial", QEMU_ARCH_VIRTIO_MMIO },
118 { "virtio-serial-ccw", "virtio-serial", QEMU_ARCH_VIRTIO_CCW },
119 { "virtio-serial-pci", "virtio-serial", QEMU_ARCH_VIRTIO_PCI},
120 { "virtio-sound-device", "virtio-sound", QEMU_ARCH_VIRTIO_MMIO },
121 { "virtio-sound-pci", "virtio-sound", QEMU_ARCH_VIRTIO_PCI },
122 { "virtio-tablet-device", "virtio-tablet", QEMU_ARCH_VIRTIO_MMIO },
123 { "virtio-tablet-ccw", "virtio-tablet", QEMU_ARCH_VIRTIO_CCW },
124 { "virtio-tablet-pci", "virtio-tablet", QEMU_ARCH_VIRTIO_PCI },
128 static const char *qdev_class_get_alias(DeviceClass *dc) in qdev_class_get_alias() argument
130 const char *typename = object_class_get_name(OBJECT_CLASS(dc)); in qdev_class_get_alias()
147 static bool qdev_class_has_alias(DeviceClass *dc) in qdev_class_has_alias() argument
149 return (qdev_class_get_alias(dc) != NULL); in qdev_class_has_alias()
152 static void qdev_print_devinfo(DeviceClass *dc) in qdev_print_devinfo() argument
154 qemu_printf("name \"%s\"", object_class_get_name(OBJECT_CLASS(dc))); in qdev_print_devinfo()
155 if (dc->bus_type) { in qdev_print_devinfo()
156 qemu_printf(", bus %s", dc->bus_type); in qdev_print_devinfo()
158 if (qdev_class_has_alias(dc)) { in qdev_print_devinfo()
159 qemu_printf(", alias \"%s\"", qdev_class_get_alias(dc)); in qdev_print_devinfo()
161 if (dc->desc) { in qdev_print_devinfo()
162 qemu_printf(", desc \"%s\"", dc->desc); in qdev_print_devinfo()
164 if (!dc->user_creatable) { in qdev_print_devinfo()
165 qemu_printf(", no-user"); in qdev_print_devinfo()
194 for (elt = list; elt; elt = elt->next) { in qdev_print_devinfos()
195 DeviceClass *dc = OBJECT_CLASS_CHECK(DeviceClass, elt->data, in qdev_print_devinfos() local
198 ? !test_bit(i, dc->categories) in qdev_print_devinfos()
199 : !bitmap_empty(dc->categories, DEVICE_CATEGORY_MAX)) in qdev_print_devinfos()
201 && !dc->user_creatable)) { in qdev_print_devinfos()
208 qdev_print_devinfo(dc); in qdev_print_devinfos()
236 DeviceClass *dc; in qdev_get_device_class() local
261 "a non-abstract device type"); in qdev_get_device_class()
265 dc = DEVICE_CLASS(oc); in qdev_get_device_class()
266 if (!dc->user_creatable || in qdev_get_device_class()
267 (phase_check(PHASE_MACHINE_READY) && !dc->hotpluggable)) { in qdev_get_device_class()
283 return dc; in qdev_get_device_class()
325 for (prop = prop_list; prop; prop = prop->next) { in qdev_device_help()
327 object_property_help(prop->value->name, in qdev_device_help()
328 prop->value->type, in qdev_device_help()
329 prop->value->default_value, in qdev_device_help()
330 prop->value->description)); in qdev_device_help()
333 for (i = 0; i < array->len; i++) { in qdev_device_help()
334 qemu_printf("%s\n", (char *)array->pdata[i]); in qdev_device_help()
362 dev = container_get(qdev_get_machine(), "/peripheral-anon"); in qdev_get_peripheral_anon()
375 dev->id ? dev->id : object_get_typename(OBJECT(dev))); in qbus_error_append_bus_list_hint()
376 QLIST_FOREACH(child, &dev->child_bus, sibling) { in qbus_error_append_bus_list_hint()
377 error_append_hint(errp, "%s\"%s\"", sep, child->name); in qbus_error_append_bus_list_hint()
389 error_append_hint(errp, "devices at \"%s\":", bus->name); in qbus_error_append_dev_list_hint()
390 QTAILQ_FOREACH(kid, &bus->children, sibling) { in qbus_error_append_dev_list_hint()
391 DeviceState *dev = kid->child; in qbus_error_append_dev_list_hint()
394 if (dev->id) { in qbus_error_append_dev_list_hint()
395 error_append_hint(errp, "/\"%s\"", dev->id); in qbus_error_append_dev_list_hint()
406 QLIST_FOREACH(child, &dev->child_bus, sibling) { in qbus_find_bus()
407 if (strcmp(child->name, elem) == 0) { in qbus_find_bus()
420 * (1) instance id, if present in qbus_find_dev()
424 QTAILQ_FOREACH(kid, &bus->children, sibling) { in qbus_find_dev()
425 DeviceState *dev = kid->child; in qbus_find_dev()
426 if (dev->id && strcmp(dev->id, elem) == 0) { in qbus_find_dev()
430 QTAILQ_FOREACH(kid, &bus->children, sibling) { in qbus_find_dev()
431 DeviceState *dev = kid->child; in qbus_find_dev()
436 QTAILQ_FOREACH(kid, &bus->children, sibling) { in qbus_find_dev()
437 DeviceState *dev = kid->child; in qbus_find_dev()
438 DeviceClass *dc = DEVICE_GET_CLASS(dev); in qbus_find_dev() local
440 if (qdev_class_has_alias(dc) && in qbus_find_dev()
441 strcmp(qdev_class_get_alias(dc), elem) == 0) { in qbus_find_dev()
452 if (bus->full) { in qbus_is_full()
456 return bus_class->max_dev && bus->num_children >= bus_class->max_dev; in qbus_is_full()
476 match = !strcmp(bus->name, name); in qbus_find_recursive()
487 QTAILQ_FOREACH(kid, &bus->children, sibling) { in qbus_find_recursive()
488 DeviceState *dev = kid->child; in qbus_find_recursive()
489 QLIST_FOREACH(child, &dev->child_bus, sibling) { in qbus_find_recursive()
558 if (dev->num_child_bus == 1) { in qbus_find()
559 bus = QLIST_FIRST(&dev->child_bus); in qbus_find()
562 if (dev->num_child_bus) { in qbus_find()
593 /* Takes ownership of @id, will be freed when deleting the device */
594 const char *qdev_set_id(DeviceState *dev, char *id, Error **errp) in qdev_set_id() argument
598 assert(!dev->id && !dev->realized); in qdev_set_id()
604 if (id) { in qdev_set_id()
605 prop = object_property_try_add_child(qdev_get_peripheral(), id, in qdev_set_id()
608 dev->id = id; in qdev_set_id()
610 error_setg(errp, "Duplicate device ID '%s'", id); in qdev_set_id()
611 g_free(id); in qdev_set_id()
622 return prop->name; in qdev_set_id()
629 DeviceClass *dc; in qdev_device_add_from_qdict() local
631 char *id; in qdev_device_add_from_qdict() local
642 dc = qdev_get_device_class(&driver, errp); in qdev_device_add_from_qdict()
643 if (!dc) { in qdev_device_add_from_qdict()
654 if (!object_dynamic_cast(OBJECT(bus), dc->bus_type)) { in qdev_device_add_from_qdict()
659 } else if (dc->bus_type != NULL) { in qdev_device_add_from_qdict()
660 bus = qbus_find_recursive(sysbus_get_default(), NULL, dc->bus_type); in qdev_device_add_from_qdict()
663 dc->bus_type, driver); in qdev_device_add_from_qdict()
671 bus->name); in qdev_device_add_from_qdict()
679 error_setg(errp, "Bus '%s' does not support hotplugging", bus->name); in qdev_device_add_from_qdict()
698 /* No bus, no machine hotplug handler --> device is not hotpluggable */ in qdev_device_add_from_qdict()
706 * set dev's parent and register its id. in qdev_device_add_from_qdict()
707 * If it fails it means the id is already taken. in qdev_device_add_from_qdict()
709 id = g_strdup(qdict_get_try_str(opts, "id")); in qdev_device_add_from_qdict()
710 if (!qdev_set_id(dev, id, errp)) { in qdev_device_add_from_qdict()
715 dev->opts = qdict_clone_shallow(opts); in qdev_device_add_from_qdict()
716 qdict_del(dev->opts, "driver"); in qdev_device_add_from_qdict()
717 qdict_del(dev->opts, "bus"); in qdev_device_add_from_qdict()
718 qdict_del(dev->opts, "id"); in qdev_device_add_from_qdict()
720 object_set_properties_from_keyval(&dev->parent_obj, dev->opts, from_json, in qdev_device_add_from_qdict()
760 for (; props->name; props++) { in qdev_print_props()
762 char *legacy_name = g_strdup_printf("legacy-%s", props->name); in qdev_print_props()
767 value = object_property_print(OBJECT(dev), props->name, true, in qdev_print_props()
775 qdev_printf("%s = %s\n", props->name, in qdev_print_props()
785 if (bc->print_dev) { in bus_print_dev()
786 bc->print_dev(mon, dev, indent); in bus_print_dev()
796 QLIST_FOREACH(ngl, &dev->gpios, node) { in qdev_print()
797 if (ngl->num_in) { in qdev_print()
798 qdev_printf("gpio-in \"%s\" %d\n", ngl->name ? ngl->name : "", in qdev_print()
799 ngl->num_in); in qdev_print()
801 if (ngl->num_out) { in qdev_print()
802 qdev_printf("gpio-out \"%s\" %d\n", ngl->name ? ngl->name : "", in qdev_print()
803 ngl->num_out); in qdev_print()
806 QLIST_FOREACH(ncl, &dev->clocks, node) { in qdev_print()
807 g_autofree char *freq_str = clock_display_freq(ncl->clock); in qdev_print()
808 qdev_printf("clock-%s%s \"%s\" freq_hz=%s\n", in qdev_print()
809 ncl->output ? "out" : "in", in qdev_print()
810 ncl->alias ? " (alias)" : "", in qdev_print()
811 ncl->name, freq_str); in qdev_print()
815 qdev_print_props(mon, dev, DEVICE_CLASS(class)->props_, indent); in qdev_print()
818 bus_print_dev(dev->parent_bus, mon, dev, indent); in qdev_print()
825 qdev_printf("bus: %s\n", bus->name); in qbus_print()
828 QTAILQ_FOREACH(kid, &bus->children, sibling) { in qbus_print()
830 DeviceState *dev = kid->child; in qbus_print()
831 qdev_printf("dev: %s, id \"%s\"\n", object_get_typename(OBJECT(dev)), in qbus_print()
832 dev->id ? dev->id : ""); in qbus_print()
836 QLIST_FOREACH(child_bus, &dev->child_bus, sibling) { in qbus_print()
881 static DeviceState *find_device_state(const char *id, bool use_generic_error, in find_device_state() argument
884 Object *obj = object_resolve_path_at(qdev_get_peripheral(), id); in find_device_state()
891 "Device '%s' not found", id); in find_device_state()
897 error_setg(errp, "%s is not a device", id); in find_device_state()
906 DeviceClass *dc = DEVICE_GET_CLASS(dev); in qdev_unplug() local
915 if (dev->parent_bus && !qbus_is_hotpluggable(dev->parent_bus)) { in qdev_unplug()
917 dev->parent_bus->name); in qdev_unplug()
921 if (!dc->hotpluggable) { in qdev_unplug()
927 if (migration_is_running() && !dev->allow_unplug_during_migration) { in qdev_unplug()
942 if (hdc->unplug_request) { in qdev_unplug()
953 void qmp_device_del(const char *id, Error **errp) in qmp_device_del() argument
955 DeviceState *dev = find_device_state(id, false, errp); in qmp_device_del()
957 if (dev->pending_deleted_event && in qmp_device_del()
958 (dev->pending_deleted_expires_ms == 0 || in qmp_device_del()
959 dev->pending_deleted_expires_ms > qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL))) { in qmp_device_del()
961 "process of unplug", id); in qmp_device_del()
971 DeviceClass *dc = DEVICE_GET_CLASS(dev); in qdev_sync_config() local
973 if (!dc->sync_config) { in qdev_sync_config()
974 error_setg(errp, "device-sync-config is not supported for '%s'", in qdev_sync_config()
976 return -ENOTSUP; in qdev_sync_config()
979 return dc->sync_config(dev, errp); in qdev_sync_config()
982 void qmp_device_sync_config(const char *id, Error **errp) in qmp_device_sync_config() argument
998 dev = find_device_state(id, true, errp); in qmp_device_sync_config()
1042 const char *id = qdict_get_str(qdict, "id"); in hmp_device_del() local
1045 qmp_device_del(id, &err); in hmp_device_del()
1062 DeviceClass *dc = OBJECT_CLASS_CHECK(DeviceClass, elt->data, in device_add_completion() local
1065 if (dc->user_creatable) { in device_add_completion()
1067 object_class_get_name(OBJECT_CLASS(dc))); in device_add_completion()
1069 elt = elt->next; in device_add_completion()
1083 if (dev->realized && object_property_get_bool(obj, "hotpluggable", NULL)) { in qdev_add_hotpluggable_device()
1111 DeviceState *dev = item->data; in peripheral_device_del_completion()
1113 if (dev->id) { in peripheral_device_del_completion()
1114 readline_add_completion_of(rs, str, dev->id); in peripheral_device_del_completion()
1131 BlockBackend *blk_by_qdev_id(const char *id, Error **errp) in blk_by_qdev_id() argument
1138 dev = find_device_state(id, false, errp); in blk_by_qdev_id()
1199 return -1; in qemu_global_option()
1206 return -1; in qemu_global_option()
1215 !(cmd->options & QCO_ALLOW_PRECONFIG)) { in qmp_command_available()
1217 cmd->name); in qmp_command_available()