Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
delay.h
Go to the documentation of this file.
1 #ifndef __ASM_GENERIC_DELAY_H
2 #define __ASM_GENERIC_DELAY_H
3 
4 /* Undefined functions to get compile-time errors */
5 extern void __bad_udelay(void);
6 extern void __bad_ndelay(void);
7 
8 extern void __udelay(unsigned long usecs);
9 extern void __ndelay(unsigned long nsecs);
10 extern void __const_udelay(unsigned long xloops);
11 extern void __delay(unsigned long loops);
12 
13 /*
14  * The weird n/20000 thing suppresses a "comparison is always false due to
15  * limited range of data type" warning with non-const 8-bit arguments.
16  */
17 
18 /* 0x10c7 is 2**32 / 1000000 (rounded up) */
19 #define udelay(n) \
20  ({ \
21  if (__builtin_constant_p(n)) { \
22  if ((n) / 20000 >= 1) \
23  __bad_udelay(); \
24  else \
25  __const_udelay((n) * 0x10c7ul); \
26  } else { \
27  __udelay(n); \
28  } \
29  })
30 
31 /* 0x5 is 2**32 / 1000000000 (rounded up) */
32 #define ndelay(n) \
33  ({ \
34  if (__builtin_constant_p(n)) { \
35  if ((n) / 20000 >= 1) \
36  __bad_ndelay(); \
37  else \
38  __const_udelay((n) * 5ul); \
39  } else { \
40  __ndelay(n); \
41  } \
42  })
43 
44 #endif /* __ASM_GENERIC_DELAY_H */