blob: 529f8bd5619c412760759b8697c69b49649ee16e [file] [log] [blame]
/* Copyright 2019 SiFive, Inc */
/* SPDX-License-Identifier: Apache-2.0 */
#include <metal/time.h>
#include <metal/timer.h>
int metal_gettimeofday(struct timeval *tp, void *tzp)
{
int rv;
unsigned long long mcc, timebase;
if ((rv = metal_timer_get_cyclecount(0, &mcc))) {
return -1;
}
if ((rv = metal_timer_get_timebase_frequency(0, &timebase))) {
return -1;
}
tp->tv_sec = mcc / timebase;
tp->tv_usec = mcc % timebase * 1000000 / timebase;
return 0;
}
time_t metal_time (void)
{
struct timeval now;
if (metal_gettimeofday(&now, NULL) < 0)
now.tv_sec = (time_t) -1;
return now.tv_sec;
}