Lines Matching refs:timer

34     QEMUTimer *timer;  member
80 static inline void omap_gp_timer_intr(struct omap_gp_timer_s *timer, int it) in omap_gp_timer_intr() argument
82 if (timer->it_ena & it) { in omap_gp_timer_intr()
83 if (!timer->status) in omap_gp_timer_intr()
84 qemu_irq_raise(timer->irq); in omap_gp_timer_intr()
86 timer->status |= it; in omap_gp_timer_intr()
91 if (timer->wu_ena & it) in omap_gp_timer_intr()
92 qemu_irq_pulse(timer->wkup); in omap_gp_timer_intr()
95 static inline void omap_gp_timer_out(struct omap_gp_timer_s *timer, int level) in omap_gp_timer_out() argument
97 if (!timer->inout && timer->out_val != level) { in omap_gp_timer_out()
98 timer->out_val = level; in omap_gp_timer_out()
99 qemu_set_irq(timer->out, level); in omap_gp_timer_out()
103 static inline uint32_t omap_gp_timer_read(struct omap_gp_timer_s *timer) in omap_gp_timer_read() argument
107 if (timer->st && timer->rate) { in omap_gp_timer_read()
108 distance = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - timer->time; in omap_gp_timer_read()
109 distance = muldiv64(distance, timer->rate, timer->ticks_per_sec); in omap_gp_timer_read()
111 if (distance >= 0xffffffff - timer->val) in omap_gp_timer_read()
114 return timer->val + distance; in omap_gp_timer_read()
116 return timer->val; in omap_gp_timer_read()
119 static inline void omap_gp_timer_sync(struct omap_gp_timer_s *timer) in omap_gp_timer_sync() argument
121 if (timer->st) { in omap_gp_timer_sync()
122 timer->val = omap_gp_timer_read(timer); in omap_gp_timer_sync()
123 timer->time = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); in omap_gp_timer_sync()
127 static inline void omap_gp_timer_update(struct omap_gp_timer_s *timer) in omap_gp_timer_update() argument
131 if (timer->st && timer->rate) { in omap_gp_timer_update()
132 expires = muldiv64(0x100000000ll - timer->val, in omap_gp_timer_update()
133 timer->ticks_per_sec, timer->rate); in omap_gp_timer_update()
134 timer_mod(timer->timer, timer->time + expires); in omap_gp_timer_update()
136 if (timer->ce && timer->match_val >= timer->val) { in omap_gp_timer_update()
137 matches = muldiv64(timer->ticks_per_sec, in omap_gp_timer_update()
138 timer->match_val - timer->val, timer->rate); in omap_gp_timer_update()
139 timer_mod(timer->match, timer->time + matches); in omap_gp_timer_update()
141 timer_del(timer->match); in omap_gp_timer_update()
143 timer_del(timer->timer); in omap_gp_timer_update()
144 timer_del(timer->match); in omap_gp_timer_update()
145 omap_gp_timer_out(timer, timer->scpwm); in omap_gp_timer_update()
149 static inline void omap_gp_timer_trigger(struct omap_gp_timer_s *timer) in omap_gp_timer_trigger() argument
151 if (timer->pt) in omap_gp_timer_trigger()
154 omap_gp_timer_out(timer, !timer->out_val); in omap_gp_timer_trigger()
157 qemu_irq_pulse(timer->out); in omap_gp_timer_trigger()
162 struct omap_gp_timer_s *timer = opaque; in omap_gp_timer_tick() local
164 if (!timer->ar) { in omap_gp_timer_tick()
165 timer->st = 0; in omap_gp_timer_tick()
166 timer->val = 0; in omap_gp_timer_tick()
168 timer->val = timer->load_val; in omap_gp_timer_tick()
169 timer->time = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); in omap_gp_timer_tick()
172 if (timer->trigger == gpt_trigger_overflow || in omap_gp_timer_tick()
173 timer->trigger == gpt_trigger_both) in omap_gp_timer_tick()
174 omap_gp_timer_trigger(timer); in omap_gp_timer_tick()
176 omap_gp_timer_intr(timer, GPT_OVF_IT); in omap_gp_timer_tick()
177 omap_gp_timer_update(timer); in omap_gp_timer_tick()
182 struct omap_gp_timer_s *timer = opaque; in omap_gp_timer_match() local
184 if (timer->trigger == gpt_trigger_both) in omap_gp_timer_match()
185 omap_gp_timer_trigger(timer); in omap_gp_timer_match()
187 omap_gp_timer_intr(timer, GPT_MAT_IT); in omap_gp_timer_match()
222 struct omap_gp_timer_s *timer = opaque; in omap_gp_timer_clk_update() local
224 omap_gp_timer_sync(timer); in omap_gp_timer_clk_update()
225 timer->rate = on ? omap_clk_getrate(timer->clk) : 0; in omap_gp_timer_clk_update()
226 omap_gp_timer_update(timer); in omap_gp_timer_clk_update()
229 static void omap_gp_timer_clk_setup(struct omap_gp_timer_s *timer) in omap_gp_timer_clk_setup() argument
231 omap_clk_adduser(timer->clk, in omap_gp_timer_clk_setup()
232 qemu_allocate_irq(omap_gp_timer_clk_update, timer, 0)); in omap_gp_timer_clk_setup()
233 timer->rate = omap_clk_getrate(timer->clk); in omap_gp_timer_clk_setup()
501 s->timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, omap_gp_timer_tick, s); in omap_gp_timer_init()