|
@@ -0,0 +1,39 @@
|
|
|
+/*
|
|
|
+ * This file contains the implementation of the
|
|
|
+ * Linux re-IPL support
|
|
|
+ *
|
|
|
+ * (C) Copyright IBM Corp. 2005
|
|
|
+ *
|
|
|
+ * Author(s): Volker Sameske (sameske@de.ibm.com)
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+#include <linux/kernel.h>
|
|
|
+
|
|
|
+static unsigned int reipl_diag_rc1;
|
|
|
+static unsigned int reipl_diag_rc2;
|
|
|
+
|
|
|
+/*
|
|
|
+ * re-IPL the system using the last used IPL parameters
|
|
|
+ */
|
|
|
+void reipl_diag(void)
|
|
|
+{
|
|
|
+ asm volatile (
|
|
|
+ " la %%r4,0\n"
|
|
|
+ " la %%r5,0\n"
|
|
|
+ " diag %%r4,%2,0x308\n"
|
|
|
+ "0:\n"
|
|
|
+ " st %%r4,%0\n"
|
|
|
+ " st %%r5,%1\n"
|
|
|
+ ".section __ex_table,\"a\"\n"
|
|
|
+#ifdef __s390x__
|
|
|
+ " .align 8\n"
|
|
|
+ " .quad 0b, 0b\n"
|
|
|
+#else
|
|
|
+ " .align 4\n"
|
|
|
+ " .long 0b, 0b\n"
|
|
|
+#endif
|
|
|
+ ".previous\n"
|
|
|
+ : "=m" (reipl_diag_rc1), "=m" (reipl_diag_rc2)
|
|
|
+ : "d" (3) : "cc", "4", "5" );
|
|
|
+}
|