Jump to content

need to understand complex _DOD method


  • Please log in to reply
No replies to this topic

#1
rr7

rr7

    InsanelyMac Protégé

  • Members
  • PipPip
  • 81 posts
  • Gender:Male
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?





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

© 2014 InsanelyMac  |   News  |   Forum  |   Downloads  |   OSx86 Wiki  |   Mac Netbook  |   PHP hosting by CatN  |   Designed by Ed Gain  |   Logo by irfan  |   Privacy Policy