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 extern 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 45 extern 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) (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 */ 57 typedef s64 nsec_t; 58 59 extern struct timespec xtime; 60 extern struct timespec wall_to_monotonic; 61 extern seqlock_t xtime_lock; 62 63 static inline unsigned long get_seconds(void) 64 { 65 return xtime.tv_sec; 66 } 67 68 struct 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 73 extern void do_gettimeofday(struct timeval *tv); 74 extern int do_settimeofday(struct timespec *tv); 75 extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz); 76 #define do_posix_clock_monotonic_gettime(ts) ktime_get_ts(ts) 77 extern long do_utimes(char __user *filename, struct timeval *times); 78 struct itimerval; 79 extern int do_setitimer(int which, struct itimerval *value, 80 struct itimerval *ovalue); 81 extern int do_getitimer(int which, struct itimerval *value); 82 extern void getnstimeofday(struct timespec *tv); 83 84 extern 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 */ 93 static 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 */ 105 static 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 */ 117 extern 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 */ 125 extern 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 145 struct itimerspec { 146 struct timespec it_interval; /* timer period */ 147 struct timespec it_value; /* timer expiration */ 148 }; 149 150 struct 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 177