/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 2001, 06 by Ralf Baechle (ralf@linux-mips.org) * Copyright (C) 2001 MIPS Technologies, Inc. */ #include <linux/kernel.h> #include <linux/export.h> #include <linux/pm.h> #include <linux/types.h> #include <linux/reboot.h> #include <linux/delay.h> #include <asm/reboot.h> /* * Urgs ... Too many MIPS machines to handle this in a generic way. * So handle all using function pointers to machine specific * functions. */ void (*_machine_restart)(char *command); void (*_machine_halt)(void); void (*pm_power_off)(void); EXPORT_SYMBOL(pm_power_off); void machine_restart(char *command) { if (_machine_restart) _machine_restart(command); #ifdef [31mCONFIG_SMP[0m preempt_disable(); smp_send_stop(); #endif do_kernel_restart(command); mdelay(1000); pr_emerg("Reboot failed -- System halted\n"); local_irq_disable(); while (1); } void machine_halt(void) { if (_machine_halt) _machine_halt(); #ifdef [31mCONFIG_SMP[0m preempt_disable(); smp_send_stop(); #endif local_irq_disable(); while (1); } void machine_power_off(void) { if (pm_power_off) pm_power_off(); #ifdef [31mCONFIG_SMP[0m preempt_disable(); smp_send_stop(); #endif local_irq_disable(); while (1); } |