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 15 #include <asm/pgtable.h> 16 17 #include "internal.h" 18 19 #define _COMPONENT ACPI_BUS_COMPONENT 20 ACPI_MODULE_NAME("scan"); 21 extern struct acpi_device *acpi_root; 22 23 #define ACPI_BUS_CLASS "system_bus" 24 #define ACPI_BUS_HID "LNXSYBUS" 25 #define ACPI_BUS_DEVICE_NAME "System Bus" 26 27 #define ACPI_IS_ROOT_DEVICE(device) (!(device)->parent) 28 29 #define INVALID_ACPI_HANDLE ((acpi_handle)empty_zero_page) 30 31 /* 32 * If set, devices will be hot-removed even if they cannot be put offline 33 * gracefully (from the kernel's standpoint). 34 */ 35 bool acpi_force_hot_remove; 36 37 static const char *dummy_hid = "device"; 38 39 static LIST_HEAD(acpi_bus_id_list); 40 static DEFINE_MUTEX(acpi_scan_lock); 41 static LIST_HEAD(acpi_scan_handlers_list); 42 DEFINE_MUTEX(acpi_device_lock); 43 LIST_HEAD(acpi_wakeup_device_list); 44 45 struct acpi_device_bus_id{ 46 char bus_id[15]; 47 unsigned int instance_no; 48 struct list_head node; 49 }; 50 51 void acpi_scan_lock_acquire(void) 52 { 53 mutex_lock(&acpi_scan_lock); 54 } 55 EXPORT_SYMBOL_GPL(acpi_scan_lock_acquire); 56 57 void acpi_scan_lock_release(void) 58 { 59 mutex_unlock(&acpi_scan_lock); 60 } 61 EXPORT_SYMBOL_GPL(acpi_scan_lock_release); 62 63 int acpi_scan_add_handler(struct acpi_scan_handler *handler) 64 { 65 if (!handler || !handler->attach) 66 return -EINVAL; 67 68 list_add_tail(&handler->list_node, &acpi_scan_handlers_list); 69 return 0; 70 } 71 72 int acpi_scan_add_handler_with_hotplug(struct acpi_scan_handler *handler, 73 const char *hotplug_profile_name) 74 { 75 int error; 76 77 error = acpi_scan_add_handler(handler); 78 if (error) 79 return error; 80 81 acpi_sysfs_add_hotplug_profile(&handler->hotplug, hotplug_profile_name); 82 return 0; 83 } 84 85 /* 86 * Creates hid/cid(s) string needed for modalias and uevent 87 * e.g. on a device with hid:IBM0001 and cid:ACPI0001 you get: 88 * char *modalias: "acpi:IBM0001:ACPI0001" 89 */ 90 static int create_modalias(struct acpi_device *acpi_dev, char *modalias, 91 int size) 92 { 93 int len; 94 int count; 95 struct acpi_hardware_id *id; 96 97 if (list_empty(&acpi_dev->pnp.ids)) 98 return 0; 99 100 len = snprintf(modalias, size, "acpi:"); 101 size -= len; 102 103 list_for_each_entry(id, &acpi_dev->pnp.ids, list) { 104 count = snprintf(&modalias[len], size, "%s:", id->id); 105 if (count < 0 || count >= size) 106 return -EINVAL; 107 len += count; 108 size -= count; 109 } 110 111 modalias[len] = '\0'; 112 return len; 113 } 114 115 static ssize_t 116 acpi_device_modalias_show(struct device *dev, struct device_attribute *attr, char *buf) { 117 struct acpi_device *acpi_dev = to_acpi_device(dev); 118 int len; 119 120 /* Device has no HID and no CID or string is >1024 */ 121 len = create_modalias(acpi_dev, buf, 1024); 122 if (len <= 0) 123 return 0; 124 buf[len++] = '\n'; 125 return len; 126 } 127 static DEVICE_ATTR(modalias, 0444, acpi_device_modalias_show, NULL); 128 129 bool acpi_scan_is_offline(struct acpi_device *adev, bool uevent) 130 { 131 struct acpi_device_physical_node *pn; 132 bool offline = true; 133 134 mutex_lock(&adev->physical_node_lock); 135 136 list_for_each_entry(pn, &adev->physical_node_list, node) 137 if (device_supports_offline(pn->dev) && !pn->dev->offline) { 138 if (uevent) 139 kobject_uevent(&pn->dev->kobj, KOBJ_CHANGE); 140 141 offline = false; 142 break; 143 } 144 145 mutex_unlock(&adev->physical_node_lock); 146 return offline; 147 } 148 149 static acpi_status acpi_bus_offline(acpi_handle handle, u32 lvl, void *data, 150 void **ret_p) 151 { 152 struct acpi_device *device = NULL; 153 struct acpi_device_physical_node *pn; 154 bool second_pass = (bool)data; 155 acpi_status status = AE_OK; 156 157 if (acpi_bus_get_device(handle, &device)) 158 return AE_OK; 159 160 if (device->handler && !device->handler->hotplug.enabled) { 161 *ret_p = &device->dev; 162 return AE_SUPPORT; 163 } 164 165 mutex_lock(&device->physical_node_lock); 166 167 list_for_each_entry(pn, &device->physical_node_list, node) { 168 int ret; 169 170 if (second_pass) { 171 /* Skip devices offlined by the first pass. */ 172 if (pn->put_online) 173 continue; 174 } else { 175 pn->put_online = false; 176 } 177 ret = device_offline(pn->dev); 178 if (acpi_force_hot_remove) 179 continue; 180 181 if (ret >= 0) { 182 pn->put_online = !ret; 183 } else { 184 *ret_p = pn->dev; 185 if (second_pass) { 186 status = AE_ERROR; 187 break; 188 } 189 } 190 } 191 192 mutex_unlock(&device->physical_node_lock); 193 194 return status; 195 } 196 197 static acpi_status acpi_bus_online(acpi_handle handle, u32 lvl, void *data, 198 void **ret_p) 199 { 200 struct acpi_device *device = NULL; 201 struct acpi_device_physical_node *pn; 202 203 if (acpi_bus_get_device(handle, &device)) 204 return AE_OK; 205 206 mutex_lock(&device->physical_node_lock); 207 208 list_for_each_entry(pn, &device->physical_node_list, node) 209 if (pn->put_online) { 210 device_online(pn->dev); 211 pn->put_online = false; 212 } 213 214 mutex_unlock(&device->physical_node_lock); 215 216 return AE_OK; 217 } 218 219 static int acpi_scan_try_to_offline(struct acpi_device *device) 220 { 221 acpi_handle handle = device->handle; 222 struct device *errdev = NULL; 223 acpi_status status; 224 225 /* 226 * Carry out two passes here and ignore errors in the first pass, 227 * because if the devices in question are memory blocks and 228 * CONFIG_MEMCG is set, one of the blocks may hold data structures 229 * that the other blocks depend on, but it is not known in advance which 230 * block holds them. 231 * 232 * If the first pass is successful, the second one isn't needed, though. 233 */ 234 status = acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX, 235 NULL, acpi_bus_offline, (void *)false, 236 (void **)&errdev); 237 if (status == AE_SUPPORT) { 238 dev_warn(errdev, "Offline disabled.\n"); 239 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX, 240 acpi_bus_online, NULL, NULL, NULL); 241 return -EPERM; 242 } 243 acpi_bus_offline(handle, 0, (void *)false, (void **)&errdev); 244 if (errdev) { 245 errdev = NULL; 246 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX, 247 NULL, acpi_bus_offline, (void *)true, 248 (void **)&errdev); 249 if (!errdev || acpi_force_hot_remove) 250 acpi_bus_offline(handle, 0, (void *)true, 251 (void **)&errdev); 252 253 if (errdev && !acpi_force_hot_remove) { 254 dev_warn(errdev, "Offline failed.\n"); 255 acpi_bus_online(handle, 0, NULL, NULL); 256 acpi_walk_namespace(ACPI_TYPE_ANY, handle, 257 ACPI_UINT32_MAX, acpi_bus_online, 258 NULL, NULL, NULL); 259 return -EBUSY; 260 } 261 } 262 return 0; 263 } 264 265 static int acpi_scan_hot_remove(struct acpi_device *device) 266 { 267 acpi_handle handle = device->handle; 268 unsigned long long sta; 269 acpi_status status; 270 271 if (device->handler->hotplug.demand_offline && !acpi_force_hot_remove) { 272 if (!acpi_scan_is_offline(device, true)) 273 return -EBUSY; 274 } else { 275 int error = acpi_scan_try_to_offline(device); 276 if (error) 277 return error; 278 } 279 280 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 281 "Hot-removing device %s...\n", dev_name(&device->dev))); 282 283 acpi_bus_trim(device); 284 285 acpi_evaluate_lck(handle, 0); 286 /* 287 * TBD: _EJD support. 288 */ 289 status = acpi_evaluate_ej0(handle); 290 if (status == AE_NOT_FOUND) 291 return -ENODEV; 292 else if (ACPI_FAILURE(status)) 293 return -EIO; 294 295 /* 296 * Verify if eject was indeed successful. If not, log an error 297 * message. No need to call _OST since _EJ0 call was made OK. 298 */ 299 status = acpi_evaluate_integer(handle, "_STA", NULL, &sta); 300 if (ACPI_FAILURE(status)) { 301 acpi_handle_warn(handle, 302 "Status check after eject failed (0x%x)\n", status); 303 } else if (sta & ACPI_STA_DEVICE_ENABLED) { 304 acpi_handle_warn(handle, 305 "Eject incomplete - status 0x%llx\n", sta); 306 } 307 308 return 0; 309 } 310 311 static int acpi_scan_device_not_present(struct acpi_device *adev) 312 { 313 if (!acpi_device_enumerated(adev)) { 314 dev_warn(&adev->dev, "Still not present\n"); 315 return -EALREADY; 316 } 317 acpi_bus_trim(adev); 318 return 0; 319 } 320 321 static int acpi_scan_device_check(struct acpi_device *adev) 322 { 323 int error; 324 325 acpi_bus_get_status(adev); 326 if (adev->status.present || adev->status.functional) { 327 /* 328 * This function is only called for device objects for which 329 * matching scan handlers exist. The only situation in which 330 * the scan handler is not attached to this device object yet 331 * is when the device has just appeared (either it wasn't 332 * present at all before or it was removed and then added 333 * again). 334 */ 335 if (adev->handler) { 336 dev_warn(&adev->dev, "Already enumerated\n"); 337 return -EALREADY; 338 } 339 error = acpi_bus_scan(adev->handle); 340 if (error) { 341 dev_warn(&adev->dev, "Namespace scan failure\n"); 342 return error; 343 } 344 if (!adev->handler) { 345 dev_warn(&adev->dev, "Enumeration failure\n"); 346 error = -ENODEV; 347 } 348 } else { 349 error = acpi_scan_device_not_present(adev); 350 } 351 return error; 352 } 353 354 static int acpi_scan_bus_check(struct acpi_device *adev) 355 { 356 struct acpi_scan_handler *handler = adev->handler; 357 struct acpi_device *child; 358 int error; 359 360 acpi_bus_get_status(adev); 361 if (!(adev->status.present || adev->status.functional)) { 362 acpi_scan_device_not_present(adev); 363 return 0; 364 } 365 if (handler && handler->hotplug.scan_dependent) 366 return handler->hotplug.scan_dependent(adev); 367 368 error = acpi_bus_scan(adev->handle); 369 if (error) { 370 dev_warn(&adev->dev, "Namespace scan failure\n"); 371 return error; 372 } 373 list_for_each_entry(child, &adev->children, node) { 374 error = acpi_scan_bus_check(child); 375 if (error) 376 return error; 377 } 378 return 0; 379 } 380 381 static void acpi_device_hotplug(void *data, u32 src) 382 { 383 u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE; 384 struct acpi_device *adev = data; 385 int error; 386 387 lock_device_hotplug(); 388 mutex_lock(&acpi_scan_lock); 389 390 /* 391 * The device object's ACPI handle cannot become invalid as long as we 392 * are holding acpi_scan_lock, but it may have become invalid before 393 * that lock was acquired. 394 */ 395 if (adev->handle == INVALID_ACPI_HANDLE) 396 goto out; 397 398 switch (src) { 399 case ACPI_NOTIFY_BUS_CHECK: 400 error = acpi_scan_bus_check(adev); 401 break; 402 case ACPI_NOTIFY_DEVICE_CHECK: 403 error = acpi_scan_device_check(adev); 404 break; 405 case ACPI_NOTIFY_EJECT_REQUEST: 406 case ACPI_OST_EC_OSPM_EJECT: 407 error = acpi_scan_hot_remove(adev); 408 break; 409 default: 410 error = -EINVAL; 411 break; 412 } 413 if (!error) 414 ost_code = ACPI_OST_SC_SUCCESS; 415 416 out: 417 acpi_evaluate_hotplug_ost(adev->handle, src, ost_code, NULL); 418 put_device(&adev->dev); 419 mutex_unlock(&acpi_scan_lock); 420 unlock_device_hotplug(); 421 } 422 423 static void acpi_hotplug_notify_cb(acpi_handle handle, u32 type, void *data) 424 { 425 u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE; 426 struct acpi_scan_handler *handler = data; 427 struct acpi_device *adev; 428 acpi_status status; 429 430 if (acpi_bus_get_device(handle, &adev)) 431 goto err_out; 432 433 switch (type) { 434 case ACPI_NOTIFY_BUS_CHECK: 435 acpi_handle_debug(handle, "ACPI_NOTIFY_BUS_CHECK event\n"); 436 break; 437 case ACPI_NOTIFY_DEVICE_CHECK: 438 acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_CHECK event\n"); 439 break; 440 case ACPI_NOTIFY_EJECT_REQUEST: 441 acpi_handle_debug(handle, "ACPI_NOTIFY_EJECT_REQUEST event\n"); 442 if (!handler->hotplug.enabled) { 443 acpi_handle_err(handle, "Eject disabled\n"); 444 ost_code = ACPI_OST_SC_EJECT_NOT_SUPPORTED; 445 goto err_out; 446 } 447 acpi_evaluate_hotplug_ost(handle, ACPI_NOTIFY_EJECT_REQUEST, 448 ACPI_OST_SC_EJECT_IN_PROGRESS, NULL); 449 break; 450 default: 451 /* non-hotplug event; possibly handled by other handler */ 452 return; 453 } 454 get_device(&adev->dev); 455 status = acpi_hotplug_execute(acpi_device_hotplug, adev, type); 456 if (ACPI_SUCCESS(status)) 457 return; 458 459 put_device(&adev->dev); 460 461 err_out: 462 acpi_evaluate_hotplug_ost(handle, type, ost_code, NULL); 463 } 464 465 static ssize_t real_power_state_show(struct device *dev, 466 struct device_attribute *attr, char *buf) 467 { 468 struct acpi_device *adev = to_acpi_device(dev); 469 int state; 470 int ret; 471 472 ret = acpi_device_get_power(adev, &state); 473 if (ret) 474 return ret; 475 476 return sprintf(buf, "%s\n", acpi_power_state_string(state)); 477 } 478 479 static DEVICE_ATTR(real_power_state, 0444, real_power_state_show, NULL); 480 481 static ssize_t power_state_show(struct device *dev, 482 struct device_attribute *attr, char *buf) 483 { 484 struct acpi_device *adev = to_acpi_device(dev); 485 486 return sprintf(buf, "%s\n", acpi_power_state_string(adev->power.state)); 487 } 488 489 static DEVICE_ATTR(power_state, 0444, power_state_show, NULL); 490 491 static ssize_t 492 acpi_eject_store(struct device *d, struct device_attribute *attr, 493 const char *buf, size_t count) 494 { 495 struct acpi_device *acpi_device = to_acpi_device(d); 496 acpi_object_type not_used; 497 acpi_status status; 498 499 if (!count || buf[0] != '1') 500 return -EINVAL; 501 502 if ((!acpi_device->handler || !acpi_device->handler->hotplug.enabled) 503 && !acpi_device->driver) 504 return -ENODEV; 505 506 status = acpi_get_type(acpi_device->handle, ¬_used); 507 if (ACPI_FAILURE(status) || !acpi_device->flags.ejectable) 508 return -ENODEV; 509 510 acpi_evaluate_hotplug_ost(acpi_device->handle, ACPI_OST_EC_OSPM_EJECT, 511 ACPI_OST_SC_EJECT_IN_PROGRESS, NULL); 512 get_device(&acpi_device->dev); 513 status = acpi_hotplug_execute(acpi_device_hotplug, acpi_device, 514 ACPI_OST_EC_OSPM_EJECT); 515 if (ACPI_SUCCESS(status)) 516 return count; 517 518 put_device(&acpi_device->dev); 519 acpi_evaluate_hotplug_ost(acpi_device->handle, ACPI_OST_EC_OSPM_EJECT, 520 ACPI_OST_SC_NON_SPECIFIC_FAILURE, NULL); 521 return status == AE_NO_MEMORY ? -ENOMEM : -EAGAIN; 522 } 523 524 static DEVICE_ATTR(eject, 0200, NULL, acpi_eject_store); 525 526 static ssize_t 527 acpi_device_hid_show(struct device *dev, struct device_attribute *attr, char *buf) { 528 struct acpi_device *acpi_dev = to_acpi_device(dev); 529 530 return sprintf(buf, "%s\n", acpi_device_hid(acpi_dev)); 531 } 532 static DEVICE_ATTR(hid, 0444, acpi_device_hid_show, NULL); 533 534 static ssize_t acpi_device_uid_show(struct device *dev, 535 struct device_attribute *attr, char *buf) 536 { 537 struct acpi_device *acpi_dev = to_acpi_device(dev); 538 539 return sprintf(buf, "%s\n", acpi_dev->pnp.unique_id); 540 } 541 static DEVICE_ATTR(uid, 0444, acpi_device_uid_show, NULL); 542 543 static ssize_t acpi_device_adr_show(struct device *dev, 544 struct device_attribute *attr, char *buf) 545 { 546 struct acpi_device *acpi_dev = to_acpi_device(dev); 547 548 return sprintf(buf, "0x%08x\n", 549 (unsigned int)(acpi_dev->pnp.bus_address)); 550 } 551 static DEVICE_ATTR(adr, 0444, acpi_device_adr_show, NULL); 552 553 static ssize_t 554 acpi_device_path_show(struct device *dev, struct device_attribute *attr, char *buf) { 555 struct acpi_device *acpi_dev = to_acpi_device(dev); 556 struct acpi_buffer path = {ACPI_ALLOCATE_BUFFER, NULL}; 557 int result; 558 559 result = acpi_get_name(acpi_dev->handle, ACPI_FULL_PATHNAME, &path); 560 if (result) 561 goto end; 562 563 result = sprintf(buf, "%s\n", (char*)path.pointer); 564 kfree(path.pointer); 565 end: 566 return result; 567 } 568 static DEVICE_ATTR(path, 0444, acpi_device_path_show, NULL); 569 570 /* sysfs file that shows description text from the ACPI _STR method */ 571 static ssize_t description_show(struct device *dev, 572 struct device_attribute *attr, 573 char *buf) { 574 struct acpi_device *acpi_dev = to_acpi_device(dev); 575 int result; 576 577 if (acpi_dev->pnp.str_obj == NULL) 578 return 0; 579 580 /* 581 * The _STR object contains a Unicode identifier for a device. 582 * We need to convert to utf-8 so it can be displayed. 583 */ 584 result = utf16s_to_utf8s( 585 (wchar_t *)acpi_dev->pnp.str_obj->buffer.pointer, 586 acpi_dev->pnp.str_obj->buffer.length, 587 UTF16_LITTLE_ENDIAN, buf, 588 PAGE_SIZE); 589 590 buf[result++] = '\n'; 591 592 return result; 593 } 594 static DEVICE_ATTR(description, 0444, description_show, NULL); 595 596 static ssize_t 597 acpi_device_sun_show(struct device *dev, struct device_attribute *attr, 598 char *buf) { 599 struct acpi_device *acpi_dev = to_acpi_device(dev); 600 601 return sprintf(buf, "%lu\n", acpi_dev->pnp.sun); 602 } 603 static DEVICE_ATTR(sun, 0444, acpi_device_sun_show, NULL); 604 605 static ssize_t status_show(struct device *dev, struct device_attribute *attr, 606 char *buf) { 607 struct acpi_device *acpi_dev = to_acpi_device(dev); 608 acpi_status status; 609 unsigned long long sta; 610 611 status = acpi_evaluate_integer(acpi_dev->handle, "_STA", NULL, &sta); 612 if (ACPI_FAILURE(status)) 613 return -ENODEV; 614 615 return sprintf(buf, "%llu\n", sta); 616 } 617 static DEVICE_ATTR_RO(status); 618 619 static int acpi_device_setup_files(struct acpi_device *dev) 620 { 621 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; 622 acpi_status status; 623 unsigned long long sun; 624 int result = 0; 625 626 /* 627 * Devices gotten from FADT don't have a "path" attribute 628 */ 629 if (dev->handle) { 630 result = device_create_file(&dev->dev, &dev_attr_path); 631 if (result) 632 goto end; 633 } 634 635 if (!list_empty(&dev->pnp.ids)) { 636 result = device_create_file(&dev->dev, &dev_attr_hid); 637 if (result) 638 goto end; 639 640 result = device_create_file(&dev->dev, &dev_attr_modalias); 641 if (result) 642 goto end; 643 } 644 645 /* 646 * If device has _STR, 'description' file is created 647 */ 648 if (acpi_has_method(dev->handle, "_STR")) { 649 status = acpi_evaluate_object(dev->handle, "_STR", 650 NULL, &buffer); 651 if (ACPI_FAILURE(status)) 652 buffer.pointer = NULL; 653 dev->pnp.str_obj = buffer.pointer; 654 result = device_create_file(&dev->dev, &dev_attr_description); 655 if (result) 656 goto end; 657 } 658 659 if (dev->pnp.type.bus_address) 660 result = device_create_file(&dev->dev, &dev_attr_adr); 661 if (dev->pnp.unique_id) 662 result = device_create_file(&dev->dev, &dev_attr_uid); 663 664 status = acpi_evaluate_integer(dev->handle, "_SUN", NULL, &sun); 665 if (ACPI_SUCCESS(status)) { 666 dev->pnp.sun = (unsigned long)sun; 667 result = device_create_file(&dev->dev, &dev_attr_sun); 668 if (result) 669 goto end; 670 } else { 671 dev->pnp.sun = (unsigned long)-1; 672 } 673 674 if (acpi_has_method(dev->handle, "_STA")) { 675 result = device_create_file(&dev->dev, &dev_attr_status); 676 if (result) 677 goto end; 678 } 679 680 /* 681 * If device has _EJ0, 'eject' file is created that is used to trigger 682 * hot-removal function from userland. 683 */ 684 if (acpi_has_method(dev->handle, "_EJ0")) { 685 result = device_create_file(&dev->dev, &dev_attr_eject); 686 if (result) 687 return result; 688 } 689 690 if (dev->flags.power_manageable) { 691 result = device_create_file(&dev->dev, &dev_attr_power_state); 692 if (result) 693 return result; 694 695 if (dev->power.flags.power_resources) 696 result = device_create_file(&dev->dev, 697 &dev_attr_real_power_state); 698 } 699 700 end: 701 return result; 702 } 703 704 static void acpi_device_remove_files(struct acpi_device *dev) 705 { 706 if (dev->flags.power_manageable) { 707 device_remove_file(&dev->dev, &dev_attr_power_state); 708 if (dev->power.flags.power_resources) 709 device_remove_file(&dev->dev, 710 &dev_attr_real_power_state); 711 } 712 713 /* 714 * If device has _STR, remove 'description' file 715 */ 716 if (acpi_has_method(dev->handle, "_STR")) { 717 kfree(dev->pnp.str_obj); 718 device_remove_file(&dev->dev, &dev_attr_description); 719 } 720 /* 721 * If device has _EJ0, remove 'eject' file. 722 */ 723 if (acpi_has_method(dev->handle, "_EJ0")) 724 device_remove_file(&dev->dev, &dev_attr_eject); 725 726 if (acpi_has_method(dev->handle, "_SUN")) 727 device_remove_file(&dev->dev, &dev_attr_sun); 728 729 if (dev->pnp.unique_id) 730 device_remove_file(&dev->dev, &dev_attr_uid); 731 if (dev->pnp.type.bus_address) 732 device_remove_file(&dev->dev, &dev_attr_adr); 733 device_remove_file(&dev->dev, &dev_attr_modalias); 734 device_remove_file(&dev->dev, &dev_attr_hid); 735 if (acpi_has_method(dev->handle, "_STA")) 736 device_remove_file(&dev->dev, &dev_attr_status); 737 if (dev->handle) 738 device_remove_file(&dev->dev, &dev_attr_path); 739 } 740 /* -------------------------------------------------------------------------- 741 ACPI Bus operations 742 -------------------------------------------------------------------------- */ 743 744 static const struct acpi_device_id *__acpi_match_device( 745 struct acpi_device *device, const struct acpi_device_id *ids) 746 { 747 const struct acpi_device_id *id; 748 struct acpi_hardware_id *hwid; 749 750 /* 751 * If the device is not present, it is unnecessary to load device 752 * driver for it. 753 */ 754 if (!device->status.present) 755 return NULL; 756 757 for (id = ids; id->id[0]; id++) 758 list_for_each_entry(hwid, &device->pnp.ids, list) 759 if (!strcmp((char *) id->id, hwid->id)) 760 return id; 761 762 return NULL; 763 } 764 765 /** 766 * acpi_match_device - Match a struct device against a given list of ACPI IDs 767 * @ids: Array of struct acpi_device_id object to match against. 768 * @dev: The device structure to match. 769 * 770 * Check if @dev has a valid ACPI handle and if there is a struct acpi_device 771 * object for that handle and use that object to match against a given list of 772 * device IDs. 773 * 774 * Return a pointer to the first matching ID on success or %NULL on failure. 775 */ 776 const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids, 777 const struct device *dev) 778 { 779 struct acpi_device *adev; 780 acpi_handle handle = ACPI_HANDLE(dev); 781 782 if (!ids || !handle || acpi_bus_get_device(handle, &adev)) 783 return NULL; 784 785 return __acpi_match_device(adev, ids); 786 } 787 EXPORT_SYMBOL_GPL(acpi_match_device); 788 789 int acpi_match_device_ids(struct acpi_device *device, 790 const struct acpi_device_id *ids) 791 { 792 return __acpi_match_device(device, ids) ? 0 : -ENOENT; 793 } 794 EXPORT_SYMBOL(acpi_match_device_ids); 795 796 static void acpi_free_power_resources_lists(struct acpi_device *device) 797 { 798 int i; 799 800 if (device->wakeup.flags.valid) 801 acpi_power_resources_list_free(&device->wakeup.resources); 802 803 if (!device->flags.power_manageable) 804 return; 805 806 for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++) { 807 struct acpi_device_power_state *ps = &device->power.states[i]; 808 acpi_power_resources_list_free(&ps->resources); 809 } 810 } 811 812 static void acpi_device_release(struct device *dev) 813 { 814 struct acpi_device *acpi_dev = to_acpi_device(dev); 815 816 acpi_free_pnp_ids(&acpi_dev->pnp); 817 acpi_free_power_resources_lists(acpi_dev); 818 kfree(acpi_dev); 819 } 820 821 static int acpi_bus_match(struct device *dev, struct device_driver *drv) 822 { 823 struct acpi_device *acpi_dev = to_acpi_device(dev); 824 struct acpi_driver *acpi_drv = to_acpi_driver(drv); 825 826 return acpi_dev->flags.match_driver 827 && !acpi_match_device_ids(acpi_dev, acpi_drv->ids); 828 } 829 830 static int acpi_device_uevent(struct device *dev, struct kobj_uevent_env *env) 831 { 832 struct acpi_device *acpi_dev = to_acpi_device(dev); 833 int len; 834 835 if (list_empty(&acpi_dev->pnp.ids)) 836 return 0; 837 838 if (add_uevent_var(env, "MODALIAS=")) 839 return -ENOMEM; 840 len = create_modalias(acpi_dev, &env->buf[env->buflen - 1], 841 sizeof(env->buf) - env->buflen); 842 if (len >= (sizeof(env->buf) - env->buflen)) 843 return -ENOMEM; 844 env->buflen += len; 845 return 0; 846 } 847 848 static void acpi_device_notify(acpi_handle handle, u32 event, void *data) 849 { 850 struct acpi_device *device = data; 851 852 device->driver->ops.notify(device, event); 853 } 854 855 static acpi_status acpi_device_notify_fixed(void *data) 856 { 857 struct acpi_device *device = data; 858 859 /* Fixed hardware devices have no handles */ 860 acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device); 861 return AE_OK; 862 } 863 864 static int acpi_device_install_notify_handler(struct acpi_device *device) 865 { 866 acpi_status status; 867 868 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) 869 status = 870 acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON, 871 acpi_device_notify_fixed, 872 device); 873 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) 874 status = 875 acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON, 876 acpi_device_notify_fixed, 877 device); 878 else 879 status = acpi_install_notify_handler(device->handle, 880 ACPI_DEVICE_NOTIFY, 881 acpi_device_notify, 882 device); 883 884 if (ACPI_FAILURE(status)) 885 return -EINVAL; 886 return 0; 887 } 888 889 static void acpi_device_remove_notify_handler(struct acpi_device *device) 890 { 891 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) 892 acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON, 893 acpi_device_notify_fixed); 894 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) 895 acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON, 896 acpi_device_notify_fixed); 897 else 898 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY, 899 acpi_device_notify); 900 } 901 902 static int acpi_device_probe(struct device *dev) 903 { 904 struct acpi_device *acpi_dev = to_acpi_device(dev); 905 struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver); 906 int ret; 907 908 if (acpi_dev->handler) 909 return -EINVAL; 910 911 if (!acpi_drv->ops.add) 912 return -ENOSYS; 913 914 ret = acpi_drv->ops.add(acpi_dev); 915 if (ret) 916 return ret; 917 918 acpi_dev->driver = acpi_drv; 919 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 920 "Driver [%s] successfully bound to device [%s]\n", 921 acpi_drv->name, acpi_dev->pnp.bus_id)); 922 923 if (acpi_drv->ops.notify) { 924 ret = acpi_device_install_notify_handler(acpi_dev); 925 if (ret) { 926 if (acpi_drv->ops.remove) 927 acpi_drv->ops.remove(acpi_dev); 928 929 acpi_dev->driver = NULL; 930 acpi_dev->driver_data = NULL; 931 return ret; 932 } 933 } 934 935 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found driver [%s] for device [%s]\n", 936 acpi_drv->name, acpi_dev->pnp.bus_id)); 937 get_device(dev); 938 return 0; 939 } 940 941 static int acpi_device_remove(struct device * dev) 942 { 943 struct acpi_device *acpi_dev = to_acpi_device(dev); 944 struct acpi_driver *acpi_drv = acpi_dev->driver; 945 946 if (acpi_drv) { 947 if (acpi_drv->ops.notify) 948 acpi_device_remove_notify_handler(acpi_dev); 949 if (acpi_drv->ops.remove) 950 acpi_drv->ops.remove(acpi_dev); 951 } 952 acpi_dev->driver = NULL; 953 acpi_dev->driver_data = NULL; 954 955 put_device(dev); 956 return 0; 957 } 958 959 struct bus_type acpi_bus_type = { 960 .name = "acpi", 961 .match = acpi_bus_match, 962 .probe = acpi_device_probe, 963 .remove = acpi_device_remove, 964 .uevent = acpi_device_uevent, 965 }; 966 967 static void acpi_device_del(struct acpi_device *device) 968 { 969 mutex_lock(&acpi_device_lock); 970 if (device->parent) 971 list_del(&device->node); 972 973 list_del(&device->wakeup_list); 974 mutex_unlock(&acpi_device_lock); 975 976 acpi_power_add_remove_device(device, false); 977 acpi_device_remove_files(device); 978 if (device->remove) 979 device->remove(device); 980 981 device_del(&device->dev); 982 } 983 984 static LIST_HEAD(acpi_device_del_list); 985 static DEFINE_MUTEX(acpi_device_del_lock); 986 987 static void acpi_device_del_work_fn(struct work_struct *work_not_used) 988 { 989 for (;;) { 990 struct acpi_device *adev; 991 992 mutex_lock(&acpi_device_del_lock); 993 994 if (list_empty(&acpi_device_del_list)) { 995 mutex_unlock(&acpi_device_del_lock); 996 break; 997 } 998 adev = list_first_entry(&acpi_device_del_list, 999 struct acpi_device, del_list); 1000 list_del(&adev->del_list); 1001 1002 mutex_unlock(&acpi_device_del_lock); 1003 1004 acpi_device_del(adev); 1005 /* 1006 * Drop references to all power resources that might have been 1007 * used by the device. 1008 */ 1009 acpi_power_transition(adev, ACPI_STATE_D3_COLD); 1010 put_device(&adev->dev); 1011 } 1012 } 1013 1014 /** 1015 * acpi_scan_drop_device - Drop an ACPI device object. 1016 * @handle: Handle of an ACPI namespace node, not used. 1017 * @context: Address of the ACPI device object to drop. 1018 * 1019 * This is invoked by acpi_ns_delete_node() during the removal of the ACPI 1020 * namespace node the device object pointed to by @context is attached to. 1021 * 1022 * The unregistration is carried out asynchronously to avoid running 1023 * acpi_device_del() under the ACPICA's namespace mutex and the list is used to 1024 * ensure the correct ordering (the device objects must be unregistered in the 1025 * same order in which the corresponding namespace nodes are deleted). 1026 */ 1027 static void acpi_scan_drop_device(acpi_handle handle, void *context) 1028 { 1029 static DECLARE_WORK(work, acpi_device_del_work_fn); 1030 struct acpi_device *adev = context; 1031 1032 mutex_lock(&acpi_device_del_lock); 1033 1034 /* 1035 * Use the ACPI hotplug workqueue which is ordered, so this work item 1036 * won't run after any hotplug work items submitted subsequently. That 1037 * prevents attempts to register device objects identical to those being 1038 * deleted from happening concurrently (such attempts result from 1039 * hotplug events handled via the ACPI hotplug workqueue). It also will 1040 * run after all of the work items submitted previosuly, which helps 1041 * those work items to ensure that they are not accessing stale device 1042 * objects. 1043 */ 1044 if (list_empty(&acpi_device_del_list)) 1045 acpi_queue_hotplug_work(&work); 1046 1047 list_add_tail(&adev->del_list, &acpi_device_del_list); 1048 /* Make acpi_ns_validate_handle() return NULL for this handle. */ 1049 adev->handle = INVALID_ACPI_HANDLE; 1050 1051 mutex_unlock(&acpi_device_del_lock); 1052 } 1053 1054 int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device) 1055 { 1056 acpi_status status; 1057 1058 if (!device) 1059 return -EINVAL; 1060 1061 status = acpi_get_data(handle, acpi_scan_drop_device, (void **)device); 1062 if (ACPI_FAILURE(status) || !*device) { 1063 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No context for object [%p]\n", 1064 handle)); 1065 return -ENODEV; 1066 } 1067 return 0; 1068 } 1069 EXPORT_SYMBOL(acpi_bus_get_device); 1070 1071 int acpi_device_add(struct acpi_device *device, 1072 void (*release)(struct device *)) 1073 { 1074 int result; 1075 struct acpi_device_bus_id *acpi_device_bus_id, *new_bus_id; 1076 int found = 0; 1077 1078 if (device->handle) { 1079 acpi_status status; 1080 1081 status = acpi_attach_data(device->handle, acpi_scan_drop_device, 1082 device); 1083 if (ACPI_FAILURE(status)) { 1084 acpi_handle_err(device->handle, 1085 "Unable to attach device data\n"); 1086 return -ENODEV; 1087 } 1088 } 1089 1090 /* 1091 * Linkage 1092 * ------- 1093 * Link this device to its parent and siblings. 1094 */ 1095 INIT_LIST_HEAD(&device->children); 1096 INIT_LIST_HEAD(&device->node); 1097 INIT_LIST_HEAD(&device->wakeup_list); 1098 INIT_LIST_HEAD(&device->physical_node_list); 1099 INIT_LIST_HEAD(&device->del_list); 1100 mutex_init(&device->physical_node_lock); 1101 1102 new_bus_id = kzalloc(sizeof(struct acpi_device_bus_id), GFP_KERNEL); 1103 if (!new_bus_id) { 1104 pr_err(PREFIX "Memory allocation error\n"); 1105 result = -ENOMEM; 1106 goto err_detach; 1107 } 1108 1109 mutex_lock(&acpi_device_lock); 1110 /* 1111 * Find suitable bus_id and instance number in acpi_bus_id_list 1112 * If failed, create one and link it into acpi_bus_id_list 1113 */ 1114 list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node) { 1115 if (!strcmp(acpi_device_bus_id->bus_id, 1116 acpi_device_hid(device))) { 1117 acpi_device_bus_id->instance_no++; 1118 found = 1; 1119 kfree(new_bus_id); 1120 break; 1121 } 1122 } 1123 if (!found) { 1124 acpi_device_bus_id = new_bus_id; 1125 strcpy(acpi_device_bus_id->bus_id, acpi_device_hid(device)); 1126 acpi_device_bus_id->instance_no = 0; 1127 list_add_tail(&acpi_device_bus_id->node, &acpi_bus_id_list); 1128 } 1129 dev_set_name(&device->dev, "%s:%02x", acpi_device_bus_id->bus_id, acpi_device_bus_id->instance_no); 1130 1131 if (device->parent) 1132 list_add_tail(&device->node, &device->parent->children); 1133 1134 if (device->wakeup.flags.valid) 1135 list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list); 1136 mutex_unlock(&acpi_device_lock); 1137 1138 if (device->parent) 1139 device->dev.parent = &device->parent->dev; 1140 device->dev.bus = &acpi_bus_type; 1141 device->dev.release = release; 1142 result = device_add(&device->dev); 1143 if (result) { 1144 dev_err(&device->dev, "Error registering device\n"); 1145 goto err; 1146 } 1147 1148 result = acpi_device_setup_files(device); 1149 if (result) 1150 printk(KERN_ERR PREFIX "Error creating sysfs interface for device %s\n", 1151 dev_name(&device->dev)); 1152 1153 return 0; 1154 1155 err: 1156 mutex_lock(&acpi_device_lock); 1157 if (device->parent) 1158 list_del(&device->node); 1159 list_del(&device->wakeup_list); 1160 mutex_unlock(&acpi_device_lock); 1161 1162 err_detach: 1163 acpi_detach_data(device->handle, acpi_scan_drop_device); 1164 return result; 1165 } 1166 1167 /* -------------------------------------------------------------------------- 1168 Driver Management 1169 -------------------------------------------------------------------------- */ 1170 /** 1171 * acpi_bus_register_driver - register a driver with the ACPI bus 1172 * @driver: driver being registered 1173 * 1174 * Registers a driver with the ACPI bus. Searches the namespace for all 1175 * devices that match the driver's criteria and binds. Returns zero for 1176 * success or a negative error status for failure. 1177 */ 1178 int acpi_bus_register_driver(struct acpi_driver *driver) 1179 { 1180 int ret; 1181 1182 if (acpi_disabled) 1183 return -ENODEV; 1184 driver->drv.name = driver->name; 1185 driver->drv.bus = &acpi_bus_type; 1186 driver->drv.owner = driver->owner; 1187 1188 ret = driver_register(&driver->drv); 1189 return ret; 1190 } 1191 1192 EXPORT_SYMBOL(acpi_bus_register_driver); 1193 1194 /** 1195 * acpi_bus_unregister_driver - unregisters a driver with the ACPI bus 1196 * @driver: driver to unregister 1197 * 1198 * Unregisters a driver with the ACPI bus. Searches the namespace for all 1199 * devices that match the driver's criteria and unbinds. 1200 */ 1201 void acpi_bus_unregister_driver(struct acpi_driver *driver) 1202 { 1203 driver_unregister(&driver->drv); 1204 } 1205 1206 EXPORT_SYMBOL(acpi_bus_unregister_driver); 1207 1208 /* -------------------------------------------------------------------------- 1209 Device Enumeration 1210 -------------------------------------------------------------------------- */ 1211 static struct acpi_device *acpi_bus_get_parent(acpi_handle handle) 1212 { 1213 struct acpi_device *device = NULL; 1214 acpi_status status; 1215 1216 /* 1217 * Fixed hardware devices do not appear in the namespace and do not 1218 * have handles, but we fabricate acpi_devices for them, so we have 1219 * to deal with them specially. 1220 */ 1221 if (!handle) 1222 return acpi_root; 1223 1224 do { 1225 status = acpi_get_parent(handle, &handle); 1226 if (ACPI_FAILURE(status)) 1227 return status == AE_NULL_ENTRY ? NULL : acpi_root; 1228 } while (acpi_bus_get_device(handle, &device)); 1229 return device; 1230 } 1231 1232 acpi_status 1233 acpi_bus_get_ejd(acpi_handle handle, acpi_handle *ejd) 1234 { 1235 acpi_status status; 1236 acpi_handle tmp; 1237 struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; 1238 union acpi_object *obj; 1239 1240 status = acpi_get_handle(handle, "_EJD", &tmp); 1241 if (ACPI_FAILURE(status)) 1242 return status; 1243 1244 status = acpi_evaluate_object(handle, "_EJD", NULL, &buffer); 1245 if (ACPI_SUCCESS(status)) { 1246 obj = buffer.pointer; 1247 status = acpi_get_handle(ACPI_ROOT_OBJECT, obj->string.pointer, 1248 ejd); 1249 kfree(buffer.pointer); 1250 } 1251 return status; 1252 } 1253 EXPORT_SYMBOL_GPL(acpi_bus_get_ejd); 1254 1255 static int acpi_bus_extract_wakeup_device_power_package(acpi_handle handle, 1256 struct acpi_device_wakeup *wakeup) 1257 { 1258 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 1259 union acpi_object *package = NULL; 1260 union acpi_object *element = NULL; 1261 acpi_status status; 1262 int err = -ENODATA; 1263 1264 if (!wakeup) 1265 return -EINVAL; 1266 1267 INIT_LIST_HEAD(&wakeup->resources); 1268 1269 /* _PRW */ 1270 status = acpi_evaluate_object(handle, "_PRW", NULL, &buffer); 1271 if (ACPI_FAILURE(status)) { 1272 ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PRW")); 1273 return err; 1274 } 1275 1276 package = (union acpi_object *)buffer.pointer; 1277 1278 if (!package || package->package.count < 2) 1279 goto out; 1280 1281 element = &(package->package.elements[0]); 1282 if (!element) 1283 goto out; 1284 1285 if (element->type == ACPI_TYPE_PACKAGE) { 1286 if ((element->package.count < 2) || 1287 (element->package.elements[0].type != 1288 ACPI_TYPE_LOCAL_REFERENCE) 1289 || (element->package.elements[1].type != ACPI_TYPE_INTEGER)) 1290 goto out; 1291 1292 wakeup->gpe_device = 1293 element->package.elements[0].reference.handle; 1294 wakeup->gpe_number = 1295 (u32) element->package.elements[1].integer.value; 1296 } else if (element->type == ACPI_TYPE_INTEGER) { 1297 wakeup->gpe_device = NULL; 1298 wakeup->gpe_number = element->integer.value; 1299 } else { 1300 goto out; 1301 } 1302 1303 element = &(package->package.elements[1]); 1304 if (element->type != ACPI_TYPE_INTEGER) 1305 goto out; 1306 1307 wakeup->sleep_state = element->integer.value; 1308 1309 err = acpi_extract_power_resources(package, 2, &wakeup->resources); 1310 if (err) 1311 goto out; 1312 1313 if (!list_empty(&wakeup->resources)) { 1314 int sleep_state; 1315 1316 err = acpi_power_wakeup_list_init(&wakeup->resources, 1317 &sleep_state); 1318 if (err) { 1319 acpi_handle_warn(handle, "Retrieving current states " 1320 "of wakeup power resources failed\n"); 1321 acpi_power_resources_list_free(&wakeup->resources); 1322 goto out; 1323 } 1324 if (sleep_state < wakeup->sleep_state) { 1325 acpi_handle_warn(handle, "Overriding _PRW sleep state " 1326 "(S%d) by S%d from power resources\n", 1327 (int)wakeup->sleep_state, sleep_state); 1328 wakeup->sleep_state = sleep_state; 1329 } 1330 } 1331 acpi_setup_gpe_for_wake(handle, wakeup->gpe_device, wakeup->gpe_number); 1332 1333 out: 1334 kfree(buffer.pointer); 1335 return err; 1336 } 1337 1338 static void acpi_bus_set_run_wake_flags(struct acpi_device *device) 1339 { 1340 struct acpi_device_id button_device_ids[] = { 1341 {"PNP0C0C", 0}, 1342 {"PNP0C0D", 0}, 1343 {"PNP0C0E", 0}, 1344 {"", 0}, 1345 }; 1346 acpi_status status; 1347 acpi_event_status event_status; 1348 1349 device->wakeup.flags.notifier_present = 0; 1350 1351 /* Power button, Lid switch always enable wakeup */ 1352 if (!acpi_match_device_ids(device, button_device_ids)) { 1353 device->wakeup.flags.run_wake = 1; 1354 if (!acpi_match_device_ids(device, &button_device_ids[1])) { 1355 /* Do not use Lid/sleep button for S5 wakeup */ 1356 if (device->wakeup.sleep_state == ACPI_STATE_S5) 1357 device->wakeup.sleep_state = ACPI_STATE_S4; 1358 } 1359 device_set_wakeup_capable(&device->dev, true); 1360 return; 1361 } 1362 1363 status = acpi_get_gpe_status(device->wakeup.gpe_device, 1364 device->wakeup.gpe_number, 1365 &event_status); 1366 if (status == AE_OK) 1367 device->wakeup.flags.run_wake = 1368 !!(event_status & ACPI_EVENT_FLAG_HANDLE); 1369 } 1370 1371 static void acpi_bus_get_wakeup_device_flags(struct acpi_device *device) 1372 { 1373 int err; 1374 1375 /* Presence of _PRW indicates wake capable */ 1376 if (!acpi_has_method(device->handle, "_PRW")) 1377 return; 1378 1379 err = acpi_bus_extract_wakeup_device_power_package(device->handle, 1380 &device->wakeup); 1381 if (err) { 1382 dev_err(&device->dev, "_PRW evaluation error: %d\n", err); 1383 return; 1384 } 1385 1386 device->wakeup.flags.valid = 1; 1387 device->wakeup.prepare_count = 0; 1388 acpi_bus_set_run_wake_flags(device); 1389 /* Call _PSW/_DSW object to disable its ability to wake the sleeping 1390 * system for the ACPI device with the _PRW object. 1391 * The _PSW object is depreciated in ACPI 3.0 and is replaced by _DSW. 1392 * So it is necessary to call _DSW object first. Only when it is not 1393 * present will the _PSW object used. 1394 */ 1395 err = acpi_device_sleep_wake(device, 0, 0, 0); 1396 if (err) 1397 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 1398 "error in _DSW or _PSW evaluation\n")); 1399 } 1400 1401 static void acpi_bus_init_power_state(struct acpi_device *device, int state) 1402 { 1403 struct acpi_device_power_state *ps = &device->power.states[state]; 1404 char pathname[5] = { '_', 'P', 'R', '0' + state, '\0' }; 1405 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 1406 acpi_status status; 1407 1408 INIT_LIST_HEAD(&ps->resources); 1409 1410 /* Evaluate "_PRx" to get referenced power resources */ 1411 status = acpi_evaluate_object(device->handle, pathname, NULL, &buffer); 1412 if (ACPI_SUCCESS(status)) { 1413 union acpi_object *package = buffer.pointer; 1414 1415 if (buffer.length && package 1416 && package->type == ACPI_TYPE_PACKAGE 1417 && package->package.count) { 1418 int err = acpi_extract_power_resources(package, 0, 1419 &ps->resources); 1420 if (!err) 1421 device->power.flags.power_resources = 1; 1422 } 1423 ACPI_FREE(buffer.pointer); 1424 } 1425 1426 /* Evaluate "_PSx" to see if we can do explicit sets */ 1427 pathname[2] = 'S'; 1428 if (acpi_has_method(device->handle, pathname)) 1429 ps->flags.explicit_set = 1; 1430 1431 /* 1432 * State is valid if there are means to put the device into it. 1433 * D3hot is only valid if _PR3 present. 1434 */ 1435 if (!list_empty(&ps->resources) 1436 || (ps->flags.explicit_set && state < ACPI_STATE_D3_HOT)) { 1437 ps->flags.valid = 1; 1438 ps->flags.os_accessible = 1; 1439 } 1440 1441 ps->power = -1; /* Unknown - driver assigned */ 1442 ps->latency = -1; /* Unknown - driver assigned */ 1443 } 1444 1445 static void acpi_bus_get_power_flags(struct acpi_device *device) 1446 { 1447 u32 i; 1448 1449 /* Presence of _PS0|_PR0 indicates 'power manageable' */ 1450 if (!acpi_has_method(device->handle, "_PS0") && 1451 !acpi_has_method(device->handle, "_PR0")) 1452 return; 1453 1454 device->flags.power_manageable = 1; 1455 1456 /* 1457 * Power Management Flags 1458 */ 1459 if (acpi_has_method(device->handle, "_PSC")) 1460 device->power.flags.explicit_get = 1; 1461 if (acpi_has_method(device->handle, "_IRC")) 1462 device->power.flags.inrush_current = 1; 1463 1464 /* 1465 * Enumerate supported power management states 1466 */ 1467 for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++) 1468 acpi_bus_init_power_state(device, i); 1469 1470 INIT_LIST_HEAD(&device->power.states[ACPI_STATE_D3_COLD].resources); 1471 1472 /* Set defaults for D0 and D3 states (always valid) */ 1473 device->power.states[ACPI_STATE_D0].flags.valid = 1; 1474 device->power.states[ACPI_STATE_D0].power = 100; 1475 device->power.states[ACPI_STATE_D3_COLD].flags.valid = 1; 1476 device->power.states[ACPI_STATE_D3_COLD].power = 0; 1477 1478 /* Set D3cold's explicit_set flag if _PS3 exists. */ 1479 if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set) 1480 device->power.states[ACPI_STATE_D3_COLD].flags.explicit_set = 1; 1481 1482 /* Presence of _PS3 or _PRx means we can put the device into D3 cold */ 1483 if (device->power.states[ACPI_STATE_D3_HOT].flags.explicit_set || 1484 device->power.flags.power_resources) 1485 device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible = 1; 1486 1487 if (acpi_bus_init_power(device)) { 1488 acpi_free_power_resources_lists(device); 1489 device->flags.power_manageable = 0; 1490 } 1491 } 1492 1493 static void acpi_bus_get_flags(struct acpi_device *device) 1494 { 1495 /* Presence of _STA indicates 'dynamic_status' */ 1496 if (acpi_has_method(device->handle, "_STA")) 1497 device->flags.dynamic_status = 1; 1498 1499 /* Presence of _RMV indicates 'removable' */ 1500 if (acpi_has_method(device->handle, "_RMV")) 1501 device->flags.removable = 1; 1502 1503 /* Presence of _EJD|_EJ0 indicates 'ejectable' */ 1504 if (acpi_has_method(device->handle, "_EJD") || 1505 acpi_has_method(device->handle, "_EJ0")) 1506 device->flags.ejectable = 1; 1507 } 1508 1509 static void acpi_device_get_busid(struct acpi_device *device) 1510 { 1511 char bus_id[5] = { '?', 0 }; 1512 struct acpi_buffer buffer = { sizeof(bus_id), bus_id }; 1513 int i = 0; 1514 1515 /* 1516 * Bus ID 1517 * ------ 1518 * The device's Bus ID is simply the object name. 1519 * TBD: Shouldn't this value be unique (within the ACPI namespace)? 1520 */ 1521 if (ACPI_IS_ROOT_DEVICE(device)) { 1522 strcpy(device->pnp.bus_id, "ACPI"); 1523 return; 1524 } 1525 1526 switch (device->device_type) { 1527 case ACPI_BUS_TYPE_POWER_BUTTON: 1528 strcpy(device->pnp.bus_id, "PWRF"); 1529 break; 1530 case ACPI_BUS_TYPE_SLEEP_BUTTON: 1531 strcpy(device->pnp.bus_id, "SLPF"); 1532 break; 1533 default: 1534 acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer); 1535 /* Clean up trailing underscores (if any) */ 1536 for (i = 3; i > 1; i--) { 1537 if (bus_id[i] == '_') 1538 bus_id[i] = '\0'; 1539 else 1540 break; 1541 } 1542 strcpy(device->pnp.bus_id, bus_id); 1543 break; 1544 } 1545 } 1546 1547 /* 1548 * acpi_ata_match - see if an acpi object is an ATA device 1549 * 1550 * If an acpi object has one of the ACPI ATA methods defined, 1551 * then we can safely call it an ATA device. 1552 */ 1553 bool acpi_ata_match(acpi_handle handle) 1554 { 1555 return acpi_has_method(handle, "_GTF") || 1556 acpi_has_method(handle, "_GTM") || 1557 acpi_has_method(handle, "_STM") || 1558 acpi_has_method(handle, "_SDD"); 1559 } 1560 1561 /* 1562 * acpi_bay_match - see if an acpi object is an ejectable driver bay 1563 * 1564 * If an acpi object is ejectable and has one of the ACPI ATA methods defined, 1565 * then we can safely call it an ejectable drive bay 1566 */ 1567 bool acpi_bay_match(acpi_handle handle) 1568 { 1569 acpi_handle phandle; 1570 1571 if (!acpi_has_method(handle, "_EJ0")) 1572 return false; 1573 if (acpi_ata_match(handle)) 1574 return true; 1575 if (ACPI_FAILURE(acpi_get_parent(handle, &phandle))) 1576 return false; 1577 1578 return acpi_ata_match(phandle); 1579 } 1580 1581 /* 1582 * acpi_dock_match - see if an acpi object has a _DCK method 1583 */ 1584 bool acpi_dock_match(acpi_handle handle) 1585 { 1586 return acpi_has_method(handle, "_DCK"); 1587 } 1588 1589 const char *acpi_device_hid(struct acpi_device *device) 1590 { 1591 struct acpi_hardware_id *hid; 1592 1593 if (list_empty(&device->pnp.ids)) 1594 return dummy_hid; 1595 1596 hid = list_first_entry(&device->pnp.ids, struct acpi_hardware_id, list); 1597 return hid->id; 1598 } 1599 EXPORT_SYMBOL(acpi_device_hid); 1600 1601 static void acpi_add_id(struct acpi_device_pnp *pnp, const char *dev_id) 1602 { 1603 struct acpi_hardware_id *id; 1604 1605 id = kmalloc(sizeof(*id), GFP_KERNEL); 1606 if (!id) 1607 return; 1608 1609 id->id = kstrdup(dev_id, GFP_KERNEL); 1610 if (!id->id) { 1611 kfree(id); 1612 return; 1613 } 1614 1615 list_add_tail(&id->list, &pnp->ids); 1616 pnp->type.hardware_id = 1; 1617 } 1618 1619 /* 1620 * Old IBM workstations have a DSDT bug wherein the SMBus object 1621 * lacks the SMBUS01 HID and the methods do not have the necessary "_" 1622 * prefix. Work around this. 1623 */ 1624 static bool acpi_ibm_smbus_match(acpi_handle handle) 1625 { 1626 char node_name[ACPI_PATH_SEGMENT_LENGTH]; 1627 struct acpi_buffer path = { sizeof(node_name), node_name }; 1628 1629 if (!dmi_name_in_vendors("IBM")) 1630 return false; 1631 1632 /* Look for SMBS object */ 1633 if (ACPI_FAILURE(acpi_get_name(handle, ACPI_SINGLE_NAME, &path)) || 1634 strcmp("SMBS", path.pointer)) 1635 return false; 1636 1637 /* Does it have the necessary (but misnamed) methods? */ 1638 if (acpi_has_method(handle, "SBI") && 1639 acpi_has_method(handle, "SBR") && 1640 acpi_has_method(handle, "SBW")) 1641 return true; 1642 1643 return false; 1644 } 1645 1646 static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp, 1647 int device_type) 1648 { 1649 acpi_status status; 1650 struct acpi_device_info *info; 1651 struct acpi_pnp_device_id_list *cid_list; 1652 int i; 1653 1654 switch (device_type) { 1655 case ACPI_BUS_TYPE_DEVICE: 1656 if (handle == ACPI_ROOT_OBJECT) { 1657 acpi_add_id(pnp, ACPI_SYSTEM_HID); 1658 break; 1659 } 1660 1661 status = acpi_get_object_info(handle, &info); 1662 if (ACPI_FAILURE(status)) { 1663 pr_err(PREFIX "%s: Error reading device info\n", 1664 __func__); 1665 return; 1666 } 1667 1668 if (info->valid & ACPI_VALID_HID) 1669 acpi_add_id(pnp, info->hardware_id.string); 1670 if (info->valid & ACPI_VALID_CID) { 1671 cid_list = &info->compatible_id_list; 1672 for (i = 0; i < cid_list->count; i++) 1673 acpi_add_id(pnp, cid_list->ids[i].string); 1674 } 1675 if (info->valid & ACPI_VALID_ADR) { 1676 pnp->bus_address = info->address; 1677 pnp->type.bus_address = 1; 1678 } 1679 if (info->valid & ACPI_VALID_UID) 1680 pnp->unique_id = kstrdup(info->unique_id.string, 1681 GFP_KERNEL); 1682 1683 kfree(info); 1684 1685 /* 1686 * Some devices don't reliably have _HIDs & _CIDs, so add 1687 * synthetic HIDs to make sure drivers can find them. 1688 */ 1689 if (acpi_is_video_device(handle)) 1690 acpi_add_id(pnp, ACPI_VIDEO_HID); 1691 else if (acpi_bay_match(handle)) 1692 acpi_add_id(pnp, ACPI_BAY_HID); 1693 else if (acpi_dock_match(handle)) 1694 acpi_add_id(pnp, ACPI_DOCK_HID); 1695 else if (acpi_ibm_smbus_match(handle)) 1696 acpi_add_id(pnp, ACPI_SMBUS_IBM_HID); 1697 else if (list_empty(&pnp->ids) && handle == ACPI_ROOT_OBJECT) { 1698 acpi_add_id(pnp, ACPI_BUS_HID); /* \_SB, LNXSYBUS */ 1699 strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME); 1700 strcpy(pnp->device_class, ACPI_BUS_CLASS); 1701 } 1702 1703 break; 1704 case ACPI_BUS_TYPE_POWER: 1705 acpi_add_id(pnp, ACPI_POWER_HID); 1706 break; 1707 case ACPI_BUS_TYPE_PROCESSOR: 1708 acpi_add_id(pnp, ACPI_PROCESSOR_OBJECT_HID); 1709 break; 1710 case ACPI_BUS_TYPE_THERMAL: 1711 acpi_add_id(pnp, ACPI_THERMAL_HID); 1712 break; 1713 case ACPI_BUS_TYPE_POWER_BUTTON: 1714 acpi_add_id(pnp, ACPI_BUTTON_HID_POWERF); 1715 break; 1716 case ACPI_BUS_TYPE_SLEEP_BUTTON: 1717 acpi_add_id(pnp, ACPI_BUTTON_HID_SLEEPF); 1718 break; 1719 } 1720 } 1721 1722 void acpi_free_pnp_ids(struct acpi_device_pnp *pnp) 1723 { 1724 struct acpi_hardware_id *id, *tmp; 1725 1726 list_for_each_entry_safe(id, tmp, &pnp->ids, list) { 1727 kfree(id->id); 1728 kfree(id); 1729 } 1730 kfree(pnp->unique_id); 1731 } 1732 1733 void acpi_init_device_object(struct acpi_device *device, acpi_handle handle, 1734 int type, unsigned long long sta) 1735 { 1736 INIT_LIST_HEAD(&device->pnp.ids); 1737 device->device_type = type; 1738 device->handle = handle; 1739 device->parent = acpi_bus_get_parent(handle); 1740 acpi_set_device_status(device, sta); 1741 acpi_device_get_busid(device); 1742 acpi_set_pnp_ids(handle, &device->pnp, type); 1743 acpi_bus_get_flags(device); 1744 device->flags.match_driver = false; 1745 device->flags.initialized = true; 1746 device->flags.visited = false; 1747 device_initialize(&device->dev); 1748 dev_set_uevent_suppress(&device->dev, true); 1749 } 1750 1751 void acpi_device_add_finalize(struct acpi_device *device) 1752 { 1753 dev_set_uevent_suppress(&device->dev, false); 1754 kobject_uevent(&device->dev.kobj, KOBJ_ADD); 1755 } 1756 1757 static int acpi_add_single_object(struct acpi_device **child, 1758 acpi_handle handle, int type, 1759 unsigned long long sta) 1760 { 1761 int result; 1762 struct acpi_device *device; 1763 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 1764 1765 device = kzalloc(sizeof(struct acpi_device), GFP_KERNEL); 1766 if (!device) { 1767 printk(KERN_ERR PREFIX "Memory allocation error\n"); 1768 return -ENOMEM; 1769 } 1770 1771 acpi_init_device_object(device, handle, type, sta); 1772 acpi_bus_get_power_flags(device); 1773 acpi_bus_get_wakeup_device_flags(device); 1774 1775 result = acpi_device_add(device, acpi_device_release); 1776 if (result) { 1777 acpi_device_release(&device->dev); 1778 return result; 1779 } 1780 1781 acpi_power_add_remove_device(device, true); 1782 acpi_device_add_finalize(device); 1783 acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer); 1784 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Added %s [%s] parent %s\n", 1785 dev_name(&device->dev), (char *) buffer.pointer, 1786 device->parent ? dev_name(&device->parent->dev) : "(null)")); 1787 kfree(buffer.pointer); 1788 *child = device; 1789 return 0; 1790 } 1791 1792 static int acpi_bus_type_and_status(acpi_handle handle, int *type, 1793 unsigned long long *sta) 1794 { 1795 acpi_status status; 1796 acpi_object_type acpi_type; 1797 1798 status = acpi_get_type(handle, &acpi_type); 1799 if (ACPI_FAILURE(status)) 1800 return -ENODEV; 1801 1802 switch (acpi_type) { 1803 case ACPI_TYPE_ANY: /* for ACPI_ROOT_OBJECT */ 1804 case ACPI_TYPE_DEVICE: 1805 *type = ACPI_BUS_TYPE_DEVICE; 1806 status = acpi_bus_get_status_handle(handle, sta); 1807 if (ACPI_FAILURE(status)) 1808 return -ENODEV; 1809 break; 1810 case ACPI_TYPE_PROCESSOR: 1811 *type = ACPI_BUS_TYPE_PROCESSOR; 1812 status = acpi_bus_get_status_handle(handle, sta); 1813 if (ACPI_FAILURE(status)) 1814 return -ENODEV; 1815 break; 1816 case ACPI_TYPE_THERMAL: 1817 *type = ACPI_BUS_TYPE_THERMAL; 1818 *sta = ACPI_STA_DEFAULT; 1819 break; 1820 case ACPI_TYPE_POWER: 1821 *type = ACPI_BUS_TYPE_POWER; 1822 *sta = ACPI_STA_DEFAULT; 1823 break; 1824 default: 1825 return -ENODEV; 1826 } 1827 1828 return 0; 1829 } 1830 1831 bool acpi_device_is_present(struct acpi_device *adev) 1832 { 1833 if (adev->status.present || adev->status.functional) 1834 return true; 1835 1836 adev->flags.initialized = false; 1837 return false; 1838 } 1839 1840 static bool acpi_scan_handler_matching(struct acpi_scan_handler *handler, 1841 char *idstr, 1842 const struct acpi_device_id **matchid) 1843 { 1844 const struct acpi_device_id *devid; 1845 1846 for (devid = handler->ids; devid->id[0]; devid++) 1847 if (!strcmp((char *)devid->id, idstr)) { 1848 if (matchid) 1849 *matchid = devid; 1850 1851 return true; 1852 } 1853 1854 return false; 1855 } 1856 1857 static struct acpi_scan_handler *acpi_scan_match_handler(char *idstr, 1858 const struct acpi_device_id **matchid) 1859 { 1860 struct acpi_scan_handler *handler; 1861 1862 list_for_each_entry(handler, &acpi_scan_handlers_list, list_node) 1863 if (acpi_scan_handler_matching(handler, idstr, matchid)) 1864 return handler; 1865 1866 return NULL; 1867 } 1868 1869 void acpi_scan_hotplug_enabled(struct acpi_hotplug_profile *hotplug, bool val) 1870 { 1871 if (!!hotplug->enabled == !!val) 1872 return; 1873 1874 mutex_lock(&acpi_scan_lock); 1875 1876 hotplug->enabled = val; 1877 1878 mutex_unlock(&acpi_scan_lock); 1879 } 1880 1881 static void acpi_scan_init_hotplug(acpi_handle handle, int type) 1882 { 1883 struct acpi_device_pnp pnp = {}; 1884 struct acpi_hardware_id *hwid; 1885 struct acpi_scan_handler *handler; 1886 1887 INIT_LIST_HEAD(&pnp.ids); 1888 acpi_set_pnp_ids(handle, &pnp, type); 1889 1890 if (!pnp.type.hardware_id) 1891 goto out; 1892 1893 /* 1894 * This relies on the fact that acpi_install_notify_handler() will not 1895 * install the same notify handler routine twice for the same handle. 1896 */ 1897 list_for_each_entry(hwid, &pnp.ids, list) { 1898 handler = acpi_scan_match_handler(hwid->id, NULL); 1899 if (handler) { 1900 acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY, 1901 acpi_hotplug_notify_cb, handler); 1902 break; 1903 } 1904 } 1905 1906 out: 1907 acpi_free_pnp_ids(&pnp); 1908 } 1909 1910 static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl_not_used, 1911 void *not_used, void **return_value) 1912 { 1913 struct acpi_device *device = NULL; 1914 int type; 1915 unsigned long long sta; 1916 int result; 1917 1918 acpi_bus_get_device(handle, &device); 1919 if (device) 1920 goto out; 1921 1922 result = acpi_bus_type_and_status(handle, &type, &sta); 1923 if (result) 1924 return AE_OK; 1925 1926 if (type == ACPI_BUS_TYPE_POWER) { 1927 acpi_add_power_resource(handle); 1928 return AE_OK; 1929 } 1930 1931 acpi_scan_init_hotplug(handle, type); 1932 1933 acpi_add_single_object(&device, handle, type, sta); 1934 if (!device) 1935 return AE_CTRL_DEPTH; 1936 1937 out: 1938 if (!*return_value) 1939 *return_value = device; 1940 1941 return AE_OK; 1942 } 1943 1944 static int acpi_scan_attach_handler(struct acpi_device *device) 1945 { 1946 struct acpi_hardware_id *hwid; 1947 int ret = 0; 1948 1949 list_for_each_entry(hwid, &device->pnp.ids, list) { 1950 const struct acpi_device_id *devid; 1951 struct acpi_scan_handler *handler; 1952 1953 handler = acpi_scan_match_handler(hwid->id, &devid); 1954 if (handler) { 1955 ret = handler->attach(device, devid); 1956 if (ret > 0) { 1957 device->handler = handler; 1958 break; 1959 } else if (ret < 0) { 1960 break; 1961 } 1962 } 1963 } 1964 return ret; 1965 } 1966 1967 static void acpi_bus_attach(struct acpi_device *device) 1968 { 1969 struct acpi_device *child; 1970 int ret; 1971 1972 acpi_bus_get_status(device); 1973 /* Skip devices that are not present. */ 1974 if (!acpi_device_is_present(device)) { 1975 device->flags.visited = false; 1976 return; 1977 } 1978 if (device->handler) 1979 goto ok; 1980 1981 if (!device->flags.initialized) { 1982 acpi_bus_update_power(device, NULL); 1983 device->flags.initialized = true; 1984 } 1985 device->flags.visited = false; 1986 ret = acpi_scan_attach_handler(device); 1987 if (ret < 0) 1988 return; 1989 1990 device->flags.match_driver = true; 1991 if (!ret) { 1992 ret = device_attach(&device->dev); 1993 if (ret < 0) 1994 return; 1995 } 1996 device->flags.visited = true; 1997 1998 ok: 1999 list_for_each_entry(child, &device->children, node) 2000 acpi_bus_attach(child); 2001 } 2002 2003 /** 2004 * acpi_bus_scan - Add ACPI device node objects in a given namespace scope. 2005 * @handle: Root of the namespace scope to scan. 2006 * 2007 * Scan a given ACPI tree (probably recently hot-plugged) and create and add 2008 * found devices. 2009 * 2010 * If no devices were found, -ENODEV is returned, but it does not mean that 2011 * there has been a real error. There just have been no suitable ACPI objects 2012 * in the table trunk from which the kernel could create a device and add an 2013 * appropriate driver. 2014 * 2015 * Must be called under acpi_scan_lock. 2016 */ 2017 int acpi_bus_scan(acpi_handle handle) 2018 { 2019 void *device = NULL; 2020 2021 if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device))) 2022 acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX, 2023 acpi_bus_check_add, NULL, NULL, &device); 2024 2025 if (device) { 2026 acpi_bus_attach(device); 2027 return 0; 2028 } 2029 return -ENODEV; 2030 } 2031 EXPORT_SYMBOL(acpi_bus_scan); 2032 2033 /** 2034 * acpi_bus_trim - Detach scan handlers and drivers from ACPI device objects. 2035 * @adev: Root of the ACPI namespace scope to walk. 2036 * 2037 * Must be called under acpi_scan_lock. 2038 */ 2039 void acpi_bus_trim(struct acpi_device *adev) 2040 { 2041 struct acpi_scan_handler *handler = adev->handler; 2042 struct acpi_device *child; 2043 2044 list_for_each_entry_reverse(child, &adev->children, node) 2045 acpi_bus_trim(child); 2046 2047 if (handler) { 2048 if (handler->detach) 2049 handler->detach(adev); 2050 2051 adev->handler = NULL; 2052 } else { 2053 device_release_driver(&adev->dev); 2054 } 2055 /* 2056 * Most likely, the device is going away, so put it into D3cold before 2057 * that. 2058 */ 2059 acpi_device_set_power(adev, ACPI_STATE_D3_COLD); 2060 adev->flags.initialized = false; 2061 adev->flags.visited = false; 2062 } 2063 EXPORT_SYMBOL_GPL(acpi_bus_trim); 2064 2065 static int acpi_bus_scan_fixed(void) 2066 { 2067 int result = 0; 2068 2069 /* 2070 * Enumerate all fixed-feature devices. 2071 */ 2072 if (!(acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON)) { 2073 struct acpi_device *device = NULL; 2074 2075 result = acpi_add_single_object(&device, NULL, 2076 ACPI_BUS_TYPE_POWER_BUTTON, 2077 ACPI_STA_DEFAULT); 2078 if (result) 2079 return result; 2080 2081 device->flags.match_driver = true; 2082 result = device_attach(&device->dev); 2083 if (result < 0) 2084 return result; 2085 2086 device_init_wakeup(&device->dev, true); 2087 } 2088 2089 if (!(acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON)) { 2090 struct acpi_device *device = NULL; 2091 2092 result = acpi_add_single_object(&device, NULL, 2093 ACPI_BUS_TYPE_SLEEP_BUTTON, 2094 ACPI_STA_DEFAULT); 2095 if (result) 2096 return result; 2097 2098 device->flags.match_driver = true; 2099 result = device_attach(&device->dev); 2100 } 2101 2102 return result < 0 ? result : 0; 2103 } 2104 2105 int __init acpi_scan_init(void) 2106 { 2107 int result; 2108 2109 result = bus_register(&acpi_bus_type); 2110 if (result) { 2111 /* We don't want to quit even if we failed to add suspend/resume */ 2112 printk(KERN_ERR PREFIX "Could not register bus type\n"); 2113 } 2114 2115 acpi_pci_root_init(); 2116 acpi_pci_link_init(); 2117 acpi_processor_init(); 2118 acpi_platform_init(); 2119 acpi_lpss_init(); 2120 acpi_cmos_rtc_init(); 2121 acpi_container_init(); 2122 acpi_memory_hotplug_init(); 2123 acpi_dock_init(); 2124 2125 mutex_lock(&acpi_scan_lock); 2126 /* 2127 * Enumerate devices in the ACPI namespace. 2128 */ 2129 result = acpi_bus_scan(ACPI_ROOT_OBJECT); 2130 if (result) 2131 goto out; 2132 2133 result = acpi_bus_get_device(ACPI_ROOT_OBJECT, &acpi_root); 2134 if (result) 2135 goto out; 2136 2137 result = acpi_bus_scan_fixed(); 2138 if (result) { 2139 acpi_detach_data(acpi_root->handle, acpi_scan_drop_device); 2140 acpi_device_del(acpi_root); 2141 put_device(&acpi_root->dev); 2142 goto out; 2143 } 2144 2145 acpi_update_all_gpes(); 2146 2147 out: 2148 mutex_unlock(&acpi_scan_lock); 2149 return result; 2150 } 2151