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