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 / linux / time.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  4.9 KB  |  195 lines

  1. #ifndef _LINUX_TIME_H
  2. #define _LINUX_TIME_H
  3.  
  4. #include <linux/types.h>
  5.  
  6. #ifdef __KERNEL__
  7. # include <linux/seqlock.h>
  8. #endif
  9.  
  10. #ifndef _STRUCT_TIMESPEC
  11. #define _STRUCT_TIMESPEC
  12. struct timespec {
  13.     time_t    tv_sec;        /* seconds */
  14.     long    tv_nsec;    /* nanoseconds */
  15. };
  16. #endif
  17.  
  18. struct timeval {
  19.     time_t        tv_sec;        /* seconds */
  20.     suseconds_t    tv_usec;    /* microseconds */
  21. };
  22.  
  23. struct timezone {
  24.     int    tz_minuteswest;    /* minutes west of Greenwich */
  25.     int    tz_dsttime;    /* type of dst correction */
  26. };
  27.  
  28. #ifdef __KERNEL__
  29.  
  30. /* Parameters used to convert the timespec values: */
  31. #define MSEC_PER_SEC        1000L
  32. #define USEC_PER_SEC        1000000L
  33. #define NSEC_PER_SEC        1000000000L
  34. #define NSEC_PER_USEC        1000L
  35.  
  36. static inline int timespec_equal(struct timespec *a, struct timespec *b)
  37. {
  38.     return (a->tv_sec == b->tv_sec) && (a->tv_nsec == b->tv_nsec);
  39. }
  40.  
  41. /*
  42.  * lhs < rhs:  return <0
  43.  * lhs == rhs: return 0
  44.  * lhs > rhs:  return >0
  45.  */
  46. static inline int timespec_compare(struct timespec *lhs, struct timespec *rhs)
  47. {
  48.     if (lhs->tv_sec < rhs->tv_sec)
  49.         return -1;
  50.     if (lhs->tv_sec > rhs->tv_sec)
  51.         return 1;
  52.     return lhs->tv_nsec - rhs->tv_nsec;
  53. }
  54.  
  55. static inline int timeval_compare(struct timeval *lhs, struct timeval *rhs)
  56. {
  57.     if (lhs->tv_sec < rhs->tv_sec)
  58.         return -1;
  59.     if (lhs->tv_sec > rhs->tv_sec)
  60.         return 1;
  61.     return lhs->tv_usec - rhs->tv_usec;
  62. }
  63.  
  64. extern unsigned long mktime(const unsigned int year, const unsigned int mon,
  65.                 const unsigned int day, const unsigned int hour,
  66.                 const unsigned int min, const unsigned int sec);
  67.  
  68. extern void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec);
  69.  
  70. /*
  71.  * Returns true if the timespec is norm, false if denorm:
  72.  */
  73. #define timespec_valid(ts) \
  74.     (((ts)->tv_sec >= 0) && (((unsigned long) (ts)->tv_nsec) < NSEC_PER_SEC))
  75.  
  76. extern struct timespec xtime;
  77. extern struct timespec wall_to_monotonic;
  78. extern seqlock_t xtime_lock;
  79.  
  80. static inline unsigned long get_seconds(void)
  81. {
  82.     return xtime.tv_sec;
  83. }
  84.  
  85. struct timespec current_kernel_time(void);
  86.  
  87. #define CURRENT_TIME        (current_kernel_time())
  88. #define CURRENT_TIME_SEC    ((struct timespec) { xtime.tv_sec, 0 })
  89.  
  90. extern void do_gettimeofday(struct timeval *tv);
  91. extern int do_settimeofday(struct timespec *tv);
  92. extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz);
  93. #define do_posix_clock_monotonic_gettime(ts) ktime_get_ts(ts)
  94. extern long do_utimes(int dfd, char __user *filename, struct timeval *times);
  95. struct itimerval;
  96. extern int do_setitimer(int which, struct itimerval *value,
  97.             struct itimerval *ovalue);
  98. extern unsigned int alarm_setitimer(unsigned int seconds);
  99. extern int do_getitimer(int which, struct itimerval *value);
  100. extern void getnstimeofday(struct timespec *tv);
  101.  
  102. extern struct timespec timespec_trunc(struct timespec t, unsigned gran);
  103.  
  104. /**
  105.  * timespec_to_ns - Convert timespec to nanoseconds
  106.  * @ts:        pointer to the timespec variable to be converted
  107.  *
  108.  * Returns the scalar nanosecond representation of the timespec
  109.  * parameter.
  110.  */
  111. static inline s64 timespec_to_ns(const struct timespec *ts)
  112. {
  113.     return ((s64) ts->tv_sec * NSEC_PER_SEC) + ts->tv_nsec;
  114. }
  115.  
  116. /**
  117.  * timeval_to_ns - Convert timeval to nanoseconds
  118.  * @ts:        pointer to the timeval variable to be converted
  119.  *
  120.  * Returns the scalar nanosecond representation of the timeval
  121.  * parameter.
  122.  */
  123. static inline s64 timeval_to_ns(const struct timeval *tv)
  124. {
  125.     return ((s64) tv->tv_sec * NSEC_PER_SEC) +
  126.         tv->tv_usec * NSEC_PER_USEC;
  127. }
  128.  
  129. /**
  130.  * ns_to_timespec - Convert nanoseconds to timespec
  131.  * @nsec:    the nanoseconds value to be converted
  132.  *
  133.  * Returns the timespec representation of the nsec parameter.
  134.  */
  135. extern struct timespec ns_to_timespec(const s64 nsec);
  136.  
  137. /**
  138.  * ns_to_timeval - Convert nanoseconds to timeval
  139.  * @nsec:    the nanoseconds value to be converted
  140.  *
  141.  * Returns the timeval representation of the nsec parameter.
  142.  */
  143. extern struct timeval ns_to_timeval(const s64 nsec);
  144.  
  145. #endif /* __KERNEL__ */
  146.  
  147. #define NFDBITS            __NFDBITS
  148.  
  149. #define FD_SETSIZE        __FD_SETSIZE
  150. #define FD_SET(fd,fdsetp)    __FD_SET(fd,fdsetp)
  151. #define FD_CLR(fd,fdsetp)    __FD_CLR(fd,fdsetp)
  152. #define FD_ISSET(fd,fdsetp)    __FD_ISSET(fd,fdsetp)
  153. #define FD_ZERO(fdsetp)        __FD_ZERO(fdsetp)
  154.  
  155. /*
  156.  * Names of the interval timers, and structure
  157.  * defining a timer setting:
  158.  */
  159. #define    ITIMER_REAL        0
  160. #define    ITIMER_VIRTUAL        1
  161. #define    ITIMER_PROF        2
  162.  
  163. struct itimerspec {
  164.     struct timespec it_interval;    /* timer period */
  165.     struct timespec it_value;    /* timer expiration */
  166. };
  167.  
  168. struct itimerval {
  169.     struct timeval it_interval;    /* timer interval */
  170.     struct timeval it_value;    /* current value */
  171. };
  172.  
  173. /*
  174.  * The IDs of the various system clocks (for POSIX.1b interval timers):
  175.  */
  176. #define CLOCK_REALTIME            0
  177. #define CLOCK_MONOTONIC            1
  178. #define CLOCK_PROCESS_CPUTIME_ID    2
  179. #define CLOCK_THREAD_CPUTIME_ID        3
  180.  
  181. /*
  182.  * The IDs of various hardware clocks:
  183.  */
  184. #define CLOCK_SGI_CYCLE            10
  185. #define MAX_CLOCKS            16
  186. #define CLOCKS_MASK            (CLOCK_REALTIME | CLOCK_MONOTONIC)
  187. #define CLOCKS_MONO            CLOCK_MONOTONIC
  188.  
  189. /*
  190.  * The various flags for setting POSIX.1b interval timers:
  191.  */
  192. #define TIMER_ABSTIME            0x01
  193.  
  194. #endif
  195.