1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef ASM_VDSO_GETTIMEOFDAY_H
3 #define ASM_VDSO_GETTIMEOFDAY_H
4
5 #define VDSO_HAS_TIME 1
6
7 #define VDSO_HAS_CLOCK_GETRES 1
8
9 #define VDSO_DELTA_NOMASK 1
10
11 #include <asm/syscall.h>
12 #include <asm/timex.h>
13 #include <asm/unistd.h>
14 #include <linux/compiler.h>
15
16
__arch_get_vdso_data(void)17 static __always_inline const struct vdso_data *__arch_get_vdso_data(void)
18 {
19 return _vdso_data;
20 }
21
__arch_get_hw_counter(s32 clock_mode,const struct vdso_data * vd)22 static inline u64 __arch_get_hw_counter(s32 clock_mode, const struct vdso_data *vd)
23 {
24 u64 adj, now;
25
26 now = get_tod_clock();
27 adj = vd->arch_data.tod_steering_end - now;
28 if (unlikely((s64) adj > 0))
29 now += (vd->arch_data.tod_steering_delta < 0) ? (adj >> 15) : -(adj >> 15);
30 return now;
31 }
32
33 static __always_inline
clock_gettime_fallback(clockid_t clkid,struct __kernel_timespec * ts)34 long clock_gettime_fallback(clockid_t clkid, struct __kernel_timespec *ts)
35 {
36 return syscall2(__NR_clock_gettime, (long)clkid, (long)ts);
37 }
38
39 static __always_inline
gettimeofday_fallback(register struct __kernel_old_timeval * tv,register struct timezone * tz)40 long gettimeofday_fallback(register struct __kernel_old_timeval *tv,
41 register struct timezone *tz)
42 {
43 return syscall2(__NR_gettimeofday, (long)tv, (long)tz);
44 }
45
46 static __always_inline
clock_getres_fallback(clockid_t clkid,struct __kernel_timespec * ts)47 long clock_getres_fallback(clockid_t clkid, struct __kernel_timespec *ts)
48 {
49 return syscall2(__NR_clock_getres, (long)clkid, (long)ts);
50 }
51
52 #ifdef CONFIG_TIME_NS
53 static __always_inline
__arch_get_timens_vdso_data(const struct vdso_data * vd)54 const struct vdso_data *__arch_get_timens_vdso_data(const struct vdso_data *vd)
55 {
56 return _timens_data;
57 }
58 #endif
59
60 #endif
61