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