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
99 block.private_data = pcmp; in snd_gf1_pcm_block_change()
101 if (!snd_gf1_dma_transfer_block(pcmp->gus, &block, 0, 0)) in snd_gf1_pcm_block_change()
102 atomic_inc(&pcmp->dma_count); in snd_gf1_pcm_block_change()
109 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_trigger_up() local
110 struct snd_gus_card * gus = pcmp->gus; in snd_gf1_pcm_trigger_up()
119 spin_lock_irqsave(&pcmp->lock, flags); in snd_gf1_pcm_trigger_up()
120 if (pcmp->flags & SNDRV_GF1_PCM_PFLG_ACTIVE) { in snd_gf1_pcm_trigger_up()
121 spin_unlock_irqrestore(&pcmp->lock, flags); in snd_gf1_pcm_trigger_up()
124 pcmp->flags |= SNDRV_GF1_PCM_PFLG_ACTIVE; in snd_gf1_pcm_trigger_up()
125 pcmp->final_volume = 0; in snd_gf1_pcm_trigger_up()
126 spin_unlock_irqrestore(&pcmp->lock, flags); in snd_gf1_pcm_trigger_up()
132 if (pcmp->blocks == 1) { in snd_gf1_pcm_trigger_up()
136 for (voice = 0; voice < pcmp->voices; voice++) { in snd_gf1_pcm_trigger_up()
137 begin = pcmp->memory + voice * (pcmp->dma_size / runtime->channels); in snd_gf1_pcm_trigger_up()
138 curr = begin + (pcmp->bpos * pcmp->block_size) / runtime->channels; in snd_gf1_pcm_trigger_up()
139 end = curr + (pcmp->block_size / runtime->channels); in snd_gf1_pcm_trigger_up()
149 snd_gf1_select_voice(gus, pcmp->pvoices[voice]->number); in snd_gf1_pcm_trigger_up()
167 for (voice = 0; voice < pcmp->voices; voice++) { in snd_gf1_pcm_trigger_up()
168 snd_gf1_select_voice(gus, pcmp->pvoices[voice]->number); in snd_gf1_pcm_trigger_up()
177 for (voice = 0; voice < pcmp->voices; voice++) { in snd_gf1_pcm_trigger_up()
178 snd_gf1_select_voice(gus, pcmp->pvoices[voice]->number); in snd_gf1_pcm_trigger_up()
189 struct gus_pcm_private * pcmp; in snd_gf1_pcm_interrupt_wave() local
200 pcmp = pvoice->private_data; in snd_gf1_pcm_interrupt_wave()
201 if (pcmp == NULL) { in snd_gf1_pcm_interrupt_wave()
206 gus = pcmp->gus; in snd_gf1_pcm_interrupt_wave()
207 runtime = pcmp->substream->runtime; in snd_gf1_pcm_interrupt_wave()
217 snd_gf1_select_voice(gus, pcmp->pvoices[1]->number); in snd_gf1_pcm_interrupt_wave()
222 pcmp->bpos++; in snd_gf1_pcm_interrupt_wave()
223 pcmp->bpos %= pcmp->blocks; in snd_gf1_pcm_interrupt_wave()
224 if (pcmp->bpos + 1 >= pcmp->blocks) { /* last block? */ in snd_gf1_pcm_interrupt_wave()
229 end = pcmp->memory + (((pcmp->bpos + 1) * pcmp->block_size) / runtime->channels); in snd_gf1_pcm_interrupt_wave()
231 step = pcmp->dma_size / runtime->channels; in snd_gf1_pcm_interrupt_wave()
233 if (!pcmp->final_volume) { in snd_gf1_pcm_interrupt_wave()
237 for (idx = 0; idx < pcmp->voices; idx++, end += step) { in snd_gf1_pcm_interrupt_wave()
238 snd_gf1_select_voice(gus, pcmp->pvoices[idx]->number); in snd_gf1_pcm_interrupt_wave()
247 for (idx = 0; idx < pcmp->voices; idx++) { in snd_gf1_pcm_interrupt_wave()
248 snd_gf1_select_voice(gus, pcmp->pvoices[idx]->number); in snd_gf1_pcm_interrupt_wave()
256 snd_pcm_period_elapsed(pcmp->substream); in snd_gf1_pcm_interrupt_wave()
260 end = pcmp->bpos * pcmp->block_size; in snd_gf1_pcm_interrupt_wave()
262 snd_gf1_pcm_block_change(pcmp->substream, end, pcmp->memory + (end / 2), pcmp->block_size / 2); in snd_gf1_pcm_interrupt_wave()
263 …snd_gf1_pcm_block_change(pcmp->substream, end + (pcmp->block_size / 2), pcmp->memory + (pcmp->dma_… in snd_gf1_pcm_interrupt_wave()
265 snd_gf1_pcm_block_change(pcmp->substream, end, pcmp->memory + end, pcmp->block_size); in snd_gf1_pcm_interrupt_wave()
276 struct gus_pcm_private *pcmp = pvoice->private_data; in snd_gf1_pcm_interrupt_volume() local
283 if (pcmp == NULL) in snd_gf1_pcm_interrupt_volume()
286 if (!(pcmp->flags & SNDRV_GF1_PCM_PFLG_ACTIVE)) in snd_gf1_pcm_interrupt_volume()
289 cvoice = pcmp->pvoices[0] == pvoice ? 0 : 1; in snd_gf1_pcm_interrupt_volume()
290 if (pcmp->substream == NULL) in snd_gf1_pcm_interrupt_volume()
296 pcmp->final_volume = 1; in snd_gf1_pcm_interrupt_volume()
356 static int get_bpos(struct gus_pcm_private *pcmp, int voice, unsigned int pos, in get_bpos() argument
359 unsigned int bpos = pos + (voice * (pcmp->dma_size / 2)); in get_bpos()
360 if (snd_BUG_ON(bpos > pcmp->dma_size)) in get_bpos()
362 if (snd_BUG_ON(bpos + len > pcmp->dma_size)) in get_bpos()
371 struct gus_pcm_private *pcmp = runtime->private_data; in playback_copy_ack() local
372 struct snd_gus_card *gus = pcmp->gus; in playback_copy_ack()
377 pcmp->memory + bpos, len); in playback_copy_ack()
382 pcmp->memory + bpos, len, w16, invert); in playback_copy_ack()
390 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_copy() local
394 bpos = get_bpos(pcmp, voice, pos, len); in snd_gf1_pcm_playback_copy()
407 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_copy_kernel() local
411 bpos = get_bpos(pcmp, voice, pos, len); in snd_gf1_pcm_playback_copy_kernel()
423 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_silence() local
427 bpos = get_bpos(pcmp, voice, pos, len); in snd_gf1_pcm_playback_silence()
440 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_hw_params() local
447 if (pcmp->memory > 0) { in snd_gf1_pcm_playback_hw_params()
448 snd_gf1_mem_free(&gus->gf1.mem_alloc, pcmp->memory); in snd_gf1_pcm_playback_hw_params()
449 pcmp->memory = 0; in snd_gf1_pcm_playback_hw_params()
457 pcmp->memory = block->ptr; in snd_gf1_pcm_playback_hw_params()
459 pcmp->voices = params_channels(hw_params); in snd_gf1_pcm_playback_hw_params()
460 if (pcmp->pvoices[0] == NULL) { in snd_gf1_pcm_playback_hw_params()
461 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()
463 pcmp->pvoices[0]->handler_wave = snd_gf1_pcm_interrupt_wave; in snd_gf1_pcm_playback_hw_params()
464 pcmp->pvoices[0]->handler_volume = snd_gf1_pcm_interrupt_volume; in snd_gf1_pcm_playback_hw_params()
465 pcmp->pvoices[0]->volume_change = snd_gf1_pcm_volume_change; in snd_gf1_pcm_playback_hw_params()
466 pcmp->pvoices[0]->private_data = pcmp; in snd_gf1_pcm_playback_hw_params()
468 if (pcmp->voices > 1 && pcmp->pvoices[1] == NULL) { in snd_gf1_pcm_playback_hw_params()
469 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()
471 pcmp->pvoices[1]->handler_wave = snd_gf1_pcm_interrupt_wave; in snd_gf1_pcm_playback_hw_params()
472 pcmp->pvoices[1]->handler_volume = snd_gf1_pcm_interrupt_volume; in snd_gf1_pcm_playback_hw_params()
473 pcmp->pvoices[1]->volume_change = snd_gf1_pcm_volume_change; in snd_gf1_pcm_playback_hw_params()
474 pcmp->pvoices[1]->private_data = pcmp; in snd_gf1_pcm_playback_hw_params()
475 } else if (pcmp->voices == 1) { in snd_gf1_pcm_playback_hw_params()
476 if (pcmp->pvoices[1]) { in snd_gf1_pcm_playback_hw_params()
477 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[1]); in snd_gf1_pcm_playback_hw_params()
478 pcmp->pvoices[1] = NULL; in snd_gf1_pcm_playback_hw_params()
487 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_hw_free() local
490 if (pcmp->pvoices[0]) { in snd_gf1_pcm_playback_hw_free()
491 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[0]); in snd_gf1_pcm_playback_hw_free()
492 pcmp->pvoices[0] = NULL; in snd_gf1_pcm_playback_hw_free()
494 if (pcmp->pvoices[1]) { in snd_gf1_pcm_playback_hw_free()
495 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[1]); in snd_gf1_pcm_playback_hw_free()
496 pcmp->pvoices[1] = NULL; in snd_gf1_pcm_playback_hw_free()
498 if (pcmp->memory > 0) { in snd_gf1_pcm_playback_hw_free()
499 snd_gf1_mem_free(&pcmp->gus->gf1.mem_alloc, pcmp->memory); in snd_gf1_pcm_playback_hw_free()
500 pcmp->memory = 0; in snd_gf1_pcm_playback_hw_free()
508 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_prepare() local
510 pcmp->bpos = 0; in snd_gf1_pcm_playback_prepare()
511 pcmp->dma_size = snd_pcm_lib_buffer_bytes(substream); in snd_gf1_pcm_playback_prepare()
512 pcmp->block_size = snd_pcm_lib_period_bytes(substream); in snd_gf1_pcm_playback_prepare()
513 pcmp->blocks = pcmp->dma_size / pcmp->block_size; in snd_gf1_pcm_playback_prepare()
522 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_trigger() local
528 spin_lock(&pcmp->lock); in snd_gf1_pcm_playback_trigger()
529 pcmp->flags &= ~SNDRV_GF1_PCM_PFLG_ACTIVE; in snd_gf1_pcm_playback_trigger()
530 spin_unlock(&pcmp->lock); in snd_gf1_pcm_playback_trigger()
531 voice = pcmp->pvoices[0]->number; in snd_gf1_pcm_playback_trigger()
533 if (pcmp->pvoices[1]) { in snd_gf1_pcm_playback_trigger()
534 voice = pcmp->pvoices[1]->number; in snd_gf1_pcm_playback_trigger()
547 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_pointer() local
553 if (pcmp->flags & SNDRV_GF1_PCM_PFLG_ACTIVE) { in snd_gf1_pcm_playback_pointer()
554 snd_gf1_select_voice(gus, pcmp->pvoices[0]->number); in snd_gf1_pcm_playback_pointer()
556 pos = (snd_gf1_read_addr(gus, SNDRV_GF1_VA_CURRENT, voice_ctrl & 4) >> 4) - pcmp->memory; in snd_gf1_pcm_playback_pointer()
696 struct gus_pcm_private *pcmp; in snd_gf1_pcm_playback_open() local
701 pcmp = kzalloc(sizeof(*pcmp), GFP_KERNEL); in snd_gf1_pcm_playback_open()
702 if (pcmp == NULL) in snd_gf1_pcm_playback_open()
704 pcmp->gus = gus; in snd_gf1_pcm_playback_open()
705 spin_lock_init(&pcmp->lock); in snd_gf1_pcm_playback_open()
706 init_waitqueue_head(&pcmp->sleep); in snd_gf1_pcm_playback_open()
707 atomic_set(&pcmp->dma_count, 0); in snd_gf1_pcm_playback_open()
709 runtime->private_data = pcmp; in snd_gf1_pcm_playback_open()
718 pcmp->flags = SNDRV_GF1_PCM_PFLG_NONE; in snd_gf1_pcm_playback_open()
719 pcmp->substream = substream; in snd_gf1_pcm_playback_open()
731 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_close() local
733 if (!wait_event_timeout(pcmp->sleep, (atomic_read(&pcmp->dma_count) <= 0), 2*HZ)) in snd_gf1_pcm_playback_close()
792 struct gus_pcm_private *pcmp; in snd_gf1_pcm_volume_put() local
811 pcmp = pvoice->private_data; in snd_gf1_pcm_volume_put()
812 if (!(pcmp->flags & SNDRV_GF1_PCM_PFLG_ACTIVE)) in snd_gf1_pcm_volume_put()
818 …vol = pvoice == pcmp->pvoices[0] ? gus->gf1.pcm_volume_level_left : gus->gf1.pcm_volume_level_righ… in snd_gf1_pcm_volume_put()
820 pcmp->final_volume = 1; in snd_gf1_pcm_volume_put()