forked from mirrors/linux
		
	Current deficiencies: 1) No HMAC hash support yet. 2) Although the algs are registered as ASYNC they always run synchronously. Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
		
			
				
	
	
		
			95 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/* n2_asm.S: Hypervisor calls for NCS support.
 | 
						|
 *
 | 
						|
 * Copyright (C) 2009 David S. Miller <davem@davemloft.net>
 | 
						|
 */
 | 
						|
 | 
						|
#include <linux/linkage.h>
 | 
						|
#include <asm/hypervisor.h>
 | 
						|
#include "n2_core.h"
 | 
						|
 | 
						|
	/* o0: queue type
 | 
						|
	 * o1: RA of queue
 | 
						|
	 * o2: num entries in queue
 | 
						|
	 * o3: address of queue handle return
 | 
						|
	 */
 | 
						|
ENTRY(sun4v_ncs_qconf)
 | 
						|
	mov	HV_FAST_NCS_QCONF, %o5
 | 
						|
	ta	HV_FAST_TRAP
 | 
						|
	stx	%o1, [%o3]
 | 
						|
	retl
 | 
						|
	 nop
 | 
						|
ENDPROC(sun4v_ncs_qconf)
 | 
						|
 | 
						|
	/* %o0: queue handle
 | 
						|
	 * %o1: address of queue type return
 | 
						|
	 * %o2: address of queue base address return
 | 
						|
	 * %o3: address of queue num entries return
 | 
						|
	 */
 | 
						|
ENTRY(sun4v_ncs_qinfo)
 | 
						|
	mov	%o1, %g1
 | 
						|
	mov	%o2, %g2
 | 
						|
	mov	%o3, %g3
 | 
						|
	mov	HV_FAST_NCS_QINFO, %o5
 | 
						|
	ta	HV_FAST_TRAP
 | 
						|
	stx	%o1, [%g1]
 | 
						|
	stx	%o2, [%g2]
 | 
						|
	stx	%o3, [%g3]
 | 
						|
	retl
 | 
						|
	 nop
 | 
						|
ENDPROC(sun4v_ncs_qinfo)
 | 
						|
 | 
						|
	/* %o0: queue handle
 | 
						|
	 * %o1: address of head offset return
 | 
						|
	 */
 | 
						|
ENTRY(sun4v_ncs_gethead)
 | 
						|
	mov	%o1, %o2
 | 
						|
	mov	HV_FAST_NCS_GETHEAD, %o5
 | 
						|
	ta	HV_FAST_TRAP
 | 
						|
	stx	%o1, [%o2]
 | 
						|
	retl
 | 
						|
	 nop
 | 
						|
ENDPROC(sun4v_ncs_gethead)
 | 
						|
 | 
						|
	/* %o0: queue handle
 | 
						|
	 * %o1: address of tail offset return
 | 
						|
	 */
 | 
						|
ENTRY(sun4v_ncs_gettail)
 | 
						|
	mov	%o1, %o2
 | 
						|
	mov	HV_FAST_NCS_GETTAIL, %o5
 | 
						|
	ta	HV_FAST_TRAP
 | 
						|
	stx	%o1, [%o2]
 | 
						|
	retl
 | 
						|
	 nop
 | 
						|
ENDPROC(sun4v_ncs_gettail)
 | 
						|
 | 
						|
	/* %o0: queue handle
 | 
						|
	 * %o1: new tail offset
 | 
						|
	 */
 | 
						|
ENTRY(sun4v_ncs_settail)
 | 
						|
	mov	HV_FAST_NCS_SETTAIL, %o5
 | 
						|
	ta	HV_FAST_TRAP
 | 
						|
	retl
 | 
						|
	 nop
 | 
						|
ENDPROC(sun4v_ncs_settail)
 | 
						|
 | 
						|
	/* %o0: queue handle
 | 
						|
	 * %o1: address of devino return
 | 
						|
	 */
 | 
						|
ENTRY(sun4v_ncs_qhandle_to_devino)
 | 
						|
	mov	%o1, %o2
 | 
						|
	mov	HV_FAST_NCS_QHANDLE_TO_DEVINO, %o5
 | 
						|
	ta	HV_FAST_TRAP
 | 
						|
	stx	%o1, [%o2]
 | 
						|
	retl
 | 
						|
	 nop
 | 
						|
ENDPROC(sun4v_ncs_qhandle_to_devino)
 | 
						|
 | 
						|
	/* %o0: queue handle
 | 
						|
	 * %o1: new head offset
 | 
						|
	 */
 | 
						|
ENTRY(sun4v_ncs_sethead_marker)
 | 
						|
	mov	HV_FAST_NCS_SETHEAD_MARKER, %o5
 | 
						|
	ta	HV_FAST_TRAP
 | 
						|
	retl
 | 
						|
	 nop
 | 
						|
ENDPROC(sun4v_ncs_sethead_marker)
 |