sys-manager-core.c (1401B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * PS3 System Manager core. 4 * 5 * Copyright (C) 2007 Sony Computer Entertainment Inc. 6 * Copyright 2007 Sony Corp. 7 */ 8 9#include <linux/kernel.h> 10#include <linux/export.h> 11#include <asm/lv1call.h> 12#include <asm/ps3.h> 13 14/** 15 * Staticly linked routines that allow late binding of a loaded sys-manager 16 * module. 17 */ 18 19static struct ps3_sys_manager_ops ps3_sys_manager_ops; 20 21/** 22 * ps3_register_sys_manager_ops - Bind ps3_sys_manager_ops to a module. 23 * @ops: struct ps3_sys_manager_ops. 24 * 25 * To be called from ps3_sys_manager_probe() and ps3_sys_manager_remove() to 26 * register call back ops for power control. Copies data to the static 27 * variable ps3_sys_manager_ops. 28 */ 29 30void ps3_sys_manager_register_ops(const struct ps3_sys_manager_ops *ops) 31{ 32 BUG_ON(!ops); 33 BUG_ON(!ops->dev); 34 ps3_sys_manager_ops = *ops; 35} 36EXPORT_SYMBOL_GPL(ps3_sys_manager_register_ops); 37 38void __noreturn ps3_sys_manager_power_off(void) 39{ 40 if (ps3_sys_manager_ops.power_off) 41 ps3_sys_manager_ops.power_off(ps3_sys_manager_ops.dev); 42 43 ps3_sys_manager_halt(); 44} 45 46void __noreturn ps3_sys_manager_restart(void) 47{ 48 if (ps3_sys_manager_ops.restart) 49 ps3_sys_manager_ops.restart(ps3_sys_manager_ops.dev); 50 51 ps3_sys_manager_halt(); 52} 53 54void __noreturn ps3_sys_manager_halt(void) 55{ 56 pr_emerg("System Halted, OK to turn off power\n"); 57 local_irq_disable(); 58 while (1) 59 lv1_pause(1); 60} 61