ppc: allow the hdecr timer to be created/destroyed
Machines which don't emulate the HDEC facility are able to use the timer for something else. Provide functions to start and stop the hdecr timer. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> [ clg: checkpatch fixes ] Message-Id: <20220216102545.1808018-4-npiggin@gmail.com> Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
5ff40b0124
commit
93aeb70210
21
hw/ppc/ppc.c
21
hw/ppc/ppc.c
@ -1083,6 +1083,27 @@ clk_setup_cb cpu_ppc_tb_init (CPUPPCState *env, uint32_t freq)
|
||||
return &cpu_ppc_set_tb_clk;
|
||||
}
|
||||
|
||||
/* cpu_ppc_hdecr_init may be used if the timer is not used by HDEC emulation */
|
||||
void cpu_ppc_hdecr_init(CPUPPCState *env)
|
||||
{
|
||||
PowerPCCPU *cpu = env_archcpu(env);
|
||||
|
||||
assert(env->tb_env->hdecr_timer == NULL);
|
||||
|
||||
env->tb_env->hdecr_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
|
||||
&cpu_ppc_hdecr_cb, cpu);
|
||||
}
|
||||
|
||||
void cpu_ppc_hdecr_exit(CPUPPCState *env)
|
||||
{
|
||||
PowerPCCPU *cpu = env_archcpu(env);
|
||||
|
||||
timer_free(env->tb_env->hdecr_timer);
|
||||
env->tb_env->hdecr_timer = NULL;
|
||||
|
||||
cpu_ppc_hdecr_lower(cpu);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* PowerPC 40x timers */
|
||||
|
||||
|
@ -54,6 +54,9 @@ struct ppc_tb_t {
|
||||
|
||||
uint64_t cpu_ppc_get_tb(ppc_tb_t *tb_env, uint64_t vmclk, int64_t tb_offset);
|
||||
clk_setup_cb cpu_ppc_tb_init (CPUPPCState *env, uint32_t freq);
|
||||
void cpu_ppc_hdecr_init(CPUPPCState *env);
|
||||
void cpu_ppc_hdecr_exit(CPUPPCState *env);
|
||||
|
||||
/* Embedded PowerPC DCR management */
|
||||
typedef uint32_t (*dcr_read_cb)(void *opaque, int dcrn);
|
||||
typedef void (*dcr_write_cb)(void *opaque, int dcrn, uint32_t val);
|
||||
|
Loading…
x
Reference in New Issue
Block a user