linux/include/asm-generic/delay.h
<<
>>
Prefs
   1#ifndef __ASM_GENERIC_DELAY_H
   2#define __ASM_GENERIC_DELAY_H
   3
   4/* Undefined functions to get compile-time errors */
   5extern void __bad_udelay(void);
   6extern void __bad_ndelay(void);
   7
   8extern void __udelay(unsigned long usecs);
   9extern void __ndelay(unsigned long nsecs);
  10extern void __const_udelay(unsigned long xloops);
  11extern 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 */
  45