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