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 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 28extern unsigned long loops_per_jiffy; 29 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