#ifndef _LINUX_KTIME_H_
#define _LINUX_KTIME_H_
#include <linux/time.h>
#include <linux/jiffies.h>
typedef s64 ktime_t;
static inline ktime_t
ktime_set(const s64 secs, const unsigned long nsecs)
{
return (secs * NSEC_PER_SEC) + (s64)nsecs;
}
static inline s64
ktime_to_us(const ktime_t kt)
{
return kt / NSEC_PER_USEC;
}
static inline s64
ktime_us_delta(const ktime_t later, const ktime_t earlier)
{
return later - earlier;
}
static inline int64_t ktime_to_ns(ktime_t kt)
{
return kt;
}
static inline struct timeval ktime_to_timeval(ktime_t kt)
{
return ns_to_timeval(kt);
}
static inline ktime_t ktime_add_ns(ktime_t kt, int64_t ns)
{
return kt + ns;
}
static inline ktime_t
ktime_add_ms(const ktime_t kt, const u64 ms)
{
return ktime_add_ns(kt, NSEC_PER_MSEC * ms);
}
static inline ktime_t
ktime_add_us(ktime_t kt, int64_t us)
{
return (ktime_add_ns(kt, us * NSEC_PER_USEC));
}
static inline ktime_t ktime_sub_ns(ktime_t kt, int64_t ns)
{
return kt - ns;
}
static inline ktime_t ktime_get(void)
{
struct timespec ts;
nanouptime(&ts);
return (ts.tv_sec * NSEC_PER_SEC) + ts.tv_nsec;
}
static inline ktime_t ktime_get_real_seconds(void)
{
struct timespec ts;
nanouptime(&ts);
return (ts.tv_sec);
}
static inline ktime_t
ktime_sub(ktime_t lhs, ktime_t rhs)
{
return lhs - rhs;
}
static inline ktime_t
ktime_add(ktime_t lhs, ktime_t rhs)
{
return lhs + rhs;
}
static inline ktime_t
ns_to_ktime(u64 ns)
{
return ns;
}
static inline bool
ktime_before(const ktime_t cmp1, const ktime_t cmp2)
{
return (cmp1 < cmp2);
}
static inline bool
ktime_after(const ktime_t cmp1, const ktime_t cmp2)
{
return (cmp1 > cmp2);
}
#define ktime_to_timespec64(kt) ns_to_timespec((kt))
#include <linux/timekeeping.h>
#endif