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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Common time prototypes and such for all ppc machines.
  3.  *
  4.  * Written by Cort Dougan (cort@cs.nmt.edu) to merge
  5.  * Paul Mackerras' version and mine for PReP and Pmac.
  6.  *
  7.  * This program is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU General Public License
  9.  * as published by the Free Software Foundation; either version
  10.  * 2 of the License, or (at your option) any later version.
  11.  */
  12. #ifndef __PPC64_TIME_H
  13. #define __PPC64_TIME_H
  14. #ifdef __KERNEL__
  15. #include <linux/types.h>
  16. #include <linux/mc146818rtc.h>
  17. #include <asm/processor.h>
  18. #include <asm/paca.h>
  19. #include <asm/iSeries/HvCall.h>
  20. /* time.c */
  21. extern unsigned long tb_ticks_per_jiffy;
  22. extern unsigned long tb_ticks_per_usec;
  23. extern unsigned long tb_ticks_per_sec;
  24. extern unsigned long tb_to_xs;
  25. extern unsigned long tb_last_stamp;
  26. struct rtc_time;
  27. extern void to_tm(int tim, struct rtc_time * tm);
  28. extern time_t last_rtc_update;
  29. struct div_result {
  30. unsigned long result_high;
  31. unsigned long result_low;
  32. };
  33. int via_calibrate_decr(void);
  34. static __inline__ unsigned long get_tb(void)
  35. {
  36. return mftb();
  37. }
  38. /* Accessor functions for the decrementer register. */
  39. static __inline__ unsigned int get_dec(void)
  40. {
  41. return (mfspr(SPRN_DEC));
  42. }
  43. static __inline__ void set_dec(int val)
  44. {
  45. #ifdef CONFIG_PPC_ISERIES
  46. struct paca_struct *lpaca = get_paca();
  47. int cur_dec;
  48. if (lpaca->xLpPaca.xSharedProc) {
  49. lpaca->xLpPaca.xVirtualDecr = val;
  50. cur_dec = get_dec();
  51. if (cur_dec > val)
  52. HvCall_setVirtualDecr();
  53. } else
  54. #endif
  55. mtspr(SPRN_DEC, val);
  56. }
  57. static inline unsigned long tb_ticks_since(unsigned long tstamp)
  58. {
  59. return get_tb() - tstamp;
  60. }
  61. #define mulhdu(x,y) 
  62. ({unsigned long z; asm ("mulhdu %0,%1,%2" : "=r" (z) : "r" (x), "r" (y)); z;})
  63. void div128_by_32( unsigned long dividend_high, unsigned long dividend_low,
  64.    unsigned divisor, struct div_result *dr );
  65. #endif /* __KERNEL__ */
  66. #endif /* __PPC64_TIME_H */