summaryrefslogtreecommitdiff
path: root/FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1_FreedomStudio/freedom-metal/src/time.c
blob: 529f8bd5619c412760759b8697c69b49649ee16e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/* 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;
}