From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47499) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XSqSq-0002LU-3B for qemu-devel@nongnu.org; Sat, 13 Sep 2014 12:46:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XSqSi-0000ro-RH for qemu-devel@nongnu.org; Sat, 13 Sep 2014 12:46:20 -0400 Received: from mail-pa0-x22f.google.com ([2607:f8b0:400e:c03::22f]:58519) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XSqSi-0000rf-KO for qemu-devel@nongnu.org; Sat, 13 Sep 2014 12:46:12 -0400 Received: by mail-pa0-f47.google.com with SMTP id ey11so3506290pad.20 for ; Sat, 13 Sep 2014 09:46:11 -0700 (PDT) Sender: Richard Henderson From: Richard Henderson Date: Sat, 13 Sep 2014 09:45:30 -0700 Message-Id: <1410626734-3804-20-git-send-email-rth@twiddle.net> In-Reply-To: <1410626734-3804-1-git-send-email-rth@twiddle.net> References: <1410626734-3804-1-git-send-email-rth@twiddle.net> Subject: [Qemu-devel] [PATCH 19/23] target-microblaze: Use cpu_exec_interrupt qom hook List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, afaerber@suse.de, aliguori@amazon.com, "Edgar E. Iglesias" Cc: Edgar E. Iglesias Signed-off-by: Richard Henderson --- cpu-exec.c | 9 --------- target-microblaze/cpu-qom.h | 1 + target-microblaze/cpu.c | 1 + target-microblaze/helper.c | 16 ++++++++++++++++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/cpu-exec.c b/cpu-exec.c index 60f7270..5c93a5f 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -505,15 +505,6 @@ int cpu_exec(CPUArchState *env) cc->do_interrupt(cpu); next_tb = 0; } -#elif defined(TARGET_MICROBLAZE) - if ((interrupt_request & CPU_INTERRUPT_HARD) - && (env->sregs[SR_MSR] & MSR_IE) - && !(env->sregs[SR_MSR] & (MSR_EIP | MSR_BIP)) - && !(env->iflags & (D_FLAG | IMM_FLAG))) { - cpu->exception_index = EXCP_IRQ; - cc->do_interrupt(cpu); - next_tb = 0; - } #endif /* The target hook has 3 exit conditions: False when the interrupt isn't processed, diff --git a/target-microblaze/cpu-qom.h b/target-microblaze/cpu-qom.h index 35a12b4..e3e0701 100644 --- a/target-microblaze/cpu-qom.h +++ b/target-microblaze/cpu-qom.h @@ -72,6 +72,7 @@ static inline MicroBlazeCPU *mb_env_get_cpu(CPUMBState *env) #define ENV_OFFSET offsetof(MicroBlazeCPU, env) void mb_cpu_do_interrupt(CPUState *cs); +bool mb_cpu_exec_interrupt(CPUState *cs, int int_req); void mb_cpu_dump_state(CPUState *cpu, FILE *f, fprintf_function cpu_fprintf, int flags); hwaddr mb_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr); diff --git a/target-microblaze/cpu.c b/target-microblaze/cpu.c index 0379f2b..67e3182 100644 --- a/target-microblaze/cpu.c +++ b/target-microblaze/cpu.c @@ -169,6 +169,7 @@ static void mb_cpu_class_init(ObjectClass *oc, void *data) cc->has_work = mb_cpu_has_work; cc->do_interrupt = mb_cpu_do_interrupt; + cc->cpu_exec_interrupt = mb_cpu_exec_interrupt; cc->dump_state = mb_cpu_dump_state; cc->set_pc = mb_cpu_set_pc; cc->gdb_read_register = mb_cpu_gdb_read_register; diff --git a/target-microblaze/helper.c b/target-microblaze/helper.c index 59c9ad5..59466c9 100644 --- a/target-microblaze/helper.c +++ b/target-microblaze/helper.c @@ -286,3 +286,19 @@ hwaddr mb_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) return paddr; } #endif + +bool mb_cpu_exec_interrupt(CPUState *cs, int interrupt_request) +{ + MicroBlazeCPU *cpu = MICROBLAZE_CPU(cs); + CPUMBState *env = &cpu->env; + + if ((interrupt_request & CPU_INTERRUPT_HARD) + && (env->sregs[SR_MSR] & MSR_IE) + && !(env->sregs[SR_MSR] & (MSR_EIP | MSR_BIP)) + && !(env->iflags & (D_FLAG | IMM_FLAG))) { + cs->exception_index = EXCP_IRQ; + mb_cpu_do_interrupt(cs); + return true; + } + return false; +} -- 1.9.3