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()
333 evoice->epcm->ccca_start_addr = start_addr + ccis; in snd_emu10k1_pcm_init_voice()
413 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()
422 if (epcm->memblk != NULL) in snd_emu10k1_playback_hw_params()
423 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_playback_hw_params()
424 epcm->memblk = snd_emu10k1_alloc_pages(emu, substream); in snd_emu10k1_playback_hw_params()
425 epcm->start_addr = 0; in snd_emu10k1_playback_hw_params()
426 if (! epcm->memblk) in snd_emu10k1_playback_hw_params()
428 mapped = ((struct snd_emu10k1_memblk *)epcm->memblk)->mapped_page; in snd_emu10k1_playback_hw_params()
431 epcm->start_addr = mapped << PAGE_SHIFT; in snd_emu10k1_playback_hw_params()
440 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_playback_hw_free() local
444 epcm = runtime->private_data; in snd_emu10k1_playback_hw_free()
445 if (epcm->extra) { in snd_emu10k1_playback_hw_free()
446 snd_emu10k1_voice_free(epcm->emu, epcm->extra); in snd_emu10k1_playback_hw_free()
447 epcm->extra = NULL; in snd_emu10k1_playback_hw_free()
449 if (epcm->voices[1]) { in snd_emu10k1_playback_hw_free()
450 snd_emu10k1_voice_free(epcm->emu, epcm->voices[1]); in snd_emu10k1_playback_hw_free()
451 epcm->voices[1] = NULL; in snd_emu10k1_playback_hw_free()
453 if (epcm->voices[0]) { in snd_emu10k1_playback_hw_free()
454 snd_emu10k1_voice_free(epcm->emu, epcm->voices[0]); in snd_emu10k1_playback_hw_free()
455 epcm->voices[0] = NULL; in snd_emu10k1_playback_hw_free()
457 if (epcm->memblk) { in snd_emu10k1_playback_hw_free()
458 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_playback_hw_free()
459 epcm->memblk = NULL; in snd_emu10k1_playback_hw_free()
460 epcm->start_addr = 0; in snd_emu10k1_playback_hw_free()
470 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_efx_playback_hw_free() local
475 epcm = runtime->private_data; in snd_emu10k1_efx_playback_hw_free()
476 if (epcm->extra) { in snd_emu10k1_efx_playback_hw_free()
477 snd_emu10k1_voice_free(epcm->emu, epcm->extra); in snd_emu10k1_efx_playback_hw_free()
478 epcm->extra = NULL; in snd_emu10k1_efx_playback_hw_free()
481 if (epcm->voices[i]) { in snd_emu10k1_efx_playback_hw_free()
482 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]); in snd_emu10k1_efx_playback_hw_free()
483 epcm->voices[i] = NULL; in snd_emu10k1_efx_playback_hw_free()
486 if (epcm->memblk) { in snd_emu10k1_efx_playback_hw_free()
487 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_efx_playback_hw_free()
488 epcm->memblk = NULL; in snd_emu10k1_efx_playback_hw_free()
489 epcm->start_addr = 0; in snd_emu10k1_efx_playback_hw_free()
499 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_playback_prepare() local
502 start_addr = epcm->start_addr; in snd_emu10k1_playback_prepare()
509 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra, in snd_emu10k1_playback_prepare()
511 start_addr = epcm->start_addr; in snd_emu10k1_playback_prepare()
512 end_addr = epcm->start_addr + snd_pcm_lib_buffer_bytes(substream); in snd_emu10k1_playback_prepare()
513 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0], in snd_emu10k1_playback_prepare()
516 if (epcm->voices[1]) in snd_emu10k1_playback_prepare()
517 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[1], in snd_emu10k1_playback_prepare()
527 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_efx_playback_prepare() local
532 start_addr = epcm->start_addr; in snd_emu10k1_efx_playback_prepare()
533 end_addr = epcm->start_addr + snd_pcm_lib_buffer_bytes(substream); in snd_emu10k1_efx_playback_prepare()
540 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra, in snd_emu10k1_efx_playback_prepare()
544 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0], in snd_emu10k1_efx_playback_prepare()
550 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[i], in snd_emu10k1_efx_playback_prepare()
594 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_capture_prepare() local
598 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0); in snd_emu10k1_capture_prepare()
599 switch (epcm->type) { in snd_emu10k1_capture_prepare()
613 snd_emu10k1_ptr_write(emu, epcm->capture_ba_reg, 0, runtime->dma_addr); in snd_emu10k1_capture_prepare()
614 epcm->capture_bufsize = snd_pcm_lib_buffer_bytes(substream); in snd_emu10k1_capture_prepare()
615 epcm->capture_bs_val = 0; in snd_emu10k1_capture_prepare()
617 if (capture_period_sizes[idx] == epcm->capture_bufsize) { in snd_emu10k1_capture_prepare()
618 epcm->capture_bs_val = idx + 1; in snd_emu10k1_capture_prepare()
622 if (epcm->capture_bs_val == 0) { in snd_emu10k1_capture_prepare()
624 epcm->capture_bs_val++; in snd_emu10k1_capture_prepare()
626 if (epcm->type == CAPTURE_AC97ADC) { in snd_emu10k1_capture_prepare()
627 epcm->capture_cr_val = emu->audigy ? A_ADCCR_LCHANENABLE : ADCCR_LCHANENABLE; in snd_emu10k1_capture_prepare()
629 epcm->capture_cr_val |= emu->audigy ? A_ADCCR_RCHANENABLE : ADCCR_RCHANENABLE; in snd_emu10k1_capture_prepare()
630 epcm->capture_cr_val |= emu->audigy ? in snd_emu10k1_capture_prepare()
644 runtime = evoice->epcm->substream->runtime; in snd_emu10k1_playback_invalidate_cache()
683 substream = evoice->epcm->substream; in snd_emu10k1_playback_prepare_voice()
705 substream = evoice->epcm->substream; in snd_emu10k1_playback_trigger_voice()
715 if (master || evoice->epcm->type == PLAYBACK_EFX) in snd_emu10k1_playback_trigger_voice()
739 struct snd_emu10k1_pcm *epcm, in snd_emu10k1_playback_mangle_extra() argument
749 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->extra->number); in snd_emu10k1_playback_mangle_extra()
751 ptr |= epcm->ccca_start_addr + period_pos; in snd_emu10k1_playback_mangle_extra()
752 snd_emu10k1_ptr_write(emu, CCCA, epcm->extra->number, ptr); in snd_emu10k1_playback_mangle_extra()
760 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_playback_trigger() local
772 snd_emu10k1_playback_invalidate_cache(emu, 1, epcm->extra); /* do we need this? */ in snd_emu10k1_playback_trigger()
773 snd_emu10k1_playback_invalidate_cache(emu, 0, epcm->voices[0]); in snd_emu10k1_playback_trigger()
778 snd_emu10k1_playback_mangle_extra(emu, epcm, substream, runtime); in snd_emu10k1_playback_trigger()
780 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[0], 1, 0, mix); in snd_emu10k1_playback_trigger()
781 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[1], 0, 0, mix); in snd_emu10k1_playback_trigger()
782 snd_emu10k1_playback_prepare_voice(emu, epcm->extra, 1, 1, NULL); in snd_emu10k1_playback_trigger()
783 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[0], 1, 0); in snd_emu10k1_playback_trigger()
784 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[1], 0, 0); in snd_emu10k1_playback_trigger()
785 snd_emu10k1_playback_trigger_voice(emu, epcm->extra, 1, 1); in snd_emu10k1_playback_trigger()
786 epcm->running = 1; in snd_emu10k1_playback_trigger()
791 epcm->running = 0; in snd_emu10k1_playback_trigger()
792 snd_emu10k1_playback_stop_voice(emu, epcm->voices[0]); in snd_emu10k1_playback_trigger()
793 snd_emu10k1_playback_stop_voice(emu, epcm->voices[1]); in snd_emu10k1_playback_trigger()
794 snd_emu10k1_playback_stop_voice(emu, epcm->extra); in snd_emu10k1_playback_trigger()
809 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_capture_trigger() local
817 outl(epcm->capture_ipr, emu->port + IPR); in snd_emu10k1_capture_trigger()
818 snd_emu10k1_intr_enable(emu, epcm->capture_inte); in snd_emu10k1_capture_trigger()
823 switch (epcm->type) { in snd_emu10k1_capture_trigger()
825 snd_emu10k1_ptr_write(emu, ADCCR, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
829 snd_emu10k1_ptr_write(emu, A_FXWC1, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
830 snd_emu10k1_ptr_write(emu, A_FXWC2, 0, epcm->capture_cr_val2); in snd_emu10k1_capture_trigger()
833 epcm->capture_cr_val, in snd_emu10k1_capture_trigger()
834 epcm->capture_cr_val2); in snd_emu10k1_capture_trigger()
836 snd_emu10k1_ptr_write(emu, FXWC, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
841 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, epcm->capture_bs_val); in snd_emu10k1_capture_trigger()
842 epcm->running = 1; in snd_emu10k1_capture_trigger()
843 epcm->first_ptr = 1; in snd_emu10k1_capture_trigger()
847 epcm->running = 0; in snd_emu10k1_capture_trigger()
848 snd_emu10k1_intr_disable(emu, epcm->capture_inte); in snd_emu10k1_capture_trigger()
849 outl(epcm->capture_ipr, emu->port + IPR); in snd_emu10k1_capture_trigger()
850 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0); in snd_emu10k1_capture_trigger()
851 switch (epcm->type) { in snd_emu10k1_capture_trigger()
877 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_playback_pointer() local
880 if (!epcm->running) in snd_emu10k1_playback_pointer()
882 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff; in snd_emu10k1_playback_pointer()
885 ptr -= epcm->ccca_start_addr; in snd_emu10k1_playback_pointer()
888 if (ptr < epcm->ccca_start_addr) in snd_emu10k1_playback_pointer()
889 ptr += runtime->buffer_size - epcm->ccca_start_addr; in snd_emu10k1_playback_pointer()
891 ptr -= epcm->ccca_start_addr; in snd_emu10k1_playback_pointer()
911 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_efx_playback_trigger() local
920 snd_emu10k1_playback_invalidate_cache(emu, 0, epcm->voices[i]); in snd_emu10k1_efx_playback_trigger()
922 snd_emu10k1_playback_invalidate_cache(emu, 1, epcm->extra); in snd_emu10k1_efx_playback_trigger()
927 snd_emu10k1_playback_prepare_voice(emu, epcm->extra, 1, 1, NULL); in snd_emu10k1_efx_playback_trigger()
928 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[0], 0, 0, in snd_emu10k1_efx_playback_trigger()
931 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[i], 0, 0, in snd_emu10k1_efx_playback_trigger()
933 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[0], 0, 0); in snd_emu10k1_efx_playback_trigger()
934 snd_emu10k1_playback_trigger_voice(emu, epcm->extra, 1, 1); in snd_emu10k1_efx_playback_trigger()
936 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[i], 0, 0); in snd_emu10k1_efx_playback_trigger()
937 epcm->running = 1; in snd_emu10k1_efx_playback_trigger()
942 epcm->running = 0; in snd_emu10k1_efx_playback_trigger()
944 snd_emu10k1_playback_stop_voice(emu, epcm->voices[i]); in snd_emu10k1_efx_playback_trigger()
946 snd_emu10k1_playback_stop_voice(emu, epcm->extra); in snd_emu10k1_efx_playback_trigger()
961 struct snd_emu10k1_pcm *epcm = runtime->private_data; in snd_emu10k1_capture_pointer() local
964 if (!epcm->running) in snd_emu10k1_capture_pointer()
966 if (epcm->first_ptr) { in snd_emu10k1_capture_pointer()
968 epcm->first_ptr = 0; in snd_emu10k1_capture_pointer()
970 ptr = snd_emu10k1_ptr_read(emu, epcm->capture_idx_reg, 0) & 0x0000ffff; in snd_emu10k1_capture_pointer()
1090 mix->epcm = NULL; in snd_emu10k1_efx_playback_close()
1099 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_efx_playback_open() local
1104 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_efx_playback_open()
1105 if (epcm == NULL) in snd_emu10k1_efx_playback_open()
1107 epcm->emu = emu; in snd_emu10k1_efx_playback_open()
1108 epcm->type = PLAYBACK_EFX; in snd_emu10k1_efx_playback_open()
1109 epcm->substream = substream; in snd_emu10k1_efx_playback_open()
1113 runtime->private_data = epcm; in snd_emu10k1_efx_playback_open()
1123 mix->epcm = epcm; in snd_emu10k1_efx_playback_open()
1132 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_playback_open() local
1137 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_playback_open()
1138 if (epcm == NULL) in snd_emu10k1_playback_open()
1140 epcm->emu = emu; in snd_emu10k1_playback_open()
1141 epcm->type = PLAYBACK_EMUVOICE; in snd_emu10k1_playback_open()
1142 epcm->substream = substream; in snd_emu10k1_playback_open()
1143 runtime->private_data = epcm; in snd_emu10k1_playback_open()
1147 kfree(epcm); in snd_emu10k1_playback_open()
1151 kfree(epcm); in snd_emu10k1_playback_open()
1160 kfree(epcm); in snd_emu10k1_playback_open()
1170 mix->epcm = epcm; in snd_emu10k1_playback_open()
1180 mix->epcm = NULL; in snd_emu10k1_playback_close()
1189 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_capture_open() local
1191 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_capture_open()
1192 if (epcm == NULL) in snd_emu10k1_capture_open()
1194 epcm->emu = emu; in snd_emu10k1_capture_open()
1195 epcm->type = CAPTURE_AC97ADC; in snd_emu10k1_capture_open()
1196 epcm->substream = substream; in snd_emu10k1_capture_open()
1197 epcm->capture_ipr = IPR_ADCBUFFULL|IPR_ADCBUFHALFFULL; in snd_emu10k1_capture_open()
1198 epcm->capture_inte = INTE_ADCBUFENABLE; in snd_emu10k1_capture_open()
1199 epcm->capture_ba_reg = ADCBA; in snd_emu10k1_capture_open()
1200 epcm->capture_bs_reg = ADCBS; in snd_emu10k1_capture_open()
1201 epcm->capture_idx_reg = emu->audigy ? A_ADCIDX : ADCIDX; in snd_emu10k1_capture_open()
1202 runtime->private_data = epcm; in snd_emu10k1_capture_open()
1224 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_capture_mic_open() local
1227 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_capture_mic_open()
1228 if (epcm == NULL) in snd_emu10k1_capture_mic_open()
1230 epcm->emu = emu; in snd_emu10k1_capture_mic_open()
1231 epcm->type = CAPTURE_AC97MIC; in snd_emu10k1_capture_mic_open()
1232 epcm->substream = substream; in snd_emu10k1_capture_mic_open()
1233 epcm->capture_ipr = IPR_MICBUFFULL|IPR_MICBUFHALFFULL; in snd_emu10k1_capture_mic_open()
1234 epcm->capture_inte = INTE_MICBUFENABLE; in snd_emu10k1_capture_mic_open()
1235 epcm->capture_ba_reg = MICBA; in snd_emu10k1_capture_mic_open()
1236 epcm->capture_bs_reg = MICBS; in snd_emu10k1_capture_mic_open()
1237 epcm->capture_idx_reg = emu->audigy ? A_MICIDX : MICIDX; in snd_emu10k1_capture_mic_open()
1238 substream->runtime->private_data = epcm; in snd_emu10k1_capture_mic_open()
1262 struct snd_emu10k1_pcm *epcm; in snd_emu10k1_capture_efx_open() local
1267 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); in snd_emu10k1_capture_efx_open()
1268 if (epcm == NULL) in snd_emu10k1_capture_efx_open()
1270 epcm->emu = emu; in snd_emu10k1_capture_efx_open()
1271 epcm->type = CAPTURE_EFX; in snd_emu10k1_capture_efx_open()
1272 epcm->substream = substream; in snd_emu10k1_capture_efx_open()
1273 epcm->capture_ipr = IPR_EFXBUFFULL|IPR_EFXBUFHALFFULL; in snd_emu10k1_capture_efx_open()
1274 epcm->capture_inte = INTE_EFXBUFENABLE; in snd_emu10k1_capture_efx_open()
1275 epcm->capture_ba_reg = FXBA; in snd_emu10k1_capture_efx_open()
1276 epcm->capture_bs_reg = FXBS; in snd_emu10k1_capture_efx_open()
1277 epcm->capture_idx_reg = FXIDX; in snd_emu10k1_capture_efx_open()
1278 substream->runtime->private_data = epcm; in snd_emu10k1_capture_efx_open()
1349 epcm->capture_cr_val = emu->efx_voices_mask[0]; in snd_emu10k1_capture_efx_open()
1350 epcm->capture_cr_val2 = emu->efx_voices_mask[1]; in snd_emu10k1_capture_efx_open()