aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/reboot_64.c
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@google.com>2008-01-30 07:31:17 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:31:17 -0500
commitfa20efd2fcd9349770113c6f72fc76ce437b62f5 (patch)
tree15600837350257043966fe7b8d8cf0d1d8badd00 /arch/x86/kernel/reboot_64.c
parent5f561d3be8f0db54f9b4fc5cb5db05343f372431 (diff)
x86: add ACPI reboot option
Add the ability to reboot an x86_64 based machine using the RESET_REG in the FADT ACPI table. Signed-off-by: Aaron Durbin <adurbin@google.com> Cc: Len Brown <lenb@kernel.org> Cc: Andi Kleen <ak@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/kernel/reboot_64.c')
-rw-r--r--arch/x86/kernel/reboot_64.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/x86/kernel/reboot_64.c b/arch/x86/kernel/reboot_64.c
index 53620a92a8fd..307f996a3933 100644
--- a/arch/x86/kernel/reboot_64.c
+++ b/arch/x86/kernel/reboot_64.c
@@ -9,6 +9,7 @@
9#include <linux/pm.h> 9#include <linux/pm.h>
10#include <linux/kdebug.h> 10#include <linux/kdebug.h>
11#include <linux/sched.h> 11#include <linux/sched.h>
12#include <acpi/reboot.h>
12#include <asm/io.h> 13#include <asm/io.h>
13#include <asm/delay.h> 14#include <asm/delay.h>
14#include <asm/desc.h> 15#include <asm/desc.h>
@@ -29,7 +30,8 @@ EXPORT_SYMBOL(pm_power_off);
29static long no_idt[3]; 30static long no_idt[3];
30static enum { 31static enum {
31 BOOT_TRIPLE = 't', 32 BOOT_TRIPLE = 't',
32 BOOT_KBD = 'k' 33 BOOT_KBD = 'k',
34 BOOT_ACPI = 'a'
33} reboot_type = BOOT_KBD; 35} reboot_type = BOOT_KBD;
34static int reboot_mode = 0; 36static int reboot_mode = 0;
35int reboot_force; 37int reboot_force;
@@ -39,6 +41,7 @@ int reboot_force;
39 cold Set the cold reboot flag 41 cold Set the cold reboot flag
40 triple Force a triple fault (init) 42 triple Force a triple fault (init)
41 kbd Use the keyboard controller. cold reset (default) 43 kbd Use the keyboard controller. cold reset (default)
44 acpi Use the RESET_REG in the FADT
42 force Avoid anything that could hang. 45 force Avoid anything that could hang.
43 */ 46 */
44static int __init reboot_setup(char *str) 47static int __init reboot_setup(char *str)
@@ -54,6 +57,7 @@ static int __init reboot_setup(char *str)
54 break; 57 break;
55 58
56 case 't': 59 case 't':
60 case 'a':
57 case 'b': 61 case 'b':
58 case 'k': 62 case 'k':
59 reboot_type = *str; 63 reboot_type = *str;
@@ -146,6 +150,11 @@ void machine_emergency_restart(void)
146 150
147 reboot_type = BOOT_KBD; 151 reboot_type = BOOT_KBD;
148 break; 152 break;
153
154 case BOOT_ACPI:
155 acpi_reboot();
156 reboot_type = BOOT_KBD;
157 break;
149 } 158 }
150 } 159 }
151} 160}