root/drivers/ps3/sys-manager-core.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ps3_sys_manager_register_ops
  2. ps3_sys_manager_power_off
  3. ps3_sys_manager_restart
  4. ps3_sys_manager_halt

   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 
  19 static 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 
  30 void 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 ? *ops : ps3_sys_manager_ops;
  35 }
  36 EXPORT_SYMBOL_GPL(ps3_sys_manager_register_ops);
  37 
  38 void __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 
  46 void __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 
  54 void __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 

/* [<][>][^][v][top][bottom][index][help] */