Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
[deliverable/linux.git] / arch / powerpc / kernel / rtas.c
index 13496f3198554fbe1bb6c339fd1f71cefa8b8d25..17dc79198515d8f61f0879b10e9535dbbe5be9ab 100644 (file)
@@ -593,9 +593,31 @@ out:
 static int rtas_ibm_suspend_me(struct rtas_args *args)
 {
        int i;
+       long state;
+       long rc;
+       unsigned long dummy;
 
        struct rtas_suspend_me_data data;
 
+       /* Make sure the state is valid */
+       rc = plpar_hcall(H_VASI_STATE,
+                        ((u64)args->args[0] << 32) | args->args[1],
+                        0, 0, 0,
+                        &state, &dummy, &dummy);
+
+       if (rc) {
+               printk(KERN_ERR "rtas_ibm_suspend_me: vasi_state returned %ld\n",rc);
+               return rc;
+       } else if (state == H_VASI_ENABLED) {
+               args->args[args->nargs] = RTAS_NOT_SUSPENDABLE;
+               return 0;
+       } else if (state != H_VASI_SUSPENDING) {
+               printk(KERN_ERR "rtas_ibm_suspend_me: vasi_state returned state %ld\n",
+                      state);
+               args->args[args->nargs] = -1;
+               return 0;
+       }
+
        data.waiting = 1;
        data.args = args;
 
@@ -775,6 +797,7 @@ EXPORT_SYMBOL(rtas_call);
 EXPORT_SYMBOL(rtas_data_buf);
 EXPORT_SYMBOL(rtas_data_buf_lock);
 EXPORT_SYMBOL(rtas_busy_delay_time);
+EXPORT_SYMBOL(rtas_busy_delay);
 EXPORT_SYMBOL(rtas_get_sensor);
 EXPORT_SYMBOL(rtas_get_power_level);
 EXPORT_SYMBOL(rtas_set_power_level);
This page took 0.02681 seconds and 5 git commands to generate.