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