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