halt state support for ppc
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1657 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									f24e5695e5
								
							
						
					
					
						commit
						e80e1cc4b1
					
				
							
								
								
									
										10
									
								
								cpu-exec.c
								
								
								
								
							
							
						
						
									
										10
									
								
								cpu-exec.c
								
								
								
								
							|  | @ -262,6 +262,16 @@ int cpu_exec(CPUState *env1) | |||
|             return EXCP_HALTED; | ||||
|         } | ||||
|     } | ||||
| #elif defined(TARGET_PPC) | ||||
|     if (env1->msr[MSR_POW]) { | ||||
|         if (env1->msr[MSR_EE] &&  | ||||
|             (env1->interrupt_request &  | ||||
|              (CPU_INTERRUPT_HARD | CPU_INTERRUPT_TIMER))) { | ||||
|             env1->msr[MSR_POW] = 0; | ||||
|         } else { | ||||
|             return EXCP_HALTED; | ||||
|         } | ||||
|     } | ||||
| #endif | ||||
| 
 | ||||
|     cpu_single_env = env1;  | ||||
|  |  | |||
|  | @ -255,6 +255,10 @@ static void do_info_cpus(void) | |||
|         term_printf(" pc=0x" TARGET_FMT_lx, env->eip + env->segs[R_CS].base); | ||||
|         if (env->hflags & HF_HALTED_MASK) | ||||
|             term_printf(" (halted)"); | ||||
| #elif defined(TARGET_PPC) | ||||
|         term_printf(" nip=0x" TARGET_FMT_lx, env->nip); | ||||
|         if (msr_pow) | ||||
|             term_printf(" (halted)"); | ||||
| #endif | ||||
|         term_printf("\n"); | ||||
|     } | ||||
|  |  | |||
|  | @ -846,6 +846,11 @@ void do_store_msr (CPUPPCState *env, target_ulong value) | |||
|     msr_ri  = (value >> MSR_RI)  & 1; | ||||
|     msr_le  = (value >> MSR_LE)  & 1; | ||||
|     do_compute_hflags(env); | ||||
|     if (msr_pow) { | ||||
|         /* power save: exit cpu loop */ | ||||
|         env->exception_index = EXCP_HLT; | ||||
|         cpu_loop_exit(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| float64 do_load_fpscr (CPUPPCState *env) | ||||
|  |  | |||
|  | @ -2097,10 +2097,11 @@ GEN_HANDLER(mtmsr, 0x1F, 0x12, 0x04, 0x001FF801, PPC_MISC) | |||
|         RET_PRIVREG(ctx); | ||||
|         return; | ||||
|     } | ||||
|     gen_op_update_nip((ctx)->nip); | ||||
|     gen_op_load_gpr_T0(rS(ctx->opcode)); | ||||
|     gen_op_store_msr(); | ||||
|     /* Must stop the translation as machine state (may have) changed */ | ||||
|     RET_STOP(ctx); | ||||
|     RET_CHG_FLOW(ctx); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 bellard
						bellard