2019-05-27 09:55:15 +03:00
// SPDX-License-Identifier: GPL-2.0-only
2007-06-16 02:03:54 +04:00
/*
* PS3 System Manager core .
*
* Copyright ( C ) 2007 Sony Computer Entertainment Inc .
* Copyright 2007 Sony Corp .
*/
# include <linux/kernel.h>
2011-05-27 18:46:24 +04:00
# include <linux/export.h>
2008-03-27 03:38:31 +03:00
# include <asm/lv1call.h>
2007-06-16 02:03:54 +04:00
# include <asm/ps3.h>
/**
* Staticly linked routines that allow late binding of a loaded sys - manager
* module .
*/
static struct ps3_sys_manager_ops ps3_sys_manager_ops ;
/**
* ps3_register_sys_manager_ops - Bind ps3_sys_manager_ops to a module .
* @ ops : struct ps3_sys_manager_ops .
*
* To be called from ps3_sys_manager_probe ( ) and ps3_sys_manager_remove ( ) to
* register call back ops for power control . Copies data to the static
* variable ps3_sys_manager_ops .
*/
void ps3_sys_manager_register_ops ( const struct ps3_sys_manager_ops * ops )
{
BUG_ON ( ! ops ) ;
BUG_ON ( ! ops - > dev ) ;
ps3_sys_manager_ops = ops ? * ops : ps3_sys_manager_ops ;
}
EXPORT_SYMBOL_GPL ( ps3_sys_manager_register_ops ) ;
2015-01-13 04:00:20 +03:00
void __noreturn ps3_sys_manager_power_off ( void )
2007-06-16 02:03:54 +04:00
{
if ( ps3_sys_manager_ops . power_off )
ps3_sys_manager_ops . power_off ( ps3_sys_manager_ops . dev ) ;
2008-03-27 03:38:31 +03:00
ps3_sys_manager_halt ( ) ;
2007-06-16 02:03:54 +04:00
}
2015-01-13 04:00:20 +03:00
void __noreturn ps3_sys_manager_restart ( void )
2007-06-16 02:03:54 +04:00
{
if ( ps3_sys_manager_ops . restart )
ps3_sys_manager_ops . restart ( ps3_sys_manager_ops . dev ) ;
2008-03-27 03:38:31 +03:00
ps3_sys_manager_halt ( ) ;
}
2015-01-13 04:00:20 +03:00
void __noreturn ps3_sys_manager_halt ( void )
2008-03-27 03:38:31 +03:00
{
pr_emerg ( " System Halted, OK to turn off power \n " ) ;
2007-06-16 02:03:54 +04:00
local_irq_disable ( ) ;
while ( 1 )
2008-03-27 03:38:31 +03:00
lv1_pause ( 1 ) ;
2007-06-16 02:03:54 +04:00
}
2008-03-27 03:38:31 +03:00