UefiPayloadPkg: Make Boot Manager Key configurable

Provide a build option to use [Esc] instead of [F2] for devices
such as Chromebooks that don't have F-keys.

Cc: Guo Dong <guo.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Maurice Ma <maurice.ma@intel.com>
Cc: Benjamin You <benjamin.you@intel.com>
Signed-off-by: Sean Rhodes <sean@starlabs.systems>
Reviewed-by: Ray Ni <ray.ni@Intel.com>
Reviewed-by: Guo Dong <guo.dong@intel.com>
This commit is contained in:
Sean Rhodes 2022-03-05 03:14:34 -07:00 committed by mergify[bot]
parent 79f2734e5a
commit af74efe494
4 changed files with 37 additions and 13 deletions

View File

@ -164,7 +164,7 @@ PlatformBootManagerBeforeConsole (
) )
{ {
EFI_INPUT_KEY Enter; EFI_INPUT_KEY Enter;
EFI_INPUT_KEY F2; EFI_INPUT_KEY CustomKey;
EFI_INPUT_KEY Down; EFI_INPUT_KEY Down;
EFI_BOOT_MANAGER_LOAD_OPTION BootOption; EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
EFI_STATUS Status; EFI_STATUS Status;
@ -186,13 +186,22 @@ PlatformBootManagerBeforeConsole (
Enter.UnicodeChar = CHAR_CARRIAGE_RETURN; Enter.UnicodeChar = CHAR_CARRIAGE_RETURN;
EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL); EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL);
if (FixedPcdGetBool (PcdBootManagerEscape)) {
// //
// Map F2 to Boot Manager Menu // Map Esc to Boot Manager Menu
// //
F2.ScanCode = SCAN_F2; CustomKey.ScanCode = SCAN_ESC;
F2.UnicodeChar = CHAR_NULL; CustomKey.UnicodeChar = CHAR_NULL;
} else {
//
// Map Esc to Boot Manager Menu
//
CustomKey.ScanCode = SCAN_F2;
CustomKey.UnicodeChar = CHAR_NULL;
}
EfiBootManagerGetBootManagerMenu (&BootOption); EfiBootManagerGetBootManagerMenu (&BootOption);
EfiBootManagerAddKeyOptionVariable (NULL, (UINT16)BootOption.OptionNumber, 0, &F2, NULL); EfiBootManagerAddKeyOptionVariable (NULL, (UINT16)BootOption.OptionNumber, 0, &CustomKey, NULL);
// //
// Also add Down key to Boot Manager Menu since some serial terminals don't support F2 key. // Also add Down key to Boot Manager Menu since some serial terminals don't support F2 key.
@ -251,6 +260,14 @@ PlatformBootManagerAfterConsole (
// //
PlatformRegisterFvBootOption (PcdGetPtr (PcdShellFile), L"UEFI Shell", LOAD_OPTION_ACTIVE); PlatformRegisterFvBootOption (PcdGetPtr (PcdShellFile), L"UEFI Shell", LOAD_OPTION_ACTIVE);
if (FixedPcdGetBool (PcdBootManagerEscape)) {
Print (
L"\n"
L"Esc or Down to enter Boot Manager Menu.\n"
L"ENTER to boot directly.\n"
L"\n"
);
} else {
Print ( Print (
L"\n" L"\n"
L"F2 or Down to enter Boot Manager Menu.\n" L"F2 or Down to enter Boot Manager Menu.\n"
@ -258,6 +275,7 @@ PlatformBootManagerAfterConsole (
L"\n" L"\n"
); );
} }
}
/** /**
This function is called each second during the boot manager waits the timeout. This function is called each second during the boot manager waits the timeout.

View File

@ -73,3 +73,4 @@
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits
gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile
gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape

View File

@ -86,6 +86,9 @@ gUefiPayloadPkgTokenSpaceGuid.PcdPcdDriverFile|{ 0x57, 0x72, 0xcf, 0x80, 0xab, 0
# Above 4G Memory # Above 4G Memory
gUefiPayloadPkgTokenSpaceGuid.PcdDispatchModuleAbove4GMemory|TRUE|BOOLEAN|0x00000019 gUefiPayloadPkgTokenSpaceGuid.PcdDispatchModuleAbove4GMemory|TRUE|BOOLEAN|0x00000019
# Boot Manager Key
gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape|FALSE|BOOLEAN|0x00000020
## FFS filename to find the default variable initial data file. ## FFS filename to find the default variable initial data file.
# @Prompt FFS Name of variable initial data file # @Prompt FFS Name of variable initial data file
gUefiPayloadPkgTokenSpaceGuid.PcdNvsDataFile |{ 0x1a, 0xf1, 0xb1, 0xae, 0x42, 0xcc, 0xcf, 0x4e, 0xac, 0x60, 0xdb, 0xab, 0xf6, 0xca, 0x69, 0xe6 }|VOID*|0x00000025 gUefiPayloadPkgTokenSpaceGuid.PcdNvsDataFile |{ 0x1a, 0xf1, 0xb1, 0xae, 0x42, 0xcc, 0xcf, 0x4e, 0xac, 0x60, 0xdb, 0xab, 0xf6, 0xca, 0x69, 0xe6 }|VOID*|0x00000025

View File

@ -34,6 +34,7 @@
DEFINE SECURITY_STUB_ENABLE = TRUE DEFINE SECURITY_STUB_ENABLE = TRUE
DEFINE SMM_SUPPORT = FALSE DEFINE SMM_SUPPORT = FALSE
DEFINE ABOVE_4G_MEMORY = TRUE DEFINE ABOVE_4G_MEMORY = TRUE
DEFINE BOOT_MANAGER_ESCAPE = FALSE
# #
# SBL: UEFI payload for Slim Bootloader # SBL: UEFI payload for Slim Bootloader
# COREBOOT: UEFI payload for coreboot # COREBOOT: UEFI payload for coreboot
@ -401,6 +402,7 @@
!endif !endif
gUefiPayloadPkgTokenSpaceGuid.PcdDispatchModuleAbove4GMemory|$(ABOVE_4G_MEMORY) gUefiPayloadPkgTokenSpaceGuid.PcdDispatchModuleAbove4GMemory|$(ABOVE_4G_MEMORY)
gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape|$(BOOT_MANAGER_ESCAPE)
[PcdsPatchableInModule.X64] [PcdsPatchableInModule.X64]
gPcAtChipsetPkgTokenSpaceGuid.PcdRtcIndexRegister|$(RTC_INDEX_REGISTER) gPcAtChipsetPkgTokenSpaceGuid.PcdRtcIndexRegister|$(RTC_INDEX_REGISTER)