target-i386: QOM'ify CPU reset
Move code from cpu_state_reset() into QOM x86_cpu_reset(), fixing style issues for FPU init. Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
		
							parent
							
								
									de024815e3
								
							
						
					
					
						commit
						c1958aea51
					
				@ -1374,10 +1374,80 @@ static void x86_cpu_reset(CPUState *s)
 | 
			
		||||
    X86CPU *cpu = X86_CPU(s);
 | 
			
		||||
    X86CPUClass *xcc = X86_CPU_GET_CLASS(cpu);
 | 
			
		||||
    CPUX86State *env = &cpu->env;
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    if (qemu_loglevel_mask(CPU_LOG_RESET)) {
 | 
			
		||||
        qemu_log("CPU Reset (CPU %d)\n", env->cpu_index);
 | 
			
		||||
        log_cpu_state(env, X86_DUMP_FPU | X86_DUMP_CCOP);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    xcc->parent_reset(s);
 | 
			
		||||
 | 
			
		||||
    cpu_state_reset(env);
 | 
			
		||||
 | 
			
		||||
    memset(env, 0, offsetof(CPUX86State, breakpoints));
 | 
			
		||||
 | 
			
		||||
    tlb_flush(env, 1);
 | 
			
		||||
 | 
			
		||||
    env->old_exception = -1;
 | 
			
		||||
 | 
			
		||||
    /* init to reset state */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_SOFTMMU
 | 
			
		||||
    env->hflags |= HF_SOFTMMU_MASK;
 | 
			
		||||
#endif
 | 
			
		||||
    env->hflags2 |= HF2_GIF_MASK;
 | 
			
		||||
 | 
			
		||||
    cpu_x86_update_cr0(env, 0x60000010);
 | 
			
		||||
    env->a20_mask = ~0x0;
 | 
			
		||||
    env->smbase = 0x30000;
 | 
			
		||||
 | 
			
		||||
    env->idt.limit = 0xffff;
 | 
			
		||||
    env->gdt.limit = 0xffff;
 | 
			
		||||
    env->ldt.limit = 0xffff;
 | 
			
		||||
    env->ldt.flags = DESC_P_MASK | (2 << DESC_TYPE_SHIFT);
 | 
			
		||||
    env->tr.limit = 0xffff;
 | 
			
		||||
    env->tr.flags = DESC_P_MASK | (11 << DESC_TYPE_SHIFT);
 | 
			
		||||
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_CS, 0xf000, 0xffff0000, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_CS_MASK |
 | 
			
		||||
                           DESC_R_MASK | DESC_A_MASK);
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_DS, 0, 0, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
 | 
			
		||||
                           DESC_A_MASK);
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_ES, 0, 0, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
 | 
			
		||||
                           DESC_A_MASK);
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_SS, 0, 0, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
 | 
			
		||||
                           DESC_A_MASK);
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_FS, 0, 0, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
 | 
			
		||||
                           DESC_A_MASK);
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_GS, 0, 0, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
 | 
			
		||||
                           DESC_A_MASK);
 | 
			
		||||
 | 
			
		||||
    env->eip = 0xfff0;
 | 
			
		||||
    env->regs[R_EDX] = env->cpuid_version;
 | 
			
		||||
 | 
			
		||||
    env->eflags = 0x2;
 | 
			
		||||
 | 
			
		||||
    /* FPU init */
 | 
			
		||||
    for (i = 0; i < 8; i++) {
 | 
			
		||||
        env->fptags[i] = 1;
 | 
			
		||||
    }
 | 
			
		||||
    env->fpuc = 0x37f;
 | 
			
		||||
 | 
			
		||||
    env->mxcsr = 0x1f80;
 | 
			
		||||
 | 
			
		||||
    env->pat = 0x0007040600070406ULL;
 | 
			
		||||
    env->msr_ia32_misc_enable = MSR_IA32_MISC_ENABLE_DEFAULT;
 | 
			
		||||
 | 
			
		||||
    memset(env->dr, 0, sizeof(env->dr));
 | 
			
		||||
    env->dr[6] = DR6_FIXED_1;
 | 
			
		||||
    env->dr[7] = DR7_FIXED_1;
 | 
			
		||||
    cpu_breakpoint_remove_all(env, BP_CPU);
 | 
			
		||||
    cpu_watchpoint_remove_all(env, BP_CPU);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void mce_init(X86CPU *cpu)
 | 
			
		||||
 | 
			
		||||
@ -29,76 +29,7 @@
 | 
			
		||||
/* NOTE: must be called outside the CPU execute loop */
 | 
			
		||||
void cpu_state_reset(CPUX86State *env)
 | 
			
		||||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    if (qemu_loglevel_mask(CPU_LOG_RESET)) {
 | 
			
		||||
        qemu_log("CPU Reset (CPU %d)\n", env->cpu_index);
 | 
			
		||||
        log_cpu_state(env, X86_DUMP_FPU | X86_DUMP_CCOP);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    memset(env, 0, offsetof(CPUX86State, breakpoints));
 | 
			
		||||
 | 
			
		||||
    tlb_flush(env, 1);
 | 
			
		||||
 | 
			
		||||
    env->old_exception = -1;
 | 
			
		||||
 | 
			
		||||
    /* init to reset state */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_SOFTMMU
 | 
			
		||||
    env->hflags |= HF_SOFTMMU_MASK;
 | 
			
		||||
#endif
 | 
			
		||||
    env->hflags2 |= HF2_GIF_MASK;
 | 
			
		||||
 | 
			
		||||
    cpu_x86_update_cr0(env, 0x60000010);
 | 
			
		||||
    env->a20_mask = ~0x0;
 | 
			
		||||
    env->smbase = 0x30000;
 | 
			
		||||
 | 
			
		||||
    env->idt.limit = 0xffff;
 | 
			
		||||
    env->gdt.limit = 0xffff;
 | 
			
		||||
    env->ldt.limit = 0xffff;
 | 
			
		||||
    env->ldt.flags = DESC_P_MASK | (2 << DESC_TYPE_SHIFT);
 | 
			
		||||
    env->tr.limit = 0xffff;
 | 
			
		||||
    env->tr.flags = DESC_P_MASK | (11 << DESC_TYPE_SHIFT);
 | 
			
		||||
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_CS, 0xf000, 0xffff0000, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_CS_MASK |
 | 
			
		||||
                           DESC_R_MASK | DESC_A_MASK);
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_DS, 0, 0, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
 | 
			
		||||
                           DESC_A_MASK);
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_ES, 0, 0, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
 | 
			
		||||
                           DESC_A_MASK);
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_SS, 0, 0, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
 | 
			
		||||
                           DESC_A_MASK);
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_FS, 0, 0, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
 | 
			
		||||
                           DESC_A_MASK);
 | 
			
		||||
    cpu_x86_load_seg_cache(env, R_GS, 0, 0, 0xffff,
 | 
			
		||||
                           DESC_P_MASK | DESC_S_MASK | DESC_W_MASK |
 | 
			
		||||
                           DESC_A_MASK);
 | 
			
		||||
 | 
			
		||||
    env->eip = 0xfff0;
 | 
			
		||||
    env->regs[R_EDX] = env->cpuid_version;
 | 
			
		||||
 | 
			
		||||
    env->eflags = 0x2;
 | 
			
		||||
 | 
			
		||||
    /* FPU init */
 | 
			
		||||
    for(i = 0;i < 8; i++)
 | 
			
		||||
        env->fptags[i] = 1;
 | 
			
		||||
    env->fpuc = 0x37f;
 | 
			
		||||
 | 
			
		||||
    env->mxcsr = 0x1f80;
 | 
			
		||||
 | 
			
		||||
    env->pat = 0x0007040600070406ULL;
 | 
			
		||||
    env->msr_ia32_misc_enable = MSR_IA32_MISC_ENABLE_DEFAULT;
 | 
			
		||||
 | 
			
		||||
    memset(env->dr, 0, sizeof(env->dr));
 | 
			
		||||
    env->dr[6] = DR6_FIXED_1;
 | 
			
		||||
    env->dr[7] = DR7_FIXED_1;
 | 
			
		||||
    cpu_breakpoint_remove_all(env, BP_CPU);
 | 
			
		||||
    cpu_watchpoint_remove_all(env, BP_CPU);
 | 
			
		||||
    cpu_reset(ENV_GET_CPU(env));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void cpu_x86_version(CPUX86State *env, int *family, int *model)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user