]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Sync the branch changes to trunk.
authorTim He <tim.he@intel.com>
Thu, 11 Jun 2015 02:50:20 +0000 (02:50 +0000)
committertimhe <timhe@Edk2>
Thu, 11 Jun 2015 02:50:20 +0000 (02:50 +0000)
Update the FCE tool to remove “runtime access” .

and recovery "Setup" variable in case of “Setup”

variable size is incorrect somehow.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Tim He <tim.he@intel.com>
Reviewed-by: David Wei <david.wei@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17620 6f19259b-4bc3-4df7-8a09-765794883524

18 files changed:
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
Vlv2TbltDevicePkg/FCE.exe
Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c
Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c
Vlv2TbltDevicePkg/PlatformDxe/ExI.c
Vlv2TbltDevicePkg/PlatformDxe/Platform.c
Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.c
Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.c
Vlv2TbltDevicePkg/PlatformInitPei/BootMode.c
Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c
Vlv2TbltDevicePkg/PlatformPei/Platform.c
Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.c
Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
Vlv2TbltDevicePkg/PlatformSmm/Platform.c
Vlv2TbltDevicePkg/bld_vlv.bat

index 824f2377772bd61db1b2ccb9d7bed211c07a0830..c39c36daad797d3e298f3206b4a2e662d6867759 100644 (file)
@@ -697,7 +697,18 @@ OnReadyToBoot (
                   &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
@@ -817,7 +828,18 @@ AcpiPlatformEntryPoint (
                   &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
@@ -842,6 +864,19 @@ AcpiPlatformEntryPoint (
                   &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
index 2b787be830318b2c56b5b35eadf8bbe8dd266d31..18300115d08320c40843a8c6ff69e37db83d6a5e 100644 (file)
Binary files a/Vlv2TbltDevicePkg/FCE.exe and b/Vlv2TbltDevicePkg/FCE.exe differ
index 1fc731205bad28b507d75a8a8762453932f849bc..86cd67cea82fac3c048341cc48586f1fd767ab49 100644 (file)
@@ -346,7 +346,18 @@ ConfigurePlatformClocks (
                                    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
index ad16267ecaa6f58102208c378463b5a27ec066cb..195d7341895b159fc3f1a7874ba64cb92ac5ecc6 100644 (file)
@@ -322,7 +322,18 @@ GetGopDevicePath (
                   &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
@@ -624,7 +635,18 @@ PlatformBdsForceActiveVga (
                   &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
@@ -680,7 +702,18 @@ UpdateConsoleResolution(
                   &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
@@ -1576,6 +1609,11 @@ PlatformBdsPolicyBehavior (
   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
@@ -1584,9 +1622,19 @@ PlatformBdsPolicyBehavior (
                   &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
index 1b59eee74f2754da39bd1916e487fad6f9643571..08f5df2a25082845b7bf9f7cabe7c4e9bc0af627 100644 (file)
@@ -343,7 +343,18 @@ PciPlatformDriverEntry (
                   &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
index 2dad89f606a1c59f3a1aabf0ac409196c53b25e3..603b44aa82f36296217c41859dd38b15cbe985cd 100644 (file)
@@ -73,7 +73,18 @@ InitExI (
                   &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
index dba84fb6596785265c5c3494685689989f7fcc10..a1cd072c8f304a1a12dfd3370d8c63d9bc6841a2 100644 (file)
@@ -49,6 +49,8 @@ Abstract:
 #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
@@ -200,6 +202,82 @@ InitRC6Policy(
   );\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
@@ -692,6 +770,10 @@ InitializePlatform (
   //\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
@@ -701,8 +783,26 @@ InitializePlatform (
                   &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
@@ -1394,12 +1494,7 @@ InitMfgAndConfigModeStateVar()
 {\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
@@ -1416,16 +1511,8 @@ InitMfgAndConfigModeStateVar()
         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
@@ -1588,6 +1675,19 @@ UpdateDVMTSetup(
                   &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
index 27216b7879081a92f422ceb76d8565158115db42..63ccf03029fa0c402a30a0093e211a1906090401 100644 (file)
   gEfiCpuIo2ProtocolGuid\r
   gIgdOpRegionProtocolGuid\r
   gExitPmAuthProtocolGuid\r
+  gEdkiiVariableLockProtocolGuid\r
 \r
 [Pcd.common]\r
   gPlatformModuleTokenSpaceGuid.PcdPBTNDisableInterval\r
index 59c73c62ba8f2f5191ebfdaae93accc99e061a7b..0abe1b27d942e9396766ee9ffefcbba172d27f0c 100644 (file)
@@ -181,7 +181,19 @@ PlatformGOPPolicyEntryPoint (
                   &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
index 6bf276246e5077a7fafe0afe84230898ba3b9891..8bdcaee7c9730e71526881b9d11284b453b64923 100644 (file)
@@ -62,6 +62,19 @@ PlatformInfoInit (
                   &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
@@ -113,7 +126,7 @@ PlatformInfoInit (
         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
@@ -146,7 +159,7 @@ PlatformInfoInit (
       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
index 174d8e974ee05dcbdca899e8e55ae4c4f922b726..3b94e3b54f08a80a0594b15fe081211abb91d80d 100644 (file)
@@ -202,6 +202,19 @@ UpdateBootMode (
                            &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
@@ -386,16 +399,16 @@ SetPlatformBootMode (
     // 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
index 1a12c53e9601e92351b53a719d0eb75aa9ba14c1..0b0acf5d2fe9aad3b876b74a27cdea124f23e77c 100644 (file)
@@ -196,7 +196,19 @@ GetSetupVariable (
                        &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
index 899b4a97917b9340ae5d7bb118f9efab1b83baa0..23be887ca4cc438e32c2b7cc13f6ab77d83b681c 100644 (file)
@@ -716,7 +716,20 @@ PeiInitPlatform (
                        &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
index 1490e2c0307742914aa31d3ce703b0eab56e835c..de7830ffe878c957c0bf1df62613942ada2c6124 100644 (file)
@@ -17,6 +17,8 @@ Module Name:
 \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
@@ -306,7 +308,7 @@ SystemConfigRouteConfig (
   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
@@ -358,6 +360,7 @@ SystemConfigCallback (
   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
@@ -474,7 +477,7 @@ SystemConfigCallback (
           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
@@ -525,7 +528,7 @@ SystemConfigCallback (
           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
@@ -596,33 +599,31 @@ SystemConfigCallback (
       // 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
index 9cd774b427b0d35d3ca4ff6abab7aa7d40d9f697..50c91908597929ffc9f5c0477ece3efb5db47ae0 100644 (file)
   gEfiHiiConfigRoutingProtocolGuid              ## CONSUMED\r
   gEfiHiiConfigAccessProtocolGuid               ## PRODUCED\r
   gEfiDevicePathToTextProtocolGuid              ## CONSUMED\r
+  gEdkiiFormBrowserEx2ProtocolGuid\r
 \r
   gEfiDataHubProtocolGuid\r
   gEfiLegacyBiosProtocolGuid\r
index 99684e72d7c372dc6e876ebebfda3f9363bf85fa..3c6f8f447cdb5207e532b3d05904e4b6369cb4b0 100644 (file)
@@ -1750,7 +1750,18 @@ SetupInfo (void)
                   &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
index d8bfeb4371d6c275bd4fb51bf8422304a124b140..3a5b20a98463b0e06c695717e8ad91e15c7d3ed3 100644 (file)
@@ -170,6 +170,18 @@ InitializePlatformSmm (
                           &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
@@ -848,7 +860,20 @@ EnableS5WakeOnRtc()
                            &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
index fc97f425342598e90e0f79dc80a0829b98ff7262..547b2b110accafb6076acf524ad00ca77662effb 100644 (file)
@@ -217,10 +217,10 @@ echo Running fce...
 \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