From d175f4e612153cda0a0d51a030eae6ebbd517802 Mon Sep 17 00:00:00 2001 From: Ruiyu Ni Date: Tue, 17 Nov 2015 10:14:13 +0000 Subject: MdeModulePkg: Add PlatformRecovery#### pointing to default file path Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni Reviewed-by: Sunny Wang git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18862 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Universal/BdsDxe/BdsEntry.c | 38 +++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c index 4154d41372..b632ada5f6 100644 --- a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c +++ b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c @@ -823,11 +823,12 @@ BdsEntry ( UINT16 BootTimeOut; EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; UINTN Index; - EFI_BOOT_MANAGER_LOAD_OPTION BootOption; + EFI_BOOT_MANAGER_LOAD_OPTION LoadOption; UINT16 *BootNext; CHAR16 BootNextVariableName[sizeof ("Boot####")]; EFI_BOOT_MANAGER_LOAD_OPTION BootManagerMenu; BOOLEAN BootFwUi; + EFI_DEVICE_PATH_PROTOCOL *FilePath; HotkeyTriggered = NULL; Status = EFI_SUCCESS; @@ -942,6 +943,27 @@ BdsEntry ( // InitializeLanguage (TRUE); + // + // System firmware must include a PlatformRecovery#### variable specifying + // a short-form File Path Media Device Path containing the platform default + // file path for removable media + // + FilePath = FileDevicePath (NULL, EFI_REMOVABLE_MEDIA_FILE_NAME); + Status = EfiBootManagerInitializeLoadOption ( + &LoadOption, + 0, + LoadOptionTypePlatformRecovery, + LOAD_OPTION_ACTIVE, + L"Default PlatformRecovery", + FilePath, + NULL, + 0 + ); + ASSERT_EFI_ERROR (Status); + EfiBootManagerLoadOptionToVariable (&LoadOption); + EfiBootManagerFreeLoadOption (&LoadOption); + FreePool (FilePath); + // // Report Status Code to indicate connecting drivers will happen // @@ -1120,17 +1142,17 @@ BdsEntry ( // if (BootNext != NULL) { UnicodeSPrint (BootNextVariableName, sizeof (BootNextVariableName), L"Boot%04x", *BootNext); - Status = EfiBootManagerVariableToLoadOption (BootNextVariableName, &BootOption); + Status = EfiBootManagerVariableToLoadOption (BootNextVariableName, &LoadOption); if (!EFI_ERROR (Status)) { - EfiBootManagerBoot (&BootOption); - EfiBootManagerFreeLoadOption (&BootOption); - if (BootOption.Status == EFI_SUCCESS) { + EfiBootManagerBoot (&LoadOption); + EfiBootManagerFreeLoadOption (&LoadOption); + if (LoadOption.Status == EFI_SUCCESS) { // // Boot to Boot Manager Menu upon EFI_SUCCESS // - EfiBootManagerGetBootManagerMenu (&BootOption); - EfiBootManagerBoot (&BootOption); - EfiBootManagerFreeLoadOption (&BootOption); + EfiBootManagerGetBootManagerMenu (&LoadOption); + EfiBootManagerBoot (&LoadOption); + EfiBootManagerFreeLoadOption (&LoadOption); } } } -- cgit v1.2.3