linux/drivers/acpi/ec.c
<<
>>
Prefs
   1/*
   2 *  ec.c - ACPI Embedded Controller Driver (v2.1)
   3 *
   4 *  Copyright (C) 2006-2008 Alexey Starikovskiy <astarikovskiy@suse.de>
   5 *  Copyright (C) 2006 Denis Sadykov <denis.m.sadykov@intel.com>
   6 *  Copyright (C) 2004 Luming Yu <luming.yu@intel.com>
   7 *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
   8 *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
   9 *
  10 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  11 *
  12 *  This program is free software; you can redistribute it and/or modify
  13 *  it under the terms of the GNU General Public License as published by
  14 *  the Free Software Foundation; either version 2 of the License, or (at
  15 *  your option) any later version.
  16 *
  17 *  This program is distributed in the hope that it will be useful, but
  18 *  WITHOUT ANY WARRANTY; without even the implied warranty of
  19 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  20 *  General Public License for more details.
  21 *
  22 *  You should have received a copy of the GNU General Public License along
  23 *  with this program; if not, write to the Free Software Foundation, Inc.,
  24 *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  25 *
  26 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  27 */
  28
  29/* Uncomment next line to get verbose printout */
  30/* #define DEBUG */
  31#define pr_fmt(fmt) "ACPI : EC: " fmt
  32
  33#include <linux/kernel.h>
  34#include <linux/module.h>
  35#include <linux/init.h>
  36#include <linux/types.h>
  37#include <linux/delay.h>
  38#include <linux/interrupt.h>
  39#include <linux/list.h>
  40#include <linux/spinlock.h>
  41#include <linux/slab.h>
  42#include <asm/io.h>
  43#include <acpi/acpi_bus.h>
  44#include <acpi/acpi_drivers.h>
  45#include <linux/dmi.h>
  46
  47#include "internal.h"
  48
  49#define ACPI_EC_CLASS                   "embedded_controller"
  50#define ACPI_EC_DEVICE_NAME             "Embedded Controller"
  51#define ACPI_EC_FILE_INFO               "info"
  52
  53/* EC status register */
  54#define ACPI_EC_FLAG_OBF        0x01    /* Output buffer full */
  55#define ACPI_EC_FLAG_IBF        0x02    /* Input buffer full */
  56#define ACPI_EC_FLAG_BURST      0x10    /* burst mode */
  57#define ACPI_EC_FLAG_SCI        0x20    /* EC-SCI occurred */
  58
  59/* EC commands */
  60enum ec_command {
  61        ACPI_EC_COMMAND_READ = 0x80,
  62        ACPI_EC_COMMAND_WRITE = 0x81,
  63        ACPI_EC_BURST_ENABLE = 0x82,
  64        ACPI_EC_BURST_DISABLE = 0x83,
  65        ACPI_EC_COMMAND_QUERY = 0x84,
  66};
  67
  68#define ACPI_EC_DELAY           500     /* Wait 500ms max. during EC ops */
  69#define ACPI_EC_UDELAY_GLK      1000    /* Wait 1ms max. to get global lock */
  70#define ACPI_EC_MSI_UDELAY      550     /* Wait 550us for MSI EC */
  71
  72enum {
  73        EC_FLAGS_QUERY_PENDING,         /* Query is pending */
  74        EC_FLAGS_GPE_STORM,             /* GPE storm detected */
  75        EC_FLAGS_HANDLERS_INSTALLED,    /* Handlers for GPE and
  76                                         * OpReg are installed */
  77        EC_FLAGS_BLOCKED,               /* Transactions are blocked */
  78};
  79
  80/* ec.c is compiled in acpi namespace so this shows up as acpi.ec_delay param */
  81static unsigned int ec_delay __read_mostly = ACPI_EC_DELAY;
  82module_param(ec_delay, uint, 0644);
  83MODULE_PARM_DESC(ec_delay, "Timeout(ms) waited until an EC command completes");
  84
  85/*
  86 * If the number of false interrupts per one transaction exceeds
  87 * this threshold, will think there is a GPE storm happened and
  88 * will disable the GPE for normal transaction.
  89 */
  90static unsigned int ec_storm_threshold  __read_mostly = 8;
  91module_param(ec_storm_threshold, uint, 0644);
  92MODULE_PARM_DESC(ec_storm_threshold, "Maxim false GPE numbers not considered as GPE storm");
  93
  94/* If we find an EC via the ECDT, we need to keep a ptr to its context */
  95/* External interfaces use first EC only, so remember */
  96typedef int (*acpi_ec_query_func) (void *data);
  97
  98struct acpi_ec_query_handler {
  99        struct list_head node;
 100        acpi_ec_query_func func;
 101        acpi_handle handle;
 102        void *data;
 103        u8 query_bit;
 104};
 105
 106struct transaction {
 107        const u8 *wdata;
 108        u8 *rdata;
 109        unsigned short irq_count;
 110        u8 command;
 111        u8 wi;
 112        u8 ri;
 113        u8 wlen;
 114        u8 rlen;
 115        bool done;
 116};
 117
 118struct acpi_ec *boot_ec, *first_ec;
 119EXPORT_SYMBOL(first_ec);
 120
 121static int EC_FLAGS_MSI; /* Out-of-spec MSI controller */
 122static int EC_FLAGS_VALIDATE_ECDT; /* ASUStec ECDTs need to be validated */
 123static int EC_FLAGS_SKIP_DSDT_SCAN; /* Not all BIOS survive early DSDT scan */
 124
 125/* --------------------------------------------------------------------------
 126                             Transaction Management
 127   -------------------------------------------------------------------------- */
 128
 129static inline u8 acpi_ec_read_status(struct acpi_ec *ec)
 130{
 131        u8 x = inb(ec->command_addr);
 132        pr_debug("---> status = 0x%2.2x\n", x);
 133        return x;
 134}
 135
 136static inline u8 acpi_ec_read_data(struct acpi_ec *ec)
 137{
 138        u8 x = inb(ec->data_addr);
 139        pr_debug("---> data = 0x%2.2x\n", x);
 140        return x;
 141}
 142
 143static inline void acpi_ec_write_cmd(struct acpi_ec *ec, u8 command)
 144{
 145        pr_debug("<--- command = 0x%2.2x\n", command);
 146        outb(command, ec->command_addr);
 147}
 148
 149static inline void acpi_ec_write_data(struct acpi_ec *ec, u8 data)
 150{
 151        pr_debug("<--- data = 0x%2.2x\n", data);
 152        outb(data, ec->data_addr);
 153}
 154
 155static int ec_transaction_done(struct acpi_ec *ec)
 156{
 157        unsigned long flags;
 158        int ret = 0;
 159        spin_lock_irqsave(&ec->lock, flags);
 160        if (!ec->curr || ec->curr->done)
 161                ret = 1;
 162        spin_unlock_irqrestore(&ec->lock, flags);
 163        return ret;
 164}
 165
 166static void start_transaction(struct acpi_ec *ec)
 167{
 168        ec->curr->irq_count = ec->curr->wi = ec->curr->ri = 0;
 169        ec->curr->done = false;
 170        acpi_ec_write_cmd(ec, ec->curr->command);
 171}
 172
 173static void advance_transaction(struct acpi_ec *ec, u8 status)
 174{
 175        unsigned long flags;
 176        struct transaction *t;
 177
 178        spin_lock_irqsave(&ec->lock, flags);
 179        t = ec->curr;
 180        if (!t)
 181                goto unlock;
 182        if (t->wlen > t->wi) {
 183                if ((status & ACPI_EC_FLAG_IBF) == 0)
 184                        acpi_ec_write_data(ec,
 185                                t->wdata[t->wi++]);
 186                else
 187                        goto err;
 188        } else if (t->rlen > t->ri) {
 189                if ((status & ACPI_EC_FLAG_OBF) == 1) {
 190                        t->rdata[t->ri++] = acpi_ec_read_data(ec);
 191                        if (t->rlen == t->ri)
 192                                t->done = true;
 193                } else
 194                        goto err;
 195        } else if (t->wlen == t->wi &&
 196                   (status & ACPI_EC_FLAG_IBF) == 0)
 197                t->done = true;
 198        goto unlock;
 199err:
 200        /*
 201         * If SCI bit is set, then don't think it's a false IRQ
 202         * otherwise will take a not handled IRQ as a false one.
 203         */
 204        if (in_interrupt() && !(status & ACPI_EC_FLAG_SCI))
 205                ++t->irq_count;
 206
 207unlock:
 208        spin_unlock_irqrestore(&ec->lock, flags);
 209}
 210
 211static int acpi_ec_sync_query(struct acpi_ec *ec);
 212
 213static int ec_check_sci_sync(struct acpi_ec *ec, u8 state)
 214{
 215        if (state & ACPI_EC_FLAG_SCI) {
 216                if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags))
 217                        return acpi_ec_sync_query(ec);
 218        }
 219        return 0;
 220}
 221
 222static int ec_poll(struct acpi_ec *ec)
 223{
 224        unsigned long flags;
 225        int repeat = 5; /* number of command restarts */
 226        while (repeat--) {
 227                unsigned long delay = jiffies +
 228                        msecs_to_jiffies(ec_delay);
 229                do {
 230                        /* don't sleep with disabled interrupts */
 231                        if (EC_FLAGS_MSI || irqs_disabled()) {
 232                                udelay(ACPI_EC_MSI_UDELAY);
 233                                if (ec_transaction_done(ec))
 234                                        return 0;
 235                        } else {
 236                                if (wait_event_timeout(ec->wait,
 237                                                ec_transaction_done(ec),
 238                                                msecs_to_jiffies(1)))
 239                                        return 0;
 240                        }
 241                        advance_transaction(ec, acpi_ec_read_status(ec));
 242                } while (time_before(jiffies, delay));
 243                pr_debug("controller reset, restart transaction\n");
 244                spin_lock_irqsave(&ec->lock, flags);
 245                start_transaction(ec);
 246                spin_unlock_irqrestore(&ec->lock, flags);
 247        }
 248        return -ETIME;
 249}
 250
 251static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
 252                                        struct transaction *t)
 253{
 254        unsigned long tmp;
 255        int ret = 0;
 256        if (EC_FLAGS_MSI)
 257                udelay(ACPI_EC_MSI_UDELAY);
 258        /* start transaction */
 259        spin_lock_irqsave(&ec->lock, tmp);
 260        /* following two actions should be kept atomic */
 261        ec->curr = t;
 262        start_transaction(ec);
 263        if (ec->curr->command == ACPI_EC_COMMAND_QUERY)
 264                clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
 265        spin_unlock_irqrestore(&ec->lock, tmp);
 266        ret = ec_poll(ec);
 267        spin_lock_irqsave(&ec->lock, tmp);
 268        ec->curr = NULL;
 269        spin_unlock_irqrestore(&ec->lock, tmp);
 270        return ret;
 271}
 272
 273static int ec_check_ibf0(struct acpi_ec *ec)
 274{
 275        u8 status = acpi_ec_read_status(ec);
 276        return (status & ACPI_EC_FLAG_IBF) == 0;
 277}
 278
 279static int ec_wait_ibf0(struct acpi_ec *ec)
 280{
 281        unsigned long delay = jiffies + msecs_to_jiffies(ec_delay);
 282        /* interrupt wait manually if GPE mode is not active */
 283        while (time_before(jiffies, delay))
 284                if (wait_event_timeout(ec->wait, ec_check_ibf0(ec),
 285                                        msecs_to_jiffies(1)))
 286                        return 0;
 287        return -ETIME;
 288}
 289
 290static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t)
 291{
 292        int status;
 293        u32 glk;
 294        if (!ec || (!t) || (t->wlen && !t->wdata) || (t->rlen && !t->rdata))
 295                return -EINVAL;
 296        if (t->rdata)
 297                memset(t->rdata, 0, t->rlen);
 298        mutex_lock(&ec->mutex);
 299        if (test_bit(EC_FLAGS_BLOCKED, &ec->flags)) {
 300                status = -EINVAL;
 301                goto unlock;
 302        }
 303        if (ec->global_lock) {
 304                status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk);
 305                if (ACPI_FAILURE(status)) {
 306                        status = -ENODEV;
 307                        goto unlock;
 308                }
 309        }
 310        if (ec_wait_ibf0(ec)) {
 311                pr_err("input buffer is not empty, "
 312                                "aborting transaction\n");
 313                status = -ETIME;
 314                goto end;
 315        }
 316        pr_debug("transaction start (cmd=0x%02x, addr=0x%02x)\n",
 317                        t->command, t->wdata ? t->wdata[0] : 0);
 318        /* disable GPE during transaction if storm is detected */
 319        if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
 320                /* It has to be disabled, so that it doesn't trigger. */
 321                acpi_disable_gpe(NULL, ec->gpe);
 322        }
 323
 324        status = acpi_ec_transaction_unlocked(ec, t);
 325
 326        /* check if we received SCI during transaction */
 327        ec_check_sci_sync(ec, acpi_ec_read_status(ec));
 328        if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
 329                msleep(1);
 330                /* It is safe to enable the GPE outside of the transaction. */
 331                acpi_enable_gpe(NULL, ec->gpe);
 332        } else if (t->irq_count > ec_storm_threshold) {
 333                pr_info("GPE storm detected(%d GPEs), "
 334                        "transactions will use polling mode\n",
 335                        t->irq_count);
 336                set_bit(EC_FLAGS_GPE_STORM, &ec->flags);
 337        }
 338        pr_debug("transaction end\n");
 339end:
 340        if (ec->global_lock)
 341                acpi_release_global_lock(glk);
 342unlock:
 343        mutex_unlock(&ec->mutex);
 344        return status;
 345}
 346
 347static int acpi_ec_burst_enable(struct acpi_ec *ec)
 348{
 349        u8 d;
 350        struct transaction t = {.command = ACPI_EC_BURST_ENABLE,
 351                                .wdata = NULL, .rdata = &d,
 352                                .wlen = 0, .rlen = 1};
 353
 354        return acpi_ec_transaction(ec, &t);
 355}
 356
 357static int acpi_ec_burst_disable(struct acpi_ec *ec)
 358{
 359        struct transaction t = {.command = ACPI_EC_BURST_DISABLE,
 360                                .wdata = NULL, .rdata = NULL,
 361                                .wlen = 0, .rlen = 0};
 362
 363        return (acpi_ec_read_status(ec) & ACPI_EC_FLAG_BURST) ?
 364                                acpi_ec_transaction(ec, &t) : 0;
 365}
 366
 367static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 * data)
 368{
 369        int result;
 370        u8 d;
 371        struct transaction t = {.command = ACPI_EC_COMMAND_READ,
 372                                .wdata = &address, .rdata = &d,
 373                                .wlen = 1, .rlen = 1};
 374
 375        result = acpi_ec_transaction(ec, &t);
 376        *data = d;
 377        return result;
 378}
 379
 380static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data)
 381{
 382        u8 wdata[2] = { address, data };
 383        struct transaction t = {.command = ACPI_EC_COMMAND_WRITE,
 384                                .wdata = wdata, .rdata = NULL,
 385                                .wlen = 2, .rlen = 0};
 386
 387        return acpi_ec_transaction(ec, &t);
 388}
 389
 390/*
 391 * Externally callable EC access functions. For now, assume 1 EC only
 392 */
 393int ec_burst_enable(void)
 394{
 395        if (!first_ec)
 396                return -ENODEV;
 397        return acpi_ec_burst_enable(first_ec);
 398}
 399
 400EXPORT_SYMBOL(ec_burst_enable);
 401
 402int ec_burst_disable(void)
 403{
 404        if (!first_ec)
 405                return -ENODEV;
 406        return acpi_ec_burst_disable(first_ec);
 407}
 408
 409EXPORT_SYMBOL(ec_burst_disable);
 410
 411int ec_read(u8 addr, u8 *val)
 412{
 413        int err;
 414        u8 temp_data;
 415
 416        if (!first_ec)
 417                return -ENODEV;
 418
 419        err = acpi_ec_read(first_ec, addr, &temp_data);
 420
 421        if (!err) {
 422                *val = temp_data;
 423                return 0;
 424        } else
 425                return err;
 426}
 427
 428EXPORT_SYMBOL(ec_read);
 429
 430int ec_write(u8 addr, u8 val)
 431{
 432        int err;
 433
 434        if (!first_ec)
 435                return -ENODEV;
 436
 437        err = acpi_ec_write(first_ec, addr, val);
 438
 439        return err;
 440}
 441
 442EXPORT_SYMBOL(ec_write);
 443
 444int ec_transaction(u8 command,
 445                   const u8 * wdata, unsigned wdata_len,
 446                   u8 * rdata, unsigned rdata_len)
 447{
 448        struct transaction t = {.command = command,
 449                                .wdata = wdata, .rdata = rdata,
 450                                .wlen = wdata_len, .rlen = rdata_len};
 451        if (!first_ec)
 452                return -ENODEV;
 453
 454        return acpi_ec_transaction(first_ec, &t);
 455}
 456
 457EXPORT_SYMBOL(ec_transaction);
 458
 459/* Get the handle to the EC device */
 460acpi_handle ec_get_handle(void)
 461{
 462        if (!first_ec)
 463                return NULL;
 464        return first_ec->handle;
 465}
 466
 467EXPORT_SYMBOL(ec_get_handle);
 468
 469void acpi_ec_block_transactions(void)
 470{
 471        struct acpi_ec *ec = first_ec;
 472
 473        if (!ec)
 474                return;
 475
 476        mutex_lock(&ec->mutex);
 477        /* Prevent transactions from being carried out */
 478        set_bit(EC_FLAGS_BLOCKED, &ec->flags);
 479        mutex_unlock(&ec->mutex);
 480}
 481
 482void acpi_ec_unblock_transactions(void)
 483{
 484        struct acpi_ec *ec = first_ec;
 485
 486        if (!ec)
 487                return;
 488
 489        mutex_lock(&ec->mutex);
 490        /* Allow transactions to be carried out again */
 491        clear_bit(EC_FLAGS_BLOCKED, &ec->flags);
 492        mutex_unlock(&ec->mutex);
 493}
 494
 495void acpi_ec_unblock_transactions_early(void)
 496{
 497        /*
 498         * Allow transactions to happen again (this function is called from
 499         * atomic context during wakeup, so we don't need to acquire the mutex).
 500         */
 501        if (first_ec)
 502                clear_bit(EC_FLAGS_BLOCKED, &first_ec->flags);
 503}
 504
 505static int acpi_ec_query_unlocked(struct acpi_ec *ec, u8 * data)
 506{
 507        int result;
 508        u8 d;
 509        struct transaction t = {.command = ACPI_EC_COMMAND_QUERY,
 510                                .wdata = NULL, .rdata = &d,
 511                                .wlen = 0, .rlen = 1};
 512        if (!ec || !data)
 513                return -EINVAL;
 514        /*
 515         * Query the EC to find out which _Qxx method we need to evaluate.
 516         * Note that successful completion of the query causes the ACPI_EC_SCI
 517         * bit to be cleared (and thus clearing the interrupt source).
 518         */
 519        result = acpi_ec_transaction_unlocked(ec, &t);
 520        if (result)
 521                return result;
 522        if (!d)
 523                return -ENODATA;
 524        *data = d;
 525        return 0;
 526}
 527
 528/* --------------------------------------------------------------------------
 529                                Event Management
 530   -------------------------------------------------------------------------- */
 531int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit,
 532                              acpi_handle handle, acpi_ec_query_func func,
 533                              void *data)
 534{
 535        struct acpi_ec_query_handler *handler =
 536            kzalloc(sizeof(struct acpi_ec_query_handler), GFP_KERNEL);
 537        if (!handler)
 538                return -ENOMEM;
 539
 540        handler->query_bit = query_bit;
 541        handler->handle = handle;
 542        handler->func = func;
 543        handler->data = data;
 544        mutex_lock(&ec->mutex);
 545        list_add(&handler->node, &ec->list);
 546        mutex_unlock(&ec->mutex);
 547        return 0;
 548}
 549
 550EXPORT_SYMBOL_GPL(acpi_ec_add_query_handler);
 551
 552void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit)
 553{
 554        struct acpi_ec_query_handler *handler, *tmp;
 555        mutex_lock(&ec->mutex);
 556        list_for_each_entry_safe(handler, tmp, &ec->list, node) {
 557                if (query_bit == handler->query_bit) {
 558                        list_del(&handler->node);
 559                        kfree(handler);
 560                }
 561        }
 562        mutex_unlock(&ec->mutex);
 563}
 564
 565EXPORT_SYMBOL_GPL(acpi_ec_remove_query_handler);
 566
 567static void acpi_ec_run(void *cxt)
 568{
 569        struct acpi_ec_query_handler *handler = cxt;
 570        if (!handler)
 571                return;
 572        pr_debug("start query execution\n");
 573        if (handler->func)
 574                handler->func(handler->data);
 575        else if (handler->handle)
 576                acpi_evaluate_object(handler->handle, NULL, NULL, NULL);
 577        pr_debug("stop query execution\n");
 578        kfree(handler);
 579}
 580
 581static int acpi_ec_sync_query(struct acpi_ec *ec)
 582{
 583        u8 value = 0;
 584        int status;
 585        struct acpi_ec_query_handler *handler, *copy;
 586        if ((status = acpi_ec_query_unlocked(ec, &value)))
 587                return status;
 588        list_for_each_entry(handler, &ec->list, node) {
 589                if (value == handler->query_bit) {
 590                        /* have custom handler for this bit */
 591                        copy = kmalloc(sizeof(*handler), GFP_KERNEL);
 592                        if (!copy)
 593                                return -ENOMEM;
 594                        memcpy(copy, handler, sizeof(*copy));
 595                        pr_debug("push query execution (0x%2x) on queue\n",
 596                                value);
 597                        return acpi_os_execute((copy->func) ?
 598                                OSL_NOTIFY_HANDLER : OSL_GPE_HANDLER,
 599                                acpi_ec_run, copy);
 600                }
 601        }
 602        return 0;
 603}
 604
 605static void acpi_ec_gpe_query(void *ec_cxt)
 606{
 607        struct acpi_ec *ec = ec_cxt;
 608        if (!ec)
 609                return;
 610        mutex_lock(&ec->mutex);
 611        acpi_ec_sync_query(ec);
 612        mutex_unlock(&ec->mutex);
 613}
 614
 615static int ec_check_sci(struct acpi_ec *ec, u8 state)
 616{
 617        if (state & ACPI_EC_FLAG_SCI) {
 618                if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags)) {
 619                        pr_debug("push gpe query to the queue\n");
 620                        return acpi_os_execute(OSL_NOTIFY_HANDLER,
 621                                acpi_ec_gpe_query, ec);
 622                }
 623        }
 624        return 0;
 625}
 626
 627static u32 acpi_ec_gpe_handler(acpi_handle gpe_device,
 628        u32 gpe_number, void *data)
 629{
 630        struct acpi_ec *ec = data;
 631        u8 status = acpi_ec_read_status(ec);
 632
 633        pr_debug("~~~> interrupt, status:0x%02x\n", status);
 634
 635        advance_transaction(ec, status);
 636        if (ec_transaction_done(ec) &&
 637            (acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF) == 0) {
 638                wake_up(&ec->wait);
 639                ec_check_sci(ec, acpi_ec_read_status(ec));
 640        }
 641        return ACPI_INTERRUPT_HANDLED | ACPI_REENABLE_GPE;
 642}
 643
 644/* --------------------------------------------------------------------------
 645                             Address Space Management
 646   -------------------------------------------------------------------------- */
 647
 648static acpi_status
 649acpi_ec_space_handler(u32 function, acpi_physical_address address,
 650                      u32 bits, u64 *value64,
 651                      void *handler_context, void *region_context)
 652{
 653        struct acpi_ec *ec = handler_context;
 654        int result = 0, i, bytes = bits / 8;
 655        u8 *value = (u8 *)value64;
 656
 657        if ((address > 0xFF) || !value || !handler_context)
 658                return AE_BAD_PARAMETER;
 659
 660        if (function != ACPI_READ && function != ACPI_WRITE)
 661                return AE_BAD_PARAMETER;
 662
 663        if (EC_FLAGS_MSI || bits > 8)
 664                acpi_ec_burst_enable(ec);
 665
 666        for (i = 0; i < bytes; ++i, ++address, ++value)
 667                result = (function == ACPI_READ) ?
 668                        acpi_ec_read(ec, address, value) :
 669                        acpi_ec_write(ec, address, *value);
 670
 671        if (EC_FLAGS_MSI || bits > 8)
 672                acpi_ec_burst_disable(ec);
 673
 674        switch (result) {
 675        case -EINVAL:
 676                return AE_BAD_PARAMETER;
 677                break;
 678        case -ENODEV:
 679                return AE_NOT_FOUND;
 680                break;
 681        case -ETIME:
 682                return AE_TIME;
 683                break;
 684        default:
 685                return AE_OK;
 686        }
 687}
 688
 689/* --------------------------------------------------------------------------
 690                               Driver Interface
 691   -------------------------------------------------------------------------- */
 692static acpi_status
 693ec_parse_io_ports(struct acpi_resource *resource, void *context);
 694
 695static struct acpi_ec *make_acpi_ec(void)
 696{
 697        struct acpi_ec *ec = kzalloc(sizeof(struct acpi_ec), GFP_KERNEL);
 698        if (!ec)
 699                return NULL;
 700        ec->flags = 1 << EC_FLAGS_QUERY_PENDING;
 701        mutex_init(&ec->mutex);
 702        init_waitqueue_head(&ec->wait);
 703        INIT_LIST_HEAD(&ec->list);
 704        spin_lock_init(&ec->lock);
 705        return ec;
 706}
 707
 708static acpi_status
 709acpi_ec_register_query_methods(acpi_handle handle, u32 level,
 710                               void *context, void **return_value)
 711{
 712        char node_name[5];
 713        struct acpi_buffer buffer = { sizeof(node_name), node_name };
 714        struct acpi_ec *ec = context;
 715        int value = 0;
 716        acpi_status status;
 717
 718        status = acpi_get_name(handle, ACPI_SINGLE_NAME, &buffer);
 719
 720        if (ACPI_SUCCESS(status) && sscanf(node_name, "_Q%x", &value) == 1) {
 721                acpi_ec_add_query_handler(ec, value, handle, NULL, NULL);
 722        }
 723        return AE_OK;
 724}
 725
 726static acpi_status
 727ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval)
 728{
 729        acpi_status status;
 730        unsigned long long tmp = 0;
 731
 732        struct acpi_ec *ec = context;
 733
 734        /* clear addr values, ec_parse_io_ports depend on it */
 735        ec->command_addr = ec->data_addr = 0;
 736
 737        status = acpi_walk_resources(handle, METHOD_NAME__CRS,
 738                                     ec_parse_io_ports, ec);
 739        if (ACPI_FAILURE(status))
 740                return status;
 741
 742        /* Get GPE bit assignment (EC events). */
 743        /* TODO: Add support for _GPE returning a package */
 744        status = acpi_evaluate_integer(handle, "_GPE", NULL, &tmp);
 745        if (ACPI_FAILURE(status))
 746                return status;
 747        ec->gpe = tmp;
 748        /* Use the global lock for all EC transactions? */
 749        tmp = 0;
 750        acpi_evaluate_integer(handle, "_GLK", NULL, &tmp);
 751        ec->global_lock = tmp;
 752        ec->handle = handle;
 753        return AE_CTRL_TERMINATE;
 754}
 755
 756static int ec_install_handlers(struct acpi_ec *ec)
 757{
 758        acpi_status status;
 759        if (test_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags))
 760                return 0;
 761        status = acpi_install_gpe_handler(NULL, ec->gpe,
 762                                  ACPI_GPE_EDGE_TRIGGERED,
 763                                  &acpi_ec_gpe_handler, ec);
 764        if (ACPI_FAILURE(status))
 765                return -ENODEV;
 766
 767        acpi_enable_gpe(NULL, ec->gpe);
 768        status = acpi_install_address_space_handler(ec->handle,
 769                                                    ACPI_ADR_SPACE_EC,
 770                                                    &acpi_ec_space_handler,
 771                                                    NULL, ec);
 772        if (ACPI_FAILURE(status)) {
 773                if (status == AE_NOT_FOUND) {
 774                        /*
 775                         * Maybe OS fails in evaluating the _REG object.
 776                         * The AE_NOT_FOUND error will be ignored and OS
 777                         * continue to initialize EC.
 778                         */
 779                        pr_err("Fail in evaluating the _REG object"
 780                                " of EC device. Broken bios is suspected.\n");
 781                } else {
 782                        acpi_remove_gpe_handler(NULL, ec->gpe,
 783                                &acpi_ec_gpe_handler);
 784                        acpi_disable_gpe(NULL, ec->gpe);
 785                        return -ENODEV;
 786                }
 787        }
 788
 789        set_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags);
 790        return 0;
 791}
 792
 793static void ec_remove_handlers(struct acpi_ec *ec)
 794{
 795        acpi_disable_gpe(NULL, ec->gpe);
 796        if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
 797                                ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
 798                pr_err("failed to remove space handler\n");
 799        if (ACPI_FAILURE(acpi_remove_gpe_handler(NULL, ec->gpe,
 800                                &acpi_ec_gpe_handler)))
 801                pr_err("failed to remove gpe handler\n");
 802        clear_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags);
 803}
 804
 805static int acpi_ec_add(struct acpi_device *device)
 806{
 807        struct acpi_ec *ec = NULL;
 808        int ret;
 809
 810        strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME);
 811        strcpy(acpi_device_class(device), ACPI_EC_CLASS);
 812
 813        /* Check for boot EC */
 814        if (boot_ec &&
 815            (boot_ec->handle == device->handle ||
 816             boot_ec->handle == ACPI_ROOT_OBJECT)) {
 817                ec = boot_ec;
 818                boot_ec = NULL;
 819        } else {
 820                ec = make_acpi_ec();
 821                if (!ec)
 822                        return -ENOMEM;
 823        }
 824        if (ec_parse_device(device->handle, 0, ec, NULL) !=
 825                AE_CTRL_TERMINATE) {
 826                        kfree(ec);
 827                        return -EINVAL;
 828        }
 829
 830        /* Find and register all query methods */
 831        acpi_walk_namespace(ACPI_TYPE_METHOD, ec->handle, 1,
 832                            acpi_ec_register_query_methods, NULL, ec, NULL);
 833
 834        if (!first_ec)
 835                first_ec = ec;
 836        device->driver_data = ec;
 837
 838        ret = !!request_region(ec->data_addr, 1, "EC data");
 839        WARN(!ret, "Could not request EC data io port 0x%lx", ec->data_addr);
 840        ret = !!request_region(ec->command_addr, 1, "EC cmd");
 841        WARN(!ret, "Could not request EC cmd io port 0x%lx", ec->command_addr);
 842
 843        pr_info("GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n",
 844                          ec->gpe, ec->command_addr, ec->data_addr);
 845
 846        ret = ec_install_handlers(ec);
 847
 848        /* EC is fully operational, allow queries */
 849        clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
 850        return ret;
 851}
 852
 853static int acpi_ec_remove(struct acpi_device *device)
 854{
 855        struct acpi_ec *ec;
 856        struct acpi_ec_query_handler *handler, *tmp;
 857
 858        if (!device)
 859                return -EINVAL;
 860
 861        ec = acpi_driver_data(device);
 862        ec_remove_handlers(ec);
 863        mutex_lock(&ec->mutex);
 864        list_for_each_entry_safe(handler, tmp, &ec->list, node) {
 865                list_del(&handler->node);
 866                kfree(handler);
 867        }
 868        mutex_unlock(&ec->mutex);
 869        release_region(ec->data_addr, 1);
 870        release_region(ec->command_addr, 1);
 871        device->driver_data = NULL;
 872        if (ec == first_ec)
 873                first_ec = NULL;
 874        kfree(ec);
 875        return 0;
 876}
 877
 878static acpi_status
 879ec_parse_io_ports(struct acpi_resource *resource, void *context)
 880{
 881        struct acpi_ec *ec = context;
 882
 883        if (resource->type != ACPI_RESOURCE_TYPE_IO)
 884                return AE_OK;
 885
 886        /*
 887         * The first address region returned is the data port, and
 888         * the second address region returned is the status/command
 889         * port.
 890         */
 891        if (ec->data_addr == 0)
 892                ec->data_addr = resource->data.io.minimum;
 893        else if (ec->command_addr == 0)
 894                ec->command_addr = resource->data.io.minimum;
 895        else
 896                return AE_CTRL_TERMINATE;
 897
 898        return AE_OK;
 899}
 900
 901int __init acpi_boot_ec_enable(void)
 902{
 903        if (!boot_ec || test_bit(EC_FLAGS_HANDLERS_INSTALLED, &boot_ec->flags))
 904                return 0;
 905        if (!ec_install_handlers(boot_ec)) {
 906                first_ec = boot_ec;
 907                return 0;
 908        }
 909        return -EFAULT;
 910}
 911
 912static const struct acpi_device_id ec_device_ids[] = {
 913        {"PNP0C09", 0},
 914        {"", 0},
 915};
 916
 917/* Some BIOS do not survive early DSDT scan, skip it */
 918static int ec_skip_dsdt_scan(const struct dmi_system_id *id)
 919{
 920        EC_FLAGS_SKIP_DSDT_SCAN = 1;
 921        return 0;
 922}
 923
 924/* ASUStek often supplies us with broken ECDT, validate it */
 925static int ec_validate_ecdt(const struct dmi_system_id *id)
 926{
 927        EC_FLAGS_VALIDATE_ECDT = 1;
 928        return 0;
 929}
 930
 931/* MSI EC needs special treatment, enable it */
 932static int ec_flag_msi(const struct dmi_system_id *id)
 933{
 934        pr_debug("Detected MSI hardware, enabling workarounds.\n");
 935        EC_FLAGS_MSI = 1;
 936        EC_FLAGS_VALIDATE_ECDT = 1;
 937        return 0;
 938}
 939
 940/*
 941 * Clevo M720 notebook actually works ok with IRQ mode, if we lifted
 942 * the GPE storm threshold back to 20
 943 */
 944static int ec_enlarge_storm_threshold(const struct dmi_system_id *id)
 945{
 946        pr_debug("Setting the EC GPE storm threshold to 20\n");
 947        ec_storm_threshold  = 20;
 948        return 0;
 949}
 950
 951static struct dmi_system_id ec_dmi_table[] __initdata = {
 952        {
 953        ec_skip_dsdt_scan, "Compal JFL92", {
 954        DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"),
 955        DMI_MATCH(DMI_BOARD_NAME, "JFL92") }, NULL},
 956        {
 957        ec_flag_msi, "MSI hardware", {
 958        DMI_MATCH(DMI_BIOS_VENDOR, "Micro-Star")}, NULL},
 959        {
 960        ec_flag_msi, "MSI hardware", {
 961        DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star")}, NULL},
 962        {
 963        ec_flag_msi, "MSI hardware", {
 964        DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-Star")}, NULL},
 965        {
 966        ec_flag_msi, "MSI hardware", {
 967        DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-STAR")}, NULL},
 968        {
 969        ec_flag_msi, "Quanta hardware", {
 970        DMI_MATCH(DMI_SYS_VENDOR, "Quanta"),
 971        DMI_MATCH(DMI_PRODUCT_NAME, "TW8/SW8/DW8"),}, NULL},
 972        {
 973        ec_flag_msi, "Quanta hardware", {
 974        DMI_MATCH(DMI_SYS_VENDOR, "Quanta"),
 975        DMI_MATCH(DMI_PRODUCT_NAME, "TW9/SW9"),}, NULL},
 976        {
 977        ec_validate_ecdt, "ASUS hardware", {
 978        DMI_MATCH(DMI_BIOS_VENDOR, "ASUS") }, NULL},
 979        {
 980        ec_validate_ecdt, "ASUS hardware", {
 981        DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc.") }, NULL},
 982        {
 983        ec_enlarge_storm_threshold, "CLEVO hardware", {
 984        DMI_MATCH(DMI_SYS_VENDOR, "CLEVO Co."),
 985        DMI_MATCH(DMI_PRODUCT_NAME, "M720T/M730T"),}, NULL},
 986        {
 987        ec_skip_dsdt_scan, "HP Folio 13", {
 988        DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
 989        DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13"),}, NULL},
 990        {
 991        ec_validate_ecdt, "ASUS hardware", {
 992        DMI_MATCH(DMI_SYS_VENDOR, "ASUSTek Computer Inc."),
 993        DMI_MATCH(DMI_PRODUCT_NAME, "L4R"),}, NULL},
 994        {},
 995};
 996
 997int __init acpi_ec_ecdt_probe(void)
 998{
 999        acpi_status status;
1000        struct acpi_ec *saved_ec = NULL;
1001        struct acpi_table_ecdt *ecdt_ptr;
1002
1003        boot_ec = make_acpi_ec();
1004        if (!boot_ec)
1005                return -ENOMEM;
1006        /*
1007         * Generate a boot ec context
1008         */
1009        dmi_check_system(ec_dmi_table);
1010        status = acpi_get_table(ACPI_SIG_ECDT, 1,
1011                                (struct acpi_table_header **)&ecdt_ptr);
1012        if (ACPI_SUCCESS(status)) {
1013                pr_info("EC description table is found, configuring boot EC\n");
1014                boot_ec->command_addr = ecdt_ptr->control.address;
1015                boot_ec->data_addr = ecdt_ptr->data.address;
1016                boot_ec->gpe = ecdt_ptr->gpe;
1017                boot_ec->handle = ACPI_ROOT_OBJECT;
1018                acpi_get_handle(ACPI_ROOT_OBJECT, ecdt_ptr->id, &boot_ec->handle);
1019                /* Don't trust ECDT, which comes from ASUSTek */
1020                if (!EC_FLAGS_VALIDATE_ECDT)
1021                        goto install;
1022                saved_ec = kmemdup(boot_ec, sizeof(struct acpi_ec), GFP_KERNEL);
1023                if (!saved_ec)
1024                        return -ENOMEM;
1025        /* fall through */
1026        }
1027
1028        if (EC_FLAGS_SKIP_DSDT_SCAN)
1029                return -ENODEV;
1030
1031        /* This workaround is needed only on some broken machines,
1032         * which require early EC, but fail to provide ECDT */
1033        pr_debug("Look up EC in DSDT\n");
1034        status = acpi_get_devices(ec_device_ids[0].id, ec_parse_device,
1035                                        boot_ec, NULL);
1036        /* Check that acpi_get_devices actually find something */
1037        if (ACPI_FAILURE(status) || !boot_ec->handle)
1038                goto error;
1039        if (saved_ec) {
1040                /* try to find good ECDT from ASUSTek */
1041                if (saved_ec->command_addr != boot_ec->command_addr ||
1042                    saved_ec->data_addr != boot_ec->data_addr ||
1043                    saved_ec->gpe != boot_ec->gpe ||
1044                    saved_ec->handle != boot_ec->handle)
1045                        pr_info("ASUSTek keeps feeding us with broken "
1046                        "ECDT tables, which are very hard to workaround. "
1047                        "Trying to use DSDT EC info instead. Please send "
1048                        "output of acpidump to linux-acpi@vger.kernel.org\n");
1049                kfree(saved_ec);
1050                saved_ec = NULL;
1051        } else {
1052                /* We really need to limit this workaround, the only ASUS,
1053                * which needs it, has fake EC._INI method, so use it as flag.
1054                * Keep boot_ec struct as it will be needed soon.
1055                */
1056                if (!dmi_name_in_vendors("ASUS") ||
1057                    !acpi_has_method(boot_ec->handle, "_INI"))
1058                        return -ENODEV;
1059        }
1060install:
1061        if (!ec_install_handlers(boot_ec)) {
1062                first_ec = boot_ec;
1063                return 0;
1064        }
1065error:
1066        kfree(boot_ec);
1067        boot_ec = NULL;
1068        return -ENODEV;
1069}
1070
1071static struct acpi_driver acpi_ec_driver = {
1072        .name = "ec",
1073        .class = ACPI_EC_CLASS,
1074        .ids = ec_device_ids,
1075        .ops = {
1076                .add = acpi_ec_add,
1077                .remove = acpi_ec_remove,
1078                },
1079};
1080
1081int __init acpi_ec_init(void)
1082{
1083        int result = 0;
1084
1085        /* Now register the driver for the EC */
1086        result = acpi_bus_register_driver(&acpi_ec_driver);
1087        if (result < 0)
1088                return -ENODEV;
1089
1090        return result;
1091}
1092
1093/* EC driver currently not unloadable */
1094#if 0
1095static void __exit acpi_ec_exit(void)
1096{
1097
1098        acpi_bus_unregister_driver(&acpi_ec_driver);
1099        return;
1100}
1101#endif  /* 0 */
1102