summaryrefslogtreecommitdiff
path: root/arch/s390/kernel/reipl_diag.c
diff options
context:
space:
mode:
authorVolker Sameske <sameske@de.ibm.com>2005-09-17 06:27:35 +0400
committerLinus Torvalds <torvalds@g5.osdl.org>2005-09-17 22:49:59 +0400
commitc782268be8892962a1ae2c09a2e87e7849454ef1 (patch)
treeb1bdba4a96894c8cc6f07f8ec57716dbec5b2854 /arch/s390/kernel/reipl_diag.c
parentb7ae9dd80a3ecf070ea0c5fe1d405cd7687d6c51 (diff)
downloadlinux-c782268be8892962a1ae2c09a2e87e7849454ef1.tar.xz
[PATCH] s390: diag 0x308 reipl
Add code to support the re-IPL method using diagnose 0x308. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/s390/kernel/reipl_diag.c')
-rw-r--r--arch/s390/kernel/reipl_diag.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/s390/kernel/reipl_diag.c b/arch/s390/kernel/reipl_diag.c
new file mode 100644
index 000000000000..83cb42bc0b76
--- /dev/null
+++ b/arch/s390/kernel/reipl_diag.c
@@ -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" );
+}