/** @file\r
*\r
-* Copyright (c) 2011, ARM Limited. All rights reserved.\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
ASSERT_EFI_ERROR (Status);\r
Status = GetConsoleDevicePathFromVariable (L"ConIn", (CHAR16*)PcdGetPtr(PcdDefaultConInPaths), &ConInDevicePaths);\r
ASSERT_EFI_ERROR (Status);\r
- Status = GetConsoleDevicePathFromVariable (L"ConErr", (CHAR16*)PcdGetPtr(PcdDefaultConOutPaths), &ConErrDevicePaths);\r
+ Status = GetConsoleDevicePathFromVariable (L"ErrOut", (CHAR16*)PcdGetPtr(PcdDefaultConOutPaths), &ConErrDevicePaths);\r
ASSERT_EFI_ERROR (Status);\r
\r
// Initialize the Consoles\r
gST->StdErr = gST->ConOut;\r
}\r
\r
+ // Free Memory allocated for reading the UEFI Variables\r
+ if (ConOutDevicePaths) {\r
+ FreePool (ConOutDevicePaths);\r
+ }\r
+ if (ConInDevicePaths) {\r
+ FreePool (ConInDevicePaths);\r
+ }\r
+ if (ConErrDevicePaths) {\r
+ FreePool (ConErrDevicePaths);\r
+ }\r
+\r
return EFI_SUCCESS;\r
}\r
\r
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
}\r
// In case of success, we should not return from this call.\r
}\r
+ FreePool (BootOrder);\r
}\r
}\r
return EFI_SUCCESS;\r
{\r
UINTN Size;\r
EFI_STATUS Status;\r
+ UINT16 *BootNext;\r
+ UINTN BootNextSize;\r
+ CHAR16 BootVariableName[9];\r
\r
PERF_END (NULL, "DXE", NULL, 0);\r
\r
}\r
\r
// If BootNext environment variable is defined then we just load it !\r
- Status = BdsStartBootOption (L"BootNext");\r
- if (Status != EFI_NOT_FOUND) {\r
- // BootNext has not been succeeded launched\r
- if (EFI_ERROR(Status)) {\r
- Print(L"Fail to start BootNext.\n");\r
+ BootNextSize = sizeof(UINT16);\r
+ Status = GetEnvironmentVariable (L"BootNext", NULL, &BootNextSize, (VOID**)&BootNext);\r
+ if (!EFI_ERROR(Status)) {\r
+ ASSERT(BootNextSize == sizeof(UINT16));\r
+\r
+ // Generate the requested Boot Entry variable name\r
+ UnicodeSPrint (BootVariableName, 9 * sizeof(CHAR16), L"Boot%04X", *BootNext);\r
+\r
+ // Set BootCurrent variable\r
+ gRT->SetVariable (L"BootCurrent", &gEfiGlobalVariableGuid,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
+ BootNextSize, BootNext);\r
+\r
+ FreePool (BootNext);\r
+\r
+ // Start the requested Boot Entry\r
+ Status = BdsStartBootOption (BootVariableName);\r
+ if (Status != EFI_NOT_FOUND) {\r
+ // BootNext has not been succeeded launched\r
+ if (EFI_ERROR(Status)) {\r
+ Print(L"Fail to start BootNext.\n");\r
+ }\r
+\r
+ // Delete the BootNext environment variable\r
+ gRT->SetVariable (L"BootNext", &gEfiGlobalVariableGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
+ 0, NULL);\r
}\r
\r
- // Delete the BootNext environment variable\r
- gRT->SetVariable (L"BootNext", &gEfiGlobalVariableGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
+ // Clear BootCurrent variable\r
+ gRT->SetVariable (L"BootCurrent", &gEfiGlobalVariableGuid,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
0, NULL);\r
}\r
\r