|  | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | 
|  | #ifndef _UAPI_LINUX_TIME_H | 
|  | #define _UAPI_LINUX_TIME_H | 
|  |  | 
|  | #include <linux/types.h> | 
|  |  | 
|  |  | 
|  | #ifndef _STRUCT_TIMESPEC | 
|  | #define _STRUCT_TIMESPEC | 
|  | struct timespec { | 
|  | __kernel_time_t	tv_sec;			/* seconds */ | 
|  | long		tv_nsec;		/* nanoseconds */ | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | struct timeval { | 
|  | __kernel_time_t		tv_sec;		/* seconds */ | 
|  | __kernel_suseconds_t	tv_usec;	/* microseconds */ | 
|  | }; | 
|  |  | 
|  | struct timezone { | 
|  | int	tz_minuteswest;	/* minutes west of Greenwich */ | 
|  | int	tz_dsttime;	/* type of dst correction */ | 
|  | }; | 
|  |  | 
|  |  | 
|  | /* | 
|  | * Names of the interval timers, and structure | 
|  | * defining a timer setting: | 
|  | */ | 
|  | #define	ITIMER_REAL		0 | 
|  | #define	ITIMER_VIRTUAL		1 | 
|  | #define	ITIMER_PROF		2 | 
|  |  | 
|  | struct itimerspec { | 
|  | struct timespec it_interval;	/* timer period */ | 
|  | struct timespec it_value;	/* timer expiration */ | 
|  | }; | 
|  |  | 
|  | struct itimerval { | 
|  | struct timeval it_interval;	/* timer interval */ | 
|  | struct timeval it_value;	/* current value */ | 
|  | }; | 
|  |  | 
|  | #ifndef __kernel_timespec | 
|  | struct __kernel_timespec { | 
|  | __kernel_time64_t       tv_sec;                 /* seconds */ | 
|  | long long               tv_nsec;                /* nanoseconds */ | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | #ifndef __kernel_itimerspec | 
|  | struct __kernel_itimerspec { | 
|  | struct __kernel_timespec it_interval;    /* timer period */ | 
|  | struct __kernel_timespec it_value;       /* timer expiration */ | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | /* | 
|  | * legacy timeval structure, only embedded in structures that | 
|  | * traditionally used 'timeval' to pass time intervals (not absolute | 
|  | * times). Do not add new users. If user space fails to compile | 
|  | * here, this is probably because it is not y2038 safe and needs to | 
|  | * be changed to use another interface. | 
|  | */ | 
|  | struct __kernel_old_timeval { | 
|  | __kernel_long_t tv_sec; | 
|  | __kernel_long_t tv_usec; | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * The IDs of the various system clocks (for POSIX.1b interval timers): | 
|  | */ | 
|  | #define CLOCK_REALTIME			0 | 
|  | #define CLOCK_MONOTONIC			1 | 
|  | #define CLOCK_PROCESS_CPUTIME_ID	2 | 
|  | #define CLOCK_THREAD_CPUTIME_ID		3 | 
|  | #define CLOCK_MONOTONIC_RAW		4 | 
|  | #define CLOCK_REALTIME_COARSE		5 | 
|  | #define CLOCK_MONOTONIC_COARSE		6 | 
|  | #define CLOCK_BOOTTIME			7 | 
|  | #define CLOCK_REALTIME_ALARM		8 | 
|  | #define CLOCK_BOOTTIME_ALARM		9 | 
|  | /* | 
|  | * The driver implementing this got removed. The clock ID is kept as a | 
|  | * place holder. Do not reuse! | 
|  | */ | 
|  | #define CLOCK_SGI_CYCLE			10 | 
|  | #define CLOCK_TAI			11 | 
|  |  | 
|  | #define MAX_CLOCKS			16 | 
|  | #define CLOCKS_MASK			(CLOCK_REALTIME | CLOCK_MONOTONIC) | 
|  | #define CLOCKS_MONO			CLOCK_MONOTONIC | 
|  |  | 
|  | /* | 
|  | * The various flags for setting POSIX.1b interval timers: | 
|  | */ | 
|  | #define TIMER_ABSTIME			0x01 | 
|  |  | 
|  | #endif /* _UAPI_LINUX_TIME_H */ |