1/* SPDX-License-Identifier: GPL-2.0-only */ 2 3/* 4 * include this file into a mainboard's DSDT _SB device tree and it will expose the 5 * W83627HF SuperIO and its functionality. 6 * 7 * Devices are marked as nonexistent if they got 0x00000000 as I/O base address 8 * (compatibility with legacy bios, which disables logical devices that way) 9 * 10 * It allows the change of IO ports, IRQs and DMA settings on most logical 11 * devices, disabling and reenabling logical devices and controlling power 12 * saving mode on logical devices or the whole chip. 13 * 14 * Notes: 15 * - ECP mode of parallel port not implemented, DMA settings of parallel port 16 * will be reset on DSDT init 17 * - Hardware monitor is only shown as "Motherboard Resource", shows no real 18 * functionality 19 * 20 * Controllable through preprocessor macros: 21 * NO_W83627HF_FDC: don't expose the floppy disk controller 22 * NO_W83627HF_FDC_ENUM: don't try to enumerate the connected floppy drives 23 * NO_W83627HF_PPORT: don't expose the parallel port 24 * NO_W83627HF_UARTA: don't expose the first serial port 25 * NO_W83627HF_UARTB: don't expose the second serial port (already hidden 26 * if UARTB is configured as IRDA port by firmware) 27 * NO_W83627HF_IRDA: don't expose the IRDA port (already hidden if UARTB is 28 * configured as serial port by firmware) 29 * NO_W83627HF_CIR: don't expose the Consumer Infrared functionality 30 * NO_W83627HF_KBC: don't expose the keyboard controller 31 * NO_W83627HF_PS2M: don't expose the PS/2 mouse functionality of the 32 * keyboard controller 33 * NO_W83627HF_GAME: don't expose the game port 34 * NO_W83627HF_MIDI: don't expose the MIDI port 35 * NO_W83627HF_HWMON: don't expose the hardware monitor as 36 * PnP "Motherboard Resource" 37 * W83627HF_KBC_COMPAT: show the keyboard controller and the PS/2 mouse as 38 * enabled if it is disabled but an address is assigned 39 * to it. This may be necessary in some cases. 40 * 41 * Datasheet: "W83627HF/F WINBOND I/O" rev. 6.0 42 * http://www.itox.com/pages/support/wdt/W83627HF.pdf 43 */ 44 45#include <superio/acpi/pnp.asl> 46 47Device(SIO) { 48 Name (_HID, EisaId("PNP0A05")) 49 Name (_STR, Unicode("Winbond W83627HF SuperIO")) 50 Name (_UID, "w83627hf") 51 52 /* Mutex for accesses to the configuration ports (prolog and epilog commands are used, so synchronization is useful) */ 53 Mutex(CRMX, 1) 54 55 /* SuperIO configuration ports */ 56 OperationRegion (CREG, SystemIO, SUPERIO_PNP_BASE, 0x02) 57 Field (CREG, ByteAcc, NoLock, Preserve) 58 { 59 PNP_ADDR_REG, 8, 60 PNP_DATA_REG, 8 61 } 62 IndexField (PNP_ADDR_REG, PNP_DATA_REG, ByteAcc, NoLock, Preserve) 63 { 64 Offset (0x02), 65 RST, 1, /* Soft reset */ 66 , 7, 67 Offset (0x07), 68 LDN, 8, /* Logical device selector */ 69 Offset (0x20), 70 DID, 8, /* Device ID */ 71 DREV, 8, /* Device Revision */ 72 FDPW, 1, /* FDC Power Down */ 73 , 2, 74 PRPW, 1, /* PRT Power Down */ 75 UAPW, 1, /* UART A Power Down */ 76 UBPW, 1, /* UART B Power Down */ 77 HWPW, 1, /* HWM Power Down */ 78 , 1, 79 IPD, 1, /* Immediate Chip Power Down */ 80 , 7, 81 PNPS, 1, /* PnP Address Select Register Default Value Mode */ 82 , 1, 83 KBCR, 1, /* KBC enabled after system reset (read-only) */ 84 , 3, 85 CLKS, 1, /* Clock select */ 86 AQ16, 1, /* 16bit Address Qualification */ 87 FDCT, 1, /* Tristate FDC (?) */ 88 , 2, 89 PRTT, 1, /* Tristate parallel port (?) */ 90 URAT, 1, /* Tristate UART A (?) */ 91 URBT, 1, /* Tristate UART B (?) */ 92 , 2, 93 URAI, 1, /* UART A Legacy IRQ Select Disable */ 94 URBI, 1, /* UART B Legacy IRQ Select Disable */ 95 PRTI, 1, /* Parallel Port Legacy IRQ/DRQ Select Disable */ 96 FDCI, 1, /* FDC Legacy IRQ/DRQ Select Disable */ 97 , 1, 98 LCKC, 1, /* Lock Configuration Registers */ 99 Offset (0x29), 100 IO3S, 8, /* GPIO3 pin selection register */ 101 Offset (0x30), 102 ACTR, 1, /* Logical device activation */ 103 ACT1, 1, /* Logical part activation 1 (mostly unused) */ 104 ACT2, 1, /* Logical part activation 2 (mostly unused) */ 105 , 5, 106 Offset (0x60), 107 IO1H, 8, /* First I/O port base - high byte */ 108 IO1L, 8, /* First I/O port base - low byte */ 109 IO2H, 8, /* Second I/O port base - high byte */ 110 IO2L, 8, /* Second I/O port base - low byte */ 111 Offset (0x70), 112 IRQ0, 8, /* First IRQ */ 113 Offset (0x72), 114 IRQ1, 8, /* First IRQ */ 115 Offset (0x74), 116 DMA0, 8, /* DMA */ 117 Offset (0xE0), 118 /* CRE0-CRE4: function logical device dependent, seems to be reserved for ACPI settings */ 119 CRE0, 8, 120 CRE1, 8, 121 CRE2, 8, 122 CRE3, 8, 123 CRE4, 8, 124 Offset (0xF0), 125 /* OPT1-OPTA aka CRF0-CRF9: function logical device dependent */ 126 OPT1, 8, 127 OPT2, 8, 128 OPT3, 8, 129 OPT4, 8, 130 OPT5, 8, 131 OPT6, 8, 132 OPT7, 8, 133 OPT8, 8, 134 OPT9, 8, 135 OPTA, 8 136 } 137 138 Method (_CRS) 139 { 140 Return (ResourceTemplate () { 141 /* Announce the used I/O ports to the OS */ 142 IO (Decode16, SUPERIO_PNP_BASE, SUPERIO_PNP_BASE, 0x02, 0x01) 143 }) 144 } 145 146 /* Enter configuration mode (and acquire mutex) 147 Method must be run before accessing the configuration region. 148 Parameter is the LDN which should be accessed. Values >= 0xFF mean 149 no LDN switch should be done. 150 */ 151 Method (ENTER_CONFIG_MODE, 1) 152 { 153 Acquire (CRMX, 0xFFFF) 154 ADDR = 0x87 155 ADDR = 0x87 156 If (Arg0 < 0xFF) { 157 LDN = Arg0 158 } 159 } 160 161 /* Exit configuration mode (and release mutex) 162 Method must be run after accessing the configuration region. 163 */ 164 Method (EXIT_CONFIG_MODE) 165 { 166 ADDR = 0xAA 167 Release (CRMX) 168 } 169 170 /* PM: indicate IPD (Immediate Power Down) bit state as D0/D3 */ 171 Method (_PSC) { 172 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 173 Local0 = IPD 174 EXIT_CONFIG_MODE () 175 If (Local0) { Return (3) } 176 Else { Return (0) } 177 } 178 179 /* PM: Switch to D0 by setting IPD low */ 180 Method (_PS0) { 181 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 182 IPD = 0 183 EXIT_CONFIG_MODE () 184 } 185 186 /* PM: Switch to D3 by setting IPD high */ 187 Method (_PS3) { 188 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 189 IPD = 1 190 EXIT_CONFIG_MODE () 191 } 192 193 #ifndef NO_W83627HF_FDC 194 /* =================== Floppy Disk Controller ================ */ 195 Device (FDC0) { 196 Name (_HID, EisaId ("PNP0700")) 197 Name (_STR, Unicode ("W83627HF Floppy Disk Controller")) 198 Name (_UID, "w83627hf-fdc") 199 200 Method (_STA) 201 { 202 Local0 = 0x00 203 ENTER_CONFIG_MODE (0) 204 If (ACTR) { 205 Local0 = 0x0F 206 } 207 ElseIf (IO1H || IO1L) 208 { 209 Local0 = 0x0D 210 } 211 EXIT_CONFIG_MODE () 212 Return (Local0) 213 } 214 215 /* Current power state (Returns 1 if LDN in power saving mode, 216 * 2 if whole chip is powered down), 0 else 217 */ 218 Method (_PSC) { 219 Local0 = ^^_PSC () 220 If (Local0) { Return (Local0) } 221 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 222 Local0 = FDPW 223 EXIT_CONFIG_MODE () 224 If (Local0) { Return (3) } 225 Else { Return (0) } 226 } 227 /* Disable power saving mode */ 228 Method (_PS0) { 229 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 230 FDPW = 1 231 EXIT_CONFIG_MODE () 232 } 233 /* Enable power saving mode */ 234 Method (_PS3) { 235 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 236 FDPW = 0 237 EXIT_CONFIG_MODE () 238 } 239 240 Method (_DIS) 241 { 242 ENTER_CONFIG_MODE (0) 243 ACTR = 0 244 EXIT_CONFIG_MODE () 245 } 246 247 Method (_CRS) 248 { 249 Name (CRS, ResourceTemplate () { 250 IO (Decode16, 0x0000, 0x0000, 0x01, 0x07, IO0) 251 IRQNoFlags () {6} 252 DMA (Compatibility, NotBusMaster, Transfer8) {2} 253 }) 254 255 /* Get IO port info */ 256 ENTER_CONFIG_MODE (0) 257 Local0 = IO1L 258 Local1 = IO1H 259 EXIT_CONFIG_MODE () 260 261 /* Calculate full IO port address */ 262 Local0 |= Local1 << 8 263 264 /* Modify the resource template and return it */ 265 CreateWordField (CRS, IO0._MIN, IMIN) 266 CreateWordField (CRS, IO0._MAX, IMAX) 267 IMIN = Local0 268 IMAX = Local0 269 Return (CRS) 270 } 271 272 Method (_PRS) 273 { 274 Return (ResourceTemplate () 275 { 276 StartDependentFnNoPri () 277 { 278 IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x07) 279 IRQNoFlags () {6} 280 DMA (Compatibility, NotBusMaster, Transfer8) {2} 281 } 282 EndDependentFn () 283 }) 284 } 285 286 #ifndef NO_W83627HF_FDC_ENUM 287 Method (_FDE, 0) { 288 /* Try probing drives. 289 Probing is done through selecting and activating a drive 290 and reading 0x03F7 aka the "shared IDE and floppy register" 291 as any value there besides zero seems to indicate a 292 connected drive. 293 */ 294 // Create template 295 Name(FDE, Buffer(){0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}) 296 CreateByteField (FDE, 1, FD1) 297 CreateByteField (FDE, 4, FD2) 298 CreateByteField (FDE, 8, FD3) 299 CreateByteField (FDE, 12, FD4) 300 301 // Get resources from logical device 302 ENTER_CONFIG_MODE (0) 303 Local0 = ACTR 304 Local1 = IO1H 305 Local2 = IO1L 306 EXIT_CONFIG_MODE () 307 Local1 <<= 8 308 Local1 |= Local2 309 If (!Local0) { 310 Return (FDE) 311 } 312 313 OperationRegion (FIO1, SystemIO, Local1, 0x06) 314 Field (FIO1, ByteAcc, NoLock, Preserve) 315 { 316 Offset(0x02), 317 SELE, 2, 318 RSTL, 1, 319 IDMA, 1, 320 ACT1, 1, 321 ACT2, 1, 322 ACT3, 1, 323 ACT4, 1, 324 Offset(0x04), 325 BSY1, 1, 326 BSY2, 1, 327 BSY3, 1, 328 BSY4, 1, 329 BUSY, 1, 330 NDMA, 1, 331 IODI, 1, 332 RDY, 1, 333 DATA, 8, 334 } 335 OperationRegion (FIO2, SystemIO, 0x3F7, 0x01) 336 Field (FIO2, ByteAcc, NoLock, Preserve) 337 { 338 SIFR, 8 339 } 340 341 ACT1 = 1 342 SELE = 0 343 Sleep(0x64) 344 If (SIFR) { FD1 = 1 } 345 346 ACT1 = 0 347 ACT2 = 1 348 SELE = 1 349 Sleep(0x64) 350 If (SIFR) { FD2 = 1 } 351 352 ACT2 = 0 353 ACT3 = 1 354 SELE = 2 355 Sleep(0x64) 356 If (SIFR) { FD3 = 1 } 357 358 ACT3 = 0 359 ACT4 = 1 360 SELE = 3 361 Sleep(0x64) 362 If (SIFR) { FD4 = 1 } 363 ACT4 = 0 364 SELE = 0 365 366 Return (FDE) 367 } 368 #endif 369 370 371 Method (_SRS, 1, Serialized) 372 { 373 Name (TMPL, ResourceTemplate () { 374 IO (Decode16, 0, 0, 1, 7, IO0) 375 IRQNoFlags (IRQ0) {} 376 DMA (Compatibility, NotBusMaster, Transfer8, DMA0) {} 377 }) 378 CreateWordField (Arg0, IO0._MIN, IOA0) 379 CreateByteField (Arg0, IRQ0._INT, IRQL) 380 CreateByteField (Arg0, DMA0._DMA, DMCH) 381 382 Local0 = IOA0 % 256 383 Local1 = IOA0 / 256 384 385 ENTER_CONFIG_MODE (0) 386 IO1L = Local0 387 IO1H = Local1 388 ACTR = 1 389 EXIT_CONFIG_MODE () 390 } 391 } 392 #endif 393 394 #ifndef NO_W83627HF_PPORT 395 /* ======================== Parallel Port ======================== */ 396 /* Currently no ECP support */ 397 Device (PAR0) { 398 Name (_HID, EisaId ("PNP0400")) 399 Name (_DDN, "LPT1") 400 Name (_UID, "w83627hf-pport") 401 402 Method (MODE, 1) { 403 Local0 = Arg0 & 7 404 ENTER_CONFIG_MODE (1) 405 Local1 = OPT1 & 3 406 OPT1 = Local1 | Local0 407 EXIT_CONFIG_MODE() 408 } 409 410 Method (_INI) 411 { 412 /* Deactivate DMA, even if set by BIOS. We don't announce it 413 through _CRS and it's only useful in ECP mode which we 414 don't support at the moment. */ 415 ENTER_CONFIG_MODE (1) 416 DMA0 = 0x04 417 EXIT_CONFIG_MODE () 418 } 419 420 Method (_STA) 421 { 422 Local0 = 0x00 423 ENTER_CONFIG_MODE (1) 424 Local1 = OPT1 & 3 425 If (ACTR) { 426 If (Local1 != 2) { 427 Local0 = 0x0D 428 } Else { 429 Local0 = 0x0D 430 } 431 } 432 ElseIf (IO1H || IO1L) 433 { 434 Local0 = 0x0D 435 } 436 EXIT_CONFIG_MODE () 437 Return (Local0) 438 } 439 440 Method (_PSC) { 441 Local0 = ^^_PSC () 442 If (Local0) { Return (Local0) } 443 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 444 Local0 = PRPW 445 EXIT_CONFIG_MODE () 446 If (Local0) { Return (3) } 447 Else { Return (0) } 448 } 449 Method (_PS0) { 450 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 451 PRPW = 1 452 EXIT_CONFIG_MODE () 453 } 454 Method (_PS3) { 455 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 456 PRPW = 0 457 EXIT_CONFIG_MODE () 458 } 459 460 Method (_DIS) { 461 ENTER_CONFIG_MODE (1) 462 ACTR = 0 463 EXIT_CONFIG_MODE () 464 } 465 466 Method (_CRS) 467 { 468 Name (CRS, ResourceTemplate () 469 { 470 IO (Decode16, 0x0000, 0x0000, 0x04, 0x08, IO0) 471 IRQNoFlags (IRQX) {} 472 }) 473 CreateWordField (CRS, IO0._MIN, IOP0) 474 CreateWordField (CRS, IO0._MAX, IOR0) 475 CreateByteField (CRS, IO0._ALN, IOAL) 476 CreateByteField (CRS, IO0._LEN, IOLE) 477 CreateWordField (CRS, IRQX._INT, IRQW) 478 479 /* Get device settings */ 480 ENTER_CONFIG_MODE (1) 481 Local0 = IO1L 482 Local1 = IO1H 483 Local2 = OPT1 484 Local5 = IRQ0 485 EXIT_CONFIG_MODE () 486 /* Calculate IO port and modify template */ 487 Local0 |= Local1 << 8 488 IOP0 = Local1 489 IOR0 = Local1 490 491 /* Set align and length based on active parallel port mode */ 492 Local3 = Local2 & 3 493 Local4 = Local2 & 4 494 If (Local4) { 495 IOAL = 0x04 496 } 497 If (Local0 == 0xBC) 498 { 499 IOLE = 0x04 500 } 501 Else 502 { 503 IOLE = 0x08 504 } 505 /* Calculate IRQ bitmap */ 506 Local0 = 1 507 IRQW = Local0 << Local5 508 /* Return resource template */ 509 Return (CRS) 510 } 511 512 Name (_PRS, ResourceTemplate () 513 { 514 /* Traditional configurations (SPP mode) */ 515 StartDependentFn (0,1) 516 { 517 IO (Decode16, 0x0378, 0x0378, 0x04, 0x08) 518 IRQNoFlags () {3,4,5,7,9,10,11,12} 519 } 520 StartDependentFn (0,1) 521 { 522 IO (Decode16, 0x0278, 0x0278, 0x04, 0x08) 523 IRQNoFlags () {3,4,5,7,9,10,11,12} 524 } 525 StartDependentFn (0,1) 526 { 527 IO (Decode16, 0x03BC, 0x03BC, 0x04, 0x04) 528 IRQNoFlags () {3,4,5,7,9,10,11,12} 529 } 530 /* Traditional configurations (EPP mode) */ 531 StartDependentFn (0,0) 532 { 533 IO (Decode16, 0x0378, 0x0378, 0x08, 0x08) 534 IRQNoFlags () {3,4,5,7,9,10,11,12} 535 } 536 StartDependentFn (0,0) 537 { 538 IO (Decode16, 0x0278, 0x0278, 0x08, 0x08) 539 IRQNoFlags () {3,4,5,7,9,10,11,12} 540 } 541 /* Any configurable address (EPP mode) */ 542 StartDependentFn (2,0) 543 { 544 IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08) 545 IRQNoFlags () {3,4,5,7,9,10,11,12} 546 } 547 /* Any configurable address (No EPP mode) */ 548 StartDependentFn (2,1) 549 { 550 IO (Decode16, 0x0100, 0x0FFC, 0x04, 0x08) 551 IRQNoFlags () {3,4,5,7,9,10,11,12} 552 } 553 EndDependentFn () 554 }) 555 556 Method (_SRS, 1, Serialized) 557 { 558 Name (TMPL, ResourceTemplate () { 559 IO (Decode16, 0, 0, 4, 4, IO0) 560 IRQNoFlags (IRQX) {} 561 }) 562 CreateWordField (Arg0, IO0._MIN, IOA0) 563 CreateWordField (Arg0, IO0._MIN, IOA1) 564 CreateByteField (Arg0, IO0._ALN, IOAL) 565 CreateByteField (Arg0, IO0._LEN, IOLE) 566 CreateWordField (Arg0, IRQX._INT, IRQL) 567 568 If (IOAL == 4) { 569 Local2 = 0x0 570 } else { 571 Local2 = 0x1 572 } 573 574 Local0 = IOA0 % 256 575 Local1 = IOA0 / 256 576 577 ENTER_CONFIG_MODE (1) 578 /* IO port */ 579 IO1L = Local0 580 IO1H = Local1 581 /* Mode */ 582 Local3 = OPT1 583 Local3 &= 0xF8 584 OPT1 = Local2 | Local3 585 /* DMA off */ 586 DMA0 = 0x04 587 /* IRQ */ 588 IRQ0 = FindSetLeftBit (IRQL) - 1 589 /* Activate */ 590 ACTR = 1 591 EXIT_CONFIG_MODE () 592 } 593 } 594 #endif 595 596 #ifndef NO_W83627HF_UARTA 597 /* =========================== UART A ============================ */ 598 Device (SER0) { 599 Name (_HID, EisaId ("PNP0501")) 600 Name (_UID, "w83627hf-uarta") 601 Name (_DDN, "COM1") 602 603 Method (_STA) 604 { 605 Local0 = 0x00 606 ENTER_CONFIG_MODE (2) 607 If (ACTR) { 608 Local0 = 0x0F 609 } 610 ElseIf (IO1H || IO1L) 611 { 612 Local0 = 0x0D 613 } 614 EXIT_CONFIG_MODE () 615 Return (Local0) 616 } 617 618 Method (_PSC) { 619 Local0 = ^^_PSC () 620 If (Local0) { Return (Local0) } 621 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 622 Local0 = UAPW 623 EXIT_CONFIG_MODE () 624 If (Local0) { Return (3) } 625 Else { Return (0) } 626 } 627 Method (_PS0) { 628 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 629 UAPW = 1 630 EXIT_CONFIG_MODE () 631 } 632 Method (_PS3) { 633 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 634 UAPW = 0 635 EXIT_CONFIG_MODE () 636 } 637 638 Method (_DIS) 639 { 640 ENTER_CONFIG_MODE (2) 641 ACTR = 0 642 EXIT_CONFIG_MODE () 643 } 644 645 Method (_CRS, 0, Serialized) 646 { 647 Name (CRS, ResourceTemplate () { 648 IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0) 649 IRQNoFlags (IRQX) {6} 650 }) 651 ENTER_CONFIG_MODE (2) 652 Local0 = IO1L 653 Local1 = IO1H 654 Local2 = IRQ0 655 EXIT_CONFIG_MODE () 656 Local0 |= Local1 << 8 657 658 CreateWordField (CRS, IO0._MIN, IMIN) 659 IMIN = Local0 660 CreateWordField (CRS, IO0._MAX, IMAX) 661 IMAX = Local0 662 663 CreateWordField (CRS, IRQX._INT, IRQW) 664 Local3 = 1 665 IRQW = Local3 << Local2 666 667 Return (CRS) 668 } 669 670 Name (_PRS, ResourceTemplate () 671 { 672 StartDependentFn (0,0) { 673 IO (Decode16, 0x03F8, 0x03F8, 0x08, 0x08) 674 IRQNoFlags () {3,4,5,7,9,10,11,12} 675 } 676 StartDependentFn (0,0) { 677 IO (Decode16, 0x02F8, 0x02F8, 0x08, 0x08) 678 IRQNoFlags () {3,4,5,7,9,10,11,12} 679 } 680 StartDependentFn (1,0) { 681 IO (Decode16, 0x03E8, 0x03E8, 0x08, 0x08) 682 IRQNoFlags () {3,4,5,7,9,10,11,12} 683 } 684 StartDependentFn (1,0) { 685 IO (Decode16, 0x02E8, 0x02E8, 0x08, 0x08) 686 IRQNoFlags () {3,4,5,7,9,10,11,12} 687 } 688 StartDependentFn (2,0) { 689 IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08) 690 IRQNoFlags () {3,4,5,7,9,10,11,12} 691 } 692 EndDependentFn() 693 }) 694 695 Method (_SRS, 1, Serialized) 696 { 697 Name (TMPL, ResourceTemplate () { 698 IO (Decode16, 0, 0, 1, 6, IO0) 699 IRQNoFlags (IRQX) {} 700 }) 701 CreateWordField (Arg0, IO0._MIN, IOA0) 702 CreateWordField (Arg0, IRQX._INT, IRQL) 703 704 Local0 = IOA0 % 256 705 Local1 = IOA0 / 256 706 707 Local3 = FindSetLeftBit (IRQL) - 1 708 709 ENTER_CONFIG_MODE (2) 710 IO1L = Local0 711 IO1H = Local1 712 IRQ0 = Local3 713 ACTR = 1 714 EXIT_CONFIG_MODE () 715 } 716 } 717 #endif 718 719 #ifndef NO_W83627HF_UARTB 720 /* =========================== UART B ============================ */ 721 Device (SER1) { 722 Name (_HID, EisaId ("PNP0501")) 723 Name (_UID, "w83627hf-uartb") 724 Name (_DDN, "COM2") 725 726 Method (_STA) 727 { 728 Local0 = 0x00 729 ENTER_CONFIG_MODE (3) 730 If (!(OPT2 & 0x30)) 731 { 732 If (ACTR) { 733 Local0 = 0x0F 734 } 735 ElseIf (IO1H || IO1L) 736 { 737 Local0 = 0x0D 738 } 739 } 740 EXIT_CONFIG_MODE () 741 Return (Local0) 742 } 743 744 Method (_PSC) { 745 Local0 = ^^_PSC () 746 If (Local0) { Return (Local0) } 747 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 748 Local0 = UBPW 749 EXIT_CONFIG_MODE () 750 If (Local0) { Return (3) } 751 Else { Return (0) } 752 } 753 Method (_PS0) { 754 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 755 UBPW = 1 756 EXIT_CONFIG_MODE () 757 } 758 Method (_PS3) { 759 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 760 UBPW = 0 761 EXIT_CONFIG_MODE () 762 } 763 764 Method (_DIS) 765 { 766 ENTER_CONFIG_MODE (3) 767 ACTR = 0 768 EXIT_CONFIG_MODE () 769 } 770 771 Method (_CRS) 772 { 773 Name (CRS, ResourceTemplate () { 774 IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0) 775 IRQNoFlags (IRQX) {6} 776 }) 777 ENTER_CONFIG_MODE (3) 778 Local0 = IO1L 779 Local1 = IO1H 780 Local2 = IRQ0 781 EXIT_CONFIG_MODE () 782 Local0 |= Local1 << 8 783 784 CreateWordField (CRS, IO0._MIN, IMIN) 785 IMIN = Local0 786 CreateWordField (CRS, IO0._MAX, IMAX) 787 IMAX = Local0 788 789 CreateWordField (CRS, IRQX._INT, IRQW) 790 Local3 = 1 791 IRQW = Local3 << Local2 792 793 Return (CRS) 794 } 795 796 Name (_PRS, ResourceTemplate () 797 { 798 StartDependentFn (0,0) { 799 IO (Decode16, 0x02F8, 0x02F8, 0x08, 0x08) 800 IRQNoFlags () {3,4,5,7,9,10,11,12} 801 } 802 StartDependentFn (0,0) { 803 IO (Decode16, 0x03F8, 0x03F8, 0x08, 0x08) 804 IRQNoFlags () {3,4,5,7,9,10,11,12} 805 } 806 StartDependentFn (1,0) { 807 IO (Decode16, 0x03E8, 0x03E8, 0x08, 0x08) 808 IRQNoFlags () {3,4,5,7,9,10,11,12} 809 } 810 StartDependentFn (1,0) { 811 IO (Decode16, 0x02E8, 0x02E8, 0x08, 0x08) 812 IRQNoFlags () {3,4,5,7,9,10,11,12} 813 } 814 StartDependentFn (2,0) { 815 IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08) 816 IRQNoFlags () {3,4,5,7,9,10,11,12} 817 } 818 EndDependentFn() 819 }) 820 821 Method (_SRS, 1, Serialized) 822 { 823 Name (TMPL, ResourceTemplate () { 824 IO (Decode16, 0, 0, 1, 8, IO0) 825 IRQNoFlags (IRQX) {} 826 }) 827 CreateWordField (Arg0, IO0._MIN, IOA0) 828 CreateByteField (Arg0, IRQX._INT, IRQL) 829 830 Local0 = IOA0 % 256 831 Local1 = IOA0 / 256 832 833 Local3 = FindSetLeftBit (IRQL) - 1 834 835 ENTER_CONFIG_MODE (3) 836 IO1L = Local0 837 IO1H = Local1 838 IRQ0 = Local3 839 ACTR = 1 840 EXIT_CONFIG_MODE () 841 } 842 } 843 #endif 844 845 #ifndef NO_W83627HF_IRDA 846 /* ======================== UART B (IRDA) ======================== */ 847 Device (IRDA) { 848 Name (_HID, EisaId ("PNP0510")) 849 Name (_UID, "w83627hf-irda") 850 Name (_STR, Unicode("IrDA Port")) 851 852 Method (_STA) 853 { 854 Local0 = 0x00 855 ENTER_CONFIG_MODE (3) 856 If (OPT2 & 0x30) 857 { 858 If (ACTR) { 859 Local0 = 0x0F 860 } 861 ElseIf (IO1H || IO1L) 862 { 863 Local0 = 0x0D 864 } 865 } 866 EXIT_CONFIG_MODE () 867 Return (Local0) 868 } 869 870 Method (_PSC) { 871 Local0 = ^^_PSC () 872 If (Local0) { Return (Local0) } 873 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 874 Local0 = UBPW 875 EXIT_CONFIG_MODE () 876 If (Local0) { Return (3) } 877 Else { Return (0) } 878 } 879 Method (_PS0) { 880 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 881 UBPW = 1 882 EXIT_CONFIG_MODE () 883 } 884 Method (_PS3) { 885 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 886 UBPW = 0 887 EXIT_CONFIG_MODE () 888 } 889 890 Method (_DIS) 891 { 892 ENTER_CONFIG_MODE (3) 893 ACTR = 0 894 EXIT_CONFIG_MODE () 895 } 896 897 Method (_CRS) 898 { 899 Name (CRS, ResourceTemplate () { 900 IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0) 901 IRQNoFlags (IRQX) {6} 902 }) 903 ENTER_CONFIG_MODE (3) 904 Local1 = IO1H 905 Local0 = IO1L 906 Local2 = IRQ0 907 EXIT_CONFIG_MODE () 908 Local0 |= Local1 << 8 909 910 CreateWordField (CRS, IO0._MIN, IMIN) 911 IMIN = Local0 912 CreateWordField (CRS, IO0._MAX, IMAX) 913 IMAX = Local0 914 915 CreateWordField (CRS, IRQX._INT, IRQW) 916 Local3 = 1 917 IRQW = Local3 << Local2 918 919 Return (CRS) 920 } 921 922 Name (_PRS, ResourceTemplate () 923 { 924 StartDependentFn (0,0) { 925 IO (Decode16, 0x02F8, 0x02F8, 0x08, 0x08) 926 IRQNoFlags () {3,4,5,7,9,10,11,12} 927 } 928 StartDependentFn (1,0) { 929 IO (Decode16, 0x03F8, 0x03F8, 0x08, 0x08) 930 IRQNoFlags () {3,4,5,7,9,10,11,12} 931 } 932 StartDependentFn (0,0) { 933 IO (Decode16, 0x03E8, 0x03E8, 0x08, 0x08) 934 IRQNoFlags () {3,4,5,7,9,10,11,12} 935 } 936 StartDependentFn (0,0) { 937 IO (Decode16, 0x02E8, 0x02E8, 0x08, 0x08) 938 IRQNoFlags () {3,4,5,7,9,10,11,12} 939 } 940 StartDependentFn (2,0) { 941 IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08) 942 IRQNoFlags () {3,4,5,7,9,10,11,12} 943 } 944 EndDependentFn() 945 }) 946 947 Method (_SRS, 1, Serialized) 948 { 949 Name (TMPL, ResourceTemplate () { 950 IO (Decode16, 0, 0, 1, 8, IO0) 951 IRQNoFlags (IRQX) {} 952 }) 953 CreateWordField (Arg0, IO0._MIN, IOA0) 954 CreateByteField (Arg0, IRQX._INT, IRQL) 955 956 Local0 = IOA0 % 256 957 Local1 = IOA0 / 256 958 959 Local3 = FindSetLeftBit (IRQL) - 1 960 961 ENTER_CONFIG_MODE (3) 962 IO1L = Local0 963 IO1H = Local1 964 IRQ0 = Local3 965 ACTR = 1 966 EXIT_CONFIG_MODE () 967 } 968 } 969 #endif 970 971 #ifndef NO_W83627HF_CIR 972 /* ========================= Consumer IR ========================= */ 973 Device (CIR0) 974 { 975 Name (_HID, EisaId ("WEC1022")) /* Should be the correct one */ 976 Name (_UID, "w83627hf-cir") 977 Name (_STR, Unicode("Winbond Consumer Infrared Transceiver")) 978 979 Method (_STA) 980 { 981 Local0 = 0x00 982 ENTER_CONFIG_MODE (6) 983 If (ACTR) { 984 Local0 = 0x0F 985 } 986 ElseIf (IO1H || IO1L) 987 { 988 Local0 = 0x0D 989 } 990 EXIT_CONFIG_MODE () 991 Return (Local0) 992 } 993 994 Method (_DIS) 995 { 996 ENTER_CONFIG_MODE (6) 997 ACTR = 0 998 EXIT_CONFIG_MODE () 999 } 1000 1001 Method (_CRS) 1002 { 1003 Name (CRS, ResourceTemplate () { 1004 IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0) 1005 IRQNoFlags (IRQX) {6} 1006 }) 1007 ENTER_CONFIG_MODE (6) 1008 Local0 = IO1L 1009 Local1 = IO1H 1010 Local2 = IRQ0 1011 EXIT_CONFIG_MODE () 1012 Local0 |= Local1 << 8 1013 1014 CreateWordField (CRS, IO0._MIN, IMIN) 1015 IMIN = Local0 1016 CreateWordField (CRS, IO0._MAX, IMAX) 1017 IMAX = Local0 1018 1019 CreateWordField (CRS, IRQX._INT, IRQW) 1020 Local3 = 1 1021 IRQW = Local3 << Local2 1022 1023 Return (CRS) 1024 } 1025 1026 Name (_PRS, ResourceTemplate () 1027 { 1028 StartDependentFn (0,0) { 1029 IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08) 1030 IRQNoFlags () {3,4,5,7,9,10,11,12} 1031 } 1032 EndDependentFn() 1033 }) 1034 1035 Method (_SRS, 1, Serialized) 1036 { 1037 Name (TMPL, ResourceTemplate () { 1038 IO (Decode16, 0, 0, 1, 8, IO0) 1039 IRQNoFlags (IRQX) {} 1040 }) 1041 CreateWordField (Arg0, IO0._MIN, IOA0) 1042 CreateByteField (Arg0, IRQX._INT, IRQL) 1043 1044 Local0 = IOA0 % 256 1045 Local1 = IOA0 / 256 1046 1047 Local3 = FindSetLeftBit (IRQL) - 1 1048 1049 ENTER_CONFIG_MODE (6) 1050 IO1L = Local0 1051 IO1H = Local1 1052 IRQ0 = Local3 1053 ACTR = 1 1054 EXIT_CONFIG_MODE () 1055 } 1056 } 1057 #endif 1058 1059 #ifndef NO_W83627HF_KBC 1060 /* ===================== Keyboard Controller ===================== */ 1061 Device (KBD0) 1062 { 1063 Name (_HID, EisaId ("PNP0303")) 1064 Name (_UID, "w83627hf-kbc") 1065 1066 Method (_STA) 1067 { 1068 Local0 = 0x00 1069 ENTER_CONFIG_MODE (5) 1070 If (ACTR) { 1071 Local0 = 0x0F 1072 } 1073 ElseIf (IO1H || IO1L || IO2H || IO2L) 1074 { 1075 #ifdef W83627HF_KBC_COMPAT 1076 Local0 = 0x0F 1077 #else 1078 Local0 = 0x0D 1079 #endif 1080 } 1081 EXIT_CONFIG_MODE () 1082 Return (Local0) 1083 } 1084 1085 Method (_DIS) 1086 { 1087 ENTER_CONFIG_MODE (5) 1088 ACTR = 0 1089 EXIT_CONFIG_MODE () 1090 Notify(PS2M, 1) 1091 } 1092 1093 Method (_CRS, 0, Serialized) 1094 { 1095 Name (CRS, ResourceTemplate () { 1096 IRQNoFlags (IRQX) {} 1097 IO (Decode16, 0x0000, 0x0000, 0x01, 0x01, IO0) 1098 IO (Decode16, 0x0000, 0x0000, 0x01, 0x01, IO1) 1099 }) 1100 ENTER_CONFIG_MODE (5) 1101 Local0 = IO1L 1102 Local1 = IO1H 1103 Local2 = IO2L 1104 Local3 = IO2H 1105 Local4 = IRQ0 1106 EXIT_CONFIG_MODE () 1107 1108 Local0 |= Local1 << 8 1109 Local2 |= Local3 << 8 1110 1111 CreateWordField (CRS, IO0._MIN, IMIN) 1112 IMIN = Local0 1113 CreateWordField (CRS, IO0._MAX, IMAX) 1114 IMAX = Local0 1115 1116 CreateWordField (CRS, IO1._MIN, I1MI) 1117 I1MI = Local2 1118 CreateWordField (CRS, IO1._MAX, I1MA) 1119 I1MA = Local2 1120 1121 CreateWordField (CRS, IRQX._INT, IRQW) 1122 Local5 = 1 1123 IRQW = Local5 << Local4 1124 1125 Return (CRS) 1126 } 1127 1128 Name (_PRS, ResourceTemplate () 1129 { 1130 StartDependentFn (0,0) { 1131 IRQNoFlags () {1} 1132 IO (Decode16, 0x0060, 0x0060, 0x01, 0x01) 1133 IO (Decode16, 0x0064, 0x0064, 0x01, 0x01) 1134 } 1135 EndDependentFn() 1136 }) 1137 1138 Method (_SRS, 1, Serialized) 1139 { 1140 Name (TMPL, ResourceTemplate () { 1141 IRQNoFlags (IRQX) {} 1142 IO (Decode16, 0, 0, 1, 1, IO0) 1143 IO (Decode16, 0, 0, 1, 1, IO1) 1144 }) 1145 CreateWordField (Arg0, IO0._MIN, IOA0) 1146 CreateWordField (Arg0, IO1._MIN, IOA1) 1147 CreateWordField (Arg0, IRQX._INT, IRQL) 1148 1149 Local0 = IOA0 % 256 1150 Local1 = IOA0 / 256 1151 Local2 = IOA1 % 256 1152 Local3 = IOA1 / 256 1153 1154 Local4 = FindSetLeftBit (IRQL) - 1 1155 1156 ENTER_CONFIG_MODE (5) 1157 IO1L = Local0 1158 IO1H = Local1 1159 IO2L = Local2 1160 IO2H = Local3 1161 IRQ0 = Local4 1162 ACTR = 1 1163 EXIT_CONFIG_MODE () 1164 Notify(PS2M, 1) 1165 } 1166 } 1167 #ifndef NO_W83627HF_PS2M 1168 Device (PS2M) 1169 { 1170 Name (_HID, EisaId ("PNP0F13")) 1171 Name (_UID, "w83627hf-ps2m") 1172 1173 Method (_STA) 1174 { 1175 Local0 = 0x00 1176 ENTER_CONFIG_MODE (5) 1177 If (ACTR && IRQ1) { 1178 Local0 = 0x0F 1179 } 1180 ElseIf (IO1H || IO1L || IO2H || IO2L) 1181 { 1182 #ifdef W83627HF_KBC_COMPAT 1183 Local0 = 0x0F 1184 #else 1185 Local0 = 0x0D 1186 #endif 1187 } 1188 EXIT_CONFIG_MODE () 1189 Return (Local0) 1190 } 1191 1192 Method (_DIS) 1193 { 1194 ENTER_CONFIG_MODE (5) 1195 IRQ1 = 0 1196 EXIT_CONFIG_MODE () 1197 } 1198 1199 Method (_CRS, 0, Serialized) 1200 { 1201 Name (CRS, ResourceTemplate () { 1202 IRQNoFlags (IRQX) {} 1203 }) 1204 ENTER_CONFIG_MODE (5) 1205 Local4 = IRQ1 1206 EXIT_CONFIG_MODE () 1207 1208 CreateWordField (CRS, IRQX._INT, IRQW) 1209 Local5 = 1 1210 IRQW = Local5 << Local4 1211 1212 Return (CRS) 1213 } 1214 1215 Name (_PRS, ResourceTemplate () 1216 { 1217 StartDependentFn (0,0) { 1218 IRQNoFlags () {12} 1219 } 1220 StartDependentFn (2,0) { 1221 IRQNoFlags () {1,3,4,5,6,7,9,10,11} 1222 } 1223 EndDependentFn() 1224 }) 1225 1226 Method (_SRS, 1, Serialized) 1227 { 1228 Name (TMPL, ResourceTemplate () { 1229 IRQNoFlags (IRQX) {} 1230 }) 1231 CreateWordField (Arg0, IRQX._INT, IRQL) 1232 1233 Local0 = FindSetLeftBit (IRQL) - 1 1234 1235 ENTER_CONFIG_MODE (5) 1236 IRQ1 = Local0 1237 /* Only activates if KBD is active */ 1238 EXIT_CONFIG_MODE () 1239 } 1240 } 1241 #endif 1242 #endif 1243 1244 #ifndef NO_W83627HF_GAME 1245 /* ========================== Game Port ========================== */ 1246 Device (GAME) 1247 { 1248 Name (_HID, EisaId ("PNPB02F")) 1249 Name (_STR, Unicode ("Joystick/Game Port")) 1250 Name (_UID, "w83627hf-game") 1251 1252 Method (_STA) { 1253 Local0 = 0 1254 ENTER_CONFIG_MODE (7) 1255 If (IO1L || IO1H) { 1256 If (ACTR || ACT1) { 1257 Local0 = 0x0F 1258 } 1259 Else { 1260 Local0 = 0x0D 1261 } 1262 } 1263 EXIT_CONFIG_MODE () 1264 Return (Local0) 1265 } 1266 1267 Method (_CRS) 1268 { 1269 Name (CRS, ResourceTemplate () { 1270 IO (Decode16, 0x0000, 0x0000, 0x01, 0x01, IO0) 1271 IRQNoFlags (IRQX) {} 1272 }) 1273 ENTER_CONFIG_MODE (7) 1274 Local0 = IO1L 1275 Local1 = IO1H 1276 Local2 = IRQ0 1277 EXIT_CONFIG_MODE () 1278 1279 Local0 |= Local1 << 8 1280 1281 CreateWordField (CRS, IO0._MIN, IMIN) 1282 CreateWordField (CRS, IO0._MAX, IMAX) 1283 IMIN = Local0 1284 IMAX = Local0 1285 1286 If (Local2) { 1287 CreateWordField (CRS, IRQX._INT, IRQW) 1288 Local3 = 1 1289 IRQW = Local3 << Local2 1290 } 1291 1292 Return (CRS) 1293 } 1294 1295 } 1296 #endif 1297 1298 #ifndef NO_W83627HF_MIDI 1299 /* ========================== MIDI Port ========================== */ 1300 Device (MIDI) 1301 { 1302 Name (_HID, EisaId ("PNPB006")) 1303 Name (_STR, Unicode ("MPU-401 Compatible MIDI Port")) 1304 Name (_UID, "w83627hf-midi") 1305 1306 Method (_STA) 1307 { 1308 Local0 = 0 1309 ENTER_CONFIG_MODE (7) 1310 If (IO2L || IO2H) { 1311 If (ACTR || ACT2) { 1312 Local0 = 0x0F 1313 } 1314 Else { 1315 Local0 = 0x0D 1316 } 1317 } 1318 EXIT_CONFIG_MODE () 1319 Return (Local0) 1320 } 1321 1322 Method (_CRS) 1323 { 1324 Name (CRS, ResourceTemplate () { 1325 IO (Decode16, 0x0000, 0x0000, 0x02, 0x02, IO0) 1326 IRQNoFlags (IRQX) {} 1327 }) 1328 ENTER_CONFIG_MODE (7) 1329 Local0 = IO2L 1330 Local1 = IO2H 1331 Local2 = IRQ1 1332 EXIT_CONFIG_MODE () 1333 1334 Local0 |= Local1 << 8 1335 1336 CreateWordField (CRS, IO0._MIN, IMIN) 1337 CreateWordField (CRS, IO0._MAX, IMAX) 1338 IMIN = Local0 1339 IMAX = Local0 1340 1341 If (Local2) { 1342 CreateWordField (CRS, IRQX._INT, IRQW) 1343 Local3 = 1 1344 IRQW = Local3 << Local2 1345 } 1346 1347 Return (CRS) 1348 } 1349 1350 } 1351 #endif 1352 1353 /* ==== Suspend LED control if it is connected to the SuperIO ==== */ 1354 Method (SLED, 1) 1355 { 1356 ENTER_CONFIG_MODE (9) 1357 Local0 = OPT4 1358 Local0 &= 63 1359 OPT4 = Local0 | ((Arg0 & 3) << 6) 1360 EXIT_CONFIG_MODE () 1361 } 1362 1363 /* ===== Power LED control if it is connected to the SuperIO ===== */ 1364 Method (PLED, 1) 1365 { 1366 ENTER_CONFIG_MODE (8) 1367 Local0 = OPT4 1368 Local0 &= 63 1369 OPT4 = Local0 | ((Arg0 & 3) << 6) 1370 EXIT_CONFIG_MODE () 1371 } 1372 1373 #ifndef NO_W83627HF_HWMON 1374 /* ====================== Hardware Monitor ======================= */ 1375 Device (HMON) 1376 { 1377 Name (_HID, EisaId ("PNP0C02")) // TODO: find better matching ID 1378 Name (_STR, Unicode("W83627 Hardware Monitor")) 1379 Name (_UID, "w83627hf-hwmon") 1380 1381 Method (_STA) 1382 { 1383 Local0 = 0x00 1384 ENTER_CONFIG_MODE (11) 1385 If (ACTR) { 1386 Local0 = 0x0F 1387 } 1388 ElseIf (IO1H || IO1L) 1389 { 1390 Local0 = 0x0D 1391 } 1392 EXIT_CONFIG_MODE () 1393 Return (Local0) 1394 } 1395 1396 Method (_PSC) 1397 { 1398 Local0 = ^^_PSC () 1399 If (Local0) { Return (Local0) } 1400 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 1401 Local0 = HWPW 1402 EXIT_CONFIG_MODE () 1403 If (Local0) { Return (3) } 1404 Else { Return (0) } 1405 } 1406 1407 Method (_PS0) 1408 { 1409 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 1410 HWPW = 1 1411 EXIT_CONFIG_MODE () 1412 } 1413 1414 Method (_PS3) 1415 { 1416 ENTER_CONFIG_MODE (PNP_NO_LDN_CHANGE) 1417 HWPW = 0 1418 EXIT_CONFIG_MODE () 1419 } 1420 1421 Method (_CRS, 0, Serialized) 1422 { 1423 Name (CRS, ResourceTemplate () { 1424 IO (Decode16, 0x0000, 0x0000, 0x08, 0x02, IO0) 1425 IRQNoFlags (IRQX) {} 1426 }) 1427 ENTER_CONFIG_MODE (11) 1428 Local0 = IO1L 1429 Local1 = IO1H 1430 Local2 = IRQ1 1431 EXIT_CONFIG_MODE () 1432 1433 Local0 |= Local1 << 8 1434 1435 CreateWordField (CRS, IO0._MIN, IMIN) 1436 CreateWordField (CRS, IO0._MAX, IMAX) 1437 IMIN = Local0 1438 IMAX = Local0 1439 1440 If (Local2) { 1441 CreateWordField (CRS, IRQX._INT, IRQW) 1442 Local3 = 1 1443 IRQW = Local3 << Local2 1444 } 1445 Return (CRS) 1446 } 1447 } 1448 #endif 1449 1450 /* Returns the wake source register. 1451 It is cleared after reading. 1452 Bit 0: Keyboard wake-up event 1453 Bit 1: Mouse wake-up event 1454 Bit 2: Power button event 1455 Bit 3: CIR wake-up event 1456 Bit 4: Power loss event 1457 Bit 5: VSB power loss status 1458 */ 1459 Method (WAKS) 1460 { 1461 ENTER_CONFIG_MODE (10) 1462 Local0 = CRE3 1463 EXIT_CONFIG_MODE () 1464 Return (Local0) 1465 } 1466} 1467