Lines Matching refs:pcmp
66 struct gus_pcm_private *pcmp = private_data; in snd_gf1_pcm_block_change_ack() local
68 if (pcmp) { in snd_gf1_pcm_block_change_ack()
69 atomic_dec(&pcmp->dma_count); in snd_gf1_pcm_block_change_ack()
70 wake_up(&pcmp->sleep); in snd_gf1_pcm_block_change_ack()
81 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_block_change() local
96 block.private_data = pcmp; in snd_gf1_pcm_block_change()
98 if (!snd_gf1_dma_transfer_block(pcmp->gus, &block, 0, 0)) in snd_gf1_pcm_block_change()
99 atomic_inc(&pcmp->dma_count); in snd_gf1_pcm_block_change()
106 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_trigger_up() local
107 struct snd_gus_card * gus = pcmp->gus; in snd_gf1_pcm_trigger_up()
116 spin_lock_irqsave(&pcmp->lock, flags); in snd_gf1_pcm_trigger_up()
117 if (pcmp->flags & SNDRV_GF1_PCM_PFLG_ACTIVE) { in snd_gf1_pcm_trigger_up()
118 spin_unlock_irqrestore(&pcmp->lock, flags); in snd_gf1_pcm_trigger_up()
121 pcmp->flags |= SNDRV_GF1_PCM_PFLG_ACTIVE; in snd_gf1_pcm_trigger_up()
122 pcmp->final_volume = 0; in snd_gf1_pcm_trigger_up()
123 spin_unlock_irqrestore(&pcmp->lock, flags); in snd_gf1_pcm_trigger_up()
129 if (pcmp->blocks == 1) { in snd_gf1_pcm_trigger_up()
133 for (voice = 0; voice < pcmp->voices; voice++) { in snd_gf1_pcm_trigger_up()
134 begin = pcmp->memory + voice * (pcmp->dma_size / runtime->channels); in snd_gf1_pcm_trigger_up()
135 curr = begin + (pcmp->bpos * pcmp->block_size) / runtime->channels; in snd_gf1_pcm_trigger_up()
136 end = curr + (pcmp->block_size / runtime->channels); in snd_gf1_pcm_trigger_up()
142 snd_gf1_select_voice(gus, pcmp->pvoices[voice]->number); in snd_gf1_pcm_trigger_up()
160 for (voice = 0; voice < pcmp->voices; voice++) { in snd_gf1_pcm_trigger_up()
161 snd_gf1_select_voice(gus, pcmp->pvoices[voice]->number); in snd_gf1_pcm_trigger_up()
170 for (voice = 0; voice < pcmp->voices; voice++) { in snd_gf1_pcm_trigger_up()
171 snd_gf1_select_voice(gus, pcmp->pvoices[voice]->number); in snd_gf1_pcm_trigger_up()
182 struct gus_pcm_private * pcmp; in snd_gf1_pcm_interrupt_wave() local
193 pcmp = pvoice->private_data; in snd_gf1_pcm_interrupt_wave()
194 if (pcmp == NULL) { in snd_gf1_pcm_interrupt_wave()
199 gus = pcmp->gus; in snd_gf1_pcm_interrupt_wave()
200 runtime = pcmp->substream->runtime; in snd_gf1_pcm_interrupt_wave()
209 snd_gf1_select_voice(gus, pcmp->pvoices[1]->number); in snd_gf1_pcm_interrupt_wave()
213 pcmp->bpos++; in snd_gf1_pcm_interrupt_wave()
214 pcmp->bpos %= pcmp->blocks; in snd_gf1_pcm_interrupt_wave()
215 if (pcmp->bpos + 1 >= pcmp->blocks) { /* last block? */ in snd_gf1_pcm_interrupt_wave()
220 end = pcmp->memory + (((pcmp->bpos + 1) * pcmp->block_size) / runtime->channels); in snd_gf1_pcm_interrupt_wave()
222 step = pcmp->dma_size / runtime->channels; in snd_gf1_pcm_interrupt_wave()
224 if (!pcmp->final_volume) { in snd_gf1_pcm_interrupt_wave()
228 for (idx = 0; idx < pcmp->voices; idx++, end += step) { in snd_gf1_pcm_interrupt_wave()
229 snd_gf1_select_voice(gus, pcmp->pvoices[idx]->number); in snd_gf1_pcm_interrupt_wave()
238 for (idx = 0; idx < pcmp->voices; idx++) { in snd_gf1_pcm_interrupt_wave()
239 snd_gf1_select_voice(gus, pcmp->pvoices[idx]->number); in snd_gf1_pcm_interrupt_wave()
247 snd_pcm_period_elapsed(pcmp->substream); in snd_gf1_pcm_interrupt_wave()
251 end = pcmp->bpos * pcmp->block_size; in snd_gf1_pcm_interrupt_wave()
253 snd_gf1_pcm_block_change(pcmp->substream, end, pcmp->memory + (end / 2), pcmp->block_size / 2); in snd_gf1_pcm_interrupt_wave()
254 …snd_gf1_pcm_block_change(pcmp->substream, end + (pcmp->block_size / 2), pcmp->memory + (pcmp->dma_… in snd_gf1_pcm_interrupt_wave()
256 snd_gf1_pcm_block_change(pcmp->substream, end, pcmp->memory + end, pcmp->block_size); in snd_gf1_pcm_interrupt_wave()
267 struct gus_pcm_private *pcmp = pvoice->private_data; in snd_gf1_pcm_interrupt_volume() local
274 if (pcmp == NULL) in snd_gf1_pcm_interrupt_volume()
277 if (!(pcmp->flags & SNDRV_GF1_PCM_PFLG_ACTIVE)) in snd_gf1_pcm_interrupt_volume()
280 cvoice = pcmp->pvoices[0] == pvoice ? 0 : 1; in snd_gf1_pcm_interrupt_volume()
281 if (pcmp->substream == NULL) in snd_gf1_pcm_interrupt_volume()
287 pcmp->final_volume = 1; in snd_gf1_pcm_interrupt_volume()
350 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_copy() local
353 bpos = samples_to_bytes(runtime, pos) + (voice * (pcmp->dma_size / 2)); in snd_gf1_pcm_playback_copy()
355 if (snd_BUG_ON(bpos > pcmp->dma_size)) in snd_gf1_pcm_playback_copy()
357 if (snd_BUG_ON(bpos + len > pcmp->dma_size)) in snd_gf1_pcm_playback_copy()
362 return snd_gf1_pcm_block_change(substream, bpos, pcmp->memory + bpos, len); in snd_gf1_pcm_playback_copy()
364 struct snd_gus_card *gus = pcmp->gus; in snd_gf1_pcm_playback_copy()
369 …if ((err = snd_gf1_pcm_poke_block(gus, runtime->dma_area + bpos, pcmp->memory + bpos, len, w16, in… in snd_gf1_pcm_playback_copy()
381 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_silence() local
384 bpos = samples_to_bytes(runtime, pos) + (voice * (pcmp->dma_size / 2)); in snd_gf1_pcm_playback_silence()
386 if (snd_BUG_ON(bpos > pcmp->dma_size)) in snd_gf1_pcm_playback_silence()
388 if (snd_BUG_ON(bpos + len > pcmp->dma_size)) in snd_gf1_pcm_playback_silence()
392 return snd_gf1_pcm_block_change(substream, bpos, pcmp->memory + bpos, len); in snd_gf1_pcm_playback_silence()
394 struct snd_gus_card *gus = pcmp->gus; in snd_gf1_pcm_playback_silence()
399 …if ((err = snd_gf1_pcm_poke_block(gus, runtime->dma_area + bpos, pcmp->memory + bpos, len, w16, in… in snd_gf1_pcm_playback_silence()
410 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_hw_params() local
417 if (pcmp->memory > 0) { in snd_gf1_pcm_playback_hw_params()
418 snd_gf1_mem_free(&gus->gf1.mem_alloc, pcmp->memory); in snd_gf1_pcm_playback_hw_params()
419 pcmp->memory = 0; in snd_gf1_pcm_playback_hw_params()
427 pcmp->memory = block->ptr; in snd_gf1_pcm_playback_hw_params()
429 pcmp->voices = params_channels(hw_params); in snd_gf1_pcm_playback_hw_params()
430 if (pcmp->pvoices[0] == NULL) { in snd_gf1_pcm_playback_hw_params()
431 if ((pcmp->pvoices[0] = snd_gf1_alloc_voice(pcmp->gus, SNDRV_GF1_VOICE_TYPE_PCM, 0, 0)) == NULL) in snd_gf1_pcm_playback_hw_params()
433 pcmp->pvoices[0]->handler_wave = snd_gf1_pcm_interrupt_wave; in snd_gf1_pcm_playback_hw_params()
434 pcmp->pvoices[0]->handler_volume = snd_gf1_pcm_interrupt_volume; in snd_gf1_pcm_playback_hw_params()
435 pcmp->pvoices[0]->volume_change = snd_gf1_pcm_volume_change; in snd_gf1_pcm_playback_hw_params()
436 pcmp->pvoices[0]->private_data = pcmp; in snd_gf1_pcm_playback_hw_params()
438 if (pcmp->voices > 1 && pcmp->pvoices[1] == NULL) { in snd_gf1_pcm_playback_hw_params()
439 if ((pcmp->pvoices[1] = snd_gf1_alloc_voice(pcmp->gus, SNDRV_GF1_VOICE_TYPE_PCM, 0, 0)) == NULL) in snd_gf1_pcm_playback_hw_params()
441 pcmp->pvoices[1]->handler_wave = snd_gf1_pcm_interrupt_wave; in snd_gf1_pcm_playback_hw_params()
442 pcmp->pvoices[1]->handler_volume = snd_gf1_pcm_interrupt_volume; in snd_gf1_pcm_playback_hw_params()
443 pcmp->pvoices[1]->volume_change = snd_gf1_pcm_volume_change; in snd_gf1_pcm_playback_hw_params()
444 pcmp->pvoices[1]->private_data = pcmp; in snd_gf1_pcm_playback_hw_params()
445 } else if (pcmp->voices == 1) { in snd_gf1_pcm_playback_hw_params()
446 if (pcmp->pvoices[1]) { in snd_gf1_pcm_playback_hw_params()
447 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[1]); in snd_gf1_pcm_playback_hw_params()
448 pcmp->pvoices[1] = NULL; in snd_gf1_pcm_playback_hw_params()
457 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_hw_free() local
460 if (pcmp->pvoices[0]) { in snd_gf1_pcm_playback_hw_free()
461 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[0]); in snd_gf1_pcm_playback_hw_free()
462 pcmp->pvoices[0] = NULL; in snd_gf1_pcm_playback_hw_free()
464 if (pcmp->pvoices[1]) { in snd_gf1_pcm_playback_hw_free()
465 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[1]); in snd_gf1_pcm_playback_hw_free()
466 pcmp->pvoices[1] = NULL; in snd_gf1_pcm_playback_hw_free()
468 if (pcmp->memory > 0) { in snd_gf1_pcm_playback_hw_free()
469 snd_gf1_mem_free(&pcmp->gus->gf1.mem_alloc, pcmp->memory); in snd_gf1_pcm_playback_hw_free()
470 pcmp->memory = 0; in snd_gf1_pcm_playback_hw_free()
478 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_prepare() local
480 pcmp->bpos = 0; in snd_gf1_pcm_playback_prepare()
481 pcmp->dma_size = snd_pcm_lib_buffer_bytes(substream); in snd_gf1_pcm_playback_prepare()
482 pcmp->block_size = snd_pcm_lib_period_bytes(substream); in snd_gf1_pcm_playback_prepare()
483 pcmp->blocks = pcmp->dma_size / pcmp->block_size; in snd_gf1_pcm_playback_prepare()
492 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_trigger() local
498 spin_lock(&pcmp->lock); in snd_gf1_pcm_playback_trigger()
499 pcmp->flags &= ~SNDRV_GF1_PCM_PFLG_ACTIVE; in snd_gf1_pcm_playback_trigger()
500 spin_unlock(&pcmp->lock); in snd_gf1_pcm_playback_trigger()
501 voice = pcmp->pvoices[0]->number; in snd_gf1_pcm_playback_trigger()
503 if (pcmp->pvoices[1]) { in snd_gf1_pcm_playback_trigger()
504 voice = pcmp->pvoices[1]->number; in snd_gf1_pcm_playback_trigger()
517 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_pointer() local
523 if (pcmp->flags & SNDRV_GF1_PCM_PFLG_ACTIVE) { in snd_gf1_pcm_playback_pointer()
524 snd_gf1_select_voice(gus, pcmp->pvoices[0]->number); in snd_gf1_pcm_playback_pointer()
526 pos = (snd_gf1_read_addr(gus, SNDRV_GF1_VA_CURRENT, voice_ctrl & 4) >> 4) - pcmp->memory; in snd_gf1_pcm_playback_pointer()
666 struct gus_pcm_private *pcmp; in snd_gf1_pcm_playback_open() local
671 pcmp = kzalloc(sizeof(*pcmp), GFP_KERNEL); in snd_gf1_pcm_playback_open()
672 if (pcmp == NULL) in snd_gf1_pcm_playback_open()
674 pcmp->gus = gus; in snd_gf1_pcm_playback_open()
675 spin_lock_init(&pcmp->lock); in snd_gf1_pcm_playback_open()
676 init_waitqueue_head(&pcmp->sleep); in snd_gf1_pcm_playback_open()
677 atomic_set(&pcmp->dma_count, 0); in snd_gf1_pcm_playback_open()
679 runtime->private_data = pcmp; in snd_gf1_pcm_playback_open()
687 pcmp->flags = SNDRV_GF1_PCM_PFLG_NONE; in snd_gf1_pcm_playback_open()
688 pcmp->substream = substream; in snd_gf1_pcm_playback_open()
700 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_close() local
702 if (!wait_event_timeout(pcmp->sleep, (atomic_read(&pcmp->dma_count) <= 0), 2*HZ)) in snd_gf1_pcm_playback_close()
761 struct gus_pcm_private *pcmp; in snd_gf1_pcm_volume_put() local
780 pcmp = pvoice->private_data; in snd_gf1_pcm_volume_put()
781 if (!(pcmp->flags & SNDRV_GF1_PCM_PFLG_ACTIVE)) in snd_gf1_pcm_volume_put()
787 …vol = pvoice == pcmp->pvoices[0] ? gus->gf1.pcm_volume_level_left : gus->gf1.pcm_volume_level_righ… in snd_gf1_pcm_volume_put()
789 pcmp->final_volume = 1; in snd_gf1_pcm_volume_put()