mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-02 17:47:54 +00:00
efi_loader: boottime: add loaded image device path protocol to image handle
To meet UEFI spec v2.7a section 9.2, we should add EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL to image handle, instead of EFI_DEVICE_PATH_PROTOCOL. Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
734d3252af
commit
bc8fc32855
4 changed files with 19 additions and 7 deletions
|
@ -333,6 +333,10 @@ struct efi_system_table {
|
||||||
EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, \
|
EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, \
|
||||||
0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
|
0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
|
||||||
|
|
||||||
|
#define LOADED_IMAGE_DEVICE_PATH_GUID \
|
||||||
|
EFI_GUID(0xbc62157e, 0x3e33, 0x4fec, \
|
||||||
|
0x99, 0x20, 0x2d, 0x3b, 0x36, 0xd7, 0x50, 0xdf)
|
||||||
|
|
||||||
#define EFI_LOADED_IMAGE_PROTOCOL_REVISION 0x1000
|
#define EFI_LOADED_IMAGE_PROTOCOL_REVISION 0x1000
|
||||||
|
|
||||||
struct efi_loaded_image {
|
struct efi_loaded_image {
|
||||||
|
|
|
@ -135,6 +135,7 @@ extern const efi_guid_t efi_guid_event_group_reset_system;
|
||||||
/* GUID of the device tree table */
|
/* GUID of the device tree table */
|
||||||
extern const efi_guid_t efi_guid_fdt;
|
extern const efi_guid_t efi_guid_fdt;
|
||||||
extern const efi_guid_t efi_guid_loaded_image;
|
extern const efi_guid_t efi_guid_loaded_image;
|
||||||
|
extern const efi_guid_t efi_guid_loaded_image_device_path;
|
||||||
extern const efi_guid_t efi_guid_device_path_to_text_protocol;
|
extern const efi_guid_t efi_guid_device_path_to_text_protocol;
|
||||||
extern const efi_guid_t efi_simple_file_system_protocol_guid;
|
extern const efi_guid_t efi_simple_file_system_protocol_guid;
|
||||||
extern const efi_guid_t efi_file_info_guid;
|
extern const efi_guid_t efi_file_info_guid;
|
||||||
|
|
|
@ -1522,6 +1522,7 @@ efi_status_t efi_setup_loaded_image(struct efi_device_path *device_path,
|
||||||
efi_status_t ret;
|
efi_status_t ret;
|
||||||
struct efi_loaded_image *info = NULL;
|
struct efi_loaded_image *info = NULL;
|
||||||
struct efi_loaded_image_obj *obj = NULL;
|
struct efi_loaded_image_obj *obj = NULL;
|
||||||
|
struct efi_device_path *dp;
|
||||||
|
|
||||||
/* In case of EFI_OUT_OF_RESOURCES avoid illegal free by caller. */
|
/* In case of EFI_OUT_OF_RESOURCES avoid illegal free by caller. */
|
||||||
*handle_ptr = NULL;
|
*handle_ptr = NULL;
|
||||||
|
@ -1545,15 +1546,19 @@ efi_status_t efi_setup_loaded_image(struct efi_device_path *device_path,
|
||||||
|
|
||||||
if (device_path) {
|
if (device_path) {
|
||||||
info->device_handle = efi_dp_find_obj(device_path, NULL);
|
info->device_handle = efi_dp_find_obj(device_path, NULL);
|
||||||
/*
|
|
||||||
* When asking for the device path interface, return
|
dp = efi_dp_append(device_path, file_path);
|
||||||
* bootefi_device_path
|
if (!dp) {
|
||||||
*/
|
ret = EFI_OUT_OF_RESOURCES;
|
||||||
ret = efi_add_protocol(&obj->header,
|
|
||||||
&efi_guid_device_path, device_path);
|
|
||||||
if (ret != EFI_SUCCESS)
|
|
||||||
goto failure;
|
goto failure;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dp = NULL;
|
||||||
}
|
}
|
||||||
|
ret = efi_add_protocol(&obj->header,
|
||||||
|
&efi_guid_loaded_image_device_path, dp);
|
||||||
|
if (ret != EFI_SUCCESS)
|
||||||
|
goto failure;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When asking for the loaded_image interface, just
|
* When asking for the loaded_image interface, just
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
const efi_guid_t efi_global_variable_guid = EFI_GLOBAL_VARIABLE_GUID;
|
const efi_guid_t efi_global_variable_guid = EFI_GLOBAL_VARIABLE_GUID;
|
||||||
const efi_guid_t efi_guid_device_path = DEVICE_PATH_GUID;
|
const efi_guid_t efi_guid_device_path = DEVICE_PATH_GUID;
|
||||||
const efi_guid_t efi_guid_loaded_image = LOADED_IMAGE_GUID;
|
const efi_guid_t efi_guid_loaded_image = LOADED_IMAGE_GUID;
|
||||||
|
const efi_guid_t efi_guid_loaded_image_device_path
|
||||||
|
= LOADED_IMAGE_DEVICE_PATH_GUID;
|
||||||
const efi_guid_t efi_simple_file_system_protocol_guid =
|
const efi_guid_t efi_simple_file_system_protocol_guid =
|
||||||
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID;
|
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID;
|
||||||
const efi_guid_t efi_file_info_guid = EFI_FILE_INFO_GUID;
|
const efi_guid_t efi_file_info_guid = EFI_FILE_INFO_GUID;
|
||||||
|
|
Loading…
Add table
Reference in a new issue