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()
363 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_copy() local
366 bpos = samples_to_bytes(runtime, pos) + (voice * (pcmp->dma_size / 2)); in snd_gf1_pcm_playback_copy()
368 if (snd_BUG_ON(bpos > pcmp->dma_size)) in snd_gf1_pcm_playback_copy()
370 if (snd_BUG_ON(bpos + len > pcmp->dma_size)) in snd_gf1_pcm_playback_copy()
375 return snd_gf1_pcm_block_change(substream, bpos, pcmp->memory + bpos, len); in snd_gf1_pcm_playback_copy()
377 struct snd_gus_card *gus = pcmp->gus; in snd_gf1_pcm_playback_copy()
382 …if ((err = snd_gf1_pcm_poke_block(gus, runtime->dma_area + bpos, pcmp->memory + bpos, len, w16, in… in snd_gf1_pcm_playback_copy()
394 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_silence() local
397 bpos = samples_to_bytes(runtime, pos) + (voice * (pcmp->dma_size / 2)); in snd_gf1_pcm_playback_silence()
399 if (snd_BUG_ON(bpos > pcmp->dma_size)) in snd_gf1_pcm_playback_silence()
401 if (snd_BUG_ON(bpos + len > pcmp->dma_size)) in snd_gf1_pcm_playback_silence()
405 return snd_gf1_pcm_block_change(substream, bpos, pcmp->memory + bpos, len); in snd_gf1_pcm_playback_silence()
407 struct snd_gus_card *gus = pcmp->gus; in snd_gf1_pcm_playback_silence()
412 …if ((err = snd_gf1_pcm_poke_block(gus, runtime->dma_area + bpos, pcmp->memory + bpos, len, w16, in… in snd_gf1_pcm_playback_silence()
423 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_hw_params() local
430 if (pcmp->memory > 0) { in snd_gf1_pcm_playback_hw_params()
431 snd_gf1_mem_free(&gus->gf1.mem_alloc, pcmp->memory); in snd_gf1_pcm_playback_hw_params()
432 pcmp->memory = 0; in snd_gf1_pcm_playback_hw_params()
440 pcmp->memory = block->ptr; in snd_gf1_pcm_playback_hw_params()
442 pcmp->voices = params_channels(hw_params); in snd_gf1_pcm_playback_hw_params()
443 if (pcmp->pvoices[0] == NULL) { in snd_gf1_pcm_playback_hw_params()
444 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()
446 pcmp->pvoices[0]->handler_wave = snd_gf1_pcm_interrupt_wave; in snd_gf1_pcm_playback_hw_params()
447 pcmp->pvoices[0]->handler_volume = snd_gf1_pcm_interrupt_volume; in snd_gf1_pcm_playback_hw_params()
448 pcmp->pvoices[0]->volume_change = snd_gf1_pcm_volume_change; in snd_gf1_pcm_playback_hw_params()
449 pcmp->pvoices[0]->private_data = pcmp; in snd_gf1_pcm_playback_hw_params()
451 if (pcmp->voices > 1 && pcmp->pvoices[1] == NULL) { in snd_gf1_pcm_playback_hw_params()
452 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()
454 pcmp->pvoices[1]->handler_wave = snd_gf1_pcm_interrupt_wave; in snd_gf1_pcm_playback_hw_params()
455 pcmp->pvoices[1]->handler_volume = snd_gf1_pcm_interrupt_volume; in snd_gf1_pcm_playback_hw_params()
456 pcmp->pvoices[1]->volume_change = snd_gf1_pcm_volume_change; in snd_gf1_pcm_playback_hw_params()
457 pcmp->pvoices[1]->private_data = pcmp; in snd_gf1_pcm_playback_hw_params()
458 } else if (pcmp->voices == 1) { in snd_gf1_pcm_playback_hw_params()
459 if (pcmp->pvoices[1]) { in snd_gf1_pcm_playback_hw_params()
460 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[1]); in snd_gf1_pcm_playback_hw_params()
461 pcmp->pvoices[1] = NULL; in snd_gf1_pcm_playback_hw_params()
470 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_hw_free() local
473 if (pcmp->pvoices[0]) { in snd_gf1_pcm_playback_hw_free()
474 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[0]); in snd_gf1_pcm_playback_hw_free()
475 pcmp->pvoices[0] = NULL; in snd_gf1_pcm_playback_hw_free()
477 if (pcmp->pvoices[1]) { in snd_gf1_pcm_playback_hw_free()
478 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[1]); in snd_gf1_pcm_playback_hw_free()
479 pcmp->pvoices[1] = NULL; in snd_gf1_pcm_playback_hw_free()
481 if (pcmp->memory > 0) { in snd_gf1_pcm_playback_hw_free()
482 snd_gf1_mem_free(&pcmp->gus->gf1.mem_alloc, pcmp->memory); in snd_gf1_pcm_playback_hw_free()
483 pcmp->memory = 0; in snd_gf1_pcm_playback_hw_free()
491 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_prepare() local
493 pcmp->bpos = 0; in snd_gf1_pcm_playback_prepare()
494 pcmp->dma_size = snd_pcm_lib_buffer_bytes(substream); in snd_gf1_pcm_playback_prepare()
495 pcmp->block_size = snd_pcm_lib_period_bytes(substream); in snd_gf1_pcm_playback_prepare()
496 pcmp->blocks = pcmp->dma_size / pcmp->block_size; in snd_gf1_pcm_playback_prepare()
505 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_trigger() local
511 spin_lock(&pcmp->lock); in snd_gf1_pcm_playback_trigger()
512 pcmp->flags &= ~SNDRV_GF1_PCM_PFLG_ACTIVE; in snd_gf1_pcm_playback_trigger()
513 spin_unlock(&pcmp->lock); in snd_gf1_pcm_playback_trigger()
514 voice = pcmp->pvoices[0]->number; in snd_gf1_pcm_playback_trigger()
516 if (pcmp->pvoices[1]) { in snd_gf1_pcm_playback_trigger()
517 voice = pcmp->pvoices[1]->number; in snd_gf1_pcm_playback_trigger()
530 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_pointer() local
536 if (pcmp->flags & SNDRV_GF1_PCM_PFLG_ACTIVE) { in snd_gf1_pcm_playback_pointer()
537 snd_gf1_select_voice(gus, pcmp->pvoices[0]->number); in snd_gf1_pcm_playback_pointer()
539 pos = (snd_gf1_read_addr(gus, SNDRV_GF1_VA_CURRENT, voice_ctrl & 4) >> 4) - pcmp->memory; in snd_gf1_pcm_playback_pointer()
679 struct gus_pcm_private *pcmp; in snd_gf1_pcm_playback_open() local
684 pcmp = kzalloc(sizeof(*pcmp), GFP_KERNEL); in snd_gf1_pcm_playback_open()
685 if (pcmp == NULL) in snd_gf1_pcm_playback_open()
687 pcmp->gus = gus; in snd_gf1_pcm_playback_open()
688 spin_lock_init(&pcmp->lock); in snd_gf1_pcm_playback_open()
689 init_waitqueue_head(&pcmp->sleep); in snd_gf1_pcm_playback_open()
690 atomic_set(&pcmp->dma_count, 0); in snd_gf1_pcm_playback_open()
692 runtime->private_data = pcmp; in snd_gf1_pcm_playback_open()
701 pcmp->flags = SNDRV_GF1_PCM_PFLG_NONE; in snd_gf1_pcm_playback_open()
702 pcmp->substream = substream; in snd_gf1_pcm_playback_open()
714 struct gus_pcm_private *pcmp = runtime->private_data; in snd_gf1_pcm_playback_close() local
716 if (!wait_event_timeout(pcmp->sleep, (atomic_read(&pcmp->dma_count) <= 0), 2*HZ)) in snd_gf1_pcm_playback_close()
775 struct gus_pcm_private *pcmp; in snd_gf1_pcm_volume_put() local
794 pcmp = pvoice->private_data; in snd_gf1_pcm_volume_put()
795 if (!(pcmp->flags & SNDRV_GF1_PCM_PFLG_ACTIVE)) in snd_gf1_pcm_volume_put()
801 …vol = pvoice == pcmp->pvoices[0] ? gus->gf1.pcm_volume_level_left : gus->gf1.pcm_volume_level_righ… in snd_gf1_pcm_volume_put()
803 pcmp->final_volume = 1; in snd_gf1_pcm_volume_put()