#include <u.h>#include <libc.h>#include <tos.h> struct timeval { long tv_sec; long tv_usec;}; static uvlongnanosec(void){ static uvlong fasthz, xstart; uvlong x, div; if(fasthz == ~0ULL) return nsec() - xstart; if(fasthz == 0){ fasthz = _tos->cyclefreq; if(fasthz == 0){ fasthz = ~0ULL; xstart = nsec(); fprint(2, "cyclefreq not available, falling back to nsec()\n"); fprint(2, "you might want to disable aux/timesync\n"); }else{ cycles(&xstart); } return 0; } cycles(&x); x -= xstart; /* this is ugly */ for(div = 1000000000ULL; x < 0x1999999999999999ULL && div > 1 ; div /= 10ULL, x *= 10ULL); return x / (fasthz / div);} intgettimeofday(struct timeval *tp, struct timezone *tzp){ long long t; USED(tzp); t = nanosec(); tp->tv_sec = t / 1000000000ULL; tp->tv_usec = (t / 1000ULL)%1000000ULL; return 0;}
#include <u.h>
#include <libc.h>
#include <tos.h>
struct timeval {
long tv_sec;
long tv_usec;
};
static uvlong
nanosec(void)
{
static uvlong fasthz, xstart;
uvlong x, div;
if(fasthz == ~0ULL)
return nsec() - xstart;
if(fasthz == 0){
fasthz = _tos->cyclefreq;
if(fasthz == 0){
fasthz = ~0ULL;
xstart = nsec();
fprint(2, "cyclefreq not available, falling back to nsec()\n");
fprint(2, "you might want to disable aux/timesync\n");
}else{
cycles(&xstart);
}
return 0;
}
cycles(&x);
x -= xstart;
/* this is ugly */
for(div = 1000000000ULL; x < 0x1999999999999999ULL && div > 1 ; div /= 10ULL, x *= 10ULL);
return x / (fasthz / div);
}
int
gettimeofday(struct timeval *tp, struct timezone *tzp)
{
long long t;
USED(tzp);
t = nanosec();
tp->tv_sec = t / 1000000000ULL;
tp->tv_usec = (t / 1000ULL)%1000000ULL;
return 0;
}