diff options
author | djm@kirby.fc.hp.com <djm@kirby.fc.hp.com> | 2005-06-17 18:28:39 +0000 |
---|---|---|
committer | djm@kirby.fc.hp.com <djm@kirby.fc.hp.com> | 2005-06-17 18:28:39 +0000 |
commit | 335054d1f8ce3da091e3380bad45a2ec9bc38924 (patch) | |
tree | 60ba630eb3fb8f9aceda4c4ff4d181ccb6833018 | |
parent | 2abc242e40f8e2980bd7b82c1a88ebaff66b2f4b (diff) | |
download | xen-335054d1f8ce3da091e3380bad45a2ec9bc38924.tar.gz xen-335054d1f8ce3da091e3380bad45a2ec9bc38924.tar.bz2 xen-335054d1f8ce3da091e3380bad45a2ec9bc38924.zip |
bitkeeper revision 1.1713.2.7 (42b31657Mivyv5FYyhd03rBZIeiXBw)
More hyperprivop stuff
Signed-off-by: Dan Magenheimer <dan.magenheimer@hp.com>
-rw-r--r-- | xen/arch/ia64/hyperprivop.S | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/xen/arch/ia64/hyperprivop.S b/xen/arch/ia64/hyperprivop.S index 2adad6ce22..34e36783d1 100644 --- a/xen/arch/ia64/hyperprivop.S +++ b/xen/arch/ia64/hyperprivop.S @@ -66,6 +66,10 @@ GLOBAL_ENTRY(fast_hyperprivop) cmp.eq p7,p6=XEN_HYPER_RFI,r17 (p7) br.sptk.many hyper_rfi;; + // HYPERPRIVOP_GET_IVR? + cmp.eq p7,p6=XEN_HYPER_GET_IVR,r17 +(p7) br.sptk.many hyper_get_ivr;; + cmp.ne p7,p0=r20,r0 (p7) br.spnt.many dispatch_break_fault ;; @@ -589,3 +593,35 @@ ENTRY(hyper_set_tpr) rfi ;; END(hyper_set_tpr) + +ENTRY(hyper_get_ivr) + // when we get to here r20=~=interrupts pending + cmp.ne p7,p0=r20,r0 +(p7) br.spnt.many dispatch_break_fault ;; +#ifdef FAST_HYPERPRIVOP_CNT + movl r20=fast_hyperpriv_cnt+(8*XEN_HYPER_GET_IVR);; + ld8 r21=[r20];; + adds r21=1,r21;; + st8 [r20]=r21;; +#endif +// if we get to here, there are no interrupts pending so we +// force pending to zero and return SPURIOUS_VECTOR + adds r20=XSI_PEND_OFS-XSI_PSR_IC_OFS,r18 ;; + st4 [r20]=r0;; + mov r8=15;; + mov r24=cr.ipsr + mov r25=cr.iip;; + extr.u r26=r24,41,2 ;; + cmp.eq p6,p7=2,r26 ;; +(p6) mov r26=0 +(p6) adds r25=16,r25 +(p7) adds r26=1,r26 + ;; + dep r24=r26,r24,41,2 + ;; + mov cr.ipsr=r24 + mov cr.iip=r25 + mov pr=r31,-1 ;; + rfi + ;; +END(hyper_get_ivr) |