xref: /openbmc/qemu/include/hw/timer/mips_gictimer.h (revision 4a09d0bb)
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_sh_count(MIPSGICTimerState *gic);
35 void mips_gictimer_store_sh_count(MIPSGICTimerState *gic, uint64_t count);
36 uint32_t mips_gictimer_get_vp_compare(MIPSGICTimerState *gictimer,
37                                       uint32_t vp_index);
38 void mips_gictimer_store_vp_compare(MIPSGICTimerState *gic, uint32_t vp_index,
39                                     uint64_t compare);
40 uint8_t mips_gictimer_get_countstop(MIPSGICTimerState *gic);
41 void mips_gictimer_start_count(MIPSGICTimerState *gic);
42 void mips_gictimer_stop_count(MIPSGICTimerState *gic);
43 MIPSGICTimerState *mips_gictimer_init(void *opaque, uint32_t nvps,
44                                       MIPSGICTimerCB *cb);
45 
46 #endif /* MIPS_GICTIMER_H */
47