Skip to content
Snippets Groups Projects
Commit ea630ce9 authored by Heinrich Schuchardt's avatar Heinrich Schuchardt Committed by Alexander Graf
Browse files

efi_loader: allow return value in EFI_CALL


Macro EFI_CALL was introduced to call an UEFI function.
Unfortunately it does not support return values.
Most UEFI functions have a return value.

So let's rename EFI_CALL to EFI_CALL_VOID and introduce a
new EFI_CALL macro that supports return values.

Signed-off-by: default avatarHeinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
parent 29f1a367
No related branches found
No related tags found
No related merge requests found
......@@ -42,9 +42,22 @@ const char *__efi_nesting_dec(void);
})
/*
* Callback into UEFI world from u-boot:
* Call non-void UEFI function from u-boot and retrieve return value:
*/
#define EFI_CALL(exp) do { \
#define EFI_CALL(exp) ({ \
debug("%sEFI: Call: %s\n", __efi_nesting_inc(), #exp); \
assert(__efi_exit_check()); \
typeof(exp) _r = exp; \
assert(__efi_entry_check()); \
debug("%sEFI: %lu returned by %s\n", __efi_nesting_dec(), \
(unsigned long)((uintptr_t)_r & ~EFI_ERROR_MASK), #exp); \
_r; \
})
/*
* Call void UEFI function from u-boot:
*/
#define EFI_CALL_VOID(exp) do { \
debug("%sEFI: Call: %s\n", __efi_nesting_inc(), #exp); \
assert(__efi_exit_check()); \
exp; \
......
......@@ -163,7 +163,8 @@ void efi_signal_event(struct efi_event *event)
return;
event->signaled = 1;
if (event->type & EVT_NOTIFY_SIGNAL) {
EFI_CALL(event->notify_function(event, event->notify_context));
EFI_CALL_VOID(event->notify_function(event,
event->notify_context));
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment