1 #ifndef _H8300_DELAY_H 2 #define _H8300_DELAY_H 3 4 #include <asm/param.h> 5 6 /* 7 * Copyright (C) 2002 Yoshinori Sato <ysato@sourceforge.jp> 8 * 9 * Delay routines, using a pre-computed "loops_per_second" value. 10 */ 11 __delay(unsigned long loops)12static inline void __delay(unsigned long loops) 13 { 14 __asm__ __volatile__ ("1:\n\t" 15 "dec.l #1,%0\n\t" 16 "bne 1b" 17 :"=r" (loops):"0"(loops)); 18 } 19 20 /* 21 * Use only for very small delays ( < 1 msec). Should probably use a 22 * lookup table, really, as the multiplications take much too long with 23 * short delays. This is a "reasonable" implementation, though (and the 24 * first constant multiplications gets optimized away if the delay is 25 * a constant) 26 */ 27 28 extern unsigned long loops_per_jiffy; 29 udelay(unsigned long usecs)30static inline void udelay(unsigned long usecs) 31 { 32 usecs *= 4295; /* 2**32 / 1000000 */ 33 usecs /= (loops_per_jiffy*HZ); 34 if (usecs) 35 __delay(usecs); 36 } 37 38 #endif /* _H8300_DELAY_H */ 39