linux_timer.h revision 293561
1339631Sphilip/*-
2325057Sphilip * Copyright (c) 2014 Bjoern A. Zeeb
3325057Sphilip * All rights reserved.
4325057Sphilip *
5325057Sphilip * This software was developed by SRI International and the University of
6339631Sphilip * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-11-C-0249
7339631Sphilip * ("MRC2"), as part of the DARPA MRC research programme.
8339631Sphilip *
9325057Sphilip * Redistribution and use in source and binary forms, with or without
10325057Sphilip * modification, are permitted provided that the following conditions
11325057Sphilip * are met:
12331663Sphilip * 1. Redistributions of source code must retain the above copyright
13325057Sphilip *    notice, this list of conditions and the following disclaimer.
14325057Sphilip * 2. Redistributions in binary form must reproduce the above copyright
15325057Sphilip *    notice, this list of conditions and the following disclaimer in the
16331663Sphilip *    documentation and/or other materials provided with the distribution.
17331663Sphilip *
18345671Sphilip * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19325057Sphilip * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20331663Sphilip * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21331663Sphilip * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22325057Sphilip * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23325057Sphilip * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24325057Sphilip * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25325057Sphilip * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26325057Sphilip * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27325057Sphilip * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28325057Sphilip * SUCH DAMAGE.
29331663Sphilip *
30331663Sphilip * $FreeBSD: stable/10/sys/compat/linux/linux_timer.h 293561 2016-01-09 17:06:21Z dchagin $
31325057Sphilip */
32331663Sphilip
33331663Sphilip#ifndef	_LINUX_TIMER_H
34331663Sphilip#define	_LINUX_TIMER_H
35331663Sphilip
36331663Sphilip#ifndef	__LINUX_ARCH_SIGEV_PREAMBLE_SIZE
37331663Sphilip#define	__LINUX_ARCH_SIGEV_PREAMBLE_SIZE	\
38339631Sphilip	(sizeof(l_int) * 2 + sizeof(l_sigval_t))
39333313Sphilip#endif
40331663Sphilip
41331663Sphilip#define	LINUX_SIGEV_MAX_SIZE			64
42331663Sphilip#define	LINUX_SIGEV_PAD_SIZE			\
43331663Sphilip	((LINUX_SIGEV_MAX_SIZE - __LINUX_ARCH_SIGEV_PREAMBLE_SIZE) / \
44339631Sphilip	sizeof(l_int))
45331663Sphilip
46331663Sphilip#define	LINUX_CLOCK_REALTIME			0
47331663Sphilip#define	LINUX_CLOCK_MONOTONIC			1
48331663Sphilip#define	LINUX_CLOCK_PROCESS_CPUTIME_ID		2
49331663Sphilip#define	LINUX_CLOCK_THREAD_CPUTIME_ID		3
50325057Sphilip#define	LINUX_CLOCK_MONOTONIC_RAW		4
51325057Sphilip#define	LINUX_CLOCK_REALTIME_COARSE		5
52325057Sphilip#define	LINUX_CLOCK_MONOTONIC_COARSE		6
53339631Sphilip#define	LINUX_CLOCK_BOOTTIME			7
54339631Sphilip#define	LINUX_CLOCK_REALTIME_ALARM		8
55339631Sphilip#define	LINUX_CLOCK_BOOTTIME_ALARM		9
56339631Sphilip#define	LINUX_CLOCK_SGI_CYCLE			10
57339631Sphilip#define	LINUX_CLOCK_TAI				11
58339631Sphilip
59339631Sphilip#define	LINUX_CPUCLOCK_PERTHREAD_MASK		4
60339631Sphilip#define	LINUX_CPUCLOCK_MASK			3
61339631Sphilip#define	LINUX_CPUCLOCK_WHICH(clock)		\
62339631Sphilip	((clock) & (clockid_t) LINUX_CPUCLOCK_MASK)
63339631Sphilip#define	LINUX_CPUCLOCK_PROF			0
64339631Sphilip#define	LINUX_CPUCLOCK_VIRT			1
65339631Sphilip#define	LINUX_CPUCLOCK_SCHED			2
66339631Sphilip#define	LINUX_CPUCLOCK_MAX			3
67339631Sphilip#define	LINUX_CLOCKFD				LINUX_CPUCLOCK_MAX
68339631Sphilip#define	LINUX_CLOCKFD_MASK			\
69339631Sphilip	(LINUX_CPUCLOCK_PERTHREAD_MASK|LINUX_CPUCLOCK_MASK)
70339631Sphilip
71325057Sphilip#define	LINUX_CPUCLOCK_ID(clock)		((pid_t) ~((clock) >> 3))
72325057Sphilip#define	LINUX_CPUCLOCK_PERTHREAD(clock)		\
73325057Sphilip	(((clock) & (clockid_t) LINUX_CPUCLOCK_PERTHREAD_MASK) != 0)
74325057Sphilip
75325057Sphilip
76325057Sphilip#define	L_SIGEV_SIGNAL				0
77333313Sphilip#define	L_SIGEV_NONE				1
78328476Sphilip#define	L_SIGEV_THREAD				2
79328476Sphilip#define	L_SIGEV_THREAD_ID			4
80328476Sphilip
81325057Sphilip#define	TS_CP(src,dst,fld) do {			\
82325057Sphilip	CP((src).fld,(dst).fld,tv_sec);		\
83325057Sphilip	CP((src).fld,(dst).fld,tv_nsec);	\
84331663Sphilip} while (0)
85331663Sphilip
86331663Sphilip#define	ITS_CP(src, dst) do {			\
87331663Sphilip	TS_CP((src), (dst), it_interval);	\
88331663Sphilip	TS_CP((src), (dst), it_value);		\
89331663Sphilip} while (0)
90331663Sphilip
91331663Sphilipstruct l_sigevent {
92333313Sphilip	l_sigval_t sigev_value;
93331663Sphilip	l_int sigev_signo;
94331663Sphilip	l_int sigev_notify;
95331663Sphilip	union {
96331663Sphilip		l_int _pad[LINUX_SIGEV_PAD_SIZE];
97339631Sphilip		l_int _tid;
98331663Sphilip		struct {
99331663Sphilip			l_uintptr_t _function;
100331663Sphilip			l_uintptr_t _attribute;
101339631Sphilip		} _l_sigev_thread;
102339631Sphilip	} _l_sigev_un;
103339631Sphilip}
104339631Sphilip#if defined(__amd64__) && defined(COMPAT_LINUX32)
105325057Sphilip__packed
106325057Sphilip#endif
107331663Sphilip;
108325057Sphilip
109331663Sphilipstruct l_itimerspec {
110345671Sphilip	struct l_timespec it_interval;
111325057Sphilip	struct l_timespec it_value;
112345671Sphilip};
113325057Sphilip
114325057Sphilip#endif	/* _LINUX_TIMER_H */
115339631Sphilip