11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This file is subject to the terms and conditions of the GNU General Public
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * License.  See the file "COPYING" in the main directory of this archive
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * for more details.
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
6fcdb27ad1d5c66611d3df6400a9b559186f266feRalf Baechle * Copyright (C) 2001, 06 by Ralf Baechle (ralf@linux-mips.org)
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2001 MIPS Technologies, Inc.
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/kernel.h>
1073bc256d47a23272ce1dd50b4de64a0ff23d01f1Paul Gortmaker#include <linux/export.h>
11fcdb27ad1d5c66611d3df6400a9b559186f266feRalf Baechle#include <linux/pm.h>
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h>
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/reboot.h>
14fcdb27ad1d5c66611d3df6400a9b559186f266feRalf Baechle
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/reboot.h>
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Urgs ...  Too many MIPS machines to handle this in a generic way.
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * So handle all using function pointers to machine specific
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * functions.
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid (*_machine_restart)(char *command);
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid (*_machine_halt)(void);
24fcdb27ad1d5c66611d3df6400a9b559186f266feRalf Baechlevoid (*pm_power_off)(void);
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
26f8bf35a9145b0831d7d110402662d9cff2d90bd9Ralf BaechleEXPORT_SYMBOL(pm_power_off);
27f8bf35a9145b0831d7d110402662d9cff2d90bd9Ralf Baechle
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid machine_restart(char *command)
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
309414d3628abb646834965b6c23b8e9064729b110Ralf Baechle	if (_machine_restart)
319414d3628abb646834965b6c23b8e9064729b110Ralf Baechle		_machine_restart(command);
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid machine_halt(void)
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
369414d3628abb646834965b6c23b8e9064729b110Ralf Baechle	if (_machine_halt)
379414d3628abb646834965b6c23b8e9064729b110Ralf Baechle		_machine_halt();
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid machine_power_off(void)
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
42fcdb27ad1d5c66611d3df6400a9b559186f266feRalf Baechle	if (pm_power_off)
43fcdb27ad1d5c66611d3df6400a9b559186f266feRalf Baechle		pm_power_off();
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
45