Lines Matching refs:epcm
26 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_pcm_interrupt() local
28 epcm = voice->epcm; in snd_emu10k1_pcm_interrupt()
29 if (!epcm) in snd_emu10k1_pcm_interrupt()
31 if (epcm->substream == NULL) in snd_emu10k1_pcm_interrupt()
36 epcm->substream->runtime->hw->pointer(emu, epcm->substream), in snd_emu10k1_pcm_interrupt()
37 snd_pcm_lib_period_bytes(epcm->substream), in snd_emu10k1_pcm_interrupt()
38 snd_pcm_lib_buffer_bytes(epcm->substream)); in snd_emu10k1_pcm_interrupt()
40 snd_pcm_period_elapsed(epcm->substream); in snd_emu10k1_pcm_interrupt()
83 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_efx_playback_pointer() local
86 if (!epcm->running) in snd_emu10k1_efx_playback_pointer()
88 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff; in snd_emu10k1_efx_playback_pointer()
90 ptr -= epcm->ccca_start_addr; in snd_emu10k1_efx_playback_pointer()
96 static int snd_emu10k1_pcm_channel_alloc(struct snd_emu10k1_pcm * epcm, int voices) in snd_emu10k1_pcm_channel_alloc() argument
100 if (epcm->voices[1] != NULL && voices < 2) { in snd_emu10k1_pcm_channel_alloc()
101 snd_emu10k1_voice_free(epcm->emu, epcm->voices[1]); in snd_emu10k1_pcm_channel_alloc()
102 epcm->voices[1] = NULL; in snd_emu10k1_pcm_channel_alloc()
105 if (epcm->voices[i] == NULL) in snd_emu10k1_pcm_channel_alloc()
111 for (i = 0; i < ARRAY_SIZE(epcm->voices); i++) { in snd_emu10k1_pcm_channel_alloc()
112 if (epcm->voices[i]) { in snd_emu10k1_pcm_channel_alloc()
113 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]); in snd_emu10k1_pcm_channel_alloc()
114 epcm->voices[i] = NULL; in snd_emu10k1_pcm_channel_alloc()
117 err = snd_emu10k1_voice_alloc(epcm->emu, in snd_emu10k1_pcm_channel_alloc()
118 epcm->type == PLAYBACK_EMUVOICE ? EMU10K1_PCM : EMU10K1_EFX, in snd_emu10k1_pcm_channel_alloc()
120 &epcm->voices[0]); in snd_emu10k1_pcm_channel_alloc()
124 epcm->voices[0]->epcm = epcm; in snd_emu10k1_pcm_channel_alloc()
127 epcm->voices[i] = &epcm->emu->voices[(epcm->voices[0]->number + i) % NUM_G]; in snd_emu10k1_pcm_channel_alloc()
128 epcm->voices[i]->epcm = epcm; in snd_emu10k1_pcm_channel_alloc()
131 if (epcm->extra == NULL) { in snd_emu10k1_pcm_channel_alloc()
132 err = snd_emu10k1_voice_alloc(epcm->emu, in snd_emu10k1_pcm_channel_alloc()
133 epcm->type == PLAYBACK_EMUVOICE ? EMU10K1_PCM : EMU10K1_EFX, in snd_emu10k1_pcm_channel_alloc()
135 &epcm->extra); in snd_emu10k1_pcm_channel_alloc()
143 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]); in snd_emu10k1_pcm_channel_alloc()
144 epcm->voices[i] = NULL; in snd_emu10k1_pcm_channel_alloc()
148 epcm->extra->epcm = epcm; in snd_emu10k1_pcm_channel_alloc()
149 epcm->extra->interrupt = snd_emu10k1_pcm_interrupt; in snd_emu10k1_pcm_channel_alloc()
276 struct snd_pcm_substream *substream = evoice->epcm->substream; in snd_emu10k1_pcm_init_voice()
319 evoice->epcm->ccca_start_addr = start_addr + ccis; in snd_emu10k1_pcm_init_voice()
399 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_playback_hw_params() local
403 err = snd_emu10k1_pcm_channel_alloc(epcm, params_channels(hw_params)); in snd_emu10k1_playback_hw_params()
417 if (epcm->memblk != NULL) in snd_emu10k1_playback_hw_params()
418 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_playback_hw_params()
419 epcm->memblk = snd_emu10k1_alloc_pages(emu, substream); in snd_emu10k1_playback_hw_params()
420 epcm->start_addr = 0; in snd_emu10k1_playback_hw_params()
421 if (! epcm->memblk) in snd_emu10k1_playback_hw_params()
423 mapped = ((struct snd_emu10k1_memblk *)epcm->memblk)->mapped_page; in snd_emu10k1_playback_hw_params()
426 epcm->start_addr = mapped << PAGE_SHIFT; in snd_emu10k1_playback_hw_params()
435 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_playback_hw_free() local
439 epcm = runtime->private_data; in snd_emu10k1_playback_hw_free()
440 if (epcm->extra) { in snd_emu10k1_playback_hw_free()
441 snd_emu10k1_voice_free(epcm->emu, epcm->extra); in snd_emu10k1_playback_hw_free()
442 epcm->extra = NULL; in snd_emu10k1_playback_hw_free()
444 if (epcm->voices[1]) { in snd_emu10k1_playback_hw_free()
445 snd_emu10k1_voice_free(epcm->emu, epcm->voices[1]); in snd_emu10k1_playback_hw_free()
446 epcm->voices[1] = NULL; in snd_emu10k1_playback_hw_free()
448 if (epcm->voices[0]) { in snd_emu10k1_playback_hw_free()
449 snd_emu10k1_voice_free(epcm->emu, epcm->voices[0]); in snd_emu10k1_playback_hw_free()
450 epcm->voices[0] = NULL; in snd_emu10k1_playback_hw_free()
452 if (epcm->memblk) { in snd_emu10k1_playback_hw_free()
453 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_playback_hw_free()
454 epcm->memblk = NULL; in snd_emu10k1_playback_hw_free()
455 epcm->start_addr = 0; in snd_emu10k1_playback_hw_free()
465 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_efx_playback_hw_free() local
470 epcm = runtime->private_data; in snd_emu10k1_efx_playback_hw_free()
471 if (epcm->extra) { in snd_emu10k1_efx_playback_hw_free()
472 snd_emu10k1_voice_free(epcm->emu, epcm->extra); in snd_emu10k1_efx_playback_hw_free()
473 epcm->extra = NULL; in snd_emu10k1_efx_playback_hw_free()
476 if (epcm->voices[i]) { in snd_emu10k1_efx_playback_hw_free()
477 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]); in snd_emu10k1_efx_playback_hw_free()
478 epcm->voices[i] = NULL; in snd_emu10k1_efx_playback_hw_free()
481 if (epcm->memblk) { in snd_emu10k1_efx_playback_hw_free()
482 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_efx_playback_hw_free()
483 epcm->memblk = NULL; in snd_emu10k1_efx_playback_hw_free()
484 epcm->start_addr = 0; in snd_emu10k1_efx_playback_hw_free()
494 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_playback_prepare() local
497 start_addr = epcm->start_addr; in snd_emu10k1_playback_prepare()
504 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra, in snd_emu10k1_playback_prepare()
506 start_addr = epcm->start_addr; in snd_emu10k1_playback_prepare()
507 end_addr = epcm->start_addr + snd_pcm_lib_buffer_bytes(substream); in snd_emu10k1_playback_prepare()
508 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0], in snd_emu10k1_playback_prepare()
511 if (epcm->voices[1]) in snd_emu10k1_playback_prepare()
512 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[1], in snd_emu10k1_playback_prepare()
522 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_efx_playback_prepare() local
527 start_addr = epcm->start_addr; in snd_emu10k1_efx_playback_prepare()
528 end_addr = epcm->start_addr + snd_pcm_lib_buffer_bytes(substream); in snd_emu10k1_efx_playback_prepare()
535 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra, in snd_emu10k1_efx_playback_prepare()
539 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0], in snd_emu10k1_efx_playback_prepare()
545 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[i], in snd_emu10k1_efx_playback_prepare()
578 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_capture_prepare() local
582 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0); in snd_emu10k1_capture_prepare()
583 switch (epcm->type) { in snd_emu10k1_capture_prepare()
597 snd_emu10k1_ptr_write(emu, epcm->capture_ba_reg, 0, runtime->dma_addr); in snd_emu10k1_capture_prepare()
598 epcm->capture_bufsize = snd_pcm_lib_buffer_bytes(substream); in snd_emu10k1_capture_prepare()
599 epcm->capture_bs_val = 0; in snd_emu10k1_capture_prepare()
601 if (capture_period_sizes[idx] == epcm->capture_bufsize) { in snd_emu10k1_capture_prepare()
602 epcm->capture_bs_val = idx + 1; in snd_emu10k1_capture_prepare()
606 if (epcm->capture_bs_val == 0) { in snd_emu10k1_capture_prepare()
608 epcm->capture_bs_val++; in snd_emu10k1_capture_prepare()
610 if (epcm->type == CAPTURE_AC97ADC) { in snd_emu10k1_capture_prepare()
611 epcm->capture_cr_val = emu->audigy ? A_ADCCR_LCHANENABLE : ADCCR_LCHANENABLE; in snd_emu10k1_capture_prepare()
613 epcm->capture_cr_val |= emu->audigy ? A_ADCCR_RCHANENABLE : ADCCR_RCHANENABLE; in snd_emu10k1_capture_prepare()
614 epcm->capture_cr_val |= emu->audigy ? in snd_emu10k1_capture_prepare()
628 runtime = evoice->epcm->substream->runtime; in snd_emu10k1_playback_invalidate_cache()
667 substream = evoice->epcm->substream; in snd_emu10k1_playback_prepare_voice()
689 substream = evoice->epcm->substream; in snd_emu10k1_playback_trigger_voice()
699 if (master || evoice->epcm->type == PLAYBACK_EFX) in snd_emu10k1_playback_trigger_voice()
723 struct snd_emu10k1_pcm *epcm, in snd_emu10k1_playback_mangle_extra() argument
733 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->extra->number); in snd_emu10k1_playback_mangle_extra()
735 ptr |= epcm->ccca_start_addr + period_pos; in snd_emu10k1_playback_mangle_extra()
736 snd_emu10k1_ptr_write(emu, CCCA, epcm->extra->number, ptr); in snd_emu10k1_playback_mangle_extra()
744 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_playback_trigger() local
756 snd_emu10k1_playback_invalidate_cache(emu, 1, epcm->extra); /* do we need this? */ in snd_emu10k1_playback_trigger()
757 snd_emu10k1_playback_invalidate_cache(emu, 0, epcm->voices[0]); in snd_emu10k1_playback_trigger()
762 snd_emu10k1_playback_mangle_extra(emu, epcm, substream, runtime); in snd_emu10k1_playback_trigger()
764 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[0], 1, 0, mix); in snd_emu10k1_playback_trigger()
765 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[1], 0, 0, mix); in snd_emu10k1_playback_trigger()
766 snd_emu10k1_playback_prepare_voice(emu, epcm->extra, 1, 1, NULL); in snd_emu10k1_playback_trigger()
767 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[0], 1, 0); in snd_emu10k1_playback_trigger()
768 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[1], 0, 0); in snd_emu10k1_playback_trigger()
769 snd_emu10k1_playback_trigger_voice(emu, epcm->extra, 1, 1); in snd_emu10k1_playback_trigger()
770 epcm->running = 1; in snd_emu10k1_playback_trigger()
775 epcm->running = 0; in snd_emu10k1_playback_trigger()
776 snd_emu10k1_playback_stop_voice(emu, epcm->voices[0]); in snd_emu10k1_playback_trigger()
777 snd_emu10k1_playback_stop_voice(emu, epcm->voices[1]); in snd_emu10k1_playback_trigger()
778 snd_emu10k1_playback_stop_voice(emu, epcm->extra); in snd_emu10k1_playback_trigger()
793 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_capture_trigger() local
801 outl(epcm->capture_ipr, emu->port + IPR); in snd_emu10k1_capture_trigger()
802 snd_emu10k1_intr_enable(emu, epcm->capture_inte); in snd_emu10k1_capture_trigger()
807 switch (epcm->type) { in snd_emu10k1_capture_trigger()
809 snd_emu10k1_ptr_write(emu, ADCCR, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
813 snd_emu10k1_ptr_write(emu, A_FXWC1, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
814 snd_emu10k1_ptr_write(emu, A_FXWC2, 0, epcm->capture_cr_val2); in snd_emu10k1_capture_trigger()
817 epcm->capture_cr_val, in snd_emu10k1_capture_trigger()
818 epcm->capture_cr_val2); in snd_emu10k1_capture_trigger()
820 snd_emu10k1_ptr_write(emu, FXWC, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
825 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, epcm->capture_bs_val); in snd_emu10k1_capture_trigger()
826 epcm->running = 1; in snd_emu10k1_capture_trigger()
827 epcm->first_ptr = 1; in snd_emu10k1_capture_trigger()
831 epcm->running = 0; in snd_emu10k1_capture_trigger()
832 snd_emu10k1_intr_disable(emu, epcm->capture_inte); in snd_emu10k1_capture_trigger()
833 outl(epcm->capture_ipr, emu->port + IPR); in snd_emu10k1_capture_trigger()
834 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0); in snd_emu10k1_capture_trigger()
835 switch (epcm->type) { in snd_emu10k1_capture_trigger()
861 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_playback_pointer() local
864 if (!epcm->running) in snd_emu10k1_playback_pointer()
866 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff; in snd_emu10k1_playback_pointer()
869 ptr -= epcm->ccca_start_addr; in snd_emu10k1_playback_pointer()
872 if (ptr < epcm->ccca_start_addr) in snd_emu10k1_playback_pointer()
873 ptr += runtime->buffer_size - epcm->ccca_start_addr; in snd_emu10k1_playback_pointer()
875 ptr -= epcm->ccca_start_addr; in snd_emu10k1_playback_pointer()
895 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_efx_playback_trigger() local
904 snd_emu10k1_playback_invalidate_cache(emu, 0, epcm->voices[i]); in snd_emu10k1_efx_playback_trigger()
906 snd_emu10k1_playback_invalidate_cache(emu, 1, epcm->extra); in snd_emu10k1_efx_playback_trigger()
910 snd_emu10k1_playback_prepare_voice(emu, epcm->extra, 1, 1, NULL); in snd_emu10k1_efx_playback_trigger()
911 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[0], 0, 0, in snd_emu10k1_efx_playback_trigger()
914 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[i], 0, 0, in snd_emu10k1_efx_playback_trigger()
916 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[0], 0, 0); in snd_emu10k1_efx_playback_trigger()
917 snd_emu10k1_playback_trigger_voice(emu, epcm->extra, 1, 1); in snd_emu10k1_efx_playback_trigger()
919 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[i], 0, 0); in snd_emu10k1_efx_playback_trigger()
920 epcm->running = 1; in snd_emu10k1_efx_playback_trigger()
925 epcm->running = 0; in snd_emu10k1_efx_playback_trigger()
927 snd_emu10k1_playback_stop_voice(emu, epcm->voices[i]); in snd_emu10k1_efx_playback_trigger()
929 snd_emu10k1_playback_stop_voice(emu, epcm->extra); in snd_emu10k1_efx_playback_trigger()
944 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_capture_pointer() local
947 if (!epcm->running) in snd_emu10k1_capture_pointer()
949 if (epcm->first_ptr) { in snd_emu10k1_capture_pointer()
951 epcm->first_ptr = 0; in snd_emu10k1_capture_pointer()
953 ptr = snd_emu10k1_ptr_read(emu, epcm->capture_idx_reg, 0) & 0x0000ffff; in snd_emu10k1_capture_pointer()
1073 mix->epcm = NULL; in snd_emu10k1_efx_playback_close()
1082 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_efx_playback_open() local
1087 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_efx_playback_open()
1088 if (epcm == NULL) in snd_emu10k1_efx_playback_open()
1090 epcm->emu = emu; in snd_emu10k1_efx_playback_open()
1091 epcm->type = PLAYBACK_EFX; in snd_emu10k1_efx_playback_open()
1092 epcm->substream = substream; in snd_emu10k1_efx_playback_open()
1096 runtime->private_data = epcm; in snd_emu10k1_efx_playback_open()
1106 mix->epcm = epcm; in snd_emu10k1_efx_playback_open()
1115 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_playback_open() local
1120 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_playback_open()
1121 if (epcm == NULL) in snd_emu10k1_playback_open()
1123 epcm->emu = emu; in snd_emu10k1_playback_open()
1124 epcm->type = PLAYBACK_EMUVOICE; in snd_emu10k1_playback_open()
1125 epcm->substream = substream; in snd_emu10k1_playback_open()
1126 runtime->private_data = epcm; in snd_emu10k1_playback_open()
1131 kfree(epcm); in snd_emu10k1_playback_open()
1136 kfree(epcm); in snd_emu10k1_playback_open()
1145 kfree(epcm); in snd_emu10k1_playback_open()
1155 mix->epcm = epcm; in snd_emu10k1_playback_open()
1165 mix->epcm = NULL; in snd_emu10k1_playback_close()
1174 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_capture_open() local
1176 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_capture_open()
1177 if (epcm == NULL) in snd_emu10k1_capture_open()
1179 epcm->emu = emu; in snd_emu10k1_capture_open()
1180 epcm->type = CAPTURE_AC97ADC; in snd_emu10k1_capture_open()
1181 epcm->substream = substream; in snd_emu10k1_capture_open()
1182 epcm->capture_ipr = IPR_ADCBUFFULL|IPR_ADCBUFHALFFULL; in snd_emu10k1_capture_open()
1183 epcm->capture_inte = INTE_ADCBUFENABLE; in snd_emu10k1_capture_open()
1184 epcm->capture_ba_reg = ADCBA; in snd_emu10k1_capture_open()
1185 epcm->capture_bs_reg = ADCBS; in snd_emu10k1_capture_open()
1186 epcm->capture_idx_reg = emu->audigy ? A_ADCIDX : ADCIDX; in snd_emu10k1_capture_open()
1187 runtime->private_data = epcm; in snd_emu10k1_capture_open()
1209 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_capture_mic_open() local
1212 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_capture_mic_open()
1213 if (epcm == NULL) in snd_emu10k1_capture_mic_open()
1215 epcm->emu = emu; in snd_emu10k1_capture_mic_open()
1216 epcm->type = CAPTURE_AC97MIC; in snd_emu10k1_capture_mic_open()
1217 epcm->substream = substream; in snd_emu10k1_capture_mic_open()
1218 epcm->capture_ipr = IPR_MICBUFFULL|IPR_MICBUFHALFFULL; in snd_emu10k1_capture_mic_open()
1219 epcm->capture_inte = INTE_MICBUFENABLE; in snd_emu10k1_capture_mic_open()
1220 epcm->capture_ba_reg = MICBA; in snd_emu10k1_capture_mic_open()
1221 epcm->capture_bs_reg = MICBS; in snd_emu10k1_capture_mic_open()
1222 epcm->capture_idx_reg = emu->audigy ? A_MICIDX : MICIDX; in snd_emu10k1_capture_mic_open()
1223 substream->runtime->private_data = epcm; in snd_emu10k1_capture_mic_open()
1247 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_capture_efx_open() local
1252 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_capture_efx_open()
1253 if (epcm == NULL) in snd_emu10k1_capture_efx_open()
1255 epcm->emu = emu; in snd_emu10k1_capture_efx_open()
1256 epcm->type = CAPTURE_EFX; in snd_emu10k1_capture_efx_open()
1257 epcm->substream = substream; in snd_emu10k1_capture_efx_open()
1258 epcm->capture_ipr = IPR_EFXBUFFULL|IPR_EFXBUFHALFFULL; in snd_emu10k1_capture_efx_open()
1259 epcm->capture_inte = INTE_EFXBUFENABLE; in snd_emu10k1_capture_efx_open()
1260 epcm->capture_ba_reg = FXBA; in snd_emu10k1_capture_efx_open()
1261 epcm->capture_bs_reg = FXBS; in snd_emu10k1_capture_efx_open()
1262 epcm->capture_idx_reg = FXIDX; in snd_emu10k1_capture_efx_open()
1263 substream->runtime->private_data = epcm; in snd_emu10k1_capture_efx_open()
1334 epcm->capture_cr_val = emu->efx_voices_mask[0]; in snd_emu10k1_capture_efx_open()
1335 epcm->capture_cr_val2 = emu->efx_voices_mask[1]; in snd_emu10k1_capture_efx_open()