162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * MIPS64 and compat userspace implementations of gettimeofday() 462306a36Sopenharmony_ci * and similar. 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2015 Imagination Technologies 762306a36Sopenharmony_ci * Copyright (C) 2018 ARM Limited 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci#include <linux/time.h> 1162306a36Sopenharmony_ci#include <linux/types.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#if _MIPS_SIM != _MIPS_SIM_ABI64 1462306a36Sopenharmony_ciint __vdso_clock_gettime(clockid_t clock, 1562306a36Sopenharmony_ci struct old_timespec32 *ts) 1662306a36Sopenharmony_ci{ 1762306a36Sopenharmony_ci return __cvdso_clock_gettime32(clock, ts); 1862306a36Sopenharmony_ci} 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#ifdef CONFIG_MIPS_CLOCK_VSYSCALL 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci/* 2362306a36Sopenharmony_ci * This is behind the ifdef so that we don't provide the symbol when there's no 2462306a36Sopenharmony_ci * possibility of there being a usable clocksource, because there's nothing we 2562306a36Sopenharmony_ci * can do without it. When libc fails the symbol lookup it should fall back on 2662306a36Sopenharmony_ci * the standard syscall path. 2762306a36Sopenharmony_ci */ 2862306a36Sopenharmony_ciint __vdso_gettimeofday(struct __kernel_old_timeval *tv, 2962306a36Sopenharmony_ci struct timezone *tz) 3062306a36Sopenharmony_ci{ 3162306a36Sopenharmony_ci return __cvdso_gettimeofday(tv, tz); 3262306a36Sopenharmony_ci} 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci#endif /* CONFIG_MIPS_CLOCK_VSYSCALL */ 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ciint __vdso_clock_getres(clockid_t clock_id, 3762306a36Sopenharmony_ci struct old_timespec32 *res) 3862306a36Sopenharmony_ci{ 3962306a36Sopenharmony_ci return __cvdso_clock_getres_time32(clock_id, res); 4062306a36Sopenharmony_ci} 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ciint __vdso_clock_gettime64(clockid_t clock, 4362306a36Sopenharmony_ci struct __kernel_timespec *ts) 4462306a36Sopenharmony_ci{ 4562306a36Sopenharmony_ci return __cvdso_clock_gettime(clock, ts); 4662306a36Sopenharmony_ci} 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci#else 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciint __vdso_clock_gettime(clockid_t clock, 5162306a36Sopenharmony_ci struct __kernel_timespec *ts) 5262306a36Sopenharmony_ci{ 5362306a36Sopenharmony_ci return __cvdso_clock_gettime(clock, ts); 5462306a36Sopenharmony_ci} 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci#ifdef CONFIG_MIPS_CLOCK_VSYSCALL 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci/* 5962306a36Sopenharmony_ci * This is behind the ifdef so that we don't provide the symbol when there's no 6062306a36Sopenharmony_ci * possibility of there being a usable clocksource, because there's nothing we 6162306a36Sopenharmony_ci * can do without it. When libc fails the symbol lookup it should fall back on 6262306a36Sopenharmony_ci * the standard syscall path. 6362306a36Sopenharmony_ci */ 6462306a36Sopenharmony_ciint __vdso_gettimeofday(struct __kernel_old_timeval *tv, 6562306a36Sopenharmony_ci struct timezone *tz) 6662306a36Sopenharmony_ci{ 6762306a36Sopenharmony_ci return __cvdso_gettimeofday(tv, tz); 6862306a36Sopenharmony_ci} 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci#endif /* CONFIG_MIPS_CLOCK_VSYSCALL */ 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ciint __vdso_clock_getres(clockid_t clock_id, 7362306a36Sopenharmony_ci struct __kernel_timespec *res) 7462306a36Sopenharmony_ci{ 7562306a36Sopenharmony_ci return __cvdso_clock_getres(clock_id, res); 7662306a36Sopenharmony_ci} 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci#endif 79