target-microblaze: Use cpu_exec_interrupt qom hook
Cc: Edgar E. Iglesias <edgar.iglesias@gmail.com> Signed-off-by: Richard Henderson <rth@twiddle.net> Message-id: 1410626734-3804-20-git-send-email-rth@twiddle.net Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
							parent
							
								
									fa4faba448
								
							
						
					
					
						commit
						29cd33d3c7
					
				| @ -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, | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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; | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Richard Henderson
						Richard Henderson