Lines Matching refs:timer
113 QEMUTimer *timer; member
125 static inline uint32_t omap_timer_read(struct omap_mpu_timer_s *timer) in omap_timer_read() argument
127 uint64_t distance = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - timer->time; in omap_timer_read()
129 if (timer->st && timer->enable && timer->rate) in omap_timer_read()
130 return timer->val - muldiv64(distance >> (timer->ptv + 1), in omap_timer_read()
131 timer->rate, NANOSECONDS_PER_SECOND); in omap_timer_read()
133 return timer->val; in omap_timer_read()
136 static inline void omap_timer_sync(struct omap_mpu_timer_s *timer) in omap_timer_sync() argument
138 timer->val = omap_timer_read(timer); in omap_timer_sync()
139 timer->time = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); in omap_timer_sync()
142 static inline void omap_timer_update(struct omap_mpu_timer_s *timer) in omap_timer_update() argument
146 if (timer->enable && timer->st && timer->rate) { in omap_timer_update()
147 timer->val = timer->reset_val; /* Should skip this on clk enable */ in omap_timer_update()
148 expires = muldiv64((uint64_t) timer->val << (timer->ptv + 1), in omap_timer_update()
149 NANOSECONDS_PER_SECOND, timer->rate); in omap_timer_update()
157 if (expires > (NANOSECONDS_PER_SECOND >> 10) || timer->ar) { in omap_timer_update()
158 timer_mod(timer->timer, timer->time + expires); in omap_timer_update()
160 qemu_bh_schedule(timer->tick); in omap_timer_update()
163 timer_del(timer->timer); in omap_timer_update()
168 struct omap_mpu_timer_s *timer = opaque; in omap_timer_fire() local
170 if (!timer->ar) { in omap_timer_fire()
171 timer->val = 0; in omap_timer_fire()
172 timer->st = 0; in omap_timer_fire()
175 if (timer->it_ena) in omap_timer_fire()
177 qemu_irq_pulse(timer->irq); in omap_timer_fire()
182 struct omap_mpu_timer_s *timer = opaque; in omap_timer_tick() local
184 omap_timer_sync(timer); in omap_timer_tick()
185 omap_timer_fire(timer); in omap_timer_tick()
186 omap_timer_update(timer); in omap_timer_tick()
191 struct omap_mpu_timer_s *timer = opaque; in omap_timer_clk_update() local
193 omap_timer_sync(timer); in omap_timer_clk_update()
194 timer->rate = on ? omap_clk_getrate(timer->clk) : 0; in omap_timer_clk_update()
195 omap_timer_update(timer); in omap_timer_clk_update()
198 static void omap_timer_clk_setup(struct omap_mpu_timer_s *timer) in omap_timer_clk_setup() argument
200 omap_clk_adduser(timer->clk, in omap_timer_clk_setup()
201 qemu_allocate_irq(omap_timer_clk_update, timer, 0)); in omap_timer_clk_setup()
202 timer->rate = omap_clk_getrate(timer->clk); in omap_timer_clk_setup()
270 timer_del(s->timer); in omap_mpu_timer_reset()
288 s->timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, omap_timer_tick, s); in omap_mpu_timer_init()
303 struct omap_mpu_timer_s timer; member
322 return (s->timer.ptv << 9) | (s->timer.ar << 8) | in omap_wd_timer_read()
323 (s->timer.st << 7) | (s->free << 1); in omap_wd_timer_read()
326 return omap_timer_read(&s->timer); in omap_wd_timer_read()
348 omap_timer_sync(&s->timer); in omap_wd_timer_write()
349 s->timer.ptv = (value >> 9) & 7; in omap_wd_timer_write()
350 s->timer.ar = (value >> 8) & 1; in omap_wd_timer_write()
351 s->timer.st = (value >> 7) & 1; in omap_wd_timer_write()
353 omap_timer_update(&s->timer); in omap_wd_timer_write()
357 s->timer.reset_val = value & 0xffff; in omap_wd_timer_write()
362 omap_clk_get(s->timer.clk); in omap_wd_timer_write()
368 omap_clk_put(s->timer.clk); in omap_wd_timer_write()
393 timer_del(s->timer.timer); in omap_wd_timer_reset()
395 omap_clk_get(s->timer.clk); in omap_wd_timer_reset()
399 s->timer.enable = 1; in omap_wd_timer_reset()
400 s->timer.it_ena = 1; in omap_wd_timer_reset()
401 s->timer.reset_val = 0xffff; in omap_wd_timer_reset()
402 s->timer.val = 0; in omap_wd_timer_reset()
403 s->timer.st = 0; in omap_wd_timer_reset()
404 s->timer.ptv = 0; in omap_wd_timer_reset()
405 s->timer.ar = 0; in omap_wd_timer_reset()
406 omap_timer_update(&s->timer); in omap_wd_timer_reset()
415 s->timer.irq = irq; in omap_wd_timer_init()
416 s->timer.clk = clk; in omap_wd_timer_init()
417 s->timer.timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, omap_timer_tick, &s->timer); in omap_wd_timer_init()
419 omap_timer_clk_setup(&s->timer); in omap_wd_timer_init()
430 struct omap_mpu_timer_s timer; member
446 return s->timer.reset_val; in omap_os_timer_read()
449 return omap_timer_read(&s->timer); in omap_os_timer_read()
452 return (s->timer.ar << 3) | (s->timer.it_ena << 2) | s->timer.st; in omap_os_timer_read()
474 s->timer.reset_val = value & 0x00ffffff; in omap_os_timer_write()
482 s->timer.ar = (value >> 3) & 1; in omap_os_timer_write()
483 s->timer.it_ena = (value >> 2) & 1; in omap_os_timer_write()
484 if (s->timer.st != (value & 1) || (value & 2)) { in omap_os_timer_write()
485 omap_timer_sync(&s->timer); in omap_os_timer_write()
486 s->timer.enable = value & 1; in omap_os_timer_write()
487 s->timer.st = value & 1; in omap_os_timer_write()
488 omap_timer_update(&s->timer); in omap_os_timer_write()
505 timer_del(s->timer.timer); in omap_os_timer_reset()
506 s->timer.enable = 0; in omap_os_timer_reset()
507 s->timer.it_ena = 0; in omap_os_timer_reset()
508 s->timer.reset_val = 0x00ffffff; in omap_os_timer_reset()
509 s->timer.val = 0; in omap_os_timer_reset()
510 s->timer.st = 0; in omap_os_timer_reset()
511 s->timer.ptv = 0; in omap_os_timer_reset()
512 s->timer.ar = 1; in omap_os_timer_reset()
521 s->timer.irq = irq; in omap_os_timer_init()
522 s->timer.clk = clk; in omap_os_timer_init()
523 s->timer.timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, omap_timer_tick, &s->timer); in omap_os_timer_init()
525 omap_timer_clk_setup(&s->timer); in omap_os_timer_init()
3668 omap_mpu_timer_reset(mpu->timer[0]); in omap1_mpu_reset()
3669 omap_mpu_timer_reset(mpu->timer[1]); in omap1_mpu_reset()
3670 omap_mpu_timer_reset(mpu->timer[2]); in omap1_mpu_reset()
3878 s->timer[0] = omap_mpu_timer_init(system_memory, 0xfffec500, in omap310_mpu_init()
3881 s->timer[1] = omap_mpu_timer_init(system_memory, 0xfffec600, in omap310_mpu_init()
3884 s->timer[2] = omap_mpu_timer_init(system_memory, 0xfffec700, in omap310_mpu_init()