blob: d0ec7db2d00941afe3242073c30aa78636986896 [file] [log] [blame]
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2004 Nick Barker <Nick.Barker9@btinternet.com>
* Copyright (C) 2007-2009 coresystems GmbH
*
* 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.aml", "DSDT", 1, "CX700 ", "COREBOOT", 0x00000001)
{
/*
* Define the main processor
*/
Scope (\_PR)
{
Processor (\_PR.CPU0, 0x00, 0x00000410, 0x06) {}
}
/* 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 })
Scope (\) {
Name (PICF , 0) // Global flag indicating whether to use PIC or APIC mode
Method ( _PIC,1) // The OS is calling this
{
Store( Arg0 , PICF)
}
} // end of \ scope
/* Root of the bus hierarchy */
Scope (\_SB)
{
/* Define how interrupt Link A is plumbed in */
Device (LNKA)
{
Name (_HID, EisaId ("PNP0C0F"))
Name (_UID, 0x01)
/* Status - always return ready */
Method (_STA, 0, NotSerialized)
{
Return (0x0B)
}
/* Current Resources - return irq set up in BIOS */
Method (_CRS, 0, NotSerialized)
{
Name (CRSP, ResourceTemplate () {
IRQ (Level, ActiveLow, Shared) {11}
})
Name (CRSA, ResourceTemplate () {
Interrupt (ResourceConsumer, Level, ActiveLow, Shared) {16}
})
If (LNot (PICF)) {
Return (CRSP)
} Else {
Return (CRSA)
}
}
/* Possible Resources - return the range of irqs
* we are using for PCI - only here to keep Linux ACPI
* happy
*/
Method (_PRS, 0, NotSerialized)
{
Name (PRSP, ResourceTemplate () {
IRQ (Level, ActiveLow, Shared) {3,4,6,7,10,11,12}
})
Name (PRSA, ResourceTemplate () {
Interrupt (ResourceConsumer, Level, ActiveLow, Shared) {16,17,18,19,20,21,22,23}
})
If (LNot (PICF)) {
Return (PRSP)
} Else {
Return (PRSA)
}
}
/* Set Resources - dummy function to keep Linux ACPI happy
* Linux is more than happy not to tinker with irq
* assignments as long as the CRS and STA functions
* return good values
*/
Method (_SRS, 1, NotSerialized ) {}
/* Disable - dummy function to keep Linux ACPI happy */
Method (_DIS, 0, NotSerialized ) {}
} // End of LNKA
/* Define how interrupt Link B is plumbed in */
Device (LNKB)
{
Name (_HID, EisaId ("PNP0C0F"))
Name (_UID, 0x02)
/* Status - always return ready */
Method (_STA, 0, NotSerialized)
{
Return (0x0B)
}
/* Current Resources - return irq set up in BIOS */
Method (_CRS, 0, NotSerialized)
{
Name (CRSP, ResourceTemplate () {
IRQ (Level, ActiveLow, Shared) {11}
})
Name (CRSA, ResourceTemplate () {
Interrupt (ResourceConsumer, Level, ActiveLow, Shared) {17}
})
If (LNot (PICF)) {
Return (CRSP)
} Else {
Return (CRSA)
}
}
/* Possible Resources - return the range of irqs
* we are using for PCI - only here to keep Linux ACPI
* happy
*/
Method (_PRS, 0, NotSerialized)
{
Name (PRSP, ResourceTemplate () {
IRQ (Level, ActiveLow, Shared) {3,4,6,7,10,11,12}
})
Name (PRSA, ResourceTemplate () {
Interrupt (ResourceConsumer, Level, ActiveLow, Shared) {16,17,18,19,20,21,22,23}
})
If (LNot (PICF)) {
Return (PRSP)
} Else {
Return (PRSA)
}
}
/* Set Resources - dummy function to keep Linux ACPI happy
* Linux is more than happy not to tinker with irq
* assignments as long as the CRS and STA functions
* return good values
*/
Method (_SRS, 1, NotSerialized ) {}
/* Disable - dummy function to keep Linux ACPI happy */
Method (_DIS, 0, NotSerialized ) {}
} // End of LNKB
/* Define how interrupt Link C is plumbed in */
Device (LNKC)
{
Name (_HID, EisaId ("PNP0C0F"))
Name (_UID, 0x03)
/* Status - always return ready */
Method (_STA, 0, NotSerialized)
{
Return (0x0B)
}
/* Current Resources - return irq set up in BIOS */
Method (_CRS, 0, NotSerialized)
{
Name (CRSP, ResourceTemplate () {
IRQ (Level, ActiveLow, Shared) {10}
})
Name (CRSA, ResourceTemplate () {
Interrupt (ResourceConsumer, Level, ActiveLow, Shared) {18}
})
If (LNot (PICF)) {
Return (CRSP)
} Else {
Return (CRSA)
}
}
/* Possible Resources - return the range of irqs
* we are using for PCI - only here to keep Linux ACPI
* happy
*/
Method (_PRS, 0, NotSerialized)
{
Name (PRSP, ResourceTemplate () {
IRQ (Level, ActiveLow, Shared) {3,4,6,7,10,11,12}
})
Name (PRSA, ResourceTemplate () {
Interrupt (ResourceConsumer, Level, ActiveLow, Shared) {16,17,18,19,20,21,22,23}
})
If (LNot (PICF)) {
Return (PRSP)
} Else {
Return (PRSA)
}
}
/* Set Resources - dummy function to keep Linux ACPI happy
* Linux is more than happy not to tinker with irq
* assignments as long as the CRS and STA functions
* return good values
*/
Method (_SRS, 1, NotSerialized ) {}
/* Disable - dummy function to keep Linux ACPI happy */
Method (_DIS, 0, NotSerialized ) {}
} // End of LNKC
/* Define how interrupt Link D is plumbed in */
Device (LNKD)
{
Name (_HID, EisaId ("PNP0C0F"))
Name (_UID, 0x04)
/* Status - always return ready */
Method (_STA, 0, NotSerialized)
{
Return (0x0B)
}
/* Current Resources - return irq set up in BIOS */
Method (_CRS, 0, NotSerialized)
{
Name (CRSP, ResourceTemplate () {
IRQ (Level, ActiveLow, Shared) {10}
})
Name (CRSA, ResourceTemplate () {
Interrupt (ResourceConsumer, Level, ActiveLow, Shared) {19}
})
If (LNot (PICF)) {
Return (CRSP)
} Else {
Return (CRSA)
}
}
/* Possible Resources - return the range of irqs
* we are using for PCI - only here to keep Linux ACPI
* happy
*/
Method (_PRS, 0, NotSerialized)
{
Name (PRSP, ResourceTemplate () {
IRQ (Level, ActiveLow, Shared) {3,4,6,7,10,11,12}
})
Name (PRSA, ResourceTemplate () {
Interrupt (ResourceConsumer, Level, ActiveLow, Shared) {16,17,18,19,20,21,22,23}
})
If (LNot (PICF)) {
Return (PRSP)
} Else {
Return (PRSA)
}
}
/* Set Resources - dummy function to keep Linux ACPI happy
* Linux is more than happy not to tinker with irq
* assignments as long as the CRS and STA functions
* return good values
*/
Method (_SRS, 1, NotSerialized ) {}
/* Disable - dummy function to keep Linux ACPI happy */
Method (_DIS, 0, NotSerialized ) {}
} // End of LNKD
/* PCI Root Bridge */
Device (PCI0)
{
Name (_HID, EisaId ("PNP0A08"))
Name (_CID, EisaId ("PNP0A03"))
Name (_ADR, 0x00)
Name (_UID, 0x00)
Name (_BBN, 0x00)
// Mainboard specific IRQ routing
#include "acpi/irq.asl"
/* PCI Routing Table */
Method (_PRT, 0, NotSerialized)
{
If (LNot (PICF))
{
Return (PICM)
}
Else
{
Return (APIC)
}
}
Device (P2PB) /* PCI to PCI bridge */
{
Name (_ADR, 0x00130001)
#include "acpi/irq-p2p-bridge.asl"
Method (_PRT, 0, NotSerialized)
{
If (LNot (PICF))
{
Return (PICM)
}
Else
{
Return (APIC)
}
}
/* Status - always return ready */
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
}
} // End of PCI0
} // End of _SB
} // End of Definition Block