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