140514051SYongbok Kim /* 240514051SYongbok Kim * This file is subject to the terms and conditions of the GNU General Public 340514051SYongbok Kim * License. See the file "COPYING" in the main directory of this archive 440514051SYongbok Kim * for more details. 540514051SYongbok Kim * 640514051SYongbok Kim * Copyright (C) 2016 Imagination Technologies 740514051SYongbok Kim * 840514051SYongbok Kim */ 940514051SYongbok Kim 102a6a4076SMarkus Armbruster #ifndef MIPS_GICTIMER_H 112a6a4076SMarkus Armbruster #define MIPS_GICTIMER_H 1240514051SYongbok Kim 1340514051SYongbok Kim typedef struct MIPSGICTimerVPState MIPSGICTimerVPState; 1440514051SYongbok Kim typedef struct MIPSGICTimerState MIPSGICTimerState; 1540514051SYongbok Kim 1640514051SYongbok Kim typedef void MIPSGICTimerCB(void *opaque, uint32_t vp_index); 1740514051SYongbok Kim 1840514051SYongbok Kim struct MIPSGICTimerVPState { 1940514051SYongbok Kim QEMUTimer *qtimer; 2040514051SYongbok Kim uint32_t vp_index; 2140514051SYongbok Kim uint32_t comparelo; 2240514051SYongbok Kim MIPSGICTimerState *gictimer; 2340514051SYongbok Kim }; 2440514051SYongbok Kim 2540514051SYongbok Kim struct MIPSGICTimerState { 2640514051SYongbok Kim void *opaque; 2740514051SYongbok Kim uint8_t countstop; 2840514051SYongbok Kim uint32_t sh_counterlo; 2940514051SYongbok Kim int32_t num_vps; 3040514051SYongbok Kim MIPSGICTimerVPState *vptimers; 3140514051SYongbok Kim MIPSGICTimerCB *cb; 3240514051SYongbok Kim }; 3340514051SYongbok Kim 34*eb90ab94SPaul Burton uint32_t mips_gictimer_get_freq(MIPSGICTimerState *gic); 3540514051SYongbok Kim uint32_t mips_gictimer_get_sh_count(MIPSGICTimerState *gic); 3640514051SYongbok Kim void mips_gictimer_store_sh_count(MIPSGICTimerState *gic, uint64_t count); 3740514051SYongbok Kim uint32_t mips_gictimer_get_vp_compare(MIPSGICTimerState *gictimer, 3840514051SYongbok Kim uint32_t vp_index); 3940514051SYongbok Kim void mips_gictimer_store_vp_compare(MIPSGICTimerState *gic, uint32_t vp_index, 4040514051SYongbok Kim uint64_t compare); 4140514051SYongbok Kim uint8_t mips_gictimer_get_countstop(MIPSGICTimerState *gic); 4240514051SYongbok Kim void mips_gictimer_start_count(MIPSGICTimerState *gic); 4340514051SYongbok Kim void mips_gictimer_stop_count(MIPSGICTimerState *gic); 4440514051SYongbok Kim MIPSGICTimerState *mips_gictimer_init(void *opaque, uint32_t nvps, 4540514051SYongbok Kim MIPSGICTimerCB *cb); 4640514051SYongbok Kim 472a6a4076SMarkus Armbruster #endif /* MIPS_GICTIMER_H */ 48