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