/****************************************************************************** * DSDT for Xen with Qemu device model * * Copyright (c) 2004, Intel Corporation. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope 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., 59 Temple * Place - Suite 330, Boston, MA 02111-1307 USA. */ DefinitionBlock ("DSDT.aml", "DSDT", 2, "Xen", "HVM", 0) { Name (\PMBS, 0x0C00) Name (\PMLN, 0x08) Name (\IOB1, 0x00) Name (\IOL1, 0x00) Name (\APCB, 0xFEC00000) Name (\APCL, 0x00010000) Name (\PUID, 0x00) /* _S3 and _S4 are in separate SSDTs */ Name (\_S5, Package (0x04) { 0x00, /* PM1a_CNT.SLP_TYP */ 0x00, /* PM1b_CNT.SLP_TYP */ 0x00, /* reserved */ 0x00 /* reserved */ }) Name(PICD, 0) Method(_PIC, 1) { Store(Arg0, PICD) } Scope (\_SB) { /* ACPI_INFO_PHYSICAL_ADDRESS == 0xFC000000 */ OperationRegion(BIOS, SystemMemory, 0xFC000000, 24) Field(BIOS, ByteAcc, NoLock, Preserve) { UAR1, 1, UAR2, 1, LTP1, 1, HPET, 1, Offset(4), PMIN, 32, PLEN, 32, MSUA, 32, /* MADT checksum address */ MAPA, 32, /* MADT LAPIC0 address */ VGIA, 32 /* VM generation id address */ } /* Fix HCT test for 0x400 pci memory: * - need to report low 640 MB mem as motherboard resource */ Device(MEM0) { Name(_HID, EISAID("PNP0C02")) Name(_CRS, ResourceTemplate() { QWordMemory( ResourceConsumer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, 0x00000000, 0x0009ffff, 0x00000000, 0x000a0000) }) } Device (PCI0) { Name (_HID, EisaId ("PNP0A03")) Name (_UID, 0x00) Name (_ADR, 0x00) Name (_BBN, 0x00) /* Make cirrues VGA S3 suspend/resume work in Windows XP/2003 */ Device (VGA) { Name (_ADR, 0x00020000) Method (_S1D, 0, NotSerialized) { Return (0x00) } Method (_S2D, 0, NotSerialized) { Return (0x00) } Method (_S3D, 0, NotSerialized) { Return (0x00) } } Method (_CRS, 0, NotSerialized) { Name (PRT0, ResourceTemplate () { /* bus number is from 0 - 255*/ WordBusNumber( ResourceProducer, MinFixed, MaxFixed, SubDecode, 0x0000, 0x0000, 0x00FF, 0x0000, 0x0100) IO (Decode16, 0x0CF8, 0x0CF8, 0x01, 0x08) WordIO( ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, 0x0000, 0x0000, 0x0CF7, 0x0000, 0x0CF8) WordIO( ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, 0x0000, 0x0D00, 0xFFFF, 0x0000, 0xF300) /* reserve memory for pci devices */ DWordMemory( ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, 0x000A0000, 0x000BFFFF, 0x00000000, 0x00020000) /* reserve MMIO BARs of gfx for 1:1 mapping */ DWordMemory( ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, 0xF8000000, 0xF9FFFFFF, 0x00000000, 0x02000000) DWordMemory( ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, 0x00000000, 0xD8000000, 0xDFFFFFFF, 0x00000000, 0x08000000) DWordMemory( ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, 0xD4000000, 0xD7FFFFFF, 0x00000000, 0x04000000) DWordMemory( ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, 0xFB000000, 0xFB07FFFF, 0x00000000, 0x00080000, ,, _Y01) }) CreateDWordField(PRT0, \_SB.PCI0._CRS._Y01._MIN, MMIN) CreateDWordField(PRT0, \_SB.PCI0._CRS._Y01._MAX, MMAX) CreateDWordField(PRT0, \_SB.PCI0._CRS._Y01._LEN, MLEN) Store(\_SB.PMIN, MMIN) Store(\_SB.PLEN, MLEN) Add(MMIN, MLEN, MMAX) Subtract(MMAX, One, MMAX) Return (PRT0) } Device(HPET) { Name(_HID, EISAID("PNP0103")) Name(_UID, 0) Method (_STA, 0, NotSerialized) { If(LEqual(\_SB.HPET, 0)) { Return(0x00) } Else { Return(0x0F) } } Name(_CRS, ResourceTemplate() { DWordMemory( ResourceConsumer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, 0x00000000, 0xFED00000, 0xFED003FF, 0x00000000, 0x00000400 /* 1K memory: FED00000 - FED003FF */ ) }) } Device (ISA) { Name (_ADR, 0x00010000) /* device 1, fn 0 */ OperationRegion(PIRQ, PCI_Config, 0x60, 0x4) Scope(\) { Field (\_SB.PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) { PIRA, 8, PIRB, 8, PIRC, 8, PIRD, 8 } } Device (SYSR) { Name (_HID, EisaId ("PNP0C02")) Name (_UID, 0x01) Name (CRS, ResourceTemplate () { /* TODO: list hidden resources */ IO (Decode16, 0x0010, 0x0010, 0x00, 0x10) IO (Decode16, 0x0022, 0x0022, 0x00, 0x0C) IO (Decode16, 0x0030, 0x0030, 0x00, 0x10) IO (Decode16, 0x0044, 0x0044, 0x00, 0x1C) IO (Decode16, 0x0062, 0x0062, 0x00, 0x02) IO (Decode16, 0x0065, 0x0065, 0x00, 0x0B) IO (Decode16, 0x0072, 0x0072, 0x00, 0x0E) IO (Decode16, 0x0080, 0x0080, 0x00, 0x01) IO (Decode16, 0x0084, 0x0084, 0x00, 0x03) IO (Decode16, 0x0088, 0x0088, 0x00, 0x01) IO (Decode16, 0x008C, 0x008C, 0x00, 0x03) IO (Decode16, 0x0090, 0x0090, 0x00, 0x10) IO (Decode16, 0x00A2, 0x00A2, 0x00, 0x1C) IO (Decode16, 0x00E0, 0x00E0, 0x00, 0x10) IO (Decode16, 0x08A0, 0x08A0, 0x00, 0x04) IO (Decode16, 0x0CC0, 0x0CC0, 0x00, 0x10) IO (Decode16, 0x04D0, 0x04D0, 0x00, 0x02) }) Method (_CRS, 0, NotSerialized) { Return (CRS) } } Device (PIC) { Name (_HID, EisaId ("PNP0000")) Name (_CRS, ResourceTemplate () { IO (Decode16, 0x0020, 0x0020, 0x01, 0x02) IO (Decode16, 0x00A0, 0x00A0, 0x01, 0x02) IRQNoFlags () {2} }) } Device (DMA0) { Name (_HID, EisaId ("PNP0200")) Name (_CRS, ResourceTemplate () { DMA (Compatibility, BusMaster, Transfer8) {4} IO (Decode16, 0x0000, 0x0000, 0x00, 0x10) IO (Decode16, 0x0081, 0x0081, 0x00, 0x03) IO (Decode16, 0x0087, 0x0087, 0x00, 0x01) IO (Decode16, 0x0089, 0x0089, 0x00, 0x03) IO (Decode16, 0x008F, 0x008F, 0x00, 0x01) IO (Decode16, 0x00C0, 0x00C0, 0x00, 0x20) IO (Decode16, 0x0480, 0x0480, 0x00, 0x10) }) } Device (TMR) { Name (_HID, EisaId ("PNP0100")) Name (_CRS, ResourceTemplate () { IO (Decode16, 0x0040, 0x0040, 0x00, 0x04) IRQNoFlags () {0} }) } Device (RTC) { Name (_HID, EisaId ("PNP0B00")) Name (_CRS, ResourceTemplate () { IO (Decode16, 0x0070, 0x0070, 0x00, 0x02) IRQNoFlags () {8} }) } Device (SPKR) { Name (_HID, EisaId ("PNP0800")) Name (_CRS, ResourceTemplate () { IO (Decode16, 0x0061, 0x0061, 0x00, 0x01) }) } Device (PS2M) { Name (_HID, EisaId ("PNP0F13")) Name (_CID, 0x130FD041) Method (_STA, 0, NotSerialized) { Return (0x0F) } Name (_CRS, ResourceTemplate () { IRQNoFlags () {12} }) } Device (PS2K) { Name (_HID, EisaId ("PNP0303")) Name (_CID, 0x0B03D041) Method (_STA, 0, NotSerialized) { Return (0x0F) } Name (_CRS, ResourceTemplate () { IO (Decode16, 0x0060, 0x0060, 0x00, 0x01) IO (Decode16, 0x0064, 0x0064, 0x00, 0x01) IRQNoFlags () {1} }) } Device (FDC0) { Name (_HID, EisaId ("PNP0700")) Method (_STA, 0, NotSerialized) { Return (0x0F) } Name (_CRS, ResourceTemplate () { IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x06) IO (Decode16, 0x03F7, 0x03F7, 0x01, 0x01) IRQNoFlags () {6} DMA (Compatibility, NotBusMaster, Transfer8) {2} }) } Device (UAR1) { Name (_HID, EisaId ("PNP0501")) Name (_UID, 0x01) Method (_STA, 0, NotSerialized) { If(LEqual(\_SB.UAR1, 0)) { Return(0x00) } Else { Return(0x0F) } } Name (_CRS, ResourceTemplate() { IO (Decode16, 0x03F8, 0x03F8, 8, 8) IRQNoFlags () {4} }) } Device (UAR2) { Name (_HID, EisaId ("PNP0501")) Name (_UID, 0x02) Method (_STA, 0, NotSerialized) { If(LEqual(\_SB.UAR2, 0)) { Return(0x00) } Else { Return(0x0F) } } Name (_CRS, ResourceTemplate() { IO (Decode16, 0x02F8, 0x02F8, 8, 8) IRQNoFlags () {3} }) } Device (LTP1) { Name (_HID, EisaId ("PNP0400")) Name (_UID, 0x02) Method (_STA, 0, NotSerialized) { If(LEqual(\_SB.LTP1, 0)) { Return(0x00) } Else { Return(0x0F) } } Name (_CRS, ResourceTemplate() { IO (Decode16, 0x0378, 0x0378, 0x08, 0x08) IRQNoFlags () {7} }) } Device(VGID) { Name(_HID, EisaID ("XEN0000")) Name(_UID, 0x00) Name(_CID, "VM_Gen_Counter") Name(_DDN, "VM_Gen_Counter") Method(_STA, 0, NotSerialized) { If(LEqual(\_SB.VGIA, 0x00000000)) { Return(0x00) } Else { Return(0x0F) } } Name(PKG, Package () { 0x00000000, 0x00000000 }) Method(ADDR, 0, NotSerialized) { Store(\_SB.VGIA, Index(PKG, 0)) Return(PKG) } } } } } }