On Fri, 9 Aug 2013 16:26:12 -0700, Roy Franz <roy.franz@xxxxxxxxxx> wrote: > The x86/AMD64 EFI stubs must us a call wrapper to convert between > the Linux and EFI ABIs, so void pointers are sufficient. For ARM, > the ABIs are compatible, so we can directly invoke the function > pointers. The functions that are used by the ARM stub are updated > to match the EFI definitions. > > Signed-off-by: Roy Franz <roy.franz@xxxxxxxxxx> Looks reasonable. Reviewed-by: Grant Likely <grant.likely@xxxxxxxxxx> > --- > arch/x86/boot/compressed/eboot.h | 2 -- > include/linux/efi.h | 45 ++++++++++++++++++++++++-------------- > 2 files changed, 28 insertions(+), 19 deletions(-) > > diff --git a/arch/x86/boot/compressed/eboot.h b/arch/x86/boot/compressed/eboot.h > index bafbd94..81b6b65 100644 > --- a/arch/x86/boot/compressed/eboot.h > +++ b/arch/x86/boot/compressed/eboot.h > @@ -11,8 +11,6 @@ > > #define DESC_TYPE_CODE_DATA (1 << 0) > > -#define EFI_PAGE_SIZE (1UL << EFI_PAGE_SHIFT) > - > #define EFI_CONSOLE_OUT_DEVICE_GUID \ > EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x0, 0x90, 0x27, \ > 0x3f, 0xc1, 0x4d) > diff --git a/include/linux/efi.h b/include/linux/efi.h > index 51f5641..1a7ae34 100644 > --- a/include/linux/efi.h > +++ b/include/linux/efi.h > @@ -39,6 +39,8 @@ > typedef unsigned long efi_status_t; > typedef u8 efi_bool_t; > typedef u16 efi_char16_t; /* UNICODE character */ > +typedef u64 efi_physical_addr_t; > +typedef void *efi_handle_t; > > > typedef struct { > @@ -96,6 +98,7 @@ typedef struct { > #define EFI_MEMORY_DESCRIPTOR_VERSION 1 > > #define EFI_PAGE_SHIFT 12 > +#define EFI_PAGE_SIZE (1UL << EFI_PAGE_SHIFT) > > typedef struct { > u32 type; > @@ -157,11 +160,13 @@ typedef struct { > efi_table_hdr_t hdr; > void *raise_tpl; > void *restore_tpl; > - void *allocate_pages; > - void *free_pages; > - void *get_memory_map; > - void *allocate_pool; > - void *free_pool; > + efi_status_t (*allocate_pages)(int, int, unsigned long, > + efi_physical_addr_t *); > + efi_status_t (*free_pages)(efi_physical_addr_t, unsigned long); > + efi_status_t (*get_memory_map)(unsigned long *, void *, unsigned long *, > + unsigned long *, u32 *); > + efi_status_t (*allocate_pool)(int, unsigned long, void **); > + efi_status_t (*free_pool)(void *); > void *create_event; > void *set_timer; > void *wait_for_event; > @@ -171,7 +176,7 @@ typedef struct { > void *install_protocol_interface; > void *reinstall_protocol_interface; > void *uninstall_protocol_interface; > - void *handle_protocol; > + efi_status_t (*handle_protocol)(efi_handle_t, efi_guid_t *, void **); > void *__reserved; > void *register_protocol_notify; > void *locate_handle; > @@ -181,7 +186,7 @@ typedef struct { > void *start_image; > void *exit; > void *unload_image; > - void *exit_boot_services; > + efi_status_t (*exit_boot_services)(efi_handle_t, unsigned long); > void *get_next_monotonic_count; > void *stall; > void *set_watchdog_timer; > @@ -488,10 +493,6 @@ typedef struct { > unsigned long unload; > } efi_loaded_image_t; > > -typedef struct { > - u64 revision; > - void *open_volume; > -} efi_file_io_interface_t; > > typedef struct { > u64 size; > @@ -504,20 +505,30 @@ typedef struct { > efi_char16_t filename[1]; > } efi_file_info_t; > > -typedef struct { > +typedef struct _efi_file_handle { > u64 revision; > - void *open; > - void *close; > + efi_status_t (*open)(struct _efi_file_handle *, > + struct _efi_file_handle **, > + efi_char16_t *, u64, u64); > + efi_status_t (*close)(struct _efi_file_handle *); > void *delete; > - void *read; > + efi_status_t (*read)(struct _efi_file_handle *, unsigned long *, > + void *); > void *write; > void *get_position; > void *set_position; > - void *get_info; > + efi_status_t (*get_info)(struct _efi_file_handle *, efi_guid_t *, > + unsigned long *, void *); > void *set_info; > void *flush; > } efi_file_handle_t; > > +typedef struct _efi_file_io_interface { > + u64 revision; > + int (*open_volume)(struct _efi_file_io_interface *, > + efi_file_handle_t **); > +} efi_file_io_interface_t; > + > #define EFI_FILE_MODE_READ 0x0000000000000001 > #define EFI_FILE_MODE_WRITE 0x0000000000000002 > #define EFI_FILE_MODE_CREATE 0x8000000000000000 > @@ -787,7 +798,7 @@ struct efivar_entry { > > struct efi_simple_text_output_protocol { > void *reset; > - void *output_string; > + efi_status_t (*output_string)(void *, void *); > void *test_string; > }; > > -- > 1.7.10.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html