1 /*
2  * Copyright (c) 2006-2023, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2023-07-10     xqyjlj       The first version.
9  */
10 
11 #include "ktime.h"
12 
13 #define __KTIME_MUL ((1000ULL * 1000 * 1000) / RT_TICK_PER_SECOND)
14 
rt_ktime_boottime_get_us(struct timeval * tv)15 rt_weak rt_err_t rt_ktime_boottime_get_us(struct timeval *tv)
16 {
17     RT_ASSERT(tv != RT_NULL);
18 
19     rt_uint64_t ns = (rt_ktime_cputimer_getcnt() * rt_ktime_cputimer_getres()) / RT_KTIME_RESMUL;
20 
21     tv->tv_sec  = ns / (1000ULL * 1000 * 1000);
22     tv->tv_usec = (ns % (1000ULL * 1000 * 1000)) / 1000;
23 
24     return RT_EOK;
25 }
26 
rt_ktime_boottime_get_s(time_t * t)27 rt_weak rt_err_t rt_ktime_boottime_get_s(time_t *t)
28 {
29     RT_ASSERT(t != RT_NULL);
30 
31     rt_uint64_t ns = (rt_ktime_cputimer_getcnt() * rt_ktime_cputimer_getres()) / RT_KTIME_RESMUL;
32 
33     *t = ns / (1000ULL * 1000 * 1000);
34 
35     return RT_EOK;
36 }
37 
rt_ktime_boottime_get_ns(struct timespec * ts)38 rt_weak rt_err_t rt_ktime_boottime_get_ns(struct timespec *ts)
39 {
40     RT_ASSERT(ts != RT_NULL);
41 
42     rt_uint64_t ns = (rt_ktime_cputimer_getcnt() * rt_ktime_cputimer_getres()) / RT_KTIME_RESMUL;
43 
44     ts->tv_sec  = ns / (1000ULL * 1000 * 1000);
45     ts->tv_nsec = ns % (1000ULL * 1000 * 1000);
46 
47     return RT_EOK;
48 }
49