1aafe4dbeSArnd Bergmann #ifndef __ASM_GENERIC_DELAY_H 2aafe4dbeSArnd Bergmann #define __ASM_GENERIC_DELAY_H 3aafe4dbeSArnd Bergmann 430ab2b03SJonas Bonn /* Undefined functions to get compile-time errors */ 530ab2b03SJonas Bonn extern void __bad_udelay(void); 630ab2b03SJonas Bonn extern void __bad_ndelay(void); 730ab2b03SJonas Bonn 8aafe4dbeSArnd Bergmann extern void __udelay(unsigned long usecs); 930ab2b03SJonas Bonn extern void __ndelay(unsigned long nsecs); 1030ab2b03SJonas Bonn extern void __const_udelay(unsigned long xloops); 11aafe4dbeSArnd Bergmann extern void __delay(unsigned long loops); 12aafe4dbeSArnd Bergmann 13*a87e553fSAndrew Morton /* 14*a87e553fSAndrew Morton * The weird n/20000 thing suppresses a "comparison is always false due to 15*a87e553fSAndrew Morton * limited range of data type" warning with non-const 8-bit arguments. 16*a87e553fSAndrew Morton */ 17*a87e553fSAndrew Morton 1830ab2b03SJonas Bonn /* 0x10c7 is 2**32 / 1000000 (rounded up) */ 19*a87e553fSAndrew Morton #define udelay(n) \ 20*a87e553fSAndrew Morton ({ \ 21*a87e553fSAndrew Morton if (__builtin_constant_p(n)) { \ 22*a87e553fSAndrew Morton if ((n) / 20000 >= 1) \ 23*a87e553fSAndrew Morton __bad_udelay(); \ 24*a87e553fSAndrew Morton else \ 25*a87e553fSAndrew Morton __const_udelay((n) * 0x10c7ul); \ 26*a87e553fSAndrew Morton } else { \ 27*a87e553fSAndrew Morton __udelay(n); \ 28*a87e553fSAndrew Morton } \ 29*a87e553fSAndrew Morton }) 3030ab2b03SJonas Bonn 3130ab2b03SJonas Bonn /* 0x5 is 2**32 / 1000000000 (rounded up) */ 32*a87e553fSAndrew Morton #define ndelay(n) \ 33*a87e553fSAndrew Morton ({ \ 34*a87e553fSAndrew Morton if (__builtin_constant_p(n)) { \ 35*a87e553fSAndrew Morton if ((n) / 20000 >= 1) \ 36*a87e553fSAndrew Morton __bad_ndelay(); \ 37*a87e553fSAndrew Morton else \ 38*a87e553fSAndrew Morton __const_udelay((n) * 5ul); \ 39*a87e553fSAndrew Morton } else { \ 40*a87e553fSAndrew Morton __ndelay(n); \ 41*a87e553fSAndrew Morton } \ 42*a87e553fSAndrew Morton }) 43aafe4dbeSArnd Bergmann 44aafe4dbeSArnd Bergmann #endif /* __ASM_GENERIC_DELAY_H */ 45