Volker Sameske | c782268 | 2005-09-16 19:27:35 -0700 | [diff] [blame] | 1 | /* |
| 2 | * This file contains the implementation of the |
| 3 | * Linux re-IPL support |
| 4 | * |
| 5 | * (C) Copyright IBM Corp. 2005 |
| 6 | * |
| 7 | * Author(s): Volker Sameske (sameske@de.ibm.com) |
| 8 | * |
| 9 | */ |
| 10 | |
| 11 | #include <linux/kernel.h> |
| 12 | |
| 13 | static unsigned int reipl_diag_rc1; |
| 14 | static unsigned int reipl_diag_rc2; |
| 15 | |
| 16 | /* |
| 17 | * re-IPL the system using the last used IPL parameters |
| 18 | */ |
| 19 | void reipl_diag(void) |
| 20 | { |
| 21 | asm volatile ( |
| 22 | " la %%r4,0\n" |
| 23 | " la %%r5,0\n" |
| 24 | " diag %%r4,%2,0x308\n" |
| 25 | "0:\n" |
| 26 | " st %%r4,%0\n" |
| 27 | " st %%r5,%1\n" |
| 28 | ".section __ex_table,\"a\"\n" |
Martin Schwidefsky | 347a8dc | 2006-01-06 00:19:28 -0800 | [diff] [blame] | 29 | #ifdef CONFIG_64BIT |
Volker Sameske | c782268 | 2005-09-16 19:27:35 -0700 | [diff] [blame] | 30 | " .align 8\n" |
| 31 | " .quad 0b, 0b\n" |
| 32 | #else |
| 33 | " .align 4\n" |
| 34 | " .long 0b, 0b\n" |
| 35 | #endif |
| 36 | ".previous\n" |
| 37 | : "=m" (reipl_diag_rc1), "=m" (reipl_diag_rc2) |
| 38 | : "d" (3) : "cc", "4", "5" ); |
| 39 | } |