xref: /kvm-unit-tests/lib/riscv/asm/timer.h (revision 17f6f2fd17935eb5e564f621c71244b4a3ddeafb)
193bcbb09SJames Raphael Tiovalen /* SPDX-License-Identifier: GPL-2.0-only */
293bcbb09SJames Raphael Tiovalen #ifndef _ASMRISCV_TIMER_H_
393bcbb09SJames Raphael Tiovalen #define _ASMRISCV_TIMER_H_
493bcbb09SJames Raphael Tiovalen 
593bcbb09SJames Raphael Tiovalen #include <asm/csr.h>
693bcbb09SJames Raphael Tiovalen 
793bcbb09SJames Raphael Tiovalen extern void timer_get_frequency(void);
8*ff2fceb1SAndrew Jones extern void timer_start(unsigned long duration_us);
9*ff2fceb1SAndrew Jones extern void timer_stop(void);
1093bcbb09SJames Raphael Tiovalen 
timer_get_cycles(void)1193bcbb09SJames Raphael Tiovalen static inline uint64_t timer_get_cycles(void)
1293bcbb09SJames Raphael Tiovalen {
1393bcbb09SJames Raphael Tiovalen 	return csr_read(CSR_TIME);
1493bcbb09SJames Raphael Tiovalen }
1593bcbb09SJames Raphael Tiovalen 
timer_irq_enable(void)1614fa12b1SJames Raphael Tiovalen static inline void timer_irq_enable(void)
1714fa12b1SJames Raphael Tiovalen {
1814fa12b1SJames Raphael Tiovalen 	csr_set(CSR_SIE, IE_TIE);
1914fa12b1SJames Raphael Tiovalen }
2014fa12b1SJames Raphael Tiovalen 
timer_irq_disable(void)2114fa12b1SJames Raphael Tiovalen static inline void timer_irq_disable(void)
2214fa12b1SJames Raphael Tiovalen {
2314fa12b1SJames Raphael Tiovalen 	csr_clear(CSR_SIE, IE_TIE);
2414fa12b1SJames Raphael Tiovalen }
2514fa12b1SJames Raphael Tiovalen 
2693bcbb09SJames Raphael Tiovalen #endif /* _ASMRISCV_TIMER_H_ */
27