mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 09:43:56 -06:00
Always make all PowerPC exception definitions visible.
Always make the hypervisor timers available. Remove all TARGET_PPC64H checks, keeping a few if (0) tests for cases that cannot be properly handled with the current PowerPC CPU definition. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3656 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
5a6932d51d
commit
b172c56a6d
7 changed files with 69 additions and 76 deletions
24
hw/ppc.c
24
hw/ppc.c
|
@ -428,13 +428,11 @@ struct ppc_tb_t {
|
|||
uint64_t decr_next; /* Tick for next decr interrupt */
|
||||
uint32_t decr_freq; /* decrementer frequency */
|
||||
struct QEMUTimer *decr_timer;
|
||||
#if defined(TARGET_PPC64H)
|
||||
/* Hypervisor decrementer management */
|
||||
uint64_t hdecr_next; /* Tick for next hdecr interrupt */
|
||||
struct QEMUTimer *hdecr_timer;
|
||||
uint64_t purr_load;
|
||||
uint64_t purr_start;
|
||||
#endif
|
||||
void *opaque;
|
||||
};
|
||||
|
||||
|
@ -643,7 +641,6 @@ uint32_t cpu_ppc_load_decr (CPUState *env)
|
|||
return _cpu_ppc_load_decr(env, &tb_env->decr_next);
|
||||
}
|
||||
|
||||
#if defined(TARGET_PPC64H)
|
||||
uint32_t cpu_ppc_load_hdecr (CPUState *env)
|
||||
{
|
||||
ppc_tb_t *tb_env = env->tb_env;
|
||||
|
@ -660,7 +657,6 @@ uint64_t cpu_ppc_load_purr (CPUState *env)
|
|||
|
||||
return tb_env->purr_load + muldiv64(diff, tb_env->tb_freq, ticks_per_sec);
|
||||
}
|
||||
#endif /* defined(TARGET_PPC64H) */
|
||||
|
||||
/* When decrementer expires,
|
||||
* all we need to do is generate or queue a CPU exception
|
||||
|
@ -736,14 +732,15 @@ static void cpu_ppc_decr_cb (void *opaque)
|
|||
_cpu_ppc_store_decr(opaque, 0x00000000, 0xFFFFFFFF, 1);
|
||||
}
|
||||
|
||||
#if defined(TARGET_PPC64H)
|
||||
static always_inline void _cpu_ppc_store_hdecr (CPUState *env, uint32_t hdecr,
|
||||
uint32_t value, int is_excp)
|
||||
{
|
||||
ppc_tb_t *tb_env = env->tb_env;
|
||||
|
||||
__cpu_ppc_store_decr(env, &tb_env->hdecr_next, tb_env->hdecr_timer,
|
||||
&cpu_ppc_hdecr_excp, hdecr, value, is_excp);
|
||||
if (tb_env->hdecr_timer != NULL) {
|
||||
__cpu_ppc_store_decr(env, &tb_env->hdecr_next, tb_env->hdecr_timer,
|
||||
&cpu_ppc_hdecr_excp, hdecr, value, is_excp);
|
||||
}
|
||||
}
|
||||
|
||||
void cpu_ppc_store_hdecr (CPUState *env, uint32_t value)
|
||||
|
@ -763,7 +760,6 @@ void cpu_ppc_store_purr (CPUState *env, uint64_t value)
|
|||
tb_env->purr_load = value;
|
||||
tb_env->purr_start = qemu_get_clock(vm_clock);
|
||||
}
|
||||
#endif /* defined(TARGET_PPC64H) */
|
||||
|
||||
static void cpu_ppc_set_tb_clk (void *opaque, uint32_t freq)
|
||||
{
|
||||
|
@ -777,10 +773,8 @@ static void cpu_ppc_set_tb_clk (void *opaque, uint32_t freq)
|
|||
* it's not ready to handle it...
|
||||
*/
|
||||
_cpu_ppc_store_decr(env, 0xFFFFFFFF, 0xFFFFFFFF, 0);
|
||||
#if defined(TARGET_PPC64H)
|
||||
_cpu_ppc_store_hdecr(env, 0xFFFFFFFF, 0xFFFFFFFF, 0);
|
||||
cpu_ppc_store_purr(env, 0x0000000000000000ULL);
|
||||
#endif /* defined(TARGET_PPC64H) */
|
||||
}
|
||||
|
||||
/* Set up (once) timebase frequency (in Hz) */
|
||||
|
@ -794,9 +788,13 @@ clk_setup_cb cpu_ppc_tb_init (CPUState *env, uint32_t freq)
|
|||
env->tb_env = tb_env;
|
||||
/* Create new timer */
|
||||
tb_env->decr_timer = qemu_new_timer(vm_clock, &cpu_ppc_decr_cb, env);
|
||||
#if defined(TARGET_PPC64H)
|
||||
tb_env->hdecr_timer = qemu_new_timer(vm_clock, &cpu_ppc_hdecr_cb, env);
|
||||
#endif /* defined(TARGET_PPC64H) */
|
||||
if (0) {
|
||||
/* XXX: find a suitable condition to enable the hypervisor decrementer
|
||||
*/
|
||||
tb_env->hdecr_timer = qemu_new_timer(vm_clock, &cpu_ppc_hdecr_cb, env);
|
||||
} else {
|
||||
tb_env->hdecr_timer = NULL;
|
||||
}
|
||||
cpu_ppc_set_tb_clk(env, freq);
|
||||
|
||||
return &cpu_ppc_set_tb_clk;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue