efi_loader: use struct efi_event * instead of void *

In our implementation the internal structure of events is known.
So use the known type instead of void.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
xypron.glpk@gmx.de 2017-07-18 20:17:17 +02:00 committed by Alexander Graf
parent 71275a3e98
commit 2fd945fe72
2 changed files with 27 additions and 21 deletions

View File

@ -31,6 +31,8 @@ enum efi_event_type {
#define EVT_NOTIFY_WAIT 0x00000100 #define EVT_NOTIFY_WAIT 0x00000100
#define EVT_NOTIFY_SIGNAL 0x00000200 #define EVT_NOTIFY_SIGNAL 0x00000200
struct efi_event;
/* EFI Boot Services table */ /* EFI Boot Services table */
struct efi_boot_services { struct efi_boot_services {
struct efi_table_hdr hdr; struct efi_table_hdr hdr;
@ -48,16 +50,17 @@ struct efi_boot_services {
efi_status_t (EFIAPI *create_event)(enum efi_event_type type, efi_status_t (EFIAPI *create_event)(enum efi_event_type type,
unsigned long notify_tpl, unsigned long notify_tpl,
void (EFIAPI *notify_function) (void *event, void (EFIAPI *notify_function) (
void *context), struct efi_event *event,
void *notify_context, void **event); void *context),
efi_status_t (EFIAPI *set_timer)(void *event, int type, void *notify_context, struct efi_event **event);
efi_status_t (EFIAPI *set_timer)(struct efi_event *event, int type,
uint64_t trigger_time); uint64_t trigger_time);
efi_status_t (EFIAPI *wait_for_event)(unsigned long number_of_events, efi_status_t (EFIAPI *wait_for_event)(unsigned long number_of_events,
void *event, unsigned long *index); struct efi_event **event, unsigned long *index);
efi_status_t (EFIAPI *signal_event)(void *event); efi_status_t (EFIAPI *signal_event)(struct efi_event *event);
efi_status_t (EFIAPI *close_event)(void *event); efi_status_t (EFIAPI *close_event)(struct efi_event *event);
efi_status_t (EFIAPI *check_event)(void *event); efi_status_t (EFIAPI *check_event)(struct efi_event *event);
#define EFI_NATIVE_INTERFACE 0x00000000 #define EFI_NATIVE_INTERFACE 0x00000000
efi_status_t (EFIAPI *install_protocol_interface)( efi_status_t (EFIAPI *install_protocol_interface)(
void **handle, efi_guid_t *protocol, void **handle, efi_guid_t *protocol,
@ -71,7 +74,7 @@ struct efi_boot_services {
void **); void **);
void *reserved; void *reserved;
efi_status_t (EFIAPI *register_protocol_notify)( efi_status_t (EFIAPI *register_protocol_notify)(
efi_guid_t *protocol, void *event, efi_guid_t *protocol, struct efi_event *event,
void **registration); void **registration);
efi_status_t (EFIAPI *locate_handle)( efi_status_t (EFIAPI *locate_handle)(
enum efi_locate_search_type search_type, enum efi_locate_search_type search_type,
@ -374,7 +377,7 @@ struct efi_simple_input_interface {
efi_status_t(EFIAPI *read_key_stroke)( efi_status_t(EFIAPI *read_key_stroke)(
struct efi_simple_input_interface *this, struct efi_simple_input_interface *this,
struct efi_input_key *key); struct efi_input_key *key);
void *wait_for_key; struct efi_event *wait_for_key;
}; };
#define CONSOLE_CONTROL_GUID \ #define CONSOLE_CONTROL_GUID \

View File

@ -165,13 +165,14 @@ static efi_status_t EFIAPI efi_free_pool_ext(void *buffer)
* Our event capabilities are very limited. Only support a single * Our event capabilities are very limited. Only support a single
* event to exist, so we don't need to maintain lists. * event to exist, so we don't need to maintain lists.
*/ */
static struct { static struct efi_event {
enum efi_event_type type; enum efi_event_type type;
u32 trigger_type; u32 trigger_type;
u32 trigger_time; u32 trigger_time;
u64 trigger_next; u64 trigger_next;
unsigned long notify_tpl; unsigned long notify_tpl;
void (EFIAPI *notify_function) (void *event, void *context); void (EFIAPI *notify_function) (struct efi_event *event,
void *context);
void *notify_context; void *notify_context;
} efi_event = { } efi_event = {
/* Disable timers on bootup */ /* Disable timers on bootup */
@ -180,9 +181,10 @@ static struct {
static efi_status_t EFIAPI efi_create_event( static efi_status_t EFIAPI efi_create_event(
enum efi_event_type type, ulong notify_tpl, enum efi_event_type type, ulong notify_tpl,
void (EFIAPI *notify_function) (void *event, void (EFIAPI *notify_function) (
void *context), struct efi_event *event,
void *notify_context, void **event) void *context),
void *notify_context, struct efi_event **event)
{ {
EFI_ENTRY("%d, 0x%lx, %p, %p", type, notify_tpl, notify_function, EFI_ENTRY("%d, 0x%lx, %p, %p", type, notify_tpl, notify_function,
notify_context); notify_context);
@ -230,7 +232,7 @@ void efi_timer_check(void)
WATCHDOG_RESET(); WATCHDOG_RESET();
} }
static efi_status_t EFIAPI efi_set_timer(void *event, int type, static efi_status_t EFIAPI efi_set_timer(struct efi_event *event, int type,
uint64_t trigger_time) uint64_t trigger_time)
{ {
/* We don't have 64bit division available everywhere, so limit timer /* We don't have 64bit division available everywhere, so limit timer
@ -267,7 +269,8 @@ static efi_status_t EFIAPI efi_set_timer(void *event, int type,
} }
static efi_status_t EFIAPI efi_wait_for_event(unsigned long num_events, static efi_status_t EFIAPI efi_wait_for_event(unsigned long num_events,
void *event, unsigned long *index) struct efi_event **event,
unsigned long *index)
{ {
u64 now; u64 now;
@ -280,20 +283,20 @@ static efi_status_t EFIAPI efi_wait_for_event(unsigned long num_events,
return EFI_EXIT(EFI_SUCCESS); return EFI_EXIT(EFI_SUCCESS);
} }
static efi_status_t EFIAPI efi_signal_event(void *event) static efi_status_t EFIAPI efi_signal_event(struct efi_event *event)
{ {
EFI_ENTRY("%p", event); EFI_ENTRY("%p", event);
return EFI_EXIT(EFI_SUCCESS); return EFI_EXIT(EFI_SUCCESS);
} }
static efi_status_t EFIAPI efi_close_event(void *event) static efi_status_t EFIAPI efi_close_event(struct efi_event *event)
{ {
EFI_ENTRY("%p", event); EFI_ENTRY("%p", event);
efi_event.trigger_next = -1ULL; efi_event.trigger_next = -1ULL;
return EFI_EXIT(EFI_SUCCESS); return EFI_EXIT(EFI_SUCCESS);
} }
static efi_status_t EFIAPI efi_check_event(void *event) static efi_status_t EFIAPI efi_check_event(struct efi_event *event)
{ {
EFI_ENTRY("%p", event); EFI_ENTRY("%p", event);
return EFI_EXIT(EFI_NOT_READY); return EFI_EXIT(EFI_NOT_READY);
@ -428,7 +431,7 @@ static efi_status_t EFIAPI efi_uninstall_protocol_interface_ext(void *handle,
} }
static efi_status_t EFIAPI efi_register_protocol_notify(efi_guid_t *protocol, static efi_status_t EFIAPI efi_register_protocol_notify(efi_guid_t *protocol,
void *event, struct efi_event *event,
void **registration) void **registration)
{ {
EFI_ENTRY("%p, %p, %p", protocol, event, registration); EFI_ENTRY("%p, %p, %p", protocol, event, registration);