Lines Matching refs:epcm

23 	struct snd_emu10k1_pcm *epcm;
25 epcm = voice->epcm;
26 if (!epcm)
28 if (epcm->substream == NULL)
33 epcm->substream->runtime->hw->pointer(emu, epcm->substream),
34 snd_pcm_lib_period_bytes(epcm->substream),
35 snd_pcm_lib_buffer_bytes(epcm->substream));
37 snd_pcm_period_elapsed(epcm->substream);
76 static void snd_emu10k1_pcm_free_voices(struct snd_emu10k1_pcm *epcm)
78 for (unsigned i = 0; i < ARRAY_SIZE(epcm->voices); i++) {
79 if (epcm->voices[i]) {
80 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]);
81 epcm->voices[i] = NULL;
86 static int snd_emu10k1_pcm_channel_alloc(struct snd_emu10k1_pcm *epcm,
91 snd_emu10k1_pcm_free_voices(epcm);
93 err = snd_emu10k1_voice_alloc(epcm->emu,
95 epcm, &epcm->voices[0]);
99 if (epcm->extra == NULL) {
104 err = snd_emu10k1_voice_alloc(epcm->emu,
106 epcm, &epcm->extra);
113 snd_emu10k1_pcm_free_voices(epcm);
116 epcm->extra->interrupt = snd_emu10k1_pcm_interrupt;
304 CCCA, emu10k1_select_interprom(evoice->epcm->pitch_target) |
375 struct snd_emu10k1_pcm *epcm = runtime->private_data;
380 if (epcm->type == PLAYBACK_EMUVOICE) {
389 err = snd_emu10k1_pcm_channel_alloc(epcm, type, count, channels);
403 if (epcm->memblk != NULL)
404 snd_emu10k1_free_pages(emu, epcm->memblk);
405 epcm->memblk = snd_emu10k1_alloc_pages(emu, substream);
406 epcm->start_addr = 0;
407 if (! epcm->memblk)
409 mapped = ((struct snd_emu10k1_memblk *)epcm->memblk)->mapped_page;
412 epcm->start_addr = mapped << PAGE_SHIFT;
421 struct snd_emu10k1_pcm *epcm;
425 epcm = runtime->private_data;
426 if (epcm->extra) {
427 snd_emu10k1_voice_free(epcm->emu, epcm->extra);
428 epcm->extra = NULL;
430 snd_emu10k1_pcm_free_voices(epcm);
431 if (epcm->memblk) {
432 snd_emu10k1_free_pages(emu, epcm->memblk);
433 epcm->memblk = NULL;
434 epcm->start_addr = 0;
444 struct snd_emu10k1_pcm *epcm = runtime->private_data;
454 epcm->pitch_target = emu10k1_calc_pitch_target(rate);
456 start_addr = epcm->start_addr >> w_16;
458 snd_emu10k1_pcm_init_extra_voice(emu, epcm->extra, w_16,
461 epcm->ccca_start_addr = start_addr;
463 snd_emu10k1_pcm_init_voices(emu, epcm->voices[0], w_16, stereo,
474 struct snd_emu10k1_pcm *epcm = runtime->private_data;
479 epcm->pitch_target = PITCH_48000;
481 start_addr = epcm->start_addr >> 1; // 16-bit voices
486 snd_emu10k1_pcm_init_extra_voice(emu, epcm->extra, true,
489 epcm->ccca_start_addr = start_addr;
491 snd_emu10k1_pcm_init_voices(emu, epcm->voices[i], true, false,
523 struct snd_emu10k1_pcm *epcm = runtime->private_data;
527 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0);
528 switch (epcm->type) {
536 epcm->capture_cr_val = 0;
537 epcm->capture_cr_val2 = 0xffffffff >> (32 - runtime->channels * 2);
550 snd_emu10k1_ptr_write(emu, epcm->capture_ba_reg, 0, runtime->dma_addr);
551 epcm->capture_bufsize = snd_pcm_lib_buffer_bytes(substream);
552 epcm->capture_bs_val = 0;
554 if (capture_buffer_sizes[idx] == epcm->capture_bufsize) {
555 epcm->capture_bs_val = idx + 1;
559 if (epcm->capture_bs_val == 0) {
561 epcm->capture_bs_val++;
563 if (epcm->type == CAPTURE_AC97ADC) {
568 epcm->capture_cr_val = emu->audigy ? A_ADCCR_LCHANENABLE : ADCCR_LCHANENABLE;
570 epcm->capture_cr_val |= emu->audigy ? A_ADCCR_RCHANENABLE : ADCCR_RCHANENABLE;
571 epcm->capture_cr_val |= emu->audigy ?
603 struct snd_emu10k1_pcm *epcm,
607 struct snd_pcm_substream *substream = epcm->substream;
609 unsigned eloop_start = epcm->start_addr >> w_16;
619 loop_start += (epcm->resume_pos + 64 - 3) % loop_size;
621 unsigned voice = epcm->voices[i]->number;
643 eloop_start += (epcm->resume_pos + eloop_size - 3) % eloop_size;
644 snd_emu10k1_ptr_write(emu, CCCA_CURRADDR, epcm->extra->number, eloop_start);
715 snd_emu10k1_playback_commit_pitch(emu, voice, evoice->epcm->pitch_target << 16);
728 struct snd_emu10k1_pcm *epcm)
730 epcm->running = 1;
731 snd_emu10k1_voice_intr_enable(emu, epcm->extra->number);
735 struct snd_emu10k1_pcm *epcm)
737 snd_emu10k1_voice_intr_disable(emu, epcm->extra->number);
738 epcm->running = 0;
746 struct snd_emu10k1_pcm *epcm = runtime->private_data;
760 snd_emu10k1_playback_prepare_voices(emu, epcm, w_16, stereo, 1);
765 snd_emu10k1_playback_unmute_voices(emu, epcm->voices[0], stereo, mix);
766 snd_emu10k1_playback_set_running(emu, epcm);
767 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[0]);
768 snd_emu10k1_playback_trigger_voice(emu, epcm->extra);
773 snd_emu10k1_playback_stop_voice(emu, epcm->voices[0]);
774 snd_emu10k1_playback_stop_voice(emu, epcm->extra);
775 snd_emu10k1_playback_set_stopped(emu, epcm);
776 snd_emu10k1_playback_mute_voices(emu, epcm->voices[0], stereo);
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);
812 A_FXWC1, epcm->capture_cr_val,
813 A_FXWC2, epcm->capture_cr_val2,
817 epcm->capture_cr_val,
818 epcm->capture_cr_val2);
820 snd_emu10k1_ptr_write(emu, FXWC, 0, epcm->capture_cr_val);
825 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, epcm->capture_bs_val);
826 epcm->running = 1;
827 epcm->first_ptr = 1;
831 epcm->running = 0;
832 snd_emu10k1_intr_disable(emu, epcm->capture_inte);
833 outl(epcm->capture_ipr, emu->port + IPR);
834 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0);
835 switch (epcm->type) {
863 struct snd_emu10k1_pcm *epcm = runtime->private_data;
866 if (!epcm->running)
869 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff;
870 ptr -= epcm->ccca_start_addr;
894 static u64 snd_emu10k1_efx_playback_voice_mask(struct snd_emu10k1_pcm *epcm,
900 int voice = epcm->voices[i]->number;
907 struct snd_emu10k1_pcm *epcm,
911 int voice = epcm->voices[i]->number;
918 struct snd_emu10k1_pcm *epcm,
922 snd_emu10k1_playback_unmute_voice(emu, epcm->voices[i], false, true,
927 struct snd_emu10k1_pcm *epcm,
931 snd_emu10k1_playback_stop_voice(emu, epcm->voices[i]);
932 snd_emu10k1_playback_set_stopped(emu, epcm);
935 snd_emu10k1_playback_mute_voice(emu, epcm->voices[i]);
943 struct snd_emu10k1_pcm *epcm = runtime->private_data;
953 epcm, runtime->channels);
959 emu, epcm, runtime->channels);
961 emu, epcm, true, false, runtime->channels);
967 snd_emu10k1_efx_playback_unmute_voices(emu, epcm, runtime->channels);
969 snd_emu10k1_playback_set_running(emu, epcm);
973 snd_emu10k1_playback_trigger_voice(emu, epcm->extra);
978 emu, epcm, runtime->channels);
989 snd_emu10k1_playback_stop_voice(emu, epcm->extra);
991 emu, epcm, runtime->channels);
993 epcm->resume_pos = snd_emu10k1_playback_pointer(substream);
1009 struct snd_emu10k1_pcm *epcm = runtime->private_data;
1012 if (!epcm->running)
1014 if (epcm->first_ptr) {
1016 epcm->first_ptr = 0;
1018 ptr = snd_emu10k1_ptr_read(emu, epcm->capture_idx_reg, 0) & 0x0000ffff;
1135 mix->epcm = NULL;
1160 struct snd_emu10k1_pcm *epcm;
1165 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
1166 if (epcm == NULL)
1168 epcm->emu = emu;
1169 epcm->type = PLAYBACK_EFX;
1170 epcm->substream = substream;
1172 runtime->private_data = epcm;
1179 kfree(epcm);
1190 mix->epcm = epcm;
1199 struct snd_emu10k1_pcm *epcm;
1204 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
1205 if (epcm == NULL)
1207 epcm->emu = emu;
1208 epcm->type = PLAYBACK_EMUVOICE;
1209 epcm->substream = substream;
1210 runtime->private_data = epcm;
1215 kfree(epcm);
1224 kfree(epcm);
1234 mix->epcm = epcm;
1244 mix->epcm = NULL;
1253 struct snd_emu10k1_pcm *epcm;
1255 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
1256 if (epcm == NULL)
1258 epcm->emu = emu;
1259 epcm->type = CAPTURE_AC97ADC;
1260 epcm->substream = substream;
1261 epcm->capture_ipr = IPR_ADCBUFFULL|IPR_ADCBUFHALFFULL;
1262 epcm->capture_inte = INTE_ADCBUFENABLE;
1263 epcm->capture_ba_reg = ADCBA;
1264 epcm->capture_bs_reg = ADCBS;
1265 epcm->capture_idx_reg = emu->audigy ? A_ADCIDX : ADCIDX;
1266 runtime->private_data = epcm;
1289 struct snd_emu10k1_pcm *epcm;
1292 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
1293 if (epcm == NULL)
1295 epcm->emu = emu;
1296 epcm->type = CAPTURE_AC97MIC;
1297 epcm->substream = substream;
1298 epcm->capture_ipr = IPR_MICBUFFULL|IPR_MICBUFHALFFULL;
1299 epcm->capture_inte = INTE_MICBUFENABLE;
1300 epcm->capture_ba_reg = MICBA;
1301 epcm->capture_bs_reg = MICBS;
1302 epcm->capture_idx_reg = emu->audigy ? A_MICIDX : MICIDX;
1303 substream->runtime->private_data = epcm;
1327 struct snd_emu10k1_pcm *epcm;
1332 epcm = kzalloc(sizeof(*epcm), GFP_KERNEL);
1333 if (epcm == NULL)
1335 epcm->emu = emu;
1336 epcm->type = CAPTURE_EFX;
1337 epcm->substream = substream;
1338 epcm->capture_ipr = IPR_EFXBUFFULL|IPR_EFXBUFHALFFULL;
1339 epcm->capture_inte = INTE_EFXBUFENABLE;
1340 epcm->capture_ba_reg = FXBA;
1341 epcm->capture_bs_reg = FXBS;
1342 epcm->capture_idx_reg = FXIDX;
1343 substream->runtime->private_data = epcm;
1377 epcm->capture_cr_val = emu->efx_voices_mask[0];
1378 epcm->capture_cr_val2 = emu->efx_voices_mask[1];
1384 kfree(epcm);