Interrupt storm on acpi0 occurred after madt.c change

Sangwoo Shim ssw at neo.redjade.org
Fri Jan 30 08:43:39 PST 2004


Hi.
I've experienced interrupt storm on acpi0 after your v1.10 madt.c commit.
(which is located at src/sys/i386/acpica/madt.c);
What really makes me frustrating is this storm wasn't here before 1.10 change,
which is exactly stand against your commit log message. :-(
I've recompiled kernel with v1.9 of madt.c and the problem didn't occur.

I'm using ASUS P2B-D with two p3-650 processors.
BIOS version is 1014 beta 3 (which is the last published one);

My kernel config is stripped GENERIC, which includes
option	CPU_FASTER_5X86_FPU
option	CPU_ENABLE_SSE
device	acpi		# Mine hangs with acpi loaded as module.

Attached file is my acpidump -t -d output.
Thanks.
-------------- next part --------------
/*
  RSD PTR: OEM=ASUS, ACPI_Rev=1.0x (0)
	RSDT=0x0fffd000, cksum=135
 */
/*
  RSDT: Length=48, Revision=1, Checksum=24,
	OEMID=ASUS, OEM Table ID=P2B-D, OEM Revision=0x58582e33,
	Creator ID=MSFT, Creator Revision=0x31313031
	Entries={ 0x0fffd100, 0x0fffd040, 0x0fffd080 }
 */
/*
  FADT:	FACS=0xffff000, DSDT=0xfffd180
	INT_MODEL=PIC
	Preferred_PM_Profile=Unspecified (0)
	SCI_INT=9
	SMI_CMD=0xb2, ACPI_ENABLE=0xa1, ACPI_DISABLE=0xa0, S4BIOS_REQ=0x0
	PSTATE_CNT=0x0
	PM1a_EVT_BLK=0xe400-0xe403
	PM1a_CNT_BLK=0xe404-0xe405
	PM_TMR_BLK=0xe408-0xe40b
	GPE0_BLK=0xe40c-0xe40f
	P_LVL2_LAT=190 us, P_LVL3_LAT=1900 us
	FLUSH_SIZE=0, FLUSH_STRIDE=0
	DUTY_OFFSET=1, DUTY_WIDTH=0
	DAY_ALRM=13, MON_ALRM=0, CENTURY=0
	IAPC_BOOT_ARCH=
	Flags={WBINVD,PROC_C1,SLP_BUTTON,RTC_S4}
 */
/*
  FACS:	Length=64, HwSig=0x00000000, Firm_Wake_Vec=0x00000000
	Global_Lock=
	Flags=
	Version=0
 */
/*
  DSDT: Length=7518, Revision=1, Checksum=14,
	OEMID=ASUS, OEM Table ID=P2B-D, OEM Revision=0x1000,
	Creator ID=MSFT, Creator Revision=0x1000001
 */
/*
  BOOT: Length=40, Revision=1, Checksum=62,
	OEMID=ASUS, OEM Table ID=P2B-D, OEM Revision=0x58582e33,
	Creator ID=MSFT, Creator Revision=0x31313031
 */
/*
  APIC: Length=92, Revision=1, Checksum=95,
	OEMID=ASUS, OEM Table ID=P2B-D, OEM Revision=0x58582e33,
	Creator ID=MSFT, Creator Revision=0x31313031
	Local APIC ADDR=0xfee00000
	Flags={PC-AT}

	Type=IO APIC
	APIC ID=2
	INT BASE=0
	ADDR=0x00000000fec00000

	Type=INT Override
	BUS=0
	IRQ=0
	INTR=2
	Flags={Polarity=conforming, Trigger=edge}

	Type=INT Override
	BUS=0
	IRQ=9
	INTR=20
	Flags={Polarity=active-hi, Trigger=level}

	Type=Local APIC
	ACPI CPU=0
	Flags={ENABLED}
	APIC ID=1

	Type=Local APIC
	ACPI CPU=1
	Flags={ENABLED}
	APIC ID=0
 */
/*
 * Intel ACPI Component Architecture
 * AML Disassembler version 20031203
 *
 * Disassembly of /tmp/acpidump.vLE7w8, Sat Jan 31 01:03:38 2004
 */
DefinitionBlock ("DSDT.aml", "DSDT", 1, "ASUS", "P2B-D   ", 4096)
{
    Scope (\_PR)
    {
        Processor (\_PR.CPU, 0x00, 0x00000000, 0x00) {}
        Processor (\_PR.CPU1, 0x01, 0x00000000, 0x00) {}
    }

    Name (\_S0, Package (0x04)
    {
        0x05, 
        0x05, 
        0x00, 
        0x00
    })
    Name (\_S1, Package (0x04)
    {
        0x07, 
        0x07, 
        0x00, 
        0x00
    })
    Name (\_S4, Package (0x04)
    {
        0x06, 
        0x06, 
        0x00, 
        0x00
    })
    Name (\_S5, Package (0x04)
    {
        0x06, 
        0x06, 
        0x00, 
        0x00
    })
    OperationRegion (\DEBG, SystemIO, 0x80, 0x01)
    Field (\DEBG, ByteAcc, NoLock, Preserve)
    {
        DBG1,   8
    }

    OperationRegion (GPOB, SystemIO, 0xE42C, 0x10)
    Field (GPOB, ByteAcc, NoLock, Preserve)
    {
        Offset (0x03), 
        TO12,   1, 
        Offset (0x08), 
        FANM,   1, 
        Offset (0x09), 
        PLED,   1, 
            ,   3, 
            ,   2, 
            ,   16, 
        MSG0,   1
    }

    Name (\PICF, 0x00)
    Method (_PIC, 1, NotSerialized)
    {
        Store (Arg0, \PICF)
    }

    Method (\_PTS, 1, NotSerialized)
    {
        If (LNot (LEqual (Arg0, 0x05)))
        {
            Store (0x00, FANM)
            Store (0x00, PLED)
        }

        If (LEqual (Arg0, 0x01))
        {
            Store (One, TO12)
        }

        If (LEqual (Arg0, 0x02)) {}
        Store (One, TO12)
        Or (Arg0, 0xF0, Local2)
        Store (Local2, DBG1)
    }

    Method (\_WAK, 1, NotSerialized)
    {
        Notify (\_SB.PWRB, 0x02)
        Store (0x01, FANM)
        Store (One, PLED)
        Store (0xFF, DBG1)
    }

    Scope (\_SI)
    {
        Method (_MSG, 1, NotSerialized)
        {
            If (LEqual (Arg0, Zero))
            {
                Store (One, MSG0)
            }
            Else
            {
                Store (Zero, MSG0)
            }
        }
    }

    Scope (\_SB)
    {
        Device (PWRB)
        {
            Name (_HID, EisaId ("PNP0C0C"))
            Method (_STA, 0, NotSerialized)
            {
                Return (0x0B)
            }
        }

        OperationRegion (MGRM, SystemMemory, 0x04E3, 0x02)
        Field (MGRM, WordAcc, NoLock, Preserve)
        {
            MEM0,   16
        }

        Method (MEMS, 0, NotSerialized)
        {
            Return (MEM0)
        }

        Device (MEM)
        {
            Name (_HID, EisaId ("PNP0C01"))
            Method (_CRS, 0, NotSerialized)
            {
                Name (BUF1, Buffer (0x4A)
                {
                    0x86, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
                    0x00, 0x00, 0x0A, 0x00, 0x86, 0x09, 0x00, 0x00, 
                    0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x01, 0x00, 
                    0x86, 0x09, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 
                    0x00, 0x00, 0x00, 0x00, 0x86, 0x09, 0x00, 0x01, 
                    0x00, 0x00, 0xC0, 0xFE, 0x00, 0x10, 0x00, 0x00, 
                    0x86, 0x09, 0x00, 0x01, 0x00, 0x00, 0xE0, 0xFE, 
                    0x00, 0x10, 0x00, 0x00, 0x86, 0x09, 0x00, 0x00, 
                    0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x02, 0x00, 
                    0x79, 0x00
                })
                CreateDWordField (BUF1, 0x20, EMLN)
                Store (MEMS (), EMLN)
                ShiftLeft (EMLN, 0x14, EMLN)
                Return (BUF1)
            }
        }

        Device (LNKA)
        {
            Name (_HID, EisaId ("PNP0C0F"))
            Name (_UID, 0x01)
            Method (_STA, 0, NotSerialized)
            {
                And (\_SB.PCI0.PX40.PIRA, 0x8F, Local0)
                If (LLess (Local0, 0x80))
                {
                    Return (0x0B)
                }
                Else
                {
                    Return (0x09)
                }
            }

            Name (_PRS, Buffer (0x06)
            {
                0x23, 0xF8, 0xDE, 0x18, 0x79, 0x00
            })
            Method (_DIS, 0, NotSerialized)
            {
                Store (0x80, \_SB.PCI0.PX40.PIRA)
            }

            Method (_CRS, 0, NotSerialized)
            {
                Name (BUFA, Buffer (0x06)
                {
                    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                })
                CreateWordField (BUFA, 0x01, IRA)
                And (\_SB.PCI0.PX40.PIRA, 0x8F, Local0)
                If (LLess (Local0, 0x80))
                {
                    And (Local0, 0x0F, Local0)
                    ShiftLeft (One, Local0, Local1)
                    Store (Local1, IRA)
                }

                Return (BUFA)
            }

            Method (_SRS, 1, NotSerialized)
            {
                CreateByteField (Arg0, 0x01, IRA1)
                CreateByteField (Arg0, 0x02, IRA2)
                ShiftLeft (IRA2, 0x08, Local0)
                Or (Local0, IRA1, Local0)
                Store (0x00, Local1)
                ShiftRight (Local0, 0x01, Local0)
                While (LGreater (Local0, 0x00))
                {
                    Increment (Local1)
                    ShiftRight (Local0, 0x01, Local0)
                }

                And (\_SB.PCI0.PX40.PIRA, 0x70, Local0)
                Or (Local1, Local0, \_SB.PCI0.PX40.PIRA)
            }
        }

        Device (LNKB)
        {
            Name (_HID, EisaId ("PNP0C0F"))
            Name (_UID, 0x02)
            Method (_STA, 0, NotSerialized)
            {
                And (\_SB.PCI0.PX40.PIRB, 0x8F, Local0)
                If (LLess (Local0, 0x80))
                {
                    Return (0x0B)
                }
                Else
                {
                    Return (0x09)
                }
            }

            Name (_PRS, Buffer (0x06)
            {
                0x23, 0xF8, 0xDE, 0x18, 0x79, 0x00
            })
            Method (_DIS, 0, NotSerialized)
            {
                Store (0x80, \_SB.PCI0.PX40.PIRB)
            }

            Method (_CRS, 0, NotSerialized)
            {
                Name (BUFB, Buffer (0x06)
                {
                    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                })
                CreateWordField (BUFB, 0x01, IRB)
                And (\_SB.PCI0.PX40.PIRB, 0x8F, Local0)
                If (LLess (Local0, 0x80))
                {
                    And (Local0, 0x0F, Local0)
                    ShiftLeft (One, Local0, Local1)
                    Store (Local1, IRB)
                }

                Return (BUFB)
            }

            Method (_SRS, 1, NotSerialized)
            {
                CreateByteField (Arg0, 0x01, IRB1)
                CreateByteField (Arg0, 0x02, IRB2)
                ShiftLeft (IRB2, 0x08, Local0)
                Or (Local0, IRB1, Local0)
                Store (0x00, Local1)
                ShiftRight (Local0, 0x01, Local0)
                While (LGreater (Local0, 0x00))
                {
                    Increment (Local1)
                    ShiftRight (Local0, 0x01, Local0)
                }

                And (\_SB.PCI0.PX40.PIRB, 0x70, Local0)
                Or (Local1, Local0, \_SB.PCI0.PX40.PIRB)
            }
        }

        Device (LNKC)
        {
            Name (_HID, EisaId ("PNP0C0F"))
            Name (_UID, 0x03)
            Method (_STA, 0, NotSerialized)
            {
                And (\_SB.PCI0.PX40.PIRC, 0x8F, Local0)
                If (LLess (Local0, 0x80))
                {
                    Return (0x0B)
                }
                Else
                {
                    Return (0x09)
                }
            }

            Name (_PRS, Buffer (0x06)
            {
                0x23, 0xF8, 0xDE, 0x18, 0x79, 0x00
            })
            Method (_DIS, 0, NotSerialized)
            {
                Store (0x80, \_SB.PCI0.PX40.PIRC)
            }

            Method (_CRS, 0, NotSerialized)
            {
                Name (BUFC, Buffer (0x06)
                {
                    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                })
                CreateWordField (BUFC, 0x01, IRC)
                And (\_SB.PCI0.PX40.PIRC, 0x8F, Local0)
                If (LLess (Local0, 0x80))
                {
                    And (Local0, 0x0F, Local0)
                    ShiftLeft (One, Local0, Local1)
                    Store (Local1, IRC)
                }

                Return (BUFC)
            }

            Method (_SRS, 1, NotSerialized)
            {
                CreateByteField (Arg0, 0x01, IRC1)
                CreateByteField (Arg0, 0x02, IRC2)
                ShiftLeft (IRC2, 0x08, Local0)
                Or (Local0, IRC1, Local0)
                Store (0x00, Local1)
                ShiftRight (Local0, 0x01, Local0)
                While (LGreater (Local0, 0x00))
                {
                    Increment (Local1)
                    ShiftRight (Local0, 0x01, Local0)
                }

                And (\_SB.PCI0.PX40.PIRC, 0x70, Local0)
                Or (Local1, Local0, \_SB.PCI0.PX40.PIRC)
            }
        }

        Device (LNKD)
        {
            Name (_HID, EisaId ("PNP0C0F"))
            Name (_UID, 0x04)
            Method (_STA, 0, NotSerialized)
            {
                And (\_SB.PCI0.PX40.PIRD, 0x8F, Local0)
                If (LLess (Local0, 0x80))
                {
                    Return (0x0B)
                }
                Else
                {
                    Return (0x09)
                }
            }

            Name (_PRS, Buffer (0x06)
            {
                0x23, 0xF8, 0xDE, 0x18, 0x79, 0x00
            })
            Method (_DIS, 0, NotSerialized)
            {
                Store (0x80, \_SB.PCI0.PX40.PIRD)
            }

            Method (_CRS, 0, NotSerialized)
            {
                Name (BUFD, Buffer (0x06)
                {
                    0x23, 0x00, 0x00, 0x18, 0x79, 0x00
                })
                CreateWordField (BUFD, 0x01, IRD)
                And (\_SB.PCI0.PX40.PIRD, 0x8F, Local0)
                If (LLess (Local0, 0x80))
                {
                    And (Local0, 0x0F, Local0)
                    ShiftLeft (One, Local0, Local1)
                    Store (Local1, IRD)
                }

                Return (BUFD)
            }

            Method (_SRS, 1, NotSerialized)
            {
                CreateByteField (Arg0, 0x01, IRD1)
                CreateByteField (Arg0, 0x02, IRD2)
                ShiftLeft (IRD2, 0x08, Local0)
                Or (Local0, IRD1, Local0)
                Store (0x00, Local1)
                ShiftRight (Local0, 0x01, Local0)
                While (LGreater (Local0, 0x00))
                {
                    Increment (Local1)
                    ShiftRight (Local0, 0x01, Local0)
                }

                And (\_SB.PCI0.PX40.PIRD, 0x70, Local0)
                Or (Local1, Local0, \_SB.PCI0.PX40.PIRD)
            }
        }

        Device (PCI0)
        {
            Name (_HID, EisaId ("PNP0A03"))
            Name (_ADR, 0x00)
            Name (CRES, Buffer (0x88)
            {
                0x88, 0x0D, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 
                0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 
                0x47, 0x01, 0xF8, 0x0C, 0xF8, 0x0C, 0x01, 0x08, 
                0x88, 0x0D, 0x00, 0x01, 0x0C, 0x03, 0x00, 0x00, 
                0x00, 0x00, 0xF7, 0x0C, 0x00, 0x00, 0xF8, 0x0C, 
                0x88, 0x0D, 0x00, 0x01, 0x0C, 0x03, 0x00, 0x00, 
                0x00, 0x0D, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF3, 
                0x87, 0x17, 0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 
                0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0xFF, 0xFF, 
                0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                0x02, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0C, 0x03, 
                0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0C, 0x00, 
                0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 
                0x00, 0x80, 0x01, 0x00, 0x87, 0x17, 0x00, 0x00, 
                0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                0x10, 0x00, 0xFF, 0xFF, 0xFD, 0xFF, 0x00, 0x00, 
                0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x79, 0x00
            })
            Method (_CRS, 0, NotSerialized)
            {
                CreateDWordField (CRES, 0x76, RAMT)
                CreateDWordField (CRES, 0x82, RAMR)
                Add (MEMS (), 0x01, RAMT)
                ShiftLeft (RAMT, 0x14, RAMT)
                Subtract (0xFFFE0000, RAMT, RAMR)
                Return (CRES)
            }

            Name (PICM, Package (0x18)
            {
                Package (0x04)
                {
                    0x000CFFFF, 
                    0x00, 
                    \_SB.LNKA, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x000CFFFF, 
                    0x01, 
                    \_SB.LNKB, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x000CFFFF, 
                    0x02, 
                    \_SB.LNKC, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x000CFFFF, 
                    0x03, 
                    \_SB.LNKD, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x000BFFFF, 
                    0x00, 
                    \_SB.LNKB, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x000BFFFF, 
                    0x01, 
                    \_SB.LNKC, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x000BFFFF, 
                    0x02, 
                    \_SB.LNKD, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x000BFFFF, 
                    0x03, 
                    \_SB.LNKA, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x000AFFFF, 
                    0x00, 
                    \_SB.LNKC, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x000AFFFF, 
                    0x01, 
                    \_SB.LNKD, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x000AFFFF, 
                    0x02, 
                    \_SB.LNKA, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x000AFFFF, 
                    0x03, 
                    \_SB.LNKB, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0009FFFF, 
                    0x00, 
                    \_SB.LNKD, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0009FFFF, 
                    0x01, 
                    \_SB.LNKA, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0009FFFF, 
                    0x02, 
                    \_SB.LNKB, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0009FFFF, 
                    0x03, 
                    \_SB.LNKC, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0004FFFF, 
                    0x00, 
                    \_SB.LNKA, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0004FFFF, 
                    0x01, 
                    \_SB.LNKB, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0004FFFF, 
                    0x02, 
                    \_SB.LNKC, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0004FFFF, 
                    0x03, 
                    \_SB.LNKD, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0001FFFF, 
                    0x00, 
                    \_SB.LNKA, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0001FFFF, 
                    0x01, 
                    \_SB.LNKB, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0001FFFF, 
                    0x02, 
                    \_SB.LNKC, 
                    0x00
                }, 

                Package (0x04)
                {
                    0x0001FFFF, 
                    0x03, 
                    \_SB.LNKD, 
                    0x00
                }
            })
            Name (APIC, Package (0x18)
            {
                Package (0x04)
                {
                    0x000CFFFF, 
                    0x00, 
                    0x00, 
                    0x10
                }, 

                Package (0x04)
                {
                    0x000CFFFF, 
                    0x01, 
                    0x00, 
                    0x11
                }, 

                Package (0x04)
                {
                    0x000CFFFF, 
                    0x02, 
                    0x00, 
                    0x12
                }, 

                Package (0x04)
                {
                    0x000CFFFF, 
                    0x03, 
                    0x00, 
                    0x13
                }, 

                Package (0x04)
                {
                    0x000BFFFF, 
                    0x00, 
                    0x00, 
                    0x11
                }, 

                Package (0x04)
                {
                    0x000BFFFF, 
                    0x01, 
                    0x00, 
                    0x12
                }, 

                Package (0x04)
                {
                    0x000BFFFF, 
                    0x02, 
                    0x00, 
                    0x13
                }, 

                Package (0x04)
                {
                    0x000BFFFF, 
                    0x03, 
                    0x00, 
                    0x10
                }, 

                Package (0x04)
                {
                    0x000AFFFF, 
                    0x00, 
                    0x00, 
                    0x12
                }, 

                Package (0x04)
                {
                    0x000AFFFF, 
                    0x01, 
                    0x00, 
                    0x13
                }, 

                Package (0x04)
                {
                    0x000AFFFF, 
                    0x02, 
                    0x00, 
                    0x10
                }, 

                Package (0x04)
                {
                    0x000AFFFF, 
                    0x03, 
                    0x00, 
                    0x11
                }, 

                Package (0x04)
                {
                    0x0009FFFF, 
                    0x00, 
                    0x00, 
                    0x13
                }, 

                Package (0x04)
                {
                    0x0009FFFF, 
                    0x01, 
                    0x00, 
                    0x10
                }, 

                Package (0x04)
                {
                    0x0009FFFF, 
                    0x02, 
                    0x00, 
                    0x11
                }, 

                Package (0x04)
                {
                    0x0009FFFF, 
                    0x03, 
                    0x00, 
                    0x12
                }, 

                Package (0x04)
                {
                    0x0004FFFF, 
                    0x00, 
                    0x00, 
                    0x10
                }, 

                Package (0x04)
                {
                    0x0004FFFF, 
                    0x01, 
                    0x00, 
                    0x11
                }, 

                Package (0x04)
                {
                    0x0004FFFF, 
                    0x02, 
                    0x00, 
                    0x12
                }, 

                Package (0x04)
                {
                    0x0004FFFF, 
                    0x03, 
                    0x00, 
                    0x13
                }, 

                Package (0x04)
                {
                    0x0001FFFF, 
                    0x00, 
                    0x00, 
                    0x10
                }, 

                Package (0x04)
                {
                    0x0001FFFF, 
                    0x01, 
                    0x00, 
                    0x11
                }, 

                Package (0x04)
                {
                    0x0001FFFF, 
                    0x02, 
                    0x00, 
                    0x12
                }, 

                Package (0x04)
                {
                    0x0001FFFF, 
                    0x03, 
                    0x00, 
                    0x13
                }
            })
            Method (_PRT, 0, NotSerialized)
            {
                If (LNot (\PICF))
                {
                    Return (PICM)
                }
                Else
                {
                    Return (APIC)
                }
            }

            Device (PX40)
            {
                Name (_ADR, 0x00040000)
                OperationRegion (PIRQ, PCI_Config, 0x60, 0x04)
                Field (PIRQ, ByteAcc, NoLock, Preserve)
                {
                    PIRA,   8, 
                    PIRB,   8, 
                    PIRC,   8, 
                    PIRD,   8
                }

                Device (SYSR)
                {
                    Name (_HID, EisaId ("PNP0C02"))
                    Method (_CRS, 0, NotSerialized)
                    {
                        Name (BUF1, Buffer (0x72)
                        {
                            0x47, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 
                            0x47, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 
                            0x47, 0x01, 0x94, 0x02, 0x94, 0x02, 0x01, 0x04, 
                            0x47, 0x01, 0x10, 0x00, 0x10, 0x00, 0x01, 0x10, 
                            0x47, 0x01, 0x22, 0x00, 0x22, 0x00, 0x01, 0x1E, 
                            0x47, 0x01, 0x44, 0x00, 0x44, 0x00, 0x01, 0x1C, 
                            0x47, 0x01, 0x62, 0x00, 0x62, 0x00, 0x01, 0x02, 
                            0x47, 0x01, 0x65, 0x00, 0x65, 0x00, 0x01, 0x0B, 
                            0x47, 0x01, 0x74, 0x00, 0x74, 0x00, 0x01, 0x0C, 
                            0x47, 0x01, 0x91, 0x00, 0x91, 0x00, 0x01, 0x03, 
                            0x47, 0x01, 0xA2, 0x00, 0xA2, 0x00, 0x01, 0x1E, 
                            0x47, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0x01, 0x10, 
                            0x47, 0x01, 0xF0, 0x03, 0xF0, 0x03, 0x01, 0x02, 
                            0x47, 0x01, 0xD0, 0x04, 0xD0, 0x04, 0x01, 0x02, 
                            0x79, 0x00
                        })
                        CreateByteField (BUF1, 0x02, PMLO)
                        CreateByteField (BUF1, 0x03, PMHI)
                        CreateByteField (BUF1, 0x04, PMRL)
                        CreateByteField (BUF1, 0x05, PMRH)
                        CreateByteField (BUF1, 0x0A, SBLO)
                        CreateByteField (BUF1, 0x0B, SBHI)
                        CreateByteField (BUF1, 0x0C, SBRL)
                        CreateByteField (BUF1, 0x0D, SBRH)
                        Store (\_SB.PCI0.PX43.PM00, Local0)
                        And (Local0, 0xFE, PMLO)
                        Store (\_SB.PCI0.PX43.PM01, PMHI)
                        Store (\_SB.PCI0.PX43.SB00, Local0)
                        And (Local0, 0xFE, SBLO)
                        Store (\_SB.PCI0.PX43.SB01, SBHI)
                        Store (PMLO, PMRL)
                        Store (PMHI, PMRH)
                        Store (SBLO, SBRL)
                        Store (SBHI, SBRH)
                        Return (BUF1)
                    }
                }

                Device (PIC)
                {
                    Name (_HID, EisaId ("PNP0000"))
                    Name (_CRS, Buffer (0x15)
                    {
                        0x47, 0x01, 0x20, 0x00, 0x20, 0x00, 0x01, 0x02, 
                        0x47, 0x01, 0xA0, 0x00, 0xA0, 0x00, 0x01, 0x02, 
                        0x22, 0x04, 0x00, 0x79, 0x00
                    })
                }

                Device (DMA1)
                {
                    Name (_HID, EisaId ("PNP0200"))
                    Name (_CRS, Buffer (0x25)
                    {
                        0x2A, 0x10, 0x04, 0x47, 0x01, 0x00, 0x00, 0x00, 
                        0x00, 0x01, 0x10, 0x47, 0x01, 0x80, 0x00, 0x80, 
                        0x00, 0x01, 0x11, 0x47, 0x01, 0x94, 0x00, 0x94, 
                        0x00, 0x01, 0x0C, 0x47, 0x01, 0xC0, 0x00, 0xC0, 
                        0x00, 0x01, 0x20, 0x79, 0x00
                    })
                }

                Device (TMR)
                {
                    Name (_HID, EisaId ("PNP0100"))
                    Name (_CRS, Buffer (0x0D)
                    {
                        0x47, 0x01, 0x40, 0x00, 0x40, 0x00, 0x01, 0x04, 
                        0x22, 0x01, 0x00, 0x79, 0x00
                    })
                }

                Device (RTC)
                {
                    Name (_HID, EisaId ("PNP0B00"))
                    Name (_CRS, Buffer (0x0D)
                    {
                        0x47, 0x01, 0x70, 0x00, 0x70, 0x00, 0x01, 0x04, 
                        0x22, 0x00, 0x01, 0x79, 0x00
                    })
                }

                Device (SPKR)
                {
                    Name (_HID, EisaId ("PNP0800"))
                    Name (_CRS, Buffer (0x0A)
                    {
                        0x47, 0x01, 0x61, 0x00, 0x61, 0x00, 0x01, 0x01, 
                        0x79, 0x00
                    })
                }

                Device (COPR)
                {
                    Name (_HID, EisaId ("PNP0C04"))
                    Name (_CRS, Buffer (0x0D)
                    {
                        0x47, 0x01, 0xF0, 0x00, 0xF0, 0x00, 0x01, 0x10, 
                        0x22, 0x00, 0x20, 0x79, 0x00
                    })
                }

                OperationRegion (W977, SystemIO, 0x03F0, 0x02)
                Field (W977, ByteAcc, NoLock, Preserve)
                {
                    NIDX,   8, 
                    NDAT,   8
                }

                IndexField (NIDX, NDAT, ByteAcc, NoLock, Preserve)
                {
                    Offset (0x07), 
                    LDNM,   8, 
                    Offset (0x20), 
                    DEVI,   8, 
                    DEVR,   8, 
                    Offset (0x30), 
                    ACTR,   8, 
                    Offset (0x60), 
                    IOAH,   8, 
                    IOAL,   8, 
                    IOBH,   8, 
                    IOBL,   8, 
                    Offset (0x70), 
                    INTR,   8, 
                    Offset (0x72), 
                    INRQ,   8, 
                    Offset (0x74), 
                    DMCH,   8, 
                    Offset (0xE0), 
                    MSWK,   8, 
                    Offset (0xE4), 
                    KBWK,   8, 
                    Offset (0xF0), 
                    OPT1,   8, 
                    OPT2,   8
                }

                Method (ENFG, 0, NotSerialized)
                {
                    Store (0x00, Local0)
                    Store (0x11, Local1)
                    While (LNot (LEqual (Local0, 0x71)))
                    {
                        Store (0x87, NIDX)
                        Store (0x87, NIDX)
                        If (LOr (LEqual (DEVI, 0x97), LEqual (DEVI, 0x52)))
                        {
                            Store (0x71, Local0)
                        }

                        Decrement (Local1)
                        If (LEqual (Local1, 0x00))
                        {
                            Store (0x71, Local0)
                        }
                    }
                }

                Method (EXFG, 0, NotSerialized)
                {
                    Store (0xAA, NIDX)
                }

                Device (FDC0)
                {
                    Name (_HID, EisaId ("PNP0700"))
                    Method (_STA, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (Zero, LDNM)
                        If (ACTR)
                        {
                            EXFG ()
                            Return (0x0F)
                        }
                        Else
                        {
                            EXFG ()
                            Return (0x0D)
                        }
                    }

                    Method (_DIS, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (Zero, LDNM)
                        Store (Zero, ACTR)
                        EXFG ()
                    }

                    Method (_CRS, 0, NotSerialized)
                    {
                        Name (BUF0, Buffer (0x19)
                        {
                            0x47, 0x01, 0xF2, 0x03, 0xF2, 0x03, 0x00, 0x04, 
                            0x47, 0x01, 0xF7, 0x03, 0xF7, 0x03, 0x00, 0x01, 
                            0x23, 0x40, 0x00, 0x01, 0x2A, 0x04, 0x00, 0x79, 
                            0x00
                        })
                        CreateWordField (BUF0, 0x11, IRQW)
                        CreateByteField (BUF0, 0x15, DMAV)
                        ENFG ()
                        Store (Zero, LDNM)
                        Store (One, Local0)
                        ShiftLeft (Local0, INTR, IRQW)
                        Store (One, Local0)
                        ShiftLeft (Local0, DMCH, DMAV)
                        EXFG ()
                        Return (BUF0)
                    }

                    Name (_PRS, Buffer (0x19)
                    {
                        0x47, 0x01, 0xF2, 0x03, 0xF2, 0x03, 0x00, 0x04, 
                        0x47, 0x01, 0xF7, 0x03, 0xF7, 0x03, 0x00, 0x01, 
                        0x23, 0x40, 0x00, 0x01, 0x2A, 0x04, 0x00, 0x79, 
                        0x00
                    })
                    Method (_SRS, 1, NotSerialized)
                    {
                        CreateByteField (Arg0, 0x02, IOLO)
                        CreateByteField (Arg0, 0x03, IOHI)
                        CreateWordField (Arg0, 0x11, IRQW)
                        CreateByteField (Arg0, 0x15, DMAV)
                        ENFG ()
                        Store (Zero, LDNM)
                        And (IOLO, 0xF8, IOAL)
                        Store (IOHI, IOAH)
                        FindSetRightBit (IRQW, Local0)
                        Decrement (Local0)
                        Store (Local0, INTR)
                        FindSetRightBit (DMAV, Local0)
                        Decrement (Local0)
                        Store (Local0, DMCH)
                        Store (One, ACTR)
                        EXFG ()
                    }
                }

                Device (LPT)
                {
                    Name (_HID, EisaId ("PNP0400"))
                    Method (_STA, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (0x01, LDNM)
                        And (OPT1, 0x02, Local0)
                        If (LOr (IOAH, IOAL))
                        {
                            If (LEqual (Local0, 0x02))
                            {
                                EXFG ()
                                Return (0x00)
                            }
                            Else
                            {
                                If (ACTR)
                                {
                                    EXFG ()
                                    Return (0x0F)
                                }
                                Else
                                {
                                    EXFG ()
                                    Return (0x0D)
                                }
                            }
                        }

                        EXFG ()
                        Return (0x00)
                    }

                    Method (_DIS, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (0x01, LDNM)
                        Store (Zero, ACTR)
                        EXFG ()
                    }

                    Method (_CRS, 0, NotSerialized)
                    {
                        Name (BUF5, Buffer (0x0E)
                        {
                            0x47, 0x01, 0x78, 0x03, 0x78, 0x03, 0x00, 0x04, 
                            0x23, 0x80, 0x00, 0x01, 0x79, 0x00
                        })
                        CreateByteField (BUF5, 0x02, IOLO)
                        CreateByteField (BUF5, 0x03, IOHI)
                        CreateByteField (BUF5, 0x04, IORL)
                        CreateByteField (BUF5, 0x05, IORH)
                        CreateWordField (BUF5, 0x09, IRQW)
                        ENFG ()
                        Store (0x01, LDNM)
                        Store (IOAL, IOLO)
                        Store (IOAL, IORL)
                        Store (IOAH, IOHI)
                        Store (IOAH, IORH)
                        Store (One, Local0)
                        ShiftLeft (Local0, INTR, IRQW)
                        EXFG ()
                        Return (BUF5)
                    }

                    Name (_PRS, Buffer (0x2D)
                    {
                        0x31, 0x05, 0x47, 0x01, 0x78, 0x03, 0x78, 0x03, 
                        0x00, 0x08, 0x23, 0xA0, 0x00, 0x01, 0x31, 0x05, 
                        0x47, 0x01, 0x78, 0x02, 0x78, 0x02, 0x00, 0x08, 
                        0x23, 0xA0, 0x00, 0x01, 0x31, 0x05, 0x47, 0x01, 
                        0xBC, 0x03, 0xBC, 0x03, 0x00, 0x04, 0x23, 0xA0, 
                        0x00, 0x01, 0x38, 0x79, 0x00
                    })
                    Method (_SRS, 1, NotSerialized)
                    {
                        CreateByteField (Arg0, 0x02, IOLO)
                        CreateByteField (Arg0, 0x03, IOHI)
                        CreateWordField (Arg0, 0x09, IRQW)
                        ENFG ()
                        Store (0x01, LDNM)
                        Store (IOLO, IOAL)
                        Store (IOHI, IOAH)
                        FindSetRightBit (IRQW, Local0)
                        Decrement (Local0)
                        Store (Local0, INTR)
                        Store (One, ACTR)
                        EXFG ()
                    }
                }

                Device (ECP)
                {
                    Name (_HID, EisaId ("PNP0401"))
                    Method (_STA, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (0x01, LDNM)
                        And (OPT1, 0x02, Local0)
                        If (LOr (IOAH, IOAL))
                        {
                            If (LEqual (Local0, 0x02))
                            {
                                If (ACTR)
                                {
                                    EXFG ()
                                    Return (0x0F)
                                }
                                Else
                                {
                                    EXFG ()
                                    Return (0x05)
                                }
                            }
                            Else
                            {
                                EXFG ()
                                Return (0x00)
                            }
                        }

                        EXFG ()
                        Return (0x00)
                    }

                    Method (_DIS, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (0x01, LDNM)
                        Store (Zero, ACTR)
                        EXFG ()
                    }

                    Method (_CRS, 0, NotSerialized)
                    {
                        Name (BUF6, Buffer (0x19)
                        {
                            0x47, 0x01, 0x78, 0x03, 0x78, 0x03, 0x00, 0x04, 
                            0x47, 0x01, 0x78, 0x07, 0x78, 0x07, 0x00, 0x04, 
                            0x23, 0x80, 0x00, 0x01, 0x2A, 0x02, 0x00, 0x79, 
                            0x00
                        })
                        CreateByteField (BUF6, 0x02, IOLO)
                        CreateByteField (BUF6, 0x03, IOHI)
                        CreateByteField (BUF6, 0x04, IORL)
                        CreateByteField (BUF6, 0x05, IORH)
                        CreateByteField (BUF6, 0x0A, I2LO)
                        CreateByteField (BUF6, 0x0B, I2HI)
                        CreateByteField (BUF6, 0x0C, I2RL)
                        CreateByteField (BUF6, 0x0D, I2RH)
                        CreateWordField (BUF6, 0x11, IRQW)
                        CreateByteField (BUF6, 0x15, DMAC)
                        ENFG ()
                        Store (0x01, LDNM)
                        Store (IOAL, IOLO)
                        Store (IOAL, IORL)
                        Store (IOLO, I2LO)
                        Store (IOLO, I2RL)
                        Store (IOAH, IORH)
                        Store (IOAH, IOHI)
                        Add (IOHI, 0x04, I2HI)
                        Add (IOHI, 0x04, I2RH)
                        Store (One, Local0)
                        ShiftLeft (Local0, INTR, IRQW)
                        Store (One, Local0)
                        ShiftLeft (Local0, DMCH, DMAC)
                        EXFG ()
                        Return (BUF6)
                    }

                    Name (_PRS, Buffer (0x4E)
                    {
                        0x31, 0x05, 0x47, 0x01, 0x78, 0x03, 0x78, 0x03, 
                        0x00, 0x04, 0x47, 0x01, 0x78, 0x07, 0x78, 0x07, 
                        0x00, 0x04, 0x23, 0xA0, 0x00, 0x01, 0x2A, 0x0B, 
                        0x00, 0x31, 0x05, 0x47, 0x01, 0x78, 0x02, 0x78, 
                        0x02, 0x00, 0x04, 0x47, 0x01, 0x78, 0x06, 0x78, 
                        0x06, 0x00, 0x04, 0x23, 0xA0, 0x00, 0x01, 0x2A, 
                        0x0B, 0x00, 0x31, 0x05, 0x47, 0x01, 0xBC, 0x03, 
                        0xBC, 0x03, 0x00, 0x04, 0x47, 0x01, 0xBC, 0x07, 
                        0xBC, 0x07, 0x00, 0x04, 0x23, 0xA0, 0x00, 0x01, 
                        0x2A, 0x0B, 0x00, 0x38, 0x79, 0x00
                    })
                    Method (_SRS, 1, NotSerialized)
                    {
                        CreateByteField (Arg0, 0x02, IOLO)
                        CreateByteField (Arg0, 0x03, IOHI)
                        CreateWordField (Arg0, 0x11, IRQW)
                        CreateByteField (Arg0, 0x15, DMAC)
                        ENFG ()
                        Store (0x01, LDNM)
                        Store (IOLO, IOAL)
                        Store (IOHI, IOAH)
                        FindSetRightBit (IRQW, Local0)
                        Decrement (Local0)
                        Store (Local0, INTR)
                        FindSetRightBit (DMAC, Local0)
                        Decrement (Local0)
                        Store (Local0, DMCH)
                        Store (One, ACTR)
                        EXFG ()
                    }
                }

                Device (UAR1)
                {
                    Name (_HID, EisaId ("PNP0501"))
                    Name (_UID, 0x01)
                    Method (_STA, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (0x02, LDNM)
                        If (LOr (IOAH, IOAL))
                        {
                            If (ACTR)
                            {
                                EXFG ()
                                Return (0x0F)
                            }
                            Else
                            {
                                EXFG ()
                                Return (0x0D)
                            }
                        }

                        EXFG ()
                        Return (0x00)
                    }

                    Method (_DIS, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (0x02, LDNM)
                        Store (Zero, ACTR)
                        EXFG ()
                    }

                    Method (_CRS, 0, NotSerialized)
                    {
                        Name (BUF1, Buffer (0x0E)
                        {
                            0x47, 0x01, 0xF8, 0x03, 0xF8, 0x03, 0x00, 0x08, 
                            0x23, 0x10, 0x00, 0x01, 0x79, 0x00
                        })
                        CreateByteField (BUF1, 0x02, IOLO)
                        CreateByteField (BUF1, 0x03, IOHI)
                        CreateByteField (BUF1, 0x04, IORL)
                        CreateByteField (BUF1, 0x05, IORH)
                        CreateWordField (BUF1, 0x09, IRQW)
                        ENFG ()
                        Store (0x02, LDNM)
                        Store (IOAL, IOLO)
                        Store (IOAL, IORL)
                        Store (IOAH, IOHI)
                        Store (IOAH, IORH)
                        Store (One, Local0)
                        ShiftLeft (Local0, INTR, IRQW)
                        EXFG ()
                        Return (BUF1)
                    }

                    Name (_PRS, Buffer (0x49)
                    {
                        0x31, 0x05, 0x47, 0x01, 0xF8, 0x03, 0xF8, 0x03, 
                        0x00, 0x08, 0x23, 0x10, 0x00, 0x01, 0x31, 0x05, 
                        0x47, 0x01, 0xF8, 0x02, 0xF8, 0x02, 0x00, 0x08, 
                        0x23, 0x08, 0x00, 0x01, 0x31, 0x05, 0x47, 0x01, 
                        0xE8, 0x03, 0xE8, 0x03, 0x00, 0x08, 0x23, 0x10, 
                        0x00, 0x01, 0x31, 0x05, 0x47, 0x01, 0xE8, 0x02, 
                        0xE8, 0x02, 0x00, 0x08, 0x23, 0x08, 0x00, 0x01, 
                        0x31, 0x05, 0x47, 0x01, 0xE8, 0x02, 0xF8, 0x03, 
                        0x00, 0x08, 0x23, 0xB8, 0x14, 0x01, 0x38, 0x79, 
                        0x00
                    })
                    Method (_SRS, 1, NotSerialized)
                    {
                        CreateByteField (Arg0, 0x02, IOLO)
                        CreateByteField (Arg0, 0x03, IOHI)
                        CreateWordField (Arg0, 0x09, IRQW)
                        ENFG ()
                        Store (0x02, LDNM)
                        Store (IOLO, IOAL)
                        Store (IOHI, IOAH)
                        FindSetRightBit (IRQW, Local0)
                        Decrement (Local0)
                        Store (Local0, INTR)
                        Store (One, ACTR)
                        EXFG ()
                    }

                    Name (_PRW, Package (0x02)
                    {
                        0x0A, 
                        0x01
                    })
                }

                Device (UAR2)
                {
                    Name (_HID, EisaId ("PNP0501"))
                    Name (_UID, 0x02)
                    Method (_STA, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (0x03, LDNM)
                        If (LOr (IOAH, IOAL))
                        {
                            If (LAnd (LEqual (DEVI, 0x97), LEqual (DEVR, 0x71)))
                            {
                                If (ACTR)
                                {
                                    EXFG ()
                                    Return (0x0F)
                                }
                                Else
                                {
                                    EXFG ()
                                    Return (0x0D)
                                }
                            }
                            Else
                            {
                                If (LNot (LEqual (OPT2, Zero)))
                                {
                                    EXFG ()
                                    Return (Zero)
                                }
                                Else
                                {
                                    If (ACTR)
                                    {
                                        EXFG ()
                                        Return (0x0F)
                                    }
                                    Else
                                    {
                                        EXFG ()
                                        Return (0x0D)
                                    }
                                }
                            }
                        }

                        EXFG ()
                        Return (0x00)
                    }

                    Method (_DIS, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (0x03, LDNM)
                        Store (Zero, ACTR)
                        EXFG ()
                    }

                    Method (_CRS, 0, NotSerialized)
                    {
                        Name (BUF1, Buffer (0x0E)
                        {
                            0x47, 0x01, 0xF8, 0x02, 0xF8, 0x02, 0x00, 0x08, 
                            0x23, 0x08, 0x00, 0x01, 0x79, 0x00
                        })
                        CreateByteField (BUF1, 0x02, IOLO)
                        CreateByteField (BUF1, 0x03, IOHI)
                        CreateByteField (BUF1, 0x04, IORL)
                        CreateByteField (BUF1, 0x05, IORH)
                        CreateWordField (BUF1, 0x09, IRQW)
                        ENFG ()
                        Store (0x03, LDNM)
                        Store (IOAL, IOLO)
                        Store (IOAL, IORL)
                        Store (IOAH, IOHI)
                        Store (IOAH, IORH)
                        Store (One, Local0)
                        ShiftLeft (Local0, INTR, IRQW)
                        EXFG ()
                        Return (BUF1)
                    }

                    Name (_PRS, Buffer (0x49)
                    {
                        0x31, 0x05, 0x47, 0x01, 0xF8, 0x02, 0xF8, 0x02, 
                        0x00, 0x08, 0x23, 0x08, 0x00, 0x01, 0x31, 0x05, 
                        0x47, 0x01, 0xF8, 0x03, 0xF8, 0x03, 0x00, 0x08, 
                        0x23, 0x10, 0x00, 0x01, 0x31, 0x05, 0x47, 0x01, 
                        0xE8, 0x02, 0xE8, 0x02, 0x00, 0x08, 0x23, 0x08, 
                        0x00, 0x01, 0x31, 0x05, 0x47, 0x01, 0xE8, 0x03, 
                        0xE8, 0x03, 0x00, 0x08, 0x23, 0x10, 0x00, 0x01, 
                        0x31, 0x05, 0x47, 0x01, 0xE8, 0x02, 0xF8, 0x03, 
                        0x00, 0x08, 0x23, 0xB8, 0x14, 0x01, 0x38, 0x79, 
                        0x00
                    })
                    Method (_SRS, 1, NotSerialized)
                    {
                        CreateByteField (Arg0, 0x02, IOLO)
                        CreateByteField (Arg0, 0x03, IOHI)
                        CreateWordField (Arg0, 0x09, IRQW)
                        ENFG ()
                        Store (0x03, LDNM)
                        Store (IOLO, IOAL)
                        Store (IOHI, IOAH)
                        FindSetRightBit (IRQW, Local0)
                        Decrement (Local0)
                        Store (Local0, INTR)
                        Store (One, ACTR)
                        EXFG ()
                    }

                    Name (_PRW, Package (0x02)
                    {
                        0x0A, 
                        0x01
                    })
                }

                Device (IRDA)
                {
                    Name (_HID, EisaId ("PNP0510"))
                    Method (_STA, 0, NotSerialized)
                    {
                        ENFG ()
                        If (LAnd (LEqual (DEVI, 0x97), LEqual (DEVR, 0x71)))
                        {
                            Store (0x06, LDNM)
                            If (ACTR)
                            {
                                EXFG ()
                                Return (0x0F)
                            }
                            Else
                            {
                                If (LOr (IOAH, IOAL))
                                {
                                    EXFG ()
                                    Return (0x05)
                                }
                                Else
                                {
                                    EXFG ()
                                    Return (0x00)
                                }
                            }
                        }
                        Else
                        {
                            Store (0x03, LDNM)
                            If (LOr (IOAH, IOAL))
                            {
                                If (OPT2)
                                {
                                    If (ACTR)
                                    {
                                        EXFG ()
                                        Return (0x0F)
                                    }
                                    Else
                                    {
                                        EXFG ()
                                        Return (0x05)
                                    }
                                }
                            }

                            EXFG ()
                            Return (0x00)
                        }
                    }

                    Method (_DIS, 0, NotSerialized)
                    {
                        ENFG ()
                        If (LAnd (LEqual (DEVI, 0x97), LEqual (DEVR, 0x71)))
                        {
                            Store (0x06, LDNM)
                        }
                        Else
                        {
                            Store (0x03, LDNM)
                        }

                        Store (Zero, ACTR)
                        EXFG ()
                    }

                    Method (_CRS, 0, NotSerialized)
                    {
                        Name (BUF1, Buffer (0x0E)
                        {
                            0x47, 0x01, 0xF8, 0x02, 0xF8, 0x02, 0x00, 0x08, 
                            0x23, 0x08, 0x00, 0x01, 0x79, 0x00
                        })
                        CreateByteField (BUF1, 0x02, IOLO)
                        CreateByteField (BUF1, 0x03, IOHI)
                        CreateByteField (BUF1, 0x04, IORL)
                        CreateByteField (BUF1, 0x05, IORH)
                        CreateWordField (BUF1, 0x09, IRQW)
                        ENFG ()
                        If (LAnd (LEqual (DEVI, 0x97), LEqual (DEVR, 0x71)))
                        {
                            Store (0x06, LDNM)
                        }
                        Else
                        {
                            Store (0x03, LDNM)
                        }

                        Store (IOAL, IOLO)
                        Store (IOAL, IORL)
                        Store (IOAH, IOHI)
                        Store (IOAH, IORH)
                        Store (One, Local0)
                        ShiftLeft (Local0, INTR, IRQW)
                        EXFG ()
                        Return (BUF1)
                    }

                    Name (_PRS, Buffer (0x49)
                    {
                        0x31, 0x05, 0x47, 0x01, 0xF8, 0x02, 0xF8, 0x02, 
                        0x00, 0x08, 0x23, 0x08, 0x00, 0x01, 0x31, 0x05, 
                        0x47, 0x01, 0xF8, 0x03, 0xF8, 0x03, 0x00, 0x08, 
                        0x23, 0x10, 0x00, 0x01, 0x31, 0x05, 0x47, 0x01, 
                        0xE8, 0x02, 0xE8, 0x02, 0x00, 0x08, 0x23, 0x08, 
                        0x00, 0x01, 0x31, 0x05, 0x47, 0x01, 0xE8, 0x03, 
                        0xE8, 0x03, 0x00, 0x08, 0x23, 0x10, 0x00, 0x01, 
                        0x31, 0x05, 0x47, 0x01, 0xE8, 0x02, 0xF8, 0x03, 
                        0x00, 0x08, 0x23, 0xB8, 0x14, 0x01, 0x38, 0x79, 
                        0x00
                    })
                    Method (_SRS, 1, NotSerialized)
                    {
                        CreateByteField (Arg0, 0x02, IOLO)
                        CreateByteField (Arg0, 0x03, IOHI)
                        CreateWordField (Arg0, 0x09, IRQW)
                        ENFG ()
                        If (LAnd (LEqual (DEVI, 0x97), LEqual (DEVR, 0x71)))
                        {
                            Store (0x06, LDNM)
                        }
                        Else
                        {
                            Store (0x03, LDNM)
                        }

                        Store (IOLO, IOAL)
                        Store (IOHI, IOAH)
                        FindSetRightBit (IRQW, Local0)
                        Decrement (Local0)
                        Store (Local0, INTR)
                        Store (One, ACTR)
                        EXFG ()
                    }
                }

                OperationRegion (KBC1, SystemIO, 0x64, 0x01)
                Field (KBC1, ByteAcc, NoLock, Preserve)
                {
                    KBIN,   8
                }

                OperationRegion (KBC2, SystemIO, 0x60, 0x01)
                Field (KBC2, ByteAcc, NoLock, Preserve)
                {
                    KBDA,   8
                }

                Device (PS2K)
                {
                    Name (_HID, EisaId ("PNP0303"))
                    Method (_STA, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (0x05, LDNM)
                        And (INTR, 0x0F, Local0)
                        If (LNot (LEqual (Local0, 0x00)))
                        {
                            EXFG ()
                            Return (0x0F)
                        }
                        Else
                        {
                            EXFG ()
                            Return (0x05)
                        }
                    }

                    Method (_CRS, 0, NotSerialized)
                    {
                        Name (BUF0, Buffer (0x16)
                        {
                            0x47, 0x01, 0x60, 0x00, 0x60, 0x00, 0x00, 0x01, 
                            0x47, 0x01, 0x64, 0x00, 0x64, 0x00, 0x00, 0x01, 
                            0x23, 0x02, 0x00, 0x01, 0x79, 0x00
                        })
                        Return (BUF0)
                    }
                }

                Device (PS2M)
                {
                    Name (_HID, EisaId ("PNP0F13"))
                    Method (_STA, 0, NotSerialized)
                    {
                        ENFG ()
                        Store (0x05, LDNM)
                        And (INRQ, 0x0F, Local0)
                        If (LEqual (Local0, 0x00))
                        {
                            EXFG ()
                            Return (0x00)
                        }
                        Else
                        {
                            If (LEqual (Local0, 0x02))
                            {
                                EXFG ()
                                Return (0x0D)
                            }
                            Else
                            {
                                EXFG ()
                                Return (0x0F)
                            }
                        }
                    }

                    Method (_DIS, 0, NotSerialized)
                    {
                        And (0x03, KBIN, Local0)
                        While (Local0)
                        {
                            Store (KBDA, Local1)
                            And (0x03, KBIN, Local0)
                        }

                        Store (0xA7, KBIN)
                        ENFG ()
                        Store (0x05, LDNM)
                        Store (0x02, INRQ)
                        And (INTR, 0x0F, Local0)
                        If (LEqual (Local0, 0x00))
                        {
                            Store (Zero, ACTR)
                        }

                        EXFG ()
                    }

                    Method (_CRS, 0, NotSerialized)
                    {
                        Name (BUF0, Buffer (0x06)
                        {
                            0x23, 0x00, 0x10, 0x01, 0x79, 0x00
                        })
                        CreateWordField (BUF0, 0x01, IRQW)
                        ENFG ()
                        Store (0x05, LDNM)
                        Store (One, Local0)
                        ShiftLeft (Local0, INRQ, IRQW)
                        EXFG ()
                        Return (BUF0)
                    }

                    Name (_PRS, Buffer (0x06)
                    {
                        0x23, 0xB8, 0x14, 0x01, 0x79, 0x00
                    })
                    Method (_SRS, 1, NotSerialized)
                    {
                        CreateWordField (Arg0, 0x01, IRQW)
                        And (0x03, KBIN, Local0)
                        While (Local0)
                        {
                            Store (KBDA, Local1)
                            And (0x03, KBIN, Local0)
                        }

                        Store (0xA8, KBIN)
                        ENFG ()
                        Store (0x05, LDNM)
                        FindSetRightBit (IRQW, Local0)
                        Decrement (Local0)
                        Store (Local0, INRQ)
                        Store (One, ACTR)
                        EXFG ()
                    }

                    Name (_PRW, Package (0x02)
                    {
                        0x0A, 
                        0x01
                    })
                }
            }

            Device (PX43)
            {
                Name (_ADR, 0x00040003)
                OperationRegion (IPMU, PCI_Config, 0x40, 0x02)
                Field (IPMU, ByteAcc, NoLock, Preserve)
                {
                    PM00,   8, 
                    PM01,   8
                }

                OperationRegion (ISMB, PCI_Config, 0x90, 0x02)
                Field (ISMB, ByteAcc, NoLock, Preserve)
                {
                    SB00,   8, 
                    SB01,   8
                }
            }

            Device (BX00)
            {
                Name (_ADR, 0x00)
            }

            Device (USB0)
            {
                Name (_ADR, 0x00040002)
                Name (_PRW, Package (0x02)
                {
                    0x08, 
                    0x01
                })
            }

            Name (_PRW, Package (0x02)
            {
                0x09, 
                0x01
            })
        }
    }

    Scope (\_GPE)
    {
        Method (_L08, 0, Serialized)
        {
            Notify (\_SB.PCI0.USB0, 0x02)
        }

        Method (_L0A, 0, Serialized)
        {
            Notify (\_SB.PCI0.PX40.UAR1, 0x02)
            Notify (\_SB.PCI0.PX40.UAR2, 0x02)
        }

        Method (_L09, 0, Serialized)
        {
            Notify (\_SB.PCI0, 0x02)
        }
    }
}



More information about the freebsd-current mailing list