| Heiko Carstens | b0c632d | 2008-03-25 18:47:20 +0100 | [diff] [blame] | 1 | /* | 
 | 2 |  * sie64a.S - low level sie call | 
 | 3 |  * | 
 | 4 |  * Copyright IBM Corp. 2008 | 
 | 5 |  * | 
 | 6 |  * This program is free software; you can redistribute it and/or modify | 
 | 7 |  * it under the terms of the GNU General Public License (version 2 only) | 
 | 8 |  * as published by the Free Software Foundation. | 
 | 9 |  * | 
 | 10 |  *    Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> | 
 | 11 |  */ | 
 | 12 |  | 
 | 13 | #include <linux/errno.h> | 
 | 14 | #include <asm/asm-offsets.h> | 
 | 15 |  | 
 | 16 | SP_R5 =	5 * 8	# offset into stackframe | 
 | 17 | SP_R6 =	6 * 8 | 
 | 18 |  | 
 | 19 | /* | 
 | 20 |  * sie64a calling convention: | 
 | 21 |  * %r2 pointer to sie control block | 
 | 22 |  * %r3 guest register save area | 
 | 23 |  */ | 
 | 24 | 	.globl	sie64a | 
 | 25 | sie64a: | 
 | 26 | 	lgr	%r5,%r3 | 
 | 27 | 	stmg	%r5,%r14,SP_R5(%r15)	# save register on entry | 
 | 28 | 	lgr	%r14,%r2		# pointer to sie control block | 
 | 29 | 	lmg	%r0,%r13,0(%r3)		# load guest gprs 0-13 | 
 | 30 | sie_inst: | 
 | 31 | 	sie	0(%r14) | 
 | 32 | 	lg	%r14,SP_R5(%r15) | 
 | 33 | 	stmg	%r0,%r13,0(%r14)	# save guest gprs 0-13 | 
 | 34 | 	lghi	%r2,0 | 
 | 35 | 	lmg	%r6,%r14,SP_R6(%r15) | 
 | 36 | 	br	%r14 | 
 | 37 |  | 
 | 38 | sie_err: | 
 | 39 | 	lg	%r14,SP_R5(%r15) | 
 | 40 | 	stmg	%r0,%r13,0(%r14)	# save guest gprs 0-13 | 
 | 41 | 	lghi	%r2,-EFAULT | 
 | 42 | 	lmg	%r6,%r14,SP_R6(%r15) | 
 | 43 | 	br	%r14 | 
 | 44 |  | 
 | 45 | 	.section __ex_table,"a" | 
 | 46 | 	.quad	sie_inst,sie_err | 
 | 47 | 	.previous |