* drop ich7 include
[coreboot.git] / src / northbridge / intel / i945 / acpi / i945_igd.asl
index 37de874cebc9306e6e69c26a3ceecc2a7b5d7f8b..806ae5dd322d6955c2da143fdbc1f0c0d996e998 100644 (file)
@@ -23,6 +23,302 @@ Device (GFX0)
 {
        Name (_ADR, 0x00020000)
 
-       // TODO display switching etc
+       /* Display Output Switching */
+       Method (_DOS, 1)
+       {
+               /* Windows 2000 and Windows XP call _DOS to enable/disable
+                * Display Output Switching during init and while a switch
+                * is already active
+                */
+               Store (And(Arg0, 7), DSEN)
+       }
+
+       /* We try to support as many i945 systems as possible,
+        * so keep the number of DIDs flexible.
+        */
+       Method (_DOD, 0)
+       {
+               If (LEqual(NDID, 1)) {
+                       Name(DOD1, Package() {
+                               0xffffffff
+                       })
+                       Store (Or(0x00010000, DID1), Index(DOD1, 0))
+                       Return(DOD1)
+               }
+
+               If (LEqual(NDID, 2)) {
+                       Name(DOD2, Package() {
+                               0xffffffff,
+                               0xffffffff
+                       })
+                       Store (Or(0x00010000, DID2), Index(DOD2, 0))
+                       Store (Or(0x00010000, DID2), Index(DOD2, 1))
+                       Return(DOD2)
+               }
+
+               If (LEqual(NDID, 3)) {
+                       Name(DOD3, Package() {
+                               0xffffffff,
+                               0xffffffff,
+                               0xffffffff
+                       })
+                       Store (Or(0x00010000, DID3), Index(DOD3, 0))
+                       Store (Or(0x00010000, DID3), Index(DOD3, 1))
+                       Store (Or(0x00010000, DID3), Index(DOD3, 2))
+                       Return(DOD3)
+               }
+
+               If (LEqual(NDID, 4)) {
+                       Name(DOD4, Package() {
+                               0xffffffff,
+                               0xffffffff,
+                               0xffffffff,
+                               0xffffffff
+                       })
+                       Store (Or(0x00010000, DID4), Index(DOD4, 0))
+                       Store (Or(0x00010000, DID4), Index(DOD4, 1))
+                       Store (Or(0x00010000, DID4), Index(DOD4, 2))
+                       Store (Or(0x00010000, DID4), Index(DOD4, 3))
+                       Return(DOD4)
+               }
+
+               If (LGreater(NDID, 4)) {
+                       Name(DOD5, Package() {
+                               0xffffffff,
+                               0xffffffff,
+                               0xffffffff,
+                               0xffffffff,
+                               0xffffffff
+                       })
+                       Store (Or(0x00010000, DID5), Index(DOD5, 0))
+                       Store (Or(0x00010000, DID5), Index(DOD5, 1))
+                       Store (Or(0x00010000, DID5), Index(DOD5, 2))
+                       Store (Or(0x00010000, DID5), Index(DOD5, 3))
+                       Store (Or(0x00010000, DID5), Index(DOD5, 4))
+                       Return(DOD5)
+               }
+
+               /* Some error happened, but we have to return something */
+               Return (Package() {0x00000400})
+       }
+       
+       Device(DD01)
+       {
+               /* Device Unique ID */
+               Method(_ADR, 0, Serialized)
+               {
+                       If(LEqual(DID1, 0)) {
+                               Return (1)
+                       } Else {
+                               Return (And(0xffff, DID1))
+                       }
+               }
+
+               /* Device Current Status */
+               Method(_DCS, 0)
+               {
+                       TRAP(1)
+                       If (And(CSTE, 1)) {
+                               Return (0x1f)
+                       }
+                       Return(0x1d)
+               }
+
+               /* Query Device Graphics State */
+               Method(_DGS, 0)
+               {
+                       If (And(NSTE, 1)) {
+                               Return(1)
+                       }
+                       Return(0)
+               }
+
+               /* Device Set State */
+               Method(_DSS, 1)
+               {
+                       /* If Parameter Arg0 is (1 << 31) | (1 << 30), the 
+                        * display switch was completed
+                        */
+                       If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
+                               Store (NSTE, CSTE)
+                       }
+               }
+       }
+
+       Device(DD02)
+       {
+               /* Device Unique ID */
+               Method(_ADR, 0, Serialized)
+               {
+                       If(LEqual(DID2, 0)) {
+                               Return (2)
+                       } Else {
+                               Return (And(0xffff, DID2))
+                       }
+               }
+
+               /* Device Current Status */
+               Method(_DCS, 0)
+               {
+                       TRAP(1)
+                       If (And(CSTE, 2)) {
+                               Return (0x1f)
+                       }
+                       Return(0x1d)
+               }
+
+               /* Query Device Graphics State */
+               Method(_DGS, 0)
+               {
+                       If (And(NSTE, 2)) {
+                               Return(1)
+                       }
+                       Return(0)
+               }
+
+               /* Device Set State */
+               Method(_DSS, 1)
+               {
+                       /* If Parameter Arg0 is (1 << 31) | (1 << 30), the 
+                        * display switch was completed
+                        */
+                       If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
+                               Store (NSTE, CSTE)
+                       }
+               }
+       }
+
+
+       Device(DD03)
+       {
+               /* Device Unique ID */
+               Method(_ADR, 0, Serialized)
+               {
+                       If(LEqual(DID3, 0)) {
+                               Return (3)
+                       } Else {
+                               Return (And(0xffff, DID3))
+                       }
+               }
+
+               /* Device Current Status */
+               Method(_DCS, 0)
+               {
+                       TRAP(1)
+                       If (And(CSTE, 4)) {
+                               Return (0x1f)
+                       }
+                       Return(0x1d)
+               }
+
+               /* Query Device Graphics State */
+               Method(_DGS, 0)
+               {
+                       If (And(NSTE, 4)) {
+                               Return(1)
+                       }
+                       Return(0)
+               }
+
+               /* Device Set State */
+               Method(_DSS, 1)
+               {
+                       /* If Parameter Arg0 is (1 << 31) | (1 << 30), the 
+                        * display switch was completed
+                        */
+                       If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
+                               Store (NSTE, CSTE)
+                       }
+               }
+       }
+
+
+       Device(DD04)
+       {
+               /* Device Unique ID */
+               Method(_ADR, 0, Serialized)
+               {
+                       If(LEqual(DID4, 0)) {
+                               Return (4)
+                       } Else {
+                               Return (And(0xffff, DID4))
+                       }
+               }
+
+               /* Device Current Status */
+               Method(_DCS, 0)
+               {
+                       TRAP(1)
+                       If (And(CSTE, 8)) {
+                               Return (0x1f)
+                       }
+                       Return(0x1d)
+               }
+
+               /* Query Device Graphics State */
+               Method(_DGS, 0)
+               {
+                       If (And(NSTE, 4)) {
+                               Return(1)
+                       }
+                       Return(0)
+               }
+
+               /* Device Set State */
+               Method(_DSS, 1)
+               {
+                       /* If Parameter Arg0 is (1 << 31) | (1 << 30), the 
+                        * display switch was completed
+                        */
+                       If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
+                               Store (NSTE, CSTE)
+                       }
+               }
+       }
+
+
+       Device(DD05)
+       {
+               /* Device Unique ID */
+               Method(_ADR, 0, Serialized)
+               {
+                       If(LEqual(DID5, 0)) {
+                               Return (5)
+                       } Else {
+                               Return (And(0xffff, DID5))
+                       }
+               }
+
+               /* Device Current Status */
+               Method(_DCS, 0)
+               {
+                       TRAP(1)
+                       If (And(CSTE, 16)) {
+                               Return (0x1f)
+                       }
+                       Return(0x1d)
+               }
+
+               /* Query Device Graphics State */
+               Method(_DGS, 0)
+               {
+                       If (And(NSTE, 4)) {
+                               Return(1)
+                       }
+                       Return(0)
+               }
+
+               /* Device Set State */
+               Method(_DSS, 1)
+               {
+                       /* If Parameter Arg0 is (1 << 31) | (1 << 30), the 
+                        * display switch was completed
+                        */
+                       If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
+                               Store (NSTE, CSTE)
+                       }
+               }
+       }
+
 }