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