Lines Matching defs:epcm

26 	struct snd_emu10k1_pcm *epcm;
28 if ((epcm = voice->epcm) == NULL)
30 if (epcm->substream == NULL)
35 epcm->substream->runtime->hw->pointer(emu, epcm->substream),
36 snd_pcm_lib_period_bytes(epcm->substream),
37 snd_pcm_lib_buffer_bytes(epcm->substream));
39 snd_pcm_period_elapsed(epcm->substream);
82 struct snd_emu10k1_pcm *epcm = runtime->private_data;
85 if (!epcm->running)
87 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff;
89 ptr -= epcm->ccca_start_addr;
95 static int snd_emu10k1_pcm_channel_alloc(struct snd_emu10k1_pcm * epcm, int voices)
99 if (epcm->voices[1] != NULL && voices < 2) {
100 snd_emu10k1_voice_free(epcm->emu, epcm->voices[1]);
101 epcm->voices[1] = NULL;
104 if (epcm->voices[i] == NULL)
110 for (i = 0; i < ARRAY_SIZE(epcm->voices); i++) {
111 if (epcm->voices[i]) {
112 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]);
113 epcm->voices[i] = NULL;
116 err = snd_emu10k1_voice_alloc(epcm->emu,
117 epcm->type == PLAYBACK_EMUVOICE ? EMU10K1_PCM : EMU10K1_EFX,
119 &epcm->voices[0]);
123 epcm->voices[0]->epcm = epcm;
126 epcm->voices[i] = &epcm->emu->voices[(epcm->voices[0]->number + i) % NUM_G];
127 epcm->voices[i]->epcm = epcm;
130 if (epcm->extra == NULL) {
131 err = snd_emu10k1_voice_alloc(epcm->emu,
132 epcm->type == PLAYBACK_EMUVOICE ? EMU10K1_PCM : EMU10K1_EFX,
134 &epcm->extra);
142 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]);
143 epcm->voices[i] = NULL;
147 epcm->extra->epcm = epcm;
148 epcm->extra->interrupt = snd_emu10k1_pcm_interrupt;
275 struct snd_pcm_substream *substream = evoice->epcm->substream;
318 evoice->epcm->ccca_start_addr = start_addr + ccis;
398 struct snd_emu10k1_pcm *epcm = runtime->private_data;
402 if ((err = snd_emu10k1_pcm_channel_alloc(epcm, params_channels(hw_params))) < 0)
415 if (epcm->memblk != NULL)
416 snd_emu10k1_free_pages(emu, epcm->memblk);
417 epcm->memblk = snd_emu10k1_alloc_pages(emu, substream);
418 epcm->start_addr = 0;
419 if (! epcm->memblk)
421 mapped = ((struct snd_emu10k1_memblk *)epcm->memblk)->mapped_page;
424 epcm->start_addr = mapped << PAGE_SHIFT;
433 struct snd_emu10k1_pcm *epcm;
437 epcm = runtime->private_data;
438 if (epcm->extra) {
439 snd_emu10k1_voice_free(epcm->emu, epcm->extra);
440 epcm->extra = NULL;
442 if (epcm->voices[1]) {
443 snd_emu10k1_voice_free(epcm->emu, epcm->voices[1]);
444 epcm->voices[1] = NULL;
446 if (epcm->voices[0]) {
447 snd_emu10k1_voice_free(epcm->emu, epcm->voices[0]);
448 epcm->voices[0] = NULL;
450 if (epcm->memblk) {
451 snd_emu10k1_free_pages(emu, epcm->memblk);
452 epcm->memblk = NULL;
453 epcm->start_addr = 0;
463 struct snd_emu10k1_pcm *epcm;
468 epcm = runtime->private_data;
469 if (epcm->extra) {
470 snd_emu10k1_voice_free(epcm->emu, epcm->extra);
471 epcm->extra = NULL;
474 if (epcm->voices[i]) {
475 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]);
476 epcm->voices[i] = NULL;
479 if (epcm->memblk) {
480 snd_emu10k1_free_pages(emu, epcm->memblk);
481 epcm->memblk = NULL;
482 epcm->start_addr = 0;
492 struct snd_emu10k1_pcm *epcm = runtime->private_data;
495 start_addr = epcm->start_addr;
502 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra,
504 start_addr = epcm->start_addr;
505 end_addr = epcm->start_addr + snd_pcm_lib_buffer_bytes(substream);
506 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0],
509 if (epcm->voices[1])
510 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[1],
520 struct snd_emu10k1_pcm *epcm = runtime->private_data;
525 start_addr = epcm->start_addr;
526 end_addr = epcm->start_addr + snd_pcm_lib_buffer_bytes(substream);
533 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra,
537 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0],
543 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[i],
576 struct snd_emu10k1_pcm *epcm = runtime->private_data;
580 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0);
581 switch (epcm->type) {
595 snd_emu10k1_ptr_write(emu, epcm->capture_ba_reg, 0, runtime->dma_addr);
596 epcm->capture_bufsize = snd_pcm_lib_buffer_bytes(substream);
597 epcm->capture_bs_val = 0;
599 if (capture_period_sizes[idx] == epcm->capture_bufsize) {
600 epcm->capture_bs_val = idx + 1;
604 if (epcm->capture_bs_val == 0) {
606 epcm->capture_bs_val++;
608 if (epcm->type == CAPTURE_AC97ADC) {
609 epcm->capture_cr_val = emu->audigy ? A_ADCCR_LCHANENABLE : ADCCR_LCHANENABLE;
611 epcm->capture_cr_val |= emu->audigy ? A_ADCCR_RCHANENABLE : ADCCR_RCHANENABLE;
612 epcm->capture_cr_val |= emu->audigy ?
626 runtime = evoice->epcm->substream->runtime;
665 substream = evoice->epcm->substream;
687 substream = evoice->epcm->substream;
697 if (master || evoice->epcm->type == PLAYBACK_EFX)
721 struct snd_emu10k1_pcm *epcm,
731 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->extra->number);
733 ptr |= epcm->ccca_start_addr + period_pos;
734 snd_emu10k1_ptr_write(emu, CCCA, epcm->extra->number, ptr);
742 struct snd_emu10k1_pcm *epcm = runtime->private_data;
754 snd_emu10k1_playback_invalidate_cache(emu, 1, epcm->extra); /* do we need this? */
755 snd_emu10k1_playback_invalidate_cache(emu, 0, epcm->voices[0]);
760 snd_emu10k1_playback_mangle_extra(emu, epcm, substream, runtime);
762 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[0], 1, 0, mix);
763 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[1], 0, 0, mix);
764 snd_emu10k1_playback_prepare_voice(emu, epcm->extra, 1, 1, NULL);
765 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[0], 1, 0);
766 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[1], 0, 0);
767 snd_emu10k1_playback_trigger_voice(emu, epcm->extra, 1, 1);
768 epcm->running = 1;
773 epcm->running = 0;
774 snd_emu10k1_playback_stop_voice(emu, epcm->voices[0]);
775 snd_emu10k1_playback_stop_voice(emu, epcm->voices[1]);
776 snd_emu10k1_playback_stop_voice(emu, epcm->extra);
791 struct snd_emu10k1_pcm *epcm = runtime->private_data;
799 outl(epcm->capture_ipr, emu->port + IPR);
800 snd_emu10k1_intr_enable(emu, epcm->capture_inte);
803 epcm->adccr, epcm->adcbs);
805 switch (epcm->type) {
807 snd_emu10k1_ptr_write(emu, ADCCR, 0, epcm->capture_cr_val);
811 snd_emu10k1_ptr_write(emu, A_FXWC1, 0, epcm->capture_cr_val);
812 snd_emu10k1_ptr_write(emu, A_FXWC2, 0, epcm->capture_cr_val2);
815 epcm->capture_cr_val,
816 epcm->capture_cr_val2);
818 snd_emu10k1_ptr_write(emu, FXWC, 0, epcm->capture_cr_val);
823 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, epcm->capture_bs_val);
824 epcm->running = 1;
825 epcm->first_ptr = 1;
829 epcm->running = 0;
830 snd_emu10k1_intr_disable(emu, epcm->capture_inte);
831 outl(epcm->capture_ipr, emu->port + IPR);
832 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0);
833 switch (epcm->type) {
859 struct snd_emu10k1_pcm *epcm = runtime->private_data;
862 if (!epcm->running)
864 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff;
867 ptr -= epcm->ccca_start_addr;
870 if (ptr < epcm->ccca_start_addr)
871 ptr += runtime->buffer_size - epcm->ccca_start_addr;
873 ptr -= epcm->ccca_start_addr;
893 struct snd_emu10k1_pcm *epcm = runtime->private_data;
902 snd_emu10k1_playback_invalidate_cache(emu, 0, epcm->voices[i]);
904 snd_emu10k1_playback_invalidate_cache(emu, 1, epcm->extra);
908 snd_emu10k1_playback_prepare_voice(emu, epcm->extra, 1, 1, NULL);
909 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[0], 0, 0,
912 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[i], 0, 0,
914 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[0], 0, 0);
915 snd_emu10k1_playback_trigger_voice(emu, epcm->extra, 1, 1);
917 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[i], 0, 0);
918 epcm->running = 1;
923 epcm->running = 0;
925 snd_emu10k1_playback_stop_voice(emu, epcm->voices[i]);
927 snd_emu10k1_playback_stop_voice(emu, epcm->extra);
942 struct snd_emu10k1_pcm *epcm = runtime->private_data;
945 if (!epcm->running)
947 if (epcm->first_ptr) {
949 epcm->first_ptr = 0;
951 ptr = snd_emu10k1_ptr_read(emu, epcm->capture_idx_reg, 0) & 0x0000ffff;
1071 mix->epcm = NULL;
1080 struct snd_emu10k1_pcm *epcm;
1085 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
1086 if (epcm == NULL)
1088 epcm->emu = emu;
1089 epcm->type = PLAYBACK_EFX;
1090 epcm->substream = substream;
1094 runtime->private_data = epcm;
1104 mix->epcm = epcm;
1113 struct snd_emu10k1_pcm *epcm;
1118 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
1119 if (epcm == NULL)
1121 epcm->emu = emu;
1122 epcm->type = PLAYBACK_EMUVOICE;
1123 epcm->substream = substream;
1124 runtime->private_data = epcm;
1128 kfree(epcm);
1132 kfree(epcm);
1141 kfree(epcm);
1151 mix->epcm = epcm;
1161 mix->epcm = NULL;
1170 struct snd_emu10k1_pcm *epcm;
1172 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
1173 if (epcm == NULL)
1175 epcm->emu = emu;
1176 epcm->type = CAPTURE_AC97ADC;
1177 epcm->substream = substream;
1178 epcm->capture_ipr = IPR_ADCBUFFULL|IPR_ADCBUFHALFFULL;
1179 epcm->capture_inte = INTE_ADCBUFENABLE;
1180 epcm->capture_ba_reg = ADCBA;
1181 epcm->capture_bs_reg = ADCBS;
1182 epcm->capture_idx_reg = emu->audigy ? A_ADCIDX : ADCIDX;
1183 runtime->private_data = epcm;
1205 struct snd_emu10k1_pcm *epcm;
1208 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
1209 if (epcm == NULL)
1211 epcm->emu = emu;
1212 epcm->type = CAPTURE_AC97MIC;
1213 epcm->substream = substream;
1214 epcm->capture_ipr = IPR_MICBUFFULL|IPR_MICBUFHALFFULL;
1215 epcm->capture_inte = INTE_MICBUFENABLE;
1216 epcm->capture_ba_reg = MICBA;
1217 epcm->capture_bs_reg = MICBS;
1218 epcm->capture_idx_reg = emu->audigy ? A_MICIDX : MICIDX;
1219 substream->runtime->private_data = epcm;
1243 struct snd_emu10k1_pcm *epcm;
1248 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
1249 if (epcm == NULL)
1251 epcm->emu = emu;
1252 epcm->type = CAPTURE_EFX;
1253 epcm->substream = substream;
1254 epcm->capture_ipr = IPR_EFXBUFFULL|IPR_EFXBUFHALFFULL;
1255 epcm->capture_inte = INTE_EFXBUFENABLE;
1256 epcm->capture_ba_reg = FXBA;
1257 epcm->capture_bs_reg = FXBS;
1258 epcm->capture_idx_reg = FXIDX;
1259 substream->runtime->private_data = epcm;
1330 epcm->capture_cr_val = emu->efx_voices_mask[0];
1331 epcm->capture_cr_val2 = emu->efx_voices_mask[1];