1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 #ifndef _UAPI_LINUX_TIME_H
3 #define _UAPI_LINUX_TIME_H
4 
5 #include <linux/types.h>
6 
7 
8 #ifndef _STRUCT_TIMESPEC
9 #define _STRUCT_TIMESPEC
10 struct timespec {
11 	__kernel_time_t	tv_sec;			/* seconds */
12 	long		tv_nsec;		/* nanoseconds */
13 };
14 #endif
15 
16 struct timeval {
17 	__kernel_time_t		tv_sec;		/* seconds */
18 	__kernel_suseconds_t	tv_usec;	/* microseconds */
19 };
20 
21 struct timezone {
22 	int	tz_minuteswest;	/* minutes west of Greenwich */
23 	int	tz_dsttime;	/* type of dst correction */
24 };
25 
26 
27 /*
28  * Names of the interval timers, and structure
29  * defining a timer setting:
30  */
31 #define	ITIMER_REAL		0
32 #define	ITIMER_VIRTUAL		1
33 #define	ITIMER_PROF		2
34 
35 struct itimerspec {
36 	struct timespec it_interval;	/* timer period */
37 	struct timespec it_value;	/* timer expiration */
38 };
39 
40 struct itimerval {
41 	struct timeval it_interval;	/* timer interval */
42 	struct timeval it_value;	/* current value */
43 };
44 
45 #ifndef __kernel_timespec
46 struct __kernel_timespec {
47 	__kernel_time64_t       tv_sec;                 /* seconds */
48 	long long               tv_nsec;                /* nanoseconds */
49 };
50 #endif
51 
52 #ifndef __kernel_itimerspec
53 struct __kernel_itimerspec {
54 	struct __kernel_timespec it_interval;    /* timer period */
55 	struct __kernel_timespec it_value;       /* timer expiration */
56 };
57 #endif
58 
59 /*
60  * legacy timeval structure, only embedded in structures that
61  * traditionally used 'timeval' to pass time intervals (not absolute
62  * times). Do not add new users. If user space fails to compile
63  * here, this is probably because it is not y2038 safe and needs to
64  * be changed to use another interface.
65  */
66 struct __kernel_old_timeval {
67 	__kernel_long_t tv_sec;
68 	__kernel_long_t tv_usec;
69 };
70 
71 /*
72  * The IDs of the various system clocks (for POSIX.1b interval timers):
73  */
74 #define CLOCK_REALTIME			0
75 #define CLOCK_MONOTONIC			1
76 #define CLOCK_PROCESS_CPUTIME_ID	2
77 #define CLOCK_THREAD_CPUTIME_ID		3
78 #define CLOCK_MONOTONIC_RAW		4
79 #define CLOCK_REALTIME_COARSE		5
80 #define CLOCK_MONOTONIC_COARSE		6
81 #define CLOCK_BOOTTIME			7
82 #define CLOCK_REALTIME_ALARM		8
83 #define CLOCK_BOOTTIME_ALARM		9
84 /*
85  * The driver implementing this got removed. The clock ID is kept as a
86  * place holder. Do not reuse!
87  */
88 #define CLOCK_SGI_CYCLE			10
89 #define CLOCK_TAI			11
90 
91 #define MAX_CLOCKS			16
92 #define CLOCKS_MASK			(CLOCK_REALTIME | CLOCK_MONOTONIC)
93 #define CLOCKS_MONO			CLOCK_MONOTONIC
94 
95 /*
96  * The various flags for setting POSIX.1b interval timers:
97  */
98 #define TIMER_ABSTIME			0x01
99 
100 #endif /* _UAPI_LINUX_TIME_H */
101