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