Commit c7007d9f authored by Ard Biesheuvel's avatar Ard Biesheuvel

efi/libstub: add some missing EFI prototypes

Define the correct prototypes for the load_image, start_image and
unload_image boot service pointers so we can call them from the EFI
zboot code.

Also add some prototypes related to installation and deinstallation of
protocols in to the EFI protocol database, including some definitions
related to device paths.
Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
parent 4bf23298
...@@ -171,6 +171,23 @@ struct efi_boot_memmap { ...@@ -171,6 +171,23 @@ struct efi_boot_memmap {
typedef struct efi_generic_dev_path efi_device_path_protocol_t; typedef struct efi_generic_dev_path efi_device_path_protocol_t;
union efi_device_path_to_text_protocol {
struct {
efi_char16_t *(__efiapi *convert_device_node_to_text)(
const efi_device_path_protocol_t *,
bool, bool);
efi_char16_t *(__efiapi *convert_device_path_to_text)(
const efi_device_path_protocol_t *,
bool, bool);
};
struct {
u32 convert_device_node_to_text;
u32 convert_device_path_to_text;
} mixed_mode;
};
typedef union efi_device_path_to_text_protocol efi_device_path_to_text_protocol_t;
typedef void *efi_event_t; typedef void *efi_event_t;
/* Note that notifications won't work in mixed mode */ /* Note that notifications won't work in mixed mode */
typedef void (__efiapi *efi_event_notify_t)(efi_event_t, void *); typedef void (__efiapi *efi_event_notify_t)(efi_event_t, void *);
...@@ -254,13 +271,17 @@ union efi_boot_services { ...@@ -254,13 +271,17 @@ union efi_boot_services {
efi_handle_t *); efi_handle_t *);
efi_status_t (__efiapi *install_configuration_table)(efi_guid_t *, efi_status_t (__efiapi *install_configuration_table)(efi_guid_t *,
void *); void *);
void *load_image; efi_status_t (__efiapi *load_image)(bool, efi_handle_t,
void *start_image; efi_device_path_protocol_t *,
void *, unsigned long,
efi_handle_t *);
efi_status_t (__efiapi *start_image)(efi_handle_t, unsigned long *,
efi_char16_t **);
efi_status_t __noreturn (__efiapi *exit)(efi_handle_t, efi_status_t __noreturn (__efiapi *exit)(efi_handle_t,
efi_status_t, efi_status_t,
unsigned long, unsigned long,
efi_char16_t *); efi_char16_t *);
void *unload_image; efi_status_t (__efiapi *unload_image)(efi_handle_t);
efi_status_t (__efiapi *exit_boot_services)(efi_handle_t, efi_status_t (__efiapi *exit_boot_services)(efi_handle_t,
unsigned long); unsigned long);
void *get_next_monotonic_count; void *get_next_monotonic_count;
...@@ -277,8 +298,8 @@ union efi_boot_services { ...@@ -277,8 +298,8 @@ union efi_boot_services {
void *locate_handle_buffer; void *locate_handle_buffer;
efi_status_t (__efiapi *locate_protocol)(efi_guid_t *, void *, efi_status_t (__efiapi *locate_protocol)(efi_guid_t *, void *,
void **); void **);
void *install_multiple_protocol_interfaces; efi_status_t (__efiapi *install_multiple_protocol_interfaces)(efi_handle_t *, ...);
void *uninstall_multiple_protocol_interfaces; efi_status_t (__efiapi *uninstall_multiple_protocol_interfaces)(efi_handle_t, ...);
void *calculate_crc32; void *calculate_crc32;
void *copy_mem; void *copy_mem;
void *set_mem; void *set_mem;
......
...@@ -368,6 +368,9 @@ void efi_native_runtime_setup(void); ...@@ -368,6 +368,9 @@ void efi_native_runtime_setup(void);
#define UV_SYSTEM_TABLE_GUID EFI_GUID(0x3b13a7d4, 0x633e, 0x11dd, 0x93, 0xec, 0xda, 0x25, 0x56, 0xd8, 0x95, 0x93) #define UV_SYSTEM_TABLE_GUID EFI_GUID(0x3b13a7d4, 0x633e, 0x11dd, 0x93, 0xec, 0xda, 0x25, 0x56, 0xd8, 0x95, 0x93)
#define LINUX_EFI_CRASH_GUID EFI_GUID(0xcfc8fc79, 0xbe2e, 0x4ddc, 0x97, 0xf0, 0x9f, 0x98, 0xbf, 0xe2, 0x98, 0xa0) #define LINUX_EFI_CRASH_GUID EFI_GUID(0xcfc8fc79, 0xbe2e, 0x4ddc, 0x97, 0xf0, 0x9f, 0x98, 0xbf, 0xe2, 0x98, 0xa0)
#define LOADED_IMAGE_PROTOCOL_GUID EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) #define LOADED_IMAGE_PROTOCOL_GUID EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
#define LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID EFI_GUID(0xbc62157e, 0x3e33, 0x4fec, 0x99, 0x20, 0x2d, 0x3b, 0x36, 0xd7, 0x50, 0xdf)
#define EFI_DEVICE_PATH_PROTOCOL_GUID EFI_GUID(0x09576e91, 0x6d3f, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
#define EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID EFI_GUID(0x8b843e20, 0x8132, 0x4852, 0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c)
#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID EFI_GUID(0x9042a9de, 0x23dc, 0x4a38, 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a) #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID EFI_GUID(0x9042a9de, 0x23dc, 0x4a38, 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a)
#define EFI_UGA_PROTOCOL_GUID EFI_GUID(0x982c298b, 0xf4fa, 0x41cb, 0xb8, 0x38, 0x77, 0xaa, 0x68, 0x8f, 0xb8, 0x39) #define EFI_UGA_PROTOCOL_GUID EFI_GUID(0x982c298b, 0xf4fa, 0x41cb, 0xb8, 0x38, 0x77, 0xaa, 0x68, 0x8f, 0xb8, 0x39)
#define EFI_PCI_IO_PROTOCOL_GUID EFI_GUID(0x4cf5b200, 0x68b8, 0x4ca5, 0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a) #define EFI_PCI_IO_PROTOCOL_GUID EFI_GUID(0x4cf5b200, 0x68b8, 0x4ca5, 0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a)
...@@ -952,6 +955,7 @@ extern int efi_status_to_err(efi_status_t status); ...@@ -952,6 +955,7 @@ extern int efi_status_to_err(efi_status_t status);
#define EFI_DEV_MEDIA_VENDOR 3 #define EFI_DEV_MEDIA_VENDOR 3
#define EFI_DEV_MEDIA_FILE 4 #define EFI_DEV_MEDIA_FILE 4
#define EFI_DEV_MEDIA_PROTOCOL 5 #define EFI_DEV_MEDIA_PROTOCOL 5
#define EFI_DEV_MEDIA_REL_OFFSET 8
#define EFI_DEV_BIOS_BOOT 0x05 #define EFI_DEV_BIOS_BOOT 0x05
#define EFI_DEV_END_PATH 0x7F #define EFI_DEV_END_PATH 0x7F
#define EFI_DEV_END_PATH2 0xFF #define EFI_DEV_END_PATH2 0xFF
...@@ -982,12 +986,20 @@ struct efi_vendor_dev_path { ...@@ -982,12 +986,20 @@ struct efi_vendor_dev_path {
u8 vendordata[]; u8 vendordata[];
} __packed; } __packed;
struct efi_rel_offset_dev_path {
struct efi_generic_dev_path header;
u32 reserved;
u64 starting_offset;
u64 ending_offset;
} __packed;
struct efi_dev_path { struct efi_dev_path {
union { union {
struct efi_generic_dev_path header; struct efi_generic_dev_path header;
struct efi_acpi_dev_path acpi; struct efi_acpi_dev_path acpi;
struct efi_pci_dev_path pci; struct efi_pci_dev_path pci;
struct efi_vendor_dev_path vendor; struct efi_vendor_dev_path vendor;
struct efi_rel_offset_dev_path rel_offset;
}; };
} __packed; } __packed;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment