Home | History | Annotate | Download | only in linux
      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