// Update count, set irq, update expire_time // Convert from ptimer countdown units static void slavio_timer_get_out(CPUTimerState *t) { uint64_t count, limit; if (t->limit == 0) { /* free-run system or processor counter */ limit = TIMER_MAX_COUNT32; } else { limit = t->limit; } count = limit - PERIODS_TO_LIMIT(ptimer_get_count(t->timer)); trace_slavio_timer_get_out(t->limit, t->counthigh, t->count); t->count = count & TIMER_COUNT_MASK32; t->counthigh = count >> 32; }
// Update count, set irq, update expire_time // Convert from ptimer countdown units static void slavio_timer_get_out(SLAVIO_TIMERState *s) { uint64_t count, limit; if (s->limit == 0) /* free-run processor or system counter */ limit = TIMER_MAX_COUNT32; else limit = s->limit; if (s->timer) count = limit - PERIODS_TO_LIMIT(ptimer_get_count(s->timer)); else count = 0; DPRINTF("get_out: limit %" PRIx64 " count %x%08x\n", s->limit, s->counthigh, s->count); s->count = count & TIMER_COUNT_MASK32; s->counthigh = count >> 32; }