Lines Matching defs:atimer

144 static void ct_xfitimer_irq_rearm(struct ct_timer *atimer, int ticks)
146 struct hw *hw = atimer->atc->hw;
150 if (!atimer->running)
152 atimer->running = 1;
155 static void ct_xfitimer_irq_stop(struct ct_timer *atimer)
157 if (atimer->running) {
158 struct hw *hw = atimer->atc->hw;
161 atimer->running = 0;
165 static inline unsigned int ct_xfitimer_get_wc(struct ct_timer *atimer)
167 struct hw *hw = atimer->atc->hw;
179 static int ct_xfitimer_reprogram(struct ct_timer *atimer, int can_update)
186 if (list_empty(&atimer->running_head)) {
187 ct_xfitimer_irq_stop(atimer);
188 atimer->reprogram = 0; /* clear flag */
192 wc = ct_xfitimer_get_wc(atimer);
193 diff = wc - atimer->wc;
194 atimer->wc = wc;
195 list_for_each_entry(ti, &atimer->running_head, running_list) {
223 ct_xfitimer_irq_rearm(atimer, min_intr);
224 atimer->reprogram = 0; /* clear flag */
229 static void ct_xfitimer_check_period(struct ct_timer *atimer)
234 spin_lock_irqsave(&atimer->list_lock, flags);
235 list_for_each_entry(ti, &atimer->instance_head, instance_list) {
241 spin_unlock_irqrestore(&atimer->list_lock, flags);
245 static void ct_xfitimer_callback(struct ct_timer *atimer)
250 spin_lock_irqsave(&atimer->lock, flags);
251 atimer->irq_handling = 1;
253 update = ct_xfitimer_reprogram(atimer, 1);
254 spin_unlock(&atimer->lock);
256 ct_xfitimer_check_period(atimer);
257 spin_lock(&atimer->lock);
258 } while (atimer->reprogram);
259 atimer->irq_handling = 0;
260 spin_unlock_irqrestore(&atimer->lock, flags);
272 static void ct_xfitimer_update(struct ct_timer *atimer)
276 spin_lock_irqsave(&atimer->lock, flags);
277 if (atimer->irq_handling) {
279 atimer->reprogram = 1;
280 spin_unlock_irqrestore(&atimer->lock, flags);
284 ct_xfitimer_irq_stop(atimer);
285 ct_xfitimer_reprogram(atimer, 0);
286 spin_unlock_irqrestore(&atimer->lock, flags);
291 struct ct_timer *atimer = ti->timer_base;
294 spin_lock_irqsave(&atimer->lock, flags);
296 atimer->wc = ct_xfitimer_get_wc(atimer);
299 list_add(&ti->running_list, &atimer->running_head);
300 spin_unlock_irqrestore(&atimer->lock, flags);
301 ct_xfitimer_update(atimer);
306 struct ct_timer *atimer = ti->timer_base;
309 spin_lock_irqsave(&atimer->lock, flags);
312 spin_unlock_irqrestore(&atimer->lock, flags);
313 ct_xfitimer_update(atimer);
316 static void ct_xfitimer_free_global(struct ct_timer *atimer)
318 ct_xfitimer_irq_stop(atimer);
334 ct_timer_instance_new(struct ct_timer *atimer, struct ct_atc_pcm *apcm)
344 ti->timer_base = atimer;
347 if (atimer->ops->init)
348 atimer->ops->init(ti);
350 spin_lock_irq(&atimer->list_lock);
351 list_add(&ti->instance_list, &atimer->instance_head);
352 spin_unlock_irq(&atimer->list_lock);
367 struct ct_timer *atimer = ti->timer_base;
368 atimer->ops->start(ti);
373 struct ct_timer *atimer = ti->timer_base;
374 atimer->ops->stop(ti);
379 struct ct_timer *atimer = ti->timer_base;
381 atimer->ops->stop(ti); /* to be sure */
382 if (atimer->ops->free_instance)
383 atimer->ops->free_instance(ti);
385 spin_lock_irq(&atimer->list_lock);
387 spin_unlock_irq(&atimer->list_lock);
407 struct ct_timer *atimer;
410 atimer = kzalloc(sizeof(*atimer), GFP_KERNEL);
411 if (!atimer)
413 spin_lock_init(&atimer->lock);
414 spin_lock_init(&atimer->list_lock);
415 INIT_LIST_HEAD(&atimer->instance_head);
416 INIT_LIST_HEAD(&atimer->running_head);
417 atimer->atc = atc;
421 atimer->ops = &ct_xfitimer_ops;
422 hw->irq_callback_data = atimer;
426 atimer->ops = &ct_systimer_ops;
428 return atimer;
431 void ct_timer_free(struct ct_timer *atimer)
433 struct hw *hw = atimer->atc->hw;
435 if (atimer->ops->free_global)
436 atimer->ops->free_global(atimer);
437 kfree(atimer);