Jump to content

need to understand complex _DOD method


rr7
 Share

1 post in this topic

Recommended Posts

Hi,

 

it seems the _DOD method should return a value something like :

 

Method (_DOD, 0) {
Return (
Package()
{
0x00000110, // Primary LCD panel, not detectable by BIOS
0x80000100, // CRT type display, not detectable by BIOS
0x80000220, // TV type display, not detectable by the BIOS
0x80000411, // Secondary LCD panel, not detectable by BIOS
}
)
}

 

but on modern BIOS it seems to have become something complex like this:

 

Method (_DOD, 0, NotSerialized)
		 {
			 Store (NDID, Local0)
			 Store (0x00, NDID)
			 If (LNotEqual (DIDL, Zero))
			 {
				 Store (SDDL (DID1), DID1)
			 }
			 If (LNotEqual (DDL2, Zero))
			 {
				 Store (SDDL (DID2), DID2)
			 }
			 If (LNotEqual (DDL3, Zero))
			 {
				 Store (SDDL (DID3), DID3)
			 }
			 If (LNotEqual (DDL4, Zero))
			 {
				 Store (SDDL (DID4), DID4)
			 }
			 If (LNotEqual (DDL5, Zero))
			 {
				 Store (SDDL (DID5), DID5)
			 }
			 If (LEqual (NDID, 0x00))
			 {
				 Store (Local0, NDID)
			 }
			 If (LEqual (NDID, 0x01))
			 {
				 Name (TMP1, Package (0x01)
				 {
					 0xFFFFFFFF
				 })
				 Store (Or (0x00010000, DID1), Index (TMP1, 0x00))
				 Return (TMP1)
			 }
			 If (LEqual (NDID, 0x02))
			 {
				 Name (TMP2, Package (0x02)
				 {
					 0xFFFFFFFF,
					 0xFFFFFFFF
				 })
				 Store (Or (0x00010000, DID1), Index (TMP2, 0x00))
				 Store (Or (0x00010000, DID2), Index (TMP2, 0x01))
				 Return (TMP2)
			 }
			 If (LEqual (NDID, 0x03))
			 {
				 Name (TMP3, Package (0x03)
				 {
					 0xFFFFFFFF,
					 0xFFFFFFFF,
					 0xFFFFFFFF
				 })
				 Store (Or (0x00010000, DID1), Index (TMP3, 0x00))
				 Store (Or (0x00010000, DID2), Index (TMP3, 0x01))
				 Store (Or (0x00010000, DID3), Index (TMP3, 0x02))
				 Return (TMP3)
			 }
			 If (LEqual (NDID, 0x04))
			 {
				 Name (TMP4, Package (0x04)
				 {
					 0xFFFFFFFF,
					 0xFFFFFFFF,
					 0xFFFFFFFF,
					 0xFFFFFFFF
				 })
				 Store (Or (0x00010000, DID1), Index (TMP4, 0x00))
				 Store (Or (0x00010000, DID2), Index (TMP4, 0x01))
				 Store (Or (0x00010000, DID3), Index (TMP4, 0x02))
				 Store (Or (0x00010000, DID4), Index (TMP4, 0x03))
				 Return (TMP4)
			 }
			 If (LGreater (NDID, 0x04))
			 {
				 Name (TMP5, Package (0x05)
				 {
					 0xFFFFFFFF,
					 0xFFFFFFFF,
					 0xFFFFFFFF,
					 0xFFFFFFFF,
					 0xFFFFFFFF
				 })
				 Store (Or (0x00010000, DID1), Index (TMP5, 0x00))
				 Store (Or (0x00010000, DID2), Index (TMP5, 0x01))
				 Store (Or (0x00010000, DID3), Index (TMP5, 0x02))
				 Store (Or (0x00010000, DID4), Index (TMP5, 0x03))
				 Store (Or (0x00010000, DID4), Index (TMP5, 0x04))
				 Return (TMP5)
			 }
			 Return (Package (0x01)
			 {
				 0x0400
			 })
		 }

 

i'm guessing whatever that code is, it must equate to similar values as the spec demands, but how? whats NDID? does anyone understand what this newer style code is doing?

Link to comment
Share on other sites

 Share

×
×
  • Create New...