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: Robin 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: Ingo Molnar <mingo@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
972ee83df8
commit
edf2b13946
|
@ -36,7 +36,7 @@ void (*pm_power_off)(void);
|
|||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
static const struct desc_ptr no_idt = {};
|
||||
static int reboot_mode;
|
||||
static enum reboot_mode reboot_mode;
|
||||
enum reboot_type reboot_type = BOOT_ACPI;
|
||||
int reboot_force;
|
||||
|
||||
|
@ -88,11 +88,11 @@ static int __init reboot_setup(char *str)
|
|||
|
||||
switch (*str) {
|
||||
case 'w':
|
||||
reboot_mode = 0x1234;
|
||||
reboot_mode = REBOOT_WARM;
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
reboot_mode = 0;
|
||||
reboot_mode = REBOOT_COLD;
|
||||
break;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -536,6 +536,7 @@ static void native_machine_emergency_restart(void)
|
|||
int i;
|
||||
int attempt = 0;
|
||||
int orig_reboot_type = reboot_type;
|
||||
unsigned short mode;
|
||||
|
||||
if (reboot_emergency)
|
||||
emergency_vmx_disable_all();
|
||||
|
@ -543,7 +544,8 @@ static void native_machine_emergency_restart(void)
|
|||
tboot_shutdown(TB_SHUTDOWN_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 (;;) {
|
||||
/* Could also try the reset bit in the Hammer NB */
|
||||
|
@ -585,7 +587,7 @@ static void native_machine_emergency_restart(void)
|
|||
|
||||
case BOOT_EFI:
|
||||
if (efi_enabled(EFI_RUNTIME_SERVICES))
|
||||
efi.reset_system(reboot_mode ?
|
||||
efi.reset_system(reboot_mode == REBOOT_WARM ?
|
||||
EFI_RESET_WARM :
|
||||
EFI_RESET_COLD,
|
||||
EFI_SUCCESS, 0, NULL);
|
||||
|
|
|
@ -10,6 +10,11 @@
|
|||
#define SYS_HALT 0x0002 /* Notify of system halt */
|
||||
#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 unregister_reboot_notifier(struct notifier_block *);
|
||||
|
||||
|
|
Loading…
Reference in New Issue