]> git.proxmox.com Git - mirror_qemu.git/blame - tests/ptimer-test-stubs.c
Merge remote-tracking branch 'remotes/maxreitz/tags/pull-block-2017-04-03' into staging
[mirror_qemu.git] / tests / ptimer-test-stubs.c
CommitLineData
5b262bb6
DO
1/*
2 * Stubs for the ptimer-test
3 *
673c7e89 4 * Copyright (c) 2016 Dmitry Osipenko <digetx@gmail.com>
5b262bb6
DO
5 *
6 * This work is licensed under the terms of the GNU GPL, version 2 or later.
7 * See the COPYING file in the top-level directory.
8 *
9 */
10
11#include "qemu/osdep.h"
12#include "qemu/main-loop.h"
13#include "sysemu/replay.h"
24b94625 14#include "migration/vmstate.h"
5b262bb6
DO
15
16#include "ptimer-test.h"
17
24b94625
PB
18const VMStateInfo vmstate_info_uint8;
19const VMStateInfo vmstate_info_uint32;
20const VMStateInfo vmstate_info_uint64;
21const VMStateInfo vmstate_info_int64;
22const VMStateInfo vmstate_info_timer;
23
5b262bb6
DO
24struct QEMUBH {
25 QEMUBHFunc *cb;
26 void *opaque;
27};
28
29QEMUTimerListGroup main_loop_tlg;
30
31int64_t ptimer_test_time_ns;
32
33void timer_init_tl(QEMUTimer *ts,
34 QEMUTimerList *timer_list, int scale,
35 QEMUTimerCB *cb, void *opaque)
36{
37 ts->timer_list = timer_list;
38 ts->cb = cb;
39 ts->opaque = opaque;
40 ts->scale = scale;
41 ts->expire_time = -1;
42}
43
44void timer_mod(QEMUTimer *ts, int64_t expire_time)
45{
46 QEMUTimerList *timer_list = ts->timer_list;
47 QEMUTimer *t = &timer_list->active_timers;
48
49 while (t->next != NULL) {
50 if (t->next == ts) {
51 break;
52 }
53
54 t = t->next;
55 }
56
57 ts->expire_time = MAX(expire_time * ts->scale, 0);
58 ts->next = NULL;
59 t->next = ts;
60}
61
62void timer_del(QEMUTimer *ts)
63{
64 QEMUTimerList *timer_list = ts->timer_list;
65 QEMUTimer *t = &timer_list->active_timers;
66
67 while (t->next != NULL) {
68 if (t->next == ts) {
69 t->next = ts->next;
70 return;
71 }
72
73 t = t->next;
74 }
75}
76
77int64_t qemu_clock_get_ns(QEMUClockType type)
78{
79 return ptimer_test_time_ns;
80}
81
82int64_t qemu_clock_deadline_ns_all(QEMUClockType type)
83{
84 QEMUTimerList *timer_list = main_loop_tlg.tl[type];
85 QEMUTimer *t = timer_list->active_timers.next;
86 int64_t deadline = -1;
87
88 while (t != NULL) {
89 if (deadline == -1) {
90 deadline = t->expire_time;
91 } else {
92 deadline = MIN(deadline, t->expire_time);
93 }
94
95 t = t->next;
96 }
97
98 return deadline;
99}
100
101QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
102{
103 QEMUBH *bh = g_new(QEMUBH, 1);
104
105 bh->cb = cb;
106 bh->opaque = opaque;
107
108 return bh;
109}
110
072bdb07
MAL
111void qemu_bh_delete(QEMUBH *bh)
112{
113 g_free(bh);
114}
115
5b262bb6
DO
116void replay_bh_schedule_event(QEMUBH *bh)
117{
118 bh->cb(bh->opaque);
119}