alder_lake_bios/Intel/AlderLake/AlderLakeChipsetPkg/UefiSetupUtilityDxe/Advance/Advance.c

1557 lines
51 KiB
C

/** @file
;******************************************************************************
;* Copyright (c) 2014 - 2020, Insyde Software Corporation. All Rights Reserved.
;*
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
;* transmit, broadcast, present, recite, release, license or otherwise exploit
;* any part of this publication in any form, by any means, without the prior
;* written permission of Insyde Software Corporation.
;*
;******************************************************************************
*/
#include <MrcInterface.h>
#include <Advance.h>
#include <Library/PttHeciLib.h>
#include <Protocol/PciRootBridgeIo.h>
#include <OemThunderbolt.h>
#include <IndustryStandard/Pci22.h>
#include <ITbtInfoHob.h>
#include <Include/Guid/HobList.h>
#include <Include/Library/HobLib.h>
#include <Library/MmPciLib.h>
#include <Library/TbtCommonLib.h>
#include <Library/PchPcieRpLib.h>
#include "OverClockSetup.h"
#include "PlatformSetup.h"
#include "SaSetup.h"
#include "EcSetup.h"
#include "MeSetup.h"
#include <Library/ConfigBlockLib.h>
#include <Library/PcdLib.h>
IDE_CONFIG *mIdeConfig;
EFI_CALLBACK_INFO *mAdvCallBackInfo;
ADVANCE_CONFIGURATION mAdvConfig;
/**
This is the callback function for the Advance Menu.
@param [in] This
@param [in] Action
@param [in] QuestionId
@param [in] Type
@param [in] Value
@param [out] ActionRequest
**/
EFI_STATUS
AdvanceCallbackRoutine (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
)
{
EFI_STATUS Status;
CHAR16 *StringPtr;
CHIPSET_CONFIGURATION *MyIfrNVData;
EFI_HII_HANDLE HiiHandle;
EFI_CALLBACK_INFO *CallbackInfo;
EFI_INPUT_KEY Key;
SETUP_UTILITY_CONFIGURATION *SUCInfo;
UINT8 DeviceKind;
UINTN BufferSize;
EFI_GUID VarStoreGuid = SYSTEM_CONFIGURATION_GUID;
UINT8 CmosPlatformSetting = 0;
SETUP_DATA *MySetupDataIfrNVData;
SA_SETUP *MySaIfrNVData;
ME_SETUP *MyMeIfrNVData;
CPU_SETUP *MyCpuIfrNVData;
PCH_SETUP *MyPchIfrNVData;
SI_SETUP *MySiIfrNVData;
ME_SETUP_STORAGE *MyMeStorageIfrNVData;
if (Action != EFI_BROWSER_ACTION_CHANGED) {
return AdvanceCallbackRoutineByAction (This, Action, QuestionId, Type, Value, ActionRequest);
}
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;
CallbackInfo = EFI_CALLBACK_INFO_FROM_THIS (This);
BufferSize = GetVarStoreSize (CallbackInfo->HiiHandle, &CallbackInfo->FormsetGuid, &VarStoreGuid, "SystemConfig");
Status = SetupVariableConfig (
&VarStoreGuid,
L"SystemConfig",
BufferSize,
(UINT8 *) gSUBrowser->SCBuffer,
TRUE
);
Status = SetupVariableConfig (
&VarStoreGuid,
L"AdvanceConfig",
sizeof (mAdvConfig),
(UINT8 *) &mAdvConfig,
TRUE
);
Status = SetupVariableConfig (
&gSetupVariableGuid,
PLATFORM_SETUP_VARIABLE_NAME,
sizeof (SETUP_DATA),
(UINT8 *) gRcSUBrowser->SetupDataSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gSaSetupVariableGuid,
SA_SETUP_VARIABLE_NAME,
sizeof (SA_SETUP),
(UINT8 *) gRcSUBrowser->SaSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gMeSetupVariableGuid,
ME_SETUP_VARIABLE_NAME,
sizeof (ME_SETUP),
(UINT8 *) gRcSUBrowser->MeSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gCpuSetupVariableGuid,
CPU_SETUP_VARIABLE_NAME,
sizeof (CPU_SETUP),
(UINT8 *) gRcSUBrowser->CpuSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gPchSetupVariableGuid,
PCH_SETUP_VARIABLE_NAME,
sizeof (PCH_SETUP),
(UINT8 *) gRcSUBrowser->PchSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gSiSetupVariableGuid,
SI_SETUP_VARIABLE_NAME,
sizeof (SI_SETUP),
(UINT8 *) gRcSUBrowser->SiSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gMeSetupVariableGuid,
ME_SETUP_STORAGE_VARIABLE_NAME,
sizeof (ME_SETUP_STORAGE),
(UINT8 *) gRcSUBrowser->MeStorageSUBrowserData,
TRUE
);
MyIfrNVData = (CHIPSET_CONFIGURATION *)gSUBrowser->SCBuffer;
Status = EFI_SUCCESS;
StringPtr = NULL;
SUCInfo = gSUBrowser->SUCInfo;
HiiHandle = CallbackInfo->HiiHandle;
MySetupDataIfrNVData = (SETUP_DATA *)gRcSUBrowser->SetupDataSUBrowserData;
MySaIfrNVData = (SA_SETUP *)gRcSUBrowser->SaSUBrowserData;
MyMeIfrNVData = (ME_SETUP *)gRcSUBrowser->MeSUBrowserData;
MyCpuIfrNVData = (CPU_SETUP *)gRcSUBrowser->CpuSUBrowserData;
MyPchIfrNVData = (PCH_SETUP *)gRcSUBrowser->PchSUBrowserData;
MySiIfrNVData = (SI_SETUP *)gRcSUBrowser->SiSUBrowserData;
MyMeStorageIfrNVData = (ME_SETUP_STORAGE *)gRcSUBrowser->MeStorageSUBrowserData;
switch (QuestionId) {
//=======================//
// KEY_AHCI_OPROM_CONFIG //
//=======================//
case KEY_AHCI_OPROM_CONFIG:
if (MyPchIfrNVData->SataInterfaceMode == SATA_MODE_AHCI || MyPchIfrNVData->SataInterfaceMode == SATA_MODE_RAID) {
MyIfrNVData->AhciOptionRomSupport = TRUE;
}else {
MyIfrNVData->AhciOptionRomSupport = FALSE;
}
break;
//========================================================================//
// KEY_SERIAL_PORTA, KEY_SERIAL_PORTA_BASE_IO, KEY_SERIAL_PORTA_INTERRUPT //
// KEY_SERIAL_PORTB, KEY_SERIAL_PORTB_BASE_IO, KEY_SERIAL_PORTB_INTERRUPT //
//========================================================================//
case KEY_SERIAL_PORTA:
case KEY_SERIAL_PORTA_BASE_IO:
case KEY_SERIAL_PORTA_INTERRUPT:
case KEY_SERIAL_PORTB:
case KEY_SERIAL_PORTB_BASE_IO:
case KEY_SERIAL_PORTB_INTERRUPT:
//
// Check IRQ conflict between serial port and pci solt.
//
if (CheckSioAndPciSoltConflict (MyIfrNVData, (UINT8 *)&(MyIfrNVData->PciSlot3), &DeviceKind)) {
StringPtr=HiiGetString (HiiHandle, STRING_TOKEN(ISA_AND_PCISOLT_CONFLICT_STRING), NULL);
gSUBrowser->H2ODialog->ConfirmDialog (2, FALSE, 0, NULL, &Key, StringPtr);
gBS->FreePool (StringPtr);
switch (DeviceKind) {
case 0:
MyIfrNVData->ComPortA = 0;
break;
case 1:
MyIfrNVData->ComPortB = 0;
break;
}
}
if (CheckSioConflict (MyIfrNVData)) {
StringPtr=HiiGetString (HiiHandle, STRING_TOKEN(CONFLICT_STRING), NULL);
gSUBrowser->H2ODialog->ConfirmDialog (
2,
FALSE,
0,
NULL,
&Key,
StringPtr
);
gBS->FreePool (StringPtr);
}
break;
//==============================================//
// KEY_PCI_SLOT3_IRQ_SET, KEY_PCI_SLOT4_IRQ_SET //
//==============================================//
case KEY_PCI_SLOT3_IRQ_SET:
case KEY_PCI_SLOT4_IRQ_SET:
if (CheckPciSioConflict (MyIfrNVData, (UINT8 *)&(MyIfrNVData->PciSlot3), &DeviceKind)) {
switch (DeviceKind) {
case 1:
StringPtr=HiiGetString (HiiHandle, STRING_TOKEN(COMPORTA_CONFLICT_STRING), NULL);
break;
case 2:
StringPtr=HiiGetString (HiiHandle, STRING_TOKEN(COMPORTB_CONFLICT_STRING), NULL);
break;
}
gSUBrowser->H2ODialog->ConfirmDialog (2, FALSE, 0, NULL, &Key, StringPtr);
gBS->FreePool (StringPtr);
}
break;
//=============================//
// KEY_CHIPSET_EXTENDED_CONFIG //
//=============================//
case KEY_CHIPSET_EXTENDED_CONFIG:
if (MyIfrNVData->ExtendedConfig == 0) {
MyIfrNVData->SdRamFrequency = 0;
MyIfrNVData->SdRamTimeCtrl = 0;
MyIfrNVData->SdRamRasActToPre = 6;
MyIfrNVData->SdRamCasLatency = 25;
MyIfrNVData->SdRamRasCasDelay = 3;
MyIfrNVData->SdRamRasPrecharge = 3;
}
break;
//=============================//
// KEY_CHIPSET_SDRAM_TIME_CTRL //
//=============================//
case KEY_CHIPSET_SDRAM_TIME_CTRL:
switch (MyIfrNVData->SdRamTimeCtrl) {
case 0: // AUTO
MyIfrNVData->SdRamRasActToPre = 6;
MyIfrNVData->SdRamCasLatency = 25;
MyIfrNVData->SdRamRasCasDelay = 3;
MyIfrNVData->SdRamRasPrecharge = 3;
break;
case 1: // MANUAL_AGRESSIVE
MyIfrNVData->SdRamRasActToPre = 5;
MyIfrNVData->SdRamCasLatency = 20;
MyIfrNVData->SdRamRasCasDelay = 2;
MyIfrNVData->SdRamRasPrecharge = 2;
break;
}
SUCInfo->DoRefresh = TRUE;
break;
//========================//
// KEY_SATA_CNFIGURE_MODE //
//========================//
case KEY_SATA_CNFIGURE_MODE :
UpdateHDCConfigure (
HiiHandle,
MyIfrNVData
);
break;
//===============================================//
// KEY_ICC_RATIO2, KEY_ICC_FREQ2, KEY_ICC_FREQ3, //
// KEY_ICC_SPREAD2, KEY_ICC_SPREAD3, //
// KEY_BCLK_RFI_FREQ0, KEY_BCLK_RFI_FREQ1, //
// KEY_BCLK_RFI_FREQ2, KEY_BCLK_RFI_FREQ3 //
//===============================================//
case KEY_ICC_RATIO2:
case KEY_ICC_FREQ2:
case KEY_ICC_FREQ3:
case KEY_ICC_SPREAD2:
case KEY_ICC_SPREAD3:
case KEY_BCLK_RFI_FREQ0:
case KEY_BCLK_RFI_FREQ1:
case KEY_BCLK_RFI_FREQ2:
case KEY_BCLK_RFI_FREQ3:
//
// 1. Insyde For compatible to old form browser which only use EFI_BROWSER_ACTION_CHANGING action,
// change action to EFI_BROWSER_ACTION_CHANGED to make it workable.
// 2. Intel Platofrm code use EFI_BROWSER_ACTION_CHANGING, We need to transfer back temperary.
//
if (Action == EFI_BROWSER_ACTION_CHANGED) {
Action = EFI_BROWSER_ACTION_CHANGING;
}
IccCallback (This, Action, QuestionId, Type, Value, ActionRequest);
if (Action == EFI_BROWSER_ACTION_CHANGING) {
Action = EFI_BROWSER_ACTION_CHANGED;
}
break;
//=======================//
// KEY_LOW_POWER_S0_IDLE //
//=======================//
case KEY_LOW_POWER_S0_IDLE:
// if (Action == EFI_BROWSER_ACTION_CHANGED) {
// Action = EFI_BROWSER_ACTION_CHANGING;
// }
LowPowerS0IdleEnableCallback (This, Action, QuestionId, Type, Value, ActionRequest);
// Status = SetupVariableConfig (
// &VarStoreGuid,
// L"SystemConfig",
// BufferSize,
// (UINT8 *) gSUBrowser->SCBuffer,
// TRUE
// );
// if (Action == EFI_BROWSER_ACTION_CHANGING) {
// Action = EFI_BROWSER_ACTION_CHANGED;
// }
break;
//============================================//
// KEY_XeVoltage, KEY_RING_MAX_OC_RATIO_LIMIT //
// KEY_TjMaxOffset, KEY_RING_MIN_RATIO_LIMIT //
// KEY_RING_MAX_RATIO_LIMIT //
// KEY_CORE_MAX_OC_RATIO_LIMIT //
//============================================//
case KEY_XeVoltage:
case KEY_RING_MAX_OC_RATIO_LIMIT:
case KEY_TjMaxOffset:
case KEY_RING_MIN_RATIO_LIMIT:
case KEY_RING_MAX_RATIO_LIMIT:
case KEY_CORE_MAX_OC_RATIO_LIMIT:
OcFormCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
//=================//
// KEY_ICC_PROFILE //
//=================//
case KEY_ICC_PROFILE:
//
// 1. Insyde For compatible to old form browser which only use EFI_BROWSER_ACTION_CHANGING action,
// change action to EFI_BROWSER_ACTION_CHANGED to make it workable.
// 2. Intel Platofrm code use EFI_BROWSER_ACTION_CHANGING, We need to transfer back temperary.
//
if (Action == EFI_BROWSER_ACTION_CHANGED) {
Action = EFI_BROWSER_ACTION_CHANGING;
}
IccProfileCallback (This, Action, QuestionId, Type, Value, ActionRequest);
if (Action == EFI_BROWSER_ACTION_CHANGING) {
Action = EFI_BROWSER_ACTION_CHANGED;
}
break;
//========================================================================//
// KEY_TBT_SUPPORT, KEY_TBT_BOOT_ON, KEY_TBT_USB_ON, KEY_TBT_HOSTROUTER //
// KEY_DTBT_CONTROLLER, KEY_TBT_NATIVE_OS_HOTPLUG, TBT_SECURITY_LEVEL_KEY //
//========================================================================//
case KEY_DTBT_SUPPORT:
case KEY_DTBT_CONTROLLER0_HOSTROUTER:
case KEY_DTBT_CONTROLLER0:
case KEY_DTBT_CONTROLLER1_HOSTROUTER:
case KEY_DTBT_CONTROLLER1:
case KEY_DTBT_CONTROLLER2:
case KEY_ITBT_SUPPORT:
//[-start-210330-IB17800121-modify]//
//=========================================================//
// KEY_DTBT_CONTROLLER_TYPE_0,KEY_DTBT_CONTROLLER_TYPE_1 //
// KEY_DTBT_CONTROLLER_TYPE_2, KEY_DTBT_CONTROLLER_TYPE_3 //
//=========================================================//
case KEY_DTBT_CONTROLLER_TYPE_0:
case KEY_DTBT_CONTROLLER_TYPE_1:
case KEY_DTBT_CONTROLLER_TYPE_2:
case KEY_DTBT_CONTROLLER_TYPE_3:
Status = DTbtFormCallBackFunction(
This,
Action,
QuestionId,
Type,
Value,
ActionRequest
);
//[-end-210330-IB17800121-modify]//
break;
case KEY_TBT_OS_SELECTOR:
Status = TbtOsSelectorFormCallBackFunction(
This,
Action,
QuestionId,
Type,
Value,
ActionRequest
);
break;
//======================//
// KEY_DUAL_VGA_SUPPORT //
//======================//
case KEY_DUAL_VGA_SUPPORT:
if (MyIfrNVData->UefiDualVgaControllers == DUAL_VGA_CONTROLLER_ENABLE) {
//
// Set PrimaryDisplay Mode IGD, and enable the IGD.
// Always enable PEG detection.
//
MySaIfrNVData->PrimaryDisplay = 0;
MySaIfrNVData->InternalGraphics = 1;
}
if (MyIfrNVData->UefiDualVgaControllers == DUAL_VGA_CONTROLLER_DISABLE) {
//
// Set PrimaryDisplay Mode AUTO, and set IGD enable in AUTO mode.
// disable PEG detection.
//
MySaIfrNVData->PrimaryDisplay = 3;
MySaIfrNVData->InternalGraphics = 2;
}
break;
//================================//
// KEY_PLUG_IN_DISPLAY_SELECTION1 //
// KEY_PLUG_IN_DISPLAY_SELECTION2 //
//================================//
case KEY_PLUG_IN_DISPLAY_SELECTION1:
case KEY_PLUG_IN_DISPLAY_SELECTION2:
PlugInVideoDisplaySelectionOption (QuestionId, Value);
break;
//===================================//
// KEY_IGD_PRIMARY_DISPLAY_SELECTION //
//===================================//
case KEY_IGD_PRIMARY_DISPLAY_SELECTION:
if (Value->u8 == SCU_IGD_BOOT_TYPE_VBIOS_DEFAULT) {
MyIfrNVData->IGDBootTypeSecondary = SCU_IGD_BOOT_TYPE_DISABLE;
}
break;
//================//
// THERMAL REGION //
//================//
case THERMAL_SENSOR_1_KEY:
case THERMAL_SENSOR_2_KEY:
case THERMAL_SENSOR_3_KEY:
case THERMAL_SENSOR_4_KEY:
case THERMAL_SENSOR_5_KEY:
case CPU_FAN_KEY :
case PCH_DTS_TEMP_KEY :
case TS_ON_DIMM0_TEMP_KEY :
case TS_ON_DIMM1_TEMP_KEY :
HhmMobileCallBack (
HiiHandle,
ADVANCED_FORM_SET_CLASS,
0,
QuestionId
);
break;
//======================//
// KEY_DVMT_PREALLOCATE //
//======================//
case KEY_DVMT_PREALLOCATE:
CmosPlatformSetting = ReadExtCmos8 ( R_XCMOS_INDEX, R_XCMOS_DATA, PlatformSettingFlag );
CmosPlatformSetting = CmosPlatformSetting | B_SETTING_MEM_REFRESH_FLAG;
WriteExtCmos8 ( R_XCMOS_INDEX, R_XCMOS_DATA, PlatformSettingFlag, CmosPlatformSetting );
break;
//===================//
// KEY_APERTURE_SIZE //
//===================//
case KEY_APERTURE_SIZE:
CmosPlatformSetting = ReadExtCmos8 ( R_XCMOS_INDEX, R_XCMOS_DATA, PlatformSettingFlag );
CmosPlatformSetting = CmosPlatformSetting | B_SETTING_MEM_REFRESH_FLAG;
WriteExtCmos8 ( R_XCMOS_INDEX, R_XCMOS_DATA, PlatformSettingFlag, CmosPlatformSetting );
break;
//============================================//
// KEY_RatioLimitRatio0~7 //
// KEY_RatioLimitNumCore0~7 //
// KEY_AtomRatioLimitRatio0~7 //
// KEY_AtomRatioLimitNumCore0~7 //
// KEY_CpuRatioLimit //
//============================================//
case KEY_RatioLimitRatio0:
case KEY_RatioLimitRatio1:
case KEY_RatioLimitRatio2:
case KEY_RatioLimitRatio3:
case KEY_RatioLimitRatio4:
case KEY_RatioLimitRatio5:
case KEY_RatioLimitRatio6:
case KEY_RatioLimitRatio7:
case KEY_RatioLimitNumCore0:
case KEY_RatioLimitNumCore1:
case KEY_RatioLimitNumCore2:
case KEY_RatioLimitNumCore3:
case KEY_RatioLimitNumCore4:
case KEY_RatioLimitNumCore5:
case KEY_RatioLimitNumCore6:
case KEY_RatioLimitNumCore7:
case KEY_AtomRatioLimitRatio0:
case KEY_AtomRatioLimitRatio1:
case KEY_AtomRatioLimitRatio2:
case KEY_AtomRatioLimitRatio3:
case KEY_AtomRatioLimitRatio4:
case KEY_AtomRatioLimitRatio5:
case KEY_AtomRatioLimitRatio6:
case KEY_AtomRatioLimitRatio7:
case KEY_AtomRatioLimitNumCore0:
case KEY_AtomRatioLimitNumCore1:
case KEY_AtomRatioLimitNumCore2:
case KEY_AtomRatioLimitNumCore3:
case KEY_AtomRatioLimitNumCore4:
case KEY_AtomRatioLimitNumCore5:
case KEY_AtomRatioLimitNumCore6:
case KEY_AtomRatioLimitNumCore7:
case KEY_CpuRatioLimit:
Status = CpuFormCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
//=================//
// KEY_EpochChange //
//=================//
//[-start-200420-IB17800056-remove]//
// Sgx be removed.
#if 0
case KEY_EpochChange:
Status = EpochChangeCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
//===============//
// KEY_SgxEpoch1 //
//===============//
case KEY_SgxEpoch1:
Status = SgxEpoch1CallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
//===============//
// KEY_SgxChange //
//===============//
case KEY_SgxChange:
Status = SgxFormCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
#endif
//[-end-200420-IB17800056-remove]//
//==================================//
// MNG_STATE_KEY //
// PTT_TRIGGER_FORM_OPEN_ACTION_KEY //
// DAM_STATE_KEY //
//==================================//
case MNG_STATE_KEY:
case PTT_TRIGGER_FORM_OPEN_ACTION_KEY:
case DAM_STATE_KEY:
Status = MeFormCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
// //==================//
// // PTT_ENABLE_LABEL //
// //==================//
// case PTT_ENABLE_LABEL :
// if (FeaturePcdGet(PcdPttSupported)) {
// if (MyIfrNVData->PTTEnable == PTT_ENABLE) {
// Status = PttHeciSetState(TRUE);
// } else {
// Status = PttHeciSetState(FALSE);
// }
// }
// break;
// //========================//
// // PTT_REVOKE_TRUST_LABEL //
// //========================//
// case PTT_REVOKE_TRUST_LABEL :
// StringPtr = HiiGetString (HiiHandle, STRING_TOKEN (STR_PTT_REVOKE_TRUST_WARNING_STRING), NULL);
// gSUBrowser->H2ODialog->ConfirmDialog (
// 2,
// FALSE,
// 0,
// NULL,
// &Key,
// StringPtr
// );
// break;
//============================//
// PLATFORM_DEBUG_CONSENT_KEY //
//============================//
case PLATFORM_DEBUG_CONSENT_KEY:
Status = DebugFormCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
//====================//
// KEY_TXT_POLICY_FIT //
//====================//
case KEY_TXT_POLICY_FIT:
Status = TxtPolicyCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
//================================================//
// KEY_CNV_BT_AUDIO_OFFLOAD, KEY_WIFI_POWER_LIMIT //
//================================================//
case KEY_CNV_BT_AUDIO_OFFLOAD:
case KEY_WIFI_POWER_LIMIT:
Status = CnvFormCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
//=====================//
// KEY_MEMINFO_PROFILE //
//=====================//
case KEY_MEMINFO_PROFILE:
Status = OcFormMemoryTimingCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
//========================//
// KEY_ENABLE_THERMAL_FUN //
//========================//
case KEY_ENABLE_THERMAL_FUN:
Status = ThermalFunctionCallback (This, Action, QuestionId, Type, Value, ActionRequest);
break;
//=================================//
// KEY_SdevXhciAcpiPathNameDevice1 //
// KEY_SdevXhciAcpiPathNameDevice2 //
//=================================//
case KEY_SdevXhciAcpiPathNameDevice1:
case KEY_SdevXhciAcpiPathNameDevice2:
Status = VtioFormCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
//========================//
// KEY_PCH_STATE_AFTER_G3 //
//========================//
case KEY_PCH_STATE_AFTER_G3:
Status = StateAfterG3CallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
case KEY_VrPowerDeliveryChange:
Status = CpuVrConfigCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
case KEY_SA_VMD_GLOBAL_MAPPING:
Status = VmdCallback (This, Action, QuestionId, Type, Value, ActionRequest);
break;
case RTD3_SUPPORT_QUESTION_ID:
Status = Rtd3SupportCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
break;
//=========//
// default //
//=========//
default:
Status = HotKeyCallBack (
This,
Action,
QuestionId,
Type,
Value,
ActionRequest
);
break;
}
SetupVariableConfig (
&VarStoreGuid,
L"SystemConfig",
BufferSize,
(UINT8 *) gSUBrowser->SCBuffer,
FALSE
);
SetupVariableConfig (
&VarStoreGuid,
L"AdvanceConfig",
sizeof (mAdvConfig),
(UINT8 *) &mAdvConfig,
FALSE
);
SetupVariableConfig (
&gSetupVariableGuid,
PLATFORM_SETUP_VARIABLE_NAME,
sizeof (SETUP_DATA),
(UINT8 *) gRcSUBrowser->SetupDataSUBrowserData,
FALSE
);
SetupVariableConfig (
&gSaSetupVariableGuid,
SA_SETUP_VARIABLE_NAME,
sizeof (SA_SETUP),
(UINT8 *) gRcSUBrowser->SaSUBrowserData,
FALSE
);
SetupVariableConfig (
&gMeSetupVariableGuid,
ME_SETUP_VARIABLE_NAME,
sizeof (ME_SETUP),
(UINT8 *) gRcSUBrowser->MeSUBrowserData,
FALSE
);
SetupVariableConfig (
&gCpuSetupVariableGuid,
CPU_SETUP_VARIABLE_NAME,
sizeof (CPU_SETUP),
(UINT8 *) gRcSUBrowser->CpuSUBrowserData,
FALSE
);
SetupVariableConfig (
&gPchSetupVariableGuid,
PCH_SETUP_VARIABLE_NAME,
sizeof (PCH_SETUP),
(UINT8 *) gRcSUBrowser->PchSUBrowserData,
FALSE
);
SetupVariableConfig (
&gSiSetupVariableGuid,
SI_SETUP_VARIABLE_NAME,
sizeof (SI_SETUP),
(UINT8 *) gRcSUBrowser->SiSUBrowserData,
FALSE
);
SetupVariableConfig (
&gMeSetupVariableGuid,
ME_SETUP_STORAGE_VARIABLE_NAME,
sizeof (ME_SETUP_STORAGE),
(UINT8 *) gRcSUBrowser->MeStorageSUBrowserData,
FALSE
);
return Status;
}
EFI_STATUS
AdvanceCallbackRoutineByAction (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
)
{
EFI_STATUS Status;
EFI_CALLBACK_INFO *CallbackInfo;
UINTN BufferSize;
EFI_GUID VarStoreGuid = SYSTEM_CONFIGURATION_GUID;
if ((This == NULL) ||
((Value == NULL) &&
(Action != EFI_BROWSER_ACTION_FORM_OPEN) &&
(Action != EFI_BROWSER_ACTION_FORM_CLOSE))||
(ActionRequest == NULL)) {
return EFI_INVALID_PARAMETER;
}
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;
CallbackInfo = EFI_CALLBACK_INFO_FROM_THIS (This);
BufferSize = GetVarStoreSize (CallbackInfo->HiiHandle, &CallbackInfo->FormsetGuid, &VarStoreGuid, "SystemConfig");
Status = EFI_UNSUPPORTED;
switch (Action) {
case EFI_BROWSER_ACTION_FORM_OPEN:
if (QuestionId == 0) {
Status = SetupVariableConfig (
&VarStoreGuid,
L"SystemConfig",
BufferSize,
(UINT8 *) gSUBrowser->SCBuffer,
FALSE
);
Status = SetupVariableConfig (
&VarStoreGuid,
L"AdvanceConfig",
sizeof (mAdvConfig),
(UINT8 *) &mAdvConfig,
FALSE
);
Status = SetupVariableConfig (
&gSetupVariableGuid,
PLATFORM_SETUP_VARIABLE_NAME,
sizeof (SETUP_DATA),
(UINT8 *) gRcSUBrowser->SetupDataSUBrowserData,
FALSE
);
Status = SetupVariableConfig (
&gSaSetupVariableGuid,
SA_SETUP_VARIABLE_NAME,
sizeof (SA_SETUP),
(UINT8 *) gRcSUBrowser->SaSUBrowserData,
FALSE
);
Status = SetupVariableConfig (
&gMeSetupVariableGuid,
ME_SETUP_VARIABLE_NAME,
sizeof (ME_SETUP),
(UINT8 *) gRcSUBrowser->MeSUBrowserData,
FALSE
);
Status = SetupVariableConfig (
&gCpuSetupVariableGuid,
CPU_SETUP_VARIABLE_NAME,
sizeof (CPU_SETUP),
(UINT8 *) gRcSUBrowser->CpuSUBrowserData,
FALSE
);
Status = SetupVariableConfig (
&gPchSetupVariableGuid,
PCH_SETUP_VARIABLE_NAME,
sizeof (PCH_SETUP),
(UINT8 *) gRcSUBrowser->PchSUBrowserData,
FALSE
);
Status = SetupVariableConfig (
&gSiSetupVariableGuid,
SI_SETUP_VARIABLE_NAME,
sizeof (SI_SETUP),
(UINT8 *) gRcSUBrowser->SiSUBrowserData,
FALSE
);
Status = SetupVariableConfig (
&gMeSetupVariableGuid,
ME_SETUP_STORAGE_VARIABLE_NAME,
sizeof (ME_SETUP_STORAGE),
(UINT8 *) gRcSUBrowser->MeStorageSUBrowserData,
FALSE
);
Status = SyncIccSetupDataWithFormBrowser (Action);
//[-start-200420-IB17800056-remove]//
// Sgx be removed.
// Status = SgxFormCallBackFunction (This, Action, QuestionId, Type, Value, ActionRequest);
//[-end-200420-IB17800056-remove]//
}
break;
case EFI_BROWSER_ACTION_FORM_CLOSE:
if (QuestionId == 0) {
Status = SetupVariableConfig (
&VarStoreGuid,
L"SystemConfig",
BufferSize,
(UINT8 *) gSUBrowser->SCBuffer,
TRUE
);
Status = SetupVariableConfig (
&VarStoreGuid,
L"AdvanceConfig",
sizeof (mAdvConfig),
(UINT8 *) &mAdvConfig,
TRUE
);
Status = SetupVariableConfig (
&gSetupVariableGuid,
PLATFORM_SETUP_VARIABLE_NAME,
sizeof (SETUP_DATA),
(UINT8 *) gRcSUBrowser->SetupDataSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gSaSetupVariableGuid,
SA_SETUP_VARIABLE_NAME,
sizeof (SA_SETUP),
(UINT8 *) gRcSUBrowser->SaSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gMeSetupVariableGuid,
ME_SETUP_VARIABLE_NAME,
sizeof (ME_SETUP),
(UINT8 *) gRcSUBrowser->MeSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gCpuSetupVariableGuid,
CPU_SETUP_VARIABLE_NAME,
sizeof (CPU_SETUP),
(UINT8 *) gRcSUBrowser->CpuSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gPchSetupVariableGuid,
PCH_SETUP_VARIABLE_NAME,
sizeof (PCH_SETUP),
(UINT8 *) gRcSUBrowser->PchSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gSiSetupVariableGuid,
SI_SETUP_VARIABLE_NAME,
sizeof (SI_SETUP),
(UINT8 *) gRcSUBrowser->SiSUBrowserData,
TRUE
);
Status = SetupVariableConfig (
&gMeSetupVariableGuid,
ME_SETUP_STORAGE_VARIABLE_NAME,
sizeof (ME_SETUP_STORAGE),
(UINT8 *) gRcSUBrowser->MeStorageSUBrowserData,
TRUE
);
Status = SyncIccSetupDataWithFormBrowser (Action);
}
break;
case EFI_BROWSER_ACTION_CHANGING:
Status = EFI_SUCCESS;
break;
case EFI_BROWSER_ACTION_DEFAULT_MANUFACTURING:
if (QuestionId == KEY_SCAN_F9) {
Status = HotKeyCallBack (
This,
Action,
QuestionId,
Type,
Value,
ActionRequest
);
SetupVariableConfig (
&VarStoreGuid,
L"SystemConfig",
BufferSize,
(UINT8 *) gSUBrowser->SCBuffer,
FALSE
);
SetupVariableConfig (
&gSetupVariableGuid,
PLATFORM_SETUP_VARIABLE_NAME,
sizeof (SETUP_DATA),
(UINT8 *) gRcSUBrowser->SetupDataSUBrowserData,
FALSE
);
SetupVariableConfig (
&gSaSetupVariableGuid,
SA_SETUP_VARIABLE_NAME,
sizeof (SA_SETUP),
(UINT8 *) gRcSUBrowser->SaSUBrowserData,
FALSE
);
SetupVariableConfig (
&gMeSetupVariableGuid,
ME_SETUP_VARIABLE_NAME,
sizeof (ME_SETUP),
(UINT8 *) gRcSUBrowser->MeSUBrowserData,
FALSE
);
SetupVariableConfig (
&gCpuSetupVariableGuid,
CPU_SETUP_VARIABLE_NAME,
sizeof (CPU_SETUP),
(UINT8 *) gRcSUBrowser->CpuSUBrowserData,
FALSE
);
SetupVariableConfig (
&gPchSetupVariableGuid,
PCH_SETUP_VARIABLE_NAME,
sizeof (PCH_SETUP),
(UINT8 *) gRcSUBrowser->PchSUBrowserData,
FALSE
);
SetupVariableConfig (
&gSiSetupVariableGuid,
SI_SETUP_VARIABLE_NAME,
sizeof (SI_SETUP),
(UINT8 *) gRcSUBrowser->SiSUBrowserData,
FALSE
);
SetupVariableConfig (
&gMeSetupVariableGuid,
ME_SETUP_STORAGE_VARIABLE_NAME,
sizeof (ME_SETUP_STORAGE),
(UINT8 *) gRcSUBrowser->MeStorageSUBrowserData,
FALSE
);
Status = SyncIccSetupDataWithFormBrowser (Action);
}
//
// avoid GetQuestionDefault execute ExtractConfig
//
return EFI_SUCCESS;
default:
break;
}
return Status;
}
EFI_STATUS
UpdateAdvanceDevicePathStr (
IN EFI_HII_HANDLE HiiHandle
)
{
EFI_STATUS Status;
EFI_HANDLE AdvanceDriverHandle;
EFI_DEVICE_PATH_PROTOCOL *AdvanceDevicePath;
CHAR16 *AdvanceDevicePathStr;
EFI_HANDLE PowerHandle;
AdvanceDriverHandle = gSUBrowser->SUCInfo->MapTable[AdvanceHiiHandle].DriverHandle;
PowerHandle = gSUBrowser->SUCInfo->MapTable[PowerHiiHandle].HiiHandle;
Status = gBS->HandleProtocol (AdvanceDriverHandle, &gEfiDevicePathProtocolGuid, (VOID **) &AdvanceDevicePath);
if (EFI_ERROR (Status)) {
return Status;
}
AdvanceDevicePathStr = ConvertDevicePathToText (AdvanceDevicePath, FALSE, FALSE);
if (AdvanceDevicePathStr == NULL) {
return EFI_OUT_OF_RESOURCES;
}
//
// Update Advance driver device path to Power Hii handle.
// It will connect Power->Power&Performance->GT-PowerManagementControl->RC6(Rander Standby).
//
HiiSetString (PowerHandle, STRING_TOKEN (STR_SCU_GT_MENU_DEVICE_PATH), AdvanceDevicePathStr, NULL);
FreePool (AdvanceDevicePathStr);
return EFI_SUCCESS;
}
EFI_STATUS
InstallAdvanceCallbackRoutine (
IN EFI_HANDLE DriverHandle,
IN EFI_HII_HANDLE HiiHandle
)
{
EFI_STATUS Status;
EFI_GUID FormsetGuid = FORMSET_ID_GUID_ADVANCE;
mAdvCallBackInfo = AllocatePool (sizeof(EFI_CALLBACK_INFO));
if (mAdvCallBackInfo == NULL) {
return EFI_OUT_OF_RESOURCES;
}
mAdvCallBackInfo->Signature = EFI_CALLBACK_INFO_SIGNATURE;
mAdvCallBackInfo->DriverCallback.ExtractConfig = gSUBrowser->ExtractConfig;
mAdvCallBackInfo->DriverCallback.RouteConfig = gSUBrowser->RouteConfig;
mAdvCallBackInfo->DriverCallback.Callback = AdvanceCallbackRoutine;
mAdvCallBackInfo->HiiHandle = HiiHandle;
CopyGuid (&mAdvCallBackInfo->FormsetGuid, &FormsetGuid);
//
// Install protocol interface
//
Status = gBS->InstallProtocolInterface (
&DriverHandle,
&gEfiHiiConfigAccessProtocolGuid,
EFI_NATIVE_INTERFACE,
&mAdvCallBackInfo->DriverCallback
);
ASSERT_EFI_ERROR (Status);
Status = InitAdvanceMenu (HiiHandle);
//
// Make text mode SCU can process user go into GT setting in AdvanceVfr from PowerVfr.
//
UpdateAdvanceDevicePathStr (HiiHandle);
return Status;
}
EFI_STATUS
UninstallAdvanceCallbackRoutine (
IN EFI_HANDLE DriverHandle
)
{
EFI_STATUS Status;
if (mAdvCallBackInfo == NULL) {
return EFI_SUCCESS;
}
Status = gBS->UninstallProtocolInterface (
DriverHandle,
&gEfiHiiConfigAccessProtocolGuid,
&mAdvCallBackInfo->DriverCallback
);
ASSERT_EFI_ERROR (Status);
gBS->FreePool (mAdvCallBackInfo);
mAdvCallBackInfo = NULL;
return Status;
}
//[-start-190709-16990080-modify]//
EFI_STATUS
InitAdvanceMenu (
IN EFI_HII_HANDLE HiiHandle
)
{
EFI_STATUS Status;
UINT8 SataInterfaceMode;
UINTN HandleCount;
EFI_HANDLE *HandleBuffer;
EFI_DISK_INFO_PROTOCOL *DiskInfo;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_DEVICE_PATH_PROTOCOL *DevicePathNode;
CHIPSET_CONFIGURATION *SetupVariable;
UINTN Index;
PCI_DEVICE_PATH *PciDevicePath;
SATA_DEVICE_PATH *SataDevicePath;
SCSI_DEVICE_PATH *ScsiDevicePath;
UINTN PortNum;
UINT16 PortMap;
UINT16 Port;
BOOLEAN OnBoardCheck;
UINT8 Bus;
//
// Check and update IDE configuration.
//
SataInterfaceMode = ((PCH_SETUP *)gRcSUBrowser->PchSUBrowserData)->SataInterfaceMode;
if (SataInterfaceMode == SATA_MODE_AHCI) {
gSUBrowser->SUCInfo->PrevSataCnfigure = AHCI_MODE;
} else if (SataInterfaceMode == SATA_MODE_RAID) {
gSUBrowser->SUCInfo->PrevSataCnfigure = RAID_MODE;
} else {
// CRB should not have this
gSUBrowser->SUCInfo->PrevSataCnfigure = SataInterfaceMode;
}
PortMap = 0;
Port = 0;
//
// Maximum native supported ports without RST remapping.
//
PortNum = 32;
SetupVariable = (CHIPSET_CONFIGURATION *)gSUBrowser->SCBuffer;
HandleCount = 0;
Status = gBS->LocateHandleBuffer (
ByProtocol,
&gEfiDiskInfoProtocolGuid,
NULL,
&HandleCount,
&HandleBuffer
);
for (Index = 0; Index < HandleCount; Index++) {
gBS->HandleProtocol (
HandleBuffer[Index],
&gEfiDiskInfoProtocolGuid,
(VOID**)&DiskInfo
);
ASSERT_EFI_ERROR (Status);
if (!(CompareGuid (&DiskInfo->Interface, &gEfiDiskInfoIdeInterfaceGuid) ||
CompareGuid (&DiskInfo->Interface, &gEfiDiskInfoAhciInterfaceGuid) ||
CompareGuid (&DiskInfo->Interface, &gEfiDiskInfoNvmeInterfaceGuid))) {
continue;
}
Status = gBS->HandleProtocol (
HandleBuffer[Index],
&gEfiDevicePathProtocolGuid,
(VOID **) &DevicePath
);
if (EFI_ERROR (Status)) {
continue;
}
DevicePathNode = DevicePath;
SataDevicePath = NULL;
ScsiDevicePath = NULL;
OnBoardCheck = FALSE;
while (!IsDevicePathEnd (DevicePathNode)) {
if (!OnBoardCheck) {
PciDevicePath = NULL;
Bus = 0xFF;
PciDevicePath = GetPciLocation (DevicePath, &Bus);
if ((PciDevicePath != NULL) &&
(Bus != 0xFF) &&
(!IsOnBoardPciDevice (Bus, PciDevicePath->Device, PciDevicePath->Function))) {
break;
}
OnBoardCheck = TRUE;
}
if ((DevicePathType (DevicePathNode) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (DevicePathNode) == MSG_SATA_DP)) {
SataDevicePath = (SATA_DEVICE_PATH *) DevicePathNode;
PortNum = SataDevicePath->HBAPortNumber;
if (gSUBrowser->SUCInfo->PrevSataCnfigure == RAID_MODE) {
if (SataDevicePath->PortMultiplierPortNumber & SATA_HBA_DIRECT_CONNECT_FLAG) {
PortMap = (UINT16) PortNum;
for (Port = 0; PortMap != 0; Port++, PortMap >>= 1);
PortNum = Port;
}
}
break;
}
if ((DevicePathType (DevicePathNode) == MESSAGING_DEVICE_PATH) && (DevicePathSubType (DevicePathNode) == MSG_SCSI_DP)) {
ScsiDevicePath = (SCSI_DEVICE_PATH *) DevicePathNode;
PortNum = ScsiDevicePath->Pun;
break;
}
DevicePathNode = NextDevicePathNode (DevicePathNode);
}
}
PortNum = (PortNum < 8) ? 8:PortNum;
mIdeConfig = AllocateZeroPool (sizeof(IDE_CONFIG)*PortNum);
InitIdeConfig (mIdeConfig);
gSUBrowser->IdeConfig = mIdeConfig;
Status = CheckIde (
HiiHandle,
(CHIPSET_CONFIGURATION *)gSUBrowser->SCBuffer,
FALSE
);
InitCPUStrings (HiiHandle, ADVANCED_FORM_SET_CLASS);
InitSaStrings (HiiHandle, ADVANCED_FORM_SET_CLASS);
InitSBStrings (HiiHandle, ADVANCED_FORM_SET_CLASS);
InitAcpiStrings (HiiHandle, ADVANCED_FORM_SET_CLASS);
InitHhmMobileStrings (HiiHandle, ADVANCED_FORM_SET_CLASS);
InitMeInfo (HiiHandle, ADVANCED_FORM_SET_CLASS);
InitIccStrings(HiiHandle, ADVANCED_FORM_SET_CLASS);
InitOverClockStrings (HiiHandle, ADVANCED_FORM_SET_CLASS);
InitPlatformStrings (HiiHandle, ADVANCED_FORM_SET_CLASS);
IccExtractConfig ();
// UpdateACPIDebugInfo(HiiHandle);
PlugInVideoDisplaySelectionLabel (HiiHandle);
InitialDualVgaControllersLabel (HiiHandle);
InitConnectivityStrings (HiiHandle, ADVANCED_FORM_SET_CLASS);
InitBoardStrings (HiiHandle, ADVANCED_FORM_SET_CLASS);
// if (FeaturePcdGet (PcdPttSupported)) {
// UpdatePTTInfo (HiiHandle);
// }
if (FeaturePcdGet (PcdMeUnconfigOnRtcSupported)) {
InitMeUnconfigOnRtc(HiiHandle);
}
return Status;
}
//[-end-190709-16990080-modify]//
//EFI_STATUS
//UpdateACPIDebugInfo (
// IN EFI_HII_HANDLE HiiHandle
// )
//{
// CHAR16 *StringBuffer;
// CHIPSET_CONFIGURATION *SetupVariable;
// EFI_STRING_ID ACPIDebugAddr;
// EFI_STRING_ID ACPIDebugAddrString;
// VOID *StartOpCodeHandle;
// EFI_IFR_GUID_LABEL *StartLabel;
//
// StartOpCodeHandle = HiiAllocateOpCodeHandle ();
// ASSERT ( StartOpCodeHandle != NULL );
//
// StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
// StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
// StartLabel->Number = APCI_DEBUG_ADDRESS_LABEL;
//
// SetupVariable = (CHIPSET_CONFIGURATION *)(gSUBrowser->SCBuffer);
// StringBuffer = AllocateZeroPool (0x100);
//
// UnicodeSPrint ( StringBuffer, 0x100, L"0x%8x", SetupVariable->AcpiDebugAddr );
// AcpiDebugAddrString = HiiSetString ( HiiHandle, 0, StringBuffer, NULL );
//
// StringBuffer = HiiGetString ( HiiHandle, STRING_TOKEN (STR_APCI_DEBUG_ADDRESS_STRING), NULL );
// AcpiDebugAddr = HiiSetString ( HiiHandle, 0, StringBuffer, NULL );
//
// HiiCreateTextOpCode ( StartOpCodeHandle, AcpiDebugAddr, 0, AcpiDebugAddrString );
//
// HiiUpdateForm (
// HiiHandle,
// NULL,
// 0x28,
// StartOpCodeHandle,
// NULL
// );
//
// gBS->FreePool ( StringBuffer );
// HiiFreeOpCodeHandle ( StartOpCodeHandle );
// return EFI_SUCCESS;
//}
// EFI_STATUS
// UpdatePTTInfo (
// IN EFI_HII_HANDLE HiiHandle
// )
// {
// EFI_STATUS Status;
// CHAR16 *StringBuffer;
// CHIPSET_CONFIGURATION *SetupVariable;
// STRING_REF PTTCapStsStr;
// STRING_REF PTTCapStsValue;
// EFI_HII_UPDATE_DATA *UpdateData;
// BOOLEAN PTTCapSts;
// UINT8 PTTCap = 0;
// UINT8 PTTSts = 0;
// VOID *StartOpCodeHandle;
// EFI_IFR_GUID_LABEL *StartLabel;
// StartOpCodeHandle = HiiAllocateOpCodeHandle ();
// ASSERT (StartOpCodeHandle != NULL);
// StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
// StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
// StartLabel->Number = PTT_INFO_LABEL;
// SetupVariable = (CHIPSET_CONFIGURATION *) (gSUBrowser->SCBuffer);
// StringBuffer = AllocateZeroPool (0x100);
// UpdateData = AllocateZeroPool (sizeof (EFI_HII_UPDATE_DATA));
// Status = PttHeciGetCapability (&PTTCapSts);
// ASSERT_EFI_ERROR (Status);
// if (PTTCapSts) {
// PTTCap = 1;
// } else {
// PTTCap = 0;
// }
// Status = PttHeciGetState (&PTTCapSts);
// ASSERT_EFI_ERROR (Status);
// if (PTTCapSts) {
// PTTSts = 1;
// } else {
// PTTSts = 0;
// }
// if (!PTTCap ) {
// SetupVariable->PTTEnable = PTT_DISABLE;
// }
// if (SetupVariable->PTTEnable == PTT_ENABLE && PcdGetBool (PcdTpmHide)) {
// UnicodeSPrint (StringBuffer, 0x100, L"%d / %d (Hidden)",PTTCap, PTTSts);
// } else {
// UnicodeSPrint (StringBuffer, 0x100, L"%d / %d",PTTCap, PTTSts);
// }
// PTTCapStsValue = HiiSetString (HiiHandle, 0, StringBuffer, NULL);
// StringBuffer = HiiGetString (HiiHandle, STRING_TOKEN (STR_PTT_CAP_STS_STRING), NULL);
// ASSERT_EFI_ERROR (Status);
// PTTCapStsStr = HiiSetString (HiiHandle, 0, StringBuffer, NULL);
// HiiCreateTextOpCode (StartOpCodeHandle, PTTCapStsStr, 0, PTTCapStsValue);
// //
// // Form 0x27: Chipset Configuration
// //
// HiiUpdateForm (HiiHandle, NULL, 0x27, StartOpCodeHandle, NULL);
// gBS->FreePool (StringBuffer);
// HiiFreeOpCodeHandle (StartOpCodeHandle);
// return Status;
// }
EFI_STATUS
InitMeUnconfigOnRtc (
IN EFI_HII_HANDLE HiiHandle
)
{
EFI_STATUS Status;
HECI_PROTOCOL *Heci;
CHIPSET_CONFIGURATION *SetupVariable;
VOID *StartOpCodeHandle;
VOID *OptionsOpCodeHandle;
EFI_IFR_GUID_LABEL *StartLabel;
ME_POLICY_PROTOCOL *MEPlatformPolicy;
UINTN OptionCount;
UINT32 MeMode;
UINT32 MeUnconfigOnRtc;
UINT16 VarOffset;
UINT8 Flags;
ME_BIOS_PAYLOAD_HOB *MbpHob;
ME_DXE_CONFIG *MeDxeConfig;
MbpHob = NULL;
DEBUG ((DEBUG_ERROR | DEBUG_INFO, "InitMeUnconfigOnRtc Start !!\n"));
Status = EFI_SUCCESS;
Heci = NULL;
SetupVariable = NULL;
StartOpCodeHandle = NULL;
OptionsOpCodeHandle = NULL;
StartLabel = NULL;
MEPlatformPolicy = NULL;
MeMode = ME_MODE_FAILED;
MeUnconfigOnRtc = 0;
VarOffset = 0;
Flags = 0;
SetupVariable = (CHIPSET_CONFIGURATION *)(gSUBrowser->SCBuffer);
//
// Get the MBP Data.
//
MbpHob = GetFirstGuidHob (&gMeBiosPayloadHobGuid);
if (MbpHob == NULL){
ASSERT (MbpHob != NULL);
return EFI_NOT_FOUND;
}
if (EFI_ERROR(Status)) {
DEBUG ((DEBUG_ERROR | DEBUG_INFO, "LocateProtocol MeBiosPayload, Status : %r\n", Status ));
}
Status = gBS->LocateProtocol (&gHeciProtocolGuid, NULL, (VOID **)&Heci);
if (EFI_ERROR(Status)) {
DEBUG ((DEBUG_ERROR | DEBUG_INFO, "LocateProtocol Heci, Status : %r\n", Status ));
} else{
Heci->GetMeMode (&MeMode);
if (MeMode == ME_MODE_NORMAL) {
Status = HeciGetUnconfigOnRtcClearDisableMsg(&MeUnconfigOnRtc);
ASSERT_EFI_ERROR (Status);
SetupVariable->MeUnconfigOnRtc = (UINT8)MeUnconfigOnRtc;
}
}
//
// 1. if ME FW un-supported "Unconfig On Rtc", the item will be gray out
// 2. Afer EOP then enter SCU, the item will be gray out
//
Status = gBS->LocateProtocol ( &gDxeMePolicyGuid, NULL, (VOID **)&MEPlatformPolicy);
if (EFI_ERROR(Status)) {
DEBUG ((DEBUG_ERROR | DEBUG_INFO, "LocateProtocol gDxeMePolicyGuid, Status : %r\n", Status ));
}
Status = GetConfigBlock ((VOID *) MEPlatformPolicy, &gMeDxeConfigGuid, (VOID *) &MeDxeConfig);
ASSERT_EFI_ERROR (Status);
StartOpCodeHandle = HiiAllocateOpCodeHandle ();
ASSERT (StartOpCodeHandle != NULL);
OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
ASSERT ( OptionsOpCodeHandle != NULL);
StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
StartLabel->Number = ME_UNCONFIG_ON_RTC_LABEL;
ScuCreateGrayoutIfOpCode(StartOpCodeHandle);
if (MeIsAfterEndOfPost() | (!MbpHob->MeBiosPayload.UnconfigOnRtcClearState.Available)) {
DEBUG ((DEBUG_ERROR | DEBUG_INFO, "ScuCreateTrueOpCode\n"));
ScuCreateTrueOpCode(StartOpCodeHandle);
} else {
DEBUG ((DEBUG_ERROR | DEBUG_INFO, "ScuCreateFalseOpCode\n"));
ScuCreateFalseOpCode(StartOpCodeHandle);
}
VarOffset = (UINT16)((UINTN)(&SetupVariable->MeUnconfigOnRtc) - (UINTN)SetupVariable);
OptionCount = 2; // Enable and disable.
Flags = EFI_IFR_TYPE_NUM_SIZE_8 + EFI_IFR_OPTION_DEFAULT;
HiiCreateOneOfOptionOpCode (
OptionsOpCodeHandle,
STRING_TOKEN(STR_ENABLED_TEXT),
Flags,
EFI_IFR_NUMERIC_SIZE_1,
0
);
Flags = EFI_IFR_TYPE_NUM_SIZE_8;
HiiCreateOneOfOptionOpCode (
OptionsOpCodeHandle,
STRING_TOKEN(STR_DISABLED_TEXT),
Flags,
EFI_IFR_NUMERIC_SIZE_1,
1
);
HiiCreateOneOfOpCode (
StartOpCodeHandle,
KEY_ME_UNCONFIG_ON_RTC,
CONFIGURATION_VARSTORE_ID,
VarOffset,
STRING_TOKEN (STR_ME_UNCONF_RTC_STATE_PROMPT),
STRING_TOKEN (STR_ME_UNCONF_RTC_STATE_PROMPT_HELP),
EFI_IFR_FLAG_CALLBACK,
EFI_IFR_NUMERIC_SIZE_1,
OptionsOpCodeHandle,
NULL
);
//
// Form 0x27: Chipset Configuration
//
HiiUpdateForm (HiiHandle, NULL, 0x27, StartOpCodeHandle, NULL);
HiiFreeOpCodeHandle (StartOpCodeHandle);
HiiFreeOpCodeHandle (OptionsOpCodeHandle);
DEBUG ((DEBUG_ERROR | DEBUG_INFO, "MeUnconfigOnRtcAvailable = %x \n", MbpHob->MeBiosPayload.UnconfigOnRtcClearState.Available));
DEBUG ((DEBUG_ERROR | DEBUG_INFO, "MeUnconfigOnRtc = %x \n", SetupVariable->MeUnconfigOnRtc));
DEBUG ((DEBUG_ERROR | DEBUG_INFO, "InitMeUnconfigOnRtc End !!\n"));
return EFI_SUCCESS;
}
EFI_STATUS
SyncIccSetupDataWithFormBrowser (
IN EFI_BROWSER_ACTION Action
)
{
EFI_STATUS Status;
ICC_SETUP_DATA IccSetup = {0};
UINTN Size = sizeof (ICC_SETUP_DATA);
switch (Action) {
case EFI_BROWSER_ACTION_FORM_OPEN:
Status = gRT->GetVariable (
ICC_SETUP_DATA_C_NAME_CURRENT,
&gIccGuid,
NULL,
&Size,
&IccSetup
);
Status = SetupVariableConfig (
&gIccGuid,
ICC_SETUP_DATA_C_NAME,
sizeof (ICC_SETUP_DATA),
(UINT8 *) &IccSetup,
FALSE
);
break;
case EFI_BROWSER_ACTION_FORM_CLOSE:
Status = SetupVariableConfig (
&gIccGuid,
ICC_SETUP_DATA_C_NAME,
sizeof (ICC_SETUP_DATA),
(UINT8 *) &IccSetup,
TRUE
);
Status = gRT->SetVariable (
ICC_SETUP_DATA_C_NAME_CURRENT,
&gIccGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS,
sizeof (ICC_SETUP_DATA),
&IccSetup
);
break;
case EFI_BROWSER_ACTION_CHANGING:
Status = EFI_SUCCESS;
break;
case EFI_BROWSER_ACTION_DEFAULT_MANUFACTURING:
Status = gRT->GetVariable (
ICC_SETUP_DATA_C_NAME,
&gIccGuid,
NULL,
&Size,
&IccSetup
);
if (Size == sizeof (ICC_SETUP_DATA)) {
Status = gRT->SetVariable (
ICC_SETUP_DATA_C_NAME_CURRENT,
&gIccGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS,
sizeof(ICC_SETUP_DATA),
&IccSetup
);
}
Status = SetupVariableConfig (
&gIccGuid,
ICC_SETUP_DATA_C_NAME,
sizeof (ICC_SETUP_DATA),
(UINT8 *) &IccSetup,
FALSE
);
break;
default:
Status = EFI_SUCCESS;
break;
}
return Status;
}