root/include/uapi/linux/time.h
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef _UAPI_LINUX_TIME_H
#define _UAPI_LINUX_TIME_H

#include <linux/types.h>
#include <linux/time_types.h>

#ifndef __KERNEL__
#ifndef _STRUCT_TIMESPEC
#define _STRUCT_TIMESPEC
struct timespec {
        __kernel_old_time_t     tv_sec;         /* seconds */
        long                    tv_nsec;        /* nanoseconds */
};
#endif

struct timeval {
        __kernel_old_time_t     tv_sec;         /* seconds */
        __kernel_suseconds_t    tv_usec;        /* microseconds */
};

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 */
};
#endif

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

/*
 * 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

/*
 * AUX clock support. AUXiliary clocks are dynamically configured by
 * enabling a clock ID. These clock can be steered independently of the
 * core timekeeper. The kernel can support up to 8 auxiliary clocks, but
 * the actual limit depends on eventual architecture constraints vs. VDSO.
 */
#define CLOCK_AUX                       MAX_CLOCKS
#define MAX_AUX_CLOCKS                  8
#define CLOCK_AUX_LAST                  (CLOCK_AUX + MAX_AUX_CLOCKS - 1)

#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 */