27 #if !defined(_SYS_TIME_H_) || !defined(_KERNEL) 28 #error "must be included via <sys/time.h> in kernel space" 31 #include <machine/_timecounter.h> 34 #define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0) 35 #define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec) 36 #define timespeccmp(tvp, uvp, cmp) \ 37 (((tvp)->tv_sec == (uvp)->tv_sec) ? \ 38 ((tvp)->tv_nsec cmp (uvp)->tv_nsec) : \ 39 ((tvp)->tv_sec cmp (uvp)->tv_sec)) 41 #define timespecadd(tsp, usp, vsp) \ 43 (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \ 44 (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \ 45 if ((vsp)->tv_nsec >= 1000000000L) { \ 47 (vsp)->tv_nsec -= 1000000000L; \ 50 #define timespecsub(tsp, usp, vsp) \ 52 (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \ 53 (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \ 54 if ((vsp)->tv_nsec < 0) { \ 56 (vsp)->tv_nsec += 1000000000L; \ 62 #define timevalclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0) 63 #define timevalisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) 64 #define timevalcmp(tvp, uvp, cmp) \ 65 (((tvp)->tv_sec == (uvp)->tv_sec) ? \ 66 ((tvp)->tv_usec cmp (uvp)->tv_usec) : \ 67 ((tvp)->tv_sec cmp (uvp)->tv_sec)) 74 void inittodr(time_t base);
77 #define time_second _Timecounter_Time_second 78 #define time_uptime _Timecounter_Time_uptime 79 extern struct timeval boottime;
80 extern struct bintime tc_tick_bt;
81 extern sbintime_t tc_tick_sbt;
82 extern struct bintime tick_bt;
83 extern sbintime_t tick_sbt;
84 extern int tc_precexp;
85 extern int tc_timepercentage;
86 extern struct bintime bt_timethreshold;
87 extern struct bintime bt_tickthreshold;
88 extern sbintime_t sbt_timethreshold;
89 extern sbintime_t sbt_tickthreshold;
112 #define binuptime(_bt) _Timecounter_Binuptime(_bt) 113 #define nanouptime(_tsp) _Timecounter_Nanouptime(_tsp) 114 #define microuptime(_tvp) _Timecounter_Microuptime(_tvp) 116 static __inline sbintime_t
122 return (bttosbt(_bt));
125 #define bintime(_bt) _Timecounter_Bintime(_bt) 126 #define nanotime(_tsp) _Timecounter_Nanotime(_tsp) 127 #define microtime(_tvp) _Timecounter_Microtime(_tvp) 129 #define getbinuptime(_bt) _Timecounter_Getbinuptime(_bt) 130 #define getnanouptime(_tsp) _Timecounter_Getnanouptime(_tsp) 131 #define getmicrouptime(_tvp) _Timecounter_Getmicrouptime(_tvp) 133 static __inline sbintime_t
139 return (bttosbt(_bt));
142 #define getbintime(_bt) _Timecounter_Getbintime(_bt) 143 #define getnanotime(_tsp) _Timecounter_Getnanotime(_tsp) 144 #define getmicrotime(_tvp) _Timecounter_Getmicrotime(_tvp) 146 #define getboottime(_tvp) _Timecounter_Getboottime(_tvp) 147 #define getboottimebin(_bt) _Timecounter_Getboottimebin(_bt) 150 int itimerdecr(
struct itimerval *itp,
int usec);
151 int itimerfix(
struct timeval *tv);
152 int ppsratecheck(
struct timeval *,
int *,
int);
153 int ratecheck(
struct timeval *,
const struct timeval *);
154 void timevaladd(
struct timeval *t1,
const struct timeval *t2);
155 void timevalsub(
struct timeval *t1,
const struct timeval *t2);
156 int tvtohz(
struct timeval *tv);
158 #define TC_DEFAULTPERC 5 160 #define BT2FREQ(bt) \ 161 (((uint64_t)0x8000000000000000 + ((bt)->frac >> 2)) / \ 164 #define SBT2FREQ(sbt) ((SBT_1S + ((sbt) >> 1)) / (sbt)) 166 #define FREQ2BT(freq, bt) \ 169 (bt)->frac = ((uint64_t)0x8000000000000000 / (freq)) << 1; \ 172 #define TIMESEL(sbt, sbt2) \ 173 (((sbt2) >= sbt_timethreshold) ? \ 174 ((*(sbt) = getsbinuptime()), 1) : ((*(sbt) = sbinuptime()), 0))