1*b819cea2SGordon Ross /* 2*b819cea2SGordon Ross * This file and its contents are supplied under the terms of the 3*b819cea2SGordon Ross * Common Development and Distribution License ("CDDL"), version 1.0. 4*b819cea2SGordon Ross * You may only use this file in accordance with the terms of version 5*b819cea2SGordon Ross * 1.0 of the CDDL. 6*b819cea2SGordon Ross * 7*b819cea2SGordon Ross * A full copy of the text of the CDDL should have accompanied this 8*b819cea2SGordon Ross * source. A copy of the CDDL is also available via the Internet at 9*b819cea2SGordon Ross * http://www.illumos.org/license/CDDL. 10*b819cea2SGordon Ross */ 11*b819cea2SGordon Ross 12*b819cea2SGordon Ross /* 13*b819cea2SGordon Ross * Copyright 2014 Nexenta Systems, Inc. All rights reserved. 14*b819cea2SGordon Ross */ 15*b819cea2SGordon Ross 16*b819cea2SGordon Ross 17*b819cea2SGordon Ross #include <sys/types.h> 18*b819cea2SGordon Ross #include <sys/time.h> 19*b819cea2SGordon Ross #include <sys/thread.h> 20*b819cea2SGordon Ross #include <sys/proc.h> 21*b819cea2SGordon Ross 22*b819cea2SGordon Ross #include <sys/poll.h> 23*b819cea2SGordon Ross 24*b819cea2SGordon Ross #include <time.h> 25*b819cea2SGordon Ross 26*b819cea2SGordon Ross int hz = 1000; 27*b819cea2SGordon Ross int tick_per_msec = 0; 28*b819cea2SGordon Ross int msec_per_tick = 1; 29*b819cea2SGordon Ross int usec_per_tick = 1000; 30*b819cea2SGordon Ross int nsec_per_tick = 1000000; 31*b819cea2SGordon Ross time_t boot_time = 0; 32*b819cea2SGordon Ross 33*b819cea2SGordon Ross #pragma init(_boot_time_init) 34*b819cea2SGordon Ross static int _boot_time_init(void)35*b819cea2SGordon Ross_boot_time_init(void) 36*b819cea2SGordon Ross { 37*b819cea2SGordon Ross boot_time = time(NULL); 38*b819cea2SGordon Ross return (0); 39*b819cea2SGordon Ross } 40*b819cea2SGordon Ross 41*b819cea2SGordon Ross clock_t ddi_get_lbolt(void)42*b819cea2SGordon Rossddi_get_lbolt(void) 43*b819cea2SGordon Ross { 44*b819cea2SGordon Ross hrtime_t hrt; 45*b819cea2SGordon Ross 46*b819cea2SGordon Ross hrt = gethrtime(); 47*b819cea2SGordon Ross return (hrt / nsec_per_tick); 48*b819cea2SGordon Ross } 49*b819cea2SGordon Ross 50*b819cea2SGordon Ross int64_t ddi_get_lbolt64(void)51*b819cea2SGordon Rossddi_get_lbolt64(void) 52*b819cea2SGordon Ross { 53*b819cea2SGordon Ross hrtime_t hrt; 54*b819cea2SGordon Ross 55*b819cea2SGordon Ross hrt = gethrtime(); 56*b819cea2SGordon Ross return (hrt / nsec_per_tick); 57*b819cea2SGordon Ross } 58*b819cea2SGordon Ross 59*b819cea2SGordon Ross void clock2ts(clock_t clk,timespec_t * ts)60*b819cea2SGordon Rossclock2ts(clock_t clk, timespec_t *ts) 61*b819cea2SGordon Ross { 62*b819cea2SGordon Ross ts->tv_sec = clk / hz; 63*b819cea2SGordon Ross ts->tv_nsec = (clk % hz) * (NANOSEC / hz); 64*b819cea2SGordon Ross } 65*b819cea2SGordon Ross 66*b819cea2SGordon Ross hrtime_t gethrtime_unscaled(void)67*b819cea2SGordon Rossgethrtime_unscaled(void) 68*b819cea2SGordon Ross { 69*b819cea2SGordon Ross return (gethrtime()); 70*b819cea2SGordon Ross } 71*b819cea2SGordon Ross 72*b819cea2SGordon Ross void gethrestime(timespec_t * ts)73*b819cea2SGordon Rossgethrestime(timespec_t *ts) 74*b819cea2SGordon Ross { 75*b819cea2SGordon Ross hrtime_t hrt; 76*b819cea2SGordon Ross 77*b819cea2SGordon Ross hrt = gethrtime(); 78*b819cea2SGordon Ross ts->tv_sec = hrt / NANOSEC; 79*b819cea2SGordon Ross ts->tv_nsec = hrt % NANOSEC; 80*b819cea2SGordon Ross } 81*b819cea2SGordon Ross 82*b819cea2SGordon Ross time_t gethrestime_sec(void)83*b819cea2SGordon Rossgethrestime_sec(void) 84*b819cea2SGordon Ross { 85*b819cea2SGordon Ross return (time(NULL)); 86*b819cea2SGordon Ross } 87*b819cea2SGordon Ross 88*b819cea2SGordon Ross /* ARGSUSED */ 89*b819cea2SGordon Ross void scalehrtime(hrtime_t * t)90*b819cea2SGordon Rossscalehrtime(hrtime_t *t) 91*b819cea2SGordon Ross { 92*b819cea2SGordon Ross } 93