linux/arch/h8300/include/asm/delay.h
<<
>>
Prefs
   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