Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef __ASM_GENERIC_DELAY_H
0003 #define __ASM_GENERIC_DELAY_H
0004 
0005 /* Undefined functions to get compile-time errors */
0006 extern void __bad_udelay(void);
0007 extern void __bad_ndelay(void);
0008 
0009 extern void __udelay(unsigned long usecs);
0010 extern void __ndelay(unsigned long nsecs);
0011 extern void __const_udelay(unsigned long xloops);
0012 extern void __delay(unsigned long loops);
0013 
0014 /*
0015  * The weird n/20000 thing suppresses a "comparison is always false due to
0016  * limited range of data type" warning with non-const 8-bit arguments.
0017  */
0018 
0019 /* 0x10c7 is 2**32 / 1000000 (rounded up) */
0020 #define udelay(n)                           \
0021     ({                              \
0022         if (__builtin_constant_p(n)) {              \
0023             if ((n) / 20000 >= 1)               \
0024                  __bad_udelay();            \
0025             else                        \
0026                 __const_udelay((n) * 0x10c7ul);     \
0027         } else {                        \
0028             __udelay(n);                    \
0029         }                           \
0030     })
0031 
0032 /* 0x5 is 2**32 / 1000000000 (rounded up) */
0033 #define ndelay(n)                           \
0034     ({                              \
0035         if (__builtin_constant_p(n)) {              \
0036             if ((n) / 20000 >= 1)               \
0037                 __bad_ndelay();             \
0038             else                        \
0039                 __const_udelay((n) * 5ul);      \
0040         } else {                        \
0041             __ndelay(n);                    \
0042         }                           \
0043     })
0044 
0045 #endif /* __ASM_GENERIC_DELAY_H */