コード例 #1
0
ファイル: qemu-timer.c プロジェクト: converse2006/M2M
static int timer_load(QEMUFile *f, void *opaque, int version_id)
{
    TimersState *s = opaque;

    if (version_id != 1 && version_id != 2)
        return -EINVAL;
    if (s->cpu_ticks_enabled) {
        return -EINVAL;
    }
    s->cpu_ticks_prev   = qemu_get_sbe64(f);
    s->cpu_ticks_offset = qemu_get_sbe64(f);
    if (version_id == 2) {
        s->cpu_clock_offset = qemu_get_sbe64(f);
    }
    return 0;
}
コード例 #2
0
static int  goldfish_timer_load(QEMUFile*  f, void*  opaque, int  version_id)
{
    struct timer_state*  s   = opaque;

    if (version_id != GOLDFISH_TIMER_SAVE_VERSION)
        return -1;

    s->now_ns = qemu_get_sbe64(f);  /* using qemu_get_be64 (without 's') causes faulty code generation
                                       in the compiler, dropping the 32 most significant bits */
    s->armed  = qemu_get_byte(f);
    if (s->armed) {
        int64_t  now_tks   = qemu_get_clock(vm_clock);
        int64_t  diff_tks  = qemu_get_be64(f);
        int64_t  alarm_tks = now_tks + diff_tks;

        if (alarm_tks <= now_tks) {
            goldfish_device_set_irq(&s->dev, 0, 1);
            s->armed = 0;
        } else {
            qemu_mod_timer(s->timer, alarm_tks);
        }
    }
    return 0;
}