void snd_pcm_indirect2_playback_interrupt(struct snd_pcm_substream *substream, struct snd_pcm_indirect2 *rec, snd_pcm_indirect2_copy_t copy, snd_pcm_indirect2_zero_t zero) { #ifdef SND_PCM_INDIRECT2_STAT rec->irq_occured++; #endif rec->hw_ready = 1; snd_pcm_indirect2_playback_transfer(substream, rec, copy, zero); if (rec->min_periods >= rec->min_multiple) { #ifdef SND_PCM_INDIRECT2_STAT if ((rec->min_periods / rec->min_multiple) > 7) snd_printk(KERN_DEBUG "STAT: more than 7 (%d) mul_adds - too big " "to save!\n", (rec->min_periods / rec->min_multiple)); else rec->mul_adds[(rec->min_periods / rec->min_multiple)]++; rec->mul_elapsed_real += (rec->min_periods / rec->min_multiple); rec->mul_elapsed++; #endif rec->min_periods = (rec->min_periods % rec->min_multiple); snd_pcm_period_elapsed(substream); } }
/* * helper function for playback interrupt routine */ void snd_pcm_indirect2_playback_interrupt(struct snd_pcm_substream *substream, struct snd_pcm_indirect2 *rec, snd_pcm_indirect2_copy_t copy, snd_pcm_indirect2_zero_t zero) { #ifdef SND_PCM_INDIRECT2_STAT rec->irq_occured++; #endif /* hardware played some bytes, so there is room again (in fifo) */ rec->hw_ready = 1; /* don't call ack() now, instead call transfer() function directly * (normally called by ack() ) */ snd_pcm_indirect2_playback_transfer(substream, rec, copy, zero); if (rec->min_periods >= rec->min_multiple) { #ifdef SND_PCM_INDIRECT2_STAT if ((rec->min_periods / rec->min_multiple) > 7) snd_printk(KERN_DEBUG "STAT: more than 7 (%d) mul_adds - too big " "to save!\n", (rec->min_periods / rec->min_multiple)); else rec->mul_adds[(rec->min_periods / rec->min_multiple)]++; rec->mul_elapsed_real += (rec->min_periods / rec->min_multiple); rec->mul_elapsed++; #endif rec->min_periods = (rec->min_periods % rec->min_multiple); snd_pcm_period_elapsed(substream); } }