Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 
0003 #ifndef __ASM_VDSO_CSKY_GETTIMEOFDAY_H
0004 #define __ASM_VDSO_CSKY_GETTIMEOFDAY_H
0005 
0006 #ifndef __ASSEMBLY__
0007 
0008 #include <asm/barrier.h>
0009 #include <asm/unistd.h>
0010 #include <abi/regdef.h>
0011 #include <uapi/linux/time.h>
0012 
0013 #define VDSO_HAS_CLOCK_GETRES   1
0014 
0015 static __always_inline
0016 int gettimeofday_fallback(struct __kernel_old_timeval *_tv,
0017               struct timezone *_tz)
0018 {
0019     register struct __kernel_old_timeval *tv asm("a0") = _tv;
0020     register struct timezone *tz asm("a1") = _tz;
0021     register long ret asm("a0");
0022     register long nr asm(syscallid) = __NR_gettimeofday;
0023 
0024     asm volatile ("trap 0\n"
0025               : "=r" (ret)
0026               : "r"(tv), "r"(tz), "r"(nr)
0027               : "memory");
0028 
0029     return ret;
0030 }
0031 
0032 static __always_inline
0033 long clock_gettime_fallback(clockid_t _clkid, struct __kernel_timespec *_ts)
0034 {
0035     register clockid_t clkid asm("a0") = _clkid;
0036     register struct __kernel_timespec *ts asm("a1") = _ts;
0037     register long ret asm("a0");
0038     register long nr asm(syscallid) = __NR_clock_gettime64;
0039 
0040     asm volatile ("trap 0\n"
0041               : "=r" (ret)
0042               : "r"(clkid), "r"(ts), "r"(nr)
0043               : "memory");
0044 
0045     return ret;
0046 }
0047 
0048 static __always_inline
0049 long clock_gettime32_fallback(clockid_t _clkid, struct old_timespec32 *_ts)
0050 {
0051     register clockid_t clkid asm("a0") = _clkid;
0052     register struct old_timespec32 *ts asm("a1") = _ts;
0053     register long ret asm("a0");
0054     register long nr asm(syscallid) = __NR_clock_gettime;
0055 
0056     asm volatile ("trap 0\n"
0057               : "=r" (ret)
0058               : "r"(clkid), "r"(ts), "r"(nr)
0059               : "memory");
0060 
0061     return ret;
0062 }
0063 
0064 static __always_inline
0065 int clock_getres_fallback(clockid_t _clkid, struct __kernel_timespec *_ts)
0066 {
0067     register clockid_t clkid asm("a0") = _clkid;
0068     register struct __kernel_timespec *ts asm("a1") = _ts;
0069     register long ret asm("a0");
0070     register long nr asm(syscallid) = __NR_clock_getres_time64;
0071 
0072     asm volatile ("trap 0\n"
0073               : "=r" (ret)
0074               : "r"(clkid), "r"(ts), "r"(nr)
0075               : "memory");
0076 
0077     return ret;
0078 }
0079 
0080 static __always_inline
0081 int clock_getres32_fallback(clockid_t _clkid, struct old_timespec32 *_ts)
0082 {
0083     register clockid_t clkid asm("a0") = _clkid;
0084     register struct old_timespec32 *ts asm("a1") = _ts;
0085     register long ret asm("a0");
0086     register long nr asm(syscallid) = __NR_clock_getres;
0087 
0088     asm volatile ("trap 0\n"
0089               : "=r" (ret)
0090               : "r"(clkid), "r"(ts), "r"(nr)
0091               : "memory");
0092 
0093     return ret;
0094 }
0095 
0096 uint64_t csky_pmu_read_cc(void);
0097 static __always_inline u64 __arch_get_hw_counter(s32 clock_mode,
0098                          const struct vdso_data *vd)
0099 {
0100 #ifdef CONFIG_CSKY_PMU_V1
0101     return csky_pmu_read_cc();
0102 #else
0103     return 0;
0104 #endif
0105 }
0106 
0107 static __always_inline const struct vdso_data *__arch_get_vdso_data(void)
0108 {
0109     return _vdso_data;
0110 }
0111 
0112 #endif /* !__ASSEMBLY__ */
0113 
0114 #endif /* __ASM_VDSO_CSKY_GETTIMEOFDAY_H */