xref: /linux/arch/s390/include/asm/vdso/gettimeofday.h (revision 001821b0e79716c4e17c71d8e053a23599a7a508)
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 
17 static __always_inline const struct vdso_data *__arch_get_vdso_data(void)
18 {
19 	return _vdso_data;
20 }
21 
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
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
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
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
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