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.1 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 "qapi/error.h" 30 #include "qapi/qapi-events-qdev.h" 31 #include "qapi/qmp/qdict.h" 32 #include "qapi/qmp/qerror.h" 33 #include "qapi/visitor.h" 34 #include "qemu/error-report.h" 35 #include "qemu/option.h" 36 #include "hw/hotplug.h" 37 #include "hw/irq.h" 38 #include "hw/qdev-properties.h" 39 #include "hw/boards.h" 40 #include "hw/sysbus.h" 41 #include "hw/qdev-clock.h" 42 #include "migration/vmstate.h" 43 #include "trace.h" 44 45 static bool qdev_hot_added = false; 46 bool qdev_hot_removed = false; 47 48 const VMStateDescription *qdev_get_vmsd(DeviceState *dev) 49 { 50 DeviceClass *dc = DEVICE_GET_CLASS(dev); 51 return dc->vmsd; 52 } 53 54 static void bus_free_bus_child(BusChild *kid) 55 { 56 object_unref(OBJECT(kid->child)); 57 g_free(kid); 58 } 59 60 static void bus_remove_child(BusState *bus, DeviceState *child) 61 { 62 BusChild *kid; 63 64 QTAILQ_FOREACH(kid, &bus->children, sibling) { 65 if (kid->child == child) { 66 char name[32]; 67 68 snprintf(name, sizeof(name), "child[%d]", kid->index); 69 QTAILQ_REMOVE_RCU(&bus->children, kid, sibling); 70 71 bus->num_children--; 72 73 /* This gives back ownership of kid->child back to us. */ 74 object_property_del(OBJECT(bus), name); 75 76 /* free the bus kid, when it is safe to do so*/ 77 call_rcu(kid, bus_free_bus_child, rcu); 78 break; 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 bus->num_children++; 89 kid->index = bus->max_index++; 90 kid->child = child; 91 object_ref(OBJECT(kid->child)); 92 93 QTAILQ_INSERT_HEAD_RCU(&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); 102 } 103 104 static bool bus_check_address(BusState *bus, DeviceState *child, Error **errp) 105 { 106 BusClass *bc = BUS_GET_CLASS(bus); 107 return !bc->check_address || bc->check_address(bus, child, errp); 108 } 109 110 bool qdev_set_parent_bus(DeviceState *dev, BusState *bus, Error **errp) 111 { 112 BusState *old_parent_bus = dev->parent_bus; 113 DeviceClass *dc = DEVICE_GET_CLASS(dev); 114 115 assert(dc->bus_type && object_dynamic_cast(OBJECT(bus), dc->bus_type)); 116 117 if (!bus_check_address(bus, dev, errp)) { 118 return false; 119 } 120 121 if (old_parent_bus) { 122 trace_qdev_update_parent_bus(dev, object_get_typename(OBJECT(dev)), 123 old_parent_bus, object_get_typename(OBJECT(old_parent_bus)), 124 OBJECT(bus), object_get_typename(OBJECT(bus))); 125 /* 126 * Keep a reference to the device while it's not plugged into 127 * any bus, to avoid it potentially evaporating when it is 128 * dereffed in bus_remove_child(). 129 * Also keep the ref of the parent bus until the end, so that 130 * we can safely call resettable_change_parent() below. 131 */ 132 object_ref(OBJECT(dev)); 133 bus_remove_child(dev->parent_bus, dev); 134 } 135 dev->parent_bus = bus; 136 object_ref(OBJECT(bus)); 137 bus_add_child(bus, dev); 138 if (dev->realized) { 139 resettable_change_parent(OBJECT(dev), OBJECT(bus), 140 OBJECT(old_parent_bus)); 141 } 142 if (old_parent_bus) { 143 object_unref(OBJECT(old_parent_bus)); 144 object_unref(OBJECT(dev)); 145 } 146 return true; 147 } 148 149 DeviceState *qdev_new(const char *name) 150 { 151 if (!object_class_by_name(name)) { 152 module_load_qom_one(name); 153 } 154 return DEVICE(object_new(name)); 155 } 156 157 DeviceState *qdev_try_new(const char *name) 158 { 159 if (!module_object_class_by_name(name)) { 160 return NULL; 161 } 162 return DEVICE(object_new(name)); 163 } 164 165 static QTAILQ_HEAD(, DeviceListener) device_listeners 166 = QTAILQ_HEAD_INITIALIZER(device_listeners); 167 168 enum ListenerDirection { Forward, Reverse }; 169 170 #define DEVICE_LISTENER_CALL(_callback, _direction, _args...) \ 171 do { \ 172 DeviceListener *_listener; \ 173 \ 174 switch (_direction) { \ 175 case Forward: \ 176 QTAILQ_FOREACH(_listener, &device_listeners, link) { \ 177 if (_listener->_callback) { \ 178 _listener->_callback(_listener, ##_args); \ 179 } \ 180 } \ 181 break; \ 182 case Reverse: \ 183 QTAILQ_FOREACH_REVERSE(_listener, &device_listeners, \ 184 link) { \ 185 if (_listener->_callback) { \ 186 _listener->_callback(_listener, ##_args); \ 187 } \ 188 } \ 189 break; \ 190 default: \ 191 abort(); \ 192 } \ 193 } while (0) 194 195 static int device_listener_add(DeviceState *dev, void *opaque) 196 { 197 DEVICE_LISTENER_CALL(realize, Forward, dev); 198 199 return 0; 200 } 201 202 void device_listener_register(DeviceListener *listener) 203 { 204 QTAILQ_INSERT_TAIL(&device_listeners, listener, link); 205 206 qbus_walk_children(sysbus_get_default(), NULL, NULL, device_listener_add, 207 NULL, NULL); 208 } 209 210 void device_listener_unregister(DeviceListener *listener) 211 { 212 QTAILQ_REMOVE(&device_listeners, listener, link); 213 } 214 215 bool qdev_should_hide_device(const QDict *opts, bool from_json, Error **errp) 216 { 217 ERRP_GUARD(); 218 DeviceListener *listener; 219 220 QTAILQ_FOREACH(listener, &device_listeners, link) { 221 if (listener->hide_device) { 222 if (listener->hide_device(listener, opts, from_json, errp)) { 223 return true; 224 } else if (*errp) { 225 return false; 226 } 227 } 228 } 229 230 return false; 231 } 232 233 void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id, 234 int required_for_version) 235 { 236 assert(!dev->realized); 237 dev->instance_id_alias = alias_id; 238 dev->alias_required_for_version = required_for_version; 239 } 240 241 HotplugHandler *qdev_get_machine_hotplug_handler(DeviceState *dev) 242 { 243 MachineState *machine; 244 MachineClass *mc; 245 Object *m_obj = qdev_get_machine(); 246 247 if (object_dynamic_cast(m_obj, TYPE_MACHINE)) { 248 machine = MACHINE(m_obj); 249 mc = MACHINE_GET_CLASS(machine); 250 if (mc->get_hotplug_handler) { 251 return mc->get_hotplug_handler(machine, dev); 252 } 253 } 254 255 return NULL; 256 } 257 258 bool qdev_hotplug_allowed(DeviceState *dev, Error **errp) 259 { 260 MachineState *machine; 261 MachineClass *mc; 262 Object *m_obj = qdev_get_machine(); 263 264 if (object_dynamic_cast(m_obj, TYPE_MACHINE)) { 265 machine = MACHINE(m_obj); 266 mc = MACHINE_GET_CLASS(machine); 267 if (mc->hotplug_allowed) { 268 return mc->hotplug_allowed(machine, dev, errp); 269 } 270 } 271 272 return true; 273 } 274 275 HotplugHandler *qdev_get_bus_hotplug_handler(DeviceState *dev) 276 { 277 if (dev->parent_bus) { 278 return dev->parent_bus->hotplug_handler; 279 } 280 return NULL; 281 } 282 283 HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev) 284 { 285 HotplugHandler *hotplug_ctrl = qdev_get_machine_hotplug_handler(dev); 286 287 if (hotplug_ctrl == NULL && dev->parent_bus) { 288 hotplug_ctrl = qdev_get_bus_hotplug_handler(dev); 289 } 290 return hotplug_ctrl; 291 } 292 293 static int qdev_prereset(DeviceState *dev, void *opaque) 294 { 295 trace_qdev_reset_tree(dev, object_get_typename(OBJECT(dev))); 296 return 0; 297 } 298 299 static int qbus_prereset(BusState *bus, void *opaque) 300 { 301 trace_qbus_reset_tree(bus, object_get_typename(OBJECT(bus))); 302 return 0; 303 } 304 305 static int qdev_reset_one(DeviceState *dev, void *opaque) 306 { 307 device_legacy_reset(dev); 308 309 return 0; 310 } 311 312 static int qbus_reset_one(BusState *bus, void *opaque) 313 { 314 BusClass *bc = BUS_GET_CLASS(bus); 315 trace_qbus_reset(bus, object_get_typename(OBJECT(bus))); 316 if (bc->reset) { 317 bc->reset(bus); 318 } 319 return 0; 320 } 321 322 void qdev_reset_all(DeviceState *dev) 323 { 324 trace_qdev_reset_all(dev, object_get_typename(OBJECT(dev))); 325 qdev_walk_children(dev, qdev_prereset, qbus_prereset, 326 qdev_reset_one, qbus_reset_one, NULL); 327 } 328 329 void qdev_reset_all_fn(void *opaque) 330 { 331 qdev_reset_all(DEVICE(opaque)); 332 } 333 334 void qbus_reset_all(BusState *bus) 335 { 336 trace_qbus_reset_all(bus, object_get_typename(OBJECT(bus))); 337 qbus_walk_children(bus, qdev_prereset, qbus_prereset, 338 qdev_reset_one, qbus_reset_one, NULL); 339 } 340 341 void qbus_reset_all_fn(void *opaque) 342 { 343 BusState *bus = opaque; 344 qbus_reset_all(bus); 345 } 346 347 void device_cold_reset(DeviceState *dev) 348 { 349 resettable_reset(OBJECT(dev), RESET_TYPE_COLD); 350 } 351 352 bool device_is_in_reset(DeviceState *dev) 353 { 354 return resettable_is_in_reset(OBJECT(dev)); 355 } 356 357 static ResettableState *device_get_reset_state(Object *obj) 358 { 359 DeviceState *dev = DEVICE(obj); 360 return &dev->reset; 361 } 362 363 static void device_reset_child_foreach(Object *obj, ResettableChildCallback cb, 364 void *opaque, ResetType type) 365 { 366 DeviceState *dev = DEVICE(obj); 367 BusState *bus; 368 369 QLIST_FOREACH(bus, &dev->child_bus, sibling) { 370 cb(OBJECT(bus), opaque, type); 371 } 372 } 373 374 /* can be used as ->unplug() callback for the simple cases */ 375 void qdev_simple_device_unplug_cb(HotplugHandler *hotplug_dev, 376 DeviceState *dev, Error **errp) 377 { 378 qdev_unrealize(dev); 379 } 380 381 bool qdev_realize(DeviceState *dev, BusState *bus, Error **errp) 382 { 383 assert(!dev->realized && !dev->parent_bus); 384 385 if (bus) { 386 if (!qdev_set_parent_bus(dev, bus, errp)) { 387 return false; 388 } 389 } else { 390 assert(!DEVICE_GET_CLASS(dev)->bus_type); 391 } 392 393 return object_property_set_bool(OBJECT(dev), "realized", true, errp); 394 } 395 396 bool qdev_realize_and_unref(DeviceState *dev, BusState *bus, Error **errp) 397 { 398 bool ret; 399 400 ret = qdev_realize(dev, bus, errp); 401 object_unref(OBJECT(dev)); 402 return ret; 403 } 404 405 void qdev_unrealize(DeviceState *dev) 406 { 407 object_property_set_bool(OBJECT(dev), "realized", false, &error_abort); 408 } 409 410 static int qdev_assert_realized_properly_cb(Object *obj, void *opaque) 411 { 412 DeviceState *dev = DEVICE(object_dynamic_cast(obj, TYPE_DEVICE)); 413 DeviceClass *dc; 414 415 if (dev) { 416 dc = DEVICE_GET_CLASS(dev); 417 assert(dev->realized); 418 assert(dev->parent_bus || !dc->bus_type); 419 } 420 return 0; 421 } 422 423 void qdev_assert_realized_properly(void) 424 { 425 object_child_foreach_recursive(object_get_root(), 426 qdev_assert_realized_properly_cb, NULL); 427 } 428 429 bool qdev_machine_modified(void) 430 { 431 return qdev_hot_added || qdev_hot_removed; 432 } 433 434 BusState *qdev_get_parent_bus(DeviceState *dev) 435 { 436 return dev->parent_bus; 437 } 438 439 static NamedGPIOList *qdev_get_named_gpio_list(DeviceState *dev, 440 const char *name) 441 { 442 NamedGPIOList *ngl; 443 444 QLIST_FOREACH(ngl, &dev->gpios, node) { 445 /* NULL is a valid and matchable name. */ 446 if (g_strcmp0(name, ngl->name) == 0) { 447 return ngl; 448 } 449 } 450 451 ngl = g_malloc0(sizeof(*ngl)); 452 ngl->name = g_strdup(name); 453 QLIST_INSERT_HEAD(&dev->gpios, ngl, node); 454 return ngl; 455 } 456 457 void qdev_init_gpio_in_named_with_opaque(DeviceState *dev, 458 qemu_irq_handler handler, 459 void *opaque, 460 const char *name, int n) 461 { 462 int i; 463 NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name); 464 465 assert(gpio_list->num_out == 0 || !name); 466 gpio_list->in = qemu_extend_irqs(gpio_list->in, gpio_list->num_in, handler, 467 opaque, n); 468 469 if (!name) { 470 name = "unnamed-gpio-in"; 471 } 472 for (i = gpio_list->num_in; i < gpio_list->num_in + n; i++) { 473 gchar *propname = g_strdup_printf("%s[%u]", name, i); 474 475 object_property_add_child(OBJECT(dev), propname, 476 OBJECT(gpio_list->in[i])); 477 g_free(propname); 478 } 479 480 gpio_list->num_in += n; 481 } 482 483 void qdev_init_gpio_in(DeviceState *dev, qemu_irq_handler handler, int n) 484 { 485 qdev_init_gpio_in_named(dev, handler, NULL, n); 486 } 487 488 void qdev_init_gpio_out_named(DeviceState *dev, qemu_irq *pins, 489 const char *name, int n) 490 { 491 int i; 492 NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name); 493 494 assert(gpio_list->num_in == 0 || !name); 495 496 if (!name) { 497 name = "unnamed-gpio-out"; 498 } 499 memset(pins, 0, sizeof(*pins) * n); 500 for (i = 0; i < n; ++i) { 501 gchar *propname = g_strdup_printf("%s[%u]", name, 502 gpio_list->num_out + i); 503 504 object_property_add_link(OBJECT(dev), propname, TYPE_IRQ, 505 (Object **)&pins[i], 506 object_property_allow_set_link, 507 OBJ_PROP_LINK_STRONG); 508 g_free(propname); 509 } 510 gpio_list->num_out += n; 511 } 512 513 void qdev_init_gpio_out(DeviceState *dev, qemu_irq *pins, int n) 514 { 515 qdev_init_gpio_out_named(dev, pins, NULL, n); 516 } 517 518 qemu_irq qdev_get_gpio_in_named(DeviceState *dev, const char *name, int n) 519 { 520 NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name); 521 522 assert(n >= 0 && n < gpio_list->num_in); 523 return gpio_list->in[n]; 524 } 525 526 qemu_irq qdev_get_gpio_in(DeviceState *dev, int n) 527 { 528 return qdev_get_gpio_in_named(dev, NULL, n); 529 } 530 531 void qdev_connect_gpio_out_named(DeviceState *dev, const char *name, int n, 532 qemu_irq pin) 533 { 534 char *propname = g_strdup_printf("%s[%d]", 535 name ? name : "unnamed-gpio-out", n); 536 if (pin && !OBJECT(pin)->parent) { 537 /* We need a name for object_property_set_link to work */ 538 object_property_add_child(container_get(qdev_get_machine(), 539 "/unattached"), 540 "non-qdev-gpio[*]", OBJECT(pin)); 541 } 542 object_property_set_link(OBJECT(dev), propname, OBJECT(pin), &error_abort); 543 g_free(propname); 544 } 545 546 qemu_irq qdev_get_gpio_out_connector(DeviceState *dev, const char *name, int n) 547 { 548 g_autofree char *propname = g_strdup_printf("%s[%d]", 549 name ? name : "unnamed-gpio-out", n); 550 551 qemu_irq ret = (qemu_irq)object_property_get_link(OBJECT(dev), propname, 552 NULL); 553 554 return ret; 555 } 556 557 /* disconnect a GPIO output, returning the disconnected input (if any) */ 558 559 static qemu_irq qdev_disconnect_gpio_out_named(DeviceState *dev, 560 const char *name, int n) 561 { 562 char *propname = g_strdup_printf("%s[%d]", 563 name ? name : "unnamed-gpio-out", n); 564 565 qemu_irq ret = (qemu_irq)object_property_get_link(OBJECT(dev), propname, 566 NULL); 567 if (ret) { 568 object_property_set_link(OBJECT(dev), propname, NULL, NULL); 569 } 570 g_free(propname); 571 return ret; 572 } 573 574 qemu_irq qdev_intercept_gpio_out(DeviceState *dev, qemu_irq icpt, 575 const char *name, int n) 576 { 577 qemu_irq disconnected = qdev_disconnect_gpio_out_named(dev, name, n); 578 qdev_connect_gpio_out_named(dev, name, n, icpt); 579 return disconnected; 580 } 581 582 void qdev_connect_gpio_out(DeviceState * dev, int n, qemu_irq pin) 583 { 584 qdev_connect_gpio_out_named(dev, NULL, n, pin); 585 } 586 587 void qdev_pass_gpios(DeviceState *dev, DeviceState *container, 588 const char *name) 589 { 590 int i; 591 NamedGPIOList *ngl = qdev_get_named_gpio_list(dev, name); 592 593 for (i = 0; i < ngl->num_in; i++) { 594 const char *nm = ngl->name ? ngl->name : "unnamed-gpio-in"; 595 char *propname = g_strdup_printf("%s[%d]", nm, i); 596 597 object_property_add_alias(OBJECT(container), propname, 598 OBJECT(dev), propname); 599 g_free(propname); 600 } 601 for (i = 0; i < ngl->num_out; i++) { 602 const char *nm = ngl->name ? ngl->name : "unnamed-gpio-out"; 603 char *propname = g_strdup_printf("%s[%d]", nm, i); 604 605 object_property_add_alias(OBJECT(container), propname, 606 OBJECT(dev), propname); 607 g_free(propname); 608 } 609 QLIST_REMOVE(ngl, node); 610 QLIST_INSERT_HEAD(&container->gpios, ngl, node); 611 } 612 613 BusState *qdev_get_child_bus(DeviceState *dev, const char *name) 614 { 615 BusState *bus; 616 Object *child = object_resolve_path_component(OBJECT(dev), name); 617 618 bus = (BusState *)object_dynamic_cast(child, TYPE_BUS); 619 if (bus) { 620 return bus; 621 } 622 623 QLIST_FOREACH(bus, &dev->child_bus, sibling) { 624 if (strcmp(name, bus->name) == 0) { 625 return bus; 626 } 627 } 628 return NULL; 629 } 630 631 int qdev_walk_children(DeviceState *dev, 632 qdev_walkerfn *pre_devfn, qbus_walkerfn *pre_busfn, 633 qdev_walkerfn *post_devfn, qbus_walkerfn *post_busfn, 634 void *opaque) 635 { 636 BusState *bus; 637 int err; 638 639 if (pre_devfn) { 640 err = pre_devfn(dev, opaque); 641 if (err) { 642 return err; 643 } 644 } 645 646 QLIST_FOREACH(bus, &dev->child_bus, sibling) { 647 err = qbus_walk_children(bus, pre_devfn, pre_busfn, 648 post_devfn, post_busfn, opaque); 649 if (err < 0) { 650 return err; 651 } 652 } 653 654 if (post_devfn) { 655 err = post_devfn(dev, opaque); 656 if (err) { 657 return err; 658 } 659 } 660 661 return 0; 662 } 663 664 DeviceState *qdev_find_recursive(BusState *bus, const char *id) 665 { 666 BusChild *kid; 667 DeviceState *ret; 668 BusState *child; 669 670 WITH_RCU_READ_LOCK_GUARD() { 671 QTAILQ_FOREACH_RCU(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 } 686 return NULL; 687 } 688 689 char *qdev_get_dev_path(DeviceState *dev) 690 { 691 BusClass *bc; 692 693 if (!dev || !dev->parent_bus) { 694 return NULL; 695 } 696 697 bc = BUS_GET_CLASS(dev->parent_bus); 698 if (bc->get_dev_path) { 699 return bc->get_dev_path(dev); 700 } 701 702 return NULL; 703 } 704 705 static bool device_get_realized(Object *obj, Error **errp) 706 { 707 DeviceState *dev = DEVICE(obj); 708 return dev->realized; 709 } 710 711 static bool check_only_migratable(Object *obj, Error **errp) 712 { 713 DeviceClass *dc = DEVICE_GET_CLASS(obj); 714 715 if (!vmstate_check_only_migratable(dc->vmsd)) { 716 error_setg(errp, "Device %s is not migratable, but " 717 "--only-migratable was specified", 718 object_get_typename(obj)); 719 return false; 720 } 721 722 return true; 723 } 724 725 static void device_set_realized(Object *obj, bool value, Error **errp) 726 { 727 DeviceState *dev = DEVICE(obj); 728 DeviceClass *dc = DEVICE_GET_CLASS(dev); 729 HotplugHandler *hotplug_ctrl; 730 BusState *bus; 731 NamedClockList *ncl; 732 Error *local_err = NULL; 733 bool unattached_parent = false; 734 static int unattached_count; 735 736 if (dev->hotplugged && !dc->hotpluggable) { 737 error_setg(errp, QERR_DEVICE_NO_HOTPLUG, object_get_typename(obj)); 738 return; 739 } 740 741 if (value && !dev->realized) { 742 if (!check_only_migratable(obj, errp)) { 743 goto fail; 744 } 745 746 if (!obj->parent) { 747 gchar *name = g_strdup_printf("device[%d]", unattached_count++); 748 749 object_property_add_child(container_get(qdev_get_machine(), 750 "/unattached"), 751 name, obj); 752 unattached_parent = true; 753 g_free(name); 754 } 755 756 hotplug_ctrl = qdev_get_hotplug_handler(dev); 757 if (hotplug_ctrl) { 758 hotplug_handler_pre_plug(hotplug_ctrl, dev, &local_err); 759 if (local_err != NULL) { 760 goto fail; 761 } 762 } 763 764 if (dc->realize) { 765 dc->realize(dev, &local_err); 766 if (local_err != NULL) { 767 goto fail; 768 } 769 } 770 771 DEVICE_LISTENER_CALL(realize, Forward, dev); 772 773 /* 774 * always free/re-initialize here since the value cannot be cleaned up 775 * in device_unrealize due to its usage later on in the unplug path 776 */ 777 g_free(dev->canonical_path); 778 dev->canonical_path = object_get_canonical_path(OBJECT(dev)); 779 QLIST_FOREACH(ncl, &dev->clocks, node) { 780 if (ncl->alias) { 781 continue; 782 } else { 783 clock_setup_canonical_path(ncl->clock); 784 } 785 } 786 787 if (qdev_get_vmsd(dev)) { 788 if (vmstate_register_with_alias_id(VMSTATE_IF(dev), 789 VMSTATE_INSTANCE_ID_ANY, 790 qdev_get_vmsd(dev), dev, 791 dev->instance_id_alias, 792 dev->alias_required_for_version, 793 &local_err) < 0) { 794 goto post_realize_fail; 795 } 796 } 797 798 /* 799 * Clear the reset state, in case the object was previously unrealized 800 * with a dirty state. 801 */ 802 resettable_state_clear(&dev->reset); 803 804 QLIST_FOREACH(bus, &dev->child_bus, sibling) { 805 if (!qbus_realize(bus, errp)) { 806 goto child_realize_fail; 807 } 808 } 809 if (dev->hotplugged) { 810 /* 811 * Reset the device, as well as its subtree which, at this point, 812 * should be realized too. 813 */ 814 resettable_assert_reset(OBJECT(dev), RESET_TYPE_COLD); 815 resettable_change_parent(OBJECT(dev), OBJECT(dev->parent_bus), 816 NULL); 817 resettable_release_reset(OBJECT(dev), RESET_TYPE_COLD); 818 } 819 dev->pending_deleted_event = false; 820 821 if (hotplug_ctrl) { 822 hotplug_handler_plug(hotplug_ctrl, dev, &local_err); 823 if (local_err != NULL) { 824 goto child_realize_fail; 825 } 826 } 827 828 qatomic_store_release(&dev->realized, value); 829 830 } else if (!value && dev->realized) { 831 832 /* 833 * Change the value so that any concurrent users are aware 834 * that the device is going to be unrealized 835 * 836 * TODO: change .realized property to enum that states 837 * each phase of the device realization/unrealization 838 */ 839 840 qatomic_set(&dev->realized, value); 841 /* 842 * Ensure that concurrent users see this update prior to 843 * any other changes done by unrealize. 844 */ 845 smp_wmb(); 846 847 QLIST_FOREACH(bus, &dev->child_bus, sibling) { 848 qbus_unrealize(bus); 849 } 850 if (qdev_get_vmsd(dev)) { 851 vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev); 852 } 853 if (dc->unrealize) { 854 dc->unrealize(dev); 855 } 856 dev->pending_deleted_event = true; 857 DEVICE_LISTENER_CALL(unrealize, Reverse, dev); 858 } 859 860 assert(local_err == NULL); 861 return; 862 863 child_realize_fail: 864 QLIST_FOREACH(bus, &dev->child_bus, sibling) { 865 qbus_unrealize(bus); 866 } 867 868 if (qdev_get_vmsd(dev)) { 869 vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev); 870 } 871 872 post_realize_fail: 873 g_free(dev->canonical_path); 874 dev->canonical_path = NULL; 875 if (dc->unrealize) { 876 dc->unrealize(dev); 877 } 878 879 fail: 880 error_propagate(errp, local_err); 881 if (unattached_parent) { 882 /* 883 * Beware, this doesn't just revert 884 * object_property_add_child(), it also runs bus_remove()! 885 */ 886 object_unparent(OBJECT(dev)); 887 unattached_count--; 888 } 889 } 890 891 static bool device_get_hotpluggable(Object *obj, Error **errp) 892 { 893 DeviceClass *dc = DEVICE_GET_CLASS(obj); 894 DeviceState *dev = DEVICE(obj); 895 896 return dc->hotpluggable && (dev->parent_bus == NULL || 897 qbus_is_hotpluggable(dev->parent_bus)); 898 } 899 900 static bool device_get_hotplugged(Object *obj, Error **errp) 901 { 902 DeviceState *dev = DEVICE(obj); 903 904 return dev->hotplugged; 905 } 906 907 static void device_initfn(Object *obj) 908 { 909 DeviceState *dev = DEVICE(obj); 910 911 if (phase_check(PHASE_MACHINE_READY)) { 912 dev->hotplugged = 1; 913 qdev_hot_added = true; 914 } 915 916 dev->instance_id_alias = -1; 917 dev->realized = false; 918 dev->allow_unplug_during_migration = false; 919 920 QLIST_INIT(&dev->gpios); 921 QLIST_INIT(&dev->clocks); 922 } 923 924 static void device_post_init(Object *obj) 925 { 926 /* 927 * Note: ordered so that the user's global properties take 928 * precedence. 929 */ 930 object_apply_compat_props(obj); 931 qdev_prop_set_globals(DEVICE(obj)); 932 } 933 934 /* Unlink device from bus and free the structure. */ 935 static void device_finalize(Object *obj) 936 { 937 NamedGPIOList *ngl, *next; 938 939 DeviceState *dev = DEVICE(obj); 940 941 QLIST_FOREACH_SAFE(ngl, &dev->gpios, node, next) { 942 QLIST_REMOVE(ngl, node); 943 qemu_free_irqs(ngl->in, ngl->num_in); 944 g_free(ngl->name); 945 g_free(ngl); 946 /* ngl->out irqs are owned by the other end and should not be freed 947 * here 948 */ 949 } 950 951 qdev_finalize_clocklist(dev); 952 953 /* Only send event if the device had been completely realized */ 954 if (dev->pending_deleted_event) { 955 g_assert(dev->canonical_path); 956 957 qapi_event_send_device_deleted(!!dev->id, dev->id, dev->canonical_path); 958 g_free(dev->canonical_path); 959 dev->canonical_path = NULL; 960 } 961 962 qobject_unref(dev->opts); 963 g_free(dev->id); 964 } 965 966 static void device_class_base_init(ObjectClass *class, void *data) 967 { 968 DeviceClass *klass = DEVICE_CLASS(class); 969 970 /* We explicitly look up properties in the superclasses, 971 * so do not propagate them to the subclasses. 972 */ 973 klass->props_ = NULL; 974 } 975 976 static void device_unparent(Object *obj) 977 { 978 DeviceState *dev = DEVICE(obj); 979 BusState *bus; 980 981 if (dev->realized) { 982 qdev_unrealize(dev); 983 } 984 while (dev->num_child_bus) { 985 bus = QLIST_FIRST(&dev->child_bus); 986 object_unparent(OBJECT(bus)); 987 } 988 if (dev->parent_bus) { 989 bus_remove_child(dev->parent_bus, dev); 990 object_unref(OBJECT(dev->parent_bus)); 991 dev->parent_bus = NULL; 992 } 993 } 994 995 static char * 996 device_vmstate_if_get_id(VMStateIf *obj) 997 { 998 DeviceState *dev = DEVICE(obj); 999 1000 return qdev_get_dev_path(dev); 1001 } 1002 1003 /** 1004 * device_phases_reset: 1005 * Transition reset method for devices to allow moving 1006 * smoothly from legacy reset method to multi-phases 1007 */ 1008 static void device_phases_reset(DeviceState *dev) 1009 { 1010 ResettableClass *rc = RESETTABLE_GET_CLASS(dev); 1011 1012 if (rc->phases.enter) { 1013 rc->phases.enter(OBJECT(dev), RESET_TYPE_COLD); 1014 } 1015 if (rc->phases.hold) { 1016 rc->phases.hold(OBJECT(dev)); 1017 } 1018 if (rc->phases.exit) { 1019 rc->phases.exit(OBJECT(dev)); 1020 } 1021 } 1022 1023 static void device_transitional_reset(Object *obj) 1024 { 1025 DeviceClass *dc = DEVICE_GET_CLASS(obj); 1026 1027 /* 1028 * This will call either @device_phases_reset (for multi-phases transitioned 1029 * devices) or a device's specific method for not-yet transitioned devices. 1030 * In both case, it does not reset children. 1031 */ 1032 if (dc->reset) { 1033 dc->reset(DEVICE(obj)); 1034 } 1035 } 1036 1037 /** 1038 * device_get_transitional_reset: 1039 * check if the device's class is ready for multi-phase 1040 */ 1041 static ResettableTrFunction device_get_transitional_reset(Object *obj) 1042 { 1043 DeviceClass *dc = DEVICE_GET_CLASS(obj); 1044 if (dc->reset != device_phases_reset) { 1045 /* 1046 * dc->reset has been overridden by a subclass, 1047 * the device is not ready for multi phase yet. 1048 */ 1049 return device_transitional_reset; 1050 } 1051 return NULL; 1052 } 1053 1054 static void device_class_init(ObjectClass *class, void *data) 1055 { 1056 DeviceClass *dc = DEVICE_CLASS(class); 1057 VMStateIfClass *vc = VMSTATE_IF_CLASS(class); 1058 ResettableClass *rc = RESETTABLE_CLASS(class); 1059 1060 class->unparent = device_unparent; 1061 1062 /* by default all devices were considered as hotpluggable, 1063 * so with intent to check it in generic qdev_unplug() / 1064 * device_set_realized() functions make every device 1065 * hotpluggable. Devices that shouldn't be hotpluggable, 1066 * should override it in their class_init() 1067 */ 1068 dc->hotpluggable = true; 1069 dc->user_creatable = true; 1070 vc->get_id = device_vmstate_if_get_id; 1071 rc->get_state = device_get_reset_state; 1072 rc->child_foreach = device_reset_child_foreach; 1073 1074 /* 1075 * @device_phases_reset is put as the default reset method below, allowing 1076 * to do the multi-phase transition from base classes to leaf classes. It 1077 * allows a legacy-reset Device class to extend a multi-phases-reset 1078 * Device class for the following reason: 1079 * + If a base class B has been moved to multi-phase, then it does not 1080 * override this default reset method and may have defined phase methods. 1081 * + A child class C (extending class B) which uses 1082 * device_class_set_parent_reset() (or similar means) to override the 1083 * reset method will still work as expected. @device_phases_reset function 1084 * will be registered as the parent reset method and effectively call 1085 * parent reset phases. 1086 */ 1087 dc->reset = device_phases_reset; 1088 rc->get_transitional_function = device_get_transitional_reset; 1089 1090 object_class_property_add_bool(class, "realized", 1091 device_get_realized, device_set_realized); 1092 object_class_property_add_bool(class, "hotpluggable", 1093 device_get_hotpluggable, NULL); 1094 object_class_property_add_bool(class, "hotplugged", 1095 device_get_hotplugged, NULL); 1096 object_class_property_add_link(class, "parent_bus", TYPE_BUS, 1097 offsetof(DeviceState, parent_bus), NULL, 0); 1098 } 1099 1100 void device_class_set_parent_reset(DeviceClass *dc, 1101 DeviceReset dev_reset, 1102 DeviceReset *parent_reset) 1103 { 1104 *parent_reset = dc->reset; 1105 dc->reset = dev_reset; 1106 } 1107 1108 void device_class_set_parent_realize(DeviceClass *dc, 1109 DeviceRealize dev_realize, 1110 DeviceRealize *parent_realize) 1111 { 1112 *parent_realize = dc->realize; 1113 dc->realize = dev_realize; 1114 } 1115 1116 void device_class_set_parent_unrealize(DeviceClass *dc, 1117 DeviceUnrealize dev_unrealize, 1118 DeviceUnrealize *parent_unrealize) 1119 { 1120 *parent_unrealize = dc->unrealize; 1121 dc->unrealize = dev_unrealize; 1122 } 1123 1124 void device_legacy_reset(DeviceState *dev) 1125 { 1126 DeviceClass *klass = DEVICE_GET_CLASS(dev); 1127 1128 trace_qdev_reset(dev, object_get_typename(OBJECT(dev))); 1129 if (klass->reset) { 1130 klass->reset(dev); 1131 } 1132 } 1133 1134 Object *qdev_get_machine(void) 1135 { 1136 static Object *dev; 1137 1138 if (dev == NULL) { 1139 dev = container_get(object_get_root(), "/machine"); 1140 } 1141 1142 return dev; 1143 } 1144 1145 static MachineInitPhase machine_phase; 1146 1147 bool phase_check(MachineInitPhase phase) 1148 { 1149 return machine_phase >= phase; 1150 } 1151 1152 void phase_advance(MachineInitPhase phase) 1153 { 1154 assert(machine_phase == phase - 1); 1155 machine_phase = phase; 1156 } 1157 1158 static const TypeInfo device_type_info = { 1159 .name = TYPE_DEVICE, 1160 .parent = TYPE_OBJECT, 1161 .instance_size = sizeof(DeviceState), 1162 .instance_init = device_initfn, 1163 .instance_post_init = device_post_init, 1164 .instance_finalize = device_finalize, 1165 .class_base_init = device_class_base_init, 1166 .class_init = device_class_init, 1167 .abstract = true, 1168 .class_size = sizeof(DeviceClass), 1169 .interfaces = (InterfaceInfo[]) { 1170 { TYPE_VMSTATE_IF }, 1171 { TYPE_RESETTABLE_INTERFACE }, 1172 { } 1173 } 1174 }; 1175 1176 static void qdev_register_types(void) 1177 { 1178 type_register_static(&device_type_info); 1179 } 1180 1181 type_init(qdev_register_types) 1182