40 lines
871 B
C
40 lines
871 B
C
|
/*
|
||
|
* 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" );
|
||
|
}
|