Lines Matching refs:dpcm

250 static void dummy_systimer_rearm(struct dummy_systimer_pcm *dpcm)  in dummy_systimer_rearm()  argument
252 mod_timer(&dpcm->timer, jiffies + in dummy_systimer_rearm()
253 (dpcm->frac_period_rest + dpcm->rate - 1) / dpcm->rate); in dummy_systimer_rearm()
256 static void dummy_systimer_update(struct dummy_systimer_pcm *dpcm) in dummy_systimer_update() argument
260 delta = jiffies - dpcm->base_time; in dummy_systimer_update()
263 dpcm->base_time += delta; in dummy_systimer_update()
264 delta *= dpcm->rate; in dummy_systimer_update()
265 dpcm->frac_pos += delta; in dummy_systimer_update()
266 while (dpcm->frac_pos >= dpcm->frac_buffer_size) in dummy_systimer_update()
267 dpcm->frac_pos -= dpcm->frac_buffer_size; in dummy_systimer_update()
268 while (dpcm->frac_period_rest <= delta) { in dummy_systimer_update()
269 dpcm->elapsed++; in dummy_systimer_update()
270 dpcm->frac_period_rest += dpcm->frac_period_size; in dummy_systimer_update()
272 dpcm->frac_period_rest -= delta; in dummy_systimer_update()
277 struct dummy_systimer_pcm *dpcm = substream->runtime->private_data; in dummy_systimer_start() local
278 spin_lock(&dpcm->lock); in dummy_systimer_start()
279 dpcm->base_time = jiffies; in dummy_systimer_start()
280 dummy_systimer_rearm(dpcm); in dummy_systimer_start()
281 spin_unlock(&dpcm->lock); in dummy_systimer_start()
287 struct dummy_systimer_pcm *dpcm = substream->runtime->private_data; in dummy_systimer_stop() local
288 spin_lock(&dpcm->lock); in dummy_systimer_stop()
289 del_timer(&dpcm->timer); in dummy_systimer_stop()
290 spin_unlock(&dpcm->lock); in dummy_systimer_stop()
297 struct dummy_systimer_pcm *dpcm = runtime->private_data; in dummy_systimer_prepare() local
299 dpcm->frac_pos = 0; in dummy_systimer_prepare()
300 dpcm->rate = runtime->rate; in dummy_systimer_prepare()
301 dpcm->frac_buffer_size = runtime->buffer_size * HZ; in dummy_systimer_prepare()
302 dpcm->frac_period_size = runtime->period_size * HZ; in dummy_systimer_prepare()
303 dpcm->frac_period_rest = dpcm->frac_period_size; in dummy_systimer_prepare()
304 dpcm->elapsed = 0; in dummy_systimer_prepare()
311 struct dummy_systimer_pcm *dpcm = (struct dummy_systimer_pcm *)data; in dummy_systimer_callback() local
315 spin_lock_irqsave(&dpcm->lock, flags); in dummy_systimer_callback()
316 dummy_systimer_update(dpcm); in dummy_systimer_callback()
317 dummy_systimer_rearm(dpcm); in dummy_systimer_callback()
318 elapsed = dpcm->elapsed; in dummy_systimer_callback()
319 dpcm->elapsed = 0; in dummy_systimer_callback()
320 spin_unlock_irqrestore(&dpcm->lock, flags); in dummy_systimer_callback()
322 snd_pcm_period_elapsed(dpcm->substream); in dummy_systimer_callback()
328 struct dummy_systimer_pcm *dpcm = substream->runtime->private_data; in dummy_systimer_pointer() local
331 spin_lock(&dpcm->lock); in dummy_systimer_pointer()
332 dummy_systimer_update(dpcm); in dummy_systimer_pointer()
333 pos = dpcm->frac_pos / HZ; in dummy_systimer_pointer()
334 spin_unlock(&dpcm->lock); in dummy_systimer_pointer()
340 struct dummy_systimer_pcm *dpcm; in dummy_systimer_create() local
342 dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL); in dummy_systimer_create()
343 if (!dpcm) in dummy_systimer_create()
345 substream->runtime->private_data = dpcm; in dummy_systimer_create()
346 setup_timer(&dpcm->timer, dummy_systimer_callback, in dummy_systimer_create()
347 (unsigned long) dpcm); in dummy_systimer_create()
348 spin_lock_init(&dpcm->lock); in dummy_systimer_create()
349 dpcm->substream = substream; in dummy_systimer_create()
385 struct dummy_hrtimer_pcm *dpcm = (struct dummy_hrtimer_pcm *)priv; in dummy_hrtimer_pcm_elapsed() local
386 if (atomic_read(&dpcm->running)) in dummy_hrtimer_pcm_elapsed()
387 snd_pcm_period_elapsed(dpcm->substream); in dummy_hrtimer_pcm_elapsed()
392 struct dummy_hrtimer_pcm *dpcm; in dummy_hrtimer_callback() local
394 dpcm = container_of(timer, struct dummy_hrtimer_pcm, timer); in dummy_hrtimer_callback()
395 if (!atomic_read(&dpcm->running)) in dummy_hrtimer_callback()
397 tasklet_schedule(&dpcm->tasklet); in dummy_hrtimer_callback()
398 hrtimer_forward_now(timer, dpcm->period_time); in dummy_hrtimer_callback()
404 struct dummy_hrtimer_pcm *dpcm = substream->runtime->private_data; in dummy_hrtimer_start() local
406 dpcm->base_time = hrtimer_cb_get_time(&dpcm->timer); in dummy_hrtimer_start()
407 hrtimer_start(&dpcm->timer, dpcm->period_time, HRTIMER_MODE_REL); in dummy_hrtimer_start()
408 atomic_set(&dpcm->running, 1); in dummy_hrtimer_start()
414 struct dummy_hrtimer_pcm *dpcm = substream->runtime->private_data; in dummy_hrtimer_stop() local
416 atomic_set(&dpcm->running, 0); in dummy_hrtimer_stop()
417 hrtimer_cancel(&dpcm->timer); in dummy_hrtimer_stop()
421 static inline void dummy_hrtimer_sync(struct dummy_hrtimer_pcm *dpcm) in dummy_hrtimer_sync() argument
423 tasklet_kill(&dpcm->tasklet); in dummy_hrtimer_sync()
430 struct dummy_hrtimer_pcm *dpcm = runtime->private_data; in dummy_hrtimer_pointer() local
434 delta = ktime_us_delta(hrtimer_cb_get_time(&dpcm->timer), in dummy_hrtimer_pointer()
435 dpcm->base_time); in dummy_hrtimer_pointer()
444 struct dummy_hrtimer_pcm *dpcm = runtime->private_data; in dummy_hrtimer_prepare() local
449 dummy_hrtimer_sync(dpcm); in dummy_hrtimer_prepare()
455 dpcm->period_time = ktime_set(sec, nsecs); in dummy_hrtimer_prepare()
462 struct dummy_hrtimer_pcm *dpcm; in dummy_hrtimer_create() local
464 dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL); in dummy_hrtimer_create()
465 if (!dpcm) in dummy_hrtimer_create()
467 substream->runtime->private_data = dpcm; in dummy_hrtimer_create()
468 hrtimer_init(&dpcm->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); in dummy_hrtimer_create()
469 dpcm->timer.function = dummy_hrtimer_callback; in dummy_hrtimer_create()
470 dpcm->substream = substream; in dummy_hrtimer_create()
471 atomic_set(&dpcm->running, 0); in dummy_hrtimer_create()
472 tasklet_init(&dpcm->tasklet, dummy_hrtimer_pcm_elapsed, in dummy_hrtimer_create()
473 (unsigned long)dpcm); in dummy_hrtimer_create()
479 struct dummy_hrtimer_pcm *dpcm = substream->runtime->private_data; in dummy_hrtimer_free() local
480 dummy_hrtimer_sync(dpcm); in dummy_hrtimer_free()
481 kfree(dpcm); in dummy_hrtimer_free()