/*++ | |
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" | |
} |