1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/* $OpenBSD: time.h,v 1.11 2000/10/10 13:36:48 itojun Exp $ */ 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/* $NetBSD: time.h,v 1.18 1996/04/23 10:29:33 mycroft Exp $ */ 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/* 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * Copyright (c) 1982, 1986, 1993 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * The Regents of the University of California. All rights reserved. 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * Redistribution and use in source and binary forms, with or without 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * modification, are permitted provided that the following conditions 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * are met: 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 1. Redistributions of source code must retain the above copyright 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * notice, this list of conditions and the following disclaimer. 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 2. Redistributions in binary form must reproduce the above copyright 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * notice, this list of conditions and the following disclaimer in the 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * documentation and/or other materials provided with the distribution. 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 3. Neither the name of the University nor the names of its contributors 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * may be used to endorse or promote products derived from this software 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * without specific prior written permission. 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * SUCH DAMAGE. 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * @(#)time.h 8.2 (Berkeley) 7/10/94 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott */ 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef _SYS_TIME_H_ 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define _SYS_TIME_H_ 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <sys/types.h> 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/* 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * Structure returned by gettimeofday(2) system call, 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * and used in other calls. 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott */ 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstruct timeval { 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott long tv_sec; /* seconds */ 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott long tv_usec; /* and microseconds */ 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/* 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * Structure defined by POSIX.1b to be like a timeval. 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott */ 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstruct timespec { 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott time_t tv_sec; /* seconds */ 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott long tv_nsec; /* and nanoseconds */ 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define TIMEVAL_TO_TIMESPEC(tv, ts) { \ 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (ts)->tv_sec = (tv)->tv_sec; \ 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (ts)->tv_nsec = (tv)->tv_usec * 1000; \ 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define TIMESPEC_TO_TIMEVAL(tv, ts) { \ 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (tv)->tv_sec = (ts)->tv_sec; \ 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (tv)->tv_usec = (ts)->tv_nsec / 1000; \ 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstruct timezone { 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int tz_minuteswest; /* minutes west of Greenwich */ 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int tz_dsttime; /* type of dst correction */ 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define DST_NONE 0 /* not on dst */ 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define DST_USA 1 /* USA style dst */ 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define DST_AUST 2 /* Australian style dst */ 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define DST_WET 3 /* Western European dst */ 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define DST_MET 4 /* Middle European dst */ 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define DST_EET 5 /* Eastern European dst */ 76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define DST_CAN 6 /* Canada */ 77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/* Operations on timevals. */ 79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) 81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define timercmp(tvp, uvp, cmp) \ 82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (((tvp)->tv_sec == (uvp)->tv_sec) ? \ 83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ((tvp)->tv_usec cmp (uvp)->tv_usec) : \ 84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ((tvp)->tv_sec cmp (uvp)->tv_sec)) 85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define timeradd(tvp, uvp, vvp) \ 86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott do { \ 87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \ 88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \ 89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if ((vvp)->tv_usec >= 1000000) { \ 90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vvp)->tv_sec++; \ 91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vvp)->tv_usec -= 1000000; \ 92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } \ 93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } while (0) 94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define timersub(tvp, uvp, vvp) \ 95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott do { \ 96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ 97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \ 98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if ((vvp)->tv_usec < 0) { \ 99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vvp)->tv_sec--; \ 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vvp)->tv_usec += 1000000; \ 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } \ 102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } while (0) 103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/* Operations on timespecs. */ 105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define timespecclear(tsp) (tsp)->tv_sec = (tsp)->tv_nsec = 0 106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define timespecisset(tsp) ((tsp)->tv_sec || (tsp)->tv_nsec) 107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define timespeccmp(tsp, usp, cmp) \ 108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (((tsp)->tv_sec == (usp)->tv_sec) ? \ 109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ((tsp)->tv_nsec cmp (usp)->tv_nsec) : \ 110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ((tsp)->tv_sec cmp (usp)->tv_sec)) 111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define timespecadd(tsp, usp, vsp) \ 112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott do { \ 113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \ 114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \ 115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if ((vsp)->tv_nsec >= 1000000000L) { \ 116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vsp)->tv_sec++; \ 117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vsp)->tv_nsec -= 1000000000L; \ 118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } \ 119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } while (0) 120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define timespecsub(tsp, usp, vsp) \ 121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott do { \ 122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \ 123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \ 124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if ((vsp)->tv_nsec < 0) { \ 125c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vsp)->tv_sec--; \ 126c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (vsp)->tv_nsec += 1000000000L; \ 127c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } \ 128c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } while (0) 129c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 130c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/* 131c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * Names of the interval timers, and structure 132c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * defining a timer setting. 133c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott */ 134c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ITIMER_REAL 0 135c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ITIMER_VIRTUAL 1 136c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ITIMER_PROF 2 137c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 138c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstruct itimerval { 139c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct timeval it_interval; /* timer interval */ 140c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct timeval it_value; /* current value */ 141c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 142c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 143c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/* 144c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * Getkerninfo clock information structure 145c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott */ 146c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstruct clockinfo { 147c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int hz; /* clock frequency */ 148c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int tick; /* micro-seconds per hz tick */ 149c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int tickadj; /* clock skew rate for adjtime() */ 150c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int stathz; /* statistics clock frequency */ 151c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int profhz; /* profiling clock frequency */ 152c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 153c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 154c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define CLOCK_REALTIME 0 155c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define CLOCK_VIRTUAL 1 156c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define CLOCK_PROF 2 157c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 158c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define TIMER_RELTIME 0x0 /* relative timer */ 159c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define TIMER_ABSTIME 0x1 /* absolute timer */ 160c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 161c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/* --- stuff got cut here - niels --- */ 162c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 163c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif /* !_SYS_TIME_H_ */ 164