efi_loader: refactor efi_open_protocol

efi_open_protocol was implemented to call a protocol specific open
function to retrieve the protocol interface.

The UEFI specification does not know of such a function.

It is not possible to implement InstallProtocolInterface with the
current design.

With the patch the protocol interface itself is stored in the list
of installed protocols of an efi_object instead of an open function.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
[agraf: fix efi gop support]
Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
xypron.glpk@gmx.de 2017-07-11 22:06:14 +02:00 committed by Alexander Graf
parent 8d3a25685e
commit b5349f742a
7 changed files with 26 additions and 92 deletions

View file

@ -54,14 +54,6 @@ static struct efi_device_path_file_path bootefi_device_path[] = {
}
};
static efi_status_t EFIAPI bootefi_open_dp(void *handle, efi_guid_t *protocol,
void **protocol_interface, void *agent_handle,
void *controller_handle, uint32_t attributes)
{
*protocol_interface = bootefi_device_path;
return EFI_SUCCESS;
}
/* The EFI loaded_image interface for the image executed via "bootefi" */
static struct efi_loaded_image loaded_image_info = {
.device_handle = bootefi_device_path,
@ -78,7 +70,7 @@ static struct efi_object loaded_image_info_obj = {
* return handle which points to loaded_image_info
*/
.guid = &efi_guid_loaded_image,
.open = &efi_return_handle,
.protocol_interface = &loaded_image_info,
},
{
/*
@ -86,7 +78,7 @@ static struct efi_object loaded_image_info_obj = {
* bootefi_device_path
*/
.guid = &efi_guid_device_path,
.open = &bootefi_open_dp,
.protocol_interface = bootefi_device_path,
},
},
};
@ -99,7 +91,7 @@ static struct efi_object bootefi_device_obj = {
/* When asking for the device path interface, return
* bootefi_device_path */
.guid = &efi_guid_device_path,
.open = &bootefi_open_dp,
.protocol_interface = bootefi_device_path
}
},
};