1 /* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 * 6 * Copyright (C) 2016 Imagination Technologies 7 * 8 */ 9 10 #ifndef MIPS_GICTIMER_H 11 #define MIPS_GICTIMER_H 12 13 typedef struct MIPSGICTimerVPState MIPSGICTimerVPState; 14 typedef struct MIPSGICTimerState MIPSGICTimerState; 15 16 typedef void MIPSGICTimerCB(void *opaque, uint32_t vp_index); 17 18 struct MIPSGICTimerVPState { 19 QEMUTimer *qtimer; 20 uint32_t vp_index; 21 uint32_t comparelo; 22 MIPSGICTimerState *gictimer; 23 }; 24 25 struct MIPSGICTimerState { 26 void *opaque; 27 uint8_t countstop; 28 uint32_t sh_counterlo; 29 int32_t num_vps; 30 MIPSGICTimerVPState *vptimers; 31 MIPSGICTimerCB *cb; 32 }; 33 34 uint32_t mips_gictimer_get_freq(MIPSGICTimerState *gic); 35 uint32_t mips_gictimer_get_sh_count(MIPSGICTimerState *gic); 36 void mips_gictimer_store_sh_count(MIPSGICTimerState *gic, uint64_t count); 37 uint32_t mips_gictimer_get_vp_compare(MIPSGICTimerState *gictimer, 38 uint32_t vp_index); 39 void mips_gictimer_store_vp_compare(MIPSGICTimerState *gic, uint32_t vp_index, 40 uint64_t compare); 41 uint8_t mips_gictimer_get_countstop(MIPSGICTimerState *gic); 42 void mips_gictimer_start_count(MIPSGICTimerState *gic); 43 void mips_gictimer_stop_count(MIPSGICTimerState *gic); 44 MIPSGICTimerState *mips_gictimer_init(void *opaque, uint32_t nvps, 45 MIPSGICTimerCB *cb); 46 47 #endif /* MIPS_GICTIMER_H */ 48