root/include/asm-generic/delay.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */