Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/bnx2-2.6
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / include / linux / time.h
CommitLineData
1da177e4
LT
1#ifndef _LINUX_TIME_H
2#define _LINUX_TIME_H
3
4#include <linux/types.h>
5
6#ifdef __KERNEL__
57a55875 7# include <linux/seqlock.h>
1da177e4
LT
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};
57a55875 16#endif
1da177e4
LT
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
57a55875
IM
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
1da177e4 35
57a55875
IM
36static __inline__ int timespec_equal(struct timespec *a, struct timespec *b)
37{
1da177e4 38 return (a->tv_sec == b->tv_sec) && (a->tv_nsec == b->tv_nsec);
57a55875 39}
1da177e4 40
f4818900
IM
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);
1da177e4 46
5f82b2b7
TG
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
f8f46da3
TG
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
1da177e4
LT
59extern struct timespec xtime;
60extern struct timespec wall_to_monotonic;
61extern seqlock_t xtime_lock;
62
63static inline unsigned long get_seconds(void)
57a55875 64{
1da177e4
LT
65 return xtime.tv_sec;
66}
67
68struct timespec current_kernel_time(void);
69
57a55875
IM
70#define CURRENT_TIME (current_kernel_time())
71#define CURRENT_TIME_SEC ((struct timespec) { xtime.tv_sec, 0 })
1da177e4
LT
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);
becf8b5d 76#define do_posix_clock_monotonic_gettime(ts) ktime_get_ts(ts)
5590ff0d 77extern long do_utimes(int dfd, char __user *filename, struct timeval *times);
1da177e4 78struct itimerval;
57a55875
IM
79extern int do_setitimer(int which, struct itimerval *value,
80 struct itimerval *ovalue);
1da177e4 81extern int do_getitimer(int which, struct itimerval *value);
57a55875 82extern void getnstimeofday(struct timespec *tv);
1da177e4
LT
83
84extern struct timespec timespec_trunc(struct timespec t, unsigned gran);
85
f8f46da3
TG
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
1da177e4
LT
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
57a55875 139 * defining a timer setting:
1da177e4 140 */
57a55875
IM
141#define ITIMER_REAL 0
142#define ITIMER_VIRTUAL 1
143#define ITIMER_PROF 2
1da177e4 144
57a55875
IM
145struct itimerspec {
146 struct timespec it_interval; /* timer period */
147 struct timespec it_value; /* timer expiration */
1da177e4
LT
148};
149
57a55875
IM
150struct itimerval {
151 struct timeval it_interval; /* timer interval */
152 struct timeval it_value; /* current value */
1da177e4
LT
153};
154
1da177e4 155/*
57a55875 156 * The IDs of the various system clocks (for POSIX.1b interval timers):
1da177e4 157 */
1ad106ca
IM
158#define CLOCK_REALTIME 0
159#define CLOCK_MONOTONIC 1
160#define CLOCK_PROCESS_CPUTIME_ID 2
161#define CLOCK_THREAD_CPUTIME_ID 3
1da177e4
LT
162
163/*
57a55875 164 * The IDs of various hardware clocks:
1da177e4 165 */
1ad106ca
IM
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
1da177e4
LT
170
171/*
57a55875 172 * The various flags for setting POSIX.1b interval timers:
1da177e4 173 */
1ad106ca 174#define TIMER_ABSTIME 0x01
1da177e4
LT
175
176#endif