linux/drivers/acpi/ec.c
<<
>>
Prefs
   1/*
   2 *  ec.c - ACPI Embedded Controller Driver (v3)
   3 *
   4 *  Copyright (C) 2001-2015 Intel Corporation
   5 *    Author: 2014, 2015 Lv Zheng <lv.zheng@intel.com>
   6 *            2006, 2007 Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
   7 *            2006       Denis Sadykov <denis.m.sadykov@intel.com>
   8 *            2004       Luming Yu <luming.yu@intel.com>
   9 *            2001, 2002 Andy Grover <andrew.grover@intel.com>
  10 *            2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
  11 *  Copyright (C) 2008      Alexey Starikovskiy <astarikovskiy@suse.de>
  12 *
  13 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  14 *
  15 *  This program is free software; you can redistribute it and/or modify
  16 *  it under the terms of the GNU General Public License as published by
  17 *  the Free Software Foundation; either version 2 of the License, or (at
  18 *  your option) any later version.
  19 *
  20 *  This program is distributed in the hope that it will be useful, but
  21 *  WITHOUT ANY WARRANTY; without even the implied warranty of
  22 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  23 *  General Public License for more details.
  24 *
  25 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  26 */
  27
  28/* Uncomment next line to get verbose printout */
  29/* #define DEBUG */
  30#define pr_fmt(fmt) "ACPI: EC: " fmt
  31
  32#include <linux/kernel.h>
  33#include <linux/module.h>
  34#include <linux/init.h>
  35#include <linux/types.h>
  36#include <linux/delay.h>
  37#include <linux/interrupt.h>
  38#include <linux/list.h>
  39#include <linux/spinlock.h>
  40#include <linux/slab.h>
  41#include <linux/acpi.h>
  42#include <linux/dmi.h>
  43#include <asm/io.h>
  44
  45#include "internal.h"
  46
  47#define ACPI_EC_CLASS                   "embedded_controller"
  48#define ACPI_EC_DEVICE_NAME             "Embedded Controller"
  49#define ACPI_EC_FILE_INFO               "info"
  50
  51/* EC status register */
  52#define ACPI_EC_FLAG_OBF        0x01    /* Output buffer full */
  53#define ACPI_EC_FLAG_IBF        0x02    /* Input buffer full */
  54#define ACPI_EC_FLAG_CMD        0x08    /* Input buffer contains a command */
  55#define ACPI_EC_FLAG_BURST      0x10    /* burst mode */
  56#define ACPI_EC_FLAG_SCI        0x20    /* EC-SCI occurred */
  57
  58/*
  59 * The SCI_EVT clearing timing is not defined by the ACPI specification.
  60 * This leads to lots of practical timing issues for the host EC driver.
  61 * The following variations are defined (from the target EC firmware's
  62 * perspective):
  63 * STATUS: After indicating SCI_EVT edge triggered IRQ to the host, the
  64 *         target can clear SCI_EVT at any time so long as the host can see
  65 *         the indication by reading the status register (EC_SC). So the
  66 *         host should re-check SCI_EVT after the first time the SCI_EVT
  67 *         indication is seen, which is the same time the query request
  68 *         (QR_EC) is written to the command register (EC_CMD). SCI_EVT set
  69 *         at any later time could indicate another event. Normally such
  70 *         kind of EC firmware has implemented an event queue and will
  71 *         return 0x00 to indicate "no outstanding event".
  72 * QUERY: After seeing the query request (QR_EC) written to the command
  73 *        register (EC_CMD) by the host and having prepared the responding
  74 *        event value in the data register (EC_DATA), the target can safely
  75 *        clear SCI_EVT because the target can confirm that the current
  76 *        event is being handled by the host. The host then should check
  77 *        SCI_EVT right after reading the event response from the data
  78 *        register (EC_DATA).
  79 * EVENT: After seeing the event response read from the data register
  80 *        (EC_DATA) by the host, the target can clear SCI_EVT. As the
  81 *        target requires time to notice the change in the data register
  82 *        (EC_DATA), the host may be required to wait additional guarding
  83 *        time before checking the SCI_EVT again. Such guarding may not be
  84 *        necessary if the host is notified via another IRQ.
  85 */
  86#define ACPI_EC_EVT_TIMING_STATUS       0x00
  87#define ACPI_EC_EVT_TIMING_QUERY        0x01
  88#define ACPI_EC_EVT_TIMING_EVENT        0x02
  89
  90/* EC commands */
  91enum ec_command {
  92        ACPI_EC_COMMAND_READ = 0x80,
  93        ACPI_EC_COMMAND_WRITE = 0x81,
  94        ACPI_EC_BURST_ENABLE = 0x82,
  95        ACPI_EC_BURST_DISABLE = 0x83,
  96        ACPI_EC_COMMAND_QUERY = 0x84,
  97};
  98
  99#define ACPI_EC_DELAY           500     /* Wait 500ms max. during EC ops */
 100#define ACPI_EC_UDELAY_GLK      1000    /* Wait 1ms max. to get global lock */
 101#define ACPI_EC_UDELAY_POLL     550     /* Wait 1ms for EC transaction polling */
 102#define ACPI_EC_CLEAR_MAX       100     /* Maximum number of events to query
 103                                         * when trying to clear the EC */
 104#define ACPI_EC_MAX_QUERIES     16      /* Maximum number of parallel queries */
 105
 106enum {
 107        EC_FLAGS_QUERY_ENABLED,         /* Query is enabled */
 108        EC_FLAGS_QUERY_PENDING,         /* Query is pending */
 109        EC_FLAGS_QUERY_GUARDING,        /* Guard for SCI_EVT check */
 110        EC_FLAGS_GPE_HANDLER_INSTALLED, /* GPE handler installed */
 111        EC_FLAGS_EC_HANDLER_INSTALLED,  /* OpReg handler installed */
 112        EC_FLAGS_EVT_HANDLER_INSTALLED, /* _Qxx handlers installed */
 113        EC_FLAGS_STARTED,               /* Driver is started */
 114        EC_FLAGS_STOPPED,               /* Driver is stopped */
 115        EC_FLAGS_GPE_MASKED,            /* GPE masked */
 116};
 117
 118#define ACPI_EC_COMMAND_POLL            0x01 /* Available for command byte */
 119#define ACPI_EC_COMMAND_COMPLETE        0x02 /* Completed last byte */
 120
 121/* ec.c is compiled in acpi namespace so this shows up as acpi.ec_delay param */
 122static unsigned int ec_delay __read_mostly = ACPI_EC_DELAY;
 123module_param(ec_delay, uint, 0644);
 124MODULE_PARM_DESC(ec_delay, "Timeout(ms) waited until an EC command completes");
 125
 126static unsigned int ec_max_queries __read_mostly = ACPI_EC_MAX_QUERIES;
 127module_param(ec_max_queries, uint, 0644);
 128MODULE_PARM_DESC(ec_max_queries, "Maximum parallel _Qxx evaluations");
 129
 130static bool ec_busy_polling __read_mostly;
 131module_param(ec_busy_polling, bool, 0644);
 132MODULE_PARM_DESC(ec_busy_polling, "Use busy polling to advance EC transaction");
 133
 134static unsigned int ec_polling_guard __read_mostly = ACPI_EC_UDELAY_POLL;
 135module_param(ec_polling_guard, uint, 0644);
 136MODULE_PARM_DESC(ec_polling_guard, "Guard time(us) between EC accesses in polling modes");
 137
 138static unsigned int ec_event_clearing __read_mostly = ACPI_EC_EVT_TIMING_QUERY;
 139
 140/*
 141 * If the number of false interrupts per one transaction exceeds
 142 * this threshold, will think there is a GPE storm happened and
 143 * will disable the GPE for normal transaction.
 144 */
 145static unsigned int ec_storm_threshold  __read_mostly = 8;
 146module_param(ec_storm_threshold, uint, 0644);
 147MODULE_PARM_DESC(ec_storm_threshold, "Maxim false GPE numbers not considered as GPE storm");
 148
 149static bool ec_freeze_events __read_mostly = false;
 150module_param(ec_freeze_events, bool, 0644);
 151MODULE_PARM_DESC(ec_freeze_events, "Disabling event handling during suspend/resume");
 152
 153static bool ec_no_wakeup __read_mostly;
 154module_param(ec_no_wakeup, bool, 0644);
 155MODULE_PARM_DESC(ec_no_wakeup, "Do not wake up from suspend-to-idle");
 156
 157struct acpi_ec_query_handler {
 158        struct list_head node;
 159        acpi_ec_query_func func;
 160        acpi_handle handle;
 161        void *data;
 162        u8 query_bit;
 163        struct kref kref;
 164};
 165
 166struct transaction {
 167        const u8 *wdata;
 168        u8 *rdata;
 169        unsigned short irq_count;
 170        u8 command;
 171        u8 wi;
 172        u8 ri;
 173        u8 wlen;
 174        u8 rlen;
 175        u8 flags;
 176};
 177
 178struct acpi_ec_query {
 179        struct transaction transaction;
 180        struct work_struct work;
 181        struct acpi_ec_query_handler *handler;
 182};
 183
 184static int acpi_ec_query(struct acpi_ec *ec, u8 *data);
 185static void advance_transaction(struct acpi_ec *ec);
 186static void acpi_ec_event_handler(struct work_struct *work);
 187static void acpi_ec_event_processor(struct work_struct *work);
 188
 189struct acpi_ec *boot_ec, *first_ec;
 190EXPORT_SYMBOL(first_ec);
 191static bool boot_ec_is_ecdt = false;
 192static struct workqueue_struct *ec_query_wq;
 193
 194static int EC_FLAGS_QUERY_HANDSHAKE; /* Needs QR_EC issued when SCI_EVT set */
 195static int EC_FLAGS_CORRECT_ECDT; /* Needs ECDT port address correction */
 196static int EC_FLAGS_IGNORE_DSDT_GPE; /* Needs ECDT GPE as correction setting */
 197
 198/* --------------------------------------------------------------------------
 199 *                           Logging/Debugging
 200 * -------------------------------------------------------------------------- */
 201
 202/*
 203 * Splitters used by the developers to track the boundary of the EC
 204 * handling processes.
 205 */
 206#ifdef DEBUG
 207#define EC_DBG_SEP      " "
 208#define EC_DBG_DRV      "+++++"
 209#define EC_DBG_STM      "====="
 210#define EC_DBG_REQ      "*****"
 211#define EC_DBG_EVT      "#####"
 212#else
 213#define EC_DBG_SEP      ""
 214#define EC_DBG_DRV
 215#define EC_DBG_STM
 216#define EC_DBG_REQ
 217#define EC_DBG_EVT
 218#endif
 219
 220#define ec_log_raw(fmt, ...) \
 221        pr_info(fmt "\n", ##__VA_ARGS__)
 222#define ec_dbg_raw(fmt, ...) \
 223        pr_debug(fmt "\n", ##__VA_ARGS__)
 224#define ec_log(filter, fmt, ...) \
 225        ec_log_raw(filter EC_DBG_SEP fmt EC_DBG_SEP filter, ##__VA_ARGS__)
 226#define ec_dbg(filter, fmt, ...) \
 227        ec_dbg_raw(filter EC_DBG_SEP fmt EC_DBG_SEP filter, ##__VA_ARGS__)
 228
 229#define ec_log_drv(fmt, ...) \
 230        ec_log(EC_DBG_DRV, fmt, ##__VA_ARGS__)
 231#define ec_dbg_drv(fmt, ...) \
 232        ec_dbg(EC_DBG_DRV, fmt, ##__VA_ARGS__)
 233#define ec_dbg_stm(fmt, ...) \
 234        ec_dbg(EC_DBG_STM, fmt, ##__VA_ARGS__)
 235#define ec_dbg_req(fmt, ...) \
 236        ec_dbg(EC_DBG_REQ, fmt, ##__VA_ARGS__)
 237#define ec_dbg_evt(fmt, ...) \
 238        ec_dbg(EC_DBG_EVT, fmt, ##__VA_ARGS__)
 239#define ec_dbg_ref(ec, fmt, ...) \
 240        ec_dbg_raw("%lu: " fmt, ec->reference_count, ## __VA_ARGS__)
 241
 242/* --------------------------------------------------------------------------
 243 *                           Device Flags
 244 * -------------------------------------------------------------------------- */
 245
 246static bool acpi_ec_started(struct acpi_ec *ec)
 247{
 248        return test_bit(EC_FLAGS_STARTED, &ec->flags) &&
 249               !test_bit(EC_FLAGS_STOPPED, &ec->flags);
 250}
 251
 252static bool acpi_ec_event_enabled(struct acpi_ec *ec)
 253{
 254        /*
 255         * There is an OSPM early stage logic. During the early stages
 256         * (boot/resume), OSPMs shouldn't enable the event handling, only
 257         * the EC transactions are allowed to be performed.
 258         */
 259        if (!test_bit(EC_FLAGS_QUERY_ENABLED, &ec->flags))
 260                return false;
 261        /*
 262         * However, disabling the event handling is experimental for late
 263         * stage (suspend), and is controlled by the boot parameter of
 264         * "ec_freeze_events":
 265         * 1. true:  The EC event handling is disabled before entering
 266         *           the noirq stage.
 267         * 2. false: The EC event handling is automatically disabled as
 268         *           soon as the EC driver is stopped.
 269         */
 270        if (ec_freeze_events)
 271                return acpi_ec_started(ec);
 272        else
 273                return test_bit(EC_FLAGS_STARTED, &ec->flags);
 274}
 275
 276static bool acpi_ec_flushed(struct acpi_ec *ec)
 277{
 278        return ec->reference_count == 1;
 279}
 280
 281/* --------------------------------------------------------------------------
 282 *                           EC Registers
 283 * -------------------------------------------------------------------------- */
 284
 285static inline u8 acpi_ec_read_status(struct acpi_ec *ec)
 286{
 287        u8 x = inb(ec->command_addr);
 288
 289        ec_dbg_raw("EC_SC(R) = 0x%2.2x "
 290                   "SCI_EVT=%d BURST=%d CMD=%d IBF=%d OBF=%d",
 291                   x,
 292                   !!(x & ACPI_EC_FLAG_SCI),
 293                   !!(x & ACPI_EC_FLAG_BURST),
 294                   !!(x & ACPI_EC_FLAG_CMD),
 295                   !!(x & ACPI_EC_FLAG_IBF),
 296                   !!(x & ACPI_EC_FLAG_OBF));
 297        return x;
 298}
 299
 300static inline u8 acpi_ec_read_data(struct acpi_ec *ec)
 301{
 302        u8 x = inb(ec->data_addr);
 303
 304        ec->timestamp = jiffies;
 305        ec_dbg_raw("EC_DATA(R) = 0x%2.2x", x);
 306        return x;
 307}
 308
 309static inline void acpi_ec_write_cmd(struct acpi_ec *ec, u8 command)
 310{
 311        ec_dbg_raw("EC_SC(W) = 0x%2.2x", command);
 312        outb(command, ec->command_addr);
 313        ec->timestamp = jiffies;
 314}
 315
 316static inline void acpi_ec_write_data(struct acpi_ec *ec, u8 data)
 317{
 318        ec_dbg_raw("EC_DATA(W) = 0x%2.2x", data);
 319        outb(data, ec->data_addr);
 320        ec->timestamp = jiffies;
 321}
 322
 323#if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
 324static const char *acpi_ec_cmd_string(u8 cmd)
 325{
 326        switch (cmd) {
 327        case 0x80:
 328                return "RD_EC";
 329        case 0x81:
 330                return "WR_EC";
 331        case 0x82:
 332                return "BE_EC";
 333        case 0x83:
 334                return "BD_EC";
 335        case 0x84:
 336                return "QR_EC";
 337        }
 338        return "UNKNOWN";
 339}
 340#else
 341#define acpi_ec_cmd_string(cmd)         "UNDEF"
 342#endif
 343
 344/* --------------------------------------------------------------------------
 345 *                           GPE Registers
 346 * -------------------------------------------------------------------------- */
 347
 348static inline bool acpi_ec_is_gpe_raised(struct acpi_ec *ec)
 349{
 350        acpi_event_status gpe_status = 0;
 351
 352        (void)acpi_get_gpe_status(NULL, ec->gpe, &gpe_status);
 353        return (gpe_status & ACPI_EVENT_FLAG_STATUS_SET) ? true : false;
 354}
 355
 356static inline void acpi_ec_enable_gpe(struct acpi_ec *ec, bool open)
 357{
 358        if (open)
 359                acpi_enable_gpe(NULL, ec->gpe);
 360        else {
 361                BUG_ON(ec->reference_count < 1);
 362                acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_ENABLE);
 363        }
 364        if (acpi_ec_is_gpe_raised(ec)) {
 365                /*
 366                 * On some platforms, EN=1 writes cannot trigger GPE. So
 367                 * software need to manually trigger a pseudo GPE event on
 368                 * EN=1 writes.
 369                 */
 370                ec_dbg_raw("Polling quirk");
 371                advance_transaction(ec);
 372        }
 373}
 374
 375static inline void acpi_ec_disable_gpe(struct acpi_ec *ec, bool close)
 376{
 377        if (close)
 378                acpi_disable_gpe(NULL, ec->gpe);
 379        else {
 380                BUG_ON(ec->reference_count < 1);
 381                acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_DISABLE);
 382        }
 383}
 384
 385static inline void acpi_ec_clear_gpe(struct acpi_ec *ec)
 386{
 387        /*
 388         * GPE STS is a W1C register, which means:
 389         * 1. Software can clear it without worrying about clearing other
 390         *    GPEs' STS bits when the hardware sets them in parallel.
 391         * 2. As long as software can ensure only clearing it when it is
 392         *    set, hardware won't set it in parallel.
 393         * So software can clear GPE in any contexts.
 394         * Warning: do not move the check into advance_transaction() as the
 395         * EC commands will be sent without GPE raised.
 396         */
 397        if (!acpi_ec_is_gpe_raised(ec))
 398                return;
 399        acpi_clear_gpe(NULL, ec->gpe);
 400}
 401
 402/* --------------------------------------------------------------------------
 403 *                           Transaction Management
 404 * -------------------------------------------------------------------------- */
 405
 406static void acpi_ec_submit_request(struct acpi_ec *ec)
 407{
 408        ec->reference_count++;
 409        if (test_bit(EC_FLAGS_GPE_HANDLER_INSTALLED, &ec->flags) &&
 410            ec->reference_count == 1)
 411                acpi_ec_enable_gpe(ec, true);
 412}
 413
 414static void acpi_ec_complete_request(struct acpi_ec *ec)
 415{
 416        bool flushed = false;
 417
 418        ec->reference_count--;
 419        if (test_bit(EC_FLAGS_GPE_HANDLER_INSTALLED, &ec->flags) &&
 420            ec->reference_count == 0)
 421                acpi_ec_disable_gpe(ec, true);
 422        flushed = acpi_ec_flushed(ec);
 423        if (flushed)
 424                wake_up(&ec->wait);
 425}
 426
 427static void acpi_ec_mask_gpe(struct acpi_ec *ec)
 428{
 429        if (!test_bit(EC_FLAGS_GPE_MASKED, &ec->flags)) {
 430                acpi_ec_disable_gpe(ec, false);
 431                ec_dbg_drv("Polling enabled");
 432                set_bit(EC_FLAGS_GPE_MASKED, &ec->flags);
 433        }
 434}
 435
 436static void acpi_ec_unmask_gpe(struct acpi_ec *ec)
 437{
 438        if (test_bit(EC_FLAGS_GPE_MASKED, &ec->flags)) {
 439                clear_bit(EC_FLAGS_GPE_MASKED, &ec->flags);
 440                acpi_ec_enable_gpe(ec, false);
 441                ec_dbg_drv("Polling disabled");
 442        }
 443}
 444
 445/*
 446 * acpi_ec_submit_flushable_request() - Increase the reference count unless
 447 *                                      the flush operation is not in
 448 *                                      progress
 449 * @ec: the EC device
 450 *
 451 * This function must be used before taking a new action that should hold
 452 * the reference count.  If this function returns false, then the action
 453 * must be discarded or it will prevent the flush operation from being
 454 * completed.
 455 */
 456static bool acpi_ec_submit_flushable_request(struct acpi_ec *ec)
 457{
 458        if (!acpi_ec_started(ec))
 459                return false;
 460        acpi_ec_submit_request(ec);
 461        return true;
 462}
 463
 464static void acpi_ec_submit_query(struct acpi_ec *ec)
 465{
 466        acpi_ec_mask_gpe(ec);
 467        if (!acpi_ec_event_enabled(ec))
 468                return;
 469        if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags)) {
 470                ec_dbg_evt("Command(%s) submitted/blocked",
 471                           acpi_ec_cmd_string(ACPI_EC_COMMAND_QUERY));
 472                ec->nr_pending_queries++;
 473                schedule_work(&ec->work);
 474        }
 475}
 476
 477static void acpi_ec_complete_query(struct acpi_ec *ec)
 478{
 479        if (test_and_clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags))
 480                ec_dbg_evt("Command(%s) unblocked",
 481                           acpi_ec_cmd_string(ACPI_EC_COMMAND_QUERY));
 482        acpi_ec_unmask_gpe(ec);
 483}
 484
 485static inline void __acpi_ec_enable_event(struct acpi_ec *ec)
 486{
 487        if (!test_and_set_bit(EC_FLAGS_QUERY_ENABLED, &ec->flags))
 488                ec_log_drv("event unblocked");
 489        if (!test_bit(EC_FLAGS_QUERY_PENDING, &ec->flags))
 490                advance_transaction(ec);
 491}
 492
 493static inline void __acpi_ec_disable_event(struct acpi_ec *ec)
 494{
 495        if (test_and_clear_bit(EC_FLAGS_QUERY_ENABLED, &ec->flags))
 496                ec_log_drv("event blocked");
 497}
 498
 499static void acpi_ec_enable_event(struct acpi_ec *ec)
 500{
 501        unsigned long flags;
 502
 503        spin_lock_irqsave(&ec->lock, flags);
 504        if (acpi_ec_started(ec))
 505                __acpi_ec_enable_event(ec);
 506        spin_unlock_irqrestore(&ec->lock, flags);
 507}
 508
 509#ifdef CONFIG_PM_SLEEP
 510static bool acpi_ec_query_flushed(struct acpi_ec *ec)
 511{
 512        bool flushed;
 513        unsigned long flags;
 514
 515        spin_lock_irqsave(&ec->lock, flags);
 516        flushed = !ec->nr_pending_queries;
 517        spin_unlock_irqrestore(&ec->lock, flags);
 518        return flushed;
 519}
 520
 521static void __acpi_ec_flush_event(struct acpi_ec *ec)
 522{
 523        /*
 524         * When ec_freeze_events is true, we need to flush events in
 525         * the proper position before entering the noirq stage.
 526         */
 527        wait_event(ec->wait, acpi_ec_query_flushed(ec));
 528        if (ec_query_wq)
 529                flush_workqueue(ec_query_wq);
 530}
 531
 532static void acpi_ec_disable_event(struct acpi_ec *ec)
 533{
 534        unsigned long flags;
 535
 536        spin_lock_irqsave(&ec->lock, flags);
 537        __acpi_ec_disable_event(ec);
 538        spin_unlock_irqrestore(&ec->lock, flags);
 539        __acpi_ec_flush_event(ec);
 540}
 541
 542void acpi_ec_flush_work(void)
 543{
 544        if (first_ec)
 545                __acpi_ec_flush_event(first_ec);
 546
 547        flush_scheduled_work();
 548}
 549#endif /* CONFIG_PM_SLEEP */
 550
 551static bool acpi_ec_guard_event(struct acpi_ec *ec)
 552{
 553        bool guarded = true;
 554        unsigned long flags;
 555
 556        spin_lock_irqsave(&ec->lock, flags);
 557        /*
 558         * If firmware SCI_EVT clearing timing is "event", we actually
 559         * don't know when the SCI_EVT will be cleared by firmware after
 560         * evaluating _Qxx, so we need to re-check SCI_EVT after waiting an
 561         * acceptable period.
 562         *
 563         * The guarding period begins when EC_FLAGS_QUERY_PENDING is
 564         * flagged, which means SCI_EVT check has just been performed.
 565         * But if the current transaction is ACPI_EC_COMMAND_QUERY, the
 566         * guarding should have already been performed (via
 567         * EC_FLAGS_QUERY_GUARDING) and should not be applied so that the
 568         * ACPI_EC_COMMAND_QUERY transaction can be transitioned into
 569         * ACPI_EC_COMMAND_POLL state immediately.
 570         */
 571        if (ec_event_clearing == ACPI_EC_EVT_TIMING_STATUS ||
 572            ec_event_clearing == ACPI_EC_EVT_TIMING_QUERY ||
 573            !test_bit(EC_FLAGS_QUERY_PENDING, &ec->flags) ||
 574            (ec->curr && ec->curr->command == ACPI_EC_COMMAND_QUERY))
 575                guarded = false;
 576        spin_unlock_irqrestore(&ec->lock, flags);
 577        return guarded;
 578}
 579
 580static int ec_transaction_polled(struct acpi_ec *ec)
 581{
 582        unsigned long flags;
 583        int ret = 0;
 584
 585        spin_lock_irqsave(&ec->lock, flags);
 586        if (ec->curr && (ec->curr->flags & ACPI_EC_COMMAND_POLL))
 587                ret = 1;
 588        spin_unlock_irqrestore(&ec->lock, flags);
 589        return ret;
 590}
 591
 592static int ec_transaction_completed(struct acpi_ec *ec)
 593{
 594        unsigned long flags;
 595        int ret = 0;
 596
 597        spin_lock_irqsave(&ec->lock, flags);
 598        if (ec->curr && (ec->curr->flags & ACPI_EC_COMMAND_COMPLETE))
 599                ret = 1;
 600        spin_unlock_irqrestore(&ec->lock, flags);
 601        return ret;
 602}
 603
 604static inline void ec_transaction_transition(struct acpi_ec *ec, unsigned long flag)
 605{
 606        ec->curr->flags |= flag;
 607        if (ec->curr->command == ACPI_EC_COMMAND_QUERY) {
 608                if (ec_event_clearing == ACPI_EC_EVT_TIMING_STATUS &&
 609                    flag == ACPI_EC_COMMAND_POLL)
 610                        acpi_ec_complete_query(ec);
 611                if (ec_event_clearing == ACPI_EC_EVT_TIMING_QUERY &&
 612                    flag == ACPI_EC_COMMAND_COMPLETE)
 613                        acpi_ec_complete_query(ec);
 614                if (ec_event_clearing == ACPI_EC_EVT_TIMING_EVENT &&
 615                    flag == ACPI_EC_COMMAND_COMPLETE)
 616                        set_bit(EC_FLAGS_QUERY_GUARDING, &ec->flags);
 617        }
 618}
 619
 620static void advance_transaction(struct acpi_ec *ec)
 621{
 622        struct transaction *t;
 623        u8 status;
 624        bool wakeup = false;
 625
 626        ec_dbg_stm("%s (%d)", in_interrupt() ? "IRQ" : "TASK",
 627                   smp_processor_id());
 628        /*
 629         * By always clearing STS before handling all indications, we can
 630         * ensure a hardware STS 0->1 change after this clearing can always
 631         * trigger a GPE interrupt.
 632         */
 633        acpi_ec_clear_gpe(ec);
 634        status = acpi_ec_read_status(ec);
 635        t = ec->curr;
 636        /*
 637         * Another IRQ or a guarded polling mode advancement is detected,
 638         * the next QR_EC submission is then allowed.
 639         */
 640        if (!t || !(t->flags & ACPI_EC_COMMAND_POLL)) {
 641                if (ec_event_clearing == ACPI_EC_EVT_TIMING_EVENT &&
 642                    (!ec->nr_pending_queries ||
 643                     test_bit(EC_FLAGS_QUERY_GUARDING, &ec->flags))) {
 644                        clear_bit(EC_FLAGS_QUERY_GUARDING, &ec->flags);
 645                        acpi_ec_complete_query(ec);
 646                }
 647        }
 648        if (!t)
 649                goto err;
 650        if (t->flags & ACPI_EC_COMMAND_POLL) {
 651                if (t->wlen > t->wi) {
 652                        if ((status & ACPI_EC_FLAG_IBF) == 0)
 653                                acpi_ec_write_data(ec, t->wdata[t->wi++]);
 654                        else
 655                                goto err;
 656                } else if (t->rlen > t->ri) {
 657                        if ((status & ACPI_EC_FLAG_OBF) == 1) {
 658                                t->rdata[t->ri++] = acpi_ec_read_data(ec);
 659                                if (t->rlen == t->ri) {
 660                                        ec_transaction_transition(ec, ACPI_EC_COMMAND_COMPLETE);
 661                                        if (t->command == ACPI_EC_COMMAND_QUERY)
 662                                                ec_dbg_evt("Command(%s) completed by hardware",
 663                                                           acpi_ec_cmd_string(ACPI_EC_COMMAND_QUERY));
 664                                        wakeup = true;
 665                                }
 666                        } else
 667                                goto err;
 668                } else if (t->wlen == t->wi &&
 669                           (status & ACPI_EC_FLAG_IBF) == 0) {
 670                        ec_transaction_transition(ec, ACPI_EC_COMMAND_COMPLETE);
 671                        wakeup = true;
 672                }
 673                goto out;
 674        } else {
 675                if (EC_FLAGS_QUERY_HANDSHAKE &&
 676                    !(status & ACPI_EC_FLAG_SCI) &&
 677                    (t->command == ACPI_EC_COMMAND_QUERY)) {
 678                        ec_transaction_transition(ec, ACPI_EC_COMMAND_POLL);
 679                        t->rdata[t->ri++] = 0x00;
 680                        ec_transaction_transition(ec, ACPI_EC_COMMAND_COMPLETE);
 681                        ec_dbg_evt("Command(%s) completed by software",
 682                                   acpi_ec_cmd_string(ACPI_EC_COMMAND_QUERY));
 683                        wakeup = true;
 684                } else if ((status & ACPI_EC_FLAG_IBF) == 0) {
 685                        acpi_ec_write_cmd(ec, t->command);
 686                        ec_transaction_transition(ec, ACPI_EC_COMMAND_POLL);
 687                } else
 688                        goto err;
 689                goto out;
 690        }
 691err:
 692        /*
 693         * If SCI bit is set, then don't think it's a false IRQ
 694         * otherwise will take a not handled IRQ as a false one.
 695         */
 696        if (!(status & ACPI_EC_FLAG_SCI)) {
 697                if (in_interrupt() && t) {
 698                        if (t->irq_count < ec_storm_threshold)
 699                                ++t->irq_count;
 700                        /* Allow triggering on 0 threshold */
 701                        if (t->irq_count == ec_storm_threshold)
 702                                acpi_ec_mask_gpe(ec);
 703                }
 704        }
 705out:
 706        if (status & ACPI_EC_FLAG_SCI)
 707                acpi_ec_submit_query(ec);
 708        if (wakeup && in_interrupt())
 709                wake_up(&ec->wait);
 710}
 711
 712static void start_transaction(struct acpi_ec *ec)
 713{
 714        ec->curr->irq_count = ec->curr->wi = ec->curr->ri = 0;
 715        ec->curr->flags = 0;
 716}
 717
 718static int ec_guard(struct acpi_ec *ec)
 719{
 720        unsigned long guard = usecs_to_jiffies(ec->polling_guard);
 721        unsigned long timeout = ec->timestamp + guard;
 722
 723        /* Ensure guarding period before polling EC status */
 724        do {
 725                if (ec->busy_polling) {
 726                        /* Perform busy polling */
 727                        if (ec_transaction_completed(ec))
 728                                return 0;
 729                        udelay(jiffies_to_usecs(guard));
 730                } else {
 731                        /*
 732                         * Perform wait polling
 733                         * 1. Wait the transaction to be completed by the
 734                         *    GPE handler after the transaction enters
 735                         *    ACPI_EC_COMMAND_POLL state.
 736                         * 2. A special guarding logic is also required
 737                         *    for event clearing mode "event" before the
 738                         *    transaction enters ACPI_EC_COMMAND_POLL
 739                         *    state.
 740                         */
 741                        if (!ec_transaction_polled(ec) &&
 742                            !acpi_ec_guard_event(ec))
 743                                break;
 744                        if (wait_event_timeout(ec->wait,
 745                                               ec_transaction_completed(ec),
 746                                               guard))
 747                                return 0;
 748                }
 749        } while (time_before(jiffies, timeout));
 750        return -ETIME;
 751}
 752
 753static int ec_poll(struct acpi_ec *ec)
 754{
 755        unsigned long flags;
 756        int repeat = 5; /* number of command restarts */
 757
 758        while (repeat--) {
 759                unsigned long delay = jiffies +
 760                        msecs_to_jiffies(ec_delay);
 761                do {
 762                        if (!ec_guard(ec))
 763                                return 0;
 764                        spin_lock_irqsave(&ec->lock, flags);
 765                        advance_transaction(ec);
 766                        spin_unlock_irqrestore(&ec->lock, flags);
 767                } while (time_before(jiffies, delay));
 768                pr_debug("controller reset, restart transaction\n");
 769                spin_lock_irqsave(&ec->lock, flags);
 770                start_transaction(ec);
 771                spin_unlock_irqrestore(&ec->lock, flags);
 772        }
 773        return -ETIME;
 774}
 775
 776static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
 777                                        struct transaction *t)
 778{
 779        unsigned long tmp;
 780        int ret = 0;
 781
 782        /* start transaction */
 783        spin_lock_irqsave(&ec->lock, tmp);
 784        /* Enable GPE for command processing (IBF=0/OBF=1) */
 785        if (!acpi_ec_submit_flushable_request(ec)) {
 786                ret = -EINVAL;
 787                goto unlock;
 788        }
 789        ec_dbg_ref(ec, "Increase command");
 790        /* following two actions should be kept atomic */
 791        ec->curr = t;
 792        ec_dbg_req("Command(%s) started", acpi_ec_cmd_string(t->command));
 793        start_transaction(ec);
 794        spin_unlock_irqrestore(&ec->lock, tmp);
 795
 796        ret = ec_poll(ec);
 797
 798        spin_lock_irqsave(&ec->lock, tmp);
 799        if (t->irq_count == ec_storm_threshold)
 800                acpi_ec_unmask_gpe(ec);
 801        ec_dbg_req("Command(%s) stopped", acpi_ec_cmd_string(t->command));
 802        ec->curr = NULL;
 803        /* Disable GPE for command processing (IBF=0/OBF=1) */
 804        acpi_ec_complete_request(ec);
 805        ec_dbg_ref(ec, "Decrease command");
 806unlock:
 807        spin_unlock_irqrestore(&ec->lock, tmp);
 808        return ret;
 809}
 810
 811static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t)
 812{
 813        int status;
 814        u32 glk;
 815
 816        if (!ec || (!t) || (t->wlen && !t->wdata) || (t->rlen && !t->rdata))
 817                return -EINVAL;
 818        if (t->rdata)
 819                memset(t->rdata, 0, t->rlen);
 820
 821        mutex_lock(&ec->mutex);
 822        if (ec->global_lock) {
 823                status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk);
 824                if (ACPI_FAILURE(status)) {
 825                        status = -ENODEV;
 826                        goto unlock;
 827                }
 828        }
 829
 830        status = acpi_ec_transaction_unlocked(ec, t);
 831
 832        if (ec->global_lock)
 833                acpi_release_global_lock(glk);
 834unlock:
 835        mutex_unlock(&ec->mutex);
 836        return status;
 837}
 838
 839static int acpi_ec_burst_enable(struct acpi_ec *ec)
 840{
 841        u8 d;
 842        struct transaction t = {.command = ACPI_EC_BURST_ENABLE,
 843                                .wdata = NULL, .rdata = &d,
 844                                .wlen = 0, .rlen = 1};
 845
 846        return acpi_ec_transaction(ec, &t);
 847}
 848
 849static int acpi_ec_burst_disable(struct acpi_ec *ec)
 850{
 851        struct transaction t = {.command = ACPI_EC_BURST_DISABLE,
 852                                .wdata = NULL, .rdata = NULL,
 853                                .wlen = 0, .rlen = 0};
 854
 855        return (acpi_ec_read_status(ec) & ACPI_EC_FLAG_BURST) ?
 856                                acpi_ec_transaction(ec, &t) : 0;
 857}
 858
 859static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 *data)
 860{
 861        int result;
 862        u8 d;
 863        struct transaction t = {.command = ACPI_EC_COMMAND_READ,
 864                                .wdata = &address, .rdata = &d,
 865                                .wlen = 1, .rlen = 1};
 866
 867        result = acpi_ec_transaction(ec, &t);
 868        *data = d;
 869        return result;
 870}
 871
 872static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data)
 873{
 874        u8 wdata[2] = { address, data };
 875        struct transaction t = {.command = ACPI_EC_COMMAND_WRITE,
 876                                .wdata = wdata, .rdata = NULL,
 877                                .wlen = 2, .rlen = 0};
 878
 879        return acpi_ec_transaction(ec, &t);
 880}
 881
 882int ec_read(u8 addr, u8 *val)
 883{
 884        int err;
 885        u8 temp_data;
 886
 887        if (!first_ec)
 888                return -ENODEV;
 889
 890        err = acpi_ec_read(first_ec, addr, &temp_data);
 891
 892        if (!err) {
 893                *val = temp_data;
 894                return 0;
 895        }
 896        return err;
 897}
 898EXPORT_SYMBOL(ec_read);
 899
 900int ec_write(u8 addr, u8 val)
 901{
 902        int err;
 903
 904        if (!first_ec)
 905                return -ENODEV;
 906
 907        err = acpi_ec_write(first_ec, addr, val);
 908
 909        return err;
 910}
 911EXPORT_SYMBOL(ec_write);
 912
 913int ec_transaction(u8 command,
 914                   const u8 *wdata, unsigned wdata_len,
 915                   u8 *rdata, unsigned rdata_len)
 916{
 917        struct transaction t = {.command = command,
 918                                .wdata = wdata, .rdata = rdata,
 919                                .wlen = wdata_len, .rlen = rdata_len};
 920
 921        if (!first_ec)
 922                return -ENODEV;
 923
 924        return acpi_ec_transaction(first_ec, &t);
 925}
 926EXPORT_SYMBOL(ec_transaction);
 927
 928/* Get the handle to the EC device */
 929acpi_handle ec_get_handle(void)
 930{
 931        if (!first_ec)
 932                return NULL;
 933        return first_ec->handle;
 934}
 935EXPORT_SYMBOL(ec_get_handle);
 936
 937static void acpi_ec_start(struct acpi_ec *ec, bool resuming)
 938{
 939        unsigned long flags;
 940
 941        spin_lock_irqsave(&ec->lock, flags);
 942        if (!test_and_set_bit(EC_FLAGS_STARTED, &ec->flags)) {
 943                ec_dbg_drv("Starting EC");
 944                /* Enable GPE for event processing (SCI_EVT=1) */
 945                if (!resuming) {
 946                        acpi_ec_submit_request(ec);
 947                        ec_dbg_ref(ec, "Increase driver");
 948                }
 949                ec_log_drv("EC started");
 950        }
 951        spin_unlock_irqrestore(&ec->lock, flags);
 952}
 953
 954static bool acpi_ec_stopped(struct acpi_ec *ec)
 955{
 956        unsigned long flags;
 957        bool flushed;
 958
 959        spin_lock_irqsave(&ec->lock, flags);
 960        flushed = acpi_ec_flushed(ec);
 961        spin_unlock_irqrestore(&ec->lock, flags);
 962        return flushed;
 963}
 964
 965static void acpi_ec_stop(struct acpi_ec *ec, bool suspending)
 966{
 967        unsigned long flags;
 968
 969        spin_lock_irqsave(&ec->lock, flags);
 970        if (acpi_ec_started(ec)) {
 971                ec_dbg_drv("Stopping EC");
 972                set_bit(EC_FLAGS_STOPPED, &ec->flags);
 973                spin_unlock_irqrestore(&ec->lock, flags);
 974                wait_event(ec->wait, acpi_ec_stopped(ec));
 975                spin_lock_irqsave(&ec->lock, flags);
 976                /* Disable GPE for event processing (SCI_EVT=1) */
 977                if (!suspending) {
 978                        acpi_ec_complete_request(ec);
 979                        ec_dbg_ref(ec, "Decrease driver");
 980                } else if (!ec_freeze_events)
 981                        __acpi_ec_disable_event(ec);
 982                clear_bit(EC_FLAGS_STARTED, &ec->flags);
 983                clear_bit(EC_FLAGS_STOPPED, &ec->flags);
 984                ec_log_drv("EC stopped");
 985        }
 986        spin_unlock_irqrestore(&ec->lock, flags);
 987}
 988
 989static void acpi_ec_enter_noirq(struct acpi_ec *ec)
 990{
 991        unsigned long flags;
 992
 993        spin_lock_irqsave(&ec->lock, flags);
 994        ec->busy_polling = true;
 995        ec->polling_guard = 0;
 996        ec_log_drv("interrupt blocked");
 997        spin_unlock_irqrestore(&ec->lock, flags);
 998}
 999
1000static void acpi_ec_leave_noirq(struct acpi_ec *ec)
1001{
1002        unsigned long flags;
1003
1004        spin_lock_irqsave(&ec->lock, flags);
1005        ec->busy_polling = ec_busy_polling;
1006        ec->polling_guard = ec_polling_guard;
1007        ec_log_drv("interrupt unblocked");
1008        spin_unlock_irqrestore(&ec->lock, flags);
1009}
1010
1011void acpi_ec_block_transactions(void)
1012{
1013        struct acpi_ec *ec = first_ec;
1014
1015        if (!ec)
1016                return;
1017
1018        mutex_lock(&ec->mutex);
1019        /* Prevent transactions from being carried out */
1020        acpi_ec_stop(ec, true);
1021        mutex_unlock(&ec->mutex);
1022}
1023
1024void acpi_ec_unblock_transactions(void)
1025{
1026        /*
1027         * Allow transactions to happen again (this function is called from
1028         * atomic context during wakeup, so we don't need to acquire the mutex).
1029         */
1030        if (first_ec)
1031                acpi_ec_start(first_ec, true);
1032}
1033
1034/* --------------------------------------------------------------------------
1035                                Event Management
1036   -------------------------------------------------------------------------- */
1037static struct acpi_ec_query_handler *
1038acpi_ec_get_query_handler(struct acpi_ec_query_handler *handler)
1039{
1040        if (handler)
1041                kref_get(&handler->kref);
1042        return handler;
1043}
1044
1045static struct acpi_ec_query_handler *
1046acpi_ec_get_query_handler_by_value(struct acpi_ec *ec, u8 value)
1047{
1048        struct acpi_ec_query_handler *handler;
1049        bool found = false;
1050
1051        mutex_lock(&ec->mutex);
1052        list_for_each_entry(handler, &ec->list, node) {
1053                if (value == handler->query_bit) {
1054                        found = true;
1055                        break;
1056                }
1057        }
1058        mutex_unlock(&ec->mutex);
1059        return found ? acpi_ec_get_query_handler(handler) : NULL;
1060}
1061
1062static void acpi_ec_query_handler_release(struct kref *kref)
1063{
1064        struct acpi_ec_query_handler *handler =
1065                container_of(kref, struct acpi_ec_query_handler, kref);
1066
1067        kfree(handler);
1068}
1069
1070static void acpi_ec_put_query_handler(struct acpi_ec_query_handler *handler)
1071{
1072        kref_put(&handler->kref, acpi_ec_query_handler_release);
1073}
1074
1075int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit,
1076                              acpi_handle handle, acpi_ec_query_func func,
1077                              void *data)
1078{
1079        struct acpi_ec_query_handler *handler =
1080            kzalloc(sizeof(struct acpi_ec_query_handler), GFP_KERNEL);
1081
1082        if (!handler)
1083                return -ENOMEM;
1084
1085        handler->query_bit = query_bit;
1086        handler->handle = handle;
1087        handler->func = func;
1088        handler->data = data;
1089        mutex_lock(&ec->mutex);
1090        kref_init(&handler->kref);
1091        list_add(&handler->node, &ec->list);
1092        mutex_unlock(&ec->mutex);
1093        return 0;
1094}
1095EXPORT_SYMBOL_GPL(acpi_ec_add_query_handler);
1096
1097static void acpi_ec_remove_query_handlers(struct acpi_ec *ec,
1098                                          bool remove_all, u8 query_bit)
1099{
1100        struct acpi_ec_query_handler *handler, *tmp;
1101        LIST_HEAD(free_list);
1102
1103        mutex_lock(&ec->mutex);
1104        list_for_each_entry_safe(handler, tmp, &ec->list, node) {
1105                if (remove_all || query_bit == handler->query_bit) {
1106                        list_del_init(&handler->node);
1107                        list_add(&handler->node, &free_list);
1108                }
1109        }
1110        mutex_unlock(&ec->mutex);
1111        list_for_each_entry_safe(handler, tmp, &free_list, node)
1112                acpi_ec_put_query_handler(handler);
1113}
1114
1115void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit)
1116{
1117        acpi_ec_remove_query_handlers(ec, false, query_bit);
1118}
1119EXPORT_SYMBOL_GPL(acpi_ec_remove_query_handler);
1120
1121static struct acpi_ec_query *acpi_ec_create_query(u8 *pval)
1122{
1123        struct acpi_ec_query *q;
1124        struct transaction *t;
1125
1126        q = kzalloc(sizeof (struct acpi_ec_query), GFP_KERNEL);
1127        if (!q)
1128                return NULL;
1129        INIT_WORK(&q->work, acpi_ec_event_processor);
1130        t = &q->transaction;
1131        t->command = ACPI_EC_COMMAND_QUERY;
1132        t->rdata = pval;
1133        t->rlen = 1;
1134        return q;
1135}
1136
1137static void acpi_ec_delete_query(struct acpi_ec_query *q)
1138{
1139        if (q) {
1140                if (q->handler)
1141                        acpi_ec_put_query_handler(q->handler);
1142                kfree(q);
1143        }
1144}
1145
1146static void acpi_ec_event_processor(struct work_struct *work)
1147{
1148        struct acpi_ec_query *q = container_of(work, struct acpi_ec_query, work);
1149        struct acpi_ec_query_handler *handler = q->handler;
1150
1151        ec_dbg_evt("Query(0x%02x) started", handler->query_bit);
1152        if (handler->func)
1153                handler->func(handler->data);
1154        else if (handler->handle)
1155                acpi_evaluate_object(handler->handle, NULL, NULL, NULL);
1156        ec_dbg_evt("Query(0x%02x) stopped", handler->query_bit);
1157        acpi_ec_delete_query(q);
1158}
1159
1160static int acpi_ec_query(struct acpi_ec *ec, u8 *data)
1161{
1162        u8 value = 0;
1163        int result;
1164        struct acpi_ec_query *q;
1165
1166        q = acpi_ec_create_query(&value);
1167        if (!q)
1168                return -ENOMEM;
1169
1170        /*
1171         * Query the EC to find out which _Qxx method we need to evaluate.
1172         * Note that successful completion of the query causes the ACPI_EC_SCI
1173         * bit to be cleared (and thus clearing the interrupt source).
1174         */
1175        result = acpi_ec_transaction(ec, &q->transaction);
1176        if (!value)
1177                result = -ENODATA;
1178        if (result)
1179                goto err_exit;
1180
1181        q->handler = acpi_ec_get_query_handler_by_value(ec, value);
1182        if (!q->handler) {
1183                result = -ENODATA;
1184                goto err_exit;
1185        }
1186
1187        /*
1188         * It is reported that _Qxx are evaluated in a parallel way on
1189         * Windows:
1190         * https://bugzilla.kernel.org/show_bug.cgi?id=94411
1191         *
1192         * Put this log entry before schedule_work() in order to make
1193         * it appearing before any other log entries occurred during the
1194         * work queue execution.
1195         */
1196        ec_dbg_evt("Query(0x%02x) scheduled", value);
1197        if (!queue_work(ec_query_wq, &q->work)) {
1198                ec_dbg_evt("Query(0x%02x) overlapped", value);
1199                result = -EBUSY;
1200        }
1201
1202err_exit:
1203        if (result)
1204                acpi_ec_delete_query(q);
1205        if (data)
1206                *data = value;
1207        return result;
1208}
1209
1210static void acpi_ec_check_event(struct acpi_ec *ec)
1211{
1212        unsigned long flags;
1213
1214        if (ec_event_clearing == ACPI_EC_EVT_TIMING_EVENT) {
1215                if (ec_guard(ec)) {
1216                        spin_lock_irqsave(&ec->lock, flags);
1217                        /*
1218                         * Take care of the SCI_EVT unless no one else is
1219                         * taking care of it.
1220                         */
1221                        if (!ec->curr)
1222                                advance_transaction(ec);
1223                        spin_unlock_irqrestore(&ec->lock, flags);
1224                }
1225        }
1226}
1227
1228static void acpi_ec_event_handler(struct work_struct *work)
1229{
1230        unsigned long flags;
1231        struct acpi_ec *ec = container_of(work, struct acpi_ec, work);
1232
1233        ec_dbg_evt("Event started");
1234
1235        spin_lock_irqsave(&ec->lock, flags);
1236        while (ec->nr_pending_queries) {
1237                spin_unlock_irqrestore(&ec->lock, flags);
1238                (void)acpi_ec_query(ec, NULL);
1239                spin_lock_irqsave(&ec->lock, flags);
1240                ec->nr_pending_queries--;
1241                /*
1242                 * Before exit, make sure that this work item can be
1243                 * scheduled again. There might be QR_EC failures, leaving
1244                 * EC_FLAGS_QUERY_PENDING uncleared and preventing this work
1245                 * item from being scheduled again.
1246                 */
1247                if (!ec->nr_pending_queries) {
1248                        if (ec_event_clearing == ACPI_EC_EVT_TIMING_STATUS ||
1249                            ec_event_clearing == ACPI_EC_EVT_TIMING_QUERY)
1250                                acpi_ec_complete_query(ec);
1251                }
1252        }
1253        spin_unlock_irqrestore(&ec->lock, flags);
1254
1255        ec_dbg_evt("Event stopped");
1256
1257        acpi_ec_check_event(ec);
1258}
1259
1260static u32 acpi_ec_gpe_handler(acpi_handle gpe_device,
1261        u32 gpe_number, void *data)
1262{
1263        unsigned long flags;
1264        struct acpi_ec *ec = data;
1265
1266        spin_lock_irqsave(&ec->lock, flags);
1267        advance_transaction(ec);
1268        spin_unlock_irqrestore(&ec->lock, flags);
1269        return ACPI_INTERRUPT_HANDLED;
1270}
1271
1272/* --------------------------------------------------------------------------
1273 *                           Address Space Management
1274 * -------------------------------------------------------------------------- */
1275
1276static acpi_status
1277acpi_ec_space_handler(u32 function, acpi_physical_address address,
1278                      u32 bits, u64 *value64,
1279                      void *handler_context, void *region_context)
1280{
1281        struct acpi_ec *ec = handler_context;
1282        int result = 0, i, bytes = bits / 8;
1283        u8 *value = (u8 *)value64;
1284
1285        if ((address > 0xFF) || !value || !handler_context)
1286                return AE_BAD_PARAMETER;
1287
1288        if (function != ACPI_READ && function != ACPI_WRITE)
1289                return AE_BAD_PARAMETER;
1290
1291        if (ec->busy_polling || bits > 8)
1292                acpi_ec_burst_enable(ec);
1293
1294        for (i = 0; i < bytes; ++i, ++address, ++value)
1295                result = (function == ACPI_READ) ?
1296                        acpi_ec_read(ec, address, value) :
1297                        acpi_ec_write(ec, address, *value);
1298
1299        if (ec->busy_polling || bits > 8)
1300                acpi_ec_burst_disable(ec);
1301
1302        switch (result) {
1303        case -EINVAL:
1304                return AE_BAD_PARAMETER;
1305        case -ENODEV:
1306                return AE_NOT_FOUND;
1307        case -ETIME:
1308                return AE_TIME;
1309        default:
1310                return AE_OK;
1311        }
1312}
1313
1314/* --------------------------------------------------------------------------
1315 *                             Driver Interface
1316 * -------------------------------------------------------------------------- */
1317
1318static acpi_status
1319ec_parse_io_ports(struct acpi_resource *resource, void *context);
1320
1321static void acpi_ec_free(struct acpi_ec *ec)
1322{
1323        if (first_ec == ec)
1324                first_ec = NULL;
1325        if (boot_ec == ec)
1326                boot_ec = NULL;
1327        kfree(ec);
1328}
1329
1330static struct acpi_ec *acpi_ec_alloc(void)
1331{
1332        struct acpi_ec *ec = kzalloc(sizeof(struct acpi_ec), GFP_KERNEL);
1333
1334        if (!ec)
1335                return NULL;
1336        mutex_init(&ec->mutex);
1337        init_waitqueue_head(&ec->wait);
1338        INIT_LIST_HEAD(&ec->list);
1339        spin_lock_init(&ec->lock);
1340        INIT_WORK(&ec->work, acpi_ec_event_handler);
1341        ec->timestamp = jiffies;
1342        ec->busy_polling = true;
1343        ec->polling_guard = 0;
1344        return ec;
1345}
1346
1347static acpi_status
1348acpi_ec_register_query_methods(acpi_handle handle, u32 level,
1349                               void *context, void **return_value)
1350{
1351        char node_name[5];
1352        struct acpi_buffer buffer = { sizeof(node_name), node_name };
1353        struct acpi_ec *ec = context;
1354        int value = 0;
1355        acpi_status status;
1356
1357        status = acpi_get_name(handle, ACPI_SINGLE_NAME, &buffer);
1358
1359        if (ACPI_SUCCESS(status) && sscanf(node_name, "_Q%x", &value) == 1)
1360                acpi_ec_add_query_handler(ec, value, handle, NULL, NULL);
1361        return AE_OK;
1362}
1363
1364static acpi_status
1365ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval)
1366{
1367        acpi_status status;
1368        unsigned long long tmp = 0;
1369        struct acpi_ec *ec = context;
1370
1371        /* clear addr values, ec_parse_io_ports depend on it */
1372        ec->command_addr = ec->data_addr = 0;
1373
1374        status = acpi_walk_resources(handle, METHOD_NAME__CRS,
1375                                     ec_parse_io_ports, ec);
1376        if (ACPI_FAILURE(status))
1377                return status;
1378        if (ec->data_addr == 0 || ec->command_addr == 0)
1379                return AE_OK;
1380
1381        if (boot_ec && boot_ec_is_ecdt && EC_FLAGS_IGNORE_DSDT_GPE) {
1382                /*
1383                 * Always inherit the GPE number setting from the ECDT
1384                 * EC.
1385                 */
1386                ec->gpe = boot_ec->gpe;
1387        } else {
1388                /* Get GPE bit assignment (EC events). */
1389                /* TODO: Add support for _GPE returning a package */
1390                status = acpi_evaluate_integer(handle, "_GPE", NULL, &tmp);
1391                if (ACPI_FAILURE(status))
1392                        return status;
1393                ec->gpe = tmp;
1394        }
1395        /* Use the global lock for all EC transactions? */
1396        tmp = 0;
1397        acpi_evaluate_integer(handle, "_GLK", NULL, &tmp);
1398        ec->global_lock = tmp;
1399        ec->handle = handle;
1400        return AE_CTRL_TERMINATE;
1401}
1402
1403/*
1404 * Note: This function returns an error code only when the address space
1405 *       handler is not installed, which means "not able to handle
1406 *       transactions".
1407 */
1408static int ec_install_handlers(struct acpi_ec *ec, bool handle_events)
1409{
1410        acpi_status status;
1411
1412        acpi_ec_start(ec, false);
1413
1414        if (!test_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags)) {
1415                acpi_ec_enter_noirq(ec);
1416                status = acpi_install_address_space_handler(ec->handle,
1417                                                            ACPI_ADR_SPACE_EC,
1418                                                            &acpi_ec_space_handler,
1419                                                            NULL, ec);
1420                if (ACPI_FAILURE(status)) {
1421                        if (status == AE_NOT_FOUND) {
1422                                /*
1423                                 * Maybe OS fails in evaluating the _REG
1424                                 * object. The AE_NOT_FOUND error will be
1425                                 * ignored and OS * continue to initialize
1426                                 * EC.
1427                                 */
1428                                pr_err("Fail in evaluating the _REG object"
1429                                        " of EC device. Broken bios is suspected.\n");
1430                        } else {
1431                                acpi_ec_stop(ec, false);
1432                                return -ENODEV;
1433                        }
1434                }
1435                set_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags);
1436        }
1437
1438        if (!handle_events)
1439                return 0;
1440
1441        if (!test_bit(EC_FLAGS_EVT_HANDLER_INSTALLED, &ec->flags)) {
1442                /* Find and register all query methods */
1443                acpi_walk_namespace(ACPI_TYPE_METHOD, ec->handle, 1,
1444                                    acpi_ec_register_query_methods,
1445                                    NULL, ec, NULL);
1446                set_bit(EC_FLAGS_EVT_HANDLER_INSTALLED, &ec->flags);
1447        }
1448        if (!test_bit(EC_FLAGS_GPE_HANDLER_INSTALLED, &ec->flags)) {
1449                status = acpi_install_gpe_raw_handler(NULL, ec->gpe,
1450                                          ACPI_GPE_EDGE_TRIGGERED,
1451                                          &acpi_ec_gpe_handler, ec);
1452                /* This is not fatal as we can poll EC events */
1453                if (ACPI_SUCCESS(status)) {
1454                        set_bit(EC_FLAGS_GPE_HANDLER_INSTALLED, &ec->flags);
1455                        acpi_ec_leave_noirq(ec);
1456                        if (test_bit(EC_FLAGS_STARTED, &ec->flags) &&
1457                            ec->reference_count >= 1)
1458                                acpi_ec_enable_gpe(ec, true);
1459
1460                        /* EC is fully operational, allow queries */
1461                        acpi_ec_enable_event(ec);
1462                }
1463        }
1464
1465        return 0;
1466}
1467
1468static void ec_remove_handlers(struct acpi_ec *ec)
1469{
1470        if (test_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags)) {
1471                if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
1472                                        ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
1473                        pr_err("failed to remove space handler\n");
1474                clear_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags);
1475        }
1476
1477        /*
1478         * Stops handling the EC transactions after removing the operation
1479         * region handler. This is required because _REG(DISCONNECT)
1480         * invoked during the removal can result in new EC transactions.
1481         *
1482         * Flushes the EC requests and thus disables the GPE before
1483         * removing the GPE handler. This is required by the current ACPICA
1484         * GPE core. ACPICA GPE core will automatically disable a GPE when
1485         * it is indicated but there is no way to handle it. So the drivers
1486         * must disable the GPEs prior to removing the GPE handlers.
1487         */
1488        acpi_ec_stop(ec, false);
1489
1490        if (test_bit(EC_FLAGS_GPE_HANDLER_INSTALLED, &ec->flags)) {
1491                if (ACPI_FAILURE(acpi_remove_gpe_handler(NULL, ec->gpe,
1492                                        &acpi_ec_gpe_handler)))
1493                        pr_err("failed to remove gpe handler\n");
1494                clear_bit(EC_FLAGS_GPE_HANDLER_INSTALLED, &ec->flags);
1495        }
1496        if (test_bit(EC_FLAGS_EVT_HANDLER_INSTALLED, &ec->flags)) {
1497                acpi_ec_remove_query_handlers(ec, true, 0);
1498                clear_bit(EC_FLAGS_EVT_HANDLER_INSTALLED, &ec->flags);
1499        }
1500}
1501
1502static int acpi_ec_setup(struct acpi_ec *ec, bool handle_events)
1503{
1504        int ret;
1505
1506        ret = ec_install_handlers(ec, handle_events);
1507        if (ret)
1508                return ret;
1509
1510        /* First EC capable of handling transactions */
1511        if (!first_ec) {
1512                first_ec = ec;
1513                acpi_handle_info(first_ec->handle, "Used as first EC\n");
1514        }
1515
1516        acpi_handle_info(ec->handle,
1517                         "GPE=0x%lx, EC_CMD/EC_SC=0x%lx, EC_DATA=0x%lx\n",
1518                         ec->gpe, ec->command_addr, ec->data_addr);
1519        return ret;
1520}
1521
1522static int acpi_config_boot_ec(struct acpi_ec *ec, acpi_handle handle,
1523                               bool handle_events, bool is_ecdt)
1524{
1525        int ret;
1526
1527        /*
1528         * Changing the ACPI handle results in a re-configuration of the
1529         * boot EC. And if it happens after the namespace initialization,
1530         * it causes _REG evaluations.
1531         */
1532        if (boot_ec && boot_ec->handle != handle)
1533                ec_remove_handlers(boot_ec);
1534
1535        /* Unset old boot EC */
1536        if (boot_ec != ec)
1537                acpi_ec_free(boot_ec);
1538
1539        /*
1540         * ECDT device creation is split into acpi_ec_ecdt_probe() and
1541         * acpi_ec_ecdt_start(). This function takes care of completing the
1542         * ECDT parsing logic as the handle update should be performed
1543         * between the installation/uninstallation of the handlers.
1544         */
1545        if (ec->handle != handle)
1546                ec->handle = handle;
1547
1548        ret = acpi_ec_setup(ec, handle_events);
1549        if (ret)
1550                return ret;
1551
1552        /* Set new boot EC */
1553        if (!boot_ec) {
1554                boot_ec = ec;
1555                boot_ec_is_ecdt = is_ecdt;
1556        }
1557
1558        acpi_handle_info(boot_ec->handle,
1559                         "Used as boot %s EC to handle transactions%s\n",
1560                         is_ecdt ? "ECDT" : "DSDT",
1561                         handle_events ? " and events" : "");
1562        return ret;
1563}
1564
1565static bool acpi_ec_ecdt_get_handle(acpi_handle *phandle)
1566{
1567        struct acpi_table_ecdt *ecdt_ptr;
1568        acpi_status status;
1569        acpi_handle handle;
1570
1571        status = acpi_get_table(ACPI_SIG_ECDT, 1,
1572                                (struct acpi_table_header **)&ecdt_ptr);
1573        if (ACPI_FAILURE(status))
1574                return false;
1575
1576        status = acpi_get_handle(NULL, ecdt_ptr->id, &handle);
1577        if (ACPI_FAILURE(status))
1578                return false;
1579
1580        *phandle = handle;
1581        return true;
1582}
1583
1584static bool acpi_is_boot_ec(struct acpi_ec *ec)
1585{
1586        if (!boot_ec)
1587                return false;
1588        if (ec->command_addr == boot_ec->command_addr &&
1589            ec->data_addr == boot_ec->data_addr)
1590                return true;
1591        return false;
1592}
1593
1594static int acpi_ec_add(struct acpi_device *device)
1595{
1596        struct acpi_ec *ec = NULL;
1597        int ret;
1598
1599        strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME);
1600        strcpy(acpi_device_class(device), ACPI_EC_CLASS);
1601
1602        ec = acpi_ec_alloc();
1603        if (!ec)
1604                return -ENOMEM;
1605        if (ec_parse_device(device->handle, 0, ec, NULL) !=
1606                AE_CTRL_TERMINATE) {
1607                        ret = -EINVAL;
1608                        goto err_alloc;
1609        }
1610
1611        if (acpi_is_boot_ec(ec)) {
1612                boot_ec_is_ecdt = false;
1613                /*
1614                 * Trust PNP0C09 namespace location rather than ECDT ID.
1615                 *
1616                 * But trust ECDT GPE rather than _GPE because of ASUS quirks,
1617                 * so do not change boot_ec->gpe to ec->gpe.
1618                 */
1619                boot_ec->handle = ec->handle;
1620                acpi_handle_debug(ec->handle, "duplicated.\n");
1621                acpi_ec_free(ec);
1622                ec = boot_ec;
1623                ret = acpi_config_boot_ec(ec, ec->handle, true, false);
1624        } else
1625                ret = acpi_ec_setup(ec, true);
1626        if (ret)
1627                goto err_query;
1628
1629        device->driver_data = ec;
1630
1631        ret = !!request_region(ec->data_addr, 1, "EC data");
1632        WARN(!ret, "Could not request EC data io port 0x%lx", ec->data_addr);
1633        ret = !!request_region(ec->command_addr, 1, "EC cmd");
1634        WARN(!ret, "Could not request EC cmd io port 0x%lx", ec->command_addr);
1635
1636        /* Reprobe devices depending on the EC */
1637        acpi_walk_dep_device_list(ec->handle);
1638        acpi_handle_debug(ec->handle, "enumerated.\n");
1639        return 0;
1640
1641err_query:
1642        if (ec != boot_ec)
1643                acpi_ec_remove_query_handlers(ec, true, 0);
1644err_alloc:
1645        if (ec != boot_ec)
1646                acpi_ec_free(ec);
1647        return ret;
1648}
1649
1650static int acpi_ec_remove(struct acpi_device *device)
1651{
1652        struct acpi_ec *ec;
1653
1654        if (!device)
1655                return -EINVAL;
1656
1657        ec = acpi_driver_data(device);
1658        release_region(ec->data_addr, 1);
1659        release_region(ec->command_addr, 1);
1660        device->driver_data = NULL;
1661        if (ec != boot_ec) {
1662                ec_remove_handlers(ec);
1663                acpi_ec_free(ec);
1664        }
1665        return 0;
1666}
1667
1668static acpi_status
1669ec_parse_io_ports(struct acpi_resource *resource, void *context)
1670{
1671        struct acpi_ec *ec = context;
1672
1673        if (resource->type != ACPI_RESOURCE_TYPE_IO)
1674                return AE_OK;
1675
1676        /*
1677         * The first address region returned is the data port, and
1678         * the second address region returned is the status/command
1679         * port.
1680         */
1681        if (ec->data_addr == 0)
1682                ec->data_addr = resource->data.io.minimum;
1683        else if (ec->command_addr == 0)
1684                ec->command_addr = resource->data.io.minimum;
1685        else
1686                return AE_CTRL_TERMINATE;
1687
1688        return AE_OK;
1689}
1690
1691static const struct acpi_device_id ec_device_ids[] = {
1692        {"PNP0C09", 0},
1693        {"", 0},
1694};
1695
1696/*
1697 * This function is not Windows-compatible as Windows never enumerates the
1698 * namespace EC before the main ACPI device enumeration process. It is
1699 * retained for historical reason and will be deprecated in the future.
1700 */
1701int __init acpi_ec_dsdt_probe(void)
1702{
1703        acpi_status status;
1704        struct acpi_ec *ec;
1705        int ret;
1706
1707        /*
1708         * If a platform has ECDT, there is no need to proceed as the
1709         * following probe is not a part of the ACPI device enumeration,
1710         * executing _STA is not safe, and thus this probe may risk of
1711         * picking up an invalid EC device.
1712         */
1713        if (boot_ec)
1714                return -ENODEV;
1715
1716        ec = acpi_ec_alloc();
1717        if (!ec)
1718                return -ENOMEM;
1719        /*
1720         * At this point, the namespace is initialized, so start to find
1721         * the namespace objects.
1722         */
1723        status = acpi_get_devices(ec_device_ids[0].id,
1724                                  ec_parse_device, ec, NULL);
1725        if (ACPI_FAILURE(status) || !ec->handle) {
1726                ret = -ENODEV;
1727                goto error;
1728        }
1729        /*
1730         * When the DSDT EC is available, always re-configure boot EC to
1731         * have _REG evaluated. _REG can only be evaluated after the
1732         * namespace initialization.
1733         * At this point, the GPE is not fully initialized, so do not to
1734         * handle the events.
1735         */
1736        ret = acpi_config_boot_ec(ec, ec->handle, false, false);
1737error:
1738        if (ret)
1739                acpi_ec_free(ec);
1740        return ret;
1741}
1742
1743/*
1744 * If the DSDT EC is not functioning, we still need to prepare a fully
1745 * functioning ECDT EC first in order to handle the events.
1746 * https://bugzilla.kernel.org/show_bug.cgi?id=115021
1747 */
1748static int __init acpi_ec_ecdt_start(void)
1749{
1750        acpi_handle handle;
1751
1752        if (!boot_ec)
1753                return -ENODEV;
1754        /* In case acpi_ec_ecdt_start() is called after acpi_ec_add() */
1755        if (!boot_ec_is_ecdt)
1756                return -ENODEV;
1757
1758        /*
1759         * At this point, the namespace and the GPE is initialized, so
1760         * start to find the namespace objects and handle the events.
1761         *
1762         * Note: ec->handle can be valid if this function is called after
1763         * acpi_ec_add(), hence the fast path.
1764         */
1765        if (boot_ec->handle != ACPI_ROOT_OBJECT)
1766                handle = boot_ec->handle;
1767        else if (!acpi_ec_ecdt_get_handle(&handle))
1768                return -ENODEV;
1769        return acpi_config_boot_ec(boot_ec, handle, true, true);
1770}
1771
1772#if 0
1773/*
1774 * Some EC firmware variations refuses to respond QR_EC when SCI_EVT is not
1775 * set, for which case, we complete the QR_EC without issuing it to the
1776 * firmware.
1777 * https://bugzilla.kernel.org/show_bug.cgi?id=82611
1778 * https://bugzilla.kernel.org/show_bug.cgi?id=97381
1779 */
1780static int ec_flag_query_handshake(const struct dmi_system_id *id)
1781{
1782        pr_debug("Detected the EC firmware requiring QR_EC issued when SCI_EVT set\n");
1783        EC_FLAGS_QUERY_HANDSHAKE = 1;
1784        return 0;
1785}
1786#endif
1787
1788/*
1789 * Some ECDTs contain wrong register addresses.
1790 * MSI MS-171F
1791 * https://bugzilla.kernel.org/show_bug.cgi?id=12461
1792 */
1793static int ec_correct_ecdt(const struct dmi_system_id *id)
1794{
1795        pr_debug("Detected system needing ECDT address correction.\n");
1796        EC_FLAGS_CORRECT_ECDT = 1;
1797        return 0;
1798}
1799
1800/*
1801 * Some DSDTs contain wrong GPE setting.
1802 * Asus FX502VD/VE, GL702VMK, X550VXK, X580VD
1803 * https://bugzilla.kernel.org/show_bug.cgi?id=195651
1804 */
1805static int ec_honor_ecdt_gpe(const struct dmi_system_id *id)
1806{
1807        pr_debug("Detected system needing ignore DSDT GPE setting.\n");
1808        EC_FLAGS_IGNORE_DSDT_GPE = 1;
1809        return 0;
1810}
1811
1812static const struct dmi_system_id ec_dmi_table[] __initconst = {
1813        {
1814        ec_correct_ecdt, "MSI MS-171F", {
1815        DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star"),
1816        DMI_MATCH(DMI_PRODUCT_NAME, "MS-171F"),}, NULL},
1817        {
1818        ec_honor_ecdt_gpe, "ASUS FX502VD", {
1819        DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1820        DMI_MATCH(DMI_PRODUCT_NAME, "FX502VD"),}, NULL},
1821        {
1822        ec_honor_ecdt_gpe, "ASUS FX502VE", {
1823        DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1824        DMI_MATCH(DMI_PRODUCT_NAME, "FX502VE"),}, NULL},
1825        {
1826        ec_honor_ecdt_gpe, "ASUS GL702VMK", {
1827        DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1828        DMI_MATCH(DMI_PRODUCT_NAME, "GL702VMK"),}, NULL},
1829        {
1830        ec_honor_ecdt_gpe, "ASUS X550VXK", {
1831        DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1832        DMI_MATCH(DMI_PRODUCT_NAME, "X550VXK"),}, NULL},
1833        {
1834        ec_honor_ecdt_gpe, "ASUS X580VD", {
1835        DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1836        DMI_MATCH(DMI_PRODUCT_NAME, "X580VD"),}, NULL},
1837        {},
1838};
1839
1840int __init acpi_ec_ecdt_probe(void)
1841{
1842        int ret;
1843        acpi_status status;
1844        struct acpi_table_ecdt *ecdt_ptr;
1845        struct acpi_ec *ec;
1846
1847        ec = acpi_ec_alloc();
1848        if (!ec)
1849                return -ENOMEM;
1850        /*
1851         * Generate a boot ec context
1852         */
1853        dmi_check_system(ec_dmi_table);
1854        status = acpi_get_table(ACPI_SIG_ECDT, 1,
1855                                (struct acpi_table_header **)&ecdt_ptr);
1856        if (ACPI_FAILURE(status)) {
1857                ret = -ENODEV;
1858                goto error;
1859        }
1860
1861        if (!ecdt_ptr->control.address || !ecdt_ptr->data.address) {
1862                /*
1863                 * Asus X50GL:
1864                 * https://bugzilla.kernel.org/show_bug.cgi?id=11880
1865                 */
1866                ret = -ENODEV;
1867                goto error;
1868        }
1869
1870        if (EC_FLAGS_CORRECT_ECDT) {
1871                ec->command_addr = ecdt_ptr->data.address;
1872                ec->data_addr = ecdt_ptr->control.address;
1873        } else {
1874                ec->command_addr = ecdt_ptr->control.address;
1875                ec->data_addr = ecdt_ptr->data.address;
1876        }
1877        ec->gpe = ecdt_ptr->gpe;
1878
1879        /*
1880         * At this point, the namespace is not initialized, so do not find
1881         * the namespace objects, or handle the events.
1882         */
1883        ret = acpi_config_boot_ec(ec, ACPI_ROOT_OBJECT, false, true);
1884error:
1885        if (ret)
1886                acpi_ec_free(ec);
1887        return ret;
1888}
1889
1890#ifdef CONFIG_PM_SLEEP
1891static int acpi_ec_suspend(struct device *dev)
1892{
1893        struct acpi_ec *ec =
1894                acpi_driver_data(to_acpi_device(dev));
1895
1896        if (acpi_sleep_no_ec_events() && ec_freeze_events)
1897                acpi_ec_disable_event(ec);
1898        return 0;
1899}
1900
1901static int acpi_ec_suspend_noirq(struct device *dev)
1902{
1903        struct acpi_ec *ec = acpi_driver_data(to_acpi_device(dev));
1904
1905        /*
1906         * The SCI handler doesn't run at this point, so the GPE can be
1907         * masked at the low level without side effects.
1908         */
1909        if (ec_no_wakeup && test_bit(EC_FLAGS_STARTED, &ec->flags) &&
1910            ec->reference_count >= 1)
1911                acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_DISABLE);
1912
1913        return 0;
1914}
1915
1916static int acpi_ec_resume_noirq(struct device *dev)
1917{
1918        struct acpi_ec *ec = acpi_driver_data(to_acpi_device(dev));
1919
1920        if (ec_no_wakeup && test_bit(EC_FLAGS_STARTED, &ec->flags) &&
1921            ec->reference_count >= 1)
1922                acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_ENABLE);
1923
1924        return 0;
1925}
1926
1927static int acpi_ec_resume(struct device *dev)
1928{
1929        struct acpi_ec *ec =
1930                acpi_driver_data(to_acpi_device(dev));
1931
1932        acpi_ec_enable_event(ec);
1933        return 0;
1934}
1935#endif
1936
1937static const struct dev_pm_ops acpi_ec_pm = {
1938        SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(acpi_ec_suspend_noirq, acpi_ec_resume_noirq)
1939        SET_SYSTEM_SLEEP_PM_OPS(acpi_ec_suspend, acpi_ec_resume)
1940};
1941
1942static int param_set_event_clearing(const char *val, struct kernel_param *kp)
1943{
1944        int result = 0;
1945
1946        if (!strncmp(val, "status", sizeof("status") - 1)) {
1947                ec_event_clearing = ACPI_EC_EVT_TIMING_STATUS;
1948                pr_info("Assuming SCI_EVT clearing on EC_SC accesses\n");
1949        } else if (!strncmp(val, "query", sizeof("query") - 1)) {
1950                ec_event_clearing = ACPI_EC_EVT_TIMING_QUERY;
1951                pr_info("Assuming SCI_EVT clearing on QR_EC writes\n");
1952        } else if (!strncmp(val, "event", sizeof("event") - 1)) {
1953                ec_event_clearing = ACPI_EC_EVT_TIMING_EVENT;
1954                pr_info("Assuming SCI_EVT clearing on event reads\n");
1955        } else
1956                result = -EINVAL;
1957        return result;
1958}
1959
1960static int param_get_event_clearing(char *buffer, struct kernel_param *kp)
1961{
1962        switch (ec_event_clearing) {
1963        case ACPI_EC_EVT_TIMING_STATUS:
1964                return sprintf(buffer, "status");
1965        case ACPI_EC_EVT_TIMING_QUERY:
1966                return sprintf(buffer, "query");
1967        case ACPI_EC_EVT_TIMING_EVENT:
1968                return sprintf(buffer, "event");
1969        default:
1970                return sprintf(buffer, "invalid");
1971        }
1972        return 0;
1973}
1974
1975module_param_call(ec_event_clearing, param_set_event_clearing, param_get_event_clearing,
1976                  NULL, 0644);
1977MODULE_PARM_DESC(ec_event_clearing, "Assumed SCI_EVT clearing timing");
1978
1979static struct acpi_driver acpi_ec_driver = {
1980        .name = "ec",
1981        .class = ACPI_EC_CLASS,
1982        .ids = ec_device_ids,
1983        .ops = {
1984                .add = acpi_ec_add,
1985                .remove = acpi_ec_remove,
1986                },
1987        .drv.pm = &acpi_ec_pm,
1988};
1989
1990static inline int acpi_ec_query_init(void)
1991{
1992        if (!ec_query_wq) {
1993                ec_query_wq = alloc_workqueue("kec_query", 0,
1994                                              ec_max_queries);
1995                if (!ec_query_wq)
1996                        return -ENODEV;
1997        }
1998        return 0;
1999}
2000
2001static inline void acpi_ec_query_exit(void)
2002{
2003        if (ec_query_wq) {
2004                destroy_workqueue(ec_query_wq);
2005                ec_query_wq = NULL;
2006        }
2007}
2008
2009int __init acpi_ec_init(void)
2010{
2011        int result;
2012        int ecdt_fail, dsdt_fail;
2013
2014        /* register workqueue for _Qxx evaluations */
2015        result = acpi_ec_query_init();
2016        if (result)
2017                return result;
2018
2019        /* Drivers must be started after acpi_ec_query_init() */
2020        dsdt_fail = acpi_bus_register_driver(&acpi_ec_driver);
2021        ecdt_fail = acpi_ec_ecdt_start();
2022        return ecdt_fail && dsdt_fail ? -ENODEV : 0;
2023}
2024
2025/* EC driver currently not unloadable */
2026#if 0
2027static void __exit acpi_ec_exit(void)
2028{
2029
2030        acpi_bus_unregister_driver(&acpi_ec_driver);
2031        acpi_ec_query_exit();
2032}
2033#endif  /* 0 */
2034