| // SPDX-License-Identifier: GPL-2.0-or-later | 
 | /* | 
 |  * MIPS64 and compat userspace implementations of gettimeofday() | 
 |  * and similar. | 
 |  * | 
 |  * Copyright (C) 2015 Imagination Technologies | 
 |  * Copyright (C) 2018 ARM Limited | 
 |  * | 
 |  */ | 
 | #include <linux/time.h> | 
 | #include <linux/types.h> | 
 | #include <vdso/gettime.h> | 
 |  | 
 | #if _MIPS_SIM != _MIPS_SIM_ABI64 | 
 | int __vdso_clock_gettime(clockid_t clock, | 
 | 			 struct old_timespec32 *ts) | 
 | { | 
 | 	return __cvdso_clock_gettime32(clock, ts); | 
 | } | 
 |  | 
 | #ifdef CONFIG_MIPS_CLOCK_VSYSCALL | 
 |  | 
 | /* | 
 |  * This is behind the ifdef so that we don't provide the symbol when there's no | 
 |  * possibility of there being a usable clocksource, because there's nothing we | 
 |  * can do without it. When libc fails the symbol lookup it should fall back on | 
 |  * the standard syscall path. | 
 |  */ | 
 | int __vdso_gettimeofday(struct __kernel_old_timeval *tv, | 
 | 			struct timezone *tz) | 
 | { | 
 | 	return __cvdso_gettimeofday(tv, tz); | 
 | } | 
 |  | 
 | #endif /* CONFIG_MIPS_CLOCK_VSYSCALL */ | 
 |  | 
 | int __vdso_clock_getres(clockid_t clock_id, | 
 | 			struct old_timespec32 *res) | 
 | { | 
 | 	return __cvdso_clock_getres_time32(clock_id, res); | 
 | } | 
 |  | 
 | int __vdso_clock_gettime64(clockid_t clock, | 
 | 			   struct __kernel_timespec *ts) | 
 | { | 
 | 	return __cvdso_clock_gettime(clock, ts); | 
 | } | 
 |  | 
 | #else | 
 |  | 
 | int __vdso_clock_gettime(clockid_t clock, | 
 | 			 struct __kernel_timespec *ts) | 
 | { | 
 | 	return __cvdso_clock_gettime(clock, ts); | 
 | } | 
 |  | 
 | #ifdef CONFIG_MIPS_CLOCK_VSYSCALL | 
 |  | 
 | /* | 
 |  * This is behind the ifdef so that we don't provide the symbol when there's no | 
 |  * possibility of there being a usable clocksource, because there's nothing we | 
 |  * can do without it. When libc fails the symbol lookup it should fall back on | 
 |  * the standard syscall path. | 
 |  */ | 
 | int __vdso_gettimeofday(struct __kernel_old_timeval *tv, | 
 | 			struct timezone *tz) | 
 | { | 
 | 	return __cvdso_gettimeofday(tv, tz); | 
 | } | 
 |  | 
 | #endif /* CONFIG_MIPS_CLOCK_VSYSCALL */ | 
 |  | 
 | int __vdso_clock_getres(clockid_t clock_id, | 
 | 			struct __kernel_timespec *res) | 
 | { | 
 | 	return __cvdso_clock_getres(clock_id, res); | 
 | } | 
 |  | 
 | #endif |