1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 2#ifndef _LINUX_TIME_H
 3#define _LINUX_TIME_H
 4
 5#include <linux/types.h>
 6#include <linux/time_types.h>
 7
 8#ifndef _STRUCT_TIMESPEC
 9#define _STRUCT_TIMESPEC
10struct timespec {
11	__kernel_old_time_t	tv_sec;		/* seconds */
12	long			tv_nsec;	/* nanoseconds */
13};
14#endif
15
16struct timeval {
17	__kernel_old_time_t	tv_sec;		/* seconds */
18	__kernel_suseconds_t	tv_usec;	/* microseconds */
19};
20
21struct itimerspec {
22	struct timespec it_interval;/* timer period */
23	struct timespec it_value;	/* timer expiration */
24};
25
26struct itimerval {
27	struct timeval it_interval;/* timer interval */
28	struct timeval it_value;	/* current value */
29};
30
31struct timezone {
32	int	tz_minuteswest;	/* minutes west of Greenwich */
33	int	tz_dsttime;	/* type of dst correction */
34};
35
36/*
37 * Names of the interval timers, and structure
38 * defining a timer setting:
39 */
40#define	ITIMER_REAL		0
41#define	ITIMER_VIRTUAL		1
42#define	ITIMER_PROF		2
43
44/*
45 * The IDs of the various system clocks (for POSIX.1b interval timers):
46 */
47#define CLOCK_REALTIME			0
48#define CLOCK_MONOTONIC			1
49#define CLOCK_PROCESS_CPUTIME_ID	2
50#define CLOCK_THREAD_CPUTIME_ID		3
51#define CLOCK_MONOTONIC_RAW		4
52#define CLOCK_REALTIME_COARSE		5
53#define CLOCK_MONOTONIC_COARSE		6
54#define CLOCK_BOOTTIME			7
55#define CLOCK_REALTIME_ALARM		8
56#define CLOCK_BOOTTIME_ALARM		9
57/*
58 * The driver implementing this got removed. The clock ID is kept as a
59 * place holder. Do not reuse!
60 */
61#define CLOCK_SGI_CYCLE			10
62#define CLOCK_TAI			11
63
64#define MAX_CLOCKS			16
65
66/*
67 * AUX clock support. AUXiliary clocks are dynamically configured by
68 * enabling a clock ID. These clock can be steered independently of the
69 * core timekeeper. The kernel can support up to 8 auxiliary clocks, but
70 * the actual limit depends on eventual architecture constraints vs. VDSO.
71 */
72#define CLOCK_AUX			MAX_CLOCKS
73#define MAX_AUX_CLOCKS			8
74#define CLOCK_AUX_LAST			(CLOCK_AUX + MAX_AUX_CLOCKS - 1)
75
76#define CLOCKS_MASK			(CLOCK_REALTIME | CLOCK_MONOTONIC)
77#define CLOCKS_MONO			CLOCK_MONOTONIC
78
79/*
80 * The various flags for setting POSIX.1b interval timers:
81 */
82#define TIMER_ABSTIME			0x01
83
84#endif /* _LINUX_TIME_H */