|
@@ -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);
|