blob: 3f6c27315e805998701a4b06ea6909da39a0bb1d [file] [log] [blame]
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2012 Advanced Micro Devices, Inc.
*
* 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 Statement */
DefinitionBlock (
"DSDT.AML", /* Output filename */
"DSDT", /* Signature */
0x02, /* DSDT Revision, needs to be 2 for 64bit */
"AMD ", /* OEMID */
"COREBOOT", /* TABLE ID */
0x00010001 /* OEM Revision */
)
{ /* Start of ASL file */
/* #include "../../../arch/x86/acpi/debug.asl" */ /* Include global debug methods if needed */
/* Data to be patched by the BIOS during POST */
/* FIXME the patching is not done yet! */
/* Memory related values */
Name(LOMH, 0x0) /* Start of unused memory in C0000-E0000 range */
Name(PBAD, 0x0) /* Address of BIOS area (If TOM2 != 0, Addr >> 16) */
Name(PBLN, 0x0) /* Length of BIOS area */
Name(PCBA, CONFIG_MMCONF_BASE_ADDRESS) /* Base address of PCIe config space */
Name(HPBA, 0xFED00000) /* Base address of HPET table */
Name(SSFG, 0x0D) /* S1 support: bit 0, S2 Support: bit 1, etc. S0 & S5 assumed */
/* Some global data */
Name(OSV, Ones) /* Assume nothing */
Name(GPIC, 0x1) /* Assume PIC */
/*
* Processor Object
*
*/
Scope (\_PR) { /* define processor scope */
Processor(
C000, /* name space name, align with BLDCFG_PROCESSOR_SCOPE_NAME[01] */
0, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
0x06 /* PBLKLEN for boot processor */
) {
}
Processor(
C001, /* name space name */
1, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
0x06 /* PBLKLEN for boot processor */
) {
}
Processor(
C002, /* name space name */
2, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
0x06 /* PBLKLEN for boot processor */
) {
}
Processor(
C003, /* name space name */
3, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
0x06 /* PBLKLEN for boot processor */
) {
}
Processor(
C004, /* name space name */
4, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
0x06 /* PBLKLEN for boot processor */
) {
}
Processor(
C005, /* name space name */
5, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
0x06 /* PBLKLEN for boot processor */
) {
}
Processor(
C006, /* name space name */
6, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
0x06 /* PBLKLEN for boot processor */
) {
}
Processor(
C007, /* name space name */
7, /* Unique number for this processor */
0x810, /* PBLK system I/O address !hardcoded! */
0x06 /* PBLKLEN for boot processor */
) {
}
} /* End _PR scope */
/* PIC IRQ mapping registers, C00h-C01h. */
OperationRegion(PIRQ, SystemIO, 0x00000C00, 0x00000002)
Field(PIRQ, ByteAcc, NoLock, Preserve) {
PIDX, 0x00000008,
PDAT, 0x00000008, /* Offset: 1h */
}
IndexField(PIDX, PDAT, ByteAcc, NoLock, Preserve) {
PIRA, 0x00000008, /* Index 0 */
PIRB, 0x00000008, /* Index 1 */
PIRC, 0x00000008, /* Index 2 */
PIRD, 0x00000008, /* Index 3 */
PIRE, 0x00000008, /* Index 4 */
PIRF, 0x00000008, /* Index 5 */
PIRG, 0x00000008, /* Index 6 */
PIRH, 0x00000008, /* Index 7 */
Offset(0x10),
PIRS, 0x00000008,
Offset(0x13),
HDAD, 0x00000008,
, 0x00000008,
GEC, 0x00000008,
Offset(0x30),
USB1, 0x00000008,
USB2, 0x00000008,
USB3, 0x00000008,
USB4, 0x00000008,
USB5, 0x00000008,
USB6, 0x00000008,
USB7, 0x00000008,
Offset(0x40),
IDE, 0x00000008,
SATA, 0x00000008,
Offset(0x50),
GPP0, 0x00000008,
GPP1, 0x00000008,
GPP2, 0x00000008,
GPP3, 0x00000008
}
/* PCI Error control register */
OperationRegion(PERC, SystemIO, 0x00000C14, 0x00000001)
Field(PERC, ByteAcc, NoLock, Preserve) {
SENS, 0x00000001,
PENS, 0x00000001,
SENE, 0x00000001,
PENE, 0x00000001,
}
/* Client Management index/data registers */
OperationRegion(CMT, SystemIO, 0x00000C50, 0x00000002)
Field(CMT, ByteAcc, NoLock, Preserve) {
CMTI, 8,
/* Client Management Data register */
G64E, 1,
G64O, 1,
G32O, 2,
, 2,
GPSL, 2,
}
/* GPM Port register */
OperationRegion(GPT, SystemIO, 0x00000C52, 0x00000001)
Field(GPT, ByteAcc, NoLock, Preserve) {
GPB0,1,
GPB1,1,
GPB2,1,
GPB3,1,
GPB4,1,
GPB5,1,
GPB6,1,
GPB7,1,
}
/* Flash ROM program enable register */
OperationRegion(FRE, SystemIO, 0x00000C6F, 0x00000001)
Field(FRE, ByteAcc, NoLock, Preserve) {
, 0x00000006,
FLRE, 0x00000001,
}
/* PM2 index/data registers */
OperationRegion(PM2R, SystemIO, 0x00000CD0, 0x00000002)
Field(PM2R, ByteAcc, NoLock, Preserve) {
PM2I, 0x00000008,
PM2D, 0x00000008,
}
/* Power Management I/O registers, TODO:PMIO is quite different in SB700. */
OperationRegion(PMRG, SystemIO, 0x00000CD6, 0x00000002)
Field(PMRG, ByteAcc, NoLock, Preserve) {
PMRI, 0x00000008,
PMRD, 0x00000008,
}
IndexField (PMRI, PMRD, ByteAcc, NoLock, Preserve) {
Offset(0x24),
MMSO,32,
Offset(0x37), /* GPMLevelConfig0 */
, 3,
PLC0, 1,
PLC1, 1,
PLC2, 1,
PLC3, 1,
PLC8, 1,
Offset(0x38), /* GPMLevelConfig1 */
, 1,
PLC4, 1,
PLC5, 1,
, 1,
PLC6, 1,
PLC7, 1,
Offset(0x50),
HPAD,32,
Offset(0x60),
P1EB,16,
Offset(0x65), /* UsbPMControl */
, 4,
URRE, 1,
Offset(0x96), /* GPM98IN */
G8IS, 1,
G9IS, 1,
Offset(0x9A), /* EnhanceControl */
,7,
HPDE, 1,
Offset(0xC8),
,2,
SPRE,1,
TPDE,1,
Offset(0xF0),
,3,
RSTU,1
}
/* PM1 Event Block
* First word is PM1_Status, Second word is PM1_Enable
*/
OperationRegion(P1E0, SystemIO, P1EB, 0x04)
Field(P1E0, ByteAcc, NoLock, Preserve) {
,14,
PEWS,1,
WSTA,1,
,14,
PEWD,1
}
OperationRegion (GRAM, SystemMemory, 0x0400, 0x0100)
Field (GRAM, ByteAcc, Lock, Preserve)
{
Offset (0x10),
FLG0, 8
}
Scope(\_SB) {
/* PCIe Configuration Space for 16 busses */
OperationRegion(PCFG, SystemMemory, PCBA, 0x01000000) /* Each bus consumes 1MB */
Field(PCFG, ByteAcc, NoLock, Preserve) {
/* Byte offsets are computed using the following technique:
* ((bus number + 1) * ((device number * 8) * 4096)) + register offset
* The 8 comes from 8 functions per device, and 4096 bytes per function config space
*/
Offset(0x00088024), /* Byte offset to SATA register 24h - Bus 0, Device 17, Function 0 */
STB5, 32,
Offset(0x00098042), /* Byte offset to OHCI0 register 42h - Bus 0, Device 19, Function 0 */
PT0D, 1,
PT1D, 1,
PT2D, 1,
PT3D, 1,
PT4D, 1,
PT5D, 1,
PT6D, 1,
PT7D, 1,
PT8D, 1,
PT9D, 1,
Offset(0x000A0004), /* Byte offset to SMBUS register 4h - Bus 0, Device 20, Function 0 */
SBIE, 1,
SBME, 1,
Offset(0x000A0008), /* Byte offset to SMBUS register 8h - Bus 0, Device 20, Function 0 */
SBRI, 8,
Offset(0x000A0014), /* Byte offset to SMBUS register 14h - Bus 0, Device 20, Function 0 */
SBB1, 32,
Offset(0x000A0078), /* Byte offset to SMBUS register 78h - Bus 0, Device 20, Function 0 */
,14,
P92E, 1, /* Port92 decode enable */
}
OperationRegion(SB5, SystemMemory, STB5, 0x1000)
Field(SB5, AnyAcc, NoLock, Preserve){
/* Port 0 */
Offset(0x120), /* Port 0 Task file status */
P0ER, 1,
, 2,
P0DQ, 1,
, 3,
P0BY, 1,
Offset(0x128), /* Port 0 Serial ATA status */
P0DD, 4,
, 4,
P0IS, 4,
Offset(0x12C), /* Port 0 Serial ATA control */
P0DI, 4,
Offset(0x130), /* Port 0 Serial ATA error */
, 16,
P0PR, 1,
/* Port 1 */
offset(0x1A0), /* Port 1 Task file status */
P1ER, 1,
, 2,
P1DQ, 1,
, 3,
P1BY, 1,
Offset(0x1A8), /* Port 1 Serial ATA status */
P1DD, 4,
, 4,
P1IS, 4,
Offset(0x1AC), /* Port 1 Serial ATA control */
P1DI, 4,
Offset(0x1B0), /* Port 1 Serial ATA error */
, 16,
P1PR, 1,
/* Port 2 */
Offset(0x220), /* Port 2 Task file status */
P2ER, 1,
, 2,
P2DQ, 1,
, 3,
P2BY, 1,
Offset(0x228), /* Port 2 Serial ATA status */
P2DD, 4,
, 4,
P2IS, 4,
Offset(0x22C), /* Port 2 Serial ATA control */
P2DI, 4,
Offset(0x230), /* Port 2 Serial ATA error */
, 16,
P2PR, 1,
/* Port 3 */
Offset(0x2A0), /* Port 3 Task file status */
P3ER, 1,
, 2,
P3DQ, 1,
, 3,
P3BY, 1,
Offset(0x2A8), /* Port 3 Serial ATA status */
P3DD, 4,
, 4,
P3IS, 4,
Offset(0x2AC), /* Port 3 Serial ATA control */
P3DI, 4,
Offset(0x2B0), /* Port 3 Serial ATA error */
, 16,
P3PR, 1,
}
}
#include "acpi/routing.asl"
Scope(\_SB) {
/* Debug Port registers, 80h. */
OperationRegion(DBBG, SystemIO, 0x00000080, 0x00000001)
Field(DBBG, ByteAcc, NoLock, Preserve) {
DBG8, 0x00000008,
}
Method(_PIC, 1) {
Store(Arg0, GPIC)
If (GPIC) {
Store(0xAA, \_SB.DBG8)
\_SB.DSPI()
} else {
Store(0xAC, \_SB.DBG8)
}
}
Method(DSPI, 0) {
\_SB.GRUA(0x1F)
\_SB.GRUB(0x1F)
\_SB.GRUC(0x1F)
\_SB.GRUD(0x1F)
Store(0x1F, PIRE)
Store(0x1F, PIRF)
Store(0x1F, PIRG)
Store(0x1F, PIRH)
}
Method(GRUA, 1) {
Store(Arg0, PIRA)
Store(Arg0, HDAD)
Store(Arg0, GEC)
Store(Arg0, GPP0)
Store(Arg0, GPP0)
}
Method(GRUB, 1) {
Store(Arg0, PIRB)
Store(Arg0, USB2)
Store(Arg0, USB4)
Store(Arg0, USB6)
Store(Arg0, GPP1)
Store(Arg0, IDE)
}
Method(GRUC, 1) {
Store(Arg0, PIRC)
Store(Arg0, USB1)
Store(Arg0, USB3)
Store(Arg0, USB5)
Store(Arg0, USB7)
Store(Arg0, GPP2)
}
Method(GRUD, 1) {
Store(Arg0, PIRD)
Store(Arg0, SATA)
Store(Arg0, GPP3)
}
Name(IRQB, ResourceTemplate() {
IRQ(Level, ActiveLow, Shared) {
15
}})
Name(IRQP, ResourceTemplate() {
IRQ(Level, ActiveLow, Shared) {
3, 4, 5, 7, 10, 11, 12, 14, 15
}})
Device(INTA) {
Name(_HID, EISAID("PNP0C0F"))
Name(_UID, 1)
Method(_STA, 0) {
if (PIRA) {
Return(0x0B)
} else {
Return(0x09)
}
}
Method(_DIS ,0) {
\_SB.GRUA(0x1F)
}
Method(_PRS ,0) {
Return(IRQP)
}
Method(_CRS ,0) {
CreateWordField(IRQB, 1, IRQN)
ShiftLeft(1, PIRA, IRQN)
Return(IRQB)
}
Method(_SRS, 1) {
CreateWordField(Arg0, 1, IRQM)
FindSetRightBit(IRQM, Local0)
Decrement(Local0)
\_SB.GRUA(Local0)
}
}
Device(INTB) {
Name(_HID, EISAID("PNP0C0F"))
Name(_UID, 2)
Method(_STA, 0) {
if (PIRB) {
Return(0x0B)
} else {
Return(0x09)
}
}
Method(_DIS ,0) {
\_SB.GRUB(0x1F)
}
Method(_PRS ,0) {
Return(IRQP)
}
Method(_CRS ,0) {
CreateWordField(IRQB, 1, IRQN)
ShiftLeft(1, PIRB, IRQN)
Return(IRQB)
}
Method(_SRS, 1) {
CreateWordField(Arg0, 1, IRQM)
FindSetRightBit(IRQM, Local0)
Decrement(Local0)
\_SB.GRUB(Local0)
}
}
Device(INTC) {
Name(_HID, EISAID("PNP0C0F"))
Name(_UID, 3)
Method(_STA, 0) {
if (PIRC) {
Return(0x0B)
} else {
Return(0x09)
}
}
Method(_DIS ,0) {
\_SB.GRUC(0x1F)
}
Method(_PRS ,0) {
Return(IRQP)
}
Method(_CRS ,0) {
CreateWordField(IRQB, 1, IRQN)
ShiftLeft(1, PIRC, IRQN)
Return(IRQB)
}
Method(_SRS, 1) {
CreateWordField(Arg0, 1, IRQM)
FindSetRightBit(IRQM, Local0)
Decrement(Local0)
\_SB.GRUC(Local0)
}
}
Device(INTD) {
Name(_HID, EISAID("PNP0C0F"))
Name(_UID, 4)
Method(_STA, 0) {
if (PIRD) {
Return(0x0B)
} else {
Return(0x09)
}
}
Method(_DIS ,0) {
\_SB.GRUD(0x1F)
}
Method(_PRS ,0) {
Return(IRQP)
}
Method(_CRS ,0) {
CreateWordField(IRQB, 1, IRQN)
ShiftLeft(1, PIRD, IRQN)
Return(IRQB)
}
Method(_SRS, 1) {
CreateWordField(Arg0, 1, IRQM)
FindSetRightBit(IRQM, Local0)
Decrement(Local0)
\_SB.GRUD(Local0)
}
}
Device(INTE) {
Name(_HID, EISAID("PNP0C0F"))
Name(_UID, 5)
Method(_STA, 0) {
if (PIRE) {
Return(0x0B)
} else {
Return(0x09)
}
}
Method(_DIS ,0) {
Store(0x1F, PIRE)
}
Method(_PRS ,0) {
Return(IRQP)
}
Method(_CRS ,0) {
CreateWordField(IRQB, 1, IRQN)
ShiftLeft(1, PIRE, IRQN)
Return(IRQB)
}
Method(_SRS, 1) {
CreateWordField(Arg0, 1, IRQM)
FindSetRightBit(IRQM, Local0)
Decrement(Local0)
Store(Local0, PIRE)
}
}
Device(INTF) {
Name(_HID, EISAID("PNP0C0F"))
Name(_UID, 6)
Method(_STA, 0) {
if (PIRF) {
Return(0x0B)
} else {
Return(0x09)
}
}
Method(_DIS ,0) {
Store(0x1F, PIRF)
}
Method(_PRS ,0) {
Return(IRQP)
}
Method(_CRS ,0) {
CreateWordField(IRQB, 1, IRQN)
ShiftLeft(1, PIRF, IRQN)
Return(IRQB)
}
Method(_SRS, 1) {
CreateWordField(Arg0, 1, IRQM)
FindSetRightBit(IRQM, Local0)
Decrement(Local0)
Store(Local0, PIRF)
}
}
Device(INTG) {
Name(_HID, EISAID("PNP0C0F"))
Name(_UID, 7)
Method(_STA, 0) {
if (PIRG) {
Return(0x0B)
} else {
Return(0x09)
}
}
Method(_DIS ,0) {
Store(0x1F, PIRG)
}
Method(_PRS ,0) {
Return(IRQP)
}
Method(_CRS ,0) {
CreateWordField(IRQB, 1, IRQN)
ShiftLeft(1, PIRG, IRQN)
Return(IRQB)
}
Method(_SRS, 1) {
CreateWordField(Arg0, 1, IRQM)
FindSetRightBit(IRQM, Local0)
Decrement(Local0)
Store(Local0, PIRG)
}
}
Device(INTH) {
Name(_HID, EISAID("PNP0C0F"))
Name(_UID, 8)
Method(_STA, 0) {
if (PIRH) {
Return(0x0B)
} else {
Return(0x09)
}
}
Method(_DIS ,0) {
Store(0x1F, PIRH)
}
Method(_PRS ,0) {
Return(IRQP)
}
Method(_CRS ,0) {
CreateWordField(IRQB, 1, IRQN)
ShiftLeft(1, PIRH, IRQN)
Return(IRQB)
}
Method(_SRS, 1) {
CreateWordField(Arg0, 1, IRQM)
FindSetRightBit(IRQM, Local0)
Decrement(Local0)
Store(Local0, PIRH)
}
}
} /* End Scope(_SB) */
/* Supported sleep states: */
Name(\_S0, Package () {0x00, 0x00, 0x00, 0x00} ) /* (S0) - working state */
If (LAnd(SSFG, 0x01)) {
Name(\_S1, Package () {0x01, 0x01, 0x00, 0x00} ) /* (S1) - sleeping w/CPU context */
}
If (LAnd(SSFG, 0x02)) {
Name(\_S2, Package () {0x02, 0x02, 0x00, 0x00} ) /* (S2) - "light" Suspend to RAM */
}
If (LAnd(SSFG, 0x04)) {
Name(\_S3, Package () {0x03, 0x03, 0x00, 0x00} ) /* (S3) - Suspend to RAM */
}
If (LAnd(SSFG, 0x08)) {
Name(\_S4, Package () {0x04, 0x04, 0x00, 0x00} ) /* (S4) - Suspend to Disk */
}
Name(\_S5, Package () {0x05, 0x05, 0x00, 0x00} ) /* (S5) - Soft Off */
Name(\_SB.CSPS ,0) /* Current Sleep State (S0, S1, S2, S3, S4, S5) */
Name(CSMS, 0) /* Current System State */
/* Wake status package */
Name(WKST,Package(){Zero, Zero})
/*
* \_PTS - Prepare to Sleep method
*
* Entry:
* Arg0=The value of the sleeping state S1=1, S2=2, etc
*
* Exit:
* -none-
*
* The _PTS control method is executed at the beginning of the sleep process
* for S1-S5. The sleeping value is passed to the _PTS control method. This
* control method may be executed a relatively long time before entering the
* sleep state and the OS may abort the operation without notification to
* the ACPI driver. This method cannot modify the configuration or power
* state of any device in the system.
*/
Method(\_PTS, 1) {
/* DBGO("\\_PTS\n") */
/* DBGO("From S0 to S") */
/* DBGO(Arg0) */
/* DBGO("\n") */
/* Don't allow PCIRST# to reset USB */
if (LEqual(Arg0,3)){
Store(0,URRE)
}
/* Clear sleep SMI status flag and enable sleep SMI trap. */
/*Store(One, CSSM)
Store(One, SSEN)*/
/* On older chips, clear PciExpWakeDisEn */
/*if (LLessEqual(\_SB.SBRI, 0x13)) {
* Store(0,\_SB.PWDE)
*}
*/
/* Clear wake status structure. */
Store(0, Index(WKST,0))
Store(0, Index(WKST,1))
} /* End Method(\_PTS) */
/*
* The following method results in a "not a valid reserved NameSeg"
* warning so I have commented it out for the duration. It isn't
* used, so it could be removed.
*
*
* \_GTS OEM Going To Sleep method
*
* Entry:
* Arg0=The value of the sleeping state S1=1, S2=2
*
* Exit:
* -none-
*
* Method(\_GTS, 1) {
* DBGO("\\_GTS\n")
* DBGO("From S0 to S")
* DBGO(Arg0)
* DBGO("\n")
* }
*/
/*
* \_BFS OEM Back From Sleep method
*
* Entry:
* Arg0=The value of the sleeping state S1=1, S2=2
*
* Exit:
* -none-
*/
Method(\_BFS, 1) {
/* DBGO("\\_BFS\n") */
/* DBGO("From S") */
/* DBGO(Arg0) */
/* DBGO(" to S0\n") */
}
/*
* \_WAK System Wake method
*
* Entry:
* Arg0=The value of the sleeping state S1=1, S2=2
*
* Exit:
* Return package of 2 DWords
* Dword 1 - Status
* 0x00000000 wake succeeded
* 0x00000001 Wake was signaled but failed due to lack of power
* 0x00000002 Wake was signaled but failed due to thermal condition
* Dword 2 - Power Supply state
* if non-zero the effective S-state the power supply entered
*/
Method(\_WAK, 1) {
/* DBGO("\\_WAK\n") */
/* DBGO("From S") */
/* DBGO(Arg0) */
/* DBGO(" to S0\n") */
/* Re-enable HPET */
Store(1,HPDE)
/* Restore PCIRST# so it resets USB */
if (LEqual(Arg0,3)){
Store(1,URRE)
}
/* Arbitrarily clear PciExpWakeStatus */
Store(PEWS, PEWS)
/* if(DeRefOf(Index(WKST,0))) {
* Store(0, Index(WKST,1))
* } else {
* Store(Arg0, Index(WKST,1))
* }
*/
Return(WKST)
} /* End Method(\_WAK) */
Scope(\_GPE) { /* Start Scope GPE */
} /* End Scope GPE */
/* South Bridge */
Scope(\_SB) { /* Start \_SB scope */
#include "../../../arch/x86/acpi/globutil.asl" /* global utility methods expected within the \_SB scope */
/* _SB.PCI0 */
/* Note: Only need HID on Primary Bus */
Device(PCI0) {
External (TOM1)
External (TOM2)
External (TOM3)
External (TOM4)
Name(_HID, EISAID("PNP0A03"))
Name(_ADR, 0x00180000) /* Dev# = BSP Dev#, Func# = 0 */
Method(_BBN, 0) { /* Bus number = 0 */
Return(0)
}
Method(_STA, 0) {
/* DBGO("\\_SB\\PCI0\\_STA\n") */
Return(0x0B) /* Status is visible */
}
Method(_PRT,0) {
If(GPIC){ Return(APR0) } /* APIC mode */
Return (PR0) /* PIC Mode */
} /* end _PRT */
/* Describe the Northbridge devices */
Device(AMRT) {
Name(_ADR, 0x00000000)
} /* end AMRT */
/* The internal GFX bridge */
Device(AGPB) {
Name(_ADR, 0x00010000)
Method(_STA,0) {
Return(0x0F)
}
} /* end AGPB */
/* The external GFX bridge */
Device(PBR2) {
Name(_ADR, 0x00020000)
Method(_PRT,0) {
If(GPIC){ Return(APS2) } /* APIC mode */
Return (PS2) /* PIC Mode */
} /* end _PRT */
} /* end PBR2 */
/* The external GFX bridge */
Device(PBR3) {
Name(_ADR, 0x00030000)
Method(_PRT,0) {
If(GPIC){ Return(APS3) } /* APIC mode */
Return (PS3) /* PIC Mode */
} /* end _PRT */
} /* end PBR3 */
Device(PBR4) {
Name(_ADR, 0x00040000)
Method(_PRT,0) {
If(GPIC){ Return(APS4) } /* APIC mode */
Return (PS4) /* PIC Mode */
} /* end _PRT */
} /* end PBR4 */
Device(PBR5) {
Name(_ADR, 0x00050000)
Method(_PRT,0) {
If(GPIC){ Return(APS5) } /* APIC mode */
Return (PS5) /* PIC Mode */
} /* end _PRT */
} /* end PBR5 */
Device(PBR6) {
Name(_ADR, 0x00060000)
Method(_PRT,0) {
If(GPIC){ Return(APS6) } /* APIC mode */
Return (PS6) /* PIC Mode */
} /* end _PRT */
} /* end PBR6 */
/* The onboard EtherNet chip */
Device(PBR7) {
Name(_ADR, 0x00070000)
Method(_PRT,0) {
If(GPIC){ Return(APS7) } /* APIC mode */
Return (PS7) /* PIC Mode */
} /* end _PRT */
} /* end PBR7 */
Device(PE20) {
Name(_ADR, 0x00150000)
Method(_PRT,0) {
If(GPIC){ Return(APE0) } /* APIC mode */
Return (PE0) /* PIC Mode */
} /* end _PRT */
} /* end PE20 */
Device(PE21) {
Name(_ADR, 0x00150001)
Method(_PRT,0) {
If(GPIC){ Return(APE1) } /* APIC mode */
Return (PE1) /* PIC Mode */
} /* end _PRT */
} /* end PE21 */
Device(PE22) {
Name(_ADR, 0x00150002)
Method(_PRT,0) {
If(GPIC){ Return(APE2) } /* APIC mode */
Return (APE2) /* PIC Mode */
} /* end _PRT */
} /* end PE22 */
Device(PE23) {
Name(_ADR, 0x00150003)
Method(_PRT,0) {
If(GPIC){ Return(APE3) } /* APIC mode */
Return (PE3) /* PIC Mode */
} /* end _PRT */
} /* end PE23 */
/* Describe the Southbridge devices */
Device(AZHD) {
Name(_ADR, 0x00140002)
OperationRegion(AZPD, PCI_Config, 0x00, 0x100)
Field(AZPD, AnyAcc, NoLock, Preserve) {
offset (0x42),
NSDI, 1,
NSDO, 1,
NSEN, 1,
}
} /* end AZHD */
Device(GEC) {
Name(_ADR, 0x00140006)
} /* end GEC */
Device(UOH1) {
Name(_ADR, 0x00120000)
} /* end UOH1 */
Device(UOH3) {
Name(_ADR, 0x00130000)
} /* end UOH3 */
Device(UOH5) {
Name(_ADR, 0x00160000)
} /* end UOH5 */
Device(UEH1) {
Name(_ADR, 0x00140005)
} /* end UEH1 */
Device(UOH2) {
Name(_ADR, 0x00120002)
} /* end UOH2 */
Device(UOH4) {
Name(_ADR, 0x00130002)
} /* end UOH4 */
Device(UOH6) {
Name(_ADR, 0x00160002)
} /* end UOH5 */
Device(XHC0) {
Name(_ADR, 0x00100000)
} /* end XHC0 */
Device(XHC1) {
Name(_ADR, 0x00100001)
} /* end XHC1 */
Device(SBUS) {
Name(_ADR, 0x00140000)
} /* end SBUS */
Device(LIBR) {
Name(_ADR, 0x00140003)
/* Real Time Clock Device */
Device(RTC0) {
Name(_HID, EISAID("PNP0B00")) /* AT Real Time Clock (not PIIX4 compatible) */
Name(BUF0, ResourceTemplate() {
IO(Decode16, 0x0070, 0x0070, 0x01, 0x02)
})
Name(BUF1, ResourceTemplate() {
IRQNoFlags() {8}
IO(Decode16, 0x0070, 0x0070, 0x01, 0x02)
})
Method(_CRS, 0) {
If(LAnd(HPAD, 0xFFFFFF00)) {
Return(BUF0)
}
Return(BUF1)
}
} /* End Device(_SB.PCI0.LpcIsaBr.RTC0) */
Device(TMR) { /* Timer */
Name(_HID,EISAID("PNP0100")) /* System Timer */
Name(BUF0, ResourceTemplate() {
IO(Decode16, 0x0040, 0x0040, 0x01, 0x04)
})
Name(BUF1, ResourceTemplate() {
IRQNoFlags() {0}
IO(Decode16, 0x0040, 0x0040, 0x01, 0x04)
})
Method(_CRS, 0) {
If(LAnd(HPAD, 0xFFFFFF00)) {
Return(BUF0)
}
Return(BUF1)
}
} /* End Device(_SB.PCI0.LpcIsaBr.TMR) */
Device(SPKR) { /* Speaker */
Name(_HID,EISAID("PNP0800")) /* AT style speaker */
Name(_CRS, ResourceTemplate() {
IO(Decode16, 0x0061, 0x0061, 0, 1)
})
} /* End Device(_SB.PCI0.LpcIsaBr.SPKR) */
Device(PIC) {
Name(_HID,EISAID("PNP0000")) /* AT Interrupt Controller */
Name(_CRS, ResourceTemplate() {
IRQNoFlags(){2}
IO(Decode16,0x0020, 0x0020, 0, 2)
IO(Decode16,0x00A0, 0x00A0, 0, 2)
/* IO(Decode16, 0x00D0, 0x00D0, 0x10, 0x02) */
/* IO(Decode16, 0x04D0, 0x04D0, 0x10, 0x02) */
})
} /* End Device(_SB.PCI0.LpcIsaBr.PIC) */
Device(MAD) { /* 8257 DMA */
Name(_HID,EISAID("PNP0200")) /* Hardware Device ID */
Name(_CRS, ResourceTemplate() {
DMA(Compatibility,BusMaster,Transfer8){4}
IO(Decode16, 0x0000, 0x0000, 0x10, 0x10)
IO(Decode16, 0x0081, 0x0081, 0x01, 0x03)
IO(Decode16, 0x0087, 0x0087, 0x01, 0x01)
IO(Decode16, 0x0089, 0x0089, 0x01, 0x03)
IO(Decode16, 0x008F, 0x008F, 0x01, 0x01)
IO(Decode16, 0x00C0, 0x00C0, 0x10, 0x20)
}) /* End Name(_SB.PCI0.LpcIsaBr.MAD._CRS) */
} /* End Device(_SB.PCI0.LpcIsaBr.MAD) */
Device(COPR) {
Name(_HID,EISAID("PNP0C04")) /* Math Coprocessor */
Name(_CRS, ResourceTemplate() {
IO(Decode16, 0x00F0, 0x00F0, 0, 0x10)
IRQNoFlags(){13}
})
} /* End Device(_SB.PCI0.LpcIsaBr.COPR) */
Device (PS2M) {
Name (_HID, EisaId ("PNP0F13"))
Name (_CRS, ResourceTemplate () {
IRQNoFlags () {12}
})
Method (_STA, 0) {
And (FLG0, 0x04, Local0)
If (LEqual (Local0, 0x04)) {
Return (0x0F)
} Else {
Return (0x00)
}
}
}
Device (PS2K) {
Name (_HID, EisaId ("PNP0303"))
Name (_CRS, ResourceTemplate () {
IO (Decode16, 0x0060, 0x0060, 0x01, 0x01)
IO (Decode16, 0x0064, 0x0064, 0x01, 0x01)
IRQNoFlags () {1}
})
}
} /* end LIBR */
Device(STCR) {
Name(_ADR, 0x00110000)
#include "acpi/sata.asl"
} /* end STCR */
/* Primary (and only) IDE channel */
Device(IDEC) {
Name(_ADR, 0x00140001)
#include "acpi/ide.asl"
} /* end IDEC */
Device(HPET) {
Name(_HID,EISAID("PNP0103"))
Name(CRS, ResourceTemplate() {
IRQNoFlags() {0}
IRQNoFlags() {8}
Memory32Fixed(ReadOnly, 0xFED00000, 0x00000400)
})
Method(_STA, 0) {
If(LAnd(HPAD, 0xFFFFFF00)) {
Return(0x0F)
}
Return(0x0)
}
Method(_CRS, 0) {
CreateDWordField(CRS, 0x0A, HPEB)
Store(HPAD, Local0)
And(Local0, 0xFFFFFFC0, HPEB)
Return(CRS)
}
} /* End Device(_SB.PCI0.HPET) */
Name(CRES, ResourceTemplate() {
IO(Decode16, 0x0CF8, 0x0CF8, 1, 8)
WORDIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
0x0000, /* address granularity */
0x0000, /* range minimum */
0x0CF7, /* range maximum */
0x0000, /* translation */
0x0CF8 /* length */
)
WORDIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
0x0000, /* address granularity */
0x0D00, /* range minimum */
0xFFFF, /* range maximum */
0x0000, /* translation */
0xF300 /* length */
)
/* memory space for PCI BARs below 4GB */
Memory32Fixed(ReadOnly, 0x00000000, 0x00000000, MMIO)
}) /* End Name(_SB.PCI0.CRES) */
Method(_CRS, 0) {
/* DBGO("\\_SB\\PCI0\\_CRS\n") */
CreateDWordField(CRES, ^MMIO._BAS, MM1B)
CreateDWordField(CRES, ^MMIO._LEN, MM1L)
Store(\_SB.PCI0.TOM1, MM1B)
Subtract(PCBA, MM1B, MM1L)
Return(CRES) /* note to change the Name buffer */
} /* end of Method(_SB.PCI0._CRS) */
} /* End Device(PCI0) */
Device(PWRB) { /* Start Power button device */
Name(_HID, EISAID("PNP0C0C"))
Name(_UID, 0xAA)
Name(_STA, 0x0B) /* sata is invisible */
}
} /* End \_SB scope */
}
/* End of ASL file */