| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (C) 2020-2022 Loongson Technology Corporation Limited |
| */ |
| #ifndef _ASM_TIMEX_H |
| #define _ASM_TIMEX_H |
| |
| #ifdef __KERNEL__ |
| |
| #include <linux/compiler.h> |
| |
| #include <asm/cpu.h> |
| #include <asm/cpu-features.h> |
| |
| typedef unsigned long cycles_t; |
| |
| #define get_cycles get_cycles |
| |
| static inline cycles_t get_cycles(void) |
| { |
| #ifdef CONFIG_32BIT |
| return rdtime_l(); |
| #else |
| return rdtime_d(); |
| #endif |
| } |
| |
| #ifdef CONFIG_32BIT |
| |
| #define get_cycles_hi get_cycles_hi |
| |
| static inline cycles_t get_cycles_hi(void) |
| { |
| return rdtime_h(); |
| } |
| |
| #endif |
| |
| static inline u64 get_cycles64(void) |
| { |
| #ifdef CONFIG_32BIT |
| u32 hi, lo; |
| |
| do { |
| hi = rdtime_h(); |
| lo = rdtime_l(); |
| } while (hi != rdtime_h()); |
| |
| return ((u64)hi << 32) | lo; |
| #else |
| return rdtime_d(); |
| #endif |
| } |
| |
| #endif /* __KERNEL__ */ |
| |
| #endif /* _ASM_TIMEX_H */ |