OSDN Git Service

efi/libstub: Expose LocateDevicePath boot service
authorArd Biesheuvel <ardb@kernel.org>
Mon, 10 Feb 2020 16:02:47 +0000 (17:02 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Sun, 23 Feb 2020 20:57:15 +0000 (21:57 +0100)
We will be adding support for loading the initrd from a GUIDed
device path in a subsequent patch, so update the prototype of
the LocateDevicePath() boot service to make it callable from
our code.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
arch/x86/include/asm/efi.h
drivers/firmware/efi/libstub/efistub.h

index 85f79ac..9ced980 100644 (file)
@@ -283,6 +283,9 @@ static inline void *efi64_zero_upper(void *p)
 #define __efi64_argmap_locate_protocol(protocol, reg, interface)       \
        ((protocol), (reg), efi64_zero_upper(interface))
 
+#define __efi64_argmap_locate_device_path(protocol, path, handle)      \
+       ((protocol), (path), efi64_zero_upper(handle))
+
 /* PCI I/O */
 #define __efi64_argmap_get_location(protocol, seg, bus, dev, func)     \
        ((protocol), efi64_zero_upper(seg), efi64_zero_upper(bus),      \
index d282d90..afa774a 100644 (file)
@@ -100,6 +100,8 @@ struct efi_boot_memmap {
        unsigned long           *buff_size;
 };
 
+typedef struct efi_generic_dev_path efi_device_path_protocol_t;
+
 /*
  * EFI Boot Services table
  */
@@ -134,7 +136,9 @@ union efi_boot_services {
                efi_status_t (__efiapi *locate_handle)(int, efi_guid_t *,
                                                       void *, unsigned long *,
                                                       efi_handle_t *);
-               void *locate_device_path;
+               efi_status_t (__efiapi *locate_device_path)(efi_guid_t *,
+                                                           efi_device_path_protocol_t **,
+                                                           efi_handle_t *);
                efi_status_t (__efiapi *install_configuration_table)(efi_guid_t *,
                                                                     void *);
                void *load_image;