x86 / tboot / ACPI: Fail extended mode reduced hardware sleep
[cascardo/linux.git] / arch / x86 / kernel / tboot.c
index 3ff42d2..91a4496 100644 (file)
@@ -301,6 +301,15 @@ static int tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control)
        return 0;
 }
 
+static int tboot_extended_sleep(u8 sleep_state, u32 val_a, u32 val_b)
+{
+       if (!tboot_enabled())
+               return 0;
+
+       pr_warning("tboot is not able to suspend on platforms with reduced hardware sleep (ACPIv5)");
+       return -ENODEV;
+}
+
 static atomic_t ap_wfs_count;
 
 static int tboot_wait_for_aps(int num_aps)
@@ -320,8 +329,8 @@ static int tboot_wait_for_aps(int num_aps)
        return !(atomic_read((atomic_t *)&tboot->num_in_wfs) == num_aps);
 }
 
-static int __cpuinit tboot_cpu_callback(struct notifier_block *nfb,
-                       unsigned long action, void *hcpu)
+static int tboot_cpu_callback(struct notifier_block *nfb, unsigned long action,
+                             void *hcpu)
 {
        switch (action) {
        case CPU_DYING:
@@ -334,7 +343,7 @@ static int __cpuinit tboot_cpu_callback(struct notifier_block *nfb,
        return NOTIFY_OK;
 }
 
-static struct notifier_block tboot_cpu_notifier __cpuinitdata =
+static struct notifier_block tboot_cpu_notifier =
 {
        .notifier_call = tboot_cpu_callback,
 };
@@ -422,6 +431,7 @@ static __init int tboot_late_init(void)
 #endif
 
        acpi_os_set_prepare_sleep(&tboot_sleep);
+       acpi_os_set_prepare_extended_sleep(&tboot_extended_sleep);
        return 0;
 }