| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |  | 
| John Hawkes | f5899b5 | 2005-12-16 10:00:24 -0800 | [diff] [blame] | 86 | extern void udelay (unsigned long usecs); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 87 |  | 
 | 88 | #endif /* _ASM_IA64_DELAY_H */ |