1271743Sbz/*- 2271743Sbz * Copyright (c) 2014 Bjoern A. Zeeb 3271743Sbz * All rights reserved. 4271743Sbz * 5271743Sbz * This software was developed by SRI International and the University of 6271743Sbz * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-11-C-0249 7271743Sbz * ("MRC2"), as part of the DARPA MRC research programme. 8271743Sbz * 9271743Sbz * Redistribution and use in source and binary forms, with or without 10271743Sbz * modification, are permitted provided that the following conditions 11271743Sbz * are met: 12271743Sbz * 1. Redistributions of source code must retain the above copyright 13271743Sbz * notice, this list of conditions and the following disclaimer. 14271743Sbz * 2. Redistributions in binary form must reproduce the above copyright 15271743Sbz * notice, this list of conditions and the following disclaimer in the 16271743Sbz * documentation and/or other materials provided with the distribution. 17271743Sbz * 18271743Sbz * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19271743Sbz * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20271743Sbz * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21271743Sbz * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22271743Sbz * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23271743Sbz * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24271743Sbz * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25271743Sbz * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26271743Sbz * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27271743Sbz * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28271743Sbz * SUCH DAMAGE. 29271743Sbz * 30271743Sbz * $FreeBSD: releng/10.3/sys/compat/linux/linux_timer.h 293566 2016-01-09 17:12:45Z dchagin $ 31271743Sbz */ 32271743Sbz 33271743Sbz#ifndef _LINUX_TIMER_H 34271743Sbz#define _LINUX_TIMER_H 35271743Sbz 36271743Sbz#ifndef __LINUX_ARCH_SIGEV_PREAMBLE_SIZE 37271743Sbz#define __LINUX_ARCH_SIGEV_PREAMBLE_SIZE \ 38271743Sbz (sizeof(l_int) * 2 + sizeof(l_sigval_t)) 39271743Sbz#endif 40271743Sbz 41271743Sbz#define LINUX_SIGEV_MAX_SIZE 64 42271743Sbz#define LINUX_SIGEV_PAD_SIZE \ 43271743Sbz ((LINUX_SIGEV_MAX_SIZE - __LINUX_ARCH_SIGEV_PREAMBLE_SIZE) / \ 44271743Sbz sizeof(l_int)) 45271743Sbz 46271743Sbz#define LINUX_CLOCK_REALTIME 0 47271743Sbz#define LINUX_CLOCK_MONOTONIC 1 48271743Sbz#define LINUX_CLOCK_PROCESS_CPUTIME_ID 2 49271743Sbz#define LINUX_CLOCK_THREAD_CPUTIME_ID 3 50271743Sbz#define LINUX_CLOCK_MONOTONIC_RAW 4 51271743Sbz#define LINUX_CLOCK_REALTIME_COARSE 5 52271743Sbz#define LINUX_CLOCK_MONOTONIC_COARSE 6 53271743Sbz#define LINUX_CLOCK_BOOTTIME 7 54271743Sbz#define LINUX_CLOCK_REALTIME_ALARM 8 55271743Sbz#define LINUX_CLOCK_BOOTTIME_ALARM 9 56271743Sbz#define LINUX_CLOCK_SGI_CYCLE 10 57271743Sbz#define LINUX_CLOCK_TAI 11 58271743Sbz 59293561Sdchagin#define LINUX_CPUCLOCK_PERTHREAD_MASK 4 60293561Sdchagin#define LINUX_CPUCLOCK_MASK 3 61293561Sdchagin#define LINUX_CPUCLOCK_WHICH(clock) \ 62293561Sdchagin ((clock) & (clockid_t) LINUX_CPUCLOCK_MASK) 63293561Sdchagin#define LINUX_CPUCLOCK_PROF 0 64293561Sdchagin#define LINUX_CPUCLOCK_VIRT 1 65293561Sdchagin#define LINUX_CPUCLOCK_SCHED 2 66293561Sdchagin#define LINUX_CPUCLOCK_MAX 3 67293561Sdchagin#define LINUX_CLOCKFD LINUX_CPUCLOCK_MAX 68293561Sdchagin#define LINUX_CLOCKFD_MASK \ 69293561Sdchagin (LINUX_CPUCLOCK_PERTHREAD_MASK|LINUX_CPUCLOCK_MASK) 70293561Sdchagin 71293561Sdchagin#define LINUX_CPUCLOCK_ID(clock) ((pid_t) ~((clock) >> 3)) 72293561Sdchagin#define LINUX_CPUCLOCK_PERTHREAD(clock) \ 73293561Sdchagin (((clock) & (clockid_t) LINUX_CPUCLOCK_PERTHREAD_MASK) != 0) 74293561Sdchagin 75293561Sdchagin 76271743Sbz#define L_SIGEV_SIGNAL 0 77271743Sbz#define L_SIGEV_NONE 1 78271743Sbz#define L_SIGEV_THREAD 2 79271743Sbz#define L_SIGEV_THREAD_ID 4 80271743Sbz 81271743Sbz#define TS_CP(src,dst,fld) do { \ 82271743Sbz CP((src).fld,(dst).fld,tv_sec); \ 83271743Sbz CP((src).fld,(dst).fld,tv_nsec); \ 84271743Sbz} while (0) 85271743Sbz 86271743Sbz#define ITS_CP(src, dst) do { \ 87271743Sbz TS_CP((src), (dst), it_interval); \ 88271743Sbz TS_CP((src), (dst), it_value); \ 89271743Sbz} while (0) 90271743Sbz 91271743Sbzstruct l_sigevent { 92271743Sbz l_sigval_t sigev_value; 93271743Sbz l_int sigev_signo; 94271743Sbz l_int sigev_notify; 95271743Sbz union { 96271743Sbz l_int _pad[LINUX_SIGEV_PAD_SIZE]; 97271743Sbz l_int _tid; 98271743Sbz struct { 99271743Sbz l_uintptr_t _function; 100271743Sbz l_uintptr_t _attribute; 101271743Sbz } _l_sigev_thread; 102271743Sbz } _l_sigev_un; 103271743Sbz} 104271743Sbz#if defined(__amd64__) && defined(COMPAT_LINUX32) 105271743Sbz__packed 106271743Sbz#endif 107271743Sbz; 108271743Sbz 109271743Sbzstruct l_itimerspec { 110271743Sbz struct l_timespec it_interval; 111271743Sbz struct l_timespec it_value; 112271743Sbz}; 113271743Sbz 114293565Sdchaginvoid native_to_linux_timespec(struct l_timespec *, 115293565Sdchagin struct timespec *); 116293565Sdchaginint linux_to_native_timespec(struct timespec *, 117293565Sdchagin struct l_timespec *); 118293566Sdchaginint linux_to_native_clockid(clockid_t *, clockid_t); 119293565Sdchagin 120271743Sbz#endif /* _LINUX_TIMER_H */ 121