Merge master.kernel.org:/pub/scm/linux/kernel/git/herbert/crypto-2.6
[linux-drm-fsl-dcu.git] / arch / powerpc / platforms / ps3 / setup.c
index 13d669a8ecae6d00e25fc816d163e711db8cb7f7..c9894933084f212131831e5fedd2a335200e81ba 100644 (file)
 #define DBG(fmt...) do{if(0)printk(fmt);}while(0)
 #endif
 
+#if !defined(CONFIG_SMP)
+static void smp_send_stop(void) {}
+#endif
+
 int ps3_get_firmware_version(union ps3_firmware_version *v)
 {
        int result = lv1_get_version_info(&v->raw);
@@ -66,22 +70,35 @@ static void ps3_power_save(void)
        lv1_pause(0);
 }
 
+static void ps3_restart(char *cmd)
+{
+       DBG("%s:%d cmd '%s'\n", __func__, __LINE__, cmd);
+
+       smp_send_stop();
+       ps3_sys_manager_restart(); /* never returns */
+}
+
+static void ps3_power_off(void)
+{
+       DBG("%s:%d\n", __func__, __LINE__);
+
+       smp_send_stop();
+       ps3_sys_manager_power_off(); /* never returns */
+}
+
 static void ps3_panic(char *str)
 {
        DBG("%s:%d %s\n", __func__, __LINE__, str);
 
-#ifdef CONFIG_SMP
        smp_send_stop();
-#endif
        printk("\n");
        printk("   System does not reboot automatically.\n");
        printk("   Please press POWER button.\n");
        printk("\n");
 
-       for (;;) ;
+       while(1);
 }
 
-
 static void prealloc(struct ps3_prealloc *p)
 {
        if (!p->size)
@@ -120,6 +137,12 @@ early_param("ps3fb", early_parse_ps3fb);
 #define prealloc_ps3fb_videomemory()   do { } while (0)
 #endif
 
+static int ps3_set_dabr(u64 dabr)
+{
+       enum {DABR_USER = 1, DABR_KERNEL = 2,};
+
+       return lv1_set_dabr(dabr, DABR_KERNEL | DABR_USER) ? -1 : 0;
+}
 
 static void __init ps3_setup_arch(void)
 {
@@ -217,8 +240,11 @@ define_machine(ps3) {
        .get_boot_time                  = ps3_get_boot_time,
        .set_rtc_time                   = ps3_set_rtc_time,
        .get_rtc_time                   = ps3_get_rtc_time,
+       .set_dabr                       = ps3_set_dabr,
        .calibrate_decr                 = ps3_calibrate_decr,
        .progress                       = ps3_progress,
+       .restart                        = ps3_restart,
+       .power_off                      = ps3_power_off,
 #if defined(CONFIG_KEXEC)
        .kexec_cpu_down                 = ps3_kexec_cpu_down,
        .machine_kexec                  = ps3_machine_kexec,