alder_lake_bios/Lcfc/LfcPkg/AcpiTable/Dsdt/Atm.asi

832 lines
30 KiB
Plaintext

//
// FILENAME.
// Atm.asi - Describes Advanced Thermal Management function.
//
//
//
//
// FUNCTIONAL DESCRIPTION.
// This file describes Advanced Thermal Management function related code.
// This file also has Intelligent Cooling support function code (DYTC) and
// ITS (Intelligent Thermal Solution) vertual device node definition.
//
//
// MODIFICATION HISTORY.
// H. Uchida 10/04/12. #1.000, initial version.
// N. Araki 10/10/05. #1.000, preparation for scramble mode and Turbo disable.
// N. Araki 10/11/26. #1.000, enable scramble mode
// N. Araki 10/12/14. #1.000, enable extended tau.
// N. Araki 11/01/04. #1.000, add not-turbo CPU support.
// N. Araki 11/01/19. #1.000, add an interface for extended tau.
// H. Uchida 11/08/25. #1.000, removed interface for "reduce fan noise" feature.
// N. Araki 11/12/13. #1.000, initial code for DPTF cTDP support.
// N. Araki 12/01/27. #1.000, added cTDP down support.
// N. Araki 12/01/27. #1.000, Updated cTDP down support.
// N. Araki 12/03/02. #1.000, Support IVB ULV CPU.
// N. Araki 13/03/18. #1.000, Support ULV CPU.
// N. Araki 13/08/05. #1.000, Update P-State limit method for CPPC.
// N. Araki 13/10/03. #1.000, Change PPM flag usage.
// N. Araki 13/10/22. #1.000, Remove unused code.
// N. Araki 13/10/31. #1.000, Remove unused code.
// N. Araki 13/11/14. #1.000, Change variable name.
// M. Itoh 14/02/05. #1.000, Added DYTC support //@DYTC001
// N. Ishida 15/03/24. #1.000, Added Intelligent Cooling NVIDIA support in DYTC.
// N. Ishida 15/09/17. #1.000, Added W/A to supress power consumption in DYTC.
// N. Ishida 15/09/24. #1.000, Added W/A to supress Notify() to NVIDIA driver in DYTC until the driver becomes ready.
// M. Itoh 15/11/16. #1.000, Update PL1 value of STD&DMC for PL1 15W->25.
// M. Itoh 15/11/16. #1.000, PT1S code cleanup.
// M. Itoh 15/11/16. #1.000, Use _PR.CLVL to check supporting cTDP levels instead of _SB.PCI0.CTNL.
// Y. Katayama 16/04/07. #1.000, Replace OPTION_LENOVO_SUPPORT_IVB_ULV with OPTION_LENOVO_SUPPORT_CTDP.
// M. Itoh 16/12/21. #1.000, Add DCPL for DC mode PL1 handling.
// Y. Katayama 17/01/27. #1.000, Replace the rest of OPTION_LENOVO_SUPPORT_IVB_ULV with OPTION_LENOVO_SUPPORT_CTDP.
// M. Itoh 17/08/01. #1.000, Add ITSD (Intelligent Thermal Solution) vertual device.
// Ru.Xu 19/01/31 #1.000, Added DYTC support for LNB on Intel Platform
// Ru Xu 20/05/06 #1.000, DYTC (Dynamic Thermal Control) Method Rev5 for Intelligent Cooling
// NOTICE.
// Lenovo Confidential
// Microcode Source Materials
// COPYRIGHT LENOVO 2010-2011 All RIGHTS RESERVED
//
////////////////////////////////////////////////////////////////////////////////
// //
// //
// ATM - Advanced Thermal Management functions //
// //
// //
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// //
// //
// DYTC - External Method (IdeaPad Intelligent Thermal control) //
// //
// //
////////////////////////////////////////////////////////////////////////////////
#include <Lfc.h>
/////////////////// Input Parameter Definition ///////////////////
//////// For DYTC_CMD_QUERY ////////
// DYTC Supprot
#define DYTC_SPT_SHFT 0x00000008 // Bit8
#define DYTC_SPT_DIS 0x00000000
#define DYTC_SPT_ENA 0x00000001
// DYTC Revision
#define DYTC_SUBREV_SHFT 0x00000010 // Bit16-27
#define DYTC_REV_SHFT 0x0000001C // Bit28-31
#define DYTC_REV_3 0x00000003
#define DYTC_REV_4 0x00000004
#define DYTC_REV_5 0x00000005
#define DYTC_SUBREV_0 0x00000000
#define DYTC_SUBREV_1 0x00000001
#define DYTC_SUBREV_2 0x00000002
//////// For DYTC_CMD_QUERY_CNT ////////
// Thermal Control Version
#define DYTC_TCV_SHFT 0x00000010 // Bit16-31
#define DYTC_TCV_CLAMSHELL 0x00001001 // version1 & Clamshell
#define DYTC_TCV_TABLET 0x00002001 // version1 & Tablet
#define OPTION_DYTC_CLAMSHELL 1
// Command Definition
#define DYTC_CMD_MASK 0x000001FF // Bit0-8
#define DYTC_CMD_QUERY 0x00000000
#define DYTC_CMD_SET 0x00000001
#define DYTC_CMD_GET 0x00000002
#define DYTC_CMD_FUNC_CAP 0x00000003
#define DYTC_CMD_MODE_MYH_CAP 0x00000004
#define DYTC_CMD_MODE_MMC_CAP 0x00000006
#define DYTC_CMD_MODE_MMC_GET 0x00000007
#define DYTC_CMD_MODE_AAA_GET 0x00000008
#define DYTC_CMD_MODE_NIT_GET 0x00000009
#define DYTC_CMD_FUNC_CAP_EXT 0x0000000A
#define DYTC_CMD_QUERY_CNT 0x00000100
#define DYTC_CMD_RESET 0x000001FF
//////// For DYTC_CMD_SET/DYTC_CMD_GET ////////
// IC Function
#define DYTC_ICFUNC_SHFT 0x0000000C // Bit12-15
#define DYTC_ICFUNC_MASK 0x0000000F
// IC Mode
#define DYTC_ICMODE_SHFT 0x00000010 // Bit16-19
#define DYTC_ICMODE_MASK 0x0000000F
// Valid Flag
#define DYTC_VLDFLG_SHFT 0x00000014 // Bit20
#define DYTC_VLDFLG_MASK 0x00000001
// Current Function/Mode
#define DYTC_CRNTFUNC_SHFT 0x00000008 // Bit8
#define DYTC_CRNTMODE_SHFT 0x0000000C // Bit12
// Current Function/Mode
#define DYTC_FLAGCAP_SHFT 0x00000010 // Bit16
//////// For DYTC_CMD_FUNC_CAP ////////
// Function/Mode Capability
#define DYTC_FCAP_SHFT 0x00000010 // Bit16
#define DYTC_MCAP_SHFT 0x00000010 // Bit16
//////// For DYTC_CMD_MODE_NIT_GET ////////
#define DYTC_MNIT_SHFT 0x00000010 // Bit16
//LCFCTODO:Brightness will change to 60nit when user choose BSM mode,due to different panels, this value need tune by BIOS
#define DYTC_NITS_60 0x00000043 // 60 nits , 0x43(67%) means Windows display brightness value
//////// For DYTC_CMD_FUNC_CAP_EXT////////
#define DYTC_CAPE_SHFT 0x00000010 // Bit16
#define DYTC_CRETOR_APP_SUPPORT 0x1 // 1 mean Creator App supported
/////////////////// Output Parameter Definition //////////////////
// Status Definition
#define DYTC_STS_SUCCESS 0x00000001
#define DYTC_STS_FAIL 0x00000000
// Error Code Definition
#define DYTC_ERR_SHFT 0x00000001 // Bit1-3
#define DYTC_ERR_INVALID_FUNC 0x00000001 // Unsupported or Undefined IC Function
#define DYTC_ERR_INVALID_CMD 0x00000002
#define DYTC_ERR_NOT_READY 0x00000003
#define DYTC_ERR_UNSUPPORTED 0x00000004
#define DYTC_ERR_INVALID_MODE 0x00000005
#define DYTC_ERR_RSV2 0x00000006
#define DYTC_ERR_RSV3 0x00000007
#if ( OPTION_DYTC_ENABLE )
Method( DYTC , 1) {
Store( Arg0, Local0 ) // Save Input Parameter
Store( Local0, DYTP ) // DYTC commond parameter,for debug
Store( 0, Local1 ) // Initialize Output Parameter
// DYTC Command
Switch ( ToInteger( And( Local0, DYTC_CMD_MASK ) ) ) {
Case ( DYTC_CMD_QUERY ) {
#if ( OPTION_DYTC_ENABLE )
Store( ShiftLeft( DYTC_SPT_ENA, DYTC_SPT_SHFT ), Local1 )
#else // ( OPTION_DYTC_ENABLE )
Store( ShiftLeft( DYTC_SPT_DIS, DYTC_SPT_SHFT ), Local1 )
#endif // ( OPTION_DYTC_ENABLE )
Or( Local1, ShiftLeft( DYTC_REV_5, DYTC_REV_SHFT ), Local1 )
Or( Local1, ShiftLeft( DYTC_SUBREV_0, DYTC_SUBREV_SHFT ), Local1 )
// Success
Or( Local1, DYTC_STS_SUCCESS, Local1 )
}
Case ( DYTC_CMD_SET ) {
And( ShiftRight( Local0, DYTC_ICFUNC_SHFT ), DYTC_ICFUNC_MASK , Local2 ) // IC Function
And( ShiftRight( Local0, DYTC_ICMODE_SHFT ), DYTC_ICMODE_MASK , Local3 ) // IC Mode
And( ShiftRight( Local0, DYTC_VLDFLG_SHFT ), DYTC_VLDFLG_MASK , Local4 ) // Valid Flag
// Requested Intelligent Cooling Function
Switch ( Local2 ) {
#if ( OPTION_DYTC_SUPPORT_ICFUNC_FBC )
Case ( DYTC_ICFUNC_FBC ) {
// Expect IC mode = No mode
If( LNotEqual( Local3, DYTC_ICMODE_MASK )) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
// Off Request
If( LEqual( Local4, 0 ) ) {
Store( 0, \VFBC )
} Else {
Store( 1, \VFBC )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICFUNC_FBC )
#if ( OPTION_DYTC_SUPPORT_ICFUNC_MYH )
Case ( DYTC_ICFUNC_MYH ) {
Switch ( Local3 ) {
#if ( OPTION_DYTC_SUPPORT_ICMODE_TBL )
Case ( DYTC_ICMODE_TBL ) {
If( LNotEqual( Local4, 1)) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICMODE_TBL )
#if ( OPTION_DYTC_SUPPORT_ICMODE_TNT )
Case ( DYTC_ICMODE_TNT ) {
If( LNotEqual( Local4, 1)) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICMODE_TNT )
#if ( OPTION_DYTC_SUPPORT_ICMODE_LFT )
Case ( DYTC_ICMODE_LFT ) {
If( LNotEqual( Local4, 1)) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICMODE_LFT )
Case ( DYTC_ICMODE_MASK ) {
If( LNotEqual( Local4, 0)) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
}
Default { // Unsupported or Undefined IC Function
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
}
// Off Request
If( LEqual( Local4, 0 ) ) {
Store( 0, \VMYH )
Store( 0, \SMYH )
} Else {
Store( 1, \VMYH )
Store( Local3, \SMYH )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICFUNC_MYH )
#if ( OPTION_DYTC_SUPPORT_ICFUNC_STP )
Case ( DYTC_ICFUNC_STP ) {
// Expect IC mode = No mode
If( LNotEqual( Local3, DYTC_ICMODE_MASK )) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
// Off Request
If( LEqual( Local4, 0 ) ) {
Store( 0, \VSTP )
} Else {
Store( 1, \VSTP )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICFUNC_STP )
#if ( OPTION_DYTC_SUPPORT_ICFUNC_APM )
Case ( DYTC_ICFUNC_APM ) {
// Expect IC mode = No mode
If( LNotEqual( Local3, DYTC_ICMODE_MASK )) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
// Off Request
If( LEqual( Local4, 0 ) ) {
Store( 0, \VAPM )
} Else {
Store( 1, \VAPM )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICFUNC_APM )
#if ( OPTION_DYTC_SUPPORT_ICFUNC_AQM )
Case ( DYTC_ICFUNC_AQM ) {
// Expect IC mode = No mode
If( LNotEqual( Local3, DYTC_ICMODE_MASK )) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
// Off Request
If( LEqual( Local4, 0 ) ) {
Store( 0, \VAQM )
} Else {
Store( 1, \VAQM )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICFUNC_AQM )
#if ( OPTION_DYTC_SUPPORT_ICFUNC_IEPM )
Case ( DYTC_ICFUNC_IEPM ) {
// Expect IC mode = No mode
If( LNotEqual( Local3, DYTC_ICMODE_MASK )) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
// Off Request
If( LEqual( Local4, 0 ) ) {
Store( 0, \VIEP )
} Else {
Store( 1, \VIEP )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICFUNC_IEPM )
#if ( OPTION_DYTC_SUPPORT_ICFUNC_IBSM )
Case ( DYTC_ICFUNC_IBSM ) {
// Expect IC mode = No mode
If( LNotEqual( Local3, DYTC_ICMODE_MASK )) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
// Off Request
If( LEqual( Local4, 0 ) ) {
Store( 0, \VIBS )
} Else {
Store( 1, \VIBS )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICFUNC_IBSM )
#if ( OPTION_DYTC_SUPPORT_ICFUNC_AAA )
Case ( DYTC_ICFUNC_AAA ) {
// Expect IC mode = No mode
If( LNotEqual( Local3, DYTC_ICMODE_MASK )) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
// Off Request ?
If( LEqual( Local4, 0 ) ) {
Store( 0, \VAAA )
} Else {
Store( 1, \VAAA )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICFUNC_AAA )
#if ( OPTION_DYTC_SUPPORT_ICFUNC_MMC )
Case ( DYTC_ICFUNC_MMC ) {
Switch ( Local3 ) {
#if ( OPTION_DYTC_SUPPORT_ICMODE_EPM )
Case ( DYTC_ICMODE_EPM ) {
If( LNotEqual( Local4, 1)) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICMODE_PFM )
#if ( OPTION_DYTC_SUPPORT_ICMODE_BSM )
Case ( DYTC_ICMODE_BSM ) {
If( LNotEqual( Local4, 1)) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICMODE_BSM )
Case ( DYTC_ICMODE_MASK ) {
If( LNotEqual( Local4, 0)) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
}
Default { // Unsupported or Undefined IC Mode
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
}
// Off Request
If( LEqual( Local4, 0 ) ) {
If( LEqual( Local3, DYTC_ICMODE_MASK ) ) {
Store( 0, \VMMC )
Store( 0xF, \SMMC )
}
Else
{
Store( 0, \VMMC )
Store( 0, \SMMC )
}
} Else {
Store( 1, \VMMC )
Store( Local3, \SMMC )
}
}
#endif // ( OPTION_DYTC_SUPPORT_ICFUNC_MMC )
Case ( DYTC_ICFUNC_STD ) {
// Expect IC mode = No mode
If( LNotEqual( Local3, DYTC_ICMODE_MASK )) {
// Fail
ShiftLeft( DYTC_ERR_INVALID_MODE, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
// No action for initializing DYTC
}
Default { // Unsupported or Undefined IC Function
// Fail
ShiftLeft( DYTC_ERR_INVALID_FUNC, DYTC_ERR_SHFT, Local1 )
Return ( Local1 )
}
}
////////////// Start : Need to customize by Product
//LCFCTODO:If you eanble DPTF and add ODV0 ~ ODVK variable in your porject, you can remove "//" before ODV0 ~ ODVK variable
//Standard Mode (Default Mode)
Store( DYTC_ICFUNC_STD, \CICF)
Store(1,\ODV0) //STD always enable
Store(0,EC0_SCOPE.EC0.SPMO)
Store(0,EC0_SCOPE.EC0.FCMO)
//AQM
If(LEqual (\VAQM, 1)) {
Store( DYTC_ICFUNC_AQM, \CICF)
// Store(1,\ODVH) //ODV17
Store(4,EC0_SCOPE.EC0.FCMO)
}Else{
// Store(0,\ODVH)
}
//APM
If(LEqual (\VAPM, 1)) {
Store( DYTC_ICFUNC_APM, \CICF)
// Store(1,\ODVG) //ODV16
Store(3,EC0_SCOPE.EC0.FCMO)
}Else{
// Store(0,\ODVG)
}
#if ( OPTION_DYTC_SUPPORT_ICFUNC_MYH )
//MYH
If(LEqual (\VMYH, 1)) {
Store( DYTC_ICFUNC_MYH, \CICF)
Store(\SMYH, Local6)
Switch(Local6) {
Case(DYTC_ICMODE_TBL) {//Tablet
Store(1,\ODV1)
Store(0,\ODV2)
Store(0,\ODV3)
}
Case(DYTC_ICMODE_TNT) {//Tent
Store(0,\ODV1)
Store(1,\ODV2)
Store(0,\ODV3)
}
Case(DYTC_ICMODE_LFT) {//Flat
Store(0,\ODV1)
Store(0,\ODV2)
Store(1,\ODV3)
}
Default {
Store(0,\ODV1)
Store(0,\ODV2)
Store(0,\ODV3)
}
}
}Else{ //Exit MYH Mode
Store(0,\ODV1)
Store(0,\ODV2)
Store(0,\ODV3)
}
#endif
//IBSM
If(LEqual (\VIBS, 1)) {
Store( DYTC_ICFUNC_IBSM, \CICF)
// Store(1,\ODVK) //ODV20
Store(7,EC0_SCOPE.EC0.FCMO)
}Else{
// Store(0,\ODVK)
}
//IEPM
If(LEqual (\VIEP, 1)) {
Store( DYTC_ICFUNC_IEPM, \CICF)
// Store(1,\ODVJ) //ODV19
Store(6,EC0_SCOPE.EC0.FCMO)
}Else{
// Store(0,\ODVJ)
}
//MMC
If (LEqual (\VMMC, 1)) {
Store( DYTC_ICFUNC_MMC, \CICF)
Store(\SMMC, Local6)
Switch(Local6) {
Case(DYTC_ICMODE_EPM) { //Extreme Performance Mode
// Store(1,\ODV8)
// Store(0,\ODV9)
Store(1,EC0_SCOPE.EC0.SPMO)
Store(1,EC0_SCOPE.EC0.FCMO)
}
Case(DYTC_ICMODE_BSM) { //Battery Saving Mode
// Store(0,\ODV8)
// Store(1,\ODV9)
Store(2,EC0_SCOPE.EC0.SPMO)
Store(2,EC0_SCOPE.EC0.FCMO)
}
Default { //Invalid Mode
// Store(0,\ODV8)
// Store(0,\ODV9)
Store(0,EC0_SCOPE.EC0.SPMO)
Store(0,EC0_SCOPE.EC0.FCMO)
}
}
}Else{ //Exit MMC Mode
// Store(0,\ODV8)
// Store(0,\ODV9)
Store(0,EC0_SCOPE.EC0.SPMO)
Store(0,EC0_SCOPE.EC0.FCMO)
}
#if ( OPTION_DYTC_SUPPORT_ICFUNC_STP )
//STP
If(LEqual (\VSTP, 1)) {
Store( DYTC_ICFUNC_STP, \CICF)
Store(1,\ODV4)
}Else{
Store(0,\ODV4)
}
#endif
Sleep(5)
//Notify DPTF driver OEM variable value has changed
Notify(\_SB.IETM, 0x88)
////////////// End : Need to customize by Product
// Organize Valid Flag Status
Store( \VSTD, Local5 )
Or( ShiftLeft( \VFBC, DYTC_ICFUNC_FBC ), Local5, Local5 )
Or( ShiftLeft( \VMYH, DYTC_ICFUNC_MYH ), Local5, Local5 )
Or( ShiftLeft( \VSTP, DYTC_ICFUNC_STP ), Local5, Local5 )
Or( ShiftLeft( \VAPM, DYTC_ICFUNC_APM ), Local5, Local5 )
Or( ShiftLeft( \VAQM, DYTC_ICFUNC_AQM ), Local5, Local5 )
Or( ShiftLeft( \VIEP, DYTC_ICFUNC_IEPM ), Local5, Local5 )
Or( ShiftLeft( \VIBS, DYTC_ICFUNC_IBSM ), Local5, Local5 )
Or( ShiftLeft( \VAAA, DYTC_ICFUNC_AAA ), Local5, Local5 )
Or( ShiftLeft( \VMMC, DYTC_ICFUNC_MMC ), Local5, Local5 )
Store( ShiftLeft( \CICF, DYTC_CRNTFUNC_SHFT ), Local1 )
If( LEqual( \CICF, DYTC_ICFUNC_MYH ) ){
Store( \SMYH, \CICM ) //
} ElseIf( LEqual( \CICF, DYTC_ICFUNC_MMC ) ){
Store( \SMMC, \CICM ) //
} Else {
Store( DYTC_ICMODE_MASK, \CICM ) // Save Current IC Mode as NO Mode
}
Or( ShiftLeft( \CICM, DYTC_CRNTMODE_SHFT ), Local1, Local1 )
Or( ShiftLeft( Local5, DYTC_FLAGCAP_SHFT ), Local1, Local1 )
// Success
Or( Local1, DYTC_STS_SUCCESS, Local1 )
}
Case ( DYTC_CMD_GET ) {
// Organize Valid Flag Status
Store( \VSTD, Local5 )
Or( ShiftLeft( \VFBC, DYTC_ICFUNC_FBC ), Local5, Local5 )
Or( ShiftLeft( \VMYH, DYTC_ICFUNC_MYH ), Local5, Local5 )
Or( ShiftLeft( \VSTP, DYTC_ICFUNC_STP ), Local5, Local5 )
Or( ShiftLeft( \VAPM, DYTC_ICFUNC_APM ), Local5, Local5 )
Or( ShiftLeft( \VAQM, DYTC_ICFUNC_AQM ), Local5, Local5 )
Or( ShiftLeft( \VIEP, DYTC_ICFUNC_IEPM ), Local5, Local5 )
Or( ShiftLeft( \VIBS, DYTC_ICFUNC_IBSM ), Local5, Local5 )
Or( ShiftLeft( \VAAA, DYTC_ICFUNC_AAA ), Local5, Local5 )
Or( ShiftLeft( \VMMC, DYTC_ICFUNC_MMC ), Local5, Local5 )
Store( ShiftLeft( \CICF, DYTC_CRNTFUNC_SHFT ), Local1 )
If( LEqual( \CICF, DYTC_ICFUNC_MYH ) ){
Store( \SMYH, \CICM ) //
} ElseIf( LEqual( \CICF, DYTC_ICFUNC_MMC ) ){
Store( \SMMC, \CICM ) //
} Else {
Store( DYTC_ICMODE_MASK, \CICM ) // Save Current IC Mode as NO Mode
}
Or( ShiftLeft( \CICM, DYTC_CRNTMODE_SHFT ), Local1, Local1 )
Or( ShiftLeft( Local5, DYTC_FLAGCAP_SHFT ), Local1, Local1 )
// Success
Or( Local1, DYTC_STS_SUCCESS, Local1 )
}
Case ( DYTC_CMD_FUNC_CAP ) {
Store( ShiftLeft( FCAP, DYTC_FCAP_SHFT ), Local1 )
// Success
Or( Local1, DYTC_STS_SUCCESS, Local1 )
}
Case ( DYTC_CMD_MODE_MYH_CAP ) {
Store( ShiftLeft( MYHC, DYTC_MCAP_SHFT ), Local1 )
// Success
Or( Local1, DYTC_STS_SUCCESS, Local1 )
}
Case ( DYTC_CMD_MODE_MMC_CAP ) {
And( ShiftRight( Local0, 9 ), 0xF , Local2 ) // Valid Flag
If( LNotEqual( Local2, 1 )) {
Store( ShiftLeft( MMCC, DYTC_MCAP_SHFT ), Local1 )
} Else {
Store( ShiftLeft( CONFIG_DYTC_IC_MMC_DEFAULT, 8 ), Local1 )
}
// Success
Or( Local1, DYTC_STS_SUCCESS, Local1 )
}
Case ( DYTC_CMD_MODE_MMC_GET ) {
Store( ShiftLeft( SMMC, DYTC_MCAP_SHFT ), Local1 )
// Success
Or( Local1, DYTC_STS_SUCCESS, Local1 )
}
// Case ( DYTC_CMD_MODE_AAA_GET ) {
// Store( ShiftLeft( SAAA, DYTC_MCAP_SHFT ), Local1 )
// // Success
// Or( Local1, DYTC_STS_SUCCESS, Local1 )
// }
Case ( DYTC_CMD_QUERY_CNT ) {
#if ( OPTION_DYTC_CLAMSHELL )
Store( ShiftLeft( DYTC_TCV_CLAMSHELL, DYTC_TCV_SHFT ), Local1 )
#else // ( OPTION_DYTC_CLAMSHELL )
Store( ShiftLeft( DYTC_TCV_TABLET, DYTC_TCV_SHFT ), Local1 )
#endif // ( OPTION_DYTC_CLAMSHELL )
// Success
Or( Local1, DYTC_STS_SUCCESS, Local1 )
}
Case ( DYTC_CMD_MODE_NIT_GET ) {
Store( ShiftLeft(DYTC_NITS_60, DYTC_MNIT_SHFT ), Local1 )
// Success
Or( Local1, DYTC_STS_SUCCESS, Local1 )
}
Case ( DYTC_CMD_FUNC_CAP_EXT ) {
Store( ShiftLeft(DYTC_CRETOR_APP_SUPPORT, DYTC_CAPE_SHFT ), Local1 )
// Success
Or( Local1, DYTC_STS_SUCCESS, Local1 )
}
Case ( DYTC_CMD_RESET ) {
////////////// Start : Need to customize by Product
//LCFCTODO:If you eanble DPTF and add ODV0 ~ ODVK variable in your porject, you can remove "//" before ODV0 ~ ODVK variable
Store(0,EC0_SCOPE.EC0.SPMO) //Intelligent/STD Mode
Store(0,EC0_SCOPE.EC0.FCMO) //Intelligent/STD Mode
Store(1,\ODV0)
Store(0,\ODV1)
Store(0,\ODV2)
Store(0,\ODV3)
Store(0,\ODV4)
// Store(0,\ODV8)
// Store(0,\ODV9)
// Store(0,\ODVG)
// Store(0,\ODVH)
// Store(0,\ODVJ)
// Store(0,\ODVK)
Sleep(5)
Notify(\_SB.IETM, 0x88) //Notify DPTF driver OEM variable value has changed
////////////// End : Need to customize by Product
Store( 0, \VFBC )
Store( 0, \VMYH )
Store( 0, \VSTP )
Store( 0, \VAPM )
Store( 0, \VAQM )
Store( 0, \VIEP )
Store( 0, \VIBS )
Store( 0, \VAAA )
Store( 0, \VMMC )
Store( 0, \SMYH )
Store( 0xF, \SMMC )
// STD Set
Store( DYTC_ICFUNC_STD, \CICF ) // Save Current IC Function
Store( DYTC_ICMODE_MASK, \CICM ) // Save Current IC Mode as NO Mode
// Organize Valid Flag Status
Store( \VSTD, Local5 )
Or( ShiftLeft( \VFBC, DYTC_ICFUNC_FBC ), Local5, Local5 )
Or( ShiftLeft( \VMYH, DYTC_ICFUNC_MYH ), Local5, Local5 )
Or( ShiftLeft( \VSTP, DYTC_ICFUNC_STP ), Local5, Local5 )
Or( ShiftLeft( \VAPM, DYTC_ICFUNC_APM ), Local5, Local5 )
Or( ShiftLeft( \VAQM, DYTC_ICFUNC_AQM ), Local5, Local5 )
Or( ShiftLeft( \VIEP, DYTC_ICFUNC_IEPM ), Local5, Local5 )
Or( ShiftLeft( \VIBS, DYTC_ICFUNC_IBSM ), Local5, Local5 )
Or( ShiftLeft( \VAAA, DYTC_ICFUNC_AAA ), Local5, Local5 )
Or( ShiftLeft( \VMMC, DYTC_ICFUNC_MMC ), Local5, Local5 )
Store( ShiftLeft( \CICF, DYTC_CRNTFUNC_SHFT ), Local1 )
Or( ShiftLeft( \CICM, DYTC_CRNTMODE_SHFT ), Local1, Local1 )
Or( ShiftLeft( Local5, DYTC_FLAGCAP_SHFT ), Local1, Local1 )
// Success
Or( Local1, DYTC_STS_SUCCESS, Local1 )
}
Default {
// Fail
ShiftLeft( DYTC_ERR_INVALID_CMD, DYTC_ERR_SHFT, Local1 )
}
}
Return ( Local1 )
}
#endif // ( OPTION_DYTC_ENABLE )
////////////////////////////////////////////////////////////////////////////////
// //
// //
// ITS - Lenovo Intelligent Thermal Solution device driver support //
// //
// //
////////////////////////////////////////////////////////////////////////////////
//
// ITSD : Vertual device for Intelligent Thermal Solution (ITS) driver
// Device Node : ITSD
// Propaties : _HID : IDEA2004
// Method : _STA : 0x0F (Always present, enabled, visible for UI, functional)
//
#if ( OPTION_DYTC_ENABLE )
Scope (EC0_SCOPE.EC0) {
Device( ITSD ) {
//
// PnP ID for ITS (Lenovo Intelligent Thermal Solution device
//
Name(_HID, "IDEA2008" ) // PnP ID for Virtual ITS Device
//
// Status (Always enabled)
//
Method( _STA ){
Return( 0x0F ) // Always present, enable, UI, functional
}
}
}
#endif // ( OPTION_DYTC_ENABLE )