Load option with short device path for boot vars

The boot variables automatically generated for removable medias
should be with short form of device path without device nodes.
This is a requirement for the case that a removable media is
plugged into a different port but is still able to work with the
existing boot variables.

Signed-off-by: Raymond Mao <raymond.mao@linaro.org>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
This commit is contained in:
Raymond Mao 2023-06-19 14:23:01 -07:00 committed by Heinrich Schuchardt
parent 9945bc4f86
commit 7aa022c797

View File

@ -368,6 +368,7 @@ static efi_status_t efi_bootmgr_enumerate_boot_option(struct eficonfig_media_boo
struct efi_load_option lo; struct efi_load_option lo;
char buf[BOOTMENU_DEVICE_NAME_MAX]; char buf[BOOTMENU_DEVICE_NAME_MAX];
struct efi_device_path *device_path; struct efi_device_path *device_path;
struct efi_device_path *short_dp;
ret = efi_search_protocol(volume_handles[i], &efi_guid_device_path, &handler); ret = efi_search_protocol(volume_handles[i], &efi_guid_device_path, &handler);
if (ret != EFI_SUCCESS) if (ret != EFI_SUCCESS)
@ -384,6 +385,11 @@ static efi_status_t efi_bootmgr_enumerate_boot_option(struct eficonfig_media_boo
p = dev_name; p = dev_name;
utf8_utf16_strncpy(&p, buf, strlen(buf)); utf8_utf16_strncpy(&p, buf, strlen(buf));
/* prefer to short form device path */
short_dp = efi_dp_shorten(device_path);
if (short_dp)
device_path = short_dp;
lo.label = dev_name; lo.label = dev_name;
lo.attributes = LOAD_OPTION_ACTIVE; lo.attributes = LOAD_OPTION_ACTIVE;
lo.file_path = device_path; lo.file_path = device_path;