mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00:00
efi_loader: define internal implementations of install/uninstallmultiple
A following patch is cleaning up the core EFI code trying to remove sequences of efi_create_handle, efi_add_protocol. Although this works fine there's a problem with the latter since it is usually combined with efi_delete_handle() which blindly removes all protocols on a handle and deletes the handle. We should try to adhere to the EFI spec which only deletes a handle if the last instance of a protocol has been removed. Another problem is that efi_delete_handle() never checks for opened protocols, but the EFI spec defines that the caller is responsible for ensuring that there are no references to a protocol interface that is going to be removed. So let's fix this by replacing all callsites of efi_create_handle(), efi_add_protocol() , efi_delete_handle() with Install/UninstallMultipleProtocol. In order to do that redefine functions that can be used by the U-Boot proper internally and add '_ext' variants that will be used from the EFI API Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
1af680d5bc
commit
05c4c9e21a
8 changed files with 248 additions and 136 deletions
|
@ -49,38 +49,38 @@ efi_status_t efi_root_node_register(void)
|
|||
dp->end.length = sizeof(struct efi_device_path);
|
||||
|
||||
/* Create root node and install protocols */
|
||||
ret = EFI_CALL(efi_install_multiple_protocol_interfaces
|
||||
(&efi_root,
|
||||
/* Device path protocol */
|
||||
&efi_guid_device_path, dp,
|
||||
ret = efi_install_multiple_protocol_interfaces
|
||||
(&efi_root,
|
||||
/* Device path protocol */
|
||||
&efi_guid_device_path, dp,
|
||||
#if CONFIG_IS_ENABLED(EFI_DEVICE_PATH_TO_TEXT)
|
||||
/* Device path to text protocol */
|
||||
&efi_guid_device_path_to_text_protocol,
|
||||
(void *)&efi_device_path_to_text,
|
||||
/* Device path to text protocol */
|
||||
&efi_guid_device_path_to_text_protocol,
|
||||
&efi_device_path_to_text,
|
||||
#endif
|
||||
#ifdef CONFIG_EFI_DEVICE_PATH_UTIL
|
||||
/* Device path utilities protocol */
|
||||
&efi_guid_device_path_utilities_protocol,
|
||||
(void *)&efi_device_path_utilities,
|
||||
#if CONFIG_IS_ENABLED(EFI_DEVICE_PATH_UTIL)
|
||||
/* Device path utilities protocol */
|
||||
&efi_guid_device_path_utilities_protocol,
|
||||
&efi_device_path_utilities,
|
||||
#endif
|
||||
#ifdef CONFIG_EFI_DT_FIXUP
|
||||
/* Device-tree fix-up protocol */
|
||||
&efi_guid_dt_fixup_protocol,
|
||||
(void *)&efi_dt_fixup_prot,
|
||||
#if CONFIG_IS_ENABLED(EFI_DT_FIXUP)
|
||||
/* Device-tree fix-up protocol */
|
||||
&efi_guid_dt_fixup_protocol,
|
||||
&efi_dt_fixup_prot,
|
||||
#endif
|
||||
#if CONFIG_IS_ENABLED(EFI_UNICODE_COLLATION_PROTOCOL2)
|
||||
&efi_guid_unicode_collation_protocol2,
|
||||
(void *)&efi_unicode_collation_protocol2,
|
||||
&efi_guid_unicode_collation_protocol2,
|
||||
&efi_unicode_collation_protocol2,
|
||||
#endif
|
||||
#if CONFIG_IS_ENABLED(EFI_LOADER_HII)
|
||||
/* HII string protocol */
|
||||
&efi_guid_hii_string_protocol,
|
||||
(void *)&efi_hii_string,
|
||||
/* HII database protocol */
|
||||
&efi_guid_hii_database_protocol,
|
||||
(void *)&efi_hii_database,
|
||||
/* HII string protocol */
|
||||
&efi_guid_hii_string_protocol,
|
||||
&efi_hii_string,
|
||||
/* HII database protocol */
|
||||
&efi_guid_hii_database_protocol,
|
||||
&efi_hii_database,
|
||||
#endif
|
||||
NULL));
|
||||
NULL);
|
||||
efi_root->type = EFI_OBJECT_TYPE_U_BOOT_FIRMWARE;
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue