xref: /openbmc/qemu/include/hw/timer/mips_gictimer.h (revision 10f25e4844cb9b3f02fb032f88051dd5b65b4206)
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