delay.h (1157B)
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 */ 6extern void __bad_udelay(void); 7extern void __bad_ndelay(void); 8 9extern void __udelay(unsigned long usecs); 10extern void __ndelay(unsigned long nsecs); 11extern void __const_udelay(unsigned long xloops); 12extern 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 */