Lines Matching refs:epcm

40 	struct snd_emu10k1_pcm *epcm;  in snd_emu10k1_pcm_interrupt()  local
42 if ((epcm = voice->epcm) == NULL) in snd_emu10k1_pcm_interrupt()
44 if (epcm->substream == NULL) in snd_emu10k1_pcm_interrupt()
49 epcm->substream->runtime->hw->pointer(emu, epcm->substream), in snd_emu10k1_pcm_interrupt()
50 snd_pcm_lib_period_bytes(epcm->substream), in snd_emu10k1_pcm_interrupt()
51 snd_pcm_lib_buffer_bytes(epcm->substream)); in snd_emu10k1_pcm_interrupt()
53 snd_pcm_period_elapsed(epcm->substream); in snd_emu10k1_pcm_interrupt()
96 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_efx_playback_pointer() local
99 if (!epcm->running) in snd_emu10k1_efx_playback_pointer()
101 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff; in snd_emu10k1_efx_playback_pointer()
103 ptr -= epcm->ccca_start_addr; in snd_emu10k1_efx_playback_pointer()
109 static int snd_emu10k1_pcm_channel_alloc(struct snd_emu10k1_pcm * epcm, int voices) in snd_emu10k1_pcm_channel_alloc() argument
113 if (epcm->voices[1] != NULL && voices < 2) { in snd_emu10k1_pcm_channel_alloc()
114 snd_emu10k1_voice_free(epcm->emu, epcm->voices[1]); in snd_emu10k1_pcm_channel_alloc()
115 epcm->voices[1] = NULL; in snd_emu10k1_pcm_channel_alloc()
118 if (epcm->voices[i] == NULL) in snd_emu10k1_pcm_channel_alloc()
124 for (i = 0; i < ARRAY_SIZE(epcm->voices); i++) { in snd_emu10k1_pcm_channel_alloc()
125 if (epcm->voices[i]) { in snd_emu10k1_pcm_channel_alloc()
126 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]); in snd_emu10k1_pcm_channel_alloc()
127 epcm->voices[i] = NULL; in snd_emu10k1_pcm_channel_alloc()
130 err = snd_emu10k1_voice_alloc(epcm->emu, in snd_emu10k1_pcm_channel_alloc()
131 epcm->type == PLAYBACK_EMUVOICE ? EMU10K1_PCM : EMU10K1_EFX, in snd_emu10k1_pcm_channel_alloc()
133 &epcm->voices[0]); in snd_emu10k1_pcm_channel_alloc()
137 epcm->voices[0]->epcm = epcm; in snd_emu10k1_pcm_channel_alloc()
140 epcm->voices[i] = &epcm->emu->voices[epcm->voices[0]->number + i]; in snd_emu10k1_pcm_channel_alloc()
141 epcm->voices[i]->epcm = epcm; in snd_emu10k1_pcm_channel_alloc()
144 if (epcm->extra == NULL) { in snd_emu10k1_pcm_channel_alloc()
145 err = snd_emu10k1_voice_alloc(epcm->emu, in snd_emu10k1_pcm_channel_alloc()
146 epcm->type == PLAYBACK_EMUVOICE ? EMU10K1_PCM : EMU10K1_EFX, in snd_emu10k1_pcm_channel_alloc()
148 &epcm->extra); in snd_emu10k1_pcm_channel_alloc()
156 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]); in snd_emu10k1_pcm_channel_alloc()
157 epcm->voices[i] = NULL; in snd_emu10k1_pcm_channel_alloc()
161 epcm->extra->epcm = epcm; in snd_emu10k1_pcm_channel_alloc()
162 epcm->extra->interrupt = snd_emu10k1_pcm_interrupt; in snd_emu10k1_pcm_channel_alloc()
289 struct snd_pcm_substream *substream = evoice->epcm->substream; in snd_emu10k1_pcm_init_voice()
332 evoice->epcm->ccca_start_addr = start_addr + ccis; in snd_emu10k1_pcm_init_voice()
412 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_playback_hw_params() local
416 if ((err = snd_emu10k1_pcm_channel_alloc(epcm, params_channels(hw_params))) < 0) in snd_emu10k1_playback_hw_params()
429 if (epcm->memblk != NULL) in snd_emu10k1_playback_hw_params()
430 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_playback_hw_params()
431 epcm->memblk = snd_emu10k1_alloc_pages(emu, substream); in snd_emu10k1_playback_hw_params()
432 epcm->start_addr = 0; in snd_emu10k1_playback_hw_params()
433 if (! epcm->memblk) in snd_emu10k1_playback_hw_params()
435 mapped = ((struct snd_emu10k1_memblk *)epcm->memblk)->mapped_page; in snd_emu10k1_playback_hw_params()
438 epcm->start_addr = mapped << PAGE_SHIFT; in snd_emu10k1_playback_hw_params()
447 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_playback_hw_free() local
451 epcm = runtime->private_data; in snd_emu10k1_playback_hw_free()
452 if (epcm->extra) { in snd_emu10k1_playback_hw_free()
453 snd_emu10k1_voice_free(epcm->emu, epcm->extra); in snd_emu10k1_playback_hw_free()
454 epcm->extra = NULL; in snd_emu10k1_playback_hw_free()
456 if (epcm->voices[1]) { in snd_emu10k1_playback_hw_free()
457 snd_emu10k1_voice_free(epcm->emu, epcm->voices[1]); in snd_emu10k1_playback_hw_free()
458 epcm->voices[1] = NULL; in snd_emu10k1_playback_hw_free()
460 if (epcm->voices[0]) { in snd_emu10k1_playback_hw_free()
461 snd_emu10k1_voice_free(epcm->emu, epcm->voices[0]); in snd_emu10k1_playback_hw_free()
462 epcm->voices[0] = NULL; in snd_emu10k1_playback_hw_free()
464 if (epcm->memblk) { in snd_emu10k1_playback_hw_free()
465 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_playback_hw_free()
466 epcm->memblk = NULL; in snd_emu10k1_playback_hw_free()
467 epcm->start_addr = 0; in snd_emu10k1_playback_hw_free()
477 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_efx_playback_hw_free() local
482 epcm = runtime->private_data; in snd_emu10k1_efx_playback_hw_free()
483 if (epcm->extra) { in snd_emu10k1_efx_playback_hw_free()
484 snd_emu10k1_voice_free(epcm->emu, epcm->extra); in snd_emu10k1_efx_playback_hw_free()
485 epcm->extra = NULL; in snd_emu10k1_efx_playback_hw_free()
488 if (epcm->voices[i]) { in snd_emu10k1_efx_playback_hw_free()
489 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]); in snd_emu10k1_efx_playback_hw_free()
490 epcm->voices[i] = NULL; in snd_emu10k1_efx_playback_hw_free()
493 if (epcm->memblk) { in snd_emu10k1_efx_playback_hw_free()
494 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_efx_playback_hw_free()
495 epcm->memblk = NULL; in snd_emu10k1_efx_playback_hw_free()
496 epcm->start_addr = 0; in snd_emu10k1_efx_playback_hw_free()
506 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_playback_prepare() local
509 start_addr = epcm->start_addr; in snd_emu10k1_playback_prepare()
516 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra, in snd_emu10k1_playback_prepare()
518 start_addr = epcm->start_addr; in snd_emu10k1_playback_prepare()
519 end_addr = epcm->start_addr + snd_pcm_lib_buffer_bytes(substream); in snd_emu10k1_playback_prepare()
520 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0], in snd_emu10k1_playback_prepare()
523 if (epcm->voices[1]) in snd_emu10k1_playback_prepare()
524 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[1], in snd_emu10k1_playback_prepare()
534 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_efx_playback_prepare() local
539 start_addr = epcm->start_addr; in snd_emu10k1_efx_playback_prepare()
540 end_addr = epcm->start_addr + snd_pcm_lib_buffer_bytes(substream); in snd_emu10k1_efx_playback_prepare()
547 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra, in snd_emu10k1_efx_playback_prepare()
551 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0], in snd_emu10k1_efx_playback_prepare()
557 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[i], in snd_emu10k1_efx_playback_prepare()
601 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_capture_prepare() local
605 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0); in snd_emu10k1_capture_prepare()
606 switch (epcm->type) { in snd_emu10k1_capture_prepare()
620 snd_emu10k1_ptr_write(emu, epcm->capture_ba_reg, 0, runtime->dma_addr); in snd_emu10k1_capture_prepare()
621 epcm->capture_bufsize = snd_pcm_lib_buffer_bytes(substream); in snd_emu10k1_capture_prepare()
622 epcm->capture_bs_val = 0; in snd_emu10k1_capture_prepare()
624 if (capture_period_sizes[idx] == epcm->capture_bufsize) { in snd_emu10k1_capture_prepare()
625 epcm->capture_bs_val = idx + 1; in snd_emu10k1_capture_prepare()
629 if (epcm->capture_bs_val == 0) { in snd_emu10k1_capture_prepare()
631 epcm->capture_bs_val++; in snd_emu10k1_capture_prepare()
633 if (epcm->type == CAPTURE_AC97ADC) { in snd_emu10k1_capture_prepare()
634 epcm->capture_cr_val = emu->audigy ? A_ADCCR_LCHANENABLE : ADCCR_LCHANENABLE; in snd_emu10k1_capture_prepare()
636 epcm->capture_cr_val |= emu->audigy ? A_ADCCR_RCHANENABLE : ADCCR_RCHANENABLE; in snd_emu10k1_capture_prepare()
637 epcm->capture_cr_val |= emu->audigy ? in snd_emu10k1_capture_prepare()
651 runtime = evoice->epcm->substream->runtime; in snd_emu10k1_playback_invalidate_cache()
690 substream = evoice->epcm->substream; in snd_emu10k1_playback_prepare_voice()
712 substream = evoice->epcm->substream; in snd_emu10k1_playback_trigger_voice()
722 if (master || evoice->epcm->type == PLAYBACK_EFX) in snd_emu10k1_playback_trigger_voice()
746 struct snd_emu10k1_pcm *epcm, in snd_emu10k1_playback_mangle_extra() argument
756 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->extra->number); in snd_emu10k1_playback_mangle_extra()
758 ptr |= epcm->ccca_start_addr + period_pos; in snd_emu10k1_playback_mangle_extra()
759 snd_emu10k1_ptr_write(emu, CCCA, epcm->extra->number, ptr); in snd_emu10k1_playback_mangle_extra()
767 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_playback_trigger() local
779 snd_emu10k1_playback_invalidate_cache(emu, 1, epcm->extra); /* do we need this? */ in snd_emu10k1_playback_trigger()
780 snd_emu10k1_playback_invalidate_cache(emu, 0, epcm->voices[0]); in snd_emu10k1_playback_trigger()
785 snd_emu10k1_playback_mangle_extra(emu, epcm, substream, runtime); in snd_emu10k1_playback_trigger()
787 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[0], 1, 0, mix); in snd_emu10k1_playback_trigger()
788 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[1], 0, 0, mix); in snd_emu10k1_playback_trigger()
789 snd_emu10k1_playback_prepare_voice(emu, epcm->extra, 1, 1, NULL); in snd_emu10k1_playback_trigger()
790 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[0], 1, 0); in snd_emu10k1_playback_trigger()
791 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[1], 0, 0); in snd_emu10k1_playback_trigger()
792 snd_emu10k1_playback_trigger_voice(emu, epcm->extra, 1, 1); in snd_emu10k1_playback_trigger()
793 epcm->running = 1; in snd_emu10k1_playback_trigger()
798 epcm->running = 0; in snd_emu10k1_playback_trigger()
799 snd_emu10k1_playback_stop_voice(emu, epcm->voices[0]); in snd_emu10k1_playback_trigger()
800 snd_emu10k1_playback_stop_voice(emu, epcm->voices[1]); in snd_emu10k1_playback_trigger()
801 snd_emu10k1_playback_stop_voice(emu, epcm->extra); in snd_emu10k1_playback_trigger()
816 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_capture_trigger() local
824 outl(epcm->capture_ipr, emu->port + IPR); in snd_emu10k1_capture_trigger()
825 snd_emu10k1_intr_enable(emu, epcm->capture_inte); in snd_emu10k1_capture_trigger()
830 switch (epcm->type) { in snd_emu10k1_capture_trigger()
832 snd_emu10k1_ptr_write(emu, ADCCR, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
836 snd_emu10k1_ptr_write(emu, A_FXWC1, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
837 snd_emu10k1_ptr_write(emu, A_FXWC2, 0, epcm->capture_cr_val2); in snd_emu10k1_capture_trigger()
840 epcm->capture_cr_val, in snd_emu10k1_capture_trigger()
841 epcm->capture_cr_val2); in snd_emu10k1_capture_trigger()
843 snd_emu10k1_ptr_write(emu, FXWC, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
848 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, epcm->capture_bs_val); in snd_emu10k1_capture_trigger()
849 epcm->running = 1; in snd_emu10k1_capture_trigger()
850 epcm->first_ptr = 1; in snd_emu10k1_capture_trigger()
854 epcm->running = 0; in snd_emu10k1_capture_trigger()
855 snd_emu10k1_intr_disable(emu, epcm->capture_inte); in snd_emu10k1_capture_trigger()
856 outl(epcm->capture_ipr, emu->port + IPR); in snd_emu10k1_capture_trigger()
857 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0); in snd_emu10k1_capture_trigger()
858 switch (epcm->type) { in snd_emu10k1_capture_trigger()
884 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_playback_pointer() local
887 if (!epcm->running) in snd_emu10k1_playback_pointer()
889 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff; in snd_emu10k1_playback_pointer()
892 ptr -= epcm->ccca_start_addr; in snd_emu10k1_playback_pointer()
895 if (ptr < epcm->ccca_start_addr) in snd_emu10k1_playback_pointer()
896 ptr += runtime->buffer_size - epcm->ccca_start_addr; in snd_emu10k1_playback_pointer()
898 ptr -= epcm->ccca_start_addr; in snd_emu10k1_playback_pointer()
918 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_efx_playback_trigger() local
927 snd_emu10k1_playback_invalidate_cache(emu, 0, epcm->voices[i]); in snd_emu10k1_efx_playback_trigger()
929 snd_emu10k1_playback_invalidate_cache(emu, 1, epcm->extra); in snd_emu10k1_efx_playback_trigger()
934 snd_emu10k1_playback_prepare_voice(emu, epcm->extra, 1, 1, NULL); in snd_emu10k1_efx_playback_trigger()
935 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[0], 0, 0, in snd_emu10k1_efx_playback_trigger()
938 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[i], 0, 0, in snd_emu10k1_efx_playback_trigger()
940 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[0], 0, 0); in snd_emu10k1_efx_playback_trigger()
941 snd_emu10k1_playback_trigger_voice(emu, epcm->extra, 1, 1); in snd_emu10k1_efx_playback_trigger()
943 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[i], 0, 0); in snd_emu10k1_efx_playback_trigger()
944 epcm->running = 1; in snd_emu10k1_efx_playback_trigger()
949 epcm->running = 0; in snd_emu10k1_efx_playback_trigger()
951 snd_emu10k1_playback_stop_voice(emu, epcm->voices[i]); in snd_emu10k1_efx_playback_trigger()
953 snd_emu10k1_playback_stop_voice(emu, epcm->extra); in snd_emu10k1_efx_playback_trigger()
968 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_capture_pointer() local
971 if (!epcm->running) in snd_emu10k1_capture_pointer()
973 if (epcm->first_ptr) { in snd_emu10k1_capture_pointer()
975 epcm->first_ptr = 0; in snd_emu10k1_capture_pointer()
977 ptr = snd_emu10k1_ptr_read(emu, epcm->capture_idx_reg, 0) & 0x0000ffff; in snd_emu10k1_capture_pointer()
1097 mix->epcm = NULL; in snd_emu10k1_efx_playback_close()
1106 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_efx_playback_open() local
1111 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_efx_playback_open()
1112 if (epcm == NULL) in snd_emu10k1_efx_playback_open()
1114 epcm->emu = emu; in snd_emu10k1_efx_playback_open()
1115 epcm->type = PLAYBACK_EFX; in snd_emu10k1_efx_playback_open()
1116 epcm->substream = substream; in snd_emu10k1_efx_playback_open()
1120 runtime->private_data = epcm; in snd_emu10k1_efx_playback_open()
1130 mix->epcm = epcm; in snd_emu10k1_efx_playback_open()
1139 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_playback_open() local
1144 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_playback_open()
1145 if (epcm == NULL) in snd_emu10k1_playback_open()
1147 epcm->emu = emu; in snd_emu10k1_playback_open()
1148 epcm->type = PLAYBACK_EMUVOICE; in snd_emu10k1_playback_open()
1149 epcm->substream = substream; in snd_emu10k1_playback_open()
1150 runtime->private_data = epcm; in snd_emu10k1_playback_open()
1154 kfree(epcm); in snd_emu10k1_playback_open()
1158 kfree(epcm); in snd_emu10k1_playback_open()
1167 kfree(epcm); in snd_emu10k1_playback_open()
1177 mix->epcm = epcm; in snd_emu10k1_playback_open()
1187 mix->epcm = NULL; in snd_emu10k1_playback_close()
1196 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_capture_open() local
1198 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_capture_open()
1199 if (epcm == NULL) in snd_emu10k1_capture_open()
1201 epcm->emu = emu; in snd_emu10k1_capture_open()
1202 epcm->type = CAPTURE_AC97ADC; in snd_emu10k1_capture_open()
1203 epcm->substream = substream; in snd_emu10k1_capture_open()
1204 epcm->capture_ipr = IPR_ADCBUFFULL|IPR_ADCBUFHALFFULL; in snd_emu10k1_capture_open()
1205 epcm->capture_inte = INTE_ADCBUFENABLE; in snd_emu10k1_capture_open()
1206 epcm->capture_ba_reg = ADCBA; in snd_emu10k1_capture_open()
1207 epcm->capture_bs_reg = ADCBS; in snd_emu10k1_capture_open()
1208 epcm->capture_idx_reg = emu->audigy ? A_ADCIDX : ADCIDX; in snd_emu10k1_capture_open()
1209 runtime->private_data = epcm; in snd_emu10k1_capture_open()
1231 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_capture_mic_open() local
1234 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_capture_mic_open()
1235 if (epcm == NULL) in snd_emu10k1_capture_mic_open()
1237 epcm->emu = emu; in snd_emu10k1_capture_mic_open()
1238 epcm->type = CAPTURE_AC97MIC; in snd_emu10k1_capture_mic_open()
1239 epcm->substream = substream; in snd_emu10k1_capture_mic_open()
1240 epcm->capture_ipr = IPR_MICBUFFULL|IPR_MICBUFHALFFULL; in snd_emu10k1_capture_mic_open()
1241 epcm->capture_inte = INTE_MICBUFENABLE; in snd_emu10k1_capture_mic_open()
1242 epcm->capture_ba_reg = MICBA; in snd_emu10k1_capture_mic_open()
1243 epcm->capture_bs_reg = MICBS; in snd_emu10k1_capture_mic_open()
1244 epcm->capture_idx_reg = emu->audigy ? A_MICIDX : MICIDX; in snd_emu10k1_capture_mic_open()
1245 substream->runtime->private_data = epcm; in snd_emu10k1_capture_mic_open()
1269 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_capture_efx_open() local
1274 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_capture_efx_open()
1275 if (epcm == NULL) in snd_emu10k1_capture_efx_open()
1277 epcm->emu = emu; in snd_emu10k1_capture_efx_open()
1278 epcm->type = CAPTURE_EFX; in snd_emu10k1_capture_efx_open()
1279 epcm->substream = substream; in snd_emu10k1_capture_efx_open()
1280 epcm->capture_ipr = IPR_EFXBUFFULL|IPR_EFXBUFHALFFULL; in snd_emu10k1_capture_efx_open()
1281 epcm->capture_inte = INTE_EFXBUFENABLE; in snd_emu10k1_capture_efx_open()
1282 epcm->capture_ba_reg = FXBA; in snd_emu10k1_capture_efx_open()
1283 epcm->capture_bs_reg = FXBS; in snd_emu10k1_capture_efx_open()
1284 epcm->capture_idx_reg = FXIDX; in snd_emu10k1_capture_efx_open()
1285 substream->runtime->private_data = epcm; in snd_emu10k1_capture_efx_open()
1356 epcm->capture_cr_val = emu->efx_voices_mask[0]; in snd_emu10k1_capture_efx_open()
1357 epcm->capture_cr_val2 = emu->efx_voices_mask[1]; in snd_emu10k1_capture_efx_open()