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