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