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