/* * This file is part of the coreboot project. * * Copyright (C) 2009 Thomas Jourdan * * 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 */ DefinitionBlock ("DSDT", "DSDT", 1, "EAGLE", "COREBOOT", 0x0000001) { Scope (\_PR) { Processor (CPU1, 0x01, 0x00000810, 0x06) { OperationRegion (STBL, SystemMemory, 0xFFFF0000, 0xFFFF) Name (NCPU, 0x80) Name (TYPE, 0x80000000) Name (HNDL, 0x80000000) Name (CFGD, 0x80000000) Name (TBLD, 0x80) Method (_PDC, 1, NotSerialized) { } } } Scope (\_PR) { Processor (CPU2, 0x02, 0x00000000, 0x00) { OperationRegion (STBL, SystemMemory, 0xFFFF0000, 0xFFFF) Name (NCPU, 0x80) Name (TYPE, 0x80000000) Name (HNDL, 0x80000000) Name (CFGD, 0x80000000) Name (TBLD, 0x80) Method (_PDC, 1, NotSerialized) { } } } /* For now only define 2 power states: * - S0 which is fully on * - S5 which is soft off * Any others would involve declaring the wake up methods. */ Name (\_S0, Package () { 0x00, 0x00, 0x00, 0x00 }) Name (\_S5, Package () { 0x02, 0x02, 0x00, 0x00 }) Name (PICM, 0x00) Method (_PIC, 1, NotSerialized) { Store (Arg0, PICM) } /* System bus */ Scope (\_SB) { /* Routing PCI0 */ Name (PR00, Package (0x0E) { Package (0x04){0x0001FFFF,0x00,LNKA,0x00}, /* EDMA INTA# */ Package (0x04){0x0002FFFF,0x00,LNKA,0x00}, /* PCIe port A */ Package (0x04){0x0002FFFF,0x01,LNKB,0x00}, Package (0x04){0x0002FFFF,0x02,LNKC,0x00}, Package (0x04){0x0002FFFF,0x03,LNKD,0x00}, Package (0x04){0x0003FFFF,0x00,LNKA,0x00}, /* PCIe port A1 */ Package (0x04){0x0003FFFF,0x01,LNKB,0x00}, Package (0x04){0x0003FFFF,0x02,LNKC,0x00}, Package (0x04){0x0003FFFF,0x03,LNKD,0x00}, Package (0x04){0x001CFFFF,0x00,LNKE,0x00}, /* PCIe port B */ Package (0x04){0x001DFFFF,0x00,LNKH,0x00}, /* UHCI/EHCI INTA# */ Package (0x04){0x001DFFFF,0x01,LNKD,0x00}, /* UHCI INTB# */ Package (0x04){0x001FFFFF,0x01,LNKD,0x00}, /* SATA/SMBUS INTB# */ Package (0x04){0x001FFFFF,0x03,LNKA,0x00} /* CHAP INTD# */ }) Name (AR00, Package (0x0E) { Package (0x04){0x0001FFFF,0x00,0x00,0x10}, /* EDMA INTA# */ Package (0x04){0x0002FFFF,0x00,0x00,0x10}, /* PCIe port A0 */ Package (0x04){0x0002FFFF,0x01,0x00,0x11}, Package (0x04){0x0002FFFF,0x02,0x00,0x12}, Package (0x04){0x0002FFFF,0x03,0x00,0x13}, Package (0x04){0x0003FFFF,0x00,0x00,0x10}, /* PCIe port A1 */ Package (0x04){0x0003FFFF,0x01,0x00,0x11}, Package (0x04){0x0003FFFF,0x02,0x00,0x12}, Package (0x04){0x0003FFFF,0x03,0x00,0x13}, Package (0x04){0x001CFFFF,0x00,0x00,0x14}, /* PCIe port B */ Package (0x04){0x001DFFFF,0x00,0x00,0x17}, /* UHCI/EHCI INTA# */ Package (0x04){0x001DFFFF,0x01,0x00,0x13}, /* UHCI INTB# */ Package (0x04){0x001FFFFF,0x01,0x00,0x13}, /* SATA/SMBUS INTB# */ Package (0x04){0x001FFFFF,0x0D,0x00,0x10} /* CHAP INTD# */ }) /* Routing PCIe Port A */ Name (PR0A, Package (0x04) { Package (0x04){0xFFFF,0x00,LNKA,0x00}, Package (0x04){0xFFFF,0x01,LNKB,0x00}, Package (0x04){0xFFFF,0x02,LNKC,0x00}, Package (0x04){0xFFFF,0x03,LNKD,0x00} }) Name (AR0A, Package (0x04) { Package (0x04){0xFFFF,0x00,0x00,0x10}, Package (0x04){0xFFFF,0x01,0x00,0x11}, Package (0x04){0xFFFF,0x02,0x00,0x12}, Package (0x04){0xFFFF,0x03,0x00,0x13} }) /* Routing PCIe Port B */ Name (PR0B, Package (0x04) { Package (0x04){0xFFFF,0x00,LNKA,0x00}, Package (0x04){0xFFFF,0x01,LNKB,0x00}, Package (0x04){0xFFFF,0x02,LNKC,0x00}, Package (0x04){0xFFFF,0x03,LNKD,0x00} }) Name (AR0B, Package (0x04) { Package (0x04){0xFFFF,0x00,0x00,0x10}, Package (0x04){0xFFFF,0x01,0x00,0x11}, Package (0x04){0xFFFF,0x02,0x00,0x12}, Package (0x04){0xFFFF,0x03,0x00,0x13} }) /* Routing Bus PCI */ Name (PR01, Package (0x04) { Package (0x04){0x0000FFFF,0x00,LNKA,0x00}, Package (0x04){0x0000FFFF,0x01,LNKB,0x00}, Package (0x04){0x0000FFFF,0x02,LNKC,0x00}, Package (0x04){0x0000FFFF,0x03,LNKD,0x00}, }) Name (AR01, Package (0x04) { Package (0x04){0x0000FFFF,0x00,0x00,0x10}, Package (0x04){0x0000FFFF,0x01,0x00,0x11}, Package (0x04){0x0000FFFF,0x02,0x00,0x12}, Package (0x04){0x0000FFFF,0x03,0x00,0x13}, }) Name (PRSA, ResourceTemplate () { IRQ (Level, ActiveLow, Shared, ) {3,4,5,6,7,10,11,12,14,15} }) Alias (PRSA, PRSB) Alias (PRSA, PRSC) Alias (PRSA, PRSD) Alias (PRSA, PRSE) Alias (PRSA, PRSF) Alias (PRSA, PRSG) Alias (PRSA, PRSH) Device (PCI0) { Name (_HID, EisaId ("PNP0A08")) Name (_CID, EisaId ("PNP0A03")) Name (_ADR, 0x00) Name (_SEG, 0x00) Name (_UID, 0x00) Name (_BBN, 0x00) Name (SUPP, 0) /* PCI _OSC Support Field Value */ Name (CTRL, 0) /* PCI _OSC Control Field Value */ Method (_OSC, 4) { /* Check for proper GUID */ If (LEqual (Arg0, ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) { /* Create DWORD-adressable field from the Capabilities Buffer */ CreateDWordField (Arg3, 0, CDW1) CreateDWordField (Arg3, 4, CDW2) CreateDWordField (Arg3, 8, CDW3) /* Save Capabilities DWord 2 & 3 */ Store (CDW2, SUPP) Store (CDW3, CTRL) /* Don't care of OS capabilites */ /* We support nothing (maybe we should add PCIe Capability Structure Control) */ And (CTRL, 0x00, CTRL) /* Query flag clear ? */ If (Not (And (CDW1, 1))) { /* Nothing to do */ } /* Unknown revision ? */ If (LNotEqual (Arg1, One)) { Or (CDW1, 0x08, CDW1) } /* Capabilities bits masked ? */ If (LNotEqual (CDW3, CTRL)) { Or (CDW1, 0x10, CDW1) } /* Update DWORD3 in the buffer */ Store (CTRL, CDW3) Return (Arg3) } Else { /* Unrecognized UUID */ Or (CDW1, 4, CDW1) Return (Arg3) } } /* End _OSC */ Method (_PRT, 0, NotSerialized) { If (PICM) { Return (AR00) } Return (PR00) } /* PCI Express Port A */ Device (EPA0) { Name (_ADR, 0x00020000) Method (_PRT, 0, NotSerialized) { If (PICM) { Return (AR0A) } Return (PR0A) } } /* PCI Express Port A1 */ Device (EPA1) { Name (_ADR, 0x00030000) Method (_PRT, 0, NotSerialized) { If (PICM) { Return (AR0A) } Return (PR0A) } } /* PCI Express Port B0 */ Device (EPB0) { Name (_ADR, 0x001C0000) Method (_PRT, 0, NotSerialized) { If (PICM) { Return (AR0B) } Return (PR0B) } } /* PCI Bridge */ Device (P0P1) { Name (_ADR, 0x001E0000) Method (_PRT, 0, NotSerialized) { If (PICM) { Return (AR01) } Return (PR01) } } /* LPC I/F Bridge */ Device (ISA) { Name (_ADR, 0x001F0000) /* MMCONF */ Device (^PCIE) { Name (_HID, EisaId ("PNP0C02")) Name (_UID, 0x11) Name (CRS, ResourceTemplate () { Memory32Fixed (ReadOnly, 0xE0000000, // Address Base 0x10000000, // Address Length _Y10) }) Method (_CRS, 0, NotSerialized) { CreateDWordField (CRS, \_SB.PCI0.PCIE._Y10._BAS, BAS1) CreateDWordField (CRS, \_SB.PCI0.PCIE._Y10._LEN, LEN1) Store (0xE0000000, BAS1) Store (0x10000000, LEN1) Return (CRS) } } /* PIC */ Device (PIC) { Name (_HID, EisaId ("PNP0000")) Name (_CRS, ResourceTemplate() { IO (Decode16, 0x0020, 0x0020, 0x00, 0x02, ) IO (Decode16, 0x00A0, 0x00A0, 0x00, 0x02, ) IRQNoFlags () {2} }) } /* Real time clock */ Device (RTC0) { Name (_HID, EisaId ("PNP0B00")) Name (_CRS, ResourceTemplate () { IO (Decode16, 0x0070, 0x0070, 0x00, 0x02) IRQNoFlags () {8} }) } Device (UAR1) { Name (_UID, 0x01) Name (_HID, EisaId ("PNP0501")) Method (_PRS, 0, NotSerialized) { Return (CMPR) } Name (CMPR, ResourceTemplate () { StartDependentFn (0x00, 0x00) { IO (Decode16,0x03F8,0x03F8,0x01,0x08) IRQNoFlags () {4} DMA (Compatibility, NotBusMaster, Transfer8) {} } StartDependentFnNoPri () { IO (Decode16,0x03F8,0x03F8,0x01,0x08) IRQNoFlags () {3,4,5,6,7,10,11,12} DMA (Compatibility, NotBusMaster, Transfer8) {} } StartDependentFnNoPri () { IO (Decode16,0x02F8,0x02F8,0x01,0x08) IRQNoFlags () {3,4,5,6,7,10,11,12} DMA (Compatibility, NotBusMaster, Transfer8) {} } StartDependentFnNoPri () { IO (Decode16,0x03E8,0x03E8,0x01,0x08) IRQNoFlags () {3,4,5,6,7,10,11,12} DMA (Compatibility, NotBusMaster, Transfer8) {} } StartDependentFnNoPri () { IO (Decode16,0x02E8,0x02E8,0x01,0x08) IRQNoFlags () {3,4,5,6,7,10,11,12} DMA (Compatibility, NotBusMaster, Transfer8) {} } EndDependentFn () }) } /* PS/2 keyboard (seems to be important for WinXP install) */ Device (KBD) { Name (_HID, EisaId ("PNP0303")) Method (_STA, 0, NotSerialized) { Return (0x0f) } Method (_CRS, 0, NotSerialized) { Name (TMP, ResourceTemplate () { IO (Decode16, 0x0060, 0x0060, 0x01, 0x01) IO (Decode16, 0x0064, 0x0064, 0x01, 0x01) IRQNoFlags () {1} }) Return (TMP) } } /* PS/2 mouse */ Device (MOU) { Name (_HID, EisaId ("PNP0F13")) Method (_STA, 0, NotSerialized) { Return (0x0f) } Method (_CRS, 0, NotSerialized) { Name (TMP, ResourceTemplate () { IRQNoFlags () {12} }) Return (TMP) } } /* COM ports of SIO */ Device(SIO) { OperationRegion (PT4E, SystemIO, 0x4E, 0x02) Field (PT4E, ByteAcc, NoLock, Preserve) { PO4E, 8, PO4F, 8 } IndexField (PO4E, PO4F, ByteAcc, NoLock, Preserve) { Offset (0x07), ILDN, 8, Offset (0x28), SIUI, 8, SIUC, 8, Offset (0x30), IACT, 8, Offset (0x60), IIOH, 8, IIOL, 8, Offset (0x70), IINT, 8 } Method (IENF, 0, NotSerialized) { Store (0x80, PO4E) Store (0x86, PO4E) } Method (IEXF, 0, NotSerialized) { Store (0x68, PO4E) Store (0x08, PO4E) } Device (COM1) { Name (_UID, 0x03) Name (_HID, EisaId ("PNP0501")) Method (_STA, 0, NotSerialized) { IENF () Store (0x04, ILDN) Store (IACT, Local0) IEXF () If (LEqual (Local0, 0xFF)) { Return (0x00) } If (LEqual (Local0, One)) { Return (0x0F) } Else { Return (0x0D) } } Method (_DIS, 0, NotSerialized) { IENF () Store (0x04, ILDN) Store (Zero, IACT) IEXF () } Method (_CRS, 0, NotSerialized) { Name (BFU1, ResourceTemplate () { IO (Decode16, 0x03F8, // Range Minimum 0x03F8, // Range Maximum 0x08, // Alignment 0x08, // Length _Y03) IRQNoFlags (_Y04) {5} }) CreateWordField (BFU1, \_SB.PCI0.ISA.SIO.COM1._CRS._Y03._MIN, IMIN) CreateWordField (BFU1, \_SB.PCI0.ISA.SIO.COM1._CRS._Y03._MAX, IMAX) CreateWordField (BFU1, \_SB.PCI0.ISA.SIO.COM1._CRS._Y04._INT, IRQ0) IENF () Store (0x04, ILDN) Store (IIOH, Local0) ShiftLeft (Local0, 0x08, Local1) Store (IIOL, Local0) Add (Local1, Local0, Local0) Store (Local0, IMIN) Store (Local0, IMAX) Store (IINT, Local0) IEXF () Store (0x01, Local1) ShiftLeft (Local1, Local0, IRQ0) Return (BFU1) } Name (_PRS, ResourceTemplate () { StartDependentFnNoPri () { IO (Decode16, 0x03F8, // Range Minimum 0x03F8, // Range Maximum 0x08, // Alignment 0x08, // Length ) IRQNoFlags () {5} } StartDependentFnNoPri () { IO (Decode16, 0x02F8, // Range Minimum 0x02F8, // Range Maximum 0x08, // Alignment 0x08, // Length ) IRQNoFlags () {9} } EndDependentFn () }) Method (_SRS, 1, NotSerialized) { CreateByteField (Arg0, 0x02, IOLO) CreateByteField (Arg0, 0x03, IOHI) CreateWordField (Arg0, 0x09, IRQ0) IENF () Store (0x04, ILDN) Store (Zero, IACT) Store (IOLO, IIOL) Store (IOHI, IIOH) FindSetRightBit (IRQ0, Local0) If (LGreater (Local0, 0x00)) { Decrement (Local0) } Store (Local0, IINT) Store (One, IACT) IEXF () } } /* COM1 */ Device (COM2) { Name (_UID, 0x04) Name (_HID, EisaId ("PNP0501")) Method (_STA, 0, NotSerialized) { IENF () Store (0x05, ILDN) Store (IACT, Local0) IEXF () If (LEqual (Local0, 0xFF)) { Return (0x00) } If (LEqual (Local0, One)) { Return (0x0F) } Else { Return (0x0D) } } Method (_DIS, 0, NotSerialized) { IENF () Store (0x05, ILDN) Store (Zero, IACT) IEXF () } Method (_CRS, 0, NotSerialized) { Name (BFU1, ResourceTemplate () { IO (Decode16, 0x03F8, // Range Minimum 0x03F8, // Range Maximum 0x08, // Alignment 0x08, // Length _Y05) IRQNoFlags (_Y06) {9} }) CreateWordField (BFU1, \_SB.PCI0.ISA.SIO.COM2._CRS._Y05._MIN, IMIN) CreateWordField (BFU1, \_SB.PCI0.ISA.SIO.COM2._CRS._Y05._MAX, IMAX) CreateWordField (BFU1, \_SB.PCI0.ISA.SIO.COM2._CRS._Y06._INT, IRQ0) IENF () Store (0x05, ILDN) Store (IIOH, Local0) ShiftLeft (Local0, 0x08, Local1) Store (IIOL, Local0) Add (Local1, Local0, Local0) Store (Local0, IMIN) Store (Local0, IMAX) Store (IINT, Local0) IEXF () Store (0x01, Local1) ShiftLeft (Local1, Local0, IRQ0) Return (BFU1) } Name (_PRS, ResourceTemplate () { StartDependentFnNoPri () { IO (Decode16, 0x03F8, // Range Minimum 0x03F8, // Range Maximum 0x08, // Alignment 0x08, // Length ) IRQNoFlags () {5} } StartDependentFnNoPri () { IO (Decode16, 0x02F8, // Range Minimum 0x02F8, // Range Maximum 0x08, // Alignment 0x08, // Length ) IRQNoFlags () {9} } EndDependentFn () }) Method (_SRS, 1, NotSerialized) { CreateByteField (Arg0, 0x02, IOLO) CreateByteField (Arg0, 0x03, IOHI) CreateWordField (Arg0, 0x09, IRQ0) IENF () Store (0x05, ILDN) Store (Zero, IACT) Store (IOLO, IIOL) Store (IOHI, IIOH) FindSetRightBit (IRQ0, Local0) If (LGreater (Local0, 0x00)) { Decrement (Local0) } Store (Local0, IINT) Store (One, IACT) IEXF () } } /* COM2 */ } /* Device SIO */ } /* Device ISA */ } /* Device PCI 0*/ } /* Scope SB */ OperationRegion (_SB.PCI0.ISA.PIX0, PCI_Config, 0x60, 0x0C) Field (\_SB.PCI0.ISA.PIX0, ByteAcc, NoLock, Preserve) { PIRA, 8, PIRB, 8, PIRC, 8, PIRD, 8, Offset (0x08), PIRE, 8, PIRF, 8, PIRG, 8, PIRH, 8 } Scope (_SB) { Name (BUFA, ResourceTemplate () { IRQ (Level, ActiveLow, Shared, _Y1C) {15} }) CreateWordField (BUFA, \_SB._Y1C._INT, IRA0) Device (LNKA) { Name (_HID, EisaId ("PNP0C0F")) Name (_UID, 0x01) Method (_STA, 0, NotSerialized) { And (PIRA, 0x80, Local0) If (Local0) { Return (0x09) } Else { Return (0x0B) } } Method (_PRS, 0, NotSerialized) { Return (PRSA) } Method (_DIS, 0, NotSerialized) { Or (PIRA, 0x80, PIRA) } Method (_CRS, 0, NotSerialized) { And (PIRA, 0x0F, Local0) ShiftLeft (0x01, Local0, IRA0) Return (BUFA) } Method (_SRS, 1, NotSerialized) { CreateWordField (Arg0, 0x01, IRA) FindSetRightBit (IRA, Local0) Decrement (Local0) Store (Local0, PIRA) } } Device (LNKB) { Name (_HID, EisaId ("PNP0C0F")) Name (_UID, 0x02) Method (_STA, 0, NotSerialized) { And (PIRB, 0x80, Local0) If (Local0) { Return (0x09) } Else { Return (0x0B) } } Method (_PRS, 0, NotSerialized) { Return (PRSB) } Method (_DIS, 0, NotSerialized) { Or (PIRB, 0x80, PIRB) } Method (_CRS, 0, NotSerialized) { And (PIRB, 0x0F, Local0) ShiftLeft (0x01, Local0, IRA0) Return (BUFA) } Method (_SRS, 1, NotSerialized) { CreateWordField (Arg0, 0x01, IRA) FindSetRightBit (IRA, Local0) Decrement (Local0) Store (Local0, PIRB) } } Device (LNKC) { Name (_HID, EisaId ("PNP0C0F")) Name (_UID, 0x03) Method (_STA, 0, NotSerialized) { And (PIRC, 0x80, Local0) If (Local0) { Return (0x09) } Else { Return (0x0B) } } Method (_PRS, 0, NotSerialized) { Return (PRSC) } Method (_DIS, 0, NotSerialized) { Or (PIRC, 0x80, PIRC) } Method (_CRS, 0, NotSerialized) { And (PIRC, 0x0F, Local0) ShiftLeft (0x01, Local0, IRA0) Return (BUFA) } Method (_SRS, 1, NotSerialized) { CreateWordField (Arg0, 0x01, IRA) FindSetRightBit (IRA, Local0) Decrement (Local0) Store (Local0, PIRC) } } Device (LNKD) { Name (_HID, EisaId ("PNP0C0F")) Name (_UID, 0x04) Method (_STA, 0, NotSerialized) { And (PIRD, 0x80, Local0) If (Local0) { Return (0x09) } Else { Return (0x0B) } } Method (_PRS, 0, NotSerialized) { Return (PRSD) } Method (_DIS, 0, NotSerialized) { Or (PIRD, 0x80, PIRD) } Method (_CRS, 0, NotSerialized) { And (PIRD, 0x0F, Local0) ShiftLeft (0x01, Local0, IRA0) Return (BUFA) } Method (_SRS, 1, NotSerialized) { CreateWordField (Arg0, 0x01, IRA) FindSetRightBit (IRA, Local0) Decrement (Local0) Store (Local0, PIRD) } } Device (LNKE) { Name (_HID, EisaId ("PNP0C0F")) Name (_UID, 0x05) Method (_STA, 0, NotSerialized) { And (PIRE, 0x80, Local0) If (Local0) { Return (0x09) } Else { Return (0x0B) } } Method (_PRS, 0, NotSerialized) { Return (PRSE) } Method (_DIS, 0, NotSerialized) { Or (PIRE, 0x80, PIRE) } Method (_CRS, 0, NotSerialized) { And (PIRE, 0x0F, Local0) ShiftLeft (0x01, Local0, IRA0) Return (BUFA) } Method (_SRS, 1, NotSerialized) { CreateWordField (Arg0, 0x01, IRA) FindSetRightBit (IRA, Local0) Decrement (Local0) Store (Local0, PIRE) } } Device (LNKF) { Name (_HID, EisaId ("PNP0C0F")) Name (_UID, 0x06) Method (_STA, 0, NotSerialized) { And (PIRF, 0x80, Local0) If (Local0) { Return (0x09) } Else { Return (0x0B) } } Method (_PRS, 0, NotSerialized) { Return (PRSF) } Method (_DIS, 0, NotSerialized) { Or (PIRF, 0x80, PIRF) } Method (_CRS, 0, NotSerialized) { And (PIRF, 0x0F, Local0) ShiftLeft (0x01, Local0, IRA0) Return (BUFA) } Method (_SRS, 1, NotSerialized) { CreateWordField (Arg0, 0x01, IRA) FindSetRightBit (IRA, Local0) Decrement (Local0) Store (Local0, PIRF) } } Device (LNKG) { Name (_HID, EisaId ("PNP0C0F")) Name (_UID, 0x07) Method (_STA, 0, NotSerialized) { And (PIRG, 0x80, Local0) If (Local0) { Return (0x09) } Else { Return (0x0B) } } Method (_PRS, 0, NotSerialized) { Return (PRSG) } Method (_DIS, 0, NotSerialized) { Or (PIRG, 0x80, PIRG) } Method (_CRS, 0, NotSerialized) { And (PIRG, 0x0F, Local0) ShiftLeft (0x01, Local0, IRA0) Return (BUFA) } Method (_SRS, 1, NotSerialized) { CreateWordField (Arg0, 0x01, IRA) FindSetRightBit (IRA, Local0) Decrement (Local0) Store (Local0, PIRG) } } Device (LNKH) { Name (_HID, EisaId ("PNP0C0F")) Name (_UID, 0x08) Method (_STA, 0, NotSerialized) { And (PIRH, 0x80, Local0) If (Local0) { Return (0x09) } Else { Return (0x0B) } } Method (_PRS, 0, NotSerialized) { Return (PRSH) } Method (_DIS, 0, NotSerialized) { Or (PIRH, 0x80, PIRH) } Method (_CRS, 0, NotSerialized) { And (PIRH, 0x0F, Local0) ShiftLeft (0x01, Local0, IRA0) Return (BUFA) } Method (_SRS, 1, NotSerialized) { CreateWordField (Arg0, 0x01, IRA) FindSetRightBit (IRA, Local0) Decrement (Local0) Store (Local0, PIRH) } } } }