2005-04-17 02:20:36 +04:00
/*
* 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 .
*
2006-01-18 20:37:07 +03:00
* Copyright ( C ) 2001 , 06 by Ralf Baechle ( ralf @ linux - mips . org )
2005-04-17 02:20:36 +04:00
* Copyright ( C ) 2001 MIPS Technologies , Inc .
*/
# include <linux/kernel.h>
2011-07-24 00:30:40 +04:00
# include <linux/export.h>
2006-01-18 20:37:07 +03:00
# include <linux/pm.h>
2005-04-17 02:20:36 +04:00
# include <linux/types.h>
# include <linux/reboot.h>
2015-03-25 20:25:44 +03:00
# include <linux/delay.h>
2006-01-18 20:37:07 +03:00
2005-04-17 02:20:36 +04:00
# 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 ) ;
2006-01-18 20:37:07 +03:00
void ( * pm_power_off ) ( void ) ;
2005-04-17 02:20:36 +04:00
2006-12-10 18:09:38 +03:00
EXPORT_SYMBOL ( pm_power_off ) ;
2005-04-17 02:20:36 +04:00
void machine_restart ( char * command )
{
2006-01-18 00:14:01 +03:00
if ( _machine_restart )
_machine_restart ( command ) ;
2015-03-25 20:25:44 +03:00
# ifdef CONFIG_SMP
preempt_disable ( ) ;
smp_send_stop ( ) ;
# endif
do_kernel_restart ( command ) ;
mdelay ( 1000 ) ;
pr_emerg ( " Reboot failed -- System halted \n " ) ;
local_irq_disable ( ) ;
while ( 1 ) ;
2005-04-17 02:20:36 +04:00
}
void machine_halt ( void )
{
2006-01-18 00:14:01 +03:00
if ( _machine_halt )
_machine_halt ( ) ;
2015-03-25 20:25:44 +03:00
# ifdef CONFIG_SMP
preempt_disable ( ) ;
smp_send_stop ( ) ;
# endif
local_irq_disable ( ) ;
while ( 1 ) ;
2005-04-17 02:20:36 +04:00
}
void machine_power_off ( void )
{
2006-01-18 20:37:07 +03:00
if ( pm_power_off )
pm_power_off ( ) ;
2015-03-25 20:25:44 +03:00
# ifdef CONFIG_SMP
preempt_disable ( ) ;
smp_send_stop ( ) ;
# endif
local_irq_disable ( ) ;
while ( 1 ) ;
2005-04-17 02:20:36 +04:00
}