Skip to content

Commit

Permalink
efi: Add proper definitions for some EFI function pointers.
Browse files Browse the repository at this point in the history
The x86/AMD64 EFI stubs must use 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.
Also add some EFI types used by EFI functions.

Signed-off-by: Roy Franz <roy.franz@linaro.org>
Acked-by: Mark Salter <msalter@redhat.com>
Reviewed-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
  • Loading branch information
Roy Franz authored and Matt Fleming committed Sep 25, 2013
1 parent 4172fe2 commit ed37ddf
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 24 deletions.
8 changes: 0 additions & 8 deletions arch/x86/boot/compressed/eboot.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
#define SEG_GRANULARITY_4KB (1 << 0)

#define DESC_TYPE_CODE_DATA (1 << 0)

#define EFI_PAGE_SIZE (1UL << EFI_PAGE_SHIFT)
#define EFI_READ_CHUNK_SIZE (1024 * 1024)

#define EFI_CONSOLE_OUT_DEVICE_GUID \
Expand Down Expand Up @@ -62,10 +60,4 @@ struct efi_uga_draw_protocol {
void *blt;
};

struct efi_simple_text_output_protocol {
void *reset;
void *output_string;
void *test_string;
};

#endif /* BOOT_COMPRESSED_EBOOT_H */
50 changes: 34 additions & 16 deletions include/linux/efi.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -494,10 +499,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;
Expand All @@ -510,20 +511,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
Expand Down Expand Up @@ -792,6 +803,13 @@ struct efivar_entry {
struct kobject kobj;
};


struct efi_simple_text_output_protocol {
void *reset;
efi_status_t (*output_string)(void *, void *);
void *test_string;
};

extern struct list_head efivar_sysfs_list;

static inline void
Expand Down

0 comments on commit ed37ddf

Please sign in to comment.