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