ia64/xen-unstable

changeset 5493:9ae40d2e6c1d

bitkeeper revision 1.1713.2.7 (42b31657Mivyv5FYyhd03rBZIeiXBw)

More hyperprivop stuff
Signed-off-by: Dan Magenheimer <dan.magenheimer@hp.com>
author djm@kirby.fc.hp.com
date Fri Jun 17 18:28:39 2005 +0000 (2005-06-17)
parents 5fc176d2b3a9
children bb1b5a578752
files xen/arch/ia64/hyperprivop.S
line diff
     1.1 --- a/xen/arch/ia64/hyperprivop.S	Fri Jun 17 17:17:45 2005 +0000
     1.2 +++ b/xen/arch/ia64/hyperprivop.S	Fri Jun 17 18:28:39 2005 +0000
     1.3 @@ -66,6 +66,10 @@ 1:	// when we get to here r20=~=interrup
     1.4  	cmp.eq p7,p6=XEN_HYPER_RFI,r17
     1.5  (p7)	br.sptk.many hyper_rfi;;
     1.6  
     1.7 +	// HYPERPRIVOP_GET_IVR?
     1.8 +	cmp.eq p7,p6=XEN_HYPER_GET_IVR,r17
     1.9 +(p7)	br.sptk.many hyper_get_ivr;;
    1.10 +
    1.11  	cmp.ne p7,p0=r20,r0
    1.12  (p7)	br.spnt.many dispatch_break_fault ;;
    1.13  
    1.14 @@ -589,3 +593,35 @@ ENTRY(hyper_set_tpr)
    1.15  	rfi
    1.16  	;;
    1.17  END(hyper_set_tpr)
    1.18 +
    1.19 +ENTRY(hyper_get_ivr)
    1.20 +	// when we get to here r20=~=interrupts pending
    1.21 +	cmp.ne p7,p0=r20,r0
    1.22 +(p7)	br.spnt.many dispatch_break_fault ;;
    1.23 +#ifdef FAST_HYPERPRIVOP_CNT
    1.24 +	movl r20=fast_hyperpriv_cnt+(8*XEN_HYPER_GET_IVR);;
    1.25 +	ld8 r21=[r20];;
    1.26 +	adds r21=1,r21;;
    1.27 +	st8 [r20]=r21;;
    1.28 +#endif
    1.29 +// if we get to here, there are no interrupts pending so we
    1.30 +// force pending to zero and return SPURIOUS_VECTOR
    1.31 +	adds r20=XSI_PEND_OFS-XSI_PSR_IC_OFS,r18 ;;
    1.32 +	st4 [r20]=r0;;
    1.33 +	mov r8=15;;
    1.34 +	mov r24=cr.ipsr
    1.35 +	mov r25=cr.iip;;
    1.36 +	extr.u r26=r24,41,2 ;;
    1.37 +	cmp.eq p6,p7=2,r26 ;;
    1.38 +(p6)	mov r26=0
    1.39 +(p6)	adds r25=16,r25
    1.40 +(p7)	adds r26=1,r26
    1.41 +	;;
    1.42 +	dep r24=r26,r24,41,2
    1.43 +	;;
    1.44 +	mov cr.ipsr=r24
    1.45 +	mov cr.iip=r25
    1.46 +	mov pr=r31,-1 ;;
    1.47 +	rfi
    1.48 +	;;
    1.49 +END(hyper_get_ivr)