15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*	$OpenBSD: time.h,v 1.11 2000/10/10 13:36:48 itojun Exp $	*/
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*	$NetBSD: time.h,v 1.18 1996/04/23 10:29:33 mycroft Exp $	*/
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 1982, 1986, 1993
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *	The Regents of the University of California.  All rights reserved.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * modification, are permitted provided that the following conditions
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * are met:
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *    documentation and/or other materials provided with the distribution.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 3. Neither the name of the University nor the names of its contributors
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *    may be used to endorse or promote products derived from this software
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *    without specific prior written permission.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SUCH DAMAGE.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *	@(#)time.h	8.2 (Berkeley) 7/10/94
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef _SYS_TIME_H_
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _SYS_TIME_H_
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/types.h>
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Structure returned by gettimeofday(2) system call,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * and used in other calls.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct timeval {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	long	tv_sec;		/* seconds */
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	long	tv_usec;	/* and microseconds */
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Structure defined by POSIX.1b to be like a timeval.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct timespec {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	time_t	tv_sec;		/* seconds */
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	long	tv_nsec;	/* and nanoseconds */
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	TIMEVAL_TO_TIMESPEC(tv, ts) {					\
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	(ts)->tv_sec = (tv)->tv_sec;					\
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	(ts)->tv_nsec = (tv)->tv_usec * 1000;				\
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	TIMESPEC_TO_TIMEVAL(tv, ts) {					\
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	(tv)->tv_sec = (ts)->tv_sec;					\
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	(tv)->tv_usec = (ts)->tv_nsec / 1000;				\
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct timezone {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int	tz_minuteswest;	/* minutes west of Greenwich */
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int	tz_dsttime;	/* type of dst correction */
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	DST_NONE	0	/* not on dst */
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	DST_USA		1	/* USA style dst */
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	DST_AUST	2	/* Australian style dst */
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	DST_WET		3	/* Western European dst */
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	DST_MET		4	/* Middle European dst */
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	DST_EET		5	/* Eastern European dst */
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	DST_CAN		6	/* Canada */
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Operations on timevals. */
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	timerclear(tvp)		(tvp)->tv_sec = (tvp)->tv_usec = 0
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	timerisset(tvp)		((tvp)->tv_sec || (tvp)->tv_usec)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	timercmp(tvp, uvp, cmp)						\
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	(((tvp)->tv_sec == (uvp)->tv_sec) ?				\
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    ((tvp)->tv_usec cmp (uvp)->tv_usec) :			\
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    ((tvp)->tv_sec cmp (uvp)->tv_sec))
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	timeradd(tvp, uvp, vvp)						\
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	do {								\
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec;		\
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec;	\
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		if ((vvp)->tv_usec >= 1000000) {			\
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			(vvp)->tv_sec++;				\
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			(vvp)->tv_usec -= 1000000;			\
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		}							\
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	} while (0)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	timersub(tvp, uvp, vvp)						\
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	do {								\
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;		\
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;	\
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		if ((vvp)->tv_usec < 0) {				\
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			(vvp)->tv_sec--;				\
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			(vvp)->tv_usec += 1000000;			\
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		}							\
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	} while (0)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Operations on timespecs. */
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	timespecclear(tsp)		(tsp)->tv_sec = (tsp)->tv_nsec = 0
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	timespecisset(tsp)		((tsp)->tv_sec || (tsp)->tv_nsec)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	timespeccmp(tsp, usp, cmp)					\
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	(((tsp)->tv_sec == (usp)->tv_sec) ?				\
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    ((tsp)->tv_nsec cmp (usp)->tv_nsec) :			\
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    ((tsp)->tv_sec cmp (usp)->tv_sec))
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	timespecadd(tsp, usp, vsp)					\
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	do {								\
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		(vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec;		\
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		(vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec;	\
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		if ((vsp)->tv_nsec >= 1000000000L) {			\
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			(vsp)->tv_sec++;				\
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			(vsp)->tv_nsec -= 1000000000L;			\
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		}							\
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	} while (0)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	timespecsub(tsp, usp, vsp)					\
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	do {								\
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		(vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec;		\
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		(vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec;	\
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		if ((vsp)->tv_nsec < 0) {				\
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			(vsp)->tv_sec--;				\
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			(vsp)->tv_nsec += 1000000000L;			\
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		}							\
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	} while (0)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Names of the interval timers, and structure
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * defining a timer setting.
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	ITIMER_REAL	0
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	ITIMER_VIRTUAL	1
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define	ITIMER_PROF	2
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct	itimerval {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	struct	timeval it_interval;	/* timer interval */
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	struct	timeval it_value;	/* current value */
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Getkerninfo clock information structure
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct clockinfo {
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int	hz;		/* clock frequency */
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int	tick;		/* micro-seconds per hz tick */
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int	tickadj;	/* clock skew rate for adjtime() */
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int	stathz;		/* statistics clock frequency */
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int	profhz;		/* profiling clock frequency */
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CLOCK_REALTIME	0
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CLOCK_VIRTUAL	1
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CLOCK_PROF	2
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TIMER_RELTIME	0x0	/* relative timer */
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TIMER_ABSTIME	0x1	/* absolute timer */
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* --- stuff got cut here - niels --- */
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* !_SYS_TIME_H_ */
164