Revision 3475187d vl.c

b/vl.c
2375 2375
    qemu_put_betls(f, &env->y);
2376 2376
    tmp = GET_PSR(env);
2377 2377
    qemu_put_be32(f, tmp);
2378
    qemu_put_be32s(f, &env->fsr);
2378
    qemu_put_betls(f, &env->fsr);
2379
    qemu_put_betls(f, &env->tbr);
2380
#ifndef TARGET_SPARC64
2379 2381
    qemu_put_be32s(f, &env->wim);
2380
    qemu_put_be32s(f, &env->tbr);
2381 2382
    /* MMU */
2382 2383
    for(i = 0; i < 16; i++)
2383 2384
        qemu_put_be32s(f, &env->mmuregs[i]);
2385
#endif
2384 2386
}
2385 2387

  
2386 2388
int cpu_load(QEMUFile *f, void *opaque, int version_id)
......
2411 2413
    env->cwp = 0; /* needed to ensure that the wrapping registers are
2412 2414
                     correctly updated */
2413 2415
    PUT_PSR(env, tmp);
2414
    qemu_get_be32s(f, &env->fsr);
2416
    qemu_get_betls(f, &env->fsr);
2417
    qemu_get_betls(f, &env->tbr);
2418
#ifndef TARGET_SPARC64
2415 2419
    qemu_get_be32s(f, &env->wim);
2416
    qemu_get_be32s(f, &env->tbr);
2417 2420
    /* MMU */
2418 2421
    for(i = 0; i < 16; i++)
2419 2422
        qemu_get_be32s(f, &env->mmuregs[i]);
2420

  
2423
#endif
2421 2424
    tlb_flush(env, 1);
2422 2425
    return 0;
2423 2426
}
......
2577 2580
static QEMUResetEntry *first_reset_entry;
2578 2581
static int reset_requested;
2579 2582
static int shutdown_requested;
2583
static int powerdown_requested;
2580 2584

  
2581 2585
void qemu_register_reset(QEMUResetHandler *func, void *opaque)
2582 2586
{
......
2614 2618
    cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
2615 2619
}
2616 2620

  
2621
void qemu_system_powerdown_request(void)
2622
{
2623
    powerdown_requested = 1;
2624
    cpu_interrupt(cpu_single_env, CPU_INTERRUPT_EXIT);
2625
}
2626

  
2617 2627
static void main_cpu_reset(void *opaque)
2618 2628
{
2619 2629
#if defined(TARGET_I386) || defined(TARGET_SPARC)
......
2728 2738
        if (vm_running) {
2729 2739
            ret = cpu_exec(env);
2730 2740
            if (shutdown_requested) {
2731
                ret = EXCP_INTERRUPT; 
2741
                ret = EXCP_INTERRUPT;
2732 2742
                break;
2733 2743
            }
2734 2744
            if (reset_requested) {
2735 2745
                reset_requested = 0;
2736 2746
                qemu_system_reset();
2737
                ret = EXCP_INTERRUPT; 
2747
                ret = EXCP_INTERRUPT;
2748
            }
2749
            if (powerdown_requested) {
2750
                powerdown_requested = 0;
2751
		qemu_system_powerdown();
2752
                ret = EXCP_INTERRUPT;
2738 2753
            }
2739 2754
            if (ret == EXCP_DEBUG) {
2740 2755
                vm_stop(EXCP_DEBUG);
2741 2756
            }
2742 2757
            /* if hlt instruction, we wait until the next IRQ */
2743 2758
            /* XXX: use timeout computed from timers */
2744
            if (ret == EXCP_HLT) 
2759
            if (ret == EXCP_HLT)
2745 2760
                timeout = 10;
2746 2761
            else
2747 2762
                timeout = 0;
......
3044 3059
    qemu_register_machine(&core99_machine);
3045 3060
    qemu_register_machine(&prep_machine);
3046 3061
#elif defined(TARGET_SPARC)
3062
#ifdef TARGET_SPARC64
3063
    qemu_register_machine(&sun4u_machine);
3064
#else
3047 3065
    qemu_register_machine(&sun4m_machine);
3048 3066
#endif
3067
#endif
3049 3068
}
3050 3069

  
3051 3070
#define NET_IF_TUN   0

Also available in: Unified diff