Commit 869e92b5 authored by Dmitry Osipenko's avatar Dmitry Osipenko Committed by Peter Maydell
Browse files

hw/ptimer: Support "on the fly" timer mode switch



Allow switching between periodic <-> oneshot modes while timer is running.

Signed-off-by: default avatarDmitry Osipenko <digetx@gmail.com>
Reviewed-by: default avatarPeter Crosthwaite <crosthwaite.peter@gmail.com>
Message-id: f030be6e28fbd219e1e8d22297aee367bd9af5bb.1464367869.git.digetx@gmail.com
Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parent 7ef6e3cf
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -163,17 +163,18 @@ void ptimer_set_count(ptimer_state *s, uint64_t count)

void ptimer_run(ptimer_state *s, int oneshot)
{
    if (s->enabled) {
        return;
    }
    if (s->period == 0) {
    bool was_disabled = !s->enabled;

    if (was_disabled && s->period == 0) {
        fprintf(stderr, "Timer with period zero, disabling\n");
        return;
    }
    s->enabled = oneshot ? 2 : 1;
    if (was_disabled) {
        s->next_event = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
        ptimer_reload(s);
    }
}

/* Pause a timer.  Note that this may cause it to "lose" time, even if it
   is immediately restarted.  */