]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/Bds/Bds.c
ArmPlatformPkg/BdsLib: Let the user press enter when inputting booleans
[mirror_edk2.git] / ArmPlatformPkg / Bds / Bds.c
index 1adade402d273f7b0e02fdc8422b946c8c0cde02..2801fac531b478d9ac895f87baab47e7a017de80 100644 (file)
@@ -1,14 +1,14 @@
 /** @file\r
 *\r
-*  Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
-*  \r
-*  This program and the accompanying materials                          \r
-*  are licensed and made available under the terms and conditions of the BSD License         \r
-*  which accompanies this distribution.  The full text of the license may be found at        \r
-*  http://opensource.org/licenses/bsd-license.php                                            \r
+*  Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
 *\r
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+*  This program and the accompanying materials\r
+*  are licensed and made available under the terms and conditions of the BSD License\r
+*  which accompanies this distribution.  The full text of the license may be found at\r
+*  http://opensource.org/licenses/bsd-license.php\r
+*\r
+*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 *\r
 **/\r
 \r
@@ -39,7 +39,7 @@ GetConsoleDevicePathFromVariable (
   CHAR16*                   NextDevicePathStr;\r
   EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL  *EfiDevicePathFromTextProtocol;\r
 \r
-  Status = GetEnvironmentVariable (ConsoleVarName, NULL, NULL, (VOID**)&DevicePathInstances);\r
+  Status = GetGlobalEnvironmentVariable (ConsoleVarName, NULL, NULL, (VOID**)&DevicePathInstances);\r
   if (EFI_ERROR(Status)) {\r
     // In case no default console device path has been defined we assume a driver handles the console (eg: SimpleTextInOutSerial)\r
     if ((DefaultConsolePaths == NULL) || (DefaultConsolePaths[0] == L'\0')) {\r
@@ -124,7 +124,7 @@ InitializeConsolePipe (
         EFI_DEVICE_PATH_TO_TEXT_PROTOCOL* DevicePathToTextProtocol;\r
         CHAR16* DevicePathTxt;\r
         EFI_STATUS Status;\r
-       \r
+\r
         Status = gBS->LocateProtocol(&gEfiDevicePathToTextProtocolGuid, NULL, (VOID **)&DevicePathToTextProtocol);\r
         if (!EFI_ERROR(Status)) {\r
           DevicePathTxt = DevicePathToTextProtocol->ConvertDevicePathToText (DevicePath, TRUE, TRUE);\r
@@ -307,13 +307,13 @@ StartDefaultBootOnTimeout (
   UINTN               BootOrderSize;\r
   UINTN               Index;\r
   CHAR16              BootVariableName[9];\r
-  EFI_STATUS           Status;\r
-  EFI_INPUT_KEY   Key;\r
+  EFI_STATUS          Status;\r
+  EFI_INPUT_KEY       Key;\r
 \r
   Size = sizeof(UINT16);\r
   Timeout = (UINT16)PcdGet16 (PcdPlatformBootTimeOut);\r
   TimeoutPtr = &Timeout;\r
-  GetEnvironmentVariable (L"Timeout", &Timeout, &Size, (VOID**)&TimeoutPtr);\r
+  GetGlobalEnvironmentVariable (L"Timeout", &Timeout, &Size, (VOID**)&TimeoutPtr);\r
 \r
   if (Timeout != 0xFFFF) {\r
     if (Timeout > 0) {\r
@@ -344,7 +344,7 @@ StartDefaultBootOnTimeout (
     // In case of Timeout we start the default boot selection\r
     if (Timeout == 0) {\r
       // Get the Boot Option Order from the environment variable (a default value should have been created)\r
-      GetEnvironmentVariable (L"BootOrder", NULL, &BootOrderSize, (VOID**)&BootOrder);\r
+      GetGlobalEnvironmentVariable (L"BootOrder", NULL, &BootOrderSize, (VOID**)&BootOrder);\r
 \r
       for (Index = 0; Index < BootOrderSize / sizeof (UINT16); Index++) {\r
         UnicodeSPrint (BootVariableName, 9 * sizeof(CHAR16), L"Boot%04X", BootOrder[Index]);\r
@@ -362,19 +362,19 @@ StartDefaultBootOnTimeout (
 }\r
 \r
 /**\r
-  This function uses policy data from the platform to determine what operating \r
-  system or system utility should be loaded and invoked.  This function call \r
-  also optionally make the use of user input to determine the operating system \r
-  or system utility to be loaded and invoked.  When the DXE Core has dispatched \r
-  all the drivers on the dispatch queue, this function is called.  This \r
-  function will attempt to connect the boot devices required to load and invoke \r
-  the selected operating system or system utility.  During this process, \r
-  additional firmware volumes may be discovered that may contain addition DXE \r
-  drivers that can be dispatched by the DXE Core.   If a boot device cannot be \r
-  fully connected, this function calls the DXE Service Dispatch() to allow the \r
-  DXE drivers from any newly discovered firmware volumes to be dispatched.  \r
-  Then the boot device connection can be attempted again.  If the same boot \r
-  device connection operation fails twice in a row, then that boot device has \r
+  This function uses policy data from the platform to determine what operating\r
+  system or system utility should be loaded and invoked.  This function call\r
+  also optionally make the use of user input to determine the operating system\r
+  or system utility to be loaded and invoked.  When the DXE Core has dispatched\r
+  all the drivers on the dispatch queue, this function is called.  This\r
+  function will attempt to connect the boot devices required to load and invoke\r
+  the selected operating system or system utility.  During this process,\r
+  additional firmware volumes may be discovered that may contain addition DXE\r
+  drivers that can be dispatched by the DXE Core.   If a boot device cannot be\r
+  fully connected, this function calls the DXE Service Dispatch() to allow the\r
+  DXE drivers from any newly discovered firmware volumes to be dispatched.\r
+  Then the boot device connection can be attempted again.  If the same boot\r
+  device connection operation fails twice in a row, then that boot device has\r
   failed, and should be skipped.  This function should never return.\r
 \r
   @param  This             The EFI_BDS_ARCH_PROTOCOL instance.\r
@@ -406,9 +406,16 @@ BdsEntry (
     UnicodeSPrint (gST->FirmwareVendor, Size, L"%a EFI %a %a", PcdGetPtr(PcdFirmwareVendor), __DATE__, __TIME__);\r
   }\r
 \r
+  //\r
+  // Fixup Table CRC after we updated Firmware Vendor\r
+  //\r
+  gST->Hdr.CRC32 = 0;\r
+  Status = gBS->CalculateCrc32 ((VOID*)gST, gST->Hdr.HeaderSize, &gST->Hdr.CRC32);\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
   // If BootNext environment variable is defined then we just load it !\r
   BootNextSize = sizeof(UINT16);\r
-  Status = GetEnvironmentVariable (L"BootNext", NULL, &BootNextSize, (VOID**)&BootNext);\r
+  Status = GetGlobalEnvironmentVariable (L"BootNext", NULL, &BootNextSize, (VOID**)&BootNext);\r
   if (!EFI_ERROR(Status)) {\r
     ASSERT(BootNextSize == sizeof(UINT16));\r
 \r
@@ -448,6 +455,13 @@ BdsEntry (
   // Now we need to setup the EFI System Table with information about the console devices.\r
   InitializeConsole ();\r
 \r
+  //\r
+  // Update the CRC32 in the EFI System Table header\r
+  //\r
+  gST->Hdr.CRC32 = 0;\r
+  Status = gBS->CalculateCrc32 ((VOID*)gST, gST->Hdr.HeaderSize, &gST->Hdr.CRC32);\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
   // Timer before initiating the default boot selection\r
   StartDefaultBootOnTimeout ();\r
 \r