Skip to content

Commit

Permalink
UefiPayloadPkg: Make Boot Manager Key configurable
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Sean-StarLabs authored and mergify[bot] committed Mar 7, 2022
1 parent 79f2734 commit af74efe
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 13 deletions.
44 changes: 31 additions & 13 deletions UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ PlatformBootManagerBeforeConsole (
)
{
EFI_INPUT_KEY Enter;
EFI_INPUT_KEY F2;
EFI_INPUT_KEY CustomKey;
EFI_INPUT_KEY Down;
EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
EFI_STATUS Status;
Expand All @@ -186,13 +186,22 @@ PlatformBootManagerBeforeConsole (
Enter.UnicodeChar = CHAR_CARRIAGE_RETURN;
EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL);

//
// Map F2 to Boot Manager Menu
//
F2.ScanCode = SCAN_F2;
F2.UnicodeChar = CHAR_NULL;
if (FixedPcdGetBool (PcdBootManagerEscape)) {
//
// Map Esc to Boot Manager Menu
//
CustomKey.ScanCode = SCAN_ESC;
CustomKey.UnicodeChar = CHAR_NULL;
} else {
//
// Map Esc to Boot Manager Menu
//
CustomKey.ScanCode = SCAN_F2;
CustomKey.UnicodeChar = CHAR_NULL;
}

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.
Expand Down Expand Up @@ -251,12 +260,21 @@ PlatformBootManagerAfterConsole (
//
PlatformRegisterFvBootOption (PcdGetPtr (PcdShellFile), L"UEFI Shell", LOAD_OPTION_ACTIVE);

Print (
L"\n"
L"F2 or Down to enter Boot Manager Menu.\n"
L"ENTER to boot directly.\n"
L"\n"
);
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 (
L"\n"
L"F2 or Down to enter Boot Manager Menu.\n"
L"ENTER to boot directly.\n"
L"\n"
);
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,4 @@
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits
gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile
gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape
3 changes: 3 additions & 0 deletions UefiPayloadPkg/UefiPayloadPkg.dec
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ gUefiPayloadPkgTokenSpaceGuid.PcdPcdDriverFile|{ 0x57, 0x72, 0xcf, 0x80, 0xab, 0
# Above 4G Memory
gUefiPayloadPkgTokenSpaceGuid.PcdDispatchModuleAbove4GMemory|TRUE|BOOLEAN|0x00000019

# Boot Manager Key
gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape|FALSE|BOOLEAN|0x00000020

## FFS filename to find the default 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
2 changes: 2 additions & 0 deletions UefiPayloadPkg/UefiPayloadPkg.dsc
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
DEFINE SECURITY_STUB_ENABLE = TRUE
DEFINE SMM_SUPPORT = FALSE
DEFINE ABOVE_4G_MEMORY = TRUE
DEFINE BOOT_MANAGER_ESCAPE = FALSE
#
# SBL: UEFI payload for Slim Bootloader
# COREBOOT: UEFI payload for coreboot
Expand Down Expand Up @@ -401,6 +402,7 @@
!endif

gUefiPayloadPkgTokenSpaceGuid.PcdDispatchModuleAbove4GMemory|$(ABOVE_4G_MEMORY)
gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape|$(BOOT_MANAGER_ESCAPE)

[PcdsPatchableInModule.X64]
gPcAtChipsetPkgTokenSpaceGuid.PcdRtcIndexRegister|$(RTC_INDEX_REGISTER)
Expand Down

0 comments on commit af74efe

Please sign in to comment.