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-parisc / delay.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  974 b   |  44 lines

  1. #ifndef _PARISC_DELAY_H
  2. #define _PARISC_DELAY_H
  3.  
  4. #include <asm/system.h>    /* for mfctl() */
  5. #include <asm/processor.h> /* for boot_cpu_data */
  6.  
  7.  
  8. /*
  9.  * Copyright (C) 1993 Linus Torvalds
  10.  *
  11.  * Delay routines
  12.  */
  13.  
  14. static __inline__ void __delay(unsigned long loops) {
  15.     asm volatile(
  16.     "    .balignl    64,0x34000034\n"
  17.     "    addib,UV -1,%0,.\n"
  18.     "    nop\n"
  19.         : "=r" (loops) : "0" (loops));
  20. }
  21.  
  22. static __inline__ void __cr16_delay(unsigned long clocks) {
  23.     unsigned long start;
  24.  
  25.     /*
  26.      * Note: Due to unsigned math, cr16 rollovers shouldn't be
  27.      * a problem here. However, on 32 bit, we need to make sure
  28.      * we don't pass in too big a value. The current default
  29.      * value of MAX_UDELAY_MS should help prevent this.
  30.      */
  31.  
  32.     start = mfctl(16);
  33.     while ((mfctl(16) - start) < clocks)
  34.         ;
  35. }
  36.  
  37. static __inline__ void __udelay(unsigned long usecs) {
  38.     __cr16_delay(usecs * ((unsigned long)boot_cpu_data.cpu_hz / 1000000UL));
  39. }
  40.  
  41. #define udelay(n) __udelay(n)
  42.  
  43. #endif /* defined(_PARISC_DELAY_H) */
  44.