diff options
Diffstat (limited to 'arch/ia64/include/asm/delay.h')
-rw-r--r-- | arch/ia64/include/asm/delay.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/arch/ia64/include/asm/delay.h b/arch/ia64/include/asm/delay.h new file mode 100644 index 000000000000..a30a62f235e1 --- /dev/null +++ b/arch/ia64/include/asm/delay.h | |||
@@ -0,0 +1,88 @@ | |||
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 */ | ||