X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Facpi-dsdt.dsl;h=7082b651a119d2887fd9b0f56c600a646f073235;hb=refs%2Fheads%2Fcoreboot;hp=bb0a176774cfe9b168e449cdb2ddb8179a950ea9;hpb=d4bded451c3497d43ab50640bd6972d31766ec90;p=seabios.git diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl index bb0a176..7082b65 100644 --- a/src/acpi-dsdt.dsl +++ b/src/acpi-dsdt.dsl @@ -16,6 +16,9 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +ACPI_EXTRACT_ALL_CODE AmlCode + DefinitionBlock ( "acpi-dsdt.aml", // Output Filename "DSDT", // Signature @@ -25,6 +28,12 @@ DefinitionBlock ( 0x1 // OEM Revision ) { + + +/**************************************************************** + * Debugging + ****************************************************************/ + Scope (\) { /* Debug Output */ @@ -50,7 +59,11 @@ DefinitionBlock ( } } - /* PCI Bus definition */ + +/**************************************************************** + * PCI Bus definition + ****************************************************************/ + Scope(\_SB) { Device(PCI0) { Name (_HID, EisaId ("PNP0A03")) @@ -73,10 +86,7 @@ DefinitionBlock ( #define prt_slot3(nr) prt_slot(nr, LNKC, LNKD, LNKA, LNKB) prt_slot0(0x0000), /* Device 1 is power mgmt device, and can only use irq 9 */ - Package() { 0x0001ffff, 0, 0, 9 }, - Package() { 0x0001ffff, 1, LNKB, 0 }, - Package() { 0x0001ffff, 2, LNKC, 0 }, - Package() { 0x0001ffff, 3, LNKD, 0 }, + prt_slot(0x0001, LNKS, LNKB, LNKC, LNKD), prt_slot2(0x0002), prt_slot3(0x0003), prt_slot0(0x0004), @@ -122,48 +132,6 @@ DefinitionBlock ( B0EJ, 32, } -#define hotplug_slot(name, nr) \ - Device (S##name) { \ - Name (_ADR, nr##0000) \ - Method (_EJ0,1) { \ - Store(ShiftLeft(1, nr), B0EJ) \ - Return (0x0) \ - } \ - Name (_SUN, name) \ - } - - hotplug_slot(1, 0x0001) - hotplug_slot(2, 0x0002) - hotplug_slot(3, 0x0003) - hotplug_slot(4, 0x0004) - hotplug_slot(5, 0x0005) - hotplug_slot(6, 0x0006) - hotplug_slot(7, 0x0007) - hotplug_slot(8, 0x0008) - hotplug_slot(9, 0x0009) - hotplug_slot(10, 0x000a) - hotplug_slot(11, 0x000b) - hotplug_slot(12, 0x000c) - hotplug_slot(13, 0x000d) - hotplug_slot(14, 0x000e) - hotplug_slot(15, 0x000f) - hotplug_slot(16, 0x0010) - hotplug_slot(17, 0x0011) - hotplug_slot(18, 0x0012) - hotplug_slot(19, 0x0013) - hotplug_slot(20, 0x0014) - hotplug_slot(21, 0x0015) - hotplug_slot(22, 0x0016) - hotplug_slot(23, 0x0017) - hotplug_slot(24, 0x0018) - hotplug_slot(25, 0x0019) - hotplug_slot(26, 0x001a) - hotplug_slot(27, 0x001b) - hotplug_slot(28, 0x001c) - hotplug_slot(29, 0x001d) - hotplug_slot(30, 0x001e) - hotplug_slot(31, 0x001f) - Name (_CRS, ResourceTemplate () { WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, @@ -209,7 +177,14 @@ DefinitionBlock ( ,, , AddressRangeMemory, TypeStatic) }) } + } + + +/**************************************************************** + * HPET + ****************************************************************/ + Scope(\_SB) { Device(HPET) { Name(_HID, EISAID("PNP0103")) Name(_UID, 0) @@ -230,9 +205,18 @@ DefinitionBlock ( } } + +/**************************************************************** + * VGA + ****************************************************************/ + Scope(\_SB.PCI0) { Device (VGA) { Name (_ADR, 0x00020000) + OperationRegion(PCIC, PCI_Config, Zero, 0x4) + Field(PCIC, DWordAcc, NoLock, Preserve) { + VEND, 32 + } Method (_S1D, 0, NotSerialized) { Return (0x00) @@ -243,17 +227,35 @@ DefinitionBlock ( } Method (_S3D, 0, NotSerialized) { - Return (0x00) + If (LEqual(VEND, 0x1001b36)) { + Return (0x03) // QXL + } Else { + Return (0x00) + } } } + } - /* PIIX3 ISA bridge */ + +/**************************************************************** + * PIIX3 ISA bridge + ****************************************************************/ + + Scope(\_SB.PCI0) { Device (ISA) { Name (_ADR, 0x00010000) /* PIIX PCI to ISA irq remapping */ OperationRegion (P40C, PCI_Config, 0x60, 0x04) + } + } + +/**************************************************************** + * SuperIO devices (kbd, mouse, etc.) + ****************************************************************/ + + Scope(\_SB.PCI0.ISA) { /* Real-time clock */ Device (RTC) { @@ -422,9 +424,14 @@ DefinitionBlock ( Return (BUF0) } } - } + } + - /* PIIX4 PM */ +/**************************************************************** + * PIIX4 PM + ****************************************************************/ + + Scope(\_SB.PCI0) { Device (PX13) { Name (_ADR, 0x00010003) @@ -444,198 +451,150 @@ DefinitionBlock ( } } - /* PCI IRQs */ - Scope(\_SB) { - Field (\_SB.PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) - { - PRQ0, 8, - PRQ1, 8, - PRQ2, 8, - PRQ3, 8 - } - - Device(LNKA){ - Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link - Name(_UID, 1) - Name(_PRS, ResourceTemplate(){ - Interrupt (, Level, ActiveHigh, Shared) - { 5, 10, 11 } - }) - Method (_STA, 0, NotSerialized) - { - Store (0x0B, Local0) - If (And (0x80, PRQ0, Local1)) - { - Store (0x09, Local0) - } - Return (Local0) - } - Method (_DIS, 0, NotSerialized) - { - Or (PRQ0, 0x80, PRQ0) - } - Method (_CRS, 0, NotSerialized) - { - Name (PRR0, ResourceTemplate () - { - Interrupt (, Level, ActiveHigh, Shared) - {1} - }) - CreateDWordField (PRR0, 0x05, TMP) - Store (PRQ0, Local0) - If (LLess (Local0, 0x80)) - { - Store (Local0, TMP) - } - Else - { - Store (Zero, TMP) - } - Return (PRR0) - } - Method (_SRS, 1, NotSerialized) - { - CreateDWordField (Arg0, 0x05, TMP) - Store (TMP, PRQ0) - } + +/**************************************************************** + * PCI hotplug + ****************************************************************/ + + Scope(\_SB.PCI0) { + /* Methods called by bulk generated PCI devices below */ + + /* Methods called by hotplug devices */ + Method (PCEJ, 1, NotSerialized) { + // _EJ0 method - eject callback + Store(ShiftLeft(1, Arg0), B0EJ) + Return (0x0) } - Device(LNKB){ - Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link - Name(_UID, 2) - Name(_PRS, ResourceTemplate(){ - Interrupt (, Level, ActiveHigh, Shared) - { 5, 10, 11 } - }) - Method (_STA, 0, NotSerialized) - { - Store (0x0B, Local0) - If (And (0x80, PRQ1, Local1)) - { - Store (0x09, Local0) - } - Return (Local0) + + /* Hotplug notification method supplied by SSDT */ + External (\_SB.PCI0.PCNT, MethodObj) + + /* PCI hotplug notify method */ + Method(PCNF, 0) { + // Local0 = iterator + Store (Zero, Local0) + While (LLess(Local0, 31)) { + Increment(Local0) + If (And(PCIU, ShiftLeft(1, Local0))) { + PCNT(Local0, 1) } - Method (_DIS, 0, NotSerialized) - { - Or (PRQ1, 0x80, PRQ1) - } - Method (_CRS, 0, NotSerialized) - { - Name (PRR0, ResourceTemplate () - { - Interrupt (, Level, ActiveHigh, Shared) - {1} - }) - CreateDWordField (PRR0, 0x05, TMP) - Store (PRQ1, Local0) - If (LLess (Local0, 0x80)) - { - Store (Local0, TMP) - } - Else - { - Store (Zero, TMP) - } - Return (PRR0) - } - Method (_SRS, 1, NotSerialized) - { - CreateDWordField (Arg0, 0x05, TMP) - Store (TMP, PRQ1) + If (And(PCID, ShiftLeft(1, Local0))) { + PCNT(Local0, 3) } + } + Return(One) } - Device(LNKC){ - Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link - Name(_UID, 3) - Name(_PRS, ResourceTemplate(){ - Interrupt (, Level, ActiveHigh, Shared) - { 5, 10, 11 } - }) - Method (_STA, 0, NotSerialized) - { - Store (0x0B, Local0) - If (And (0x80, PRQ2, Local1)) - { - Store (0x09, Local0) - } - Return (Local0) - } - Method (_DIS, 0, NotSerialized) - { - Or (PRQ2, 0x80, PRQ2) - } - Method (_CRS, 0, NotSerialized) - { - Name (PRR0, ResourceTemplate () - { - Interrupt (, Level, ActiveHigh, Shared) - {1} - }) - CreateDWordField (PRR0, 0x05, TMP) - Store (PRQ2, Local0) - If (LLess (Local0, 0x80)) - { - Store (Local0, TMP) - } - Else - { - Store (Zero, TMP) - } - Return (PRR0) - } - Method (_SRS, 1, NotSerialized) - { - CreateDWordField (Arg0, 0x05, TMP) - Store (TMP, PRQ2) - } + + } + + +/**************************************************************** + * PCI IRQs + ****************************************************************/ + + Scope(\_SB) { + Field (PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) + { + PRQ0, 8, + PRQ1, 8, + PRQ2, 8, + PRQ3, 8 } - Device(LNKD){ - Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link - Name(_UID, 4) - Name(_PRS, ResourceTemplate(){ - Interrupt (, Level, ActiveHigh, Shared) - { 5, 10, 11 } - }) - Method (_STA, 0, NotSerialized) - { - Store (0x0B, Local0) - If (And (0x80, PRQ3, Local1)) - { - Store (0x09, Local0) - } - Return (Local0) - } - Method (_DIS, 0, NotSerialized) - { - Or (PRQ3, 0x80, PRQ3) - } - Method (_CRS, 0, NotSerialized) - { - Name (PRR0, ResourceTemplate () - { - Interrupt (, Level, ActiveHigh, Shared) - {1} - }) - CreateDWordField (PRR0, 0x05, TMP) - Store (PRQ3, Local0) - If (LLess (Local0, 0x80)) - { - Store (Local0, TMP) - } - Else - { - Store (Zero, TMP) - } - Return (PRR0) - } - Method (_SRS, 1, NotSerialized) - { - CreateDWordField (Arg0, 0x05, TMP) - Store (TMP, PRQ3) - } + + Method (IQST, 1, NotSerialized) { + // _STA method - get status + If (And (0x80, Arg0)) { + Return (0x09) + } + Return (0x0B) + } + Method (IQCR, 1, NotSerialized) { + // _CRS method - get current settings + Name (PRR0, ResourceTemplate () + { + Interrupt (, Level, ActiveHigh, Shared) + { 0 } + }) + CreateDWordField (PRR0, 0x05, PRRI) + If (LLess (Arg0, 0x80)) { + Store (Arg0, PRRI) + } + Return (PRR0) + } + // _DIS method - disable interrupt +#define DISIRQ(PRQVAR) \ + Or(PRQVAR, 0x80, PRQVAR) \ + // _SRS method - set interrupt +#define SETIRQ(PRQVAR, IRQINFO) \ + CreateDWordField (IRQINFO, 0x05, PRRI) \ + Store (PRRI, PRQVAR) + + Device(LNKA) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 1) + Name(_PRS, ResourceTemplate(){ + Interrupt (, Level, ActiveHigh, Shared) + { 5, 10, 11 } + }) + Method (_STA, 0, NotSerialized) { Return (IQST(PRQ0)) } + Method (_DIS, 0, NotSerialized) { DISIRQ(PRQ0) } + Method (_CRS, 0, NotSerialized) { Return (IQCR(PRQ0)) } + Method (_SRS, 1, NotSerialized) { SETIRQ(PRQ0, Arg0) } + } + Device(LNKB) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 2) + Name(_PRS, ResourceTemplate(){ + Interrupt (, Level, ActiveHigh, Shared) + { 5, 10, 11 } + }) + Method (_STA, 0, NotSerialized) { Return (IQST(PRQ1)) } + Method (_DIS, 0, NotSerialized) { DISIRQ(PRQ1) } + Method (_CRS, 0, NotSerialized) { Return (IQCR(PRQ1)) } + Method (_SRS, 1, NotSerialized) { SETIRQ(PRQ1, Arg0) } + } + Device(LNKC) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 3) + Name(_PRS, ResourceTemplate() { + Interrupt (, Level, ActiveHigh, Shared) + { 5, 10, 11 } + }) + Method (_STA, 0, NotSerialized) { Return (IQST(PRQ2)) } + Method (_DIS, 0, NotSerialized) { DISIRQ(PRQ2) } + Method (_CRS, 0, NotSerialized) { Return (IQCR(PRQ2)) } + Method (_SRS, 1, NotSerialized) { SETIRQ(PRQ2, Arg0) } + } + Device(LNKD) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 4) + Name(_PRS, ResourceTemplate() { + Interrupt (, Level, ActiveHigh, Shared) + { 5, 10, 11 } + }) + Method (_STA, 0, NotSerialized) { Return (IQST(PRQ3)) } + Method (_DIS, 0, NotSerialized) { DISIRQ(PRQ3) } + Method (_CRS, 0, NotSerialized) { Return (IQCR(PRQ3)) } + Method (_SRS, 1, NotSerialized) { SETIRQ(PRQ3, Arg0) } + } + Device(LNKS) { + Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link + Name(_UID, 5) + Name(_PRS, ResourceTemplate() { + Interrupt (, Level, ActiveHigh, Shared) + { 9 } + }) + Method (_STA, 0, NotSerialized) { Return (IQST(PRQ0)) } + Method (_DIS, 0, NotSerialized) { DISIRQ(PRQ0) } + Method (_CRS, 0, NotSerialized) { Return (IQCR(PRQ0)) } } } + +/**************************************************************** + * Suspend + ****************************************************************/ + /* * S3 (suspend-to-ram), S4 (suspend-to-disk) and S5 (power-off) type codes: * must match piix4 emulation. @@ -662,7 +621,11 @@ DefinitionBlock ( Zero /* reserved */ }) - /* CPU hotplug */ + +/**************************************************************** + * CPU hotplug + ****************************************************************/ + Scope(\_SB) { /* Objects filled in by run-time generated SSDT */ External(NTFY, MethodObj) @@ -734,6 +697,11 @@ DefinitionBlock ( } } + +/**************************************************************** + * General purpose events + ****************************************************************/ + Scope (\_GPE) { Name(_HID, "ACPI0006") @@ -741,50 +709,9 @@ DefinitionBlock ( Method(_L00) { Return(0x01) } - -#define gen_pci_hotplug(nr) \ - If (And(\_SB.PCI0.PCIU, ShiftLeft(1, nr))) { \ - Notify(\_SB.PCI0.S##nr, 1) \ - } \ - If (And(\_SB.PCI0.PCID, ShiftLeft(1, nr))) { \ - Notify(\_SB.PCI0.S##nr, 3) \ - } - Method(_L01) { - gen_pci_hotplug(1) - gen_pci_hotplug(2) - gen_pci_hotplug(3) - gen_pci_hotplug(4) - gen_pci_hotplug(5) - gen_pci_hotplug(6) - gen_pci_hotplug(7) - gen_pci_hotplug(8) - gen_pci_hotplug(9) - gen_pci_hotplug(10) - gen_pci_hotplug(11) - gen_pci_hotplug(12) - gen_pci_hotplug(13) - gen_pci_hotplug(14) - gen_pci_hotplug(15) - gen_pci_hotplug(16) - gen_pci_hotplug(17) - gen_pci_hotplug(18) - gen_pci_hotplug(19) - gen_pci_hotplug(20) - gen_pci_hotplug(21) - gen_pci_hotplug(22) - gen_pci_hotplug(23) - gen_pci_hotplug(24) - gen_pci_hotplug(25) - gen_pci_hotplug(26) - gen_pci_hotplug(27) - gen_pci_hotplug(28) - gen_pci_hotplug(29) - gen_pci_hotplug(30) - gen_pci_hotplug(31) - - Return (0x01) - + // PCI hotplug event + Return(\_SB.PCI0.PCNF()) } Method(_L02) { // CPU hotplug event @@ -830,5 +757,4 @@ DefinitionBlock ( Return(0x01) } } - }