|  | // 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> | 
|  |  | 
|  | #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 |