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