[coreboot-gerrit] Patch set updated for coreboot: 55ab680 Winbond W83627HF: Rename and move ASL snippet to `acpi/superio.asl`
Paul Menzel (paulepanter@users.sourceforge.net)
gerrit at coreboot.org
Thu Mar 28 23:29:14 CET 2013
Paul Menzel (paulepanter at users.sourceforge.net) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2937
-gerrit
commit 55ab68072c6949e828cb60445952e0c470305620
Author: Paul Menzel <paulepanter at users.sourceforge.net>
Date: Thu Mar 28 13:46:16 2013 +0100
Winbond W83627HF: Rename and move ASL snippet to `acpi/superio.asl`
Put the ASL snippet for inclusion in the DSDT under the `acpi/`
folder as it is done for the other Super I/O devices.
$ find src/superio/ -name *asl
src/superio/ite/it8772f/acpi/superio.asl
src/superio/smsc/mec1308/acpi/superio.asl
src/superio/smsc/sio1007/acpi/superio.asl
src/superio/winbond/w83627hf/devtree.asl
As there are no users of this file yet, no other adaptations need
to be made.
Change-Id: Id10cd8897592b780c9fd3bd6b45ada4cf1fcf33e
Signed-off-by: Paul Menzel <paulepanter at users.sourceforge.net>
---
src/superio/winbond/w83627hf/acpi/superio.asl | 1473 +++++++++++++++++++++++++
src/superio/winbond/w83627hf/devtree.asl | 1473 -------------------------
2 files changed, 1473 insertions(+), 1473 deletions(-)
diff --git a/src/superio/winbond/w83627hf/acpi/superio.asl b/src/superio/winbond/w83627hf/acpi/superio.asl
new file mode 100644
index 0000000..69017fe
--- /dev/null
+++ b/src/superio/winbond/w83627hf/acpi/superio.asl
@@ -0,0 +1,1473 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2011 Christoph Grenz <christophg+cb at grenz-bonn.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/*
+ * include this file into a mainboard's DSDT _SB device tree and it will expose the
+ * W83627HF SuperIO and its functionality.
+ *
+ * Devices are marked as nonexistant if they got 0x00000000 as I/O base address
+ * (compatibility with legacy bios, which disables logical devices that way)
+ *
+ * It allows the change of IO ports, IRQs and DMA settings on most logical
+ * devices, disabling and reenabling logical devices and controlling power
+ * saving mode on logical devices or the whole chip.
+ *
+ * Notes:
+ * - ECP mode of parallel port not implemented, DMA settings of parallel port
+ * will be reset on DSDT init
+ * - Hardware monitor is only shown as "Motherboard Resource", shows no real
+ * functionality
+ *
+ * Controllable through preprocessor macros:
+ * NO_W83627HF_FDC: don't expose the floppy disk controller
+ * NO_W83627HF_FDC_ENUM: don't try to enumerate the connected floppy drives
+ * NO_W83627HF_PPORT: don't expose the parallel port
+ * NO_W83627HF_UARTA: don't expose the first serial port
+ * NO_W83627HF_UARTB: don't expose the second serial port (already hidden
+ * if UARTB is configured as IRDA port by firmware)
+ * NO_W83627HF_IRDA: don't expose the IRDA port (already hidden if UARTB is
+ * configured as serial port by firmware)
+ * NO_W83627HF_CIR: don't expose the Consumer Infrared functionality
+ * NO_W83627HF_KBC: don't expose the keyboard controller
+ * NO_W83627HF_PS2M: don't expose the PS/2 mouse functionality of the
+ * keyboard controller
+ * NO_W83627HF_GAME: don't expose the game port
+ * NO_W83627HF_MIDI: don't expose the MIDI port
+ * NO_W83627HF_HWMON: don't expose the hardware monitor as
+ * PnP "Motherboard Ressource"
+ * W83627HF_KBC_COMPAT: show the keyboard controller and the PS/2 mouse as
+ * enabled if it is disabled but an address is assigned
+ * to it. This may be neccessary in some cases.
+ *
+ * Datasheet: "W83627HF/F WINBOND I/O" rev. 6.0
+ * http://www.itox.com/pages/support/wdt/W83627HF.pdf
+ */
+
+Device(SIO) {
+ Name (_HID, EisaId("PNP0A05"))
+ Name (_STR, Unicode("Winbond W83627HF SuperIO"))
+ Name (_UID, "w83627hf")
+
+ /* Mutex for accesses to the configuration ports (prolog and epilog commands are used, so synchronization is useful) */
+ Mutex(CRMX, 1)
+
+ /* SuperIO configuration ports */
+ OperationRegion (CREG, SystemIO, 0x2E, 0x02)
+ Field (CREG, ByteAcc, NoLock, Preserve)
+ {
+ ADDR, 8,
+ DATA, 8
+ }
+ IndexField (ADDR, DATA, ByteAcc, NoLock, Preserve)
+ {
+ Offset (0x02),
+ RST, 1, /* Soft reset */
+ , 7,
+ Offset (0x07),
+ LDN, 8, /* Logical device selector */
+ Offset (0x20),
+ DID, 8, /* Device ID */
+ DREV, 8, /* Device Revision */
+ FDPW, 1, /* FDC Power Down */
+ , 2,
+ PRPW, 1, /* PRT Power Down */
+ UAPW, 1, /* UART A Power Down */
+ UBPW, 1, /* UART B Power Down */
+ HWPW, 1, /* HWM Power Down */
+ , 1,
+ IPD, 1, /* Immediate Chip Power Down */
+ , 7,
+ PNPS, 1, /* PnP Address Select Register Default Value Mode */
+ , 1,
+ KBCR, 1, /* KBC enabled after system reset (read-only) */
+ , 3,
+ CLKS, 1, /* Clock select */
+ AQ16, 1, /* 16bit Address Qualification */
+ FDCT, 1, /* Tristate FDC (?) */
+ , 2,
+ PRTT, 1, /* Tristate parallel port (?) */
+ URAT, 1, /* Tristate UART A (?) */
+ URBT, 1, /* Tristate UART B (?) */
+ , 2,
+ URAI, 1, /* UART A Legacy IRQ Select Disable */
+ URBI, 1, /* UART B Legacy IRQ Select Disable */
+ PRTI, 1, /* Parallel Port Legacy IRQ/DRQ Select Disable */
+ FDCI, 1, /* FDC Legacy IRQ/DRQ Select Disable */
+ , 1,
+ LCKC, 1, /* Lock Configuration Registers */
+ Offset (0x29),
+ IO3S, 8, /* GPIO3 pin selection register */
+ ACTR, 1, /* Logical device activation */
+ ACT1, 1, /* Logical part activation 1 (mostly unused) */
+ ACT2, 1, /* Logical part activation 2 (mostly unused) */
+ , 5,
+ Offset (0x60),
+ IO1H, 8, /* First I/O port base - high byte */
+ IO1L, 8, /* First I/O port base - low byte */
+ IO2H, 8, /* Second I/O port base - high byte */
+ IO2L, 8, /* Second I/O port base - low byte */
+ Offset (0x70),
+ IRQ0, 8, /* First IRQ */
+ Offset (0x72),
+ IRQ1, 8, /* First IRQ */
+ Offset (0x74),
+ DMA0, 8, /* DMA */
+ Offset (0xE0),
+ /* CRE0-CRE4: function logical device dependant, seems to be reserved for ACPI settings */
+ CRE0, 8,
+ CRE1, 8,
+ CRE2, 8,
+ CRE3, 8,
+ CRE4, 8,
+ Offset (0xF0),
+ /* OPT1-OPTA aka CRF0-CRF9: function logical device dependant */
+ OPT1, 8,
+ OPT2, 8,
+ OPT3, 8,
+ OPT4, 8,
+ OPT5, 8,
+ OPT6, 8,
+ OPT7, 8,
+ OPT8, 8,
+ OPT9, 8,
+ OPTA, 8
+ }
+
+ Method (_CRS)
+ {
+ Return (ResourceTemplate () {
+ IO (Decode16, 0x002E, 0x002E, 0x02, 0x01) /* Announce the used I/O ports to the OS */
+ IO (Decode16, 0x004E, 0x004E, 0x01, 0x01) /* this port is used in some configurations, so announce it to be sure */
+ })
+ }
+
+ /* Enter configuration mode (and aquire mutex)
+ Method must be run before accesssing the configuration region.
+ Parameter is the LDN which should be accessed. Values >= 0xFF mean
+ no LDN switch should be done.
+ */
+ Method (ENCM, 1)
+ {
+ Acquire (CRMX, 0xFFFF)
+ Store (0x87, ADDR)
+ Store (0x87, ADDR)
+ If (LLess(Arg0, 0xFF)) {
+ Store(Arg0, LDN)
+ }
+ }
+
+ /* Exit configuration mode (and release mutex)
+ Method must be run after accessing the configuration region.
+ */
+ Method (EXCM)
+ {
+ Store (0xAA, ADDR)
+ Release (CRMX)
+ }
+
+ /* PM: indicate IPD (Immediate Power Down) bit state as D0/D2 */
+ Method (_PSC) {
+ ENCM (0xFF)
+ Store (IPD, Local0)
+ EXCM ()
+ If (Local0) { Return (2) }
+ Else { Return (0) }
+ }
+
+ /* PM: Switch to D0 by setting IPD low */
+ Method (_PS0) {
+ ENCM (0xFF)
+ Store (Zero, IPD)
+ EXCM ()
+ }
+
+ /* PM: Switch to D2 by setting IPD high */
+ Method (_PS2) {
+ ENCM (0xFF)
+ Store (One, IPD)
+ EXCM ()
+ }
+
+ #ifndef NO_W83627HF_FDC
+ /* =================== Floppy Disk Controller ================ */
+ Device (FDC0) {
+ Name (_HID, EisaId ("PNP0700"))
+ Name (_STR, Unicode ("W83627HF Floppy Disk Controller"))
+ Name (_UID, "w83627hf-fdc")
+
+ #ifndef NO_W83627HF_FDC_ENUM
+ /* Initialization method: Should be run once on boot
+ If FDC is active, enumerate all connected devices */
+ Method (_INI) {
+ ENCM (0)
+ Store (ACTR, Local0)
+ Store (IO1H, Local1)
+ Store (IO1L, Local2)
+ EXCM ()
+ ShiftLeft(Local1, 8, Local1)
+ Or(Local1, Local2, Local1)
+ If (Local0) {
+ /* Try probing drives and save result in _FDE */
+ PROB(Local1)
+ }
+ }
+ #endif
+
+ Method (_STA)
+ {
+ Store (0x00, Local0)
+ ENCM (0)
+ If (ACTR) {
+ Store (0x0F, Local0)
+ }
+ ElseIf (LOr (IO1H, IO1L))
+ {
+ Store (0x0D, Local0)
+ }
+ EXCM ()
+ Return (Local0)
+ }
+
+ /* Current power state (Returns 1 if LDN in power saving mode,
+ * 2 if whole chip is powered down), 0 else
+ */
+ Method (_PSC) {
+ Store(^^_PSC (), Local0)
+ If (Local0) { Return (Local0) }
+ ENCM (0xFF)
+ Store (FDPW, Local0)
+ EXCM ()
+ If (Local0) { Return (1) }
+ Else { Return (0) }
+ }
+ /* Disable power saving mode */
+ Method (_PS0) {
+ ENCM (0xFF)
+ Store (Zero, FDPW)
+ EXCM ()
+ }
+ /* Enable power saving mode */
+ Method (_PS1) {
+ ENCM (0xFF)
+ Store (One, FDPW)
+ EXCM ()
+ }
+
+ Method (_DIS)
+ {
+ ENCM (0)
+ Store (Zero, ACTR)
+ EXCM ()
+ }
+
+ Method (_CRS)
+ {
+ Name (CRS, ResourceTemplate () {
+ IO (Decode16, 0x0000, 0x0000, 0x01, 0x07, IO0)
+ IRQNoFlags () {6}
+ DMA (Compatibility, NotBusMaster, Transfer8) {2}
+ })
+
+ /* Get IO port info */
+ ENCM (0)
+ Store(IO1L, Local0)
+ Store(IO1H, Local1)
+ EXCM ()
+
+ /* Calculate full IO port address */
+ Or(ShiftLeft(Local1, 8), Local0, Local0)
+
+ /* Modify the resource template and return it */
+ CreateWordField (CRS, IO0._MIN, IMIN)
+ CreateWordField (CRS, IO0._MAX, IMAX)
+ Store (Local0, IMIN)
+ Store (Local0, IMAX)
+ Return (CRS)
+ }
+
+ Method (_PRS)
+ {
+ Return (ResourceTemplate ()
+ {
+ StartDependentFnNoPri ()
+ {
+ IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x07)
+ IRQNoFlags () {6}
+ DMA (Compatibility, NotBusMaster, Transfer8) {2}
+ }
+ EndDependentFn ()
+ })
+ }
+
+ #ifndef NO_W83627HF_FDC_ENUM
+ Name(_FDE, Buffer(){0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
+ #endif
+
+ Method (PROB, 1) {
+ #ifndef NO_W83627HF_FDC_ENUM
+ /* Try probing drives and save result in _FDE
+ Probing is done through selecting and activating a drive
+ and reading 0x03F7 aka the "shared IDE and floppy register"
+ as any value there besides zero seems to indicate a
+ connected drive.
+ */
+ OperationRegion (FIO1, SystemIO, Arg0, 0x06)
+ Field (FIO1, ByteAcc, NoLock, Preserve)
+ {
+ Offset(0x02),
+ SELE, 2,
+ RSTL, 1,
+ IDMA, 1,
+ ACT1, 1,
+ ACT2, 1,
+ ACT3, 1,
+ ACT4, 1,
+ Offset(0x04),
+ BSY1, 1,
+ BSY2, 1,
+ BSY3, 1,
+ BSY4, 1,
+ BUSY, 1,
+ NDMA, 1,
+ IODI, 1,
+ RDY, 1,
+ DATA, 8,
+ }
+ OperationRegion (FIO2, SystemIO, 0x3F7, 0x01)
+
+ CreateByteField (_FDE, 3, FD1)
+ CreateByteField (_FDE, 7, FD2)
+ CreateByteField (_FDE, 11, FD3)
+ CreateByteField (_FDE, 15, FD4)
+
+ Store(One, ACT1)
+ Store(0, SELE)
+ Sleep(0x64)
+ If (FIO2) { Store (One, FD1) }
+
+ Store(Zero, ACT1)
+ Store(One, ACT2)
+ Store(1, SELE)
+ Sleep(0x64)
+ If (FIO2) { Store (One, FD2) }
+
+ Store(Zero, ACT2)
+ Store(One, ACT3)
+ Store(2, SELE)
+ Sleep(0x64)
+ If (FIO2) { Store (One, FD3) }
+
+ Store(Zero, ACT3)
+ Store(One, ACT4)
+ Store(3, SELE)
+ Sleep(0x64)
+ If (FIO2) { Store (One, FD4) }
+ Store(Zero, ACT4)
+ Store(Zero, SELE)
+ #endif
+ }
+
+
+ Method (_SRS, 1, Serialized)
+ {
+ Name (TMPL, ResourceTemplate () {
+ IO (Decode16, 0, 0, 1, 7, IO0)
+ IRQNoFlags (IRQ0) {}
+ DMA (Compatibility, NotBusMaster, Transfer8, DMA0) {}
+ })
+ CreateWordField (Arg0, IO0._MIN, IOA0)
+ CreateByteField (Arg0, IRQ0._INT, IRQL)
+ CreateByteField (Arg0, DMA0._DMA, DMCH)
+
+ Divide(IOA0, 256, Local0, Local1)
+
+ ENCM (0)
+ Store (Local0, IO1L)
+ Store (Local1, IO1H)
+ Store (One, ACTR)
+ EXCM ()
+
+ /* Try probing drives and save result in _FDE */
+ PROB(IOA0)
+ }
+ }
+ #endif
+
+ #ifndef NO_W83627HF_PPORT
+ /* ======================== Parallel Port ======================== */
+ /* Currently no ECP support */
+ Device (PAR0) {
+ Name (_HID, EisaId ("PNP0400"))
+ Name (_DDN, "LPT1")
+ Name (_UID, "w83627hf-pport")
+
+ Method (MODE, 1) {
+ And(Arg0, 0x07, Local0)
+ ENCM (1)
+ And(OPT1, 0x3, Local1)
+ Or(Local1, Local0, OPT1)
+ EXCM()
+ }
+
+ Method (_INI)
+ {
+ /* Deactivate DMA, even if set by BIOS. We don't announce it
+ through _CRS and it's only useful in ECP mode which we
+ don't support at the moment. */
+ ENCM (1)
+ Store (0x04, DMA0)
+ EXCM ()
+ }
+
+ Method (_STA)
+ {
+ Store (0x00, Local0)
+ ENCM (1)
+ And(OPT1, 0x3, Local1)
+ If (ACTR) {
+ If (LNotEqual(Local1, 2)) {
+ Store (0x0D, Local0)
+ } Else {
+ Store (0x0D, Local0)
+ }
+ }
+ ElseIf (LOr (IO1H, IO1L))
+ {
+ Store (0x0D, Local0)
+ }
+ EXCM ()
+ Return (Local0)
+ }
+
+ Method (_PSC) {
+ Store(^^_PSC (), Local0)
+ If (Local0) { Return (Local0) }
+ ENCM (0xFF)
+ Store (PRPW, Local0)
+ EXCM ()
+ If (Local0) { Return (1) }
+ Else { Return (0) }
+ }
+ Method (_PS0) {
+ ENCM (0xFF)
+ Store (Zero, PRPW)
+ EXCM ()
+ }
+ Method (_PS1) {
+ ENCM (0xFF)
+ Store (One, PRPW)
+ EXCM ()
+ }
+
+ Method (_DIS) {
+ ENCM (1)
+ Store (Zero, ACTR)
+ EXCM ()
+ }
+
+ Method (_CRS)
+ {
+ Name (CRS, ResourceTemplate ()
+ {
+ IO (Decode16, 0x0000, 0x0000, 0x04, 0x08, IO0)
+ IRQNoFlags (IRQX) {}
+ })
+ CreateWordField (CRS, IO0._MIN, IOP0)
+ CreateWordField (CRS, IO0._MAX, IOR0)
+ CreateByteField (CRS, IO0._ALN, IOAL)
+ CreateByteField (CRS, IO0._LEN, IOLE)
+ CreateWordField (CRS, IRQX._INT, IRQW)
+
+ /* Get device settings */
+ ENCM (1)
+ Store (IO1L, Local0)
+ Store (IO1H, Local1)
+ Store (OPT1, Local2)
+ Store (IRQ0, Local5)
+ EXCM ()
+ /* Calculate IO port and modify template */
+ Or(ShiftLeft(Local1, 8), Local0, Local0)
+ Store(Local1, IOP0)
+ Store(Local1, IOR0)
+
+ /* Set align and length based on active parallel port mode */
+ And(Local2, 0x3, Local3)
+ And(Local2, 0x4, Local4)
+ If (Local4) {
+ Store(0x04, IOAL)
+ }
+ If (LEqual (Local0, 0xBC))
+ {
+ Store (0x04, IOLE)
+ }
+ Else
+ {
+ Store (0x08, IOLE)
+ }
+ /* Calculate IRQ bitmap */
+ Store (One, Local0)
+ ShiftLeft (Local0, Local5, IRQW)
+ /* Return resource template */
+ Return (CRS)
+ }
+
+ Name (_PRS, ResourceTemplate ()
+ {
+ StartDependentFn (0,1)
+ {
+ IO (Decode16, 0x0378, 0x0378, 0x04, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (0,1)
+ {
+ IO (Decode16, 0x0278, 0x0278, 0x04, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (0,1)
+ {
+ IO (Decode16, 0x03BC, 0x03BC, 0x04, 0x04)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (0,0)
+ {
+ IO (Decode16, 0x0378, 0x0378, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (0,0)
+ {
+ IO (Decode16, 0x0278, 0x0278, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (2,0)
+ {
+ IO (Decode16, 0x0100, 0x0FFC, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (2,1)
+ {
+ IO (Decode16, 0x0100, 0x0FFC, 0x04, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ EndDependentFn ()
+ })
+
+ Method (_SRS, 1, Serialized)
+ {
+ Name (TMPL, ResourceTemplate () {
+ IO (Decode16, 0, 0, 4, 4, IO0)
+ IRQNoFlags (IRQX) {}
+ })
+ CreateWordField (Arg0, IO0._MIN, IOA0)
+ CreateWordField (Arg0, IO0._MIN, IOA1)
+ CreateByteField (Arg0, IO0._ALN, IOAL)
+ CreateByteField (Arg0, IO0._LEN, IOLE)
+ CreateWordField (Arg0, IRQX._INT, IRQL)
+
+ If (LEqual(IOAL, 4)) {
+ Store(0x0, Local2)
+ } else {
+ Store(0x1, Local2)
+ }
+
+ Divide(IOA0, 256, Local0, Local1)
+
+ ENCM (1)
+ /* IO port */
+ Store (Local0, IO1L)
+ Store (Local1, IO1H)
+ /* Mode */
+ Store (OPT1, Local3)
+ And (Local3, 0xF8, Local3)
+ Or (Local2, Local3, OPT1)
+ /* DMA off */
+ Store (0x04, DMA0)
+ /* IRQ */
+ Subtract(FindSetLeftBit (IRQL), 1, IRQ0)
+ /* Activate */
+ Store (One, ACTR)
+ EXCM ()
+ }
+ }
+ #endif
+
+ #ifndef NO_W83627HF_UARTA
+ /* =========================== UART A ============================ */
+ Device (SER0) {
+ Name (_HID, EisaId ("PNP0501"))
+ Name (_UID, "w83627hf-uarta")
+ Name (_DDN, "COM1")
+
+ Method (_STA)
+ {
+ Store (0x00, Local0)
+ ENCM (2)
+ If (ACTR) {
+ Store (0x0F, Local0)
+ }
+ ElseIf (LOr (IO1H, IO1L))
+ {
+ Store (0x0D, Local0)
+ }
+ EXCM ()
+ Return (Local0)
+ }
+
+ Method (_PSC) {
+ Store(^^_PSC (), Local0)
+ If (Local0) { Return (Local0) }
+ ENCM (0xFF)
+ Store (UAPW, Local0)
+ EXCM ()
+ If (Local0) { Return (1) }
+ Else { Return (0) }
+ }
+ Method (_PS0) {
+ ENCM (0xFF)
+ Store (Zero, UAPW)
+ EXCM ()
+ }
+ Method (_PS1) {
+ ENCM (0xFF)
+ Store (One, UAPW)
+ EXCM ()
+ }
+
+ Method (_DIS)
+ {
+ ENCM (2)
+ Store (Zero, ACTR)
+ EXCM ()
+ }
+
+ Method (_CRS)
+ {
+ Name (CRS, ResourceTemplate () {
+ IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0)
+ IRQNoFlags (IRQX) {6}
+ })
+ ENCM (2)
+ Store(IO1L, Local0)
+ Store(IO1H, Local1)
+ Store(IRQ0, Local2)
+ EXCM ()
+ Or(ShiftLeft(Local1, 8), Local0, Local0)
+
+ CreateWordField (CRS, IO0._MIN, IMIN)
+ Store (Local0, IMIN)
+ CreateWordField (CRS, IO0._MAX, IMAX)
+ Store (Local0, IMAX)
+
+ CreateWordField (CRS, IRQX._INT, IRQW)
+ Store (One, Local3)
+ ShiftLeft (Local3, Local2, IRQW)
+
+ Return (CRS)
+ }
+
+ Name (_PRS, ResourceTemplate ()
+ {
+ StartDependentFn (0,0) {
+ IO (Decode16, 0x03F8, 0x03F8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (0,0) {
+ IO (Decode16, 0x02F8, 0x02F8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (1,0) {
+ IO (Decode16, 0x03E8, 0x03E8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (1,0) {
+ IO (Decode16, 0x02E8, 0x02E8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (2,0) {
+ IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ EndDependentFn()
+ })
+
+ Method (_SRS, 1, Serialized)
+ {
+ Name (TMPL, ResourceTemplate () {
+ IO (Decode16, 0, 0, 1, 6, IO0)
+ IRQNoFlags (IRQX) {}
+ })
+ CreateWordField (Arg0, IO0._MIN, IOA0)
+ CreateByteField (Arg0, IRQX._INT, IRQL)
+
+ Divide(IOA0, 256, Local0, Local1)
+
+ Subtract(FindSetLeftBit (IRQL), 1, Local3)
+
+ ENCM (2)
+ Store (Local0, IO1L)
+ Store (Local1, IO1H)
+ Store (Local3, IRQ0)
+ Store (One, ACTR)
+ EXCM ()
+ }
+ }
+ #endif
+
+ #ifndef NO_W83627HF_UARTB
+ /* =========================== UART B ============================ */
+ Device (SER1) {
+ Name (_HID, EisaId ("PNP0501"))
+ Name (_UID, "w83627hf-uartb")
+ Name (_DDN, "COM2")
+
+ Method (_STA)
+ {
+ Store (0x00, Local0)
+ ENCM (3)
+ If (LNot(And(OPT2, 0x30)))
+ {
+ If (ACTR) {
+ Store (0x0F, Local0)
+ }
+ ElseIf (LOr (IO1H, IO1L))
+ {
+ Store (0x0D, Local0)
+ }
+ }
+ EXCM ()
+ Return (Local0)
+ }
+
+ Method (_PSC) {
+ Store(^^_PSC (), Local0)
+ If (Local0) { Return (Local0) }
+ ENCM (0xFF)
+ Store (UBPW, Local0)
+ EXCM ()
+ If (Local0) { Return (1) }
+ Else { Return (0) }
+ }
+ Method (_PS0) {
+ ENCM (0xFF)
+ Store (Zero, UBPW)
+ EXCM ()
+ }
+ Method (_PS1) {
+ ENCM (0xFF)
+ Store (One, UBPW)
+ EXCM ()
+ }
+
+ Method (_DIS)
+ {
+ ENCM (3)
+ Store (Zero, ACTR)
+ EXCM ()
+ }
+
+ Method (_CRS)
+ {
+ Name (CRS, ResourceTemplate () {
+ IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0)
+ IRQNoFlags (IRQX) {6}
+ })
+ ENCM (3)
+ Store(IO1L, Local0)
+ Store(IO1H, Local1)
+ Store(IRQ0, Local2)
+ EXCM ()
+ Or(ShiftLeft(Local1, 8), Local0, Local0)
+
+ CreateWordField (CRS, IO0._MIN, IMIN)
+ Store (Local0, IMIN)
+ CreateWordField (CRS, IO0._MAX, IMAX)
+ Store (Local0, IMAX)
+
+ CreateWordField (CRS, IRQX._INT, IRQW)
+ Store (One, Local3)
+ ShiftLeft (Local3, Local2, IRQW)
+
+ Return (CRS)
+ }
+
+ Name (_PRS, ResourceTemplate ()
+ {
+ StartDependentFn (0,0) {
+ IO (Decode16, 0x02F8, 0x02F8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (0,0) {
+ IO (Decode16, 0x03F8, 0x03F8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (1,0) {
+ IO (Decode16, 0x03E8, 0x03E8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (1,0) {
+ IO (Decode16, 0x02E8, 0x02E8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (2,0) {
+ IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ EndDependentFn()
+ })
+
+ Method (_SRS, 1, Serialized)
+ {
+ Name (TMPL, ResourceTemplate () {
+ IO (Decode16, 0, 0, 1, 8, IO0)
+ IRQNoFlags (IRQX) {}
+ })
+ CreateWordField (Arg0, IO0._MIN, IOA0)
+ CreateByteField (Arg0, IRQX._INT, IRQL)
+
+ Divide(IOA0, 256, Local0, Local1)
+
+ Subtract(FindSetLeftBit (IRQL), 1, Local3)
+
+ ENCM (3)
+ Store (Local0, IO1L)
+ Store (Local1, IO1H)
+ Store (Local3, IRQ0)
+ Store (One, ACTR)
+ EXCM ()
+ }
+ }
+ #endif
+
+ #ifndef NO_W83627HF_IRDA
+ /* ======================== UART B (IRDA) ======================== */
+ Device (IRDA) {
+ Name (_HID, EisaId ("PNP0510"))
+ Name (_UID, "w83627hf-irda")
+ Name (_STR, Unicode("IrDA Port"))
+
+ Method (_STA)
+ {
+ Store (0x00, Local0)
+ ENCM (3)
+ If (And(OPT2, 0x30))
+ {
+ If (ACTR) {
+ Store (0x0F, Local0)
+ }
+ ElseIf (LOr (IO1H, IO1L))
+ {
+ Store (0x0D, Local0)
+ }
+ }
+ EXCM ()
+ Return (Local0)
+ }
+
+ Method (_PSC) {
+ Store(^^_PSC (), Local0)
+ If (Local0) { Return (Local0) }
+ ENCM (0xFF)
+ Store (UBPW, Local0)
+ EXCM ()
+ If (Local0) { Return (1) }
+ Else { Return (0) }
+ }
+ Method (_PS0) {
+ ENCM (0xFF)
+ Store (Zero, UBPW)
+ EXCM ()
+ }
+ Method (_PS1) {
+ ENCM (0xFF)
+ Store (One, UBPW)
+ EXCM ()
+ }
+
+ Method (_DIS)
+ {
+ ENCM (3)
+ Store (Zero, ACTR)
+ EXCM ()
+ }
+
+ Method (_CRS)
+ {
+ Name (CRS, ResourceTemplate () {
+ IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0)
+ IRQNoFlags (IRQX) {6}
+ })
+ ENCM (3)
+ Store(IO1H, Local1)
+ Store(IO1L, Local0)
+ Store(IRQ0, Local2)
+ EXCM ()
+ Or(ShiftLeft(Local1, 8), Local0, Local0)
+
+ CreateWordField (CRS, IO0._MIN, IMIN)
+ Store (Local0, IMIN)
+ CreateWordField (CRS, IO0._MAX, IMAX)
+ Store (Local0, IMAX)
+
+ CreateWordField (CRS, IRQX._INT, IRQW)
+ Store (One, Local3)
+ ShiftLeft (Local3, Local2, IRQW)
+
+ Return (CRS)
+ }
+
+ Name (_PRS, ResourceTemplate ()
+ {
+ StartDependentFn (0,0) {
+ IO (Decode16, 0x02F8, 0x02F8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (1,0) {
+ IO (Decode16, 0x03F8, 0x03F8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (0,0) {
+ IO (Decode16, 0x03E8, 0x03E8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (0,0) {
+ IO (Decode16, 0x02E8, 0x02E8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ StartDependentFn (2,0) {
+ IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ EndDependentFn()
+ })
+
+ Method (_SRS, 1, Serialized)
+ {
+ Name (TMPL, ResourceTemplate () {
+ IO (Decode16, 0, 0, 1, 8, IO0)
+ IRQNoFlags (IRQX) {}
+ })
+ CreateWordField (Arg0, IO0._MIN, IOA0)
+ CreateByteField (Arg0, IRQX._INT, IRQL)
+
+ Divide(IOA0, 256, Local0, Local1)
+
+ Subtract(FindSetLeftBit (IRQL), 1, Local3)
+
+ ENCM (3)
+ Store (Local0, IO1L)
+ Store (Local1, IO1H)
+ Store (Local3, IRQ0)
+ Store (One, ACTR)
+ EXCM ()
+ }
+ }
+ #endif
+
+ #ifndef NO_W83627HF_CIR
+ /* ========================= Consumer IR ========================= */
+ Device (CIR0)
+ {
+ Name (_HID, EisaId ("WEC1022")) /* Should be the correct one */
+ Name (_UID, "w83627hf-cir")
+ Name (_STR, Unicode("Winbond Consumer Infrared Transceiver"))
+
+ Method (_STA)
+ {
+ Store (0x00, Local0)
+ ENCM (6)
+ If (ACTR) {
+ Store (0x0F, Local0)
+ }
+ ElseIf (LOr (IO1H, IO1L))
+ {
+ Store (0x0D, Local0)
+ }
+ EXCM ()
+ Return (Local0)
+ }
+
+ Method (_DIS)
+ {
+ ENCM (6)
+ Store (Zero, ACTR)
+ EXCM ()
+ }
+
+ Method (_CRS)
+ {
+ Name (CRS, ResourceTemplate () {
+ IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0)
+ IRQNoFlags (IRQX) {6}
+ })
+ ENCM (6)
+ Store(IO1L, Local0)
+ Store(IO1H, Local1)
+ Store(IRQ0, Local2)
+ EXCM ()
+ Or(ShiftLeft(Local1, 8), Local0, Local0)
+
+ CreateWordField (CRS, IO0._MIN, IMIN)
+ Store (Local0, IMIN)
+ CreateWordField (CRS, IO0._MAX, IMAX)
+ Store (Local0, IMAX)
+
+ CreateWordField (CRS, IRQX._INT, IRQW)
+ Store (One, Local3)
+ ShiftLeft (Local3, Local2, IRQW)
+
+ Return (CRS)
+ }
+
+ Name (_PRS, ResourceTemplate ()
+ {
+ StartDependentFn (0,0) {
+ IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08)
+ IRQNoFlags () {3,4,5,7,9,10,11,12}
+ }
+ EndDependentFn()
+ })
+
+ Method (_SRS, 1, Serialized)
+ {
+ Name (TMPL, ResourceTemplate () {
+ IO (Decode16, 0, 0, 1, 8, IO0)
+ IRQNoFlags (IRQX) {}
+ })
+ CreateWordField (Arg0, IO0._MIN, IOA0)
+ CreateByteField (Arg0, IRQX._INT, IRQL)
+
+ Divide(IOA0, 256, Local0, Local1)
+
+ Subtract(FindSetLeftBit (IRQL), 1, Local3)
+
+ ENCM (6)
+ Store (Local0, IO1L)
+ Store (Local1, IO1H)
+ Store (Local3, IRQ0)
+ Store (One, ACTR)
+ EXCM ()
+ }
+ }
+ #endif
+
+ #ifndef NO_W83627HF_KBC
+ /* ===================== Keyboard Controller ===================== */
+ Device (KBD0)
+ {
+ Name (_HID, EisaId ("PNP0303"))
+ Name (_UID, "w83627hf-kbc")
+
+ Method (_STA)
+ {
+ Store (0x00, Local0)
+ ENCM (5)
+ If (ACTR) {
+ Store (0x0F, Local0)
+ }
+ ElseIf (Lor(LOr (IO1H, IO1L), LOr (IO2H, IO2L)))
+ {
+ #ifdef W83627HF_KBC_COMPAT
+ Store (0x0F, Local0)
+ #else
+ Store (0x0D, Local0)
+ #endif
+ }
+ EXCM ()
+ Return (Local0)
+ }
+
+ Method (_DIS)
+ {
+ ENCM (5)
+ Store (Zero, ACTR)
+ EXCM ()
+ Notify(PS2M, 1)
+ }
+
+ Method (_CRS)
+ {
+ Name (CRS, ResourceTemplate () {
+ IRQNoFlags (IRQX) {}
+ IO (Decode16, 0x0000, 0x0000, 0x01, 0x01, IO0)
+ IO (Decode16, 0x0000, 0x0000, 0x01, 0x01, IO1)
+ })
+ ENCM (5)
+ Store(IO1L, Local0)
+ Store(IO1H, Local1)
+ Store(IO2L, Local2)
+ Store(IO2H, Local3)
+ Store(IRQ0, Local4)
+ EXCM ()
+
+ Or(ShiftLeft(Local1, 8), Local0, Local0)
+ Or(ShiftLeft(Local3, 8), Local2, Local2)
+
+ CreateWordField (CRS, IO0._MIN, IMIN)
+ Store (Local0, IMIN)
+ CreateWordField (CRS, IO0._MAX, IMAX)
+ Store (Local0, IMAX)
+
+ CreateWordField (CRS, IO1._MIN, I1MI)
+ Store (Local2, I1MI)
+ CreateWordField (CRS, IO1._MAX, I1MA)
+ Store (Local2, I1MA)
+
+ CreateWordField (CRS, IRQX._INT, IRQW)
+ Store (One, Local5)
+ ShiftLeft (Local5, Local4, IRQW)
+
+ Return (CRS)
+ }
+
+ Name (_PRS, ResourceTemplate ()
+ {
+ StartDependentFn (0,0) {
+ IRQNoFlags () {1}
+ IO (Decode16, 0x0060, 0x0060, 0x01, 0x01)
+ IO (Decode16, 0x0064, 0x0064, 0x01, 0x01)
+ }
+ EndDependentFn()
+ })
+
+ Method (_SRS, 1, Serialized)
+ {
+ Name (TMPL, ResourceTemplate () {
+ IRQNoFlags (IRQX) {}
+ IO (Decode16, 0, 0, 1, 1, IO0)
+ IO (Decode16, 0, 0, 1, 1, IO1)
+ })
+ CreateWordField (Arg0, IO0._MIN, IOA0)
+ CreateWordField (Arg0, IO1._MIN, IOA1)
+ CreateByteField (Arg0, IRQX._INT, IRQL)
+
+ Divide(IOA0, 256, Local0, Local1)
+ Divide(IOA1, 256, Local2, Local3)
+
+ Subtract(FindSetLeftBit (IRQL), 1, Local4)
+
+ ENCM (5)
+ Store (Local0, IO1L)
+ Store (Local1, IO1H)
+ Store (Local2, IO2L)
+ Store (Local3, IO2H)
+ Store (Local4, IRQ0)
+ Store (One, ACTR)
+ EXCM ()
+ Notify(PS2M, 1)
+ }
+ }
+ #ifndef NO_W83627HF_PS2M
+ Device (PS2M)
+ {
+ Name (_HID, EisaId ("PNP0F13"))
+ Name (_UID, "w83627hf-ps2m")
+
+ Method (_STA)
+ {
+ Store (0x00, Local0)
+ ENCM (5)
+ If (LAnd(ACTR, IRQ1) ) {
+ Store (0x0F, Local0)
+ }
+ ElseIf (Lor(LOr (IO1H, IO1L), LOr (IO2H, IO2L)))
+ {
+ #ifdef W83627HF_KBC_COMPAT
+ Store (0x0F, Local0)
+ #else
+ Store (0x0D, Local0)
+ #endif
+ }
+ EXCM ()
+ Return (Local0)
+ }
+
+ Method (_DIS)
+ {
+ ENCM (5)
+ Store (Zero, IRQ1)
+ EXCM ()
+ }
+
+ Method (_CRS)
+ {
+ Name (CRS, ResourceTemplate () {
+ IRQNoFlags (IRQX) {}
+ })
+ ENCM (5)
+ Store(IRQ1, Local4)
+ EXCM ()
+
+ CreateWordField (CRS, IRQX._INT, IRQW)
+ Store (One, Local5)
+ ShiftLeft (Local5, Local4, IRQW)
+
+ Return (CRS)
+ }
+
+ Name (_PRS, ResourceTemplate ()
+ {
+ StartDependentFn (0,0) {
+ IRQNoFlags () {12}
+ }
+ StartDependentFn (2,0) {
+ IRQNoFlags () {1,3,4,5,6,7,9,10,11}
+ }
+ EndDependentFn()
+ })
+
+ Method (_SRS, 1, Serialized)
+ {
+ Name (TMPL, ResourceTemplate () {
+ IRQNoFlags (IRQX) {}
+ })
+ CreateByteField (Arg0, IRQX._INT, IRQL)
+
+ Subtract(FindSetLeftBit (IRQL), 1, Local0)
+
+ ENCM (5)
+ Store (Local0, IRQ1)
+ /* Only activates if KBD is active */
+ EXCM ()
+ }
+ }
+ #endif
+ #endif
+
+ #ifndef NO_W83627HF_GAME
+ /* ========================== Game Port ========================== */
+ Device (GAME)
+ {
+ Name (_HID, EisaId ("PNPB02F"))
+ Name (_STR, Unicode ("Joystick/Game Port"))
+ Name (_UID, "w83627hf-game")
+
+ Method (_STA) {
+ Store(0, Local0)
+ ENCM (7)
+ If (LOr(IO1L, IO1H)) {
+ If (LOr(ACTR, ACT1)) {
+ Store (0x0F, Local0)
+ }
+ Else {
+ Store (0x0D, Local0)
+ }
+ }
+ EXCM ()
+ Return (Local0)
+ }
+
+ Method (_CRS)
+ {
+ Name (CRS, ResourceTemplate () {
+ IO (Decode16, 0x0000, 0x0000, 0x01, 0x01, IO0)
+ IRQNoFlags (IRQX) {}
+ })
+ ENCM (7)
+ Store(IO1L, Local0)
+ Store(IO1H, Local1)
+ Store(IRQ0, Local2)
+ EXCM ()
+
+ Or(ShiftLeft(Local1, 8), Local0, Local0)
+
+ CreateWordField (CRS, IO0._MIN, IMIN)
+ CreateWordField (CRS, IO0._MAX, IMAX)
+ Store (Local0, IMIN)
+ Store (Local0, IMAX)
+
+ If (Local2) {
+ CreateWordField (CRS, IRQX._INT, IRQW)
+ Store (One, Local3)
+ ShiftLeft (Local3, Local2, IRQW)
+ }
+
+ Return (CRS)
+ }
+
+ }
+ #endif
+
+ #ifndef NO_W83627HF_MIDI
+ /* ========================== MIDI Port ========================== */
+ Device (MIDI)
+ {
+ Name (_HID, EisaId ("PNPB006"))
+ Name (_STR, Unicode ("MPU-401 Compatible MIDI Port"))
+ Name (_UID, "w83627hf-midi")
+
+ Method (_STA)
+ {
+ Store(0, Local0)
+ ENCM (7)
+ If (LOr(IO2L, IO2H)) {
+ If (LOr(ACTR, ACT2)) {
+ Store (0x0F, Local0)
+ }
+ Else {
+ Store (0x0D, Local0)
+ }
+ }
+ EXCM ()
+ Return (Local0)
+ }
+
+ Method (_CRS)
+ {
+ Name (CRS, ResourceTemplate () {
+ IO (Decode16, 0x0000, 0x0000, 0x02, 0x02, IO0)
+ IRQNoFlags (IRQX) {}
+ })
+ ENCM (7)
+ Store(IO2L, Local0)
+ Store(IO2H, Local1)
+ Store(IRQ1, Local2)
+ EXCM ()
+
+ Or(ShiftLeft(Local1, 8), Local0, Local0)
+
+ CreateWordField (CRS, IO0._MIN, IMIN)
+ CreateWordField (CRS, IO0._MAX, IMAX)
+ Store (Local0, IMIN)
+ Store (Local0, IMAX)
+
+ If (Local2) {
+ CreateWordField (CRS, IRQX._INT, IRQW)
+ Store (One, Local3)
+ ShiftLeft (Local3, Local2, IRQW)
+ }
+
+ Return (CRS)
+ }
+
+ }
+ #endif
+
+ /* ==== Suspend LED control if it is connected to the SuperIO ==== */
+ Method (SLED, 1)
+ {
+ ENCM (9)
+ Store(OPT4, Local0)
+ And(Local0, 63, Local0)
+ Or(Local0, ShiftLeft(And(Arg0, 0x03), 6), OPT4)
+ EXCM ()
+ }
+
+ /* ===== Power LED control if it is connected to the SuperIO ===== */
+ Method (PLED, 1)
+ {
+ ENCM (8)
+ Store(OPT4, Local0)
+ And(Local0, 63, Local0)
+ Or(Local0, ShiftLeft(And(Arg0, 0x03), 6), OPT4)
+ EXCM ()
+ }
+
+ #ifndef NO_W83627HF_HWMON
+ /* ====================== Hardware Monitor ======================= */
+ Device (HMON)
+ {
+ Name (_HID, EisaId ("PNP0C02")) // TODO: find better matching ID
+ Name (_STR, Unicode("W83627 Hardware Monitor"))
+ Name (_UID, "w83627hf-hwmon")
+
+ Method (_STA)
+ {
+ Store (0x00, Local0)
+ ENCM (11)
+ If (ACTR) {
+ Store (0x0F, Local0)
+ }
+ ElseIf (LOr (IO1H, IO1L))
+ {
+ Store (0x0D, Local0)
+ }
+ EXCM ()
+ Return (Local0)
+ }
+
+ Method (_PSC)
+ {
+ Store(^^_PSC (), Local0)
+ If (Local0) { Return (Local0) }
+ ENCM (0xFF)
+ Store (HWPW, Local0)
+ EXCM ()
+ If (Local0) { Return (1) }
+ Else { Return (0) }
+ }
+
+ Method (_PS0)
+ {
+ ENCM (0xFF)
+ Store (Zero, HWPW)
+ EXCM ()
+ }
+
+ Method (_PS1)
+ {
+ ENCM (0xFF)
+ Store (One, HWPW)
+ EXCM ()
+ }
+
+ Method (_CRS)
+ {
+ Name (CRS, ResourceTemplate () {
+ IO (Decode16, 0x0000, 0x0000, 0x08, 0x02, IO0)
+ IRQNoFlags (IRQX) {}
+ })
+ ENCM (11)
+ Store(IO1L, Local0)
+ Store(IO1H, Local1)
+ Store(IRQ1, Local2)
+ EXCM ()
+
+ Or(ShiftLeft(Local1, 8), Local0, Local0)
+
+ CreateWordField (CRS, IO0._MIN, IMIN)
+ CreateWordField (CRS, IO0._MAX, IMAX)
+ Store (Local0, IMIN)
+ Store (Local0, IMAX)
+
+ If (Local2) {
+ CreateWordField (CRS, IRQX._INT, IRQW)
+ Store (One, Local3)
+ ShiftLeft (Local3, Local2, IRQW)
+ }
+ Return (CRS)
+ }
+ }
+ #endif
+
+ /* Returns the wake source register.
+ It is cleared after reading.
+ Bit 0: Keyboard wake-up event
+ Bit 1: Mouse wake-up event
+ Bit 2: Power button event
+ Bit 3: CIR wake-up event
+ Bit 4: Power loss event
+ Bit 5: VSB power loss status
+ */
+ Method (WAKS)
+ {
+ ENCM (10)
+ Store (CRE3, Local0)
+ EXCM ()
+ Return (Local0)
+ }
+}
diff --git a/src/superio/winbond/w83627hf/devtree.asl b/src/superio/winbond/w83627hf/devtree.asl
deleted file mode 100644
index 69017fe..0000000
--- a/src/superio/winbond/w83627hf/devtree.asl
+++ /dev/null
@@ -1,1473 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2011 Christoph Grenz <christophg+cb at grenz-bonn.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/*
- * include this file into a mainboard's DSDT _SB device tree and it will expose the
- * W83627HF SuperIO and its functionality.
- *
- * Devices are marked as nonexistant if they got 0x00000000 as I/O base address
- * (compatibility with legacy bios, which disables logical devices that way)
- *
- * It allows the change of IO ports, IRQs and DMA settings on most logical
- * devices, disabling and reenabling logical devices and controlling power
- * saving mode on logical devices or the whole chip.
- *
- * Notes:
- * - ECP mode of parallel port not implemented, DMA settings of parallel port
- * will be reset on DSDT init
- * - Hardware monitor is only shown as "Motherboard Resource", shows no real
- * functionality
- *
- * Controllable through preprocessor macros:
- * NO_W83627HF_FDC: don't expose the floppy disk controller
- * NO_W83627HF_FDC_ENUM: don't try to enumerate the connected floppy drives
- * NO_W83627HF_PPORT: don't expose the parallel port
- * NO_W83627HF_UARTA: don't expose the first serial port
- * NO_W83627HF_UARTB: don't expose the second serial port (already hidden
- * if UARTB is configured as IRDA port by firmware)
- * NO_W83627HF_IRDA: don't expose the IRDA port (already hidden if UARTB is
- * configured as serial port by firmware)
- * NO_W83627HF_CIR: don't expose the Consumer Infrared functionality
- * NO_W83627HF_KBC: don't expose the keyboard controller
- * NO_W83627HF_PS2M: don't expose the PS/2 mouse functionality of the
- * keyboard controller
- * NO_W83627HF_GAME: don't expose the game port
- * NO_W83627HF_MIDI: don't expose the MIDI port
- * NO_W83627HF_HWMON: don't expose the hardware monitor as
- * PnP "Motherboard Ressource"
- * W83627HF_KBC_COMPAT: show the keyboard controller and the PS/2 mouse as
- * enabled if it is disabled but an address is assigned
- * to it. This may be neccessary in some cases.
- *
- * Datasheet: "W83627HF/F WINBOND I/O" rev. 6.0
- * http://www.itox.com/pages/support/wdt/W83627HF.pdf
- */
-
-Device(SIO) {
- Name (_HID, EisaId("PNP0A05"))
- Name (_STR, Unicode("Winbond W83627HF SuperIO"))
- Name (_UID, "w83627hf")
-
- /* Mutex for accesses to the configuration ports (prolog and epilog commands are used, so synchronization is useful) */
- Mutex(CRMX, 1)
-
- /* SuperIO configuration ports */
- OperationRegion (CREG, SystemIO, 0x2E, 0x02)
- Field (CREG, ByteAcc, NoLock, Preserve)
- {
- ADDR, 8,
- DATA, 8
- }
- IndexField (ADDR, DATA, ByteAcc, NoLock, Preserve)
- {
- Offset (0x02),
- RST, 1, /* Soft reset */
- , 7,
- Offset (0x07),
- LDN, 8, /* Logical device selector */
- Offset (0x20),
- DID, 8, /* Device ID */
- DREV, 8, /* Device Revision */
- FDPW, 1, /* FDC Power Down */
- , 2,
- PRPW, 1, /* PRT Power Down */
- UAPW, 1, /* UART A Power Down */
- UBPW, 1, /* UART B Power Down */
- HWPW, 1, /* HWM Power Down */
- , 1,
- IPD, 1, /* Immediate Chip Power Down */
- , 7,
- PNPS, 1, /* PnP Address Select Register Default Value Mode */
- , 1,
- KBCR, 1, /* KBC enabled after system reset (read-only) */
- , 3,
- CLKS, 1, /* Clock select */
- AQ16, 1, /* 16bit Address Qualification */
- FDCT, 1, /* Tristate FDC (?) */
- , 2,
- PRTT, 1, /* Tristate parallel port (?) */
- URAT, 1, /* Tristate UART A (?) */
- URBT, 1, /* Tristate UART B (?) */
- , 2,
- URAI, 1, /* UART A Legacy IRQ Select Disable */
- URBI, 1, /* UART B Legacy IRQ Select Disable */
- PRTI, 1, /* Parallel Port Legacy IRQ/DRQ Select Disable */
- FDCI, 1, /* FDC Legacy IRQ/DRQ Select Disable */
- , 1,
- LCKC, 1, /* Lock Configuration Registers */
- Offset (0x29),
- IO3S, 8, /* GPIO3 pin selection register */
- ACTR, 1, /* Logical device activation */
- ACT1, 1, /* Logical part activation 1 (mostly unused) */
- ACT2, 1, /* Logical part activation 2 (mostly unused) */
- , 5,
- Offset (0x60),
- IO1H, 8, /* First I/O port base - high byte */
- IO1L, 8, /* First I/O port base - low byte */
- IO2H, 8, /* Second I/O port base - high byte */
- IO2L, 8, /* Second I/O port base - low byte */
- Offset (0x70),
- IRQ0, 8, /* First IRQ */
- Offset (0x72),
- IRQ1, 8, /* First IRQ */
- Offset (0x74),
- DMA0, 8, /* DMA */
- Offset (0xE0),
- /* CRE0-CRE4: function logical device dependant, seems to be reserved for ACPI settings */
- CRE0, 8,
- CRE1, 8,
- CRE2, 8,
- CRE3, 8,
- CRE4, 8,
- Offset (0xF0),
- /* OPT1-OPTA aka CRF0-CRF9: function logical device dependant */
- OPT1, 8,
- OPT2, 8,
- OPT3, 8,
- OPT4, 8,
- OPT5, 8,
- OPT6, 8,
- OPT7, 8,
- OPT8, 8,
- OPT9, 8,
- OPTA, 8
- }
-
- Method (_CRS)
- {
- Return (ResourceTemplate () {
- IO (Decode16, 0x002E, 0x002E, 0x02, 0x01) /* Announce the used I/O ports to the OS */
- IO (Decode16, 0x004E, 0x004E, 0x01, 0x01) /* this port is used in some configurations, so announce it to be sure */
- })
- }
-
- /* Enter configuration mode (and aquire mutex)
- Method must be run before accesssing the configuration region.
- Parameter is the LDN which should be accessed. Values >= 0xFF mean
- no LDN switch should be done.
- */
- Method (ENCM, 1)
- {
- Acquire (CRMX, 0xFFFF)
- Store (0x87, ADDR)
- Store (0x87, ADDR)
- If (LLess(Arg0, 0xFF)) {
- Store(Arg0, LDN)
- }
- }
-
- /* Exit configuration mode (and release mutex)
- Method must be run after accessing the configuration region.
- */
- Method (EXCM)
- {
- Store (0xAA, ADDR)
- Release (CRMX)
- }
-
- /* PM: indicate IPD (Immediate Power Down) bit state as D0/D2 */
- Method (_PSC) {
- ENCM (0xFF)
- Store (IPD, Local0)
- EXCM ()
- If (Local0) { Return (2) }
- Else { Return (0) }
- }
-
- /* PM: Switch to D0 by setting IPD low */
- Method (_PS0) {
- ENCM (0xFF)
- Store (Zero, IPD)
- EXCM ()
- }
-
- /* PM: Switch to D2 by setting IPD high */
- Method (_PS2) {
- ENCM (0xFF)
- Store (One, IPD)
- EXCM ()
- }
-
- #ifndef NO_W83627HF_FDC
- /* =================== Floppy Disk Controller ================ */
- Device (FDC0) {
- Name (_HID, EisaId ("PNP0700"))
- Name (_STR, Unicode ("W83627HF Floppy Disk Controller"))
- Name (_UID, "w83627hf-fdc")
-
- #ifndef NO_W83627HF_FDC_ENUM
- /* Initialization method: Should be run once on boot
- If FDC is active, enumerate all connected devices */
- Method (_INI) {
- ENCM (0)
- Store (ACTR, Local0)
- Store (IO1H, Local1)
- Store (IO1L, Local2)
- EXCM ()
- ShiftLeft(Local1, 8, Local1)
- Or(Local1, Local2, Local1)
- If (Local0) {
- /* Try probing drives and save result in _FDE */
- PROB(Local1)
- }
- }
- #endif
-
- Method (_STA)
- {
- Store (0x00, Local0)
- ENCM (0)
- If (ACTR) {
- Store (0x0F, Local0)
- }
- ElseIf (LOr (IO1H, IO1L))
- {
- Store (0x0D, Local0)
- }
- EXCM ()
- Return (Local0)
- }
-
- /* Current power state (Returns 1 if LDN in power saving mode,
- * 2 if whole chip is powered down), 0 else
- */
- Method (_PSC) {
- Store(^^_PSC (), Local0)
- If (Local0) { Return (Local0) }
- ENCM (0xFF)
- Store (FDPW, Local0)
- EXCM ()
- If (Local0) { Return (1) }
- Else { Return (0) }
- }
- /* Disable power saving mode */
- Method (_PS0) {
- ENCM (0xFF)
- Store (Zero, FDPW)
- EXCM ()
- }
- /* Enable power saving mode */
- Method (_PS1) {
- ENCM (0xFF)
- Store (One, FDPW)
- EXCM ()
- }
-
- Method (_DIS)
- {
- ENCM (0)
- Store (Zero, ACTR)
- EXCM ()
- }
-
- Method (_CRS)
- {
- Name (CRS, ResourceTemplate () {
- IO (Decode16, 0x0000, 0x0000, 0x01, 0x07, IO0)
- IRQNoFlags () {6}
- DMA (Compatibility, NotBusMaster, Transfer8) {2}
- })
-
- /* Get IO port info */
- ENCM (0)
- Store(IO1L, Local0)
- Store(IO1H, Local1)
- EXCM ()
-
- /* Calculate full IO port address */
- Or(ShiftLeft(Local1, 8), Local0, Local0)
-
- /* Modify the resource template and return it */
- CreateWordField (CRS, IO0._MIN, IMIN)
- CreateWordField (CRS, IO0._MAX, IMAX)
- Store (Local0, IMIN)
- Store (Local0, IMAX)
- Return (CRS)
- }
-
- Method (_PRS)
- {
- Return (ResourceTemplate ()
- {
- StartDependentFnNoPri ()
- {
- IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x07)
- IRQNoFlags () {6}
- DMA (Compatibility, NotBusMaster, Transfer8) {2}
- }
- EndDependentFn ()
- })
- }
-
- #ifndef NO_W83627HF_FDC_ENUM
- Name(_FDE, Buffer(){0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
- #endif
-
- Method (PROB, 1) {
- #ifndef NO_W83627HF_FDC_ENUM
- /* Try probing drives and save result in _FDE
- Probing is done through selecting and activating a drive
- and reading 0x03F7 aka the "shared IDE and floppy register"
- as any value there besides zero seems to indicate a
- connected drive.
- */
- OperationRegion (FIO1, SystemIO, Arg0, 0x06)
- Field (FIO1, ByteAcc, NoLock, Preserve)
- {
- Offset(0x02),
- SELE, 2,
- RSTL, 1,
- IDMA, 1,
- ACT1, 1,
- ACT2, 1,
- ACT3, 1,
- ACT4, 1,
- Offset(0x04),
- BSY1, 1,
- BSY2, 1,
- BSY3, 1,
- BSY4, 1,
- BUSY, 1,
- NDMA, 1,
- IODI, 1,
- RDY, 1,
- DATA, 8,
- }
- OperationRegion (FIO2, SystemIO, 0x3F7, 0x01)
-
- CreateByteField (_FDE, 3, FD1)
- CreateByteField (_FDE, 7, FD2)
- CreateByteField (_FDE, 11, FD3)
- CreateByteField (_FDE, 15, FD4)
-
- Store(One, ACT1)
- Store(0, SELE)
- Sleep(0x64)
- If (FIO2) { Store (One, FD1) }
-
- Store(Zero, ACT1)
- Store(One, ACT2)
- Store(1, SELE)
- Sleep(0x64)
- If (FIO2) { Store (One, FD2) }
-
- Store(Zero, ACT2)
- Store(One, ACT3)
- Store(2, SELE)
- Sleep(0x64)
- If (FIO2) { Store (One, FD3) }
-
- Store(Zero, ACT3)
- Store(One, ACT4)
- Store(3, SELE)
- Sleep(0x64)
- If (FIO2) { Store (One, FD4) }
- Store(Zero, ACT4)
- Store(Zero, SELE)
- #endif
- }
-
-
- Method (_SRS, 1, Serialized)
- {
- Name (TMPL, ResourceTemplate () {
- IO (Decode16, 0, 0, 1, 7, IO0)
- IRQNoFlags (IRQ0) {}
- DMA (Compatibility, NotBusMaster, Transfer8, DMA0) {}
- })
- CreateWordField (Arg0, IO0._MIN, IOA0)
- CreateByteField (Arg0, IRQ0._INT, IRQL)
- CreateByteField (Arg0, DMA0._DMA, DMCH)
-
- Divide(IOA0, 256, Local0, Local1)
-
- ENCM (0)
- Store (Local0, IO1L)
- Store (Local1, IO1H)
- Store (One, ACTR)
- EXCM ()
-
- /* Try probing drives and save result in _FDE */
- PROB(IOA0)
- }
- }
- #endif
-
- #ifndef NO_W83627HF_PPORT
- /* ======================== Parallel Port ======================== */
- /* Currently no ECP support */
- Device (PAR0) {
- Name (_HID, EisaId ("PNP0400"))
- Name (_DDN, "LPT1")
- Name (_UID, "w83627hf-pport")
-
- Method (MODE, 1) {
- And(Arg0, 0x07, Local0)
- ENCM (1)
- And(OPT1, 0x3, Local1)
- Or(Local1, Local0, OPT1)
- EXCM()
- }
-
- Method (_INI)
- {
- /* Deactivate DMA, even if set by BIOS. We don't announce it
- through _CRS and it's only useful in ECP mode which we
- don't support at the moment. */
- ENCM (1)
- Store (0x04, DMA0)
- EXCM ()
- }
-
- Method (_STA)
- {
- Store (0x00, Local0)
- ENCM (1)
- And(OPT1, 0x3, Local1)
- If (ACTR) {
- If (LNotEqual(Local1, 2)) {
- Store (0x0D, Local0)
- } Else {
- Store (0x0D, Local0)
- }
- }
- ElseIf (LOr (IO1H, IO1L))
- {
- Store (0x0D, Local0)
- }
- EXCM ()
- Return (Local0)
- }
-
- Method (_PSC) {
- Store(^^_PSC (), Local0)
- If (Local0) { Return (Local0) }
- ENCM (0xFF)
- Store (PRPW, Local0)
- EXCM ()
- If (Local0) { Return (1) }
- Else { Return (0) }
- }
- Method (_PS0) {
- ENCM (0xFF)
- Store (Zero, PRPW)
- EXCM ()
- }
- Method (_PS1) {
- ENCM (0xFF)
- Store (One, PRPW)
- EXCM ()
- }
-
- Method (_DIS) {
- ENCM (1)
- Store (Zero, ACTR)
- EXCM ()
- }
-
- Method (_CRS)
- {
- Name (CRS, ResourceTemplate ()
- {
- IO (Decode16, 0x0000, 0x0000, 0x04, 0x08, IO0)
- IRQNoFlags (IRQX) {}
- })
- CreateWordField (CRS, IO0._MIN, IOP0)
- CreateWordField (CRS, IO0._MAX, IOR0)
- CreateByteField (CRS, IO0._ALN, IOAL)
- CreateByteField (CRS, IO0._LEN, IOLE)
- CreateWordField (CRS, IRQX._INT, IRQW)
-
- /* Get device settings */
- ENCM (1)
- Store (IO1L, Local0)
- Store (IO1H, Local1)
- Store (OPT1, Local2)
- Store (IRQ0, Local5)
- EXCM ()
- /* Calculate IO port and modify template */
- Or(ShiftLeft(Local1, 8), Local0, Local0)
- Store(Local1, IOP0)
- Store(Local1, IOR0)
-
- /* Set align and length based on active parallel port mode */
- And(Local2, 0x3, Local3)
- And(Local2, 0x4, Local4)
- If (Local4) {
- Store(0x04, IOAL)
- }
- If (LEqual (Local0, 0xBC))
- {
- Store (0x04, IOLE)
- }
- Else
- {
- Store (0x08, IOLE)
- }
- /* Calculate IRQ bitmap */
- Store (One, Local0)
- ShiftLeft (Local0, Local5, IRQW)
- /* Return resource template */
- Return (CRS)
- }
-
- Name (_PRS, ResourceTemplate ()
- {
- StartDependentFn (0,1)
- {
- IO (Decode16, 0x0378, 0x0378, 0x04, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (0,1)
- {
- IO (Decode16, 0x0278, 0x0278, 0x04, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (0,1)
- {
- IO (Decode16, 0x03BC, 0x03BC, 0x04, 0x04)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (0,0)
- {
- IO (Decode16, 0x0378, 0x0378, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (0,0)
- {
- IO (Decode16, 0x0278, 0x0278, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (2,0)
- {
- IO (Decode16, 0x0100, 0x0FFC, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (2,1)
- {
- IO (Decode16, 0x0100, 0x0FFC, 0x04, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- EndDependentFn ()
- })
-
- Method (_SRS, 1, Serialized)
- {
- Name (TMPL, ResourceTemplate () {
- IO (Decode16, 0, 0, 4, 4, IO0)
- IRQNoFlags (IRQX) {}
- })
- CreateWordField (Arg0, IO0._MIN, IOA0)
- CreateWordField (Arg0, IO0._MIN, IOA1)
- CreateByteField (Arg0, IO0._ALN, IOAL)
- CreateByteField (Arg0, IO0._LEN, IOLE)
- CreateWordField (Arg0, IRQX._INT, IRQL)
-
- If (LEqual(IOAL, 4)) {
- Store(0x0, Local2)
- } else {
- Store(0x1, Local2)
- }
-
- Divide(IOA0, 256, Local0, Local1)
-
- ENCM (1)
- /* IO port */
- Store (Local0, IO1L)
- Store (Local1, IO1H)
- /* Mode */
- Store (OPT1, Local3)
- And (Local3, 0xF8, Local3)
- Or (Local2, Local3, OPT1)
- /* DMA off */
- Store (0x04, DMA0)
- /* IRQ */
- Subtract(FindSetLeftBit (IRQL), 1, IRQ0)
- /* Activate */
- Store (One, ACTR)
- EXCM ()
- }
- }
- #endif
-
- #ifndef NO_W83627HF_UARTA
- /* =========================== UART A ============================ */
- Device (SER0) {
- Name (_HID, EisaId ("PNP0501"))
- Name (_UID, "w83627hf-uarta")
- Name (_DDN, "COM1")
-
- Method (_STA)
- {
- Store (0x00, Local0)
- ENCM (2)
- If (ACTR) {
- Store (0x0F, Local0)
- }
- ElseIf (LOr (IO1H, IO1L))
- {
- Store (0x0D, Local0)
- }
- EXCM ()
- Return (Local0)
- }
-
- Method (_PSC) {
- Store(^^_PSC (), Local0)
- If (Local0) { Return (Local0) }
- ENCM (0xFF)
- Store (UAPW, Local0)
- EXCM ()
- If (Local0) { Return (1) }
- Else { Return (0) }
- }
- Method (_PS0) {
- ENCM (0xFF)
- Store (Zero, UAPW)
- EXCM ()
- }
- Method (_PS1) {
- ENCM (0xFF)
- Store (One, UAPW)
- EXCM ()
- }
-
- Method (_DIS)
- {
- ENCM (2)
- Store (Zero, ACTR)
- EXCM ()
- }
-
- Method (_CRS)
- {
- Name (CRS, ResourceTemplate () {
- IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0)
- IRQNoFlags (IRQX) {6}
- })
- ENCM (2)
- Store(IO1L, Local0)
- Store(IO1H, Local1)
- Store(IRQ0, Local2)
- EXCM ()
- Or(ShiftLeft(Local1, 8), Local0, Local0)
-
- CreateWordField (CRS, IO0._MIN, IMIN)
- Store (Local0, IMIN)
- CreateWordField (CRS, IO0._MAX, IMAX)
- Store (Local0, IMAX)
-
- CreateWordField (CRS, IRQX._INT, IRQW)
- Store (One, Local3)
- ShiftLeft (Local3, Local2, IRQW)
-
- Return (CRS)
- }
-
- Name (_PRS, ResourceTemplate ()
- {
- StartDependentFn (0,0) {
- IO (Decode16, 0x03F8, 0x03F8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (0,0) {
- IO (Decode16, 0x02F8, 0x02F8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (1,0) {
- IO (Decode16, 0x03E8, 0x03E8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (1,0) {
- IO (Decode16, 0x02E8, 0x02E8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (2,0) {
- IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- EndDependentFn()
- })
-
- Method (_SRS, 1, Serialized)
- {
- Name (TMPL, ResourceTemplate () {
- IO (Decode16, 0, 0, 1, 6, IO0)
- IRQNoFlags (IRQX) {}
- })
- CreateWordField (Arg0, IO0._MIN, IOA0)
- CreateByteField (Arg0, IRQX._INT, IRQL)
-
- Divide(IOA0, 256, Local0, Local1)
-
- Subtract(FindSetLeftBit (IRQL), 1, Local3)
-
- ENCM (2)
- Store (Local0, IO1L)
- Store (Local1, IO1H)
- Store (Local3, IRQ0)
- Store (One, ACTR)
- EXCM ()
- }
- }
- #endif
-
- #ifndef NO_W83627HF_UARTB
- /* =========================== UART B ============================ */
- Device (SER1) {
- Name (_HID, EisaId ("PNP0501"))
- Name (_UID, "w83627hf-uartb")
- Name (_DDN, "COM2")
-
- Method (_STA)
- {
- Store (0x00, Local0)
- ENCM (3)
- If (LNot(And(OPT2, 0x30)))
- {
- If (ACTR) {
- Store (0x0F, Local0)
- }
- ElseIf (LOr (IO1H, IO1L))
- {
- Store (0x0D, Local0)
- }
- }
- EXCM ()
- Return (Local0)
- }
-
- Method (_PSC) {
- Store(^^_PSC (), Local0)
- If (Local0) { Return (Local0) }
- ENCM (0xFF)
- Store (UBPW, Local0)
- EXCM ()
- If (Local0) { Return (1) }
- Else { Return (0) }
- }
- Method (_PS0) {
- ENCM (0xFF)
- Store (Zero, UBPW)
- EXCM ()
- }
- Method (_PS1) {
- ENCM (0xFF)
- Store (One, UBPW)
- EXCM ()
- }
-
- Method (_DIS)
- {
- ENCM (3)
- Store (Zero, ACTR)
- EXCM ()
- }
-
- Method (_CRS)
- {
- Name (CRS, ResourceTemplate () {
- IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0)
- IRQNoFlags (IRQX) {6}
- })
- ENCM (3)
- Store(IO1L, Local0)
- Store(IO1H, Local1)
- Store(IRQ0, Local2)
- EXCM ()
- Or(ShiftLeft(Local1, 8), Local0, Local0)
-
- CreateWordField (CRS, IO0._MIN, IMIN)
- Store (Local0, IMIN)
- CreateWordField (CRS, IO0._MAX, IMAX)
- Store (Local0, IMAX)
-
- CreateWordField (CRS, IRQX._INT, IRQW)
- Store (One, Local3)
- ShiftLeft (Local3, Local2, IRQW)
-
- Return (CRS)
- }
-
- Name (_PRS, ResourceTemplate ()
- {
- StartDependentFn (0,0) {
- IO (Decode16, 0x02F8, 0x02F8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (0,0) {
- IO (Decode16, 0x03F8, 0x03F8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (1,0) {
- IO (Decode16, 0x03E8, 0x03E8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (1,0) {
- IO (Decode16, 0x02E8, 0x02E8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (2,0) {
- IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- EndDependentFn()
- })
-
- Method (_SRS, 1, Serialized)
- {
- Name (TMPL, ResourceTemplate () {
- IO (Decode16, 0, 0, 1, 8, IO0)
- IRQNoFlags (IRQX) {}
- })
- CreateWordField (Arg0, IO0._MIN, IOA0)
- CreateByteField (Arg0, IRQX._INT, IRQL)
-
- Divide(IOA0, 256, Local0, Local1)
-
- Subtract(FindSetLeftBit (IRQL), 1, Local3)
-
- ENCM (3)
- Store (Local0, IO1L)
- Store (Local1, IO1H)
- Store (Local3, IRQ0)
- Store (One, ACTR)
- EXCM ()
- }
- }
- #endif
-
- #ifndef NO_W83627HF_IRDA
- /* ======================== UART B (IRDA) ======================== */
- Device (IRDA) {
- Name (_HID, EisaId ("PNP0510"))
- Name (_UID, "w83627hf-irda")
- Name (_STR, Unicode("IrDA Port"))
-
- Method (_STA)
- {
- Store (0x00, Local0)
- ENCM (3)
- If (And(OPT2, 0x30))
- {
- If (ACTR) {
- Store (0x0F, Local0)
- }
- ElseIf (LOr (IO1H, IO1L))
- {
- Store (0x0D, Local0)
- }
- }
- EXCM ()
- Return (Local0)
- }
-
- Method (_PSC) {
- Store(^^_PSC (), Local0)
- If (Local0) { Return (Local0) }
- ENCM (0xFF)
- Store (UBPW, Local0)
- EXCM ()
- If (Local0) { Return (1) }
- Else { Return (0) }
- }
- Method (_PS0) {
- ENCM (0xFF)
- Store (Zero, UBPW)
- EXCM ()
- }
- Method (_PS1) {
- ENCM (0xFF)
- Store (One, UBPW)
- EXCM ()
- }
-
- Method (_DIS)
- {
- ENCM (3)
- Store (Zero, ACTR)
- EXCM ()
- }
-
- Method (_CRS)
- {
- Name (CRS, ResourceTemplate () {
- IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0)
- IRQNoFlags (IRQX) {6}
- })
- ENCM (3)
- Store(IO1H, Local1)
- Store(IO1L, Local0)
- Store(IRQ0, Local2)
- EXCM ()
- Or(ShiftLeft(Local1, 8), Local0, Local0)
-
- CreateWordField (CRS, IO0._MIN, IMIN)
- Store (Local0, IMIN)
- CreateWordField (CRS, IO0._MAX, IMAX)
- Store (Local0, IMAX)
-
- CreateWordField (CRS, IRQX._INT, IRQW)
- Store (One, Local3)
- ShiftLeft (Local3, Local2, IRQW)
-
- Return (CRS)
- }
-
- Name (_PRS, ResourceTemplate ()
- {
- StartDependentFn (0,0) {
- IO (Decode16, 0x02F8, 0x02F8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (1,0) {
- IO (Decode16, 0x03F8, 0x03F8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (0,0) {
- IO (Decode16, 0x03E8, 0x03E8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (0,0) {
- IO (Decode16, 0x02E8, 0x02E8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- StartDependentFn (2,0) {
- IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- EndDependentFn()
- })
-
- Method (_SRS, 1, Serialized)
- {
- Name (TMPL, ResourceTemplate () {
- IO (Decode16, 0, 0, 1, 8, IO0)
- IRQNoFlags (IRQX) {}
- })
- CreateWordField (Arg0, IO0._MIN, IOA0)
- CreateByteField (Arg0, IRQX._INT, IRQL)
-
- Divide(IOA0, 256, Local0, Local1)
-
- Subtract(FindSetLeftBit (IRQL), 1, Local3)
-
- ENCM (3)
- Store (Local0, IO1L)
- Store (Local1, IO1H)
- Store (Local3, IRQ0)
- Store (One, ACTR)
- EXCM ()
- }
- }
- #endif
-
- #ifndef NO_W83627HF_CIR
- /* ========================= Consumer IR ========================= */
- Device (CIR0)
- {
- Name (_HID, EisaId ("WEC1022")) /* Should be the correct one */
- Name (_UID, "w83627hf-cir")
- Name (_STR, Unicode("Winbond Consumer Infrared Transceiver"))
-
- Method (_STA)
- {
- Store (0x00, Local0)
- ENCM (6)
- If (ACTR) {
- Store (0x0F, Local0)
- }
- ElseIf (LOr (IO1H, IO1L))
- {
- Store (0x0D, Local0)
- }
- EXCM ()
- Return (Local0)
- }
-
- Method (_DIS)
- {
- ENCM (6)
- Store (Zero, ACTR)
- EXCM ()
- }
-
- Method (_CRS)
- {
- Name (CRS, ResourceTemplate () {
- IO (Decode16, 0x0000, 0x0000, 0x01, 0x08, IO0)
- IRQNoFlags (IRQX) {6}
- })
- ENCM (6)
- Store(IO1L, Local0)
- Store(IO1H, Local1)
- Store(IRQ0, Local2)
- EXCM ()
- Or(ShiftLeft(Local1, 8), Local0, Local0)
-
- CreateWordField (CRS, IO0._MIN, IMIN)
- Store (Local0, IMIN)
- CreateWordField (CRS, IO0._MAX, IMAX)
- Store (Local0, IMAX)
-
- CreateWordField (CRS, IRQX._INT, IRQW)
- Store (One, Local3)
- ShiftLeft (Local3, Local2, IRQW)
-
- Return (CRS)
- }
-
- Name (_PRS, ResourceTemplate ()
- {
- StartDependentFn (0,0) {
- IO (Decode16, 0x0100, 0x0FF8, 0x08, 0x08)
- IRQNoFlags () {3,4,5,7,9,10,11,12}
- }
- EndDependentFn()
- })
-
- Method (_SRS, 1, Serialized)
- {
- Name (TMPL, ResourceTemplate () {
- IO (Decode16, 0, 0, 1, 8, IO0)
- IRQNoFlags (IRQX) {}
- })
- CreateWordField (Arg0, IO0._MIN, IOA0)
- CreateByteField (Arg0, IRQX._INT, IRQL)
-
- Divide(IOA0, 256, Local0, Local1)
-
- Subtract(FindSetLeftBit (IRQL), 1, Local3)
-
- ENCM (6)
- Store (Local0, IO1L)
- Store (Local1, IO1H)
- Store (Local3, IRQ0)
- Store (One, ACTR)
- EXCM ()
- }
- }
- #endif
-
- #ifndef NO_W83627HF_KBC
- /* ===================== Keyboard Controller ===================== */
- Device (KBD0)
- {
- Name (_HID, EisaId ("PNP0303"))
- Name (_UID, "w83627hf-kbc")
-
- Method (_STA)
- {
- Store (0x00, Local0)
- ENCM (5)
- If (ACTR) {
- Store (0x0F, Local0)
- }
- ElseIf (Lor(LOr (IO1H, IO1L), LOr (IO2H, IO2L)))
- {
- #ifdef W83627HF_KBC_COMPAT
- Store (0x0F, Local0)
- #else
- Store (0x0D, Local0)
- #endif
- }
- EXCM ()
- Return (Local0)
- }
-
- Method (_DIS)
- {
- ENCM (5)
- Store (Zero, ACTR)
- EXCM ()
- Notify(PS2M, 1)
- }
-
- Method (_CRS)
- {
- Name (CRS, ResourceTemplate () {
- IRQNoFlags (IRQX) {}
- IO (Decode16, 0x0000, 0x0000, 0x01, 0x01, IO0)
- IO (Decode16, 0x0000, 0x0000, 0x01, 0x01, IO1)
- })
- ENCM (5)
- Store(IO1L, Local0)
- Store(IO1H, Local1)
- Store(IO2L, Local2)
- Store(IO2H, Local3)
- Store(IRQ0, Local4)
- EXCM ()
-
- Or(ShiftLeft(Local1, 8), Local0, Local0)
- Or(ShiftLeft(Local3, 8), Local2, Local2)
-
- CreateWordField (CRS, IO0._MIN, IMIN)
- Store (Local0, IMIN)
- CreateWordField (CRS, IO0._MAX, IMAX)
- Store (Local0, IMAX)
-
- CreateWordField (CRS, IO1._MIN, I1MI)
- Store (Local2, I1MI)
- CreateWordField (CRS, IO1._MAX, I1MA)
- Store (Local2, I1MA)
-
- CreateWordField (CRS, IRQX._INT, IRQW)
- Store (One, Local5)
- ShiftLeft (Local5, Local4, IRQW)
-
- Return (CRS)
- }
-
- Name (_PRS, ResourceTemplate ()
- {
- StartDependentFn (0,0) {
- IRQNoFlags () {1}
- IO (Decode16, 0x0060, 0x0060, 0x01, 0x01)
- IO (Decode16, 0x0064, 0x0064, 0x01, 0x01)
- }
- EndDependentFn()
- })
-
- Method (_SRS, 1, Serialized)
- {
- Name (TMPL, ResourceTemplate () {
- IRQNoFlags (IRQX) {}
- IO (Decode16, 0, 0, 1, 1, IO0)
- IO (Decode16, 0, 0, 1, 1, IO1)
- })
- CreateWordField (Arg0, IO0._MIN, IOA0)
- CreateWordField (Arg0, IO1._MIN, IOA1)
- CreateByteField (Arg0, IRQX._INT, IRQL)
-
- Divide(IOA0, 256, Local0, Local1)
- Divide(IOA1, 256, Local2, Local3)
-
- Subtract(FindSetLeftBit (IRQL), 1, Local4)
-
- ENCM (5)
- Store (Local0, IO1L)
- Store (Local1, IO1H)
- Store (Local2, IO2L)
- Store (Local3, IO2H)
- Store (Local4, IRQ0)
- Store (One, ACTR)
- EXCM ()
- Notify(PS2M, 1)
- }
- }
- #ifndef NO_W83627HF_PS2M
- Device (PS2M)
- {
- Name (_HID, EisaId ("PNP0F13"))
- Name (_UID, "w83627hf-ps2m")
-
- Method (_STA)
- {
- Store (0x00, Local0)
- ENCM (5)
- If (LAnd(ACTR, IRQ1) ) {
- Store (0x0F, Local0)
- }
- ElseIf (Lor(LOr (IO1H, IO1L), LOr (IO2H, IO2L)))
- {
- #ifdef W83627HF_KBC_COMPAT
- Store (0x0F, Local0)
- #else
- Store (0x0D, Local0)
- #endif
- }
- EXCM ()
- Return (Local0)
- }
-
- Method (_DIS)
- {
- ENCM (5)
- Store (Zero, IRQ1)
- EXCM ()
- }
-
- Method (_CRS)
- {
- Name (CRS, ResourceTemplate () {
- IRQNoFlags (IRQX) {}
- })
- ENCM (5)
- Store(IRQ1, Local4)
- EXCM ()
-
- CreateWordField (CRS, IRQX._INT, IRQW)
- Store (One, Local5)
- ShiftLeft (Local5, Local4, IRQW)
-
- Return (CRS)
- }
-
- Name (_PRS, ResourceTemplate ()
- {
- StartDependentFn (0,0) {
- IRQNoFlags () {12}
- }
- StartDependentFn (2,0) {
- IRQNoFlags () {1,3,4,5,6,7,9,10,11}
- }
- EndDependentFn()
- })
-
- Method (_SRS, 1, Serialized)
- {
- Name (TMPL, ResourceTemplate () {
- IRQNoFlags (IRQX) {}
- })
- CreateByteField (Arg0, IRQX._INT, IRQL)
-
- Subtract(FindSetLeftBit (IRQL), 1, Local0)
-
- ENCM (5)
- Store (Local0, IRQ1)
- /* Only activates if KBD is active */
- EXCM ()
- }
- }
- #endif
- #endif
-
- #ifndef NO_W83627HF_GAME
- /* ========================== Game Port ========================== */
- Device (GAME)
- {
- Name (_HID, EisaId ("PNPB02F"))
- Name (_STR, Unicode ("Joystick/Game Port"))
- Name (_UID, "w83627hf-game")
-
- Method (_STA) {
- Store(0, Local0)
- ENCM (7)
- If (LOr(IO1L, IO1H)) {
- If (LOr(ACTR, ACT1)) {
- Store (0x0F, Local0)
- }
- Else {
- Store (0x0D, Local0)
- }
- }
- EXCM ()
- Return (Local0)
- }
-
- Method (_CRS)
- {
- Name (CRS, ResourceTemplate () {
- IO (Decode16, 0x0000, 0x0000, 0x01, 0x01, IO0)
- IRQNoFlags (IRQX) {}
- })
- ENCM (7)
- Store(IO1L, Local0)
- Store(IO1H, Local1)
- Store(IRQ0, Local2)
- EXCM ()
-
- Or(ShiftLeft(Local1, 8), Local0, Local0)
-
- CreateWordField (CRS, IO0._MIN, IMIN)
- CreateWordField (CRS, IO0._MAX, IMAX)
- Store (Local0, IMIN)
- Store (Local0, IMAX)
-
- If (Local2) {
- CreateWordField (CRS, IRQX._INT, IRQW)
- Store (One, Local3)
- ShiftLeft (Local3, Local2, IRQW)
- }
-
- Return (CRS)
- }
-
- }
- #endif
-
- #ifndef NO_W83627HF_MIDI
- /* ========================== MIDI Port ========================== */
- Device (MIDI)
- {
- Name (_HID, EisaId ("PNPB006"))
- Name (_STR, Unicode ("MPU-401 Compatible MIDI Port"))
- Name (_UID, "w83627hf-midi")
-
- Method (_STA)
- {
- Store(0, Local0)
- ENCM (7)
- If (LOr(IO2L, IO2H)) {
- If (LOr(ACTR, ACT2)) {
- Store (0x0F, Local0)
- }
- Else {
- Store (0x0D, Local0)
- }
- }
- EXCM ()
- Return (Local0)
- }
-
- Method (_CRS)
- {
- Name (CRS, ResourceTemplate () {
- IO (Decode16, 0x0000, 0x0000, 0x02, 0x02, IO0)
- IRQNoFlags (IRQX) {}
- })
- ENCM (7)
- Store(IO2L, Local0)
- Store(IO2H, Local1)
- Store(IRQ1, Local2)
- EXCM ()
-
- Or(ShiftLeft(Local1, 8), Local0, Local0)
-
- CreateWordField (CRS, IO0._MIN, IMIN)
- CreateWordField (CRS, IO0._MAX, IMAX)
- Store (Local0, IMIN)
- Store (Local0, IMAX)
-
- If (Local2) {
- CreateWordField (CRS, IRQX._INT, IRQW)
- Store (One, Local3)
- ShiftLeft (Local3, Local2, IRQW)
- }
-
- Return (CRS)
- }
-
- }
- #endif
-
- /* ==== Suspend LED control if it is connected to the SuperIO ==== */
- Method (SLED, 1)
- {
- ENCM (9)
- Store(OPT4, Local0)
- And(Local0, 63, Local0)
- Or(Local0, ShiftLeft(And(Arg0, 0x03), 6), OPT4)
- EXCM ()
- }
-
- /* ===== Power LED control if it is connected to the SuperIO ===== */
- Method (PLED, 1)
- {
- ENCM (8)
- Store(OPT4, Local0)
- And(Local0, 63, Local0)
- Or(Local0, ShiftLeft(And(Arg0, 0x03), 6), OPT4)
- EXCM ()
- }
-
- #ifndef NO_W83627HF_HWMON
- /* ====================== Hardware Monitor ======================= */
- Device (HMON)
- {
- Name (_HID, EisaId ("PNP0C02")) // TODO: find better matching ID
- Name (_STR, Unicode("W83627 Hardware Monitor"))
- Name (_UID, "w83627hf-hwmon")
-
- Method (_STA)
- {
- Store (0x00, Local0)
- ENCM (11)
- If (ACTR) {
- Store (0x0F, Local0)
- }
- ElseIf (LOr (IO1H, IO1L))
- {
- Store (0x0D, Local0)
- }
- EXCM ()
- Return (Local0)
- }
-
- Method (_PSC)
- {
- Store(^^_PSC (), Local0)
- If (Local0) { Return (Local0) }
- ENCM (0xFF)
- Store (HWPW, Local0)
- EXCM ()
- If (Local0) { Return (1) }
- Else { Return (0) }
- }
-
- Method (_PS0)
- {
- ENCM (0xFF)
- Store (Zero, HWPW)
- EXCM ()
- }
-
- Method (_PS1)
- {
- ENCM (0xFF)
- Store (One, HWPW)
- EXCM ()
- }
-
- Method (_CRS)
- {
- Name (CRS, ResourceTemplate () {
- IO (Decode16, 0x0000, 0x0000, 0x08, 0x02, IO0)
- IRQNoFlags (IRQX) {}
- })
- ENCM (11)
- Store(IO1L, Local0)
- Store(IO1H, Local1)
- Store(IRQ1, Local2)
- EXCM ()
-
- Or(ShiftLeft(Local1, 8), Local0, Local0)
-
- CreateWordField (CRS, IO0._MIN, IMIN)
- CreateWordField (CRS, IO0._MAX, IMAX)
- Store (Local0, IMIN)
- Store (Local0, IMAX)
-
- If (Local2) {
- CreateWordField (CRS, IRQX._INT, IRQW)
- Store (One, Local3)
- ShiftLeft (Local3, Local2, IRQW)
- }
- Return (CRS)
- }
- }
- #endif
-
- /* Returns the wake source register.
- It is cleared after reading.
- Bit 0: Keyboard wake-up event
- Bit 1: Mouse wake-up event
- Bit 2: Power button event
- Bit 3: CIR wake-up event
- Bit 4: Power loss event
- Bit 5: VSB power loss status
- */
- Method (WAKS)
- {
- ENCM (10)
- Store (CRE3, Local0)
- EXCM ()
- Return (Local0)
- }
-}
More information about the coreboot-gerrit
mailing list