xref: /qemu/include/hw/ptimer.h (revision a1f05e79f2c207bded5efc23e8c6b1ca58161a8e)
149d4d9b6SPaolo Bonzini /*
249d4d9b6SPaolo Bonzini  * General purpose implementation of a simple periodic countdown timer.
349d4d9b6SPaolo Bonzini  *
449d4d9b6SPaolo Bonzini  * Copyright (c) 2007 CodeSourcery.
549d4d9b6SPaolo Bonzini  *
649d4d9b6SPaolo Bonzini  * This code is licensed under the GNU LGPL.
749d4d9b6SPaolo Bonzini  */
849d4d9b6SPaolo Bonzini #ifndef PTIMER_H
949d4d9b6SPaolo Bonzini #define PTIMER_H
1049d4d9b6SPaolo Bonzini 
1149d4d9b6SPaolo Bonzini #include "qemu-common.h"
121de7afc9SPaolo Bonzini #include "qemu/timer.h"
13caf71f86SPaolo Bonzini #include "migration/vmstate.h"
1449d4d9b6SPaolo Bonzini 
1549d4d9b6SPaolo Bonzini /* ptimer.c */
1649d4d9b6SPaolo Bonzini typedef struct ptimer_state ptimer_state;
1749d4d9b6SPaolo Bonzini typedef void (*ptimer_cb)(void *opaque);
1849d4d9b6SPaolo Bonzini 
1949d4d9b6SPaolo Bonzini ptimer_state *ptimer_init(QEMUBH *bh);
2049d4d9b6SPaolo Bonzini void ptimer_set_period(ptimer_state *s, int64_t period);
2149d4d9b6SPaolo Bonzini void ptimer_set_freq(ptimer_state *s, uint32_t freq);
2249d4d9b6SPaolo Bonzini void ptimer_set_limit(ptimer_state *s, uint64_t limit, int reload);
2349d4d9b6SPaolo Bonzini uint64_t ptimer_get_count(ptimer_state *s);
2449d4d9b6SPaolo Bonzini void ptimer_set_count(ptimer_state *s, uint64_t count);
2549d4d9b6SPaolo Bonzini void ptimer_run(ptimer_state *s, int oneshot);
2649d4d9b6SPaolo Bonzini void ptimer_stop(ptimer_state *s);
2749d4d9b6SPaolo Bonzini 
28701a8f76SPaolo Bonzini extern const VMStateDescription vmstate_ptimer;
29701a8f76SPaolo Bonzini 
30701a8f76SPaolo Bonzini #define VMSTATE_PTIMER(_field, _state) {                             \
31701a8f76SPaolo Bonzini     .name       = (stringify(_field)),                               \
32701a8f76SPaolo Bonzini     .version_id = (1),                                               \
33701a8f76SPaolo Bonzini     .vmsd       = &vmstate_ptimer,                                   \
34701a8f76SPaolo Bonzini     .size       = sizeof(ptimer_state *),                            \
35701a8f76SPaolo Bonzini     .flags      = VMS_STRUCT|VMS_POINTER,                            \
36701a8f76SPaolo Bonzini     .offset     = vmstate_offset_pointer(_state, _field, ptimer_state), \
37701a8f76SPaolo Bonzini }
38701a8f76SPaolo Bonzini 
39*a1f05e79SPeter Maydell #define VMSTATE_PTIMER_ARRAY(_f, _s, _n)                                \
40*a1f05e79SPeter Maydell     VMSTATE_ARRAY_OF_POINTER_TO_STRUCT(_f, _s, _n, 0,                   \
41*a1f05e79SPeter Maydell                                        vmstate_ptimer, ptimer_state)
42*a1f05e79SPeter Maydell 
4349d4d9b6SPaolo Bonzini #endif
44