at v2.6.16-rc2 4.6 kB view raw
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 12struct timespec { 13 time_t tv_sec; /* seconds */ 14 long tv_nsec; /* nanoseconds */ 15}; 16#endif 17 18struct timeval { 19 time_t tv_sec; /* seconds */ 20 suseconds_t tv_usec; /* microseconds */ 21}; 22 23struct 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 36static __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 41extern unsigned long mktime(const unsigned int year, const unsigned int mon, 42 const unsigned int day, const unsigned int hour, 43 const unsigned int min, const unsigned int sec); 44 45extern void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec); 46 47/* 48 * Returns true if the timespec is norm, false if denorm: 49 */ 50#define timespec_valid(ts) \ 51 (((ts)->tv_sec >= 0) && (((unsigned long) (ts)->tv_nsec) < NSEC_PER_SEC)) 52 53/* 54 * 64-bit nanosec type. Large enough to span 292+ years in nanosecond 55 * resolution. Ought to be enough for a while. 56 */ 57typedef s64 nsec_t; 58 59extern struct timespec xtime; 60extern struct timespec wall_to_monotonic; 61extern seqlock_t xtime_lock; 62 63static inline unsigned long get_seconds(void) 64{ 65 return xtime.tv_sec; 66} 67 68struct timespec current_kernel_time(void); 69 70#define CURRENT_TIME (current_kernel_time()) 71#define CURRENT_TIME_SEC ((struct timespec) { xtime.tv_sec, 0 }) 72 73extern void do_gettimeofday(struct timeval *tv); 74extern int do_settimeofday(struct timespec *tv); 75extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz); 76#define do_posix_clock_monotonic_gettime(ts) ktime_get_ts(ts) 77extern long do_utimes(int dfd, char __user *filename, struct timeval *times); 78struct itimerval; 79extern int do_setitimer(int which, struct itimerval *value, 80 struct itimerval *ovalue); 81extern int do_getitimer(int which, struct itimerval *value); 82extern void getnstimeofday(struct timespec *tv); 83 84extern struct timespec timespec_trunc(struct timespec t, unsigned gran); 85 86/** 87 * timespec_to_ns - Convert timespec to nanoseconds 88 * @ts: pointer to the timespec variable to be converted 89 * 90 * Returns the scalar nanosecond representation of the timespec 91 * parameter. 92 */ 93static inline nsec_t timespec_to_ns(const struct timespec *ts) 94{ 95 return ((nsec_t) ts->tv_sec * NSEC_PER_SEC) + ts->tv_nsec; 96} 97 98/** 99 * timeval_to_ns - Convert timeval to nanoseconds 100 * @ts: pointer to the timeval variable to be converted 101 * 102 * Returns the scalar nanosecond representation of the timeval 103 * parameter. 104 */ 105static inline nsec_t timeval_to_ns(const struct timeval *tv) 106{ 107 return ((nsec_t) tv->tv_sec * NSEC_PER_SEC) + 108 tv->tv_usec * NSEC_PER_USEC; 109} 110 111/** 112 * ns_to_timespec - Convert nanoseconds to timespec 113 * @nsec: the nanoseconds value to be converted 114 * 115 * Returns the timespec representation of the nsec parameter. 116 */ 117extern struct timespec ns_to_timespec(const nsec_t nsec); 118 119/** 120 * ns_to_timeval - Convert nanoseconds to timeval 121 * @nsec: the nanoseconds value to be converted 122 * 123 * Returns the timeval representation of the nsec parameter. 124 */ 125extern struct timeval ns_to_timeval(const nsec_t nsec); 126 127#endif /* __KERNEL__ */ 128 129#define NFDBITS __NFDBITS 130 131#define FD_SETSIZE __FD_SETSIZE 132#define FD_SET(fd,fdsetp) __FD_SET(fd,fdsetp) 133#define FD_CLR(fd,fdsetp) __FD_CLR(fd,fdsetp) 134#define FD_ISSET(fd,fdsetp) __FD_ISSET(fd,fdsetp) 135#define FD_ZERO(fdsetp) __FD_ZERO(fdsetp) 136 137/* 138 * Names of the interval timers, and structure 139 * defining a timer setting: 140 */ 141#define ITIMER_REAL 0 142#define ITIMER_VIRTUAL 1 143#define ITIMER_PROF 2 144 145struct itimerspec { 146 struct timespec it_interval; /* timer period */ 147 struct timespec it_value; /* timer expiration */ 148}; 149 150struct itimerval { 151 struct timeval it_interval; /* timer interval */ 152 struct timeval it_value; /* current value */ 153}; 154 155/* 156 * The IDs of the various system clocks (for POSIX.1b interval timers): 157 */ 158#define CLOCK_REALTIME 0 159#define CLOCK_MONOTONIC 1 160#define CLOCK_PROCESS_CPUTIME_ID 2 161#define CLOCK_THREAD_CPUTIME_ID 3 162 163/* 164 * The IDs of various hardware clocks: 165 */ 166#define CLOCK_SGI_CYCLE 10 167#define MAX_CLOCKS 16 168#define CLOCKS_MASK (CLOCK_REALTIME | CLOCK_MONOTONIC) 169#define CLOCKS_MONO CLOCK_MONOTONIC 170 171/* 172 * The various flags for setting POSIX.1b interval timers: 173 */ 174#define TIMER_ABSTIME 0x01 175 176#endif