&VariableSize,\r
&SetupVarBuffer\r
);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VariableSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &mSystemConfigurationGuid,\r
+ NULL,\r
+ &VariableSize,\r
+ &SetupVarBuffer\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
\r
//\r
// Find the AcpiSupport protocol.\r
&VarSize,\r
&mSystemConfiguration\r
);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &mSystemConfigurationGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &mSystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
\r
//\r
// Find the AcpiSupport protocol.\r
&SysCfgSize,\r
&mSystemConfig\r
);\r
+ if (EFI_ERROR (Status) || SysCfgSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ SysCfgSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &SysCfgSize,\r
+ &mSystemConfig\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+\r
\r
Status = EFI_SUCCESS;\r
Instance = 0;\r
NULL,\r
&VariableSize,\r
&SystemConfiguration);\r
-\r
+ if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VariableSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = Variable->GetVariable(Variable,\r
+ L"SetupRecovery",\r
+ &gEfiSetupVariableGuid,\r
+ NULL,\r
+ &VariableSize,\r
+ &SystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
if(!EFI_ERROR (Status)){\r
EnableSpreadSpectrum = SystemConfiguration.EnableClockSpreadSpec;\r
}\r
&VarSize,\r
&mSystemConfiguration\r
);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &mSystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
\r
if(mSystemConfiguration.BootDisplayDevice != 0x0)\r
{\r
&VarSize,\r
&mSystemConfiguration\r
);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &mSystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
\r
\r
if ((PlugInPciVgaDevicePath == NULL && OnboardPciVgaDevicePath != NULL) ) {\r
&VarSize,\r
&SystemConfiguration\r
);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &SystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
\r
switch (SystemConfiguration.IgdFlatPanel) {\r
\r
UINTN BootOrderSize;\r
\r
Timeout = PcdGet16 (PcdPlatformBootTimeOut);\r
+ if (Timeout > 10 ) {\r
+ //we think the Timeout variable is corrupted\r
+ Timeout = 10;\r
+ }\r
+ \r
VarSize = sizeof(SYSTEM_CONFIGURATION);\r
Status = gRT->GetVariable(\r
NORMAL_SETUP_NAME,\r
&VarSize,\r
&SystemConfiguration\r
);\r
- if (EFI_ERROR (Status)) {\r
- return;\r
- }\r
+\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &SystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
\r
//\r
// Load the driver option as the driver option list\r
&VarSize,\r
&mSystemConfiguration\r
);\r
- ASSERT_EFI_ERROR(Status);\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &mSystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
\r
//\r
// Install on a new handle\r
&SystemConfiguration\r
);\r
\r
- ASSERT_EFI_ERROR(Status);\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &SystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
\r
if (SystemConfiguration.ExISupport == 1) {\r
MmioOr32 ((UINTN) (GetPmcBase() + R_PCH_PMC_MTPMC1), (UINT32) BIT0+BIT1+BIT2);\r
#include <Protocol/GlobalNvsArea.h>\r
#include <Protocol/IgdOpRegion.h>\r
#include <Library/PcdLib.h>\r
+#include <Protocol/VariableLock.h>\r
+\r
\r
//\r
// VLV2 GPIO GROUP OFFSET\r
);\r
\r
\r
+EFI_STATUS\r
+EFIAPI\r
+SaveSetupRecoveryVar(\r
+ VOID\r
+ )\r
+{\r
+ EFI_STATUS Status = EFI_SUCCESS;\r
+ UINTN SizeOfNvStore = 0;\r
+ UINTN SizeOfSetupVar = 0;\r
+ SYSTEM_CONFIGURATION *SetupData = NULL;\r
+ SYSTEM_CONFIGURATION *RecoveryNvData = NULL;\r
+ EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock = NULL;\r
+\r
+\r
+ DEBUG ((EFI_D_INFO, "SaveSetupRecoveryVar() Entry \n"));\r
+ SizeOfNvStore = sizeof(SYSTEM_CONFIGURATION);\r
+ RecoveryNvData = AllocateZeroPool (sizeof(SYSTEM_CONFIGURATION));\r
+ if (NULL == RecoveryNvData) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto Exit; \r
+ }\r
+ \r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &SizeOfNvStore,\r
+ RecoveryNvData\r
+ );\r
+ \r
+ if (EFI_ERROR (Status)) {\r
+ // Don't find the "SetupRecovery" variable.\r
+ // have to copy "Setup" variable to "SetupRecovery" variable.\r
+ SetupData = AllocateZeroPool (sizeof(SYSTEM_CONFIGURATION));\r
+ if (NULL == SetupData) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto Exit; \r
+ }\r
+ SizeOfSetupVar = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ NORMAL_SETUP_NAME,\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &SizeOfSetupVar,\r
+ SetupData\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ \r
+ Status = gRT->SetVariable (\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof(SYSTEM_CONFIGURATION),\r
+ SetupData\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Status = gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL, (VOID **) &VariableLock);\r
+ if (!EFI_ERROR (Status)) {\r
+ Status = VariableLock->RequestToLock (VariableLock, L"SetupRecovery", &gEfiNormalSetupGuid);\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ \r
+ }\r
+\r
+Exit:\r
+ if (RecoveryNvData)\r
+ FreePool (RecoveryNvData);\r
+ if (SetupData)\r
+ FreePool (SetupData);\r
+ \r
+ return Status;\r
+ \r
+}\r
+\r
+\r
VOID\r
TristateLpcGpioConfig (\r
IN UINT32 Gpio_Mmio_Offset,\r
//\r
InitializeObservableProtocol();\r
\r
+ Status = SaveSetupRecoveryVar();\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((EFI_D_ERROR, "InitializePlatform() Save SetupRecovery variable failed \n"));\r
+ }\r
\r
VarSize = sizeof(SYSTEM_CONFIGURATION);\r
Status = gRT->GetVariable(\r
&VarSize,\r
&mSystemConfiguration\r
);\r
-\r
-\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &mSystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ Status = gRT->SetVariable (\r
+ NORMAL_SETUP_NAME,\r
+ &gEfiNormalSetupGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof(SYSTEM_CONFIGURATION),\r
+ &mSystemConfiguration\r
+ ); \r
+ }\r
+ \r
Status = EfiCreateEventReadyToBootEx (\r
TPL_CALLBACK,\r
ReadyToBootFunction,\r
{\r
EFI_PLATFORM_SETUP_ID *BootModeBuffer;\r
VOID *HobList;\r
- UINT16 State;\r
\r
- //\r
- // Variable initialization\r
- //\r
- State = FALSE;\r
\r
HobList = GetFirstGuidHob(&gEfiPlatformBootModeGuid);\r
if (HobList != NULL) {\r
mMfgMode = TRUE;\r
}\r
\r
- //\r
- // Check if in safe mode\r
- //\r
- if ( !CompareMem (\r
- &BootModeBuffer->SetupName,\r
- SAFE_SETUP_NAME,\r
- StrSize (SAFE_SETUP_NAME)\r
- ) ) {\r
- State = TRUE;\r
- }\r
+\r
+\r
}\r
\r
}\r
&SystemConfiguration\r
);\r
\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &SystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+\r
if((SystemConfiguration.GraphicsDriverMemorySize < 4) && !EFI_ERROR(Status) ) {\r
switch (SystemConfiguration.GraphicsDriverMemorySize){\r
case 1:\r
gEfiCpuIo2ProtocolGuid\r
gIgdOpRegionProtocolGuid\r
gExitPmAuthProtocolGuid\r
+ gEdkiiVariableLockProtocolGuid\r
\r
[Pcd.common]\r
gPlatformModuleTokenSpaceGuid.PcdPBTNDisableInterval\r
&VarSize,\r
&SystemConfiguration\r
);\r
- ASSERT_EFI_ERROR(Status);\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &SystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ \r
if (SystemConfiguration.GOPEnable == 1)\r
{\r
Status = gBS->InstallMultipleProtocolInterfaces (\r
&VarSize,\r
&SystemConfiguration\r
);\r
+ \r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &SystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
\r
VarSize = sizeof(Selection);\r
Status = gRT->GetVariable(\r
Status = gRT->SetVariable (\r
NORMAL_SETUP_NAME,\r
&gEfiNormalSetupGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
sizeof(SYSTEM_CONFIGURATION),\r
&SystemConfiguration\r
);\r
Status = gRT->SetVariable(\r
L"PlatformInfo",\r
&gEfiVlv2VariableGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
sizeof(EFI_PLATFORM_INFO_HOB),\r
PlatformInfoHobPtr\r
);\r
&VarSize,\r
&SystemConfiguration\r
);\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = Variable->GetVariable(\r
+ Variable,\r
+ L"SetupRecovery",\r
+ &gEfiSetupVariableGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &SystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
\r
if (SystemConfiguration.FastBoot == 1) {\r
BootMode = BOOT_WITH_MINIMAL_CONFIGURATION;\r
// Recovery mode\r
//\r
CopyMem (&PlatformSetupId.SetupName,\r
- SAFE_SETUP_NAME,\r
- StrSize (SAFE_SETUP_NAME));\r
+ &NORMAL_SETUP_NAME,\r
+ StrSize (NORMAL_SETUP_NAME)); \r
PlatformSetupId.PlatformBootMode = PLATFORM_RECOVERY_MODE;\r
} else if (CheckIfSafeMode(PeiServices, PlatformInfoHob)) {\r
//\r
// Safe mode also called config mode or maintenace mode.\r
//\r
CopyMem (&PlatformSetupId.SetupName,\r
- SAFE_SETUP_NAME,\r
- StrSize (SAFE_SETUP_NAME));\r
+ &NORMAL_SETUP_NAME,\r
+ StrSize (NORMAL_SETUP_NAME));\r
PlatformSetupId.PlatformBootMode = PLATFORM_SAFE_MODE;\r
\r
} else if(0) { // else if (CheckIfManufacturingMode(PeiServices)) {\r
&VariableSize,\r
SystemConfiguration\r
);\r
- ASSERT_EFI_ERROR(Status);\r
+ if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VariableSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = Variable->GetVariable(\r
+ Variable,\r
+ L"SetupRecovery",\r
+ &gEfiSetupVariableGuid,\r
+ NULL,\r
+ &VariableSize,\r
+ SystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
return Status;\r
}\r
\r
&VariableSize,\r
&SystemConfiguration\r
);\r
- ASSERT_EFI_ERROR(Status);\r
+ if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VariableSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = Variable->GetVariable(\r
+ Variable,\r
+ L"SetupRecovery",\r
+ &gEfiSetupVariableGuid,\r
+ NULL,\r
+ &VariableSize,\r
+ &SystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ \r
if (EFI_ERROR (Status)) {\r
GGC = ((2 << 3) | 0x200);\r
PciCfg16Write(EC_BASE, 0, 2, 0, 0x50, GGC);\r
\r
#include "PlatformSetupDxe.h"\r
#include "Guid/SetupVariable.h"\r
+#include <Protocol/FormBrowserEx2.h>\r
+\r
\r
#define EFI_CALLBACK_INFO_SIGNATURE SIGNATURE_32 ('C', 'l', 'b', 'k')\r
#define EFI_CALLBACK_INFO_FROM_THIS(a) CR (a, EFI_CALLBACK_INFO, ConfigAccess, EFI_CALLBACK_INFO_SIGNATURE)\r
gRT->SetVariable(\r
mSetupName,\r
&mNormalSetupGuid,\r
- EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
sizeof(SYSTEM_CONFIGURATION),\r
&Private->FakeNvData\r
);\r
EFI_STATUS Status;\r
UINTN DataSize;\r
UINT8 OsSelection;\r
+ EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL *FormBrowserEx2;\r
\r
StringBuffer1 = AllocateZeroPool (200 * sizeof (CHAR16));\r
ASSERT (StringBuffer1 != NULL);\r
Status = gRT->SetVariable (\r
L"Setup",\r
&mNormalSetupGuid,\r
- EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
sizeof(SYSTEM_CONFIGURATION),\r
&Private->FakeNvData\r
);\r
Status = gRT->SetVariable (\r
L"Setup",\r
&mNormalSetupGuid,\r
- EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
sizeof(SYSTEM_CONFIGURATION),\r
&Private->FakeNvData\r
);\r
// If the user hits the YES Response key\r
//\r
if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {\r
- //\r
- // Load default\r
- //\r
+\r
+ Status = gBS->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid, NULL, (VOID **) &FormBrowserEx2);\r
+ FormBrowserEx2->ExecuteAction(BROWSER_ACTION_DEFAULT, EFI_HII_DEFAULT_CLASS_STANDARD);\r
+\r
FakeNvData = AllocateZeroPool (sizeof(SYSTEM_CONFIGURATION));\r
\r
if (FakeNvData == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
-\r
- SizeOfNvStore = sizeof(SYSTEM_CONFIGURATION);\r
- Status = gRT->GetVariable(\r
- L"SetupDefault",\r
- &mNormalSetupGuid,\r
- NULL,\r
- &SizeOfNvStore,\r
- FakeNvData\r
- );\r
+ \r
+ Status = HiiGetBrowserData (\r
+ &mSystemConfigGuid,\r
+ mVariableName,\r
+ sizeof (SYSTEM_CONFIGURATION),\r
+ (UINT8 *) FakeNvData\r
+ );\r
+ \r
if (!EFI_ERROR (Status)) {\r
- if(SizeOfNvStore >= sizeof(SYSTEM_CONFIGURATION)) {\r
- Status = gRT->SetVariable (\r
- L"Setup",\r
- &mNormalSetupGuid,\r
- EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof(SYSTEM_CONFIGURATION),\r
- FakeNvData\r
- );\r
- }\r
+ Status = gRT->SetVariable (\r
+ L"Setup",\r
+ &mNormalSetupGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof(SYSTEM_CONFIGURATION),\r
+ FakeNvData\r
+ );\r
}\r
\r
FreePool (FakeNvData);\r
gEfiHiiConfigRoutingProtocolGuid ## CONSUMED\r
gEfiHiiConfigAccessProtocolGuid ## PRODUCED\r
gEfiDevicePathToTextProtocolGuid ## CONSUMED\r
+ gEdkiiFormBrowserEx2ProtocolGuid\r
\r
gEfiDataHubProtocolGuid\r
gEfiLegacyBiosProtocolGuid\r
&mSystemConfiguration\r
);\r
\r
- ASSERT_EFI_ERROR (Status);\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = gRT->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiNormalSetupGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &mSystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
\r
//\r
// Update HOB variable for PCI resource information\r
&VarSize,\r
&mSystemConfiguration\r
);\r
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = SystemTable->RuntimeServices->GetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiSetupVariableGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &mSystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ } \r
if (!EFI_ERROR(Status)) {\r
mAcLossVariable = mSystemConfiguration.StateAfterG3;\r
\r
&VarSize,\r
&mSystemConfiguration\r
);\r
- if (EFI_ERROR(Status) || (!mSystemConfiguration.WakeOnRtcS5)) {\r
+ if (EFI_ERROR(Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
+ //The setup variable is corrupted\r
+ VarSize = sizeof(SYSTEM_CONFIGURATION);\r
+ Status = mSmmVariable->SmmGetVariable(\r
+ L"SetupRecovery",\r
+ &gEfiSetupVariableGuid,\r
+ NULL,\r
+ &VarSize,\r
+ &mSystemConfiguration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+\r
+ if (!mSystemConfiguration.WakeOnRtcS5) {\r
return;\r
}\r
mWakeupDay = HexToBcd((UINT8)mSystemConfiguration.RTCWakeupDate);\r
\r
pushd %PLATFORM_PACKAGE%\r
:: Extract Hii data from build and store in HiiDefaultData.txt\r
-fce read -i ..\%BUILD_PATH%\FV\Vlv.fd > ..\%BUILD_PATH%\FV\HiiDefaultData.txt 1>>EDK2.log 2>&1\r
+fce read -i ..\%BUILD_PATH%\FV\Vlv.fd > ..\%BUILD_PATH%\FV\HiiDefaultData.txt\r
\r
-:: copy the Setup variable to the SetupDefault variable and save changes to VlvXXX.fd\r
-fce mirror -i ..\%BUILD_PATH%\FV\Vlv.fd -o ..\%BUILD_PATH%\FV\Vlv%Arch%.fd Setup SetupDefault 1>>EDK2.log 2>&1\r
+:: save changes to VlvXXX.fd\r
+fce update -i ..\%BUILD_PATH%\FV\Vlv.fd -s ..\%BUILD_PATH%\FV\HiiDefaultData.txt -o ..\%BUILD_PATH%\FV\Vlv%Arch%.fd\r
\r
popd\r
\r