u-boot/lib/efi_loader
Ilias Apalodimas 54edc37a22 efi_loader: make efi_delete_handle() follow the EFI spec
The EFI doesn't allow removal of handles, unless all hosted protocols
are cleanly removed.  Our efi_delete_handle() is a bit intrusive.
Although it does try to delete protocols before removing a handle,
it doesn't care if that fails.  Instead it only returns an error if the
handle is invalid. On top of that none of the callers of that function
check the return code.

So let's rewrite this in a way that fits the EFI spec better.  Instead
of forcing the handle removal, gracefully uninstall all the handle
protocols.  According to the EFI spec when the last protocol is removed
the handle will be deleted.  Also switch all the callers and check the
return code. Some callers can't do anything useful apart from reporting
an error.  The disk related functions on the other hand, can prevent a
medium that is being used by EFI from removal.

The only function that doesn't check the result is efi_delete_image().
But that function needs a bigger rework anyway, so we can clean it up in
the future

Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
2023-07-28 11:36:37 +02:00
..
.gitignore efi_loader: git ignore helloworld_efi.S 2020-01-07 18:08:20 +01:00
boothart.c efi_loader: add an EFI binary to print boot hart ID 2022-12-02 19:17:24 +01:00
dtbdump.c efi_loader: move dtbdump.c, initrddump.c to lib/efi_loader 2022-03-20 17:01:00 +01:00
efi_acpi.c efi: Use the installed ACPI tables 2023-07-17 17:23:15 +08:00
efi_bootmgr.c Load option with short device path for boot vars 2023-07-15 11:20:41 +02:00
efi_boottime.c efi_loader: make efi_delete_handle() follow the EFI spec 2023-07-28 11:36:37 +02:00
efi_capsule.c efi_loader: remove unused efi_capsule_authenticate 2023-04-21 08:50:35 +02:00
efi_conformance.c efi_loader: fix efi_ecpt_register() 2023-02-10 13:05:40 +01:00
efi_console.c efi_loader: describe term_get_char() 2023-03-13 13:56:14 +01:00
efi_device_path.c efi_loader: simplify dp_fill() 2023-07-28 11:36:37 +02:00
efi_device_path_to_text.c efi_loader: simplify efi_str_to_u16() 2023-03-25 11:06:35 +01:00
efi_device_path_utilities.c doc: replace @return by Return: 2022-01-19 18:11:34 +01:00
efi_disk.c efi_loader: make efi_delete_handle() follow the EFI spec 2023-07-28 11:36:37 +02:00
efi_dt_fixup.c treewide: Drop bootm_headers_t typedef 2022-09-29 16:07:57 -04:00
efi_esrt.c efi_loader: fix comment in ESRT code 2023-01-27 18:32:00 +01:00
efi_file.c efi_loader: replace a u16_strdup with alloc + memcpy 2022-11-16 08:34:06 +01:00
efi_firmware.c efi_loader: check lowest supported version 2023-06-08 09:20:36 +02:00
efi_freestanding.c trace: Use notrace for short 2023-01-18 11:49:12 -07:00
efi_gop.c efi_loader: make gop_blt() static 2023-02-10 13:05:40 +01:00
efi_helper.c Move bootorder and bootoption apis to lib 2023-07-15 11:20:41 +02:00
efi_hii.c efi_loader: refine set_keyboard_layout() status 2023-01-13 09:09:07 +01:00
efi_hii_config.c efi_loader: use %pUs for printing GUIDs 2022-01-19 16:16:33 +01:00
efi_image_loader.c Correct SPL use of EFI_TCG2_PROTOCOL 2023-02-09 16:32:26 -05:00
efi_load_initrd.c efi_loader: remove efi_delete_handle on loadfile2 2022-10-16 12:23:22 +02:00
efi_load_options.c efi_loader: simplify efi_set_load_options() 2022-10-10 16:34:26 +02:00
efi_memory.c efi: loader: Make efi_mem static 2023-04-08 07:46:44 +02:00
efi_net.c efi_loader: fix handling of DHCP acknowledge 2022-12-02 19:17:24 +01:00
efi_riscv.c efi_loader: use EFI_EXIT in efi_riscv_get_boot_hartid 2023-01-13 09:09:07 +01:00
efi_rng.c efi_loader: use %pUs for printing GUIDs 2022-01-19 16:16:33 +01:00
efi_root_node.c Correct SPL use of EFI_UNICODE_COLLATION_PROTOCOL2 2023-02-09 16:32:26 -05:00
efi_runtime.c efi: loader: Make efi_runtime_mmio static 2023-04-08 07:46:44 +02:00
efi_setup.c efi_loader: set CapsuleMax from CONFIG_EFI_CAPSULE_MAX 2023-02-19 21:15:15 +01:00
efi_signature.c efi_loader: signature: export efi_hash_regions() 2022-07-05 14:37:16 +02:00
efi_smbios.c doc: replace @return by Return: 2022-01-19 18:11:34 +01:00
efi_string.c efi: Add string conversion helper 2022-10-06 22:54:57 +02:00
efi_tcg2.c efi_loader: use efi_install_multiple_protocol_interfaces() 2023-07-20 09:12:50 +02:00
efi_unicode_collation.c efi_loader: Fix buffer underflow 2022-11-22 11:54:30 +01:00
efi_var_common.c efi_loader: update attribute check for QueryVariableInfo() 2023-02-10 13:05:39 +01:00
efi_var_file.c efi_loader: avoid adding variables twice 2022-12-29 10:51:50 +01:00
efi_var_mem.c efi_loader: Avoid underflow when calculating remaining var store size 2023-07-09 03:53:08 +02:00
efi_var_seed.S efi_loader: pre-seed UEFI variables 2020-07-16 12:37:02 +02:00
efi_variable.c efi_loader: update SetVariable attribute check 2023-03-13 13:56:14 +01:00
efi_variable_tee.c Revert "Merge branch '2023-07-24-introduce-FF-A-suppport'" 2023-07-24 19:51:05 -04:00
efi_watchdog.c efi_loader: update the timing of enabling and disabling EFI watchdog 2022-02-26 07:37:01 +01:00
helloworld.c efi_loader: print file path w/o boot device 2023-05-13 11:09:51 +02:00
initrddump.c efi_loader: avoid using HandleProtocol in initrddump.efi 2023-04-08 07:45:34 +02:00
Kconfig Revert "Merge branch '2023-07-24-introduce-FF-A-suppport'" 2023-07-24 19:51:05 -04:00
Makefile efi: Correct .efi rules 2023-05-31 17:23:01 -04:00