mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
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>
This commit is contained in:
parent
c2238fcf0c
commit
87d791423a
10 changed files with 1952 additions and 47 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue