mirror of https://github.com/acidanthera/audk.git
281 lines
7.9 KiB
Plaintext
281 lines
7.9 KiB
Plaintext
|
/*++
|
||
|
|
||
|
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
|
||
|
|
||
|
This program and the accompanying materials are licensed and made available under
|
||
|
the terms and conditions of the BSD License that accompanies this distribution.
|
||
|
The full text of the license may be found at
|
||
|
http://opensource.org/licenses/bsd-license.php.
|
||
|
|
||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||
|
|
||
|
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
IgdOSBCB.ASL
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
IGD OpRegion/Software SCI Reference Code for the Baytrail Family.
|
||
|
This file contains the system BIOS call back functionality for the
|
||
|
OpRegion/Software SCI mechanism.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
Method (SBCB, 0, Serialized)
|
||
|
{
|
||
|
|
||
|
// Supported Callbacks: Sub-function 0
|
||
|
|
||
|
If (LEqual(GESF, 0x0))
|
||
|
{
|
||
|
|
||
|
//<TODO> An OEM may support the driver->SBIOS status callbacks, but
|
||
|
// the supported callbacks value must be modified. The code that is
|
||
|
// executed upon reception of the callbacks must be also be updated
|
||
|
// to perform the desired functionality.
|
||
|
|
||
|
Store(0x00000000, PARM) // No callbacks supported
|
||
|
|
||
|
If(LEqual(PFLV,FMBL))
|
||
|
{
|
||
|
Store(0x000F87FD, PARM) // Mobile
|
||
|
}
|
||
|
If(LEqual(PFLV,FDTP))
|
||
|
{
|
||
|
Store(0x000F87BD, PARM) // Desktop
|
||
|
}
|
||
|
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Return(SUCC) // "Success"
|
||
|
}
|
||
|
|
||
|
// BIOS POST Completion: Sub-function 1
|
||
|
|
||
|
If (LEqual(GESF, 1))
|
||
|
{
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Not supported, but no failure
|
||
|
}
|
||
|
|
||
|
// Pre-Hires Set Mode: Sub-function 3
|
||
|
|
||
|
If (LEqual(GESF, 3))
|
||
|
{
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Not supported, but no failure
|
||
|
}
|
||
|
|
||
|
// Post-Hires Set Mode: Sub-function 4
|
||
|
|
||
|
If (LEqual(GESF, 4))
|
||
|
{
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Not supported, but no failure
|
||
|
}
|
||
|
|
||
|
// Display Switch: Sub-function 5
|
||
|
|
||
|
If (LEqual(GESF, 5))
|
||
|
{
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Not supported, but no failure
|
||
|
}
|
||
|
|
||
|
// Set TV format: Sub-function 6
|
||
|
|
||
|
If (LEqual(GESF, 6))
|
||
|
{
|
||
|
|
||
|
//<TODO> If implemented, the input values must be saved into
|
||
|
// non-volatile storage for parsing during the next boot. The
|
||
|
// following Sample code is Intel validated implementation.
|
||
|
|
||
|
Store(And(PARM, 0x0F), ITVF)
|
||
|
Store(ShiftRight(And(PARM, 0xF0), 4), ITVM)
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC)
|
||
|
}
|
||
|
|
||
|
// Adapter Power State: Sub-function 7
|
||
|
|
||
|
If (LEqual(GESF, 7))
|
||
|
{
|
||
|
|
||
|
// Upon notification from driver that the Adapter Power State = D0,
|
||
|
// check if previous lid event failed. If it did, retry the lid
|
||
|
// event here.
|
||
|
If(LEqual(PARM, 0))
|
||
|
{
|
||
|
Store(CLID, Local0)
|
||
|
If(And(0x80000000,Local0))
|
||
|
{
|
||
|
And(CLID, 0x0000000F, CLID)
|
||
|
GLID(CLID)
|
||
|
}
|
||
|
}
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Not supported, but no failure
|
||
|
}
|
||
|
|
||
|
// Display Power State: Sub-function 8
|
||
|
|
||
|
If (LEqual(GESF, 8))
|
||
|
{
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Not supported, but no failure
|
||
|
}
|
||
|
|
||
|
// Set Boot Display: Sub-function 9
|
||
|
|
||
|
If (LEqual(GESF, 9))
|
||
|
{
|
||
|
|
||
|
//<TODO> An OEM may elect to implement this method. In that case,
|
||
|
// the input values must be saved into non-volatile storage for
|
||
|
// parsing during the next boot. The following Sample code is Intel
|
||
|
// validated implementation.
|
||
|
|
||
|
And(PARM, 0xFF, IBTT) // Save the boot display to NVS
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Reserved, "Critical failure"
|
||
|
}
|
||
|
|
||
|
// Set Panel Details: Sub-function 10 (0Ah)
|
||
|
|
||
|
If (LEqual(GESF, 10))
|
||
|
{
|
||
|
|
||
|
//<TODO> An OEM may elect to implement this method. In that case,
|
||
|
// the input values must be saved into non-volatile storage for
|
||
|
// parsing during the next boot. The following Sample code is Intel
|
||
|
// validated implementation.
|
||
|
|
||
|
// Set the panel-related NVRAM variables based the input from the driver.
|
||
|
|
||
|
And(PARM, 0xFF, IPSC)
|
||
|
|
||
|
// Change panel type if a change is requested by the driver (Change if
|
||
|
// panel type input is non-zero). Zero=No change requested.
|
||
|
|
||
|
If(And(ShiftRight(PARM, 8), 0xFF))
|
||
|
{
|
||
|
And(ShiftRight(PARM, 8), 0xFF, IPAT)
|
||
|
Decrement(IPAT) // 0 = no change, so fit to CMOS map
|
||
|
}
|
||
|
And(ShiftRight(PARM, 18), 0x3, IBLC)
|
||
|
And(ShiftRight(PARM, 20), 0x7, IBIA)
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Success
|
||
|
}
|
||
|
|
||
|
// Set Internal Graphics: Sub-function 11 (0Bh)
|
||
|
|
||
|
If (LEqual(GESF, 11))
|
||
|
{
|
||
|
|
||
|
//<TODO> An OEM may elect to implement this method. In that case,
|
||
|
// the input values must be saved into non-volatile storage for
|
||
|
// parsing during the next boot. The following Sample code is Intel
|
||
|
// validated implementation.
|
||
|
|
||
|
And(ShiftRight(PARM, 1), 1, IF1E) // Program the function 1 option
|
||
|
|
||
|
// Fixed memory/DVMT memory
|
||
|
|
||
|
And(ShiftRight(PARM, 17), 0xF, IDMS) // Program DVMT/fixed memory size
|
||
|
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Success
|
||
|
}
|
||
|
|
||
|
// Post-Hires to DOS FS: Sub-function 16 (10h)
|
||
|
|
||
|
If (LEqual(GESF, 16))
|
||
|
{
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Not supported, but no failure
|
||
|
}
|
||
|
|
||
|
// APM Complete: Sub-function 17 (11h)
|
||
|
|
||
|
If (LEqual(GESF, 17))
|
||
|
{
|
||
|
|
||
|
Store(ShiftLeft(LIDS, 8), PARM) // Report the lid state
|
||
|
Add(PARM, 0x100, PARM) // Adjust the lid state, 0 = Unknown
|
||
|
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Return(SUCC) // Not supported, but no failure
|
||
|
}
|
||
|
|
||
|
// Set Spread Spectrum Clocks: Sub-function 18 (12h)
|
||
|
|
||
|
If (LEqual(GESF, 18))
|
||
|
{
|
||
|
|
||
|
//<TODO> An OEM may elect to implement this method. In that case,
|
||
|
// the input values must be saved into non-volatile storage for
|
||
|
// parsing during the next boot. The following Sample code is Intel
|
||
|
// validated implementation.
|
||
|
|
||
|
If(And(PARM, 1))
|
||
|
{
|
||
|
If(LEqual(ShiftRight(PARM, 1), 1))
|
||
|
{
|
||
|
Store(1, ISSC) // Enable HW SSC, only for clock 1
|
||
|
}
|
||
|
Else
|
||
|
{
|
||
|
Store(Zero, GESF)
|
||
|
Return(CRIT) // Failure, as the SSC clock must be 1
|
||
|
}
|
||
|
}
|
||
|
Else
|
||
|
{
|
||
|
Store(0, ISSC) // Disable SSC
|
||
|
}
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Success
|
||
|
}
|
||
|
|
||
|
// Post VBE/PM Callback: Sub-function 19 (13h)
|
||
|
|
||
|
If (LEqual(GESF, 19))
|
||
|
{
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Not supported, but no failure
|
||
|
}
|
||
|
|
||
|
// Set PAVP Data: Sub-function 20 (14h)
|
||
|
|
||
|
If (LEqual(GESF, 20))
|
||
|
{
|
||
|
And(PARM, 0xF, PAVP) // Store PAVP info
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Store(Zero, PARM)
|
||
|
Return(SUCC) // Success
|
||
|
}
|
||
|
|
||
|
// A call to a reserved "System BIOS callbacks" function was received
|
||
|
|
||
|
Store(Zero, GESF) // Clear the exit parameter
|
||
|
Return(SUCC) // Reserved, "Critical failure"
|
||
|
}
|