Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.0 60 lines 1.3 kB view raw
1/* 2 * Copyright (C) 2012 Regents of the University of California 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation, version 2. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 */ 13 14#ifndef _ASM_RISCV_TIMEX_H 15#define _ASM_RISCV_TIMEX_H 16 17#include <asm/param.h> 18 19typedef unsigned long cycles_t; 20 21static inline cycles_t get_cycles_inline(void) 22{ 23 cycles_t n; 24 25 __asm__ __volatile__ ( 26 "rdtime %0" 27 : "=r" (n)); 28 return n; 29} 30#define get_cycles get_cycles_inline 31 32#ifdef CONFIG_64BIT 33static inline uint64_t get_cycles64(void) 34{ 35 return get_cycles(); 36} 37#else 38static inline uint64_t get_cycles64(void) 39{ 40 u32 lo, hi, tmp; 41 __asm__ __volatile__ ( 42 "1:\n" 43 "rdtimeh %0\n" 44 "rdtime %1\n" 45 "rdtimeh %2\n" 46 "bne %0, %2, 1b" 47 : "=&r" (hi), "=&r" (lo), "=&r" (tmp)); 48 return ((u64)hi << 32) | lo; 49} 50#endif 51 52#define ARCH_HAS_READ_CURRENT_TIMER 53 54static inline int read_current_timer(unsigned long *timer_val) 55{ 56 *timer_val = get_cycles(); 57 return 0; 58} 59 60#endif /* _ASM_RISCV_TIMEX_H */