1 #ifndef _ASM_IA64_DELAY_H 2 #define _ASM_IA64_DELAY_H 3 4 /* 5 * Delay routines using a pre-computed "cycles/usec" value. 6 * 7 * Copyright (C) 1998, 1999 Hewlett-Packard Co 8 * David Mosberger-Tang <davidm@hpl.hp.com> 9 * Copyright (C) 1999 VA Linux Systems 10 * Copyright (C) 1999 Walt Drummond <drummond@valinux.com> 11 * Copyright (C) 1999 Asit Mallick <asit.k.mallick@intel.com> 12 * Copyright (C) 1999 Don Dugger <don.dugger@intel.com> 13 */ 14 15 #include <linux/kernel.h> 16 #include <linux/sched.h> 17 #include <linux/compiler.h> 18 19 #include <asm/intrinsics.h> 20 #include <asm/processor.h> 21 22 static __inline__ void 23 ia64_set_itm (unsigned long val) 24 { 25 ia64_setreg(_IA64_REG_CR_ITM, val); 26 ia64_srlz_d(); 27 } 28 29 static __inline__ unsigned long 30 ia64_get_itm (void) 31 { 32 unsigned long result; 33 34 result = ia64_getreg(_IA64_REG_CR_ITM); 35 ia64_srlz_d(); 36 return result; 37 } 38 39 static __inline__ void 40 ia64_set_itv (unsigned long val) 41 { 42 ia64_setreg(_IA64_REG_CR_ITV, val); 43 ia64_srlz_d(); 44 } 45 46 static __inline__ unsigned long 47 ia64_get_itv (void) 48 { 49 return ia64_getreg(_IA64_REG_CR_ITV); 50 } 51 52 static __inline__ void 53 ia64_set_itc (unsigned long val) 54 { 55 ia64_setreg(_IA64_REG_AR_ITC, val); 56 ia64_srlz_d(); 57 } 58 59 static __inline__ unsigned long 60 ia64_get_itc (void) 61 { 62 unsigned long result; 63 64 result = ia64_getreg(_IA64_REG_AR_ITC); 65 ia64_barrier(); 66 #ifdef CONFIG_ITANIUM 67 while (unlikely((__s32) result == -1)) { 68 result = ia64_getreg(_IA64_REG_AR_ITC); 69 ia64_barrier(); 70 } 71 #endif 72 return result; 73 } 74 75 extern void ia64_delay_loop (unsigned long loops); 76 77 static __inline__ void 78 __delay (unsigned long loops) 79 { 80 if (unlikely(loops < 1)) 81 return; 82 83 ia64_delay_loop (loops - 1); 84 } 85 86 extern void udelay (unsigned long usecs); 87 88 #endif /* _ASM_IA64_DELAY_H */ 89