]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
efi_loader: don't use HandleProtocol
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Tue, 24 Jan 2023 19:36:45 +0000 (20:36 +0100)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Fri, 27 Jan 2023 17:32:00 +0000 (18:32 +0100)
HandleProtocol() is deprecrated. According to the UEFI specification it
should be implemented as a call to  OpenProtocolInterface() with a hard
coded agent handle. This implies that we would have to call
CloseProtocolInterfaces() after usage with the same handle.

Getting rid of an EFI_CALL() is also appreciated.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
lib/efi_loader/efi_boottime.c

index e65ca6a4cbee9dec07176d9cc73a4a0819bde4a3..ba28989f36ac098b1e4e5694d5e53e1612b485d4 100644 (file)
@@ -1949,6 +1949,7 @@ efi_status_t efi_load_image_from_path(bool boot_policy,
        efi_uintn_t buffer_size;
        uint64_t addr, pages;
        const efi_guid_t *guid;
+       struct efi_handler *handler;
 
        /* In case of failure nothing is returned */
        *buffer = NULL;
@@ -1970,11 +1971,11 @@ efi_status_t efi_load_image_from_path(bool boot_policy,
        }
        if (ret != EFI_SUCCESS)
                return EFI_NOT_FOUND;
-       ret = EFI_CALL(efi_handle_protocol(device, guid,
-                                          (void **)&load_file_protocol));
+       ret = efi_search_protocol(device, guid, &handler);
        if (ret != EFI_SUCCESS)
                return EFI_NOT_FOUND;
        buffer_size = 0;
+       load_file_protocol = handler->protocol_interface;
        ret = EFI_CALL(load_file_protocol->load_file(
                                        load_file_protocol, rem, boot_policy,
                                        &buffer_size, NULL));