提交 edf2b139 编写于 作者: R Robin Holt 提交者: Linus Torvalds

reboot: x86: prepare reboot_mode for moving to generic kernel code

Prepare for the moving the parsing of reboot= to the generic kernel code
by making reboot_mode into a more generic form.
Signed-off-by: NRobin Holt <holt@sgi.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Miguel Boton <mboton.lkml@gmail.com>
Cc: Russ Anderson <rja@sgi.com>
Cc: Robin Holt <holt@sgi.com>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
Acked-by: NIngo Molnar <mingo@kernel.org>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 972ee83d
...@@ -36,7 +36,7 @@ void (*pm_power_off)(void); ...@@ -36,7 +36,7 @@ void (*pm_power_off)(void);
EXPORT_SYMBOL(pm_power_off); EXPORT_SYMBOL(pm_power_off);
static const struct desc_ptr no_idt = {}; static const struct desc_ptr no_idt = {};
static int reboot_mode; static enum reboot_mode reboot_mode;
enum reboot_type reboot_type = BOOT_ACPI; enum reboot_type reboot_type = BOOT_ACPI;
int reboot_force; int reboot_force;
...@@ -88,11 +88,11 @@ static int __init reboot_setup(char *str) ...@@ -88,11 +88,11 @@ static int __init reboot_setup(char *str)
switch (*str) { switch (*str) {
case 'w': case 'w':
reboot_mode = 0x1234; reboot_mode = REBOOT_WARM;
break; break;
case 'c': case 'c':
reboot_mode = 0; reboot_mode = REBOOT_COLD;
break; break;
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
...@@ -536,6 +536,7 @@ static void native_machine_emergency_restart(void) ...@@ -536,6 +536,7 @@ static void native_machine_emergency_restart(void)
int i; int i;
int attempt = 0; int attempt = 0;
int orig_reboot_type = reboot_type; int orig_reboot_type = reboot_type;
unsigned short mode;
if (reboot_emergency) if (reboot_emergency)
emergency_vmx_disable_all(); emergency_vmx_disable_all();
...@@ -543,7 +544,8 @@ static void native_machine_emergency_restart(void) ...@@ -543,7 +544,8 @@ static void native_machine_emergency_restart(void)
tboot_shutdown(TB_SHUTDOWN_REBOOT); tboot_shutdown(TB_SHUTDOWN_REBOOT);
/* Tell the BIOS if we want cold or warm reboot */ /* Tell the BIOS if we want cold or warm reboot */
*((unsigned short *)__va(0x472)) = reboot_mode; mode = reboot_mode == REBOOT_WARM ? 0x1234 : 0;
*((unsigned short *)__va(0x472)) = mode;
for (;;) { for (;;) {
/* Could also try the reset bit in the Hammer NB */ /* Could also try the reset bit in the Hammer NB */
...@@ -585,7 +587,7 @@ static void native_machine_emergency_restart(void) ...@@ -585,7 +587,7 @@ static void native_machine_emergency_restart(void)
case BOOT_EFI: case BOOT_EFI:
if (efi_enabled(EFI_RUNTIME_SERVICES)) if (efi_enabled(EFI_RUNTIME_SERVICES))
efi.reset_system(reboot_mode ? efi.reset_system(reboot_mode == REBOOT_WARM ?
EFI_RESET_WARM : EFI_RESET_WARM :
EFI_RESET_COLD, EFI_RESET_COLD,
EFI_SUCCESS, 0, NULL); EFI_SUCCESS, 0, NULL);
......
...@@ -10,6 +10,11 @@ ...@@ -10,6 +10,11 @@
#define SYS_HALT 0x0002 /* Notify of system halt */ #define SYS_HALT 0x0002 /* Notify of system halt */
#define SYS_POWER_OFF 0x0003 /* Notify of system power off */ #define SYS_POWER_OFF 0x0003 /* Notify of system power off */
enum reboot_mode {
REBOOT_COLD = 0,
REBOOT_WARM,
};
extern int register_reboot_notifier(struct notifier_block *); extern int register_reboot_notifier(struct notifier_block *);
extern int unregister_reboot_notifier(struct notifier_block *); extern int unregister_reboot_notifier(struct notifier_block *);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册