delay.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:1k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * BK Id: SCCS/s.delay.h 1.7 05/17/01 18:14:24 cort
  3.  */
  4. #ifdef __KERNEL__
  5. #ifndef _PPC_DELAY_H
  6. #define _PPC_DELAY_H
  7. #include <asm/param.h>
  8. /*
  9.  * Copyright 1996, Paul Mackerras.
  10.  *
  11.  * This program is free software; you can redistribute it and/or
  12.  * modify it under the terms of the GNU General Public License
  13.  * as published by the Free Software Foundation; either version
  14.  * 2 of the License, or (at your option) any later version.
  15.  */
  16. extern unsigned long loops_per_jiffy;
  17. /* maximum permitted argument to udelay */
  18. #define __MAX_UDELAY 1000000
  19. extern void __delay(unsigned int loops);
  20. /* N.B. the `secs' parameter here is a fixed-point number with
  21.    the binary point to the left of the most-significant bit. */
  22. extern __inline__ void __const_udelay(unsigned int secs)
  23. {
  24. unsigned int loops;
  25. __asm__("mulhwu %0,%1,%2" : "=r" (loops) :
  26. "r" (secs), "r" (loops_per_jiffy));
  27. __delay(loops * HZ);
  28. }
  29. /*
  30.  * note that 4294 == 2^32 / 10^6, multiplying by 4294 converts from
  31.  * microseconds to a 32-bit fixed-point number of seconds.
  32.  */
  33. extern __inline__ void __udelay(unsigned int usecs)
  34. {
  35. __const_udelay(usecs * 4294);
  36. }
  37. extern void __bad_udelay(void); /* deliberately undefined */
  38. #define udelay(n) (__builtin_constant_p(n)? 
  39.    ((n) > __MAX_UDELAY? __bad_udelay(): __const_udelay((n) * 4294u)) : 
  40.    __udelay(n))
  41. #endif /* defined(_PPC_DELAY_H) */
  42. #endif /* __KERNEL__ */