x86, realmode: don't copy real_mode_header
[cascardo/linux.git] / arch / x86 / kernel / tboot.c
index e2410e2..65adda4 100644 (file)
@@ -32,7 +32,7 @@
 #include <linux/mm.h>
 #include <linux/tboot.h>
 
-#include <asm/trampoline.h>
+#include <asm/realmode.h>
 #include <asm/processor.h>
 #include <asm/bootparam.h>
 #include <asm/pgtable.h>
@@ -201,7 +201,8 @@ static int tboot_setup_sleep(void)
                add_mac_region(e820.map[i].addr, e820.map[i].size);
        }
 
-       tboot->acpi_sinfo.kernel_s3_resume_vector = acpi_wakeup_address;
+       tboot->acpi_sinfo.kernel_s3_resume_vector =
+               real_mode_header->wakeup_start;
 
        return 0;
 }
@@ -272,7 +273,7 @@ static void tboot_copy_fadt(const struct acpi_table_fadt *fadt)
                offsetof(struct acpi_table_facs, firmware_waking_vector);
 }
 
-void tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control)
+static int tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control)
 {
        static u32 acpi_shutdown_map[ACPI_S_STATE_COUNT] = {
                /* S0,1,2: */ -1, -1, -1,
@@ -281,7 +282,7 @@ void tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control)
                /* S5: */ TB_SHUTDOWN_S5 };
 
        if (!tboot_enabled())
-               return;
+               return 0;
 
        tboot_copy_fadt(&acpi_gbl_FADT);
        tboot->acpi_sinfo.pm1a_cnt_val = pm1a_control;
@@ -292,10 +293,11 @@ void tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control)
        if (sleep_state >= ACPI_S_STATE_COUNT ||
            acpi_shutdown_map[sleep_state] == -1) {
                pr_warning("unsupported sleep state 0x%x\n", sleep_state);
-               return;
+               return -1;
        }
 
        tboot_shutdown(acpi_shutdown_map[sleep_state]);
+       return 0;
 }
 
 static atomic_t ap_wfs_count;
@@ -345,6 +347,8 @@ static __init int tboot_late_init(void)
 
        atomic_set(&ap_wfs_count, 0);
        register_hotcpu_notifier(&tboot_cpu_notifier);
+
+       acpi_os_set_prepare_sleep(&tboot_sleep);
        return 0;
 }