mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 14:19:16 +00:00
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
2 changed files with 12 additions and 5 deletions
|
@ -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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
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 @@
|
||||||
#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 *);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue