This allows to actually reset the system from barebox instead of dropping back into the EFI firmware. Signed-off-by: Lucas Stach <l.stach@xxxxxxxxxxxxxx> --- arch/efi/efi/efi.c | 2 +- include/efi.h | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/arch/efi/efi/efi.c b/arch/efi/efi/efi.c index 7de8ec82e8fa..af3fc4366ba1 100644 --- a/arch/efi/efi/efi.c +++ b/arch/efi/efi/efi.c @@ -248,7 +248,7 @@ console_initcall(efi_console_init); void reset_cpu(unsigned long addr) { - BS->exit(efi_parent_image, EFI_SUCCESS, 0, NULL); + RT->reset_system(EFI_RESET_WARM, EFI_SUCCESS, 0, NULL); while(1); } diff --git a/include/efi.h b/include/efi.h index 4ad9f69237e7..70fe254dbafa 100644 --- a/include/efi.h +++ b/include/efi.h @@ -255,9 +255,11 @@ extern efi_boot_services_t *BS; /* * Types and defines for EFI ResetSystem */ -#define EFI_RESET_COLD 0 -#define EFI_RESET_WARM 1 -#define EFI_RESET_SHUTDOWN 2 +typedef enum { + EFI_RESET_COLD = 0, + EFI_RESET_WARM = 1, + EFI_RESET_SHUTDOWN = 2 +} efi_reset_type_t; /* * EFI Runtime Services table @@ -279,7 +281,8 @@ typedef struct { s16 *variable_name, efi_guid_t *vendor); void *set_variable; void *get_next_high_mono_count; - void *reset_system; + void (EFIAPI *reset_system)(efi_reset_type_t reset_type, efi_status_t reset_status, + unsigned long data_size, void *reset_data); void *update_capsule; void *query_capsule_caps; void *query_variable_info; -- 2.1.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox