1 /* 2 * scan.c - support for transforming the ACPI namespace into individual objects 3 */ 4 5 #include <linux/module.h> 6 #include <linux/init.h> 7 #include <linux/slab.h> 8 #include <linux/kernel.h> 9 #include <linux/acpi.h> 10 #include <linux/signal.h> 11 #include <linux/kthread.h> 12 #include <linux/dmi.h> 13 #include <linux/nls.h> 14 #include <linux/dma-mapping.h> 15 16 #include <asm/pgtable.h> 17 18 #include "internal.h" 19 20 #define _COMPONENT ACPI_BUS_COMPONENT 21 ACPI_MODULE_NAME("scan"); 22 extern struct acpi_device *acpi_root; 23 24 #define ACPI_BUS_CLASS "system_bus" 25 #define ACPI_BUS_HID "LNXSYBUS" 26 #define ACPI_BUS_DEVICE_NAME "System Bus" 27 28 #define ACPI_IS_ROOT_DEVICE(device) (!(device)->parent) 29 30 #define INVALID_ACPI_HANDLE ((acpi_handle)empty_zero_page) 31 32 /* 33 * If set, devices will be hot-removed even if they cannot be put offline 34 * gracefully (from the kernel's standpoint). 35 */ 36 bool acpi_force_hot_remove; 37 38 static const char *dummy_hid = "device"; 39 40 static LIST_HEAD(acpi_dep_list); 41 static DEFINE_MUTEX(acpi_dep_list_lock); 42 static LIST_HEAD(acpi_bus_id_list); 43 static DEFINE_MUTEX(acpi_scan_lock); 44 static LIST_HEAD(acpi_scan_handlers_list); 45 DEFINE_MUTEX(acpi_device_lock); 46 LIST_HEAD(acpi_wakeup_device_list); 47 static DEFINE_MUTEX(acpi_hp_context_lock); 48 49 struct acpi_dep_data { 50 struct list_head node; 51 acpi_handle master; 52 acpi_handle slave; 53 }; 54 55 struct acpi_device_bus_id{ 56 char bus_id[15]; 57 unsigned int instance_no; 58 struct list_head node; 59 }; 60 61 void acpi_scan_lock_acquire(void) 62 { 63 mutex_lock(&acpi_scan_lock); 64 } 65 EXPORT_SYMBOL_GPL(acpi_scan_lock_acquire); 66 67 void acpi_scan_lock_release(void) 68 { 69 mutex_unlock(&acpi_scan_lock); 70 } 71 EXPORT_SYMBOL_GPL(acpi_scan_lock_release); 72 73 void acpi_lock_hp_context(void) 74 { 75 mutex_lock(&acpi_hp_context_lock); 76 } 77 78 void acpi_unlock_hp_context(void) 79 { 80 mutex_unlock(&acpi_hp_context_lock); 81 } 82 83 void acpi_initialize_hp_context(struct acpi_device *adev, 84 struct acpi_hotplug_context *hp, 85 int (*notify)(struct acpi_device *, u32), 86 void (*uevent)(struct acpi_device *, u32)) 87 { 88 acpi_lock_hp_context(); 89 hp->notify = notify; 90 hp->uevent = uevent; 91 acpi_set_hp_context(adev, hp); 92 acpi_unlock_hp_context(); 93 } 94 EXPORT_SYMBOL_GPL(acpi_initialize_hp_context); 95 96 int acpi_scan_add_handler(struct acpi_scan_handler *handler) 97 { 98 if (!handler) 99 return -EINVAL; 100 101 list_add_tail(&handler->list_node, &acpi_scan_handlers_list); 102 return 0; 103 } 104 105 int acpi_scan_add_handler_with_hotplug(struct acpi_scan_handler *handler, 106 const char *hotplug_profile_name) 107 { 108 int error; 109 110 error = acpi_scan_add_handler(handler); 111 if (error) 112 return error; 113 114 acpi_sysfs_add_hotplug_profile(&handler->hotplug, hotplug_profile_name); 115 return 0; 116 } 117 118 /** 119 * create_pnp_modalias - Create hid/cid(s) string for modalias and uevent 120 * @acpi_dev: ACPI device object. 121 * @modalias: Buffer to print into. 122 * @size: Size of the buffer. 123 * 124 * Creates hid/cid(s) string needed for modalias and uevent 125 * e.g. on a device with hid:IBM0001 and cid:ACPI0001 you get: 126 * char *modalias: "acpi:IBM0001:ACPI0001" 127 * Return: 0: no _HID and no _CID 128 * -EINVAL: output error 129 * -ENOMEM: output is truncated 130 */ 131 static int create_pnp_modalias(struct acpi_device *acpi_dev, char *modalias, 132 int size) 133 { 134 int len; 135 int count; 136 struct acpi_hardware_id *id; 137 138 /* 139 * Since we skip ACPI_DT_NAMESPACE_HID from the modalias below, 0 should 140 * be returned if ACPI_DT_NAMESPACE_HID is the only ACPI/PNP ID in the 141 * device's list. 142 */ 143 count = 0; 144 list_for_each_entry(id, &acpi_dev->pnp.ids, list) 145 if (strcmp(id->id, ACPI_DT_NAMESPACE_HID)) 146 count++; 147 148 if (!count) 149 return 0; 150 151 len = snprintf(modalias, size, "acpi:"); 152 if (len <= 0) 153 return len; 154 155 size -= len; 156 157 list_for_each_entry(id, &acpi_dev->pnp.ids, list) { 158 if (!strcmp(id->id, ACPI_DT_NAMESPACE_HID)) 159 continue; 160 161 count = snprintf(&modalias[len], size, "%s:", id->id); 162 if (count < 0) 163 return -EINVAL; 164 165 if (count >= size) 166 return -ENOMEM; 167 168 len += count; 169 size -= count; 170 } 171 modalias[len] = '\0'; 172 return len; 173 } 174 175 /** 176 * create_of_modalias - Creates DT compatible string for modalias and uevent 177 * @acpi_dev: ACPI device object. 178 * @modalias: Buffer to print into. 179 * @size: Size of the buffer. 180 * 181 * Expose DT compatible modalias as of:NnameTCcompatible. This function should 182 * only be called for devices having ACPI_DT_NAMESPACE_HID in their list of 183 * ACPI/PNP IDs. 184 */ 185 static int create_of_modalias(struct acpi_device *acpi_dev, char *modalias, 186 int size) 187 { 188 struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER }; 189 const union acpi_object *of_compatible, *obj; 190 int len, count; 191 int i, nval; 192 char *c; 193 194 acpi_get_name(acpi_dev->handle, ACPI_SINGLE_NAME, &buf); 195 /* DT strings are all in lower case */ 196 for (c = buf.pointer; *c != '\0'; c++) 197 *c = tolower(*c); 198 199 len = snprintf(modalias, size, "of:N%sT", (char *)buf.pointer); 200 ACPI_FREE(buf.pointer); 201 202 if (len <= 0) 203 return len; 204 205 of_compatible = acpi_dev->data.of_compatible; 206 if (of_compatible->type == ACPI_TYPE_PACKAGE) { 207 nval = of_compatible->package.count; 208 obj = of_compatible->package.elements; 209 } else { /* Must be ACPI_TYPE_STRING. */ 210 nval = 1; 211 obj = of_compatible; 212 } 213 for (i = 0; i < nval; i++, obj++) { 214 count = snprintf(&modalias[len], size, "C%s", 215 obj->string.pointer); 216 if (count < 0) 217 return -EINVAL; 218 219 if (count >= size) 220 return -ENOMEM; 221 222 len += count; 223 size -= count; 224 } 225 modalias[len] = '\0'; 226 return len; 227 } 228 229 /* 230 * acpi_companion_match() - Can we match via ACPI companion device 231 * @dev: Device in question 232 * 233 * Check if the given device has an ACPI companion and if that companion has 234 * a valid list of PNP IDs, and if the device is the first (primary) physical 235 * device associated with it. Return the companion pointer if that's the case 236 * or NULL otherwise. 237 * 238 * If multiple physical devices are attached to a single ACPI companion, we need 239 * to be careful. The usage scenario for this kind of relationship is that all 240 * of the physical devices in question use resources provided by the ACPI 241 * companion. A typical case is an MFD device where all the sub-devices share 242 * the parent's ACPI companion. In such cases we can only allow the primary 243 * (first) physical device to be matched with the help of the companion's PNP 244 * IDs. 245 * 246 * Additional physical devices sharing the ACPI companion can still use 247 * resources available from it but they will be matched normally using functions 248 * provided by their bus types (and analogously for their modalias). 249 */ 250 static struct acpi_device *acpi_companion_match(const struct device *dev) 251 { 252 struct acpi_device *adev; 253 struct mutex *physical_node_lock; 254 255 adev = ACPI_COMPANION(dev); 256 if (!adev) 257 return NULL; 258 259 if (list_empty(&adev->pnp.ids)) 260 return NULL; 261 262 physical_node_lock = &adev->physical_node_lock; 263 mutex_lock(physical_node_lock); 264 if (list_empty(&adev->physical_node_list)) { 265 adev = NULL; 266 } else { 267 const struct acpi_device_physical_node *node; 268 269 node = list_first_entry(&adev->physical_node_list, 270 struct acpi_device_physical_node, node); 271 if (node->dev != dev) 272 adev = NULL; 273 } 274 mutex_unlock(physical_node_lock); 275 276 return adev; 277 } 278 279 static int __acpi_device_uevent_modalias(struct acpi_device *adev, 280 struct kobj_uevent_env *env) 281 { 282 int len; 283 284 if (!adev) 285 return -ENODEV; 286 287 if (list_empty(&adev->pnp.ids)) 288 return 0; 289 290 if (add_uevent_var(env, "MODALIAS=")) 291 return -ENOMEM; 292 293 len = create_pnp_modalias(adev, &env->buf[env->buflen - 1], 294 sizeof(env->buf) - env->buflen); 295 if (len < 0) 296 return len; 297 298 env->buflen += len; 299 if (!adev->data.of_compatible) 300 return 0; 301 302 if (len > 0 && add_uevent_var(env, "MODALIAS=")) 303 return -ENOMEM; 304 305 len = create_of_modalias(adev, &env->buf[env->buflen - 1], 306 sizeof(env->buf) - env->buflen); 307 if (len < 0) 308 return len; 309 310 env->buflen += len; 311 312 return 0; 313 } 314 315 /* 316 * Creates uevent modalias field for ACPI enumerated devices. 317 * Because the other buses does not support ACPI HIDs & CIDs. 318 * e.g. for a device with hid:IBM0001 and cid:ACPI0001 you get: 319 * "acpi:IBM0001:ACPI0001" 320 */ 321 int acpi_device_uevent_modalias(struct device *dev, struct kobj_uevent_env *env) 322 { 323 return __acpi_device_uevent_modalias(acpi_companion_match(dev), env); 324 } 325 EXPORT_SYMBOL_GPL(acpi_device_uevent_modalias); 326 327 static int __acpi_device_modalias(struct acpi_device *adev, char *buf, int size) 328 { 329 int len, count; 330 331 if (!adev) 332 return -ENODEV; 333 334 if (list_empty(&adev->pnp.ids)) 335 return 0; 336 337 len = create_pnp_modalias(adev, buf, size - 1); 338 if (len < 0) { 339 return len; 340 } else if (len > 0) { 341 buf[len++] = '\n'; 342 size -= len; 343 } 344 if (!adev->data.of_compatible) 345 return len; 346 347 count = create_of_modalias(adev, buf + len, size - 1); 348 if (count < 0) { 349 return count; 350 } else if (count > 0) { 351 len += count; 352 buf[len++] = '\n'; 353 } 354 355 return len; 356 } 357 358 /* 359 * Creates modalias sysfs attribute for ACPI enumerated devices. 360 * Because the other buses does not support ACPI HIDs & CIDs. 361 * e.g. for a device with hid:IBM0001 and cid:ACPI0001 you get: 362 * "acpi:IBM0001:ACPI0001" 363 */ 364 int acpi_device_modalias(struct device *dev, char *buf, int size) 365 { 366 return __acpi_device_modalias(acpi_companion_match(dev), buf, size); 367 } 368 EXPORT_SYMBOL_GPL(acpi_device_modalias); 369 370 static ssize_t 371 acpi_device_modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { 372 return __acpi_device_modalias(to_acpi_device(dev), buf, 1024); 373 } 374 static DEVICE_ATTR(modalias, 0444, acpi_device_modalias_show, NULL); 375 376 bool acpi_scan_is_offline(struct acpi_device *adev, bool uevent) 377 { 378 struct acpi_device_physical_node *pn; 379 bool offline = true; 380 381 /* 382 * acpi_container_offline() calls this for all of the container's 383 * children under the container's physical_node_lock lock. 384 */ 385 mutex_lock_nested(&adev->physical_node_lock, SINGLE_DEPTH_NESTING); 386 387 list_for_each_entry(pn, &adev->physical_node_list, node) 388 if (device_supports_offline(pn->dev) && !pn->dev->offline) { 389 if (uevent) 390 kobject_uevent(&pn->dev->kobj, KOBJ_CHANGE); 391 392 offline = false; 393 break; 394 } 395 396 mutex_unlock(&adev->physical_node_lock); 397 return offline; 398 } 399 400 static acpi_status acpi_bus_offline(acpi_handle handle, u32 lvl, void *data, 401 void **ret_p) 402 { 403 struct acpi_device *device = NULL; 404 struct acpi_device_physical_node *pn; 405 bool second_pass = (bool)data; 406 acpi_status status = AE_OK; 407 408 if (acpi_bus_get_device(handle, &device)) 409 return AE_OK; 410 411 if (device->handler && !device->handler->hotplug.enabled) { 412 *ret_p = &device->dev; 413 return AE_SUPPORT; 414 } 415 416 mutex_lock(&device->physical_node_lock); 417 418 list_for_each_entry(pn, &device->physical_node_list, node) { 419 int ret; 420 421 if (second_pass) { 422 /* Skip devices offlined by the first pass. */ 423 if (pn->put_online) 424 continue; 425 } else { 426 pn->put_online = false; 427 } 428 ret = device_offline(pn->dev); 429 if (acpi_force_hot_remove) 430 continue; 431 432 if (ret >= 0) { 433 pn->put_online = !ret; 434 } else { 435 *ret_p = pn->dev; 436 if (second_pass) { 437 status = AE_ERROR; 438 break; 439 } 440 } 441 } 442 443 mutex_unlock(&device->physical_node_lock); 444 445 return status; 446 } 447 448 static acpi_status acpi_bus_online(acpi_handle handle, u32 lvl, void *data, 449 void **ret_p) 450 { 451 struct acpi_device *device = NULL; 452 struct acpi_device_physical_node *pn; 453 454 if (acpi_bus_get_device(handle, &device)) 455 return AE_OK; 456 457 mutex_lock(&device->physical_node_lock); 458 459 list_for_each_entry(pn, &device->physical_node_list, node) 460 if (pn->put_online) { 461 device_online(pn->dev); 462 pn->put_online = false; 463 } 464 465 mutex_unlock(&device->physical_node_lock); 466 467 return AE_OK; 468 } 469 470 static int acpi_scan_try_to_offline(struct acpi_device *device) 471 { 472 acpi_handle handle = device->handle; 473 struct device *errdev = NULL; 474 acpi_status status; 475 476 /* 477 * Carry out two passes here and ignore errors in the first pass, 478 * because if the devices in question are memory blocks and 479 * CONFIG_MEMCG is set, one of the blocks may hold data structures 480 * that the other blocks depend on, but it is not known in advance which 481 * block holds them. 482 * 483 * If the first pass is successful, the second one isn't needed, though. 484 */ 485 status = acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX, 486 NULL, acpi_bus_offline, (void *)false, 487 (void **)&errdev); 488 if (status == AE_SUPPORT) { 489 dev_warn(errdev, "Offline disabled.\n"); 490 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX, 491 acpi_bus_online, NULL, NULL, NULL); 492 return -EPERM; 493 } 494 acpi_bus_offline(handle, 0, (void *)false, (void **)&errdev); 495 if (errdev) { 496 errdev = NULL; 497 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX, 498 NULL, acpi_bus_offline, (void *)true, 499 (void **)&errdev); 500 if (!errdev || acpi_force_hot_remove) 501 acpi_bus_offline(handle, 0, (void *)true, 502 (void **)&errdev); 503 504 if (errdev && !acpi_force_hot_remove) { 505 dev_warn(errdev, "Offline failed.\n"); 506 acpi_bus_online(handle, 0, NULL, NULL); 507 acpi_walk_namespace(ACPI_TYPE_ANY, handle, 508 ACPI_UINT32_MAX, acpi_bus_online, 509 NULL, NULL, NULL); 510 return -EBUSY; 511 } 512 } 513 return 0; 514 } 515 516 static int acpi_scan_hot_remove(struct acpi_device *device) 517 { 518 acpi_handle handle = device->handle; 519 unsigned long long sta; 520 acpi_status status; 521 522 if (device->handler && device->handler->hotplug.demand_offline 523 && !acpi_force_hot_remove) { 524 if (!acpi_scan_is_offline(device, true)) 525 return -EBUSY; 526 } else { 527 int error = acpi_scan_try_to_offline(device); 528 if (error) 529 return error; 530 } 531 532 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 533 "Hot-removing device %s...\n", dev_name(&device->dev))); 534 535 acpi_bus_trim(device); 536 537 acpi_evaluate_lck(handle, 0); 538 /* 539 * TBD: _EJD support. 540 */ 541 status = acpi_evaluate_ej0(handle); 542 if (status == AE_NOT_FOUND) 543 return -ENODEV; 544 else if (ACPI_FAILURE(status)) 545 return -EIO; 546 547 /* 548 * Verify if eject was indeed successful. If not, log an error 549 * message. No need to call _OST since _EJ0 call was made OK. 550 */ 551 status = acpi_evaluate_integer(handle, "_STA", NULL, &sta); 552 if (ACPI_FAILURE(status)) { 553 acpi_handle_warn(handle, 554 "Status check after eject failed (0x%x)\n", status); 555 } else if (sta & ACPI_STA_DEVICE_ENABLED) { 556 acpi_handle_warn(handle, 557 "Eject incomplete - status 0x%llx\n", sta); 558 } 559 560 return 0; 561 } 562 563 static int acpi_scan_device_not_present(struct acpi_device *adev) 564 { 565 if (!acpi_device_enumerated(adev)) { 566 dev_warn(&adev->dev, "Still not present\n"); 567 return -EALREADY; 568 } 569 acpi_bus_trim(adev); 570 return 0; 571 } 572 573 static int acpi_scan_device_check(struct acpi_device *adev) 574 { 575 int error; 576 577 acpi_bus_get_status(adev); 578 if (adev->status.present || adev->status.functional) { 579 /* 580 * This function is only called for device objects for which 581 * matching scan handlers exist. The only situation in which 582 * the scan handler is not attached to this device object yet 583 * is when the device has just appeared (either it wasn't 584 * present at all before or it was removed and then added 585 * again). 586 */ 587 if (adev->handler) { 588 dev_warn(&adev->dev, "Already enumerated\n"); 589 return -EALREADY; 590 } 591 error = acpi_bus_scan(adev->handle); 592 if (error) { 593 dev_warn(&adev->dev, "Namespace scan failure\n"); 594 return error; 595 } 596 if (!adev->handler) { 597 dev_warn(&adev->dev, "Enumeration failure\n"); 598 error = -ENODEV; 599 } 600 } else { 601 error = acpi_scan_device_not_present(adev); 602 } 603 return error; 604 } 605 606 static int acpi_scan_bus_check(struct acpi_device *adev) 607 { 608 struct acpi_scan_handler *handler = adev->handler; 609 struct acpi_device *child; 610 int error; 611 612 acpi_bus_get_status(adev); 613 if (!(adev->status.present || adev->status.functional)) { 614 acpi_scan_device_not_present(adev); 615 return 0; 616 } 617 if (handler && handler->hotplug.scan_dependent) 618 return handler->hotplug.scan_dependent(adev); 619 620 error = acpi_bus_scan(adev->handle); 621 if (error) { 622 dev_warn(&adev->dev, "Namespace scan failure\n"); 623 return error; 624 } 625 list_for_each_entry(child, &adev->children, node) { 626 error = acpi_scan_bus_check(child); 627 if (error) 628 return error; 629 } 630 return 0; 631 } 632 633 static int acpi_generic_hotplug_event(struct acpi_device *adev, u32 type) 634 { 635 switch (type) { 636 case ACPI_NOTIFY_BUS_CHECK: 637 return acpi_scan_bus_check(adev); 638 case ACPI_NOTIFY_DEVICE_CHECK: 639 return acpi_scan_device_check(adev); 640 case ACPI_NOTIFY_EJECT_REQUEST: 641 case ACPI_OST_EC_OSPM_EJECT: 642 if (adev->handler && !adev->handler->hotplug.enabled) { 643 dev_info(&adev->dev, "Eject disabled\n"); 644 return -EPERM; 645 } 646 acpi_evaluate_ost(adev->handle, ACPI_NOTIFY_EJECT_REQUEST, 647 ACPI_OST_SC_EJECT_IN_PROGRESS, NULL); 648 return acpi_scan_hot_remove(adev); 649 } 650 return -EINVAL; 651 } 652 653 void acpi_device_hotplug(struct acpi_device *adev, u32 src) 654 { 655 u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE; 656 int error = -ENODEV; 657 658 lock_device_hotplug(); 659 mutex_lock(&acpi_scan_lock); 660 661 /* 662 * The device object's ACPI handle cannot become invalid as long as we 663 * are holding acpi_scan_lock, but it might have become invalid before 664 * that lock was acquired. 665 */ 666 if (adev->handle == INVALID_ACPI_HANDLE) 667 goto err_out; 668 669 if (adev->flags.is_dock_station) { 670 error = dock_notify(adev, src); 671 } else if (adev->flags.hotplug_notify) { 672 error = acpi_generic_hotplug_event(adev, src); 673 if (error == -EPERM) { 674 ost_code = ACPI_OST_SC_EJECT_NOT_SUPPORTED; 675 goto err_out; 676 } 677 } else { 678 int (*notify)(struct acpi_device *, u32); 679 680 acpi_lock_hp_context(); 681 notify = adev->hp ? adev->hp->notify : NULL; 682 acpi_unlock_hp_context(); 683 /* 684 * There may be additional notify handlers for device objects 685 * without the .event() callback, so ignore them here. 686 */ 687 if (notify) 688 error = notify(adev, src); 689 else 690 goto out; 691 } 692 if (!error) 693 ost_code = ACPI_OST_SC_SUCCESS; 694 695 err_out: 696 acpi_evaluate_ost(adev->handle, src, ost_code, NULL); 697 698 out: 699 acpi_bus_put_acpi_device(adev); 700 mutex_unlock(&acpi_scan_lock); 701 unlock_device_hotplug(); 702 } 703 704 static ssize_t real_power_state_show(struct device *dev, 705 struct device_attribute *attr, char *buf) 706 { 707 struct acpi_device *adev = to_acpi_device(dev); 708 int state; 709 int ret; 710 711 ret = acpi_device_get_power(adev, &state); 712 if (ret) 713 return ret; 714 715 return sprintf(buf, "%s\n", acpi_power_state_string(state)); 716 } 717 718 static DEVICE_ATTR(real_power_state, 0444, real_power_state_show, NULL); 719 720 static ssize_t power_state_show(struct device *dev, 721 struct device_attribute *attr, char *buf) 722 { 723 struct acpi_device *adev = to_acpi_device(dev); 724 725 return sprintf(buf, "%s\n", acpi_power_state_string(adev->power.state)); 726 } 727 728 static DEVICE_ATTR(power_state, 0444, power_state_show, NULL); 729 730 static ssize_t 731 acpi_eject_store(struct device *d, struct device_attribute *attr, 732 const char *buf, size_t count) 733 { 734 struct acpi_device *acpi_device = to_acpi_device(d); 735 acpi_object_type not_used; 736 acpi_status status; 737 738 if (!count || buf[0] != '1') 739 return -EINVAL; 740 741 if ((!acpi_device->handler || !acpi_device->handler->hotplug.enabled) 742 && !acpi_device->driver) 743 return -ENODEV; 744 745 status = acpi_get_type(acpi_device->handle, ¬_used); 746 if (ACPI_FAILURE(status) || !acpi_device->flags.ejectable) 747 return -ENODEV; 748 749 get_device(&acpi_device->dev); 750 status = acpi_hotplug_schedule(acpi_device, ACPI_OST_EC_OSPM_EJECT); 751 if (ACPI_SUCCESS(status)) 752 return count; 753 754 put_device(&acpi_device->dev); 755 acpi_evaluate_ost(acpi_device->handle, ACPI_OST_EC_OSPM_EJECT, 756 ACPI_OST_SC_NON_SPECIFIC_FAILURE, NULL); 757 return status == AE_NO_MEMORY ? -ENOMEM : -EAGAIN; 758 } 759 760 static DEVICE_ATTR(eject, 0200, NULL, acpi_eject_store); 761 762 static ssize_t 763 acpi_device_hid_show(struct device *dev, struct device_attribute *attr, char *buf) { 764 struct acpi_device *acpi_dev = to_acpi_device(dev); 765 766 return sprintf(buf, "%s\n", acpi_device_hid(acpi_dev)); 767 } 768 static DEVICE_ATTR(hid, 0444, acpi_device_hid_show, NULL); 769 770 static ssize_t acpi_device_uid_show(struct device *dev, 771 struct device_attribute *attr, char *buf) 772 { 773 struct acpi_device *acpi_dev = to_acpi_device(dev); 774 775 return sprintf(buf, "%s\n", acpi_dev->pnp.unique_id); 776 } 777 static DEVICE_ATTR(uid, 0444, acpi_device_uid_show, NULL); 778 779 static ssize_t acpi_device_adr_show(struct device *dev, 780 struct device_attribute *attr, char *buf) 781 { 782 struct acpi_device *acpi_dev = to_acpi_device(dev); 783 784 return sprintf(buf, "0x%08x\n", 785 (unsigned int)(acpi_dev->pnp.bus_address)); 786 } 787 static DEVICE_ATTR(adr, 0444, acpi_device_adr_show, NULL); 788 789 static ssize_t 790 acpi_device_path_show(struct device *dev, struct device_attribute *attr, char *buf) { 791 struct acpi_device *acpi_dev = to_acpi_device(dev); 792 struct acpi_buffer path = {ACPI_ALLOCATE_BUFFER, NULL}; 793 int result; 794 795 result = acpi_get_name(acpi_dev->handle, ACPI_FULL_PATHNAME, &path); 796 if (result) 797 goto end; 798 799 result = sprintf(buf, "%s\n", (char*)path.pointer); 800 kfree(path.pointer); 801 end: 802 return result; 803 } 804 static DEVICE_ATTR(path, 0444, acpi_device_path_show, NULL); 805 806 /* sysfs file that shows description text from the ACPI _STR method */ 807 static ssize_t description_show(struct device *dev, 808 struct device_attribute *attr, 809 char *buf) { 810 struct acpi_device *acpi_dev = to_acpi_device(dev); 811 int result; 812 813 if (acpi_dev->pnp.str_obj == NULL) 814 return 0; 815 816 /* 817 * The _STR object contains a Unicode identifier for a device. 818 * We need to convert to utf-8 so it can be displayed. 819 */ 820 result = utf16s_to_utf8s( 821 (wchar_t *)acpi_dev->pnp.str_obj->buffer.pointer, 822 acpi_dev->pnp.str_obj->buffer.length, 823 UTF16_LITTLE_ENDIAN, buf, 824 PAGE_SIZE); 825 826 buf[result++] = '\n'; 827 828 return result; 829 } 830 static DEVICE_ATTR(description, 0444, description_show, NULL); 831 832 static ssize_t 833 acpi_device_sun_show(struct device *dev, struct device_attribute *attr, 834 char *buf) { 835 struct acpi_device *acpi_dev = to_acpi_device(dev); 836 acpi_status status; 837 unsigned long long sun; 838 839 status = acpi_evaluate_integer(acpi_dev->handle, "_SUN", NULL, &sun); 840 if (ACPI_FAILURE(status)) 841 return -ENODEV; 842 843 return sprintf(buf, "%llu\n", sun); 844 } 845 static DEVICE_ATTR(sun, 0444, acpi_device_sun_show, NULL); 846 847 static ssize_t status_show(struct device *dev, struct device_attribute *attr, 848 char *buf) { 849 struct acpi_device *acpi_dev = to_acpi_device(dev); 850 acpi_status status; 851 unsigned long long sta; 852 853 status = acpi_evaluate_integer(acpi_dev->handle, "_STA", NULL, &sta); 854 if (ACPI_FAILURE(status)) 855 return -ENODEV; 856 857 return sprintf(buf, "%llu\n", sta); 858 } 859 static DEVICE_ATTR_RO(status); 860 861 static int acpi_device_setup_files(struct acpi_device *dev) 862 { 863 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; 864 acpi_status status; 865 int result = 0; 866 867 /* 868 * Devices gotten from FADT don't have a "path" attribute 869 */ 870 if (dev->handle) { 871 result = device_create_file(&dev->dev, &dev_attr_path); 872 if (result) 873 goto end; 874 } 875 876 if (!list_empty(&dev->pnp.ids)) { 877 result = device_create_file(&dev->dev, &dev_attr_hid); 878 if (result) 879 goto end; 880 881 result = device_create_file(&dev->dev, &dev_attr_modalias); 882 if (result) 883 goto end; 884 } 885 886 /* 887 * If device has _STR, 'description' file is created 888 */ 889 if (acpi_has_method(dev->handle, "_STR")) { 890 status = acpi_evaluate_object(dev->handle, "_STR", 891 NULL, &buffer); 892 if (ACPI_FAILURE(status)) 893 buffer.pointer = NULL; 894 dev->pnp.str_obj = buffer.pointer; 895 result = device_create_file(&dev->dev, &dev_attr_description); 896 if (result) 897 goto end; 898 } 899 900 if (dev->pnp.type.bus_address) 901 result = device_create_file(&dev->dev, &dev_attr_adr); 902 if (dev->pnp.unique_id) 903 result = device_create_file(&dev->dev, &dev_attr_uid); 904 905 if (acpi_has_method(dev->handle, "_SUN")) { 906 result = device_create_file(&dev->dev, &dev_attr_sun); 907 if (result) 908 goto end; 909 } 910 911 if (acpi_has_method(dev->handle, "_STA")) { 912 result = device_create_file(&dev->dev, &dev_attr_status); 913 if (result) 914 goto end; 915 } 916 917 /* 918 * If device has _EJ0, 'eject' file is created that is used to trigger 919 * hot-removal function from userland. 920 */ 921 if (acpi_has_method(dev->handle, "_EJ0")) { 922 result = device_create_file(&dev->dev, &dev_attr_eject); 923 if (result) 924 return result; 925 } 926 927 if (dev->flags.power_manageable) { 928 result = device_create_file(&dev->dev, &dev_attr_power_state); 929 if (result) 930 return result; 931 932 if (dev->power.flags.power_resources) 933 result = device_create_file(&dev->dev, 934 &dev_attr_real_power_state); 935 } 936 937 end: 938 return result; 939 } 940 941 static void acpi_device_remove_files(struct acpi_device *dev) 942 { 943 if (dev->flags.power_manageable) { 944 device_remove_file(&dev->dev, &dev_attr_power_state); 945 if (dev->power.flags.power_resources) 946 device_remove_file(&dev->dev, 947 &dev_attr_real_power_state); 948 } 949 950 /* 951 * If device has _STR, remove 'description' file 952 */ 953 if (acpi_has_method(dev->handle, "_STR")) { 954 kfree(dev->pnp.str_obj); 955 device_remove_file(&dev->dev, &dev_attr_description); 956 } 957 /* 958 * If device has _EJ0, remove 'eject' file. 959 */ 960 if (acpi_has_method(dev->handle, "_EJ0")) 961 device_remove_file(&dev->dev, &dev_attr_eject); 962 963 if (acpi_has_method(dev->handle, "_SUN")) 964 device_remove_file(&dev->dev, &dev_attr_sun); 965 966 if (dev->pnp.unique_id) 967 device_remove_file(&dev->dev, &dev_attr_uid); 968 if (dev->pnp.type.bus_address) 969 device_remove_file(&dev->dev, &dev_attr_adr); 970 device_remove_file(&dev->dev, &dev_attr_modalias); 971 device_remove_file(&dev->dev, &dev_attr_hid); 972 if (acpi_has_method(dev->handle, "_STA")) 973 device_remove_file(&dev->dev, &dev_attr_status); 974 if (dev->handle) 975 device_remove_file(&dev->dev, &dev_attr_path); 976 } 977 /* -------------------------------------------------------------------------- 978 ACPI Bus operations 979 -------------------------------------------------------------------------- */ 980 981 /** 982 * acpi_of_match_device - Match device object using the "compatible" property. 983 * @adev: ACPI device object to match. 984 * @of_match_table: List of device IDs to match against. 985 * 986 * If @dev has an ACPI companion which has ACPI_DT_NAMESPACE_HID in its list of 987 * identifiers and a _DSD object with the "compatible" property, use that 988 * property to match against the given list of identifiers. 989 */ 990 static bool acpi_of_match_device(struct acpi_device *adev, 991 const struct of_device_id *of_match_table) 992 { 993 const union acpi_object *of_compatible, *obj; 994 int i, nval; 995 996 if (!adev) 997 return false; 998 999 of_compatible = adev->data.of_compatible; 1000 if (!of_match_table || !of_compatible) 1001 return false; 1002 1003 if (of_compatible->type == ACPI_TYPE_PACKAGE) { 1004 nval = of_compatible->package.count; 1005 obj = of_compatible->package.elements; 1006 } else { /* Must be ACPI_TYPE_STRING. */ 1007 nval = 1; 1008 obj = of_compatible; 1009 } 1010 /* Now we can look for the driver DT compatible strings */ 1011 for (i = 0; i < nval; i++, obj++) { 1012 const struct of_device_id *id; 1013 1014 for (id = of_match_table; id->compatible[0]; id++) 1015 if (!strcasecmp(obj->string.pointer, id->compatible)) 1016 return true; 1017 } 1018 1019 return false; 1020 } 1021 1022 static bool __acpi_match_device_cls(const struct acpi_device_id *id, 1023 struct acpi_hardware_id *hwid) 1024 { 1025 int i, msk, byte_shift; 1026 char buf[3]; 1027 1028 if (!id->cls) 1029 return false; 1030 1031 /* Apply class-code bitmask, before checking each class-code byte */ 1032 for (i = 1; i <= 3; i++) { 1033 byte_shift = 8 * (3 - i); 1034 msk = (id->cls_msk >> byte_shift) & 0xFF; 1035 if (!msk) 1036 continue; 1037 1038 sprintf(buf, "%02x", (id->cls >> byte_shift) & msk); 1039 if (strncmp(buf, &hwid->id[(i - 1) * 2], 2)) 1040 return false; 1041 } 1042 return true; 1043 } 1044 1045 static const struct acpi_device_id *__acpi_match_device( 1046 struct acpi_device *device, 1047 const struct acpi_device_id *ids, 1048 const struct of_device_id *of_ids) 1049 { 1050 const struct acpi_device_id *id; 1051 struct acpi_hardware_id *hwid; 1052 1053 /* 1054 * If the device is not present, it is unnecessary to load device 1055 * driver for it. 1056 */ 1057 if (!device || !device->status.present) 1058 return NULL; 1059 1060 list_for_each_entry(hwid, &device->pnp.ids, list) { 1061 /* First, check the ACPI/PNP IDs provided by the caller. */ 1062 for (id = ids; id->id[0] || id->cls; id++) { 1063 if (id->id[0] && !strcmp((char *) id->id, hwid->id)) 1064 return id; 1065 else if (id->cls && __acpi_match_device_cls(id, hwid)) 1066 return id; 1067 } 1068 1069 /* 1070 * Next, check ACPI_DT_NAMESPACE_HID and try to match the 1071 * "compatible" property if found. 1072 * 1073 * The id returned by the below is not valid, but the only 1074 * caller passing non-NULL of_ids here is only interested in 1075 * whether or not the return value is NULL. 1076 */ 1077 if (!strcmp(ACPI_DT_NAMESPACE_HID, hwid->id) 1078 && acpi_of_match_device(device, of_ids)) 1079 return id; 1080 } 1081 return NULL; 1082 } 1083 1084 /** 1085 * acpi_match_device - Match a struct device against a given list of ACPI IDs 1086 * @ids: Array of struct acpi_device_id object to match against. 1087 * @dev: The device structure to match. 1088 * 1089 * Check if @dev has a valid ACPI handle and if there is a struct acpi_device 1090 * object for that handle and use that object to match against a given list of 1091 * device IDs. 1092 * 1093 * Return a pointer to the first matching ID on success or %NULL on failure. 1094 */ 1095 const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids, 1096 const struct device *dev) 1097 { 1098 return __acpi_match_device(acpi_companion_match(dev), ids, NULL); 1099 } 1100 EXPORT_SYMBOL_GPL(acpi_match_device); 1101 1102 int acpi_match_device_ids(struct acpi_device *device, 1103 const struct acpi_device_id *ids) 1104 { 1105 return __acpi_match_device(device, ids, NULL) ? 0 : -ENOENT; 1106 } 1107 EXPORT_SYMBOL(acpi_match_device_ids); 1108 1109 bool acpi_driver_match_device(struct device *dev, 1110 const struct device_driver *drv) 1111 { 1112 if (!drv->acpi_match_table) 1113 return acpi_of_match_device(ACPI_COMPANION(dev), 1114 drv->of_match_table); 1115 1116 return !!__acpi_match_device(acpi_companion_match(dev), 1117 drv->acpi_match_table, drv->of_match_table); 1118 } 1119 EXPORT_SYMBOL_GPL(acpi_driver_match_device); 1120 1121 static void acpi_free_power_resources_lists(struct acpi_device *device) 1122 { 1123 int i; 1124 1125 if (device->wakeup.flags.valid) 1126 acpi_power_resources_list_free(&device->wakeup.resources); 1127 1128 if (!device->power.flags.power_resources) 1129 return; 1130 1131 for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++) { 1132 struct acpi_device_power_state *ps = &device->power.states[i]; 1133 acpi_power_resources_list_free(&ps->resources); 1134 } 1135 } 1136 1137 static void acpi_device_release(struct device *dev) 1138 { 1139 struct acpi_device *acpi_dev = to_acpi_device(dev); 1140 1141 acpi_free_properties(acpi_dev); 1142 acpi_free_pnp_ids(&acpi_dev->pnp); 1143 acpi_free_power_resources_lists(acpi_dev); 1144 kfree(acpi_dev); 1145 } 1146 1147 static int acpi_bus_match(struct device *dev, struct device_driver *drv) 1148 { 1149 struct acpi_device *acpi_dev = to_acpi_device(dev); 1150 struct acpi_driver *acpi_drv = to_acpi_driver(drv); 1151 1152 return acpi_dev->flags.match_driver 1153 && !acpi_match_device_ids(acpi_dev, acpi_drv->ids); 1154 } 1155 1156 static int acpi_device_uevent(struct device *dev, struct kobj_uevent_env *env) 1157 { 1158 return __acpi_device_uevent_modalias(to_acpi_device(dev), env); 1159 } 1160 1161 static void acpi_device_notify(acpi_handle handle, u32 event, void *data) 1162 { 1163 struct acpi_device *device = data; 1164 1165 device->driver->ops.notify(device, event); 1166 } 1167 1168 static void acpi_device_notify_fixed(void *data) 1169 { 1170 struct acpi_device *device = data; 1171 1172 /* Fixed hardware devices have no handles */ 1173 acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device); 1174 } 1175 1176 static u32 acpi_device_fixed_event(void *data) 1177 { 1178 acpi_os_execute(OSL_NOTIFY_HANDLER, acpi_device_notify_fixed, data); 1179 return ACPI_INTERRUPT_HANDLED; 1180 } 1181 1182 static int acpi_device_install_notify_handler(struct acpi_device *device) 1183 { 1184 acpi_status status; 1185 1186 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) 1187 status = 1188 acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON, 1189 acpi_device_fixed_event, 1190 device); 1191 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) 1192 status = 1193 acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON, 1194 acpi_device_fixed_event, 1195 device); 1196 else 1197 status = acpi_install_notify_handler(device->handle, 1198 ACPI_DEVICE_NOTIFY, 1199 acpi_device_notify, 1200 device); 1201 1202 if (ACPI_FAILURE(status)) 1203 return -EINVAL; 1204 return 0; 1205 } 1206 1207 static void acpi_device_remove_notify_handler(struct acpi_device *device) 1208 { 1209 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) 1210 acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON, 1211 acpi_device_fixed_event); 1212 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) 1213 acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON, 1214 acpi_device_fixed_event); 1215 else 1216 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY, 1217 acpi_device_notify); 1218 } 1219 1220 static int acpi_device_probe(struct device *dev) 1221 { 1222 struct acpi_device *acpi_dev = to_acpi_device(dev); 1223 struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver); 1224 int ret; 1225 1226 if (acpi_dev->handler && !acpi_is_pnp_device(acpi_dev)) 1227 return -EINVAL; 1228 1229 if (!acpi_drv->ops.add) 1230 return -ENOSYS; 1231 1232 ret = acpi_drv->ops.add(acpi_dev); 1233 if (ret) 1234 return ret; 1235 1236 acpi_dev->driver = acpi_drv; 1237 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 1238 "Driver [%s] successfully bound to device [%s]\n", 1239 acpi_drv->name, acpi_dev->pnp.bus_id)); 1240 1241 if (acpi_drv->ops.notify) { 1242 ret = acpi_device_install_notify_handler(acpi_dev); 1243 if (ret) { 1244 if (acpi_drv->ops.remove) 1245 acpi_drv->ops.remove(acpi_dev); 1246 1247 acpi_dev->driver = NULL; 1248 acpi_dev->driver_data = NULL; 1249 return ret; 1250 } 1251 } 1252 1253 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found driver [%s] for device [%s]\n", 1254 acpi_drv->name, acpi_dev->pnp.bus_id)); 1255 get_device(dev); 1256 return 0; 1257 } 1258 1259 static int acpi_device_remove(struct device * dev) 1260 { 1261 struct acpi_device *acpi_dev = to_acpi_device(dev); 1262 struct acpi_driver *acpi_drv = acpi_dev->driver; 1263 1264 if (acpi_drv) { 1265 if (acpi_drv->ops.notify) 1266 acpi_device_remove_notify_handler(acpi_dev); 1267 if (acpi_drv->ops.remove) 1268 acpi_drv->ops.remove(acpi_dev); 1269 } 1270 acpi_dev->driver = NULL; 1271 acpi_dev->driver_data = NULL; 1272 1273 put_device(dev); 1274 return 0; 1275 } 1276 1277 struct bus_type acpi_bus_type = { 1278 .name = "acpi", 1279 .match = acpi_bus_match, 1280 .probe = acpi_device_probe, 1281 .remove = acpi_device_remove, 1282 .uevent = acpi_device_uevent, 1283 }; 1284 1285 static void acpi_device_del(struct acpi_device *device) 1286 { 1287 mutex_lock(&acpi_device_lock); 1288 if (device->parent) 1289 list_del(&device->node); 1290 1291 list_del(&device->wakeup_list); 1292 mutex_unlock(&acpi_device_lock); 1293 1294 acpi_power_add_remove_device(device, false); 1295 acpi_device_remove_files(device); 1296 if (device->remove) 1297 device->remove(device); 1298 1299 device_del(&device->dev); 1300 } 1301 1302 static LIST_HEAD(acpi_device_del_list); 1303 static DEFINE_MUTEX(acpi_device_del_lock); 1304 1305 static void acpi_device_del_work_fn(struct work_struct *work_not_used) 1306 { 1307 for (;;) { 1308 struct acpi_device *adev; 1309 1310 mutex_lock(&acpi_device_del_lock); 1311 1312 if (list_empty(&acpi_device_del_list)) { 1313 mutex_unlock(&acpi_device_del_lock); 1314 break; 1315 } 1316 adev = list_first_entry(&acpi_device_del_list, 1317 struct acpi_device, del_list); 1318 list_del(&adev->del_list); 1319 1320 mutex_unlock(&acpi_device_del_lock); 1321 1322 acpi_device_del(adev); 1323 /* 1324 * Drop references to all power resources that might have been 1325 * used by the device. 1326 */ 1327 acpi_power_transition(adev, ACPI_STATE_D3_COLD); 1328 put_device(&adev->dev); 1329 } 1330 } 1331 1332 /** 1333 * acpi_scan_drop_device - Drop an ACPI device object. 1334 * @handle: Handle of an ACPI namespace node, not used. 1335 * @context: Address of the ACPI device object to drop. 1336 * 1337 * This is invoked by acpi_ns_delete_node() during the removal of the ACPI 1338 * namespace node the device object pointed to by @context is attached to. 1339 * 1340 * The unregistration is carried out asynchronously to avoid running 1341 * acpi_device_del() under the ACPICA's namespace mutex and the list is used to 1342 * ensure the correct ordering (the device objects must be unregistered in the 1343 * same order in which the corresponding namespace nodes are deleted). 1344 */ 1345 static void acpi_scan_drop_device(acpi_handle handle, void *context) 1346 { 1347 static DECLARE_WORK(work, acpi_device_del_work_fn); 1348 struct acpi_device *adev = context; 1349 1350 mutex_lock(&acpi_device_del_lock); 1351 1352 /* 1353 * Use the ACPI hotplug workqueue which is ordered, so this work item 1354 * won't run after any hotplug work items submitted subsequently. That 1355 * prevents attempts to register device objects identical to those being 1356 * deleted from happening concurrently (such attempts result from 1357 * hotplug events handled via the ACPI hotplug workqueue). It also will 1358 * run after all of the work items submitted previosuly, which helps 1359 * those work items to ensure that they are not accessing stale device 1360 * objects. 1361 */ 1362 if (list_empty(&acpi_device_del_list)) 1363 acpi_queue_hotplug_work(&work); 1364 1365 list_add_tail(&adev->del_list, &acpi_device_del_list); 1366 /* Make acpi_ns_validate_handle() return NULL for this handle. */ 1367 adev->handle = INVALID_ACPI_HANDLE; 1368 1369 mutex_unlock(&acpi_device_del_lock); 1370 } 1371 1372 static int acpi_get_device_data(acpi_handle handle, struct acpi_device **device, 1373 void (*callback)(void *)) 1374 { 1375 acpi_status status; 1376 1377 if (!device) 1378 return -EINVAL; 1379 1380 status = acpi_get_data_full(handle, acpi_scan_drop_device, 1381 (void **)device, callback); 1382 if (ACPI_FAILURE(status) || !*device) { 1383 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No context for object [%p]\n", 1384 handle)); 1385 return -ENODEV; 1386 } 1387 return 0; 1388 } 1389 1390 int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device) 1391 { 1392 return acpi_get_device_data(handle, device, NULL); 1393 } 1394 EXPORT_SYMBOL(acpi_bus_get_device); 1395 1396 static void get_acpi_device(void *dev) 1397 { 1398 if (dev) 1399 get_device(&((struct acpi_device *)dev)->dev); 1400 } 1401 1402 struct acpi_device *acpi_bus_get_acpi_device(acpi_handle handle) 1403 { 1404 struct acpi_device *adev = NULL; 1405 1406 acpi_get_device_data(handle, &adev, get_acpi_device); 1407 return adev; 1408 } 1409 1410 void acpi_bus_put_acpi_device(struct acpi_device *adev) 1411 { 1412 put_device(&adev->dev); 1413 } 1414 1415 int acpi_device_add(struct acpi_device *device, 1416 void (*release)(struct device *)) 1417 { 1418 int result; 1419 struct acpi_device_bus_id *acpi_device_bus_id, *new_bus_id; 1420 int found = 0; 1421 1422 if (device->handle) { 1423 acpi_status status; 1424 1425 status = acpi_attach_data(device->handle, acpi_scan_drop_device, 1426 device); 1427 if (ACPI_FAILURE(status)) { 1428 acpi_handle_err(device->handle, 1429 "Unable to attach device data\n"); 1430 return -ENODEV; 1431 } 1432 } 1433 1434 /* 1435 * Linkage 1436 * ------- 1437 * Link this device to its parent and siblings. 1438 */ 1439 INIT_LIST_HEAD(&device->children); 1440 INIT_LIST_HEAD(&device->node); 1441 INIT_LIST_HEAD(&device->wakeup_list); 1442 INIT_LIST_HEAD(&device->physical_node_list); 1443 INIT_LIST_HEAD(&device->del_list); 1444 mutex_init(&device->physical_node_lock); 1445 1446 new_bus_id = kzalloc(sizeof(struct acpi_device_bus_id), GFP_KERNEL); 1447 if (!new_bus_id) { 1448 pr_err(PREFIX "Memory allocation error\n"); 1449 result = -ENOMEM; 1450 goto err_detach; 1451 } 1452 1453 mutex_lock(&acpi_device_lock); 1454 /* 1455 * Find suitable bus_id and instance number in acpi_bus_id_list 1456 * If failed, create one and link it into acpi_bus_id_list 1457 */ 1458 list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node) { 1459 if (!strcmp(acpi_device_bus_id->bus_id, 1460 acpi_device_hid(device))) { 1461 acpi_device_bus_id->instance_no++; 1462 found = 1; 1463 kfree(new_bus_id); 1464 break; 1465 } 1466 } 1467 if (!found) { 1468 acpi_device_bus_id = new_bus_id; 1469 strcpy(acpi_device_bus_id->bus_id, acpi_device_hid(device)); 1470 acpi_device_bus_id->instance_no = 0; 1471 list_add_tail(&acpi_device_bus_id->node, &acpi_bus_id_list); 1472 } 1473 dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, acpi_device_bus_id->instance_no); 1474 1475 if (device->parent) 1476 list_add_tail(&device->node, &device->parent->children); 1477 1478 if (device->wakeup.flags.valid) 1479 list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list); 1480 mutex_unlock(&acpi_device_lock); 1481 1482 if (device->parent) 1483 device->dev.parent = &device->parent->dev; 1484 device->dev.bus = &acpi_bus_type; 1485 device->dev.release = release; 1486 result = device_add(&device->dev); 1487 if (result) { 1488 dev_err(&device->dev, "Error registering device\n"); 1489 goto err; 1490 } 1491 1492 result = acpi_device_setup_files(device); 1493 if (result) 1494 printk(KERN_ERR PREFIX "Error creating sysfs interface for device %s\n", 1495 dev_name(&device->dev)); 1496 1497 return 0; 1498 1499 err: 1500 mutex_lock(&acpi_device_lock); 1501 if (device->parent) 1502 list_del(&device->node); 1503 list_del(&device->wakeup_list); 1504 mutex_unlock(&acpi_device_lock); 1505 1506 err_detach: 1507 acpi_detach_data(device->handle, acpi_scan_drop_device); 1508 return result; 1509 } 1510 1511 struct acpi_device *acpi_get_next_child(struct device *dev, 1512 struct acpi_device *child) 1513 { 1514 struct acpi_device *adev = ACPI_COMPANION(dev); 1515 struct list_head *head, *next; 1516 1517 if (!adev) 1518 return NULL; 1519 1520 head = &adev->children; 1521 if (list_empty(head)) 1522 return NULL; 1523 1524 if (!child) 1525 return list_first_entry(head, struct acpi_device, node); 1526 1527 next = child->node.next; 1528 return next == head ? NULL : list_entry(next, struct acpi_device, node); 1529 } 1530 1531 /* -------------------------------------------------------------------------- 1532 Driver Management 1533 -------------------------------------------------------------------------- */ 1534 /** 1535 * acpi_bus_register_driver - register a driver with the ACPI bus 1536 * @driver: driver being registered 1537 * 1538 * Registers a driver with the ACPI bus. Searches the namespace for all 1539 * devices that match the driver's criteria and binds. Returns zero for 1540 * success or a negative error status for failure. 1541 */ 1542 int acpi_bus_register_driver(struct acpi_driver *driver) 1543 { 1544 int ret; 1545 1546 if (acpi_disabled) 1547 return -ENODEV; 1548 driver->drv.name = driver->name; 1549 driver->drv.bus = &acpi_bus_type; 1550 driver->drv.owner = driver->owner; 1551 1552 ret = driver_register(&driver->drv); 1553 return ret; 1554 } 1555 1556 EXPORT_SYMBOL(acpi_bus_register_driver); 1557 1558 /** 1559 * acpi_bus_unregister_driver - unregisters a driver with the ACPI bus 1560 * @driver: driver to unregister 1561 * 1562 * Unregisters a driver with the ACPI bus. Searches the namespace for all 1563 * devices that match the driver's criteria and unbinds. 1564 */ 1565 void acpi_bus_unregister_driver(struct acpi_driver *driver) 1566 { 1567 driver_unregister(&driver->drv); 1568 } 1569 1570 EXPORT_SYMBOL(acpi_bus_unregister_driver); 1571 1572 /* -------------------------------------------------------------------------- 1573 Device Enumeration 1574 -------------------------------------------------------------------------- */ 1575 static struct acpi_device *acpi_bus_get_parent(acpi_handle handle) 1576 { 1577 struct acpi_device *device = NULL; 1578 acpi_status status; 1579 1580 /* 1581 * Fixed hardware devices do not appear in the namespace and do not 1582 * have handles, but we fabricate acpi_devices for them, so we have 1583 * to deal with them specially. 1584 */ 1585 if (!handle) 1586 return acpi_root; 1587 1588 do { 1589 status = acpi_get_parent(handle, &handle); 1590 if (ACPI_FAILURE(status)) 1591 return status == AE_NULL_ENTRY ? NULL : acpi_root; 1592 } while (acpi_bus_get_device(handle, &device)); 1593 return device; 1594 } 1595 1596 acpi_status 1597 acpi_bus_get_ejd(acpi_handle handle, acpi_handle *ejd) 1598 { 1599 acpi_status status; 1600 acpi_handle tmp; 1601 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; 1602 union acpi_object *obj; 1603 1604 status = acpi_get_handle(handle, "_EJD", &tmp); 1605 if (ACPI_FAILURE(status)) 1606 return status; 1607 1608 status = acpi_evaluate_object(handle, "_EJD", NULL, &buffer); 1609 if (ACPI_SUCCESS(status)) { 1610 obj = buffer.pointer; 1611 status = acpi_get_handle(ACPI_ROOT_OBJECT, obj->string.pointer, 1612 ejd); 1613 kfree(buffer.pointer); 1614 } 1615 return status; 1616 } 1617 EXPORT_SYMBOL_GPL(acpi_bus_get_ejd); 1618 1619 static int acpi_bus_extract_wakeup_device_power_package(acpi_handle handle, 1620 struct acpi_device_wakeup *wakeup) 1621 { 1622 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 1623 union acpi_object *package = NULL; 1624 union acpi_object *element = NULL; 1625 acpi_status status; 1626 int err = -ENODATA; 1627 1628 if (!wakeup) 1629 return -EINVAL; 1630 1631 INIT_LIST_HEAD(&wakeup->resources); 1632 1633 /* _PRW */ 1634 status = acpi_evaluate_object(handle, "_PRW", NULL, &buffer); 1635 if (ACPI_FAILURE(status)) { 1636 ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PRW")); 1637 return err; 1638 } 1639 1640 package = (union acpi_object *)buffer.pointer; 1641 1642 if (!package || package->package.count < 2) 1643 goto out; 1644 1645 element = &(package->package.elements[0]); 1646 if (!element) 1647 goto out; 1648 1649 if (element->type == ACPI_TYPE_PACKAGE) { 1650 if ((element->package.count < 2) || 1651 (element->package.elements[0].type != 1652 ACPI_TYPE_LOCAL_REFERENCE) 1653 || (element->package.elements[1].type != ACPI_TYPE_INTEGER)) 1654 goto out; 1655 1656 wakeup->gpe_device = 1657 element->package.elements[0].reference.handle; 1658 wakeup->gpe_number = 1659 (u32) element->package.elements[1].integer.value; 1660 } else if (element->type == ACPI_TYPE_INTEGER) { 1661 wakeup->gpe_device = NULL; 1662 wakeup->gpe_number = element->integer.value; 1663 } else { 1664 goto out; 1665 } 1666 1667 element = &(package->package.elements[1]); 1668 if (element->type != ACPI_TYPE_INTEGER) 1669 goto out; 1670 1671 wakeup->sleep_state = element->integer.value; 1672 1673 err = acpi_extract_power_resources(package, 2, &wakeup->resources); 1674 if (err) 1675 goto out; 1676 1677 if (!list_empty(&wakeup->resources)) { 1678 int sleep_state; 1679 1680 err = acpi_power_wakeup_list_init(&wakeup->resources, 1681 &sleep_state); 1682 if (err) { 1683 acpi_handle_warn(handle, "Retrieving current states " 1684 "of wakeup power resources failed\n"); 1685 acpi_power_resources_list_free(&wakeup->resources); 1686 goto out; 1687 } 1688 if (sleep_state < wakeup->sleep_state) { 1689 acpi_handle_warn(handle, "Overriding _PRW sleep state " 1690 "(S%d) by S%d from power resources\n", 1691 (int)wakeup->sleep_state, sleep_state); 1692 wakeup->sleep_state = sleep_state; 1693 } 1694 } 1695 1696 out: 1697 kfree(buffer.pointer); 1698 return err; 1699 } 1700 1701 static void acpi_wakeup_gpe_init(struct acpi_device *device) 1702 { 1703 static const struct acpi_device_id button_device_ids[] = { 1704 {"PNP0C0C", 0}, 1705 {"PNP0C0D", 0}, 1706 {"PNP0C0E", 0}, 1707 {"", 0}, 1708 }; 1709 struct acpi_device_wakeup *wakeup = &device->wakeup; 1710 acpi_status status; 1711 acpi_event_status event_status; 1712 1713 wakeup->flags.notifier_present = 0; 1714 1715 /* Power button, Lid switch always enable wakeup */ 1716 if (!acpi_match_device_ids(device, button_device_ids)) { 1717 wakeup->flags.run_wake = 1; 1718 if (!acpi_match_device_ids(device, &button_device_ids[1])) { 1719 /* Do not use Lid/sleep button for S5 wakeup */ 1720 if (wakeup->sleep_state == ACPI_STATE_S5) 1721 wakeup->sleep_state = ACPI_STATE_S4; 1722 } 1723 acpi_mark_gpe_for_wake(wakeup->gpe_device, wakeup->gpe_number); 1724 device_set_wakeup_capable(&device->dev, true); 1725 return; 1726 } 1727 1728 acpi_setup_gpe_for_wake(device->handle, wakeup->gpe_device, 1729 wakeup->gpe_number); 1730 status = acpi_get_gpe_status(wakeup->gpe_device, wakeup->gpe_number, 1731 &event_status); 1732 if (ACPI_FAILURE(status)) 1733 return; 1734 1735 wakeup->flags.run_wake = !!(event_status & ACPI_EVENT_FLAG_HAS_HANDLER); 1736 } 1737 1738 static void acpi_bus_get_wakeup_device_flags(struct acpi_device *device) 1739 { 1740 int err; 1741 1742 /* Presence of _PRW indicates wake capable */ 1743 if (!acpi_has_method(device->handle, "_PRW")) 1744 return; 1745 1746 err = acpi_bus_extract_wakeup_device_power_package(device->handle, 1747 &device->wakeup); 1748 if (err) { 1749 dev_err(&device->dev, "_PRW evaluation error: %d\n", err); 1750 return; 1751 } 1752 1753 device->wakeup.flags.valid = 1; 1754 device->wakeup.prepare_count = 0; 1755 acpi_wakeup_gpe_init(device); 1756 /* Call _PSW/_DSW object to disable its ability to wake the sleeping 1757 * system for the ACPI device with the _PRW object. 1758 * The _PSW object is depreciated in ACPI 3.0 and is replaced by _DSW. 1759 * So it is necessary to call _DSW object first. Only when it is not 1760 * present will the _PSW object used. 1761 */ 1762 err = acpi_device_sleep_wake(device, 0, 0, 0); 1763 if (err) 1764 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 1765 "error in _DSW or _PSW evaluation\n")); 1766 } 1767 1768 static void acpi_bus_init_power_state(struct acpi_device *device, int state) 1769 { 1770 struct acpi_device_power_state *ps = &device->power.states[state]; 1771 char pathname[5] = { '_', 'P', 'R', '0' + state, '\0' }; 1772 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 1773 acpi_status status; 1774 1775 INIT_LIST_HEAD(&ps->resources); 1776 1777 /* Evaluate "_PRx" to get referenced power resources */ 1778 status = acpi_evaluate_object(device->handle, pathname, NULL, &buffer); 1779 if (ACPI_SUCCESS(status)) { 1780 union acpi_object *package = buffer.pointer; 1781 1782 if (buffer.length && package 1783 && package->type == ACPI_TYPE_PACKAGE 1784 && package->package.count) { 1785 int err = acpi_extract_power_resources(package, 0, 1786 &ps->resources); 1787 if (!err) 1788 device->power.flags.power_resources = 1; 1789 } 1790 ACPI_FREE(buffer.pointer); 1791 } 1792 1793 /* Evaluate "_PSx" to see if we can do explicit sets */ 1794 pathname[2] = 'S'; 1795 if (acpi_has_method(device->handle, pathname)) 1796 ps->flags.explicit_set = 1; 1797 1798 /* State is valid if there are means to put the device into it. */ 1799 if (!list_empty(&ps->resources) || ps->flags.explicit_set) 1800 ps->flags.valid = 1; 1801 1802 ps->power = -1; /* Unknown - driver assigned */ 1803 ps->latency = -1; /* Unknown - driver assigned */ 1804 } 1805 1806 static void acpi_bus_get_power_flags(struct acpi_device *device) 1807 { 1808 u32 i; 1809 1810 /* Presence of _PS0|_PR0 indicates 'power manageable' */ 1811 if (!acpi_has_method(device->handle, "_PS0") && 1812 !acpi_has_method(device->handle, "_PR0")) 1813 return; 1814 1815 device->flags.power_manageable = 1; 1816 1817 /* 1818 * Power Management Flags 1819 */ 1820 if (acpi_has_method(device->handle, "_PSC")) 1821 device->power.flags.explicit_get = 1; 1822 1823 if (acpi_has_method(device->handle, "_IRC")) 1824 device->power.flags.inrush_current = 1; 1825 1826 if (acpi_has_method(device->handle, "_DSW")) 1827 device->power.flags.dsw_present = 1; 1828 1829 /* 1830 * Enumerate supported power management states 1831 */ 1832 for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++) 1833 acpi_bus_init_power_state(device, i); 1834 1835 INIT_LIST_HEAD(&device->power.states[ACPI_STATE_D3_COLD].resources); 1836 if (!list_empty(&device->power.states[ACPI_STATE_D3_HOT].resources)) 1837 device->power.states[ACPI_STATE_D3_COLD].flags.valid = 1; 1838 1839 /* Set defaults for D0 and D3hot states (always valid) */ 1840 device->power.states[ACPI_STATE_D0].flags.valid = 1; 1841 device->power.states[ACPI_STATE_D0].power = 100; 1842 device->power.states[ACPI_STATE_D3_HOT].flags.valid = 1; 1843 1844 if (acpi_bus_init_power(device)) 1845 device->flags.power_manageable = 0; 1846 } 1847 1848 static void acpi_bus_get_flags(struct acpi_device *device) 1849 { 1850 /* Presence of _STA indicates 'dynamic_status' */ 1851 if (acpi_has_method(device->handle, "_STA")) 1852 device->flags.dynamic_status = 1; 1853 1854 /* Presence of _RMV indicates 'removable' */ 1855 if (acpi_has_method(device->handle, "_RMV")) 1856 device->flags.removable = 1; 1857 1858 /* Presence of _EJD|_EJ0 indicates 'ejectable' */ 1859 if (acpi_has_method(device->handle, "_EJD") || 1860 acpi_has_method(device->handle, "_EJ0")) 1861 device->flags.ejectable = 1; 1862 } 1863 1864 static void acpi_device_get_busid(struct acpi_device *device) 1865 { 1866 char bus_id[5] = { '?', 0 }; 1867 struct acpi_buffer buffer = { sizeof(bus_id), bus_id }; 1868 int i = 0; 1869 1870 /* 1871 * Bus ID 1872 * ------ 1873 * The device's Bus ID is simply the object name. 1874 * TBD: Shouldn't this value be unique (within the ACPI namespace)? 1875 */ 1876 if (ACPI_IS_ROOT_DEVICE(device)) { 1877 strcpy(device->pnp.bus_id, "ACPI"); 1878 return; 1879 } 1880 1881 switch (device->device_type) { 1882 case ACPI_BUS_TYPE_POWER_BUTTON: 1883 strcpy(device->pnp.bus_id, "PWRF"); 1884 break; 1885 case ACPI_BUS_TYPE_SLEEP_BUTTON: 1886 strcpy(device->pnp.bus_id, "SLPF"); 1887 break; 1888 default: 1889 acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer); 1890 /* Clean up trailing underscores (if any) */ 1891 for (i = 3; i > 1; i--) { 1892 if (bus_id[i] == '_') 1893 bus_id[i] = '\0'; 1894 else 1895 break; 1896 } 1897 strcpy(device->pnp.bus_id, bus_id); 1898 break; 1899 } 1900 } 1901 1902 /* 1903 * acpi_ata_match - see if an acpi object is an ATA device 1904 * 1905 * If an acpi object has one of the ACPI ATA methods defined, 1906 * then we can safely call it an ATA device. 1907 */ 1908 bool acpi_ata_match(acpi_handle handle) 1909 { 1910 return acpi_has_method(handle, "_GTF") || 1911 acpi_has_method(handle, "_GTM") || 1912 acpi_has_method(handle, "_STM") || 1913 acpi_has_method(handle, "_SDD"); 1914 } 1915 1916 /* 1917 * acpi_bay_match - see if an acpi object is an ejectable driver bay 1918 * 1919 * If an acpi object is ejectable and has one of the ACPI ATA methods defined, 1920 * then we can safely call it an ejectable drive bay 1921 */ 1922 bool acpi_bay_match(acpi_handle handle) 1923 { 1924 acpi_handle phandle; 1925 1926 if (!acpi_has_method(handle, "_EJ0")) 1927 return false; 1928 if (acpi_ata_match(handle)) 1929 return true; 1930 if (ACPI_FAILURE(acpi_get_parent(handle, &phandle))) 1931 return false; 1932 1933 return acpi_ata_match(phandle); 1934 } 1935 1936 bool acpi_device_is_battery(struct acpi_device *adev) 1937 { 1938 struct acpi_hardware_id *hwid; 1939 1940 list_for_each_entry(hwid, &adev->pnp.ids, list) 1941 if (!strcmp("PNP0C0A", hwid->id)) 1942 return true; 1943 1944 return false; 1945 } 1946 1947 static bool is_ejectable_bay(struct acpi_device *adev) 1948 { 1949 acpi_handle handle = adev->handle; 1950 1951 if (acpi_has_method(handle, "_EJ0") && acpi_device_is_battery(adev)) 1952 return true; 1953 1954 return acpi_bay_match(handle); 1955 } 1956 1957 /* 1958 * acpi_dock_match - see if an acpi object has a _DCK method 1959 */ 1960 bool acpi_dock_match(acpi_handle handle) 1961 { 1962 return acpi_has_method(handle, "_DCK"); 1963 } 1964 1965 static acpi_status 1966 acpi_backlight_cap_match(acpi_handle handle, u32 level, void *context, 1967 void **return_value) 1968 { 1969 long *cap = context; 1970 1971 if (acpi_has_method(handle, "_BCM") && 1972 acpi_has_method(handle, "_BCL")) { 1973 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found generic backlight " 1974 "support\n")); 1975 *cap |= ACPI_VIDEO_BACKLIGHT; 1976 if (!acpi_has_method(handle, "_BQC")) 1977 printk(KERN_WARNING FW_BUG PREFIX "No _BQC method, " 1978 "cannot determine initial brightness\n"); 1979 /* We have backlight support, no need to scan further */ 1980 return AE_CTRL_TERMINATE; 1981 } 1982 return 0; 1983 } 1984 1985 /* Returns true if the ACPI object is a video device which can be 1986 * handled by video.ko. 1987 * The device will get a Linux specific CID added in scan.c to 1988 * identify the device as an ACPI graphics device 1989 * Be aware that the graphics device may not be physically present 1990 * Use acpi_video_get_capabilities() to detect general ACPI video 1991 * capabilities of present cards 1992 */ 1993 long acpi_is_video_device(acpi_handle handle) 1994 { 1995 long video_caps = 0; 1996 1997 /* Is this device able to support video switching ? */ 1998 if (acpi_has_method(handle, "_DOD") || acpi_has_method(handle, "_DOS")) 1999 video_caps |= ACPI_VIDEO_OUTPUT_SWITCHING; 2000 2001 /* Is this device able to retrieve a video ROM ? */ 2002 if (acpi_has_method(handle, "_ROM")) 2003 video_caps |= ACPI_VIDEO_ROM_AVAILABLE; 2004 2005 /* Is this device able to configure which video head to be POSTed ? */ 2006 if (acpi_has_method(handle, "_VPO") && 2007 acpi_has_method(handle, "_GPD") && 2008 acpi_has_method(handle, "_SPD")) 2009 video_caps |= ACPI_VIDEO_DEVICE_POSTING; 2010 2011 /* Only check for backlight functionality if one of the above hit. */ 2012 if (video_caps) 2013 acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 2014 ACPI_UINT32_MAX, acpi_backlight_cap_match, NULL, 2015 &video_caps, NULL); 2016 2017 return video_caps; 2018 } 2019 EXPORT_SYMBOL(acpi_is_video_device); 2020 2021 const char *acpi_device_hid(struct acpi_device *device) 2022 { 2023 struct acpi_hardware_id *hid; 2024 2025 if (list_empty(&device->pnp.ids)) 2026 return dummy_hid; 2027 2028 hid = list_first_entry(&device->pnp.ids, struct acpi_hardware_id, list); 2029 return hid->id; 2030 } 2031 EXPORT_SYMBOL(acpi_device_hid); 2032 2033 static void acpi_add_id(struct acpi_device_pnp *pnp, const char *dev_id) 2034 { 2035 struct acpi_hardware_id *id; 2036 2037 id = kmalloc(sizeof(*id), GFP_KERNEL); 2038 if (!id) 2039 return; 2040 2041 id->id = kstrdup(dev_id, GFP_KERNEL); 2042 if (!id->id) { 2043 kfree(id); 2044 return; 2045 } 2046 2047 list_add_tail(&id->list, &pnp->ids); 2048 pnp->type.hardware_id = 1; 2049 } 2050 2051 /* 2052 * Old IBM workstations have a DSDT bug wherein the SMBus object 2053 * lacks the SMBUS01 HID and the methods do not have the necessary "_" 2054 * prefix. Work around this. 2055 */ 2056 static bool acpi_ibm_smbus_match(acpi_handle handle) 2057 { 2058 char node_name[ACPI_PATH_SEGMENT_LENGTH]; 2059 struct acpi_buffer path = { sizeof(node_name), node_name }; 2060 2061 if (!dmi_name_in_vendors("IBM")) 2062 return false; 2063 2064 /* Look for SMBS object */ 2065 if (ACPI_FAILURE(acpi_get_name(handle, ACPI_SINGLE_NAME, &path)) || 2066 strcmp("SMBS", path.pointer)) 2067 return false; 2068 2069 /* Does it have the necessary (but misnamed) methods? */ 2070 if (acpi_has_method(handle, "SBI") && 2071 acpi_has_method(handle, "SBR") && 2072 acpi_has_method(handle, "SBW")) 2073 return true; 2074 2075 return false; 2076 } 2077 2078 static bool acpi_object_is_system_bus(acpi_handle handle) 2079 { 2080 acpi_handle tmp; 2081 2082 if (ACPI_SUCCESS(acpi_get_handle(NULL, "\\_SB", &tmp)) && 2083 tmp == handle) 2084 return true; 2085 if (ACPI_SUCCESS(acpi_get_handle(NULL, "\\_TZ", &tmp)) && 2086 tmp == handle) 2087 return true; 2088 2089 return false; 2090 } 2091 2092 static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp, 2093 int device_type) 2094 { 2095 acpi_status status; 2096 struct acpi_device_info *info; 2097 struct acpi_pnp_device_id_list *cid_list; 2098 int i; 2099 2100 switch (device_type) { 2101 case ACPI_BUS_TYPE_DEVICE: 2102 if (handle == ACPI_ROOT_OBJECT) { 2103 acpi_add_id(pnp, ACPI_SYSTEM_HID); 2104 break; 2105 } 2106 2107 status = acpi_get_object_info(handle, &info); 2108 if (ACPI_FAILURE(status)) { 2109 pr_err(PREFIX "%s: Error reading device info\n", 2110 __func__); 2111 return; 2112 } 2113 2114 if (info->valid & ACPI_VALID_HID) { 2115 acpi_add_id(pnp, info->hardware_id.string); 2116 pnp->type.platform_id = 1; 2117 } 2118 if (info->valid & ACPI_VALID_CID) { 2119 cid_list = &info->compatible_id_list; 2120 for (i = 0; i < cid_list->count; i++) 2121 acpi_add_id(pnp, cid_list->ids[i].string); 2122 } 2123 if (info->valid & ACPI_VALID_ADR) { 2124 pnp->bus_address = info->address; 2125 pnp->type.bus_address = 1; 2126 } 2127 if (info->valid & ACPI_VALID_UID) 2128 pnp->unique_id = kstrdup(info->unique_id.string, 2129 GFP_KERNEL); 2130 if (info->valid & ACPI_VALID_CLS) 2131 acpi_add_id(pnp, info->class_code.string); 2132 2133 kfree(info); 2134 2135 /* 2136 * Some devices don't reliably have _HIDs & _CIDs, so add 2137 * synthetic HIDs to make sure drivers can find them. 2138 */ 2139 if (acpi_is_video_device(handle)) 2140 acpi_add_id(pnp, ACPI_VIDEO_HID); 2141 else if (acpi_bay_match(handle)) 2142 acpi_add_id(pnp, ACPI_BAY_HID); 2143 else if (acpi_dock_match(handle)) 2144 acpi_add_id(pnp, ACPI_DOCK_HID); 2145 else if (acpi_ibm_smbus_match(handle)) 2146 acpi_add_id(pnp, ACPI_SMBUS_IBM_HID); 2147 else if (list_empty(&pnp->ids) && 2148 acpi_object_is_system_bus(handle)) { 2149 /* \_SB, \_TZ, LNXSYBUS */ 2150 acpi_add_id(pnp, ACPI_BUS_HID); 2151 strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME); 2152 strcpy(pnp->device_class, ACPI_BUS_CLASS); 2153 } 2154 2155 break; 2156 case ACPI_BUS_TYPE_POWER: 2157 acpi_add_id(pnp, ACPI_POWER_HID); 2158 break; 2159 case ACPI_BUS_TYPE_PROCESSOR: 2160 acpi_add_id(pnp, ACPI_PROCESSOR_OBJECT_HID); 2161 break; 2162 case ACPI_BUS_TYPE_THERMAL: 2163 acpi_add_id(pnp, ACPI_THERMAL_HID); 2164 break; 2165 case ACPI_BUS_TYPE_POWER_BUTTON: 2166 acpi_add_id(pnp, ACPI_BUTTON_HID_POWERF); 2167 break; 2168 case ACPI_BUS_TYPE_SLEEP_BUTTON: 2169 acpi_add_id(pnp, ACPI_BUTTON_HID_SLEEPF); 2170 break; 2171 } 2172 } 2173 2174 void acpi_free_pnp_ids(struct acpi_device_pnp *pnp) 2175 { 2176 struct acpi_hardware_id *id, *tmp; 2177 2178 list_for_each_entry_safe(id, tmp, &pnp->ids, list) { 2179 kfree(id->id); 2180 kfree(id); 2181 } 2182 kfree(pnp->unique_id); 2183 } 2184 2185 static void acpi_init_coherency(struct acpi_device *adev) 2186 { 2187 unsigned long long cca = 0; 2188 acpi_status status; 2189 struct acpi_device *parent = adev->parent; 2190 2191 if (parent && parent->flags.cca_seen) { 2192 /* 2193 * From ACPI spec, OSPM will ignore _CCA if an ancestor 2194 * already saw one. 2195 */ 2196 adev->flags.cca_seen = 1; 2197 cca = parent->flags.coherent_dma; 2198 } else { 2199 status = acpi_evaluate_integer(adev->handle, "_CCA", 2200 NULL, &cca); 2201 if (ACPI_SUCCESS(status)) 2202 adev->flags.cca_seen = 1; 2203 else if (!IS_ENABLED(CONFIG_ACPI_CCA_REQUIRED)) 2204 /* 2205 * If architecture does not specify that _CCA is 2206 * required for DMA-able devices (e.g. x86), 2207 * we default to _CCA=1. 2208 */ 2209 cca = 1; 2210 else 2211 acpi_handle_debug(adev->handle, 2212 "ACPI device is missing _CCA.\n"); 2213 } 2214 2215 adev->flags.coherent_dma = cca; 2216 } 2217 2218 void acpi_init_device_object(struct acpi_device *device, acpi_handle handle, 2219 int type, unsigned long long sta) 2220 { 2221 INIT_LIST_HEAD(&device->pnp.ids); 2222 device->device_type = type; 2223 device->handle = handle; 2224 device->parent = acpi_bus_get_parent(handle); 2225 device->fwnode.type = FWNODE_ACPI; 2226 acpi_set_device_status(device, sta); 2227 acpi_device_get_busid(device); 2228 acpi_set_pnp_ids(handle, &device->pnp, type); 2229 acpi_init_properties(device); 2230 acpi_bus_get_flags(device); 2231 device->flags.match_driver = false; 2232 device->flags.initialized = true; 2233 device->flags.visited = false; 2234 device_initialize(&device->dev); 2235 dev_set_uevent_suppress(&device->dev, true); 2236 acpi_init_coherency(device); 2237 } 2238 2239 void acpi_device_add_finalize(struct acpi_device *device) 2240 { 2241 dev_set_uevent_suppress(&device->dev, false); 2242 kobject_uevent(&device->dev.kobj, KOBJ_ADD); 2243 } 2244 2245 static int acpi_add_single_object(struct acpi_device **child, 2246 acpi_handle handle, int type, 2247 unsigned long long sta) 2248 { 2249 int result; 2250 struct acpi_device *device; 2251 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 2252 2253 device = kzalloc(sizeof(struct acpi_device), GFP_KERNEL); 2254 if (!device) { 2255 printk(KERN_ERR PREFIX "Memory allocation error\n"); 2256 return -ENOMEM; 2257 } 2258 2259 acpi_init_device_object(device, handle, type, sta); 2260 acpi_bus_get_power_flags(device); 2261 acpi_bus_get_wakeup_device_flags(device); 2262 2263 result = acpi_device_add(device, acpi_device_release); 2264 if (result) { 2265 acpi_device_release(&device->dev); 2266 return result; 2267 } 2268 2269 acpi_power_add_remove_device(device, true); 2270 acpi_device_add_finalize(device); 2271 acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer); 2272 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Added %s [%s] parent %s\n", 2273 dev_name(&device->dev), (char *) buffer.pointer, 2274 device->parent ? dev_name(&device->parent->dev) : "(null)")); 2275 kfree(buffer.pointer); 2276 *child = device; 2277 return 0; 2278 } 2279 2280 static int acpi_bus_type_and_status(acpi_handle handle, int *type, 2281 unsigned long long *sta) 2282 { 2283 acpi_status status; 2284 acpi_object_type acpi_type; 2285 2286 status = acpi_get_type(handle, &acpi_type); 2287 if (ACPI_FAILURE(status)) 2288 return -ENODEV; 2289 2290 switch (acpi_type) { 2291 case ACPI_TYPE_ANY: /* for ACPI_ROOT_OBJECT */ 2292 case ACPI_TYPE_DEVICE: 2293 *type = ACPI_BUS_TYPE_DEVICE; 2294 status = acpi_bus_get_status_handle(handle, sta); 2295 if (ACPI_FAILURE(status)) 2296 return -ENODEV; 2297 break; 2298 case ACPI_TYPE_PROCESSOR: 2299 *type = ACPI_BUS_TYPE_PROCESSOR; 2300 status = acpi_bus_get_status_handle(handle, sta); 2301 if (ACPI_FAILURE(status)) 2302 return -ENODEV; 2303 break; 2304 case ACPI_TYPE_THERMAL: 2305 *type = ACPI_BUS_TYPE_THERMAL; 2306 *sta = ACPI_STA_DEFAULT; 2307 break; 2308 case ACPI_TYPE_POWER: 2309 *type = ACPI_BUS_TYPE_POWER; 2310 *sta = ACPI_STA_DEFAULT; 2311 break; 2312 default: 2313 return -ENODEV; 2314 } 2315 2316 return 0; 2317 } 2318 2319 bool acpi_device_is_present(struct acpi_device *adev) 2320 { 2321 if (adev->status.present || adev->status.functional) 2322 return true; 2323 2324 adev->flags.initialized = false; 2325 return false; 2326 } 2327 2328 static bool acpi_scan_handler_matching(struct acpi_scan_handler *handler, 2329 char *idstr, 2330 const struct acpi_device_id **matchid) 2331 { 2332 const struct acpi_device_id *devid; 2333 2334 if (handler->match) 2335 return handler->match(idstr, matchid); 2336 2337 for (devid = handler->ids; devid->id[0]; devid++) 2338 if (!strcmp((char *)devid->id, idstr)) { 2339 if (matchid) 2340 *matchid = devid; 2341 2342 return true; 2343 } 2344 2345 return false; 2346 } 2347 2348 static struct acpi_scan_handler *acpi_scan_match_handler(char *idstr, 2349 const struct acpi_device_id **matchid) 2350 { 2351 struct acpi_scan_handler *handler; 2352 2353 list_for_each_entry(handler, &acpi_scan_handlers_list, list_node) 2354 if (acpi_scan_handler_matching(handler, idstr, matchid)) 2355 return handler; 2356 2357 return NULL; 2358 } 2359 2360 void acpi_scan_hotplug_enabled(struct acpi_hotplug_profile *hotplug, bool val) 2361 { 2362 if (!!hotplug->enabled == !!val) 2363 return; 2364 2365 mutex_lock(&acpi_scan_lock); 2366 2367 hotplug->enabled = val; 2368 2369 mutex_unlock(&acpi_scan_lock); 2370 } 2371 2372 static void acpi_scan_init_hotplug(struct acpi_device *adev) 2373 { 2374 struct acpi_hardware_id *hwid; 2375 2376 if (acpi_dock_match(adev->handle) || is_ejectable_bay(adev)) { 2377 acpi_dock_add(adev); 2378 return; 2379 } 2380 list_for_each_entry(hwid, &adev->pnp.ids, list) { 2381 struct acpi_scan_handler *handler; 2382 2383 handler = acpi_scan_match_handler(hwid->id, NULL); 2384 if (handler) { 2385 adev->flags.hotplug_notify = true; 2386 break; 2387 } 2388 } 2389 } 2390 2391 static void acpi_device_dep_initialize(struct acpi_device *adev) 2392 { 2393 struct acpi_dep_data *dep; 2394 struct acpi_handle_list dep_devices; 2395 acpi_status status; 2396 int i; 2397 2398 if (!acpi_has_method(adev->handle, "_DEP")) 2399 return; 2400 2401 status = acpi_evaluate_reference(adev->handle, "_DEP", NULL, 2402 &dep_devices); 2403 if (ACPI_FAILURE(status)) { 2404 dev_dbg(&adev->dev, "Failed to evaluate _DEP.\n"); 2405 return; 2406 } 2407 2408 for (i = 0; i < dep_devices.count; i++) { 2409 struct acpi_device_info *info; 2410 int skip; 2411 2412 status = acpi_get_object_info(dep_devices.handles[i], &info); 2413 if (ACPI_FAILURE(status)) { 2414 dev_dbg(&adev->dev, "Error reading _DEP device info\n"); 2415 continue; 2416 } 2417 2418 /* 2419 * Skip the dependency of Windows System Power 2420 * Management Controller 2421 */ 2422 skip = info->valid & ACPI_VALID_HID && 2423 !strcmp(info->hardware_id.string, "INT3396"); 2424 2425 kfree(info); 2426 2427 if (skip) 2428 continue; 2429 2430 dep = kzalloc(sizeof(struct acpi_dep_data), GFP_KERNEL); 2431 if (!dep) 2432 return; 2433 2434 dep->master = dep_devices.handles[i]; 2435 dep->slave = adev->handle; 2436 adev->dep_unmet++; 2437 2438 mutex_lock(&acpi_dep_list_lock); 2439 list_add_tail(&dep->node , &acpi_dep_list); 2440 mutex_unlock(&acpi_dep_list_lock); 2441 } 2442 } 2443 2444 static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl_not_used, 2445 void *not_used, void **return_value) 2446 { 2447 struct acpi_device *device = NULL; 2448 int type; 2449 unsigned long long sta; 2450 int result; 2451 2452 acpi_bus_get_device(handle, &device); 2453 if (device) 2454 goto out; 2455 2456 result = acpi_bus_type_and_status(handle, &type, &sta); 2457 if (result) 2458 return AE_OK; 2459 2460 if (type == ACPI_BUS_TYPE_POWER) { 2461 acpi_add_power_resource(handle); 2462 return AE_OK; 2463 } 2464 2465 acpi_add_single_object(&device, handle, type, sta); 2466 if (!device) 2467 return AE_CTRL_DEPTH; 2468 2469 acpi_scan_init_hotplug(device); 2470 acpi_device_dep_initialize(device); 2471 2472 out: 2473 if (!*return_value) 2474 *return_value = device; 2475 2476 return AE_OK; 2477 } 2478 2479 static int acpi_check_spi_i2c_slave(struct acpi_resource *ares, void *data) 2480 { 2481 bool *is_spi_i2c_slave_p = data; 2482 2483 if (ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS) 2484 return 1; 2485 2486 /* 2487 * devices that are connected to UART still need to be enumerated to 2488 * platform bus 2489 */ 2490 if (ares->data.common_serial_bus.type != ACPI_RESOURCE_SERIAL_TYPE_UART) 2491 *is_spi_i2c_slave_p = true; 2492 2493 /* no need to do more checking */ 2494 return -1; 2495 } 2496 2497 static void acpi_default_enumeration(struct acpi_device *device) 2498 { 2499 struct list_head resource_list; 2500 bool is_spi_i2c_slave = false; 2501 2502 /* 2503 * Do not enemerate SPI/I2C slaves as they will be enuerated by their 2504 * respective parents. 2505 */ 2506 INIT_LIST_HEAD(&resource_list); 2507 acpi_dev_get_resources(device, &resource_list, acpi_check_spi_i2c_slave, 2508 &is_spi_i2c_slave); 2509 acpi_dev_free_resource_list(&resource_list); 2510 if (!is_spi_i2c_slave) 2511 acpi_create_platform_device(device); 2512 } 2513 2514 static const struct acpi_device_id generic_device_ids[] = { 2515 {ACPI_DT_NAMESPACE_HID, }, 2516 {"", }, 2517 }; 2518 2519 static int acpi_generic_device_attach(struct acpi_device *adev, 2520 const struct acpi_device_id *not_used) 2521 { 2522 /* 2523 * Since ACPI_DT_NAMESPACE_HID is the only ID handled here, the test 2524 * below can be unconditional. 2525 */ 2526 if (adev->data.of_compatible) 2527 acpi_default_enumeration(adev); 2528 2529 return 1; 2530 } 2531 2532 static struct acpi_scan_handler generic_device_handler = { 2533 .ids = generic_device_ids, 2534 .attach = acpi_generic_device_attach, 2535 }; 2536 2537 static int acpi_scan_attach_handler(struct acpi_device *device) 2538 { 2539 struct acpi_hardware_id *hwid; 2540 int ret = 0; 2541 2542 list_for_each_entry(hwid, &device->pnp.ids, list) { 2543 const struct acpi_device_id *devid; 2544 struct acpi_scan_handler *handler; 2545 2546 handler = acpi_scan_match_handler(hwid->id, &devid); 2547 if (handler) { 2548 if (!handler->attach) { 2549 device->pnp.type.platform_id = 0; 2550 continue; 2551 } 2552 device->handler = handler; 2553 ret = handler->attach(device, devid); 2554 if (ret > 0) 2555 break; 2556 2557 device->handler = NULL; 2558 if (ret < 0) 2559 break; 2560 } 2561 } 2562 2563 return ret; 2564 } 2565 2566 static void acpi_bus_attach(struct acpi_device *device) 2567 { 2568 struct acpi_device *child; 2569 acpi_handle ejd; 2570 int ret; 2571 2572 if (ACPI_SUCCESS(acpi_bus_get_ejd(device->handle, &ejd))) 2573 register_dock_dependent_device(device, ejd); 2574 2575 acpi_bus_get_status(device); 2576 /* Skip devices that are not present. */ 2577 if (!acpi_device_is_present(device)) { 2578 device->flags.visited = false; 2579 device->flags.power_manageable = 0; 2580 return; 2581 } 2582 if (device->handler) 2583 goto ok; 2584 2585 if (!device->flags.initialized) { 2586 device->flags.power_manageable = 2587 device->power.states[ACPI_STATE_D0].flags.valid; 2588 if (acpi_bus_init_power(device)) 2589 device->flags.power_manageable = 0; 2590 2591 device->flags.initialized = true; 2592 } 2593 device->flags.visited = false; 2594 ret = acpi_scan_attach_handler(device); 2595 if (ret < 0) 2596 return; 2597 2598 device->flags.match_driver = true; 2599 if (!ret) { 2600 ret = device_attach(&device->dev); 2601 if (ret < 0) 2602 return; 2603 2604 if (!ret && device->pnp.type.platform_id) 2605 acpi_default_enumeration(device); 2606 } 2607 device->flags.visited = true; 2608 2609 ok: 2610 list_for_each_entry(child, &device->children, node) 2611 acpi_bus_attach(child); 2612 2613 if (device->handler && device->handler->hotplug.notify_online) 2614 device->handler->hotplug.notify_online(device); 2615 } 2616 2617 void acpi_walk_dep_device_list(acpi_handle handle) 2618 { 2619 struct acpi_dep_data *dep, *tmp; 2620 struct acpi_device *adev; 2621 2622 mutex_lock(&acpi_dep_list_lock); 2623 list_for_each_entry_safe(dep, tmp, &acpi_dep_list, node) { 2624 if (dep->master == handle) { 2625 acpi_bus_get_device(dep->slave, &adev); 2626 if (!adev) 2627 continue; 2628 2629 adev->dep_unmet--; 2630 if (!adev->dep_unmet) 2631 acpi_bus_attach(adev); 2632 list_del(&dep->node); 2633 kfree(dep); 2634 } 2635 } 2636 mutex_unlock(&acpi_dep_list_lock); 2637 } 2638 EXPORT_SYMBOL_GPL(acpi_walk_dep_device_list); 2639 2640 /** 2641 * acpi_bus_scan - Add ACPI device node objects in a given namespace scope. 2642 * @handle: Root of the namespace scope to scan. 2643 * 2644 * Scan a given ACPI tree (probably recently hot-plugged) and create and add 2645 * found devices. 2646 * 2647 * If no devices were found, -ENODEV is returned, but it does not mean that 2648 * there has been a real error. There just have been no suitable ACPI objects 2649 * in the table trunk from which the kernel could create a device and add an 2650 * appropriate driver. 2651 * 2652 * Must be called under acpi_scan_lock. 2653 */ 2654 int acpi_bus_scan(acpi_handle handle) 2655 { 2656 void *device = NULL; 2657 2658 if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device))) 2659 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX, 2660 acpi_bus_check_add, NULL, NULL, &device); 2661 2662 if (device) { 2663 acpi_bus_attach(device); 2664 return 0; 2665 } 2666 return -ENODEV; 2667 } 2668 EXPORT_SYMBOL(acpi_bus_scan); 2669 2670 /** 2671 * acpi_bus_trim - Detach scan handlers and drivers from ACPI device objects. 2672 * @adev: Root of the ACPI namespace scope to walk. 2673 * 2674 * Must be called under acpi_scan_lock. 2675 */ 2676 void acpi_bus_trim(struct acpi_device *adev) 2677 { 2678 struct acpi_scan_handler *handler = adev->handler; 2679 struct acpi_device *child; 2680 2681 list_for_each_entry_reverse(child, &adev->children, node) 2682 acpi_bus_trim(child); 2683 2684 adev->flags.match_driver = false; 2685 if (handler) { 2686 if (handler->detach) 2687 handler->detach(adev); 2688 2689 adev->handler = NULL; 2690 } else { 2691 device_release_driver(&adev->dev); 2692 } 2693 /* 2694 * Most likely, the device is going away, so put it into D3cold before 2695 * that. 2696 */ 2697 acpi_device_set_power(adev, ACPI_STATE_D3_COLD); 2698 adev->flags.initialized = false; 2699 adev->flags.visited = false; 2700 } 2701 EXPORT_SYMBOL_GPL(acpi_bus_trim); 2702 2703 static int acpi_bus_scan_fixed(void) 2704 { 2705 int result = 0; 2706 2707 /* 2708 * Enumerate all fixed-feature devices. 2709 */ 2710 if (!(acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON)) { 2711 struct acpi_device *device = NULL; 2712 2713 result = acpi_add_single_object(&device, NULL, 2714 ACPI_BUS_TYPE_POWER_BUTTON, 2715 ACPI_STA_DEFAULT); 2716 if (result) 2717 return result; 2718 2719 device->flags.match_driver = true; 2720 result = device_attach(&device->dev); 2721 if (result < 0) 2722 return result; 2723 2724 device_init_wakeup(&device->dev, true); 2725 } 2726 2727 if (!(acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON)) { 2728 struct acpi_device *device = NULL; 2729 2730 result = acpi_add_single_object(&device, NULL, 2731 ACPI_BUS_TYPE_SLEEP_BUTTON, 2732 ACPI_STA_DEFAULT); 2733 if (result) 2734 return result; 2735 2736 device->flags.match_driver = true; 2737 result = device_attach(&device->dev); 2738 } 2739 2740 return result < 0 ? result : 0; 2741 } 2742 2743 int __init acpi_scan_init(void) 2744 { 2745 int result; 2746 2747 result = bus_register(&acpi_bus_type); 2748 if (result) { 2749 /* We don't want to quit even if we failed to add suspend/resume */ 2750 printk(KERN_ERR PREFIX "Could not register bus type\n"); 2751 } 2752 2753 acpi_pci_root_init(); 2754 acpi_pci_link_init(); 2755 acpi_processor_init(); 2756 acpi_lpss_init(); 2757 acpi_apd_init(); 2758 acpi_cmos_rtc_init(); 2759 acpi_container_init(); 2760 acpi_memory_hotplug_init(); 2761 acpi_pnp_init(); 2762 acpi_int340x_thermal_init(); 2763 2764 acpi_scan_add_handler(&generic_device_handler); 2765 2766 mutex_lock(&acpi_scan_lock); 2767 /* 2768 * Enumerate devices in the ACPI namespace. 2769 */ 2770 result = acpi_bus_scan(ACPI_ROOT_OBJECT); 2771 if (result) 2772 goto out; 2773 2774 result = acpi_bus_get_device(ACPI_ROOT_OBJECT, &acpi_root); 2775 if (result) 2776 goto out; 2777 2778 /* Fixed feature devices do not exist on HW-reduced platform */ 2779 if (!acpi_gbl_reduced_hardware) { 2780 result = acpi_bus_scan_fixed(); 2781 if (result) { 2782 acpi_detach_data(acpi_root->handle, 2783 acpi_scan_drop_device); 2784 acpi_device_del(acpi_root); 2785 put_device(&acpi_root->dev); 2786 goto out; 2787 } 2788 } 2789 2790 acpi_update_all_gpes(); 2791 2792 out: 2793 mutex_unlock(&acpi_scan_lock); 2794 return result; 2795 } 2796