1#ifndef _PPC64_DELAY_H
2#define _PPC64_DELAY_H
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef __ASSEMBLY__
17extern unsigned long tb_ticks_per_usec;
18
19
20#define __HMT_low() asm volatile("or 1,1,1")
21#define __HMT_medium() asm volatile("or 2,2,2")
22#define __barrier() asm volatile("":::"memory")
23
24static inline unsigned long __get_tb(void)
25{
26 unsigned long rval;
27
28 asm volatile("mftb %0" : "=r" (rval));
29 return rval;
30}
31
32static inline void __delay(unsigned long loops)
33{
34 unsigned long start = __get_tb();
35
36 while((__get_tb()-start) < loops)
37 __HMT_low();
38 __HMT_medium();
39 __barrier();
40}
41
42static inline void udelay(unsigned long usecs)
43{
44 unsigned long loops = tb_ticks_per_usec * usecs;
45
46 __delay(loops);
47}
48
49static inline void ndelay(unsigned long nsecs)
50{
51 unsigned long loops = (tb_ticks_per_usec * nsecs) / 1000;
52
53 __delay(loops);
54}
55#endif
56
57#endif
58