diff options
author | Ruiyu Ni <ruiyu.ni@intel.com> | 2015-11-17 10:14:13 +0000 |
---|---|---|
committer | niruiyu <niruiyu@Edk2> | 2015-11-17 10:14:13 +0000 |
commit | d175f4e612153cda0a0d51a030eae6ebbd517802 (patch) | |
tree | e044182268d227d4e5d88aae0d795501de5e8b43 /MdeModulePkg | |
parent | cc4812f63e3f3d906ce0998eb429f891c2748b56 (diff) | |
download | edk2-platforms-d175f4e612153cda0a0d51a030eae6ebbd517802.tar.xz |
MdeModulePkg: Add PlatformRecovery#### pointing to default file path
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Sunny Wang <sunnywang@hpe.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18862 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg')
-rw-r--r-- | MdeModulePkg/Universal/BdsDxe/BdsEntry.c | 38 |
1 files 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;
@@ -943,6 +944,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
//
REPORT_STATUS_CODE (
@@ -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);
}
}
}
|