aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firmware')
-rw-r--r--drivers/firmware/efi/reboot.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/firmware/efi/reboot.c b/drivers/firmware/efi/reboot.c
index 81bf925f70f5..e9eeeb3c6345 100644
--- a/drivers/firmware/efi/reboot.c
+++ b/drivers/firmware/efi/reboot.c
@@ -24,3 +24,25 @@ void efi_reboot(enum reboot_mode reboot_mode, const char *__unused)
24 24
25 efi.reset_system(efi_mode, EFI_SUCCESS, 0, NULL); 25 efi.reset_system(efi_mode, EFI_SUCCESS, 0, NULL);
26} 26}
27
28bool __weak efi_poweroff_required(void)
29{
30 return false;
31}
32
33static void efi_power_off(void)
34{
35 efi.reset_system(EFI_RESET_SHUTDOWN, EFI_SUCCESS, 0, NULL);
36}
37
38static int __init efi_shutdown_init(void)
39{
40 if (!efi_enabled(EFI_RUNTIME_SERVICES))
41 return -ENODEV;
42
43 if (efi_poweroff_required())
44 pm_power_off = efi_power_off;
45
46 return 0;
47}
48late_initcall(efi_shutdown_init);