aboutsummaryrefslogtreecommitdiff
path: root/lib/efi_loader/efi_boottime.c
diff options
context:
space:
mode:
authorMasahisa Kojima <masahisa.kojima@linaro.org>2022-09-12 17:33:50 +0900
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2022-09-14 08:43:31 +0200
commit87d791423ac69affec43dfb834965adcb0aa02e6 (patch)
tree82576a5bf3f39e7963c7931407542342deaeb9a7 /lib/efi_loader/efi_boottime.c
parentc2238fcf0c4567bbd581882e5952047e71406f58 (diff)
eficonfig: menu-driven addition of UEFI boot option
This commit add the "eficonfig" command. The "eficonfig" command implements the menu-driven UEFI boot option maintenance feature. This commit implements the addition of new boot option. User can select the block device volume having efi_simple_file_system_protocol and select the file corresponding to the Boot#### variable. User can also enter the description and optional_data of the BOOT#### variable in utf8. This commit adds "include/efi_config.h", it contains the common definition to be used from other menus such as UEFI Secure Boot key management. Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
Diffstat (limited to 'lib/efi_loader/efi_boottime.c')
-rw-r--r--lib/efi_loader/efi_boottime.c52
1 files changed, 32 insertions, 20 deletions
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
index 4da64b5d29..1233418e77 100644
--- a/lib/efi_loader/efi_boottime.c
+++ b/lib/efi_loader/efi_boottime.c
@@ -2453,6 +2453,35 @@ static efi_status_t EFIAPI efi_protocols_per_handle(
return EFI_EXIT(EFI_SUCCESS);
}
+efi_status_t efi_locate_handle_buffer_int(enum efi_locate_search_type search_type,
+ const efi_guid_t *protocol, void *search_key,
+ efi_uintn_t *no_handles, efi_handle_t **buffer)
+{
+ efi_status_t r;
+ efi_uintn_t buffer_size = 0;
+
+ if (!no_handles || !buffer) {
+ r = EFI_INVALID_PARAMETER;
+ goto out;
+ }
+ *no_handles = 0;
+ *buffer = NULL;
+ r = efi_locate_handle(search_type, protocol, search_key, &buffer_size,
+ *buffer);
+ if (r != EFI_BUFFER_TOO_SMALL)
+ goto out;
+ r = efi_allocate_pool(EFI_BOOT_SERVICES_DATA, buffer_size,
+ (void **)buffer);
+ if (r != EFI_SUCCESS)
+ goto out;
+ r = efi_locate_handle(search_type, protocol, search_key, &buffer_size,
+ *buffer);
+ if (r == EFI_SUCCESS)
+ *no_handles = buffer_size / sizeof(efi_handle_t);
+out:
+ return r;
+}
+
/**
* efi_locate_handle_buffer() - locate handles implementing a protocol
* @search_type: selection criterion
@@ -2474,30 +2503,13 @@ efi_status_t EFIAPI efi_locate_handle_buffer(
efi_uintn_t *no_handles, efi_handle_t **buffer)
{
efi_status_t r;
- efi_uintn_t buffer_size = 0;
EFI_ENTRY("%d, %pUs, %p, %p, %p", search_type, protocol, search_key,
no_handles, buffer);
- if (!no_handles || !buffer) {
- r = EFI_INVALID_PARAMETER;
- goto out;
- }
- *no_handles = 0;
- *buffer = NULL;
- r = efi_locate_handle(search_type, protocol, search_key, &buffer_size,
- *buffer);
- if (r != EFI_BUFFER_TOO_SMALL)
- goto out;
- r = efi_allocate_pool(EFI_BOOT_SERVICES_DATA, buffer_size,
- (void **)buffer);
- if (r != EFI_SUCCESS)
- goto out;
- r = efi_locate_handle(search_type, protocol, search_key, &buffer_size,
- *buffer);
- if (r == EFI_SUCCESS)
- *no_handles = buffer_size / sizeof(efi_handle_t);
-out:
+ r = efi_locate_handle_buffer_int(search_type, protocol, search_key,
+ no_handles, buffer);
+
return EFI_EXIT(r);
}