48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*
 | |
|  * sie64a.S - low level sie call
 | |
|  *
 | |
|  * Copyright IBM Corp. 2008
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License (version 2 only)
 | |
|  * as published by the Free Software Foundation.
 | |
|  *
 | |
|  *    Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
 | |
|  */
 | |
| 
 | |
| #include <linux/errno.h>
 | |
| #include <asm/asm-offsets.h>
 | |
| 
 | |
| SP_R5 =	5 * 8	# offset into stackframe
 | |
| SP_R6 =	6 * 8
 | |
| 
 | |
| /*
 | |
|  * sie64a calling convention:
 | |
|  * %r2 pointer to sie control block
 | |
|  * %r3 guest register save area
 | |
|  */
 | |
| 	.globl	sie64a
 | |
| sie64a:
 | |
| 	lgr	%r5,%r3
 | |
| 	stmg	%r5,%r14,SP_R5(%r15)	# save register on entry
 | |
| 	lgr	%r14,%r2		# pointer to sie control block
 | |
| 	lmg	%r0,%r13,0(%r3)		# load guest gprs 0-13
 | |
| sie_inst:
 | |
| 	sie	0(%r14)
 | |
| 	lg	%r14,SP_R5(%r15)
 | |
| 	stmg	%r0,%r13,0(%r14)	# save guest gprs 0-13
 | |
| 	lghi	%r2,0
 | |
| 	lmg	%r6,%r14,SP_R6(%r15)
 | |
| 	br	%r14
 | |
| 
 | |
| sie_err:
 | |
| 	lg	%r14,SP_R5(%r15)
 | |
| 	stmg	%r0,%r13,0(%r14)	# save guest gprs 0-13
 | |
| 	lghi	%r2,-EFAULT
 | |
| 	lmg	%r6,%r14,SP_R6(%r15)
 | |
| 	br	%r14
 | |
| 
 | |
| 	.section __ex_table,"a"
 | |
| 	.quad	sie_inst,sie_err
 | |
| 	.previous
 |