diff options
author | Lucas Stach <l.stach@pengutronix.de> | 2014-12-08 14:42:29 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-12-09 09:59:09 +0100 |
commit | e4f3215be242c86080e0355b36a3d236b26db8fc (patch) | |
tree | aa01437f1fed142d5aa3414dc9dc7e14733309e9 | |
parent | da94ff1e37315900037dee2171f43c342616206d (diff) | |
download | barebox-e4f3215be242c86080e0355b36a3d236b26db8fc.tar.gz barebox-e4f3215be242c86080e0355b36a3d236b26db8fc.tar.xz |
efi: add proper reset hook
This allows to actually reset the system from barebox
instead of dropping back into the EFI firmware.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | arch/efi/efi/efi.c | 2 | ||||
-rw-r--r-- | 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 7de8ec82e8..af3fc4366b 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 de51e1a3c9..49b8bd44bc 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; |