1 /* reboot.c: reboot/shutdown/halt/poweroff handling 2 * 3 * Copyright (C) 2008 David S. Miller <davem@davemloft.net> 4 */ 5 #include <linux/kernel.h> 6 #include <linux/reboot.h> 7 #include <linux/export.h> 8 #include <linux/pm.h> 9 10 #include <asm/oplib.h> 11 #include <asm/prom.h> 12 #include <asm/setup.h> 13 14 /* sysctl - toggle power-off restriction for serial console 15 * systems in machine_power_off() 16 */ 17 int scons_pwroff = 1; 18 19 /* This isn't actually used, it exists merely to satisfy the 20 * reference in kernel/sys.c 21 */ 22 void (*pm_power_off)(void) = machine_power_off; 23 EXPORT_SYMBOL(pm_power_off); 24 25 void machine_power_off(void) 26 { 27 if (strcmp(of_console_device->type, "serial") || scons_pwroff) 28 prom_halt_power_off(); 29 30 prom_halt(); 31 } 32 33 void machine_halt(void) 34 { 35 prom_halt(); 36 panic("Halt failed!"); 37 } 38 39 void machine_restart(char *cmd) 40 { 41 char *p; 42 43 p = strchr(reboot_command, '\n'); 44 if (p) 45 *p = 0; 46 if (cmd) 47 prom_reboot(cmd); 48 if (*reboot_command) 49 prom_reboot(reboot_command); 50 prom_reboot(""); 51 panic("Reboot failed!"); 52 } 53 54