12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 2001, 06 by Ralf Baechle (ralf@linux-mips.org)
- * Copyright (C) 2001 MIPS Technologies, Inc.
- */
- #include <linux/kernel.h>
- #include <linux/export.h>
- #include <linux/pm.h>
- #include <linux/types.h>
- #include <linux/reboot.h>
- #include <linux/delay.h>
- #include <asm/reboot.h>
- /*
- * Urgs ... Too many MIPS machines to handle this in a generic way.
- * So handle all using function pointers to machine specific
- * functions.
- */
- void (*_machine_restart)(char *command);
- void (*_machine_halt)(void);
- void (*pm_power_off)(void);
- EXPORT_SYMBOL(pm_power_off);
- void machine_restart(char *command)
- {
- if (_machine_restart)
- _machine_restart(command);
- #ifdef CONFIG_SMP
- preempt_disable();
- smp_send_stop();
- #endif
- do_kernel_restart(command);
- mdelay(1000);
- pr_emerg("Reboot failed -- System halted\n");
- local_irq_disable();
- while (1);
- }
- void machine_halt(void)
- {
- if (_machine_halt)
- _machine_halt();
- #ifdef CONFIG_SMP
- preempt_disable();
- smp_send_stop();
- #endif
- local_irq_disable();
- while (1);
- }
- void machine_power_off(void)
- {
- if (pm_power_off)
- pm_power_off();
- #ifdef CONFIG_SMP
- preempt_disable();
- smp_send_stop();
- #endif
- local_irq_disable();
- while (1);
- }
|