at v4.0-rc2 1408 lines 38 kB view raw
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 * You should have received a copy of the GNU General Public License along 26 * with this program; if not, write to the Free Software Foundation, Inc., 27 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 28 * 29 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 */ 31 32/* Uncomment next line to get verbose printout */ 33/* #define DEBUG */ 34#define pr_fmt(fmt) "ACPI : EC: " fmt 35 36#include <linux/kernel.h> 37#include <linux/module.h> 38#include <linux/init.h> 39#include <linux/types.h> 40#include <linux/delay.h> 41#include <linux/interrupt.h> 42#include <linux/list.h> 43#include <linux/spinlock.h> 44#include <linux/slab.h> 45#include <linux/acpi.h> 46#include <linux/dmi.h> 47#include <asm/io.h> 48 49#include "internal.h" 50 51#define ACPI_EC_CLASS "embedded_controller" 52#define ACPI_EC_DEVICE_NAME "Embedded Controller" 53#define ACPI_EC_FILE_INFO "info" 54 55/* EC status register */ 56#define ACPI_EC_FLAG_OBF 0x01 /* Output buffer full */ 57#define ACPI_EC_FLAG_IBF 0x02 /* Input buffer full */ 58#define ACPI_EC_FLAG_CMD 0x08 /* Input buffer contains a command */ 59#define ACPI_EC_FLAG_BURST 0x10 /* burst mode */ 60#define ACPI_EC_FLAG_SCI 0x20 /* EC-SCI occurred */ 61 62/* EC commands */ 63enum ec_command { 64 ACPI_EC_COMMAND_READ = 0x80, 65 ACPI_EC_COMMAND_WRITE = 0x81, 66 ACPI_EC_BURST_ENABLE = 0x82, 67 ACPI_EC_BURST_DISABLE = 0x83, 68 ACPI_EC_COMMAND_QUERY = 0x84, 69}; 70 71#define ACPI_EC_DELAY 500 /* Wait 500ms max. during EC ops */ 72#define ACPI_EC_UDELAY_GLK 1000 /* Wait 1ms max. to get global lock */ 73#define ACPI_EC_MSI_UDELAY 550 /* Wait 550us for MSI EC */ 74#define ACPI_EC_UDELAY_POLL 1000 /* Wait 1ms for EC transaction polling */ 75#define ACPI_EC_CLEAR_MAX 100 /* Maximum number of events to query 76 * when trying to clear the EC */ 77 78enum { 79 EC_FLAGS_QUERY_PENDING, /* Query is pending */ 80 EC_FLAGS_HANDLERS_INSTALLED, /* Handlers for GPE and 81 * OpReg are installed */ 82 EC_FLAGS_STARTED, /* Driver is started */ 83 EC_FLAGS_STOPPED, /* Driver is stopped */ 84 EC_FLAGS_COMMAND_STORM, /* GPE storms occurred to the 85 * current command processing */ 86}; 87 88#define ACPI_EC_COMMAND_POLL 0x01 /* Available for command byte */ 89#define ACPI_EC_COMMAND_COMPLETE 0x02 /* Completed last byte */ 90 91/* ec.c is compiled in acpi namespace so this shows up as acpi.ec_delay param */ 92static unsigned int ec_delay __read_mostly = ACPI_EC_DELAY; 93module_param(ec_delay, uint, 0644); 94MODULE_PARM_DESC(ec_delay, "Timeout(ms) waited until an EC command completes"); 95 96/* 97 * If the number of false interrupts per one transaction exceeds 98 * this threshold, will think there is a GPE storm happened and 99 * will disable the GPE for normal transaction. 100 */ 101static unsigned int ec_storm_threshold __read_mostly = 8; 102module_param(ec_storm_threshold, uint, 0644); 103MODULE_PARM_DESC(ec_storm_threshold, "Maxim false GPE numbers not considered as GPE storm"); 104 105struct acpi_ec_query_handler { 106 struct list_head node; 107 acpi_ec_query_func func; 108 acpi_handle handle; 109 void *data; 110 u8 query_bit; 111 struct kref kref; 112}; 113 114struct transaction { 115 const u8 *wdata; 116 u8 *rdata; 117 unsigned short irq_count; 118 u8 command; 119 u8 wi; 120 u8 ri; 121 u8 wlen; 122 u8 rlen; 123 u8 flags; 124 unsigned long timestamp; 125}; 126 127static int acpi_ec_query(struct acpi_ec *ec, u8 *data); 128static void advance_transaction(struct acpi_ec *ec); 129 130struct acpi_ec *boot_ec, *first_ec; 131EXPORT_SYMBOL(first_ec); 132 133static int EC_FLAGS_MSI; /* Out-of-spec MSI controller */ 134static int EC_FLAGS_VALIDATE_ECDT; /* ASUStec ECDTs need to be validated */ 135static int EC_FLAGS_SKIP_DSDT_SCAN; /* Not all BIOS survive early DSDT scan */ 136static int EC_FLAGS_CLEAR_ON_RESUME; /* Needs acpi_ec_clear() on boot/resume */ 137static int EC_FLAGS_QUERY_HANDSHAKE; /* Needs QR_EC issued when SCI_EVT set */ 138 139/* -------------------------------------------------------------------------- 140 * Device Flags 141 * -------------------------------------------------------------------------- */ 142 143static bool acpi_ec_started(struct acpi_ec *ec) 144{ 145 return test_bit(EC_FLAGS_STARTED, &ec->flags) && 146 !test_bit(EC_FLAGS_STOPPED, &ec->flags); 147} 148 149static bool acpi_ec_flushed(struct acpi_ec *ec) 150{ 151 return ec->reference_count == 1; 152} 153 154/* -------------------------------------------------------------------------- 155 * EC Registers 156 * -------------------------------------------------------------------------- */ 157 158static inline u8 acpi_ec_read_status(struct acpi_ec *ec) 159{ 160 u8 x = inb(ec->command_addr); 161 162 pr_debug("EC_SC(R) = 0x%2.2x " 163 "SCI_EVT=%d BURST=%d CMD=%d IBF=%d OBF=%d\n", 164 x, 165 !!(x & ACPI_EC_FLAG_SCI), 166 !!(x & ACPI_EC_FLAG_BURST), 167 !!(x & ACPI_EC_FLAG_CMD), 168 !!(x & ACPI_EC_FLAG_IBF), 169 !!(x & ACPI_EC_FLAG_OBF)); 170 return x; 171} 172 173static inline u8 acpi_ec_read_data(struct acpi_ec *ec) 174{ 175 u8 x = inb(ec->data_addr); 176 177 ec->curr->timestamp = jiffies; 178 pr_debug("EC_DATA(R) = 0x%2.2x\n", x); 179 return x; 180} 181 182static inline void acpi_ec_write_cmd(struct acpi_ec *ec, u8 command) 183{ 184 pr_debug("EC_SC(W) = 0x%2.2x\n", command); 185 outb(command, ec->command_addr); 186 ec->curr->timestamp = jiffies; 187} 188 189static inline void acpi_ec_write_data(struct acpi_ec *ec, u8 data) 190{ 191 pr_debug("EC_DATA(W) = 0x%2.2x\n", data); 192 outb(data, ec->data_addr); 193 ec->curr->timestamp = jiffies; 194} 195 196#ifdef DEBUG 197static const char *acpi_ec_cmd_string(u8 cmd) 198{ 199 switch (cmd) { 200 case 0x80: 201 return "RD_EC"; 202 case 0x81: 203 return "WR_EC"; 204 case 0x82: 205 return "BE_EC"; 206 case 0x83: 207 return "BD_EC"; 208 case 0x84: 209 return "QR_EC"; 210 } 211 return "UNKNOWN"; 212} 213#else 214#define acpi_ec_cmd_string(cmd) "UNDEF" 215#endif 216 217/* -------------------------------------------------------------------------- 218 * GPE Registers 219 * -------------------------------------------------------------------------- */ 220 221static inline bool acpi_ec_is_gpe_raised(struct acpi_ec *ec) 222{ 223 acpi_event_status gpe_status = 0; 224 225 (void)acpi_get_gpe_status(NULL, ec->gpe, &gpe_status); 226 return (gpe_status & ACPI_EVENT_FLAG_SET) ? true : false; 227} 228 229static inline void acpi_ec_enable_gpe(struct acpi_ec *ec, bool open) 230{ 231 if (open) 232 acpi_enable_gpe(NULL, ec->gpe); 233 else { 234 BUG_ON(ec->reference_count < 1); 235 acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_ENABLE); 236 } 237 if (acpi_ec_is_gpe_raised(ec)) { 238 /* 239 * On some platforms, EN=1 writes cannot trigger GPE. So 240 * software need to manually trigger a pseudo GPE event on 241 * EN=1 writes. 242 */ 243 pr_debug("***** Polling quirk *****\n"); 244 advance_transaction(ec); 245 } 246} 247 248static inline void acpi_ec_disable_gpe(struct acpi_ec *ec, bool close) 249{ 250 if (close) 251 acpi_disable_gpe(NULL, ec->gpe); 252 else { 253 BUG_ON(ec->reference_count < 1); 254 acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_DISABLE); 255 } 256} 257 258static inline void acpi_ec_clear_gpe(struct acpi_ec *ec) 259{ 260 /* 261 * GPE STS is a W1C register, which means: 262 * 1. Software can clear it without worrying about clearing other 263 * GPEs' STS bits when the hardware sets them in parallel. 264 * 2. As long as software can ensure only clearing it when it is 265 * set, hardware won't set it in parallel. 266 * So software can clear GPE in any contexts. 267 * Warning: do not move the check into advance_transaction() as the 268 * EC commands will be sent without GPE raised. 269 */ 270 if (!acpi_ec_is_gpe_raised(ec)) 271 return; 272 acpi_clear_gpe(NULL, ec->gpe); 273} 274 275/* -------------------------------------------------------------------------- 276 * Transaction Management 277 * -------------------------------------------------------------------------- */ 278 279static void acpi_ec_submit_request(struct acpi_ec *ec) 280{ 281 ec->reference_count++; 282 if (ec->reference_count == 1) 283 acpi_ec_enable_gpe(ec, true); 284} 285 286static void acpi_ec_complete_request(struct acpi_ec *ec) 287{ 288 bool flushed = false; 289 290 ec->reference_count--; 291 if (ec->reference_count == 0) 292 acpi_ec_disable_gpe(ec, true); 293 flushed = acpi_ec_flushed(ec); 294 if (flushed) 295 wake_up(&ec->wait); 296} 297 298static void acpi_ec_set_storm(struct acpi_ec *ec, u8 flag) 299{ 300 if (!test_bit(flag, &ec->flags)) { 301 acpi_ec_disable_gpe(ec, false); 302 pr_debug("+++++ Polling enabled +++++\n"); 303 set_bit(flag, &ec->flags); 304 } 305} 306 307static void acpi_ec_clear_storm(struct acpi_ec *ec, u8 flag) 308{ 309 if (test_bit(flag, &ec->flags)) { 310 clear_bit(flag, &ec->flags); 311 acpi_ec_enable_gpe(ec, false); 312 pr_debug("+++++ Polling disabled +++++\n"); 313 } 314} 315 316/* 317 * acpi_ec_submit_flushable_request() - Increase the reference count unless 318 * the flush operation is not in 319 * progress 320 * @ec: the EC device 321 * 322 * This function must be used before taking a new action that should hold 323 * the reference count. If this function returns false, then the action 324 * must be discarded or it will prevent the flush operation from being 325 * completed. 326 */ 327static bool acpi_ec_submit_flushable_request(struct acpi_ec *ec) 328{ 329 if (!acpi_ec_started(ec)) 330 return false; 331 acpi_ec_submit_request(ec); 332 return true; 333} 334 335static void acpi_ec_submit_query(struct acpi_ec *ec) 336{ 337 if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags)) { 338 pr_debug("***** Event started *****\n"); 339 schedule_work(&ec->work); 340 } 341} 342 343static void acpi_ec_complete_query(struct acpi_ec *ec) 344{ 345 if (ec->curr->command == ACPI_EC_COMMAND_QUERY) { 346 clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags); 347 pr_debug("***** Event stopped *****\n"); 348 } 349} 350 351static int ec_transaction_completed(struct acpi_ec *ec) 352{ 353 unsigned long flags; 354 int ret = 0; 355 356 spin_lock_irqsave(&ec->lock, flags); 357 if (ec->curr && (ec->curr->flags & ACPI_EC_COMMAND_COMPLETE)) 358 ret = 1; 359 spin_unlock_irqrestore(&ec->lock, flags); 360 return ret; 361} 362 363static void advance_transaction(struct acpi_ec *ec) 364{ 365 struct transaction *t; 366 u8 status; 367 bool wakeup = false; 368 369 pr_debug("===== %s (%d) =====\n", 370 in_interrupt() ? "IRQ" : "TASK", smp_processor_id()); 371 /* 372 * By always clearing STS before handling all indications, we can 373 * ensure a hardware STS 0->1 change after this clearing can always 374 * trigger a GPE interrupt. 375 */ 376 acpi_ec_clear_gpe(ec); 377 status = acpi_ec_read_status(ec); 378 t = ec->curr; 379 if (!t) 380 goto err; 381 if (t->flags & ACPI_EC_COMMAND_POLL) { 382 if (t->wlen > t->wi) { 383 if ((status & ACPI_EC_FLAG_IBF) == 0) 384 acpi_ec_write_data(ec, t->wdata[t->wi++]); 385 else 386 goto err; 387 } else if (t->rlen > t->ri) { 388 if ((status & ACPI_EC_FLAG_OBF) == 1) { 389 t->rdata[t->ri++] = acpi_ec_read_data(ec); 390 if (t->rlen == t->ri) { 391 t->flags |= ACPI_EC_COMMAND_COMPLETE; 392 if (t->command == ACPI_EC_COMMAND_QUERY) 393 pr_debug("***** Command(%s) hardware completion *****\n", 394 acpi_ec_cmd_string(t->command)); 395 wakeup = true; 396 } 397 } else 398 goto err; 399 } else if (t->wlen == t->wi && 400 (status & ACPI_EC_FLAG_IBF) == 0) { 401 t->flags |= ACPI_EC_COMMAND_COMPLETE; 402 wakeup = true; 403 } 404 goto out; 405 } else { 406 if (EC_FLAGS_QUERY_HANDSHAKE && 407 !(status & ACPI_EC_FLAG_SCI) && 408 (t->command == ACPI_EC_COMMAND_QUERY)) { 409 t->flags |= ACPI_EC_COMMAND_POLL; 410 acpi_ec_complete_query(ec); 411 t->rdata[t->ri++] = 0x00; 412 t->flags |= ACPI_EC_COMMAND_COMPLETE; 413 pr_debug("***** Command(%s) software completion *****\n", 414 acpi_ec_cmd_string(t->command)); 415 wakeup = true; 416 } else if ((status & ACPI_EC_FLAG_IBF) == 0) { 417 acpi_ec_write_cmd(ec, t->command); 418 t->flags |= ACPI_EC_COMMAND_POLL; 419 acpi_ec_complete_query(ec); 420 } else 421 goto err; 422 goto out; 423 } 424err: 425 /* 426 * If SCI bit is set, then don't think it's a false IRQ 427 * otherwise will take a not handled IRQ as a false one. 428 */ 429 if (!(status & ACPI_EC_FLAG_SCI)) { 430 if (in_interrupt() && t) { 431 if (t->irq_count < ec_storm_threshold) 432 ++t->irq_count; 433 /* Allow triggering on 0 threshold */ 434 if (t->irq_count == ec_storm_threshold) 435 acpi_ec_set_storm(ec, EC_FLAGS_COMMAND_STORM); 436 } 437 } 438out: 439 if (status & ACPI_EC_FLAG_SCI) 440 acpi_ec_submit_query(ec); 441 if (wakeup && in_interrupt()) 442 wake_up(&ec->wait); 443} 444 445static void start_transaction(struct acpi_ec *ec) 446{ 447 ec->curr->irq_count = ec->curr->wi = ec->curr->ri = 0; 448 ec->curr->flags = 0; 449 ec->curr->timestamp = jiffies; 450 advance_transaction(ec); 451} 452 453static int ec_poll(struct acpi_ec *ec) 454{ 455 unsigned long flags; 456 int repeat = 5; /* number of command restarts */ 457 458 while (repeat--) { 459 unsigned long delay = jiffies + 460 msecs_to_jiffies(ec_delay); 461 unsigned long usecs = ACPI_EC_UDELAY_POLL; 462 do { 463 /* don't sleep with disabled interrupts */ 464 if (EC_FLAGS_MSI || irqs_disabled()) { 465 usecs = ACPI_EC_MSI_UDELAY; 466 udelay(usecs); 467 if (ec_transaction_completed(ec)) 468 return 0; 469 } else { 470 if (wait_event_timeout(ec->wait, 471 ec_transaction_completed(ec), 472 usecs_to_jiffies(usecs))) 473 return 0; 474 } 475 spin_lock_irqsave(&ec->lock, flags); 476 if (time_after(jiffies, 477 ec->curr->timestamp + 478 usecs_to_jiffies(usecs))) 479 advance_transaction(ec); 480 spin_unlock_irqrestore(&ec->lock, flags); 481 } while (time_before(jiffies, delay)); 482 pr_debug("controller reset, restart transaction\n"); 483 spin_lock_irqsave(&ec->lock, flags); 484 start_transaction(ec); 485 spin_unlock_irqrestore(&ec->lock, flags); 486 } 487 return -ETIME; 488} 489 490static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, 491 struct transaction *t) 492{ 493 unsigned long tmp; 494 int ret = 0; 495 496 if (EC_FLAGS_MSI) 497 udelay(ACPI_EC_MSI_UDELAY); 498 /* start transaction */ 499 spin_lock_irqsave(&ec->lock, tmp); 500 /* Enable GPE for command processing (IBF=0/OBF=1) */ 501 if (!acpi_ec_submit_flushable_request(ec)) { 502 ret = -EINVAL; 503 goto unlock; 504 } 505 /* following two actions should be kept atomic */ 506 ec->curr = t; 507 pr_debug("***** Command(%s) started *****\n", 508 acpi_ec_cmd_string(t->command)); 509 start_transaction(ec); 510 spin_unlock_irqrestore(&ec->lock, tmp); 511 ret = ec_poll(ec); 512 spin_lock_irqsave(&ec->lock, tmp); 513 if (t->irq_count == ec_storm_threshold) 514 acpi_ec_clear_storm(ec, EC_FLAGS_COMMAND_STORM); 515 pr_debug("***** Command(%s) stopped *****\n", 516 acpi_ec_cmd_string(t->command)); 517 ec->curr = NULL; 518 /* Disable GPE for command processing (IBF=0/OBF=1) */ 519 acpi_ec_complete_request(ec); 520unlock: 521 spin_unlock_irqrestore(&ec->lock, tmp); 522 return ret; 523} 524 525static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t) 526{ 527 int status; 528 u32 glk; 529 530 if (!ec || (!t) || (t->wlen && !t->wdata) || (t->rlen && !t->rdata)) 531 return -EINVAL; 532 if (t->rdata) 533 memset(t->rdata, 0, t->rlen); 534 mutex_lock(&ec->mutex); 535 if (ec->global_lock) { 536 status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk); 537 if (ACPI_FAILURE(status)) { 538 status = -ENODEV; 539 goto unlock; 540 } 541 } 542 543 status = acpi_ec_transaction_unlocked(ec, t); 544 545 if (test_bit(EC_FLAGS_COMMAND_STORM, &ec->flags)) 546 msleep(1); 547 if (ec->global_lock) 548 acpi_release_global_lock(glk); 549unlock: 550 mutex_unlock(&ec->mutex); 551 return status; 552} 553 554static int acpi_ec_burst_enable(struct acpi_ec *ec) 555{ 556 u8 d; 557 struct transaction t = {.command = ACPI_EC_BURST_ENABLE, 558 .wdata = NULL, .rdata = &d, 559 .wlen = 0, .rlen = 1}; 560 561 return acpi_ec_transaction(ec, &t); 562} 563 564static int acpi_ec_burst_disable(struct acpi_ec *ec) 565{ 566 struct transaction t = {.command = ACPI_EC_BURST_DISABLE, 567 .wdata = NULL, .rdata = NULL, 568 .wlen = 0, .rlen = 0}; 569 570 return (acpi_ec_read_status(ec) & ACPI_EC_FLAG_BURST) ? 571 acpi_ec_transaction(ec, &t) : 0; 572} 573 574static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 *data) 575{ 576 int result; 577 u8 d; 578 struct transaction t = {.command = ACPI_EC_COMMAND_READ, 579 .wdata = &address, .rdata = &d, 580 .wlen = 1, .rlen = 1}; 581 582 result = acpi_ec_transaction(ec, &t); 583 *data = d; 584 return result; 585} 586 587static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data) 588{ 589 u8 wdata[2] = { address, data }; 590 struct transaction t = {.command = ACPI_EC_COMMAND_WRITE, 591 .wdata = wdata, .rdata = NULL, 592 .wlen = 2, .rlen = 0}; 593 594 return acpi_ec_transaction(ec, &t); 595} 596 597int ec_read(u8 addr, u8 *val) 598{ 599 int err; 600 u8 temp_data; 601 602 if (!first_ec) 603 return -ENODEV; 604 605 err = acpi_ec_read(first_ec, addr, &temp_data); 606 607 if (!err) { 608 *val = temp_data; 609 return 0; 610 } 611 return err; 612} 613EXPORT_SYMBOL(ec_read); 614 615int ec_write(u8 addr, u8 val) 616{ 617 int err; 618 619 if (!first_ec) 620 return -ENODEV; 621 622 err = acpi_ec_write(first_ec, addr, val); 623 624 return err; 625} 626EXPORT_SYMBOL(ec_write); 627 628int ec_transaction(u8 command, 629 const u8 *wdata, unsigned wdata_len, 630 u8 *rdata, unsigned rdata_len) 631{ 632 struct transaction t = {.command = command, 633 .wdata = wdata, .rdata = rdata, 634 .wlen = wdata_len, .rlen = rdata_len}; 635 636 if (!first_ec) 637 return -ENODEV; 638 639 return acpi_ec_transaction(first_ec, &t); 640} 641EXPORT_SYMBOL(ec_transaction); 642 643/* Get the handle to the EC device */ 644acpi_handle ec_get_handle(void) 645{ 646 if (!first_ec) 647 return NULL; 648 return first_ec->handle; 649} 650EXPORT_SYMBOL(ec_get_handle); 651 652/* 653 * Process _Q events that might have accumulated in the EC. 654 * Run with locked ec mutex. 655 */ 656static void acpi_ec_clear(struct acpi_ec *ec) 657{ 658 int i, status; 659 u8 value = 0; 660 661 for (i = 0; i < ACPI_EC_CLEAR_MAX; i++) { 662 status = acpi_ec_query(ec, &value); 663 if (status || !value) 664 break; 665 } 666 667 if (unlikely(i == ACPI_EC_CLEAR_MAX)) 668 pr_warn("Warning: Maximum of %d stale EC events cleared\n", i); 669 else 670 pr_info("%d stale EC events cleared\n", i); 671} 672 673static void acpi_ec_start(struct acpi_ec *ec, bool resuming) 674{ 675 unsigned long flags; 676 677 spin_lock_irqsave(&ec->lock, flags); 678 if (!test_and_set_bit(EC_FLAGS_STARTED, &ec->flags)) { 679 pr_debug("+++++ Starting EC +++++\n"); 680 /* Enable GPE for event processing (SCI_EVT=1) */ 681 if (!resuming) 682 acpi_ec_submit_request(ec); 683 pr_debug("EC started\n"); 684 } 685 spin_unlock_irqrestore(&ec->lock, flags); 686} 687 688static bool acpi_ec_stopped(struct acpi_ec *ec) 689{ 690 unsigned long flags; 691 bool flushed; 692 693 spin_lock_irqsave(&ec->lock, flags); 694 flushed = acpi_ec_flushed(ec); 695 spin_unlock_irqrestore(&ec->lock, flags); 696 return flushed; 697} 698 699static void acpi_ec_stop(struct acpi_ec *ec, bool suspending) 700{ 701 unsigned long flags; 702 703 spin_lock_irqsave(&ec->lock, flags); 704 if (acpi_ec_started(ec)) { 705 pr_debug("+++++ Stopping EC +++++\n"); 706 set_bit(EC_FLAGS_STOPPED, &ec->flags); 707 spin_unlock_irqrestore(&ec->lock, flags); 708 wait_event(ec->wait, acpi_ec_stopped(ec)); 709 spin_lock_irqsave(&ec->lock, flags); 710 /* Disable GPE for event processing (SCI_EVT=1) */ 711 if (!suspending) 712 acpi_ec_complete_request(ec); 713 clear_bit(EC_FLAGS_STARTED, &ec->flags); 714 clear_bit(EC_FLAGS_STOPPED, &ec->flags); 715 pr_debug("EC stopped\n"); 716 } 717 spin_unlock_irqrestore(&ec->lock, flags); 718} 719 720void acpi_ec_block_transactions(void) 721{ 722 struct acpi_ec *ec = first_ec; 723 724 if (!ec) 725 return; 726 727 mutex_lock(&ec->mutex); 728 /* Prevent transactions from being carried out */ 729 acpi_ec_stop(ec, true); 730 mutex_unlock(&ec->mutex); 731} 732 733void acpi_ec_unblock_transactions(void) 734{ 735 struct acpi_ec *ec = first_ec; 736 737 if (!ec) 738 return; 739 740 /* Allow transactions to be carried out again */ 741 acpi_ec_start(ec, true); 742 743 if (EC_FLAGS_CLEAR_ON_RESUME) 744 acpi_ec_clear(ec); 745} 746 747void acpi_ec_unblock_transactions_early(void) 748{ 749 /* 750 * Allow transactions to happen again (this function is called from 751 * atomic context during wakeup, so we don't need to acquire the mutex). 752 */ 753 if (first_ec) 754 acpi_ec_start(first_ec, true); 755} 756 757/* -------------------------------------------------------------------------- 758 Event Management 759 -------------------------------------------------------------------------- */ 760static struct acpi_ec_query_handler * 761acpi_ec_get_query_handler(struct acpi_ec_query_handler *handler) 762{ 763 if (handler) 764 kref_get(&handler->kref); 765 return handler; 766} 767 768static void acpi_ec_query_handler_release(struct kref *kref) 769{ 770 struct acpi_ec_query_handler *handler = 771 container_of(kref, struct acpi_ec_query_handler, kref); 772 773 kfree(handler); 774} 775 776static void acpi_ec_put_query_handler(struct acpi_ec_query_handler *handler) 777{ 778 kref_put(&handler->kref, acpi_ec_query_handler_release); 779} 780 781int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit, 782 acpi_handle handle, acpi_ec_query_func func, 783 void *data) 784{ 785 struct acpi_ec_query_handler *handler = 786 kzalloc(sizeof(struct acpi_ec_query_handler), GFP_KERNEL); 787 788 if (!handler) 789 return -ENOMEM; 790 791 handler->query_bit = query_bit; 792 handler->handle = handle; 793 handler->func = func; 794 handler->data = data; 795 mutex_lock(&ec->mutex); 796 kref_init(&handler->kref); 797 list_add(&handler->node, &ec->list); 798 mutex_unlock(&ec->mutex); 799 return 0; 800} 801EXPORT_SYMBOL_GPL(acpi_ec_add_query_handler); 802 803void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit) 804{ 805 struct acpi_ec_query_handler *handler, *tmp; 806 LIST_HEAD(free_list); 807 808 mutex_lock(&ec->mutex); 809 list_for_each_entry_safe(handler, tmp, &ec->list, node) { 810 if (query_bit == handler->query_bit) { 811 list_del_init(&handler->node); 812 list_add(&handler->node, &free_list); 813 } 814 } 815 mutex_unlock(&ec->mutex); 816 list_for_each_entry(handler, &free_list, node) 817 acpi_ec_put_query_handler(handler); 818} 819EXPORT_SYMBOL_GPL(acpi_ec_remove_query_handler); 820 821static void acpi_ec_run(void *cxt) 822{ 823 struct acpi_ec_query_handler *handler = cxt; 824 825 if (!handler) 826 return; 827 pr_debug("##### Query(0x%02x) started #####\n", handler->query_bit); 828 if (handler->func) 829 handler->func(handler->data); 830 else if (handler->handle) 831 acpi_evaluate_object(handler->handle, NULL, NULL, NULL); 832 pr_debug("##### Query(0x%02x) stopped #####\n", handler->query_bit); 833 acpi_ec_put_query_handler(handler); 834} 835 836static int acpi_ec_query(struct acpi_ec *ec, u8 *data) 837{ 838 u8 value = 0; 839 int result; 840 acpi_status status; 841 struct acpi_ec_query_handler *handler; 842 struct transaction t = {.command = ACPI_EC_COMMAND_QUERY, 843 .wdata = NULL, .rdata = &value, 844 .wlen = 0, .rlen = 1}; 845 846 /* 847 * Query the EC to find out which _Qxx method we need to evaluate. 848 * Note that successful completion of the query causes the ACPI_EC_SCI 849 * bit to be cleared (and thus clearing the interrupt source). 850 */ 851 result = acpi_ec_transaction(ec, &t); 852 if (result) 853 return result; 854 if (data) 855 *data = value; 856 if (!value) 857 return -ENODATA; 858 859 mutex_lock(&ec->mutex); 860 list_for_each_entry(handler, &ec->list, node) { 861 if (value == handler->query_bit) { 862 /* have custom handler for this bit */ 863 handler = acpi_ec_get_query_handler(handler); 864 pr_debug("##### Query(0x%02x) scheduled #####\n", 865 handler->query_bit); 866 status = acpi_os_execute((handler->func) ? 867 OSL_NOTIFY_HANDLER : OSL_GPE_HANDLER, 868 acpi_ec_run, handler); 869 if (ACPI_FAILURE(status)) 870 result = -EBUSY; 871 break; 872 } 873 } 874 mutex_unlock(&ec->mutex); 875 return result; 876} 877 878static void acpi_ec_gpe_poller(struct work_struct *work) 879{ 880 struct acpi_ec *ec = container_of(work, struct acpi_ec, work); 881 882 acpi_ec_query(ec, NULL); 883} 884 885static u32 acpi_ec_gpe_handler(acpi_handle gpe_device, 886 u32 gpe_number, void *data) 887{ 888 unsigned long flags; 889 struct acpi_ec *ec = data; 890 891 spin_lock_irqsave(&ec->lock, flags); 892 advance_transaction(ec); 893 spin_unlock_irqrestore(&ec->lock, flags); 894 return ACPI_INTERRUPT_HANDLED; 895} 896 897/* -------------------------------------------------------------------------- 898 * Address Space Management 899 * -------------------------------------------------------------------------- */ 900 901static acpi_status 902acpi_ec_space_handler(u32 function, acpi_physical_address address, 903 u32 bits, u64 *value64, 904 void *handler_context, void *region_context) 905{ 906 struct acpi_ec *ec = handler_context; 907 int result = 0, i, bytes = bits / 8; 908 u8 *value = (u8 *)value64; 909 910 if ((address > 0xFF) || !value || !handler_context) 911 return AE_BAD_PARAMETER; 912 913 if (function != ACPI_READ && function != ACPI_WRITE) 914 return AE_BAD_PARAMETER; 915 916 if (EC_FLAGS_MSI || bits > 8) 917 acpi_ec_burst_enable(ec); 918 919 for (i = 0; i < bytes; ++i, ++address, ++value) 920 result = (function == ACPI_READ) ? 921 acpi_ec_read(ec, address, value) : 922 acpi_ec_write(ec, address, *value); 923 924 if (EC_FLAGS_MSI || bits > 8) 925 acpi_ec_burst_disable(ec); 926 927 switch (result) { 928 case -EINVAL: 929 return AE_BAD_PARAMETER; 930 case -ENODEV: 931 return AE_NOT_FOUND; 932 case -ETIME: 933 return AE_TIME; 934 default: 935 return AE_OK; 936 } 937} 938 939/* -------------------------------------------------------------------------- 940 * Driver Interface 941 * -------------------------------------------------------------------------- */ 942 943static acpi_status 944ec_parse_io_ports(struct acpi_resource *resource, void *context); 945 946static struct acpi_ec *make_acpi_ec(void) 947{ 948 struct acpi_ec *ec = kzalloc(sizeof(struct acpi_ec), GFP_KERNEL); 949 950 if (!ec) 951 return NULL; 952 ec->flags = 1 << EC_FLAGS_QUERY_PENDING; 953 mutex_init(&ec->mutex); 954 init_waitqueue_head(&ec->wait); 955 INIT_LIST_HEAD(&ec->list); 956 spin_lock_init(&ec->lock); 957 INIT_WORK(&ec->work, acpi_ec_gpe_poller); 958 return ec; 959} 960 961static acpi_status 962acpi_ec_register_query_methods(acpi_handle handle, u32 level, 963 void *context, void **return_value) 964{ 965 char node_name[5]; 966 struct acpi_buffer buffer = { sizeof(node_name), node_name }; 967 struct acpi_ec *ec = context; 968 int value = 0; 969 acpi_status status; 970 971 status = acpi_get_name(handle, ACPI_SINGLE_NAME, &buffer); 972 973 if (ACPI_SUCCESS(status) && sscanf(node_name, "_Q%x", &value) == 1) 974 acpi_ec_add_query_handler(ec, value, handle, NULL, NULL); 975 return AE_OK; 976} 977 978static acpi_status 979ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval) 980{ 981 acpi_status status; 982 unsigned long long tmp = 0; 983 struct acpi_ec *ec = context; 984 985 /* clear addr values, ec_parse_io_ports depend on it */ 986 ec->command_addr = ec->data_addr = 0; 987 988 status = acpi_walk_resources(handle, METHOD_NAME__CRS, 989 ec_parse_io_ports, ec); 990 if (ACPI_FAILURE(status)) 991 return status; 992 993 /* Get GPE bit assignment (EC events). */ 994 /* TODO: Add support for _GPE returning a package */ 995 status = acpi_evaluate_integer(handle, "_GPE", NULL, &tmp); 996 if (ACPI_FAILURE(status)) 997 return status; 998 ec->gpe = tmp; 999 /* Use the global lock for all EC transactions? */ 1000 tmp = 0; 1001 acpi_evaluate_integer(handle, "_GLK", NULL, &tmp); 1002 ec->global_lock = tmp; 1003 ec->handle = handle; 1004 return AE_CTRL_TERMINATE; 1005} 1006 1007static int ec_install_handlers(struct acpi_ec *ec) 1008{ 1009 acpi_status status; 1010 1011 if (test_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags)) 1012 return 0; 1013 status = acpi_install_gpe_raw_handler(NULL, ec->gpe, 1014 ACPI_GPE_EDGE_TRIGGERED, 1015 &acpi_ec_gpe_handler, ec); 1016 if (ACPI_FAILURE(status)) 1017 return -ENODEV; 1018 1019 acpi_ec_start(ec, false); 1020 status = acpi_install_address_space_handler(ec->handle, 1021 ACPI_ADR_SPACE_EC, 1022 &acpi_ec_space_handler, 1023 NULL, ec); 1024 if (ACPI_FAILURE(status)) { 1025 if (status == AE_NOT_FOUND) { 1026 /* 1027 * Maybe OS fails in evaluating the _REG object. 1028 * The AE_NOT_FOUND error will be ignored and OS 1029 * continue to initialize EC. 1030 */ 1031 pr_err("Fail in evaluating the _REG object" 1032 " of EC device. Broken bios is suspected.\n"); 1033 } else { 1034 acpi_ec_stop(ec, false); 1035 acpi_remove_gpe_handler(NULL, ec->gpe, 1036 &acpi_ec_gpe_handler); 1037 return -ENODEV; 1038 } 1039 } 1040 1041 set_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags); 1042 return 0; 1043} 1044 1045static void ec_remove_handlers(struct acpi_ec *ec) 1046{ 1047 if (!test_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags)) 1048 return; 1049 acpi_ec_stop(ec, false); 1050 if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle, 1051 ACPI_ADR_SPACE_EC, &acpi_ec_space_handler))) 1052 pr_err("failed to remove space handler\n"); 1053 if (ACPI_FAILURE(acpi_remove_gpe_handler(NULL, ec->gpe, 1054 &acpi_ec_gpe_handler))) 1055 pr_err("failed to remove gpe handler\n"); 1056 clear_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags); 1057} 1058 1059static int acpi_ec_add(struct acpi_device *device) 1060{ 1061 struct acpi_ec *ec = NULL; 1062 int ret; 1063 1064 strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME); 1065 strcpy(acpi_device_class(device), ACPI_EC_CLASS); 1066 1067 /* Check for boot EC */ 1068 if (boot_ec && 1069 (boot_ec->handle == device->handle || 1070 boot_ec->handle == ACPI_ROOT_OBJECT)) { 1071 ec = boot_ec; 1072 boot_ec = NULL; 1073 } else { 1074 ec = make_acpi_ec(); 1075 if (!ec) 1076 return -ENOMEM; 1077 } 1078 if (ec_parse_device(device->handle, 0, ec, NULL) != 1079 AE_CTRL_TERMINATE) { 1080 kfree(ec); 1081 return -EINVAL; 1082 } 1083 1084 /* Find and register all query methods */ 1085 acpi_walk_namespace(ACPI_TYPE_METHOD, ec->handle, 1, 1086 acpi_ec_register_query_methods, NULL, ec, NULL); 1087 1088 if (!first_ec) 1089 first_ec = ec; 1090 device->driver_data = ec; 1091 1092 ret = !!request_region(ec->data_addr, 1, "EC data"); 1093 WARN(!ret, "Could not request EC data io port 0x%lx", ec->data_addr); 1094 ret = !!request_region(ec->command_addr, 1, "EC cmd"); 1095 WARN(!ret, "Could not request EC cmd io port 0x%lx", ec->command_addr); 1096 1097 pr_info("GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n", 1098 ec->gpe, ec->command_addr, ec->data_addr); 1099 1100 ret = ec_install_handlers(ec); 1101 1102 /* EC is fully operational, allow queries */ 1103 clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags); 1104 1105 /* Clear stale _Q events if hardware might require that */ 1106 if (EC_FLAGS_CLEAR_ON_RESUME) 1107 acpi_ec_clear(ec); 1108 return ret; 1109} 1110 1111static int acpi_ec_remove(struct acpi_device *device) 1112{ 1113 struct acpi_ec *ec; 1114 struct acpi_ec_query_handler *handler, *tmp; 1115 1116 if (!device) 1117 return -EINVAL; 1118 1119 ec = acpi_driver_data(device); 1120 ec_remove_handlers(ec); 1121 mutex_lock(&ec->mutex); 1122 list_for_each_entry_safe(handler, tmp, &ec->list, node) { 1123 list_del(&handler->node); 1124 kfree(handler); 1125 } 1126 mutex_unlock(&ec->mutex); 1127 release_region(ec->data_addr, 1); 1128 release_region(ec->command_addr, 1); 1129 device->driver_data = NULL; 1130 if (ec == first_ec) 1131 first_ec = NULL; 1132 kfree(ec); 1133 return 0; 1134} 1135 1136static acpi_status 1137ec_parse_io_ports(struct acpi_resource *resource, void *context) 1138{ 1139 struct acpi_ec *ec = context; 1140 1141 if (resource->type != ACPI_RESOURCE_TYPE_IO) 1142 return AE_OK; 1143 1144 /* 1145 * The first address region returned is the data port, and 1146 * the second address region returned is the status/command 1147 * port. 1148 */ 1149 if (ec->data_addr == 0) 1150 ec->data_addr = resource->data.io.minimum; 1151 else if (ec->command_addr == 0) 1152 ec->command_addr = resource->data.io.minimum; 1153 else 1154 return AE_CTRL_TERMINATE; 1155 1156 return AE_OK; 1157} 1158 1159int __init acpi_boot_ec_enable(void) 1160{ 1161 if (!boot_ec || test_bit(EC_FLAGS_HANDLERS_INSTALLED, &boot_ec->flags)) 1162 return 0; 1163 if (!ec_install_handlers(boot_ec)) { 1164 first_ec = boot_ec; 1165 return 0; 1166 } 1167 return -EFAULT; 1168} 1169 1170static const struct acpi_device_id ec_device_ids[] = { 1171 {"PNP0C09", 0}, 1172 {"", 0}, 1173}; 1174 1175/* Some BIOS do not survive early DSDT scan, skip it */ 1176static int ec_skip_dsdt_scan(const struct dmi_system_id *id) 1177{ 1178 EC_FLAGS_SKIP_DSDT_SCAN = 1; 1179 return 0; 1180} 1181 1182/* ASUStek often supplies us with broken ECDT, validate it */ 1183static int ec_validate_ecdt(const struct dmi_system_id *id) 1184{ 1185 EC_FLAGS_VALIDATE_ECDT = 1; 1186 return 0; 1187} 1188 1189/* MSI EC needs special treatment, enable it */ 1190static int ec_flag_msi(const struct dmi_system_id *id) 1191{ 1192 pr_debug("Detected MSI hardware, enabling workarounds.\n"); 1193 EC_FLAGS_MSI = 1; 1194 EC_FLAGS_VALIDATE_ECDT = 1; 1195 return 0; 1196} 1197 1198/* 1199 * Clevo M720 notebook actually works ok with IRQ mode, if we lifted 1200 * the GPE storm threshold back to 20 1201 */ 1202static int ec_enlarge_storm_threshold(const struct dmi_system_id *id) 1203{ 1204 pr_debug("Setting the EC GPE storm threshold to 20\n"); 1205 ec_storm_threshold = 20; 1206 return 0; 1207} 1208 1209/* 1210 * Acer EC firmware refuses to respond QR_EC when SCI_EVT is not set, for 1211 * which case, we complete the QR_EC without issuing it to the firmware. 1212 * https://bugzilla.kernel.org/show_bug.cgi?id=86211 1213 */ 1214static int ec_flag_query_handshake(const struct dmi_system_id *id) 1215{ 1216 pr_debug("Detected the EC firmware requiring QR_EC issued when SCI_EVT set\n"); 1217 EC_FLAGS_QUERY_HANDSHAKE = 1; 1218 return 0; 1219} 1220 1221/* 1222 * On some hardware it is necessary to clear events accumulated by the EC during 1223 * sleep. These ECs stop reporting GPEs until they are manually polled, if too 1224 * many events are accumulated. (e.g. Samsung Series 5/9 notebooks) 1225 * 1226 * https://bugzilla.kernel.org/show_bug.cgi?id=44161 1227 * 1228 * Ideally, the EC should also be instructed NOT to accumulate events during 1229 * sleep (which Windows seems to do somehow), but the interface to control this 1230 * behaviour is not known at this time. 1231 * 1232 * Models known to be affected are Samsung 530Uxx/535Uxx/540Uxx/550Pxx/900Xxx, 1233 * however it is very likely that other Samsung models are affected. 1234 * 1235 * On systems which don't accumulate _Q events during sleep, this extra check 1236 * should be harmless. 1237 */ 1238static int ec_clear_on_resume(const struct dmi_system_id *id) 1239{ 1240 pr_debug("Detected system needing EC poll on resume.\n"); 1241 EC_FLAGS_CLEAR_ON_RESUME = 1; 1242 return 0; 1243} 1244 1245static struct dmi_system_id ec_dmi_table[] __initdata = { 1246 { 1247 ec_skip_dsdt_scan, "Compal JFL92", { 1248 DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"), 1249 DMI_MATCH(DMI_BOARD_NAME, "JFL92") }, NULL}, 1250 { 1251 ec_flag_msi, "MSI hardware", { 1252 DMI_MATCH(DMI_BIOS_VENDOR, "Micro-Star")}, NULL}, 1253 { 1254 ec_flag_msi, "MSI hardware", { 1255 DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star")}, NULL}, 1256 { 1257 ec_flag_msi, "MSI hardware", { 1258 DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-Star")}, NULL}, 1259 { 1260 ec_flag_msi, "MSI hardware", { 1261 DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-STAR")}, NULL}, 1262 { 1263 ec_flag_msi, "Quanta hardware", { 1264 DMI_MATCH(DMI_SYS_VENDOR, "Quanta"), 1265 DMI_MATCH(DMI_PRODUCT_NAME, "TW8/SW8/DW8"),}, NULL}, 1266 { 1267 ec_flag_msi, "Quanta hardware", { 1268 DMI_MATCH(DMI_SYS_VENDOR, "Quanta"), 1269 DMI_MATCH(DMI_PRODUCT_NAME, "TW9/SW9"),}, NULL}, 1270 { 1271 ec_flag_msi, "Clevo W350etq", { 1272 DMI_MATCH(DMI_SYS_VENDOR, "CLEVO CO."), 1273 DMI_MATCH(DMI_PRODUCT_NAME, "W35_37ET"),}, NULL}, 1274 { 1275 ec_validate_ecdt, "ASUS hardware", { 1276 DMI_MATCH(DMI_BIOS_VENDOR, "ASUS") }, NULL}, 1277 { 1278 ec_validate_ecdt, "ASUS hardware", { 1279 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc.") }, NULL}, 1280 { 1281 ec_enlarge_storm_threshold, "CLEVO hardware", { 1282 DMI_MATCH(DMI_SYS_VENDOR, "CLEVO Co."), 1283 DMI_MATCH(DMI_PRODUCT_NAME, "M720T/M730T"),}, NULL}, 1284 { 1285 ec_skip_dsdt_scan, "HP Folio 13", { 1286 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 1287 DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13"),}, NULL}, 1288 { 1289 ec_validate_ecdt, "ASUS hardware", { 1290 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTek Computer Inc."), 1291 DMI_MATCH(DMI_PRODUCT_NAME, "L4R"),}, NULL}, 1292 { 1293 ec_clear_on_resume, "Samsung hardware", { 1294 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD.")}, NULL}, 1295 { 1296 ec_flag_query_handshake, "Acer hardware", { 1297 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), }, NULL}, 1298 {}, 1299}; 1300 1301int __init acpi_ec_ecdt_probe(void) 1302{ 1303 acpi_status status; 1304 struct acpi_ec *saved_ec = NULL; 1305 struct acpi_table_ecdt *ecdt_ptr; 1306 1307 boot_ec = make_acpi_ec(); 1308 if (!boot_ec) 1309 return -ENOMEM; 1310 /* 1311 * Generate a boot ec context 1312 */ 1313 dmi_check_system(ec_dmi_table); 1314 status = acpi_get_table(ACPI_SIG_ECDT, 1, 1315 (struct acpi_table_header **)&ecdt_ptr); 1316 if (ACPI_SUCCESS(status)) { 1317 pr_info("EC description table is found, configuring boot EC\n"); 1318 boot_ec->command_addr = ecdt_ptr->control.address; 1319 boot_ec->data_addr = ecdt_ptr->data.address; 1320 boot_ec->gpe = ecdt_ptr->gpe; 1321 boot_ec->handle = ACPI_ROOT_OBJECT; 1322 acpi_get_handle(ACPI_ROOT_OBJECT, ecdt_ptr->id, 1323 &boot_ec->handle); 1324 /* Don't trust ECDT, which comes from ASUSTek */ 1325 if (!EC_FLAGS_VALIDATE_ECDT) 1326 goto install; 1327 saved_ec = kmemdup(boot_ec, sizeof(struct acpi_ec), GFP_KERNEL); 1328 if (!saved_ec) 1329 return -ENOMEM; 1330 /* fall through */ 1331 } 1332 1333 if (EC_FLAGS_SKIP_DSDT_SCAN) { 1334 kfree(saved_ec); 1335 return -ENODEV; 1336 } 1337 1338 /* This workaround is needed only on some broken machines, 1339 * which require early EC, but fail to provide ECDT */ 1340 pr_debug("Look up EC in DSDT\n"); 1341 status = acpi_get_devices(ec_device_ids[0].id, ec_parse_device, 1342 boot_ec, NULL); 1343 /* Check that acpi_get_devices actually find something */ 1344 if (ACPI_FAILURE(status) || !boot_ec->handle) 1345 goto error; 1346 if (saved_ec) { 1347 /* try to find good ECDT from ASUSTek */ 1348 if (saved_ec->command_addr != boot_ec->command_addr || 1349 saved_ec->data_addr != boot_ec->data_addr || 1350 saved_ec->gpe != boot_ec->gpe || 1351 saved_ec->handle != boot_ec->handle) 1352 pr_info("ASUSTek keeps feeding us with broken " 1353 "ECDT tables, which are very hard to workaround. " 1354 "Trying to use DSDT EC info instead. Please send " 1355 "output of acpidump to linux-acpi@vger.kernel.org\n"); 1356 kfree(saved_ec); 1357 saved_ec = NULL; 1358 } else { 1359 /* We really need to limit this workaround, the only ASUS, 1360 * which needs it, has fake EC._INI method, so use it as flag. 1361 * Keep boot_ec struct as it will be needed soon. 1362 */ 1363 if (!dmi_name_in_vendors("ASUS") || 1364 !acpi_has_method(boot_ec->handle, "_INI")) 1365 return -ENODEV; 1366 } 1367install: 1368 if (!ec_install_handlers(boot_ec)) { 1369 first_ec = boot_ec; 1370 return 0; 1371 } 1372error: 1373 kfree(boot_ec); 1374 kfree(saved_ec); 1375 boot_ec = NULL; 1376 return -ENODEV; 1377} 1378 1379static struct acpi_driver acpi_ec_driver = { 1380 .name = "ec", 1381 .class = ACPI_EC_CLASS, 1382 .ids = ec_device_ids, 1383 .ops = { 1384 .add = acpi_ec_add, 1385 .remove = acpi_ec_remove, 1386 }, 1387}; 1388 1389int __init acpi_ec_init(void) 1390{ 1391 int result = 0; 1392 1393 /* Now register the driver for the EC */ 1394 result = acpi_bus_register_driver(&acpi_ec_driver); 1395 if (result < 0) 1396 return -ENODEV; 1397 1398 return result; 1399} 1400 1401/* EC driver currently not unloadable */ 1402#if 0 1403static void __exit acpi_ec_exit(void) 1404{ 1405 1406 acpi_bus_unregister_driver(&acpi_ec_driver); 1407} 1408#endif /* 0 */