[U-Boot] [PATCH 8/9] efi_loader: rework bootmgr/bootefi using load_image API
Heinrich Schuchardt
xypron.glpk at gmx.de
Sat Apr 20 18:24:16 UTC 2019
On 4/20/19 10:37 AM, Heinrich Schuchardt wrote:
> On 4/19/19 5:22 AM, AKASHI Takahiro wrote:
>> In the current implementation, bootefi command and EFI boot manager
>> don't use load_image API, instead, use more primitive and internal
>> functions. This will introduce duplicated code and potentially
>> unknown bugs as well as inconsistent behaviours.
>>
>> With this patch, do_efibootmgr() and do_boot_efi() are completely
>> overhauled and re-implemented using load_image API.
>>
>> Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
<snip />
>> diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c
>> index 4fccadc5483d..13ec79b2098b 100644
>> --- a/lib/efi_loader/efi_bootmgr.c
>> +++ b/lib/efi_loader/efi_bootmgr.c
>> @@ -120,14 +120,14 @@ static void *get_var(u16 *name, const efi_guid_t
>> *vendor,
>> * if successful. This checks that the EFI_LOAD_OPTION is active
>> (enabled)
>> * and that the specified file to boot exists.
>> */
>> -static void *try_load_entry(uint16_t n, struct efi_device_path
>> **device_path,
>> - struct efi_device_path **file_path)
>> +static efi_status_t try_load_entry(u16 n, efi_handle_t *handle)
>> {
>> struct efi_load_option lo;
>> u16 varname[] = L"Boot0000";
>> u16 hexmap[] = L"0123456789ABCDEF";
>> - void *load_option, *image = NULL;
>> + void *load_option;
>> efi_uintn_t size;
>> + efi_status_t ret;
>>
>> varname[4] = hexmap[(n & 0xf000) >> 12];
>> varname[5] = hexmap[(n & 0x0f00) >> 8];
>> @@ -136,19 +136,19 @@ static void *try_load_entry(uint16_t n, struct
>> efi_device_path **device_path,
>>
>> load_option = get_var(varname, &efi_global_variable_guid, &size);
>> if (!load_option)
>> - return NULL;
>> + return EFI_LOAD_ERROR;
>>
>> efi_deserialize_load_option(&lo, load_option);
>>
>> if (lo.attributes & LOAD_OPTION_ACTIVE) {
>> u32 attributes;
>> - efi_status_t ret;
>>
>> debug("%s: trying to load \"%ls\" from %pD\n",
>> __func__, lo.label, lo.file_path);
>>
>> - ret = efi_load_image_from_path(lo.file_path, &image, &size);
>> -
>> + ret = EFI_CALL(efi_load_image(false, (void *)0x1 /* FIXME */,
boot_policy should be true for requests originating from the boot manager.
Best regards
Heinrich
More information about the U-Boot
mailing list