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