There is something in the ACPI that detect what OS you are running and implement behaviour accordingly for interoperability.
Consider the ASL code below(in my BIOS):Method(_INI, 0, NotSerialized)OSYS is a variable to store operating system it is running.
{
Store(0x07D0, OSYS)
If(CondRefOf(_OSI, Local0))
{
If(_OSI("Windows 2001"))
{
Store(0x07D1, OSYS)
}
If(_OSI("Windows 2001 SP1"))
{
Store(0x07D1, OSYS)
}
If(_OSI("Windows 2001 SP2"))
{
Store(0x07D2, OSYS)
}
If(_OSI("Windows 2006"))
{
Store(0x07D6, OSYS)
}
}
}
The code simply says assume 0x07D0 by default until you detect Windows 2006 (aka Windows Vista) then use 0x07D6 if you detect Windows 2001(aka Windows Xp SP1) use 0x07D1 and Windows 2001 SP2 (Windows Xp Service Pack 2) use 0x07D2 .
What does it mean?
Certain features the DSDT implements, need to be compatible with the OS it is running on.
If(_OSI("Windows 2009"))
{
Store(0x07D6, OSYS)
}
So I added the code in red so it will load 0x07D6 and implement full feature when it sees Windows 2009(aka Windows 7).
The thing is OEM like to just the OSI method to ID the OS and assume DSDT functions to ensure proper backward compatibility unfortunately this might also introduce non-full feature in future OS.
BIOS OSI Method
Discussion in 'Acer' started by weinter, Jan 11, 2010.