home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-v850 / delay.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  1.3 KB  |  48 lines

  1. /*
  2.  * include/asm-v850/delay.h -- Delay routines, using a pre-computed
  3.  *     "loops_per_second" value
  4.  *
  5.  *  Copyright (C) 2001,03  NEC Corporation
  6.  *  Copyright (C) 2001,03  Miles Bader <miles@gnu.org>
  7.  *  Copyright (C) 1994 Hamish Macdonald
  8.  *
  9.  * This file is subject to the terms and conditions of the GNU General
  10.  * Public License.  See the file COPYING in the main directory of this
  11.  * archive for more details.
  12.  */
  13.  
  14. #ifndef __V850_DELAY_H__
  15. #define __V850_DELAY_H__
  16.  
  17. #include <asm/param.h>
  18.  
  19. static inline void __delay(unsigned long loops)
  20. {
  21.     if (loops)
  22.         __asm__ __volatile__ ("1: add -1, %0; bnz 1b"
  23.                       : "=r" (loops) : "0" (loops));
  24. }
  25.  
  26. /*
  27.  * Use only for very small delays ( < 1 msec).  Should probably use a
  28.  * lookup table, really, as the multiplications take much too long with
  29.  * short delays.  This is a "reasonable" implementation, though (and the
  30.  * first constant multiplications gets optimized away if the delay is
  31.  * a constant)  
  32.  */
  33.  
  34. extern unsigned long loops_per_jiffy;
  35.  
  36. static inline void udelay(unsigned long usecs)
  37. {
  38.     register unsigned long full_loops, part_loops;
  39.  
  40.     full_loops = ((usecs * HZ) / 1000000) * loops_per_jiffy;
  41.     usecs %= (1000000 / HZ);
  42.     part_loops = (usecs * HZ * loops_per_jiffy) / 1000000;
  43.  
  44.     __delay(full_loops + part_loops);
  45. }
  46.  
  47. #endif /* __V850_DELAY_H__ */
  48.