40 lines
874 B
C
40 lines
874 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 CONFIG_64BIT
|
|
" .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" );
|
|
}
|