1 /* 1 /* 2 * Copyright (C) 2009 Michal Simek <monstr@mon << 3 * Copyright (C) 2009 PetaLogix << 4 * << 5 * This file is subject to the terms and condi 2 * This file is subject to the terms and conditions of the GNU General Public 6 * License. See the file "COPYING" in the main !! 3 * License. See the file "COPYING" in the main directory of this archive 7 * for more details. 4 * for more details. >> 5 * >> 6 * Copyright (C) 2001, 06 by Ralf Baechle (ralf@linux-mips.org) >> 7 * Copyright (C) 2001 MIPS Technologies, Inc. 8 */ 8 */ 9 !! 9 #include <linux/kernel.h> 10 #include <linux/init.h> !! 10 #include <linux/export.h> 11 #include <linux/delay.h> !! 11 #include <linux/pm.h> >> 12 #include <linux/types.h> 12 #include <linux/reboot.h> 13 #include <linux/reboot.h> >> 14 #include <linux/delay.h> >> 15 >> 16 #include <asm/reboot.h> >> 17 >> 18 /* >> 19 * Urgs ... Too many MIPS machines to handle this in a generic way. >> 20 * So handle all using function pointers to machine specific >> 21 * functions. >> 22 */ >> 23 void (*_machine_restart)(char *command); >> 24 void (*_machine_halt)(void); >> 25 void (*pm_power_off)(void); >> 26 >> 27 EXPORT_SYMBOL(pm_power_off); 13 28 14 void machine_shutdown(void) !! 29 void machine_restart(char *command) 15 { 30 { 16 pr_notice("Machine shutdown...\n"); !! 31 if (_machine_restart) 17 while (1) !! 32 _machine_restart(command); 18 ; !! 33 >> 34 #ifdef CONFIG_SMP >> 35 preempt_disable(); >> 36 smp_send_stop(); >> 37 #endif >> 38 do_kernel_restart(command); >> 39 mdelay(1000); >> 40 pr_emerg("Reboot failed -- System halted\n"); >> 41 local_irq_disable(); >> 42 while (1); 19 } 43 } 20 44 21 void machine_halt(void) 45 void machine_halt(void) 22 { 46 { 23 pr_notice("Machine halt...\n"); !! 47 if (_machine_halt) 24 while (1) !! 48 _machine_halt(); 25 ; !! 49 >> 50 #ifdef CONFIG_SMP >> 51 preempt_disable(); >> 52 smp_send_stop(); >> 53 #endif >> 54 local_irq_disable(); >> 55 while (1); 26 } 56 } 27 57 28 void machine_power_off(void) 58 void machine_power_off(void) 29 { 59 { 30 pr_notice("Machine power off...\n"); !! 60 if (pm_power_off) 31 while (1) !! 61 pm_power_off(); 32 ; << 33 } << 34 62 35 void machine_restart(char *cmd) !! 63 #ifdef CONFIG_SMP 36 { !! 64 preempt_disable(); 37 do_kernel_restart(cmd); !! 65 smp_send_stop(); 38 /* Give the restart hook 1 s to take u !! 66 #endif 39 mdelay(1000); !! 67 local_irq_disable(); 40 pr_emerg("Reboot failed -- System halt << 41 while (1); 68 while (1); 42 } 69 } 43 70
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.