linux/arch/mips/kernel/reset.c
<<
>>
Prefs
   1/*
   2 * This file is subject to the terms and conditions of the GNU General Public
   3 * License.  See the file "COPYING" in the main directory of this archive
   4 * for more details.
   5 *
   6 * Copyright (C) 2001, 06 by Ralf Baechle (ralf@linux-mips.org)
   7 * Copyright (C) 2001 MIPS Technologies, Inc.
   8 */
   9#include <linux/kernel.h>
  10#include <linux/export.h>
  11#include <linux/pm.h>
  12#include <linux/types.h>
  13#include <linux/reboot.h>
  14#include <linux/delay.h>
  15
  16#include <asm/reboot.h>
  17
  18/*
  19 * Urgs ...  Too many MIPS machines to handle this in a generic way.
  20 * So handle all using function pointers to machine specific
  21 * functions.
  22 */
  23void (*_machine_restart)(char *command);
  24void (*_machine_halt)(void);
  25void (*pm_power_off)(void);
  26
  27EXPORT_SYMBOL(pm_power_off);
  28
  29void machine_restart(char *command)
  30{
  31        if (_machine_restart)
  32                _machine_restart(command);
  33
  34#ifdef CONFIG_SMP
  35        preempt_disable();
  36        smp_send_stop();
  37#endif
  38        do_kernel_restart(command);
  39        mdelay(1000);
  40        pr_emerg("Reboot failed -- System halted\n");
  41        local_irq_disable();
  42        while (1);
  43}
  44
  45void machine_halt(void)
  46{
  47        if (_machine_halt)
  48                _machine_halt();
  49
  50#ifdef CONFIG_SMP
  51        preempt_disable();
  52        smp_send_stop();
  53#endif
  54        local_irq_disable();
  55        while (1);
  56}
  57
  58void machine_power_off(void)
  59{
  60        if (pm_power_off)
  61                pm_power_off();
  62
  63#ifdef CONFIG_SMP
  64        preempt_disable();
  65        smp_send_stop();
  66#endif
  67        local_irq_disable();
  68        while (1);
  69}
  70