[edk2-devel] [PATCH 1/5] ArmPkg/PlatformBootManagerLib: register 's' as UEFI Shell hotkey

Ard Biesheuvel posted 5 patches 5 years, 8 months ago
There is a newer version of this series
[edk2-devel] [PATCH 1/5] ArmPkg/PlatformBootManagerLib: register 's' as UEFI Shell hotkey
Posted by Ard Biesheuvel 5 years, 8 months ago
In preparation of hiding the UEFI Shell boot option as an ordinary
boot option, make sure we can invoke it directly using the 's'
hotkey. Without ConnectAll() having been called, this results in
a shell that may have no block devices or other things connected,
so don't advertise the 's' in the console string that is printed
at boot - for novice users, we will go through the UiApp which
connects everything first. For advanced use, having the ability
to invoke the UEFI shell without any devices connected may be an
advantage, so let's keep this behavior as is for now.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
---
 ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c
index 4aca1382b042..23c925bbdb9c 100644
--- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c
+++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c
@@ -357,7 +357,8 @@ VOID
 PlatformRegisterFvBootOption (
   CONST EFI_GUID                   *FileGuid,
   CHAR16                           *Description,
-  UINT32                           Attributes
+  UINT32                           Attributes,
+  EFI_INPUT_KEY                    *Key
   )
 {
   EFI_STATUS                        Status;
@@ -409,6 +410,9 @@ PlatformRegisterFvBootOption (
   if (OptionIndex == -1) {
     Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN);
     ASSERT_EFI_ERROR (Status);
+    Status = EfiBootManagerAddKeyOptionVariable (NULL,
+               (UINT16)NewOption.OptionNumber, 0, Key, NULL);
+    ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);
   }
   EfiBootManagerFreeLoadOption (&NewOption);
   EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
@@ -721,6 +725,7 @@ PlatformBootManagerAfterConsole (
   UINTN                         FirmwareVerLength;
   UINTN                         PosX;
   UINTN                         PosY;
+  EFI_INPUT_KEY                 Key;
 
   FirmwareVerLength = StrLen (PcdGetPtr (PcdFirmwareVersionString));
 
@@ -770,8 +775,10 @@ PlatformBootManagerAfterConsole (
   //
   // Register UEFI Shell
   //
+  Key.ScanCode     = SCAN_NULL;
+  Key.UnicodeChar  = L's';
   PlatformRegisterFvBootOption (
-    &gUefiShellFileGuid, L"UEFI Shell", LOAD_OPTION_ACTIVE
+    &gUefiShellFileGuid, L"UEFI Shell", LOAD_OPTION_ACTIVE, &Key
     );
 }
 
-- 
2.17.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#60286): https://edk2.groups.io/g/devel/message/60286
Mute This Topic: https://groups.io/mt/74481032/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [PATCH 1/5] ArmPkg/PlatformBootManagerLib: register 's' as UEFI Shell hotkey
Posted by Laszlo Ersek 5 years, 8 months ago
On 05/26/20 18:13, Ard Biesheuvel wrote:
> In preparation of hiding the UEFI Shell boot option as an ordinary
> boot option, make sure we can invoke it directly using the 's'
> hotkey. Without ConnectAll() having been called, this results in
> a shell that may have no block devices or other things connected,
> so don't advertise the 's' in the console string that is printed
> at boot - for novice users, we will go through the UiApp which
> connects everything first. For advanced use, having the ability
> to invoke the UEFI shell without any devices connected may be an
> advantage, so let's keep this behavior as is for now.
> 
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
> ---
>  ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c
> index 4aca1382b042..23c925bbdb9c 100644
> --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c
> +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c
> @@ -357,7 +357,8 @@ VOID
>  PlatformRegisterFvBootOption (
>    CONST EFI_GUID                   *FileGuid,
>    CHAR16                           *Description,
> -  UINT32                           Attributes
> +  UINT32                           Attributes,
> +  EFI_INPUT_KEY                    *Key
>    )
>  {
>    EFI_STATUS                        Status;
> @@ -409,6 +410,9 @@ PlatformRegisterFvBootOption (
>    if (OptionIndex == -1) {
>      Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN);
>      ASSERT_EFI_ERROR (Status);
> +    Status = EfiBootManagerAddKeyOptionVariable (NULL,
> +               (UINT16)NewOption.OptionNumber, 0, Key, NULL);
> +    ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);
>    }
>    EfiBootManagerFreeLoadOption (&NewOption);
>    EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
> @@ -721,6 +725,7 @@ PlatformBootManagerAfterConsole (
>    UINTN                         FirmwareVerLength;
>    UINTN                         PosX;
>    UINTN                         PosY;
> +  EFI_INPUT_KEY                 Key;
>  
>    FirmwareVerLength = StrLen (PcdGetPtr (PcdFirmwareVersionString));
>  
> @@ -770,8 +775,10 @@ PlatformBootManagerAfterConsole (
>    //
>    // Register UEFI Shell
>    //
> +  Key.ScanCode     = SCAN_NULL;
> +  Key.UnicodeChar  = L's';
>    PlatformRegisterFvBootOption (
> -    &gUefiShellFileGuid, L"UEFI Shell", LOAD_OPTION_ACTIVE
> +    &gUefiShellFileGuid, L"UEFI Shell", LOAD_OPTION_ACTIVE, &Key
>      );
>  }
>  
> 

Reviewed-by: Laszlo Ersek <lersek@redhat.com>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#60356): https://edk2.groups.io/g/devel/message/60356
Mute This Topic: https://groups.io/mt/74481032/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-