Lines Matching refs:emu
23 static void snd_emu10k1_pcm_interrupt(struct snd_emu10k1 *emu,
33 dev_dbg(emu->card->dev,
35 epcm->substream->runtime->hw->pointer(emu, epcm->substream),
42 static void snd_emu10k1_pcm_ac97adc_interrupt(struct snd_emu10k1 *emu,
47 if (emu->pcm_capture_substream->runtime->mode == SNDRV_PCM_MODE_FRAME)
51 snd_pcm_period_elapsed(emu->pcm_capture_substream);
54 static void snd_emu10k1_pcm_ac97mic_interrupt(struct snd_emu10k1 *emu,
59 if (emu->pcm_capture_mic_substream->runtime->mode == SNDRV_PCM_MODE_FRAME)
63 snd_pcm_period_elapsed(emu->pcm_capture_mic_substream);
66 static void snd_emu10k1_pcm_efx_interrupt(struct snd_emu10k1 *emu,
71 if (emu->pcm_capture_efx_substream->runtime->mode == SNDRV_PCM_MODE_FRAME)
75 snd_pcm_period_elapsed(emu->pcm_capture_efx_substream);
80 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
87 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff;
100 snd_emu10k1_voice_free(epcm->emu, epcm->voices[1]);
112 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]);
116 err = snd_emu10k1_voice_alloc(epcm->emu,
126 epcm->voices[i] = &epcm->emu->voices[(epcm->voices[0]->number + i) % NUM_G];
131 err = snd_emu10k1_voice_alloc(epcm->emu,
137 dev_dbg(emu->card->dev, "pcm_channel_alloc: "
142 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]);
268 static void snd_emu10k1_pcm_init_voice(struct snd_emu10k1 *emu,
298 spin_lock_irqsave(&emu->reg_lock, flags);
321 end_addr += ccis + emu->delay_pcm_irq;
324 snd_emu10k1_ptr_write(emu, CPF, voice, CPF_STEREO_MASK);
325 snd_emu10k1_ptr_write(emu, CPF, (voice + 1), CPF_STEREO_MASK);
327 snd_emu10k1_ptr_write(emu, CPF, voice, 0);
332 if (emu->audigy) {
333 snd_emu10k1_ptr_write(emu, A_FXRT1, voice,
335 snd_emu10k1_ptr_write(emu, A_FXRT2, voice,
337 snd_emu10k1_ptr_write(emu, A_SENDAMOUNTS, voice,
343 snd_emu10k1_ptr_write(emu, FXRT, voice,
347 snd_emu10k1_ptr_write(emu, PTRX, voice, (send_amount[0] << 8) | send_amount[1]);
348 snd_emu10k1_ptr_write(emu, DSL, voice, end_addr | (send_amount[3] << 24));
349 snd_emu10k1_ptr_write(emu, PSST, voice,
350 (start_addr + (extra ? emu->delay_pcm_irq : 0)) |
352 if (emu->card_capabilities->emu_model)
357 snd_emu10k1_ptr_write(emu, CCCA, voice, start_addr |
361 snd_emu10k1_ptr_write(emu, CCCA, voice, (start_addr + ccis) |
365 snd_emu10k1_ptr_write(emu, Z1, voice, 0);
366 snd_emu10k1_ptr_write(emu, Z2, voice, 0);
368 silent_page = ((unsigned int)emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
369 snd_emu10k1_ptr_write(emu, MAPA, voice, silent_page);
370 snd_emu10k1_ptr_write(emu, MAPB, voice, silent_page);
372 snd_emu10k1_ptr_write(emu, CVCF, voice, 0xffff);
373 snd_emu10k1_ptr_write(emu, VTFT, voice, 0xffff);
374 snd_emu10k1_ptr_write(emu, ATKHLDM, voice, 0);
375 snd_emu10k1_ptr_write(emu, DCYSUSM, voice, 0x007f);
376 snd_emu10k1_ptr_write(emu, LFOVAL1, voice, 0x8000);
377 snd_emu10k1_ptr_write(emu, LFOVAL2, voice, 0x8000);
378 snd_emu10k1_ptr_write(emu, FMMOD, voice, 0);
379 snd_emu10k1_ptr_write(emu, TREMFRQ, voice, 0);
380 snd_emu10k1_ptr_write(emu, FM2FRQ2, voice, 0);
381 snd_emu10k1_ptr_write(emu, ENVVAL, voice, 0x8000);
383 snd_emu10k1_ptr_write(emu, ATKHLDV, voice, 0x7f7f);
384 snd_emu10k1_ptr_write(emu, ENVVOL, voice, 0x0000);
386 snd_emu10k1_ptr_write(emu, PEFE_FILTERAMOUNT, voice, 0x7f);
388 snd_emu10k1_ptr_write(emu, PEFE_PITCHAMOUNT, voice, 0);
390 spin_unlock_irqrestore(&emu->reg_lock, flags);
396 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
406 if (emu->iommu_workaround)
411 if (emu->iommu_workaround && runtime->dma_bytes >= EMUPAGESIZE)
416 snd_emu10k1_free_pages(emu, epcm->memblk);
417 epcm->memblk = snd_emu10k1_alloc_pages(emu, substream);
431 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
439 snd_emu10k1_voice_free(epcm->emu, epcm->extra);
443 snd_emu10k1_voice_free(epcm->emu, epcm->voices[1]);
447 snd_emu10k1_voice_free(epcm->emu, epcm->voices[0]);
451 snd_emu10k1_free_pages(emu, epcm->memblk);
461 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
470 snd_emu10k1_voice_free(epcm->emu, epcm->extra);
475 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]);
480 snd_emu10k1_free_pages(emu, epcm->memblk);
490 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
502 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra,
506 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0],
508 &emu->pcm_mixer[substream->number]);
510 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[1],
512 &emu->pcm_mixer[substream->number]);
518 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
533 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra,
537 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0],
539 &emu->efx_pcm_mixer[0]);
543 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[i],
545 &emu->efx_pcm_mixer[i]);
574 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
580 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0);
583 snd_emu10k1_ptr_write(emu, ADCCR, 0, 0);
586 if (emu->audigy) {
587 snd_emu10k1_ptr_write(emu, A_FXWC1, 0, 0);
588 snd_emu10k1_ptr_write(emu, A_FXWC2, 0, 0);
590 snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
595 snd_emu10k1_ptr_write(emu, epcm->capture_ba_reg, 0, runtime->dma_addr);
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 ?
619 static void snd_emu10k1_playback_invalidate_cache(struct snd_emu10k1 *emu, int extra, struct snd_emu10k1_voice *evoice)
635 snd_emu10k1_ptr_write(emu, CD0 + i, voice, sample);
637 snd_emu10k1_ptr_write(emu, CD0 + i, voice + 1, sample);
641 snd_emu10k1_ptr_write(emu, CCR_CACHEINVALIDSIZE, voice, 0);
642 snd_emu10k1_ptr_write(emu, CCR_READADDRESS, voice, cra);
644 snd_emu10k1_ptr_write(emu, CCR_CACHEINVALIDSIZE, voice + 1, 0);
645 snd_emu10k1_ptr_write(emu, CCR_READADDRESS, voice + 1, cra);
648 snd_emu10k1_ptr_write(emu, CCR_CACHEINVALIDSIZE, voice, ccis);
650 snd_emu10k1_ptr_write(emu, CCR_CACHEINVALIDSIZE, voice+1, ccis);
654 static void snd_emu10k1_playback_prepare_voice(struct snd_emu10k1 *emu, struct snd_emu10k1_voice *evoice,
672 snd_emu10k1_ptr_write(emu, IFATN, voice, attn);
673 snd_emu10k1_ptr_write(emu, VTFT, voice, vattn | 0xffff);
674 snd_emu10k1_ptr_write(emu, CVCF, voice, vattn | 0xffff);
675 snd_emu10k1_ptr_write(emu, DCYSUSV, voice, 0x7f7f);
676 snd_emu10k1_voice_clear_loop_stop(emu, voice);
679 static void snd_emu10k1_playback_trigger_voice(struct snd_emu10k1 *emu, struct snd_emu10k1_voice *evoice, int master, int extra)
692 if (emu->card_capabilities->emu_model)
696 snd_emu10k1_ptr_write(emu, PTRX_PITCHTARGET, voice, pitch_target);
698 snd_emu10k1_ptr_write(emu, CPF_CURRENTPITCH, voice, pitch_target);
699 snd_emu10k1_ptr_write(emu, IP, voice, pitch);
701 snd_emu10k1_voice_intr_enable(emu, voice);
704 static void snd_emu10k1_playback_stop_voice(struct snd_emu10k1 *emu, struct snd_emu10k1_voice *evoice)
711 snd_emu10k1_voice_intr_disable(emu, voice);
712 snd_emu10k1_ptr_write(emu, PTRX_PITCHTARGET, voice, 0);
713 snd_emu10k1_ptr_write(emu, CPF_CURRENTPITCH, voice, 0);
714 snd_emu10k1_ptr_write(emu, IFATN, voice, 0xffff);
715 snd_emu10k1_ptr_write(emu, VTFT, voice, 0xffff);
716 snd_emu10k1_ptr_write(emu, CVCF, voice, 0xffff);
717 snd_emu10k1_ptr_write(emu, IP, voice, 0);
720 static inline void snd_emu10k1_playback_mangle_extra(struct snd_emu10k1 *emu,
731 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->extra->number);
734 snd_emu10k1_ptr_write(emu, CCCA, epcm->extra->number, ptr);
740 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
747 dev_dbg(emu->card->dev,
749 (int)emu, cmd, substream->ops->pointer(substream))
751 spin_lock(&emu->reg_lock);
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);
761 mix = &emu->pcm_mixer[substream->number];
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);
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);
782 spin_unlock(&emu->reg_lock);
789 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
794 spin_lock(&emu->reg_lock);
799 outl(epcm->capture_ipr, emu->port + IPR);
800 snd_emu10k1_intr_enable(emu, epcm->capture_inte);
802 dev_dbg(emu->card->dev, "adccr = 0x%x, adcbs = 0x%x\n",
807 snd_emu10k1_ptr_write(emu, ADCCR, 0, epcm->capture_cr_val);
810 if (emu->audigy) {
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);
813 dev_dbg(emu->card->dev,
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);
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);
835 snd_emu10k1_ptr_write(emu, ADCCR, 0, 0);
838 if (emu->audigy) {
839 snd_emu10k1_ptr_write(emu, A_FXWC1, 0, 0);
840 snd_emu10k1_ptr_write(emu, A_FXWC2, 0, 0);
842 snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
851 spin_unlock(&emu->reg_lock);
857 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
864 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff;
879 dev_dbg(emu->card->dev,
891 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
897 spin_lock(&emu->reg_lock);
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,
910 &emu->efx_pcm_mixer[0]);
912 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[i], 0, 0,
913 &emu->efx_pcm_mixer[i]);
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);
925 snd_emu10k1_playback_stop_voice(emu, epcm->voices[i]);
927 snd_emu10k1_playback_stop_voice(emu, epcm->extra);
933 spin_unlock(&emu->reg_lock);
940 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
951 ptr = snd_emu10k1_ptr_read(emu, epcm->capture_idx_reg, 0) & 0x0000ffff;
1029 static void snd_emu10k1_pcm_mixer_notify1(struct snd_emu10k1 *emu, struct snd_kcontrol *kctl, int idx, int activate)
1039 snd_ctl_notify(emu->card, SNDRV_CTL_EVENT_MASK_VALUE |
1044 static void snd_emu10k1_pcm_mixer_notify(struct snd_emu10k1 *emu, int idx, int activate)
1046 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_send_routing, idx, activate);
1047 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_send_volume, idx, activate);
1048 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_attn, idx, activate);
1051 static void snd_emu10k1_pcm_efx_mixer_notify(struct snd_emu10k1 *emu, int idx, int activate)
1053 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_efx_send_routing, idx, activate);
1054 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_efx_send_volume, idx, activate);
1055 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_efx_attn, idx, activate);
1065 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1070 mix = &emu->efx_pcm_mixer[i];
1072 snd_emu10k1_pcm_efx_mixer_notify(emu, i, 0);
1079 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1088 epcm->emu = emu;
1092 emu->pcm_playback_efx_substream = substream;
1099 mix = &emu->efx_pcm_mixer[i];
1105 snd_emu10k1_pcm_efx_mixer_notify(emu, i, 1);
1112 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1121 epcm->emu = emu;
1135 if (emu->card_capabilities->emu_model && emu->emu1010.internal_clock == 0)
1144 mix = &emu->pcm_mixer[substream->number];
1152 snd_emu10k1_pcm_mixer_notify(emu, substream->number, 1);
1158 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1159 struct snd_emu10k1_pcm_mixer *mix = &emu->pcm_mixer[substream->number];
1162 snd_emu10k1_pcm_mixer_notify(emu, substream->number, 0);
1168 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1175 epcm->emu = emu;
1182 epcm->capture_idx_reg = emu->audigy ? A_ADCIDX : ADCIDX;
1186 emu->capture_interrupt = snd_emu10k1_pcm_ac97adc_interrupt;
1187 emu->pcm_capture_substream = substream;
1195 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1197 emu->capture_interrupt = NULL;
1198 emu->pcm_capture_substream = NULL;
1204 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1211 epcm->emu = emu;
1218 epcm->capture_idx_reg = emu->audigy ? A_MICIDX : MICIDX;
1225 emu->capture_mic_interrupt = snd_emu10k1_pcm_ac97mic_interrupt;
1226 emu->pcm_capture_mic_substream = substream;
1233 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1235 emu->capture_mic_interrupt = NULL;
1236 emu->pcm_capture_mic_substream = NULL;
1242 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1245 int nefx = emu->audigy ? 64 : 32;
1251 epcm->emu = emu;
1264 spin_lock_irq(&emu->reg_lock);
1265 if (emu->card_capabilities->emu_model) {
1288 switch (emu->emu1010.internal_clock) {
1324 if (emu->efx_voices_mask[idx/32] & (1 << (idx%32))) {
1330 epcm->capture_cr_val = emu->efx_voices_mask[0];
1331 epcm->capture_cr_val2 = emu->efx_voices_mask[1];
1332 spin_unlock_irq(&emu->reg_lock);
1333 emu->capture_efx_interrupt = snd_emu10k1_pcm_efx_interrupt;
1334 emu->pcm_capture_efx_substream = substream;
1341 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1343 emu->capture_efx_interrupt = NULL;
1344 emu->pcm_capture_efx_substream = NULL;
1377 int snd_emu10k1_pcm(struct snd_emu10k1 *emu, int device)
1383 if ((err = snd_pcm_new(emu->card, "emu10k1", device, 32, 1, &pcm)) < 0)
1386 pcm->private_data = emu;
1394 emu->pcm = pcm;
1399 &emu->pci->dev,
1404 &emu->pci->dev, 64*1024, 64*1024);
1409 int snd_emu10k1_pcm_multi(struct snd_emu10k1 *emu, int device)
1415 if ((err = snd_pcm_new(emu->card, "emu10k1", device, 1, 0, &pcm)) < 0)
1418 pcm->private_data = emu;
1425 emu->pcm_multi = pcm;
1429 &emu->pci->dev,
1444 int snd_emu10k1_pcm_mic(struct snd_emu10k1 *emu, int device)
1449 if ((err = snd_pcm_new(emu->card, "emu10k1 mic", device, 0, 1, &pcm)) < 0)
1452 pcm->private_data = emu;
1458 emu->pcm_mic = pcm;
1460 snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV, &emu->pci->dev,
1468 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1469 int nefx = emu->audigy ? 64 : 32;
1479 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1480 int nefx = emu->audigy ? 64 : 32;
1483 spin_lock_irq(&emu->reg_lock);
1485 ucontrol->value.integer.value[idx] = (emu->efx_voices_mask[idx / 32] & (1 << (idx % 32))) ? 1 : 0;
1486 spin_unlock_irq(&emu->reg_lock);
1492 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
1494 int nefx = emu->audigy ? 64 : 32;
1495 int nefxb = emu->audigy ? 7 : 6;
1512 spin_lock_irq(&emu->reg_lock);
1513 change = (nval[0] != emu->efx_voices_mask[0]) ||
1514 (nval[1] != emu->efx_voices_mask[1]);
1515 emu->efx_voices_mask[0] = nval[0];
1516 emu->efx_voices_mask[1] = nval[1];
1517 spin_unlock_irq(&emu->reg_lock);
1543 static void snd_emu10k1_fx8010_playback_irq(struct snd_emu10k1 *emu, void *private_data)
1556 dev_dbg(emu->card->dev,
1577 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1578 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number];
1587 snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages.area + tram_pos,
1588 (unsigned short *)emu->fx8010.etram_pages.area + tram_pos + tram_size / 2,
1595 snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages.area + tram_pos,
1596 (unsigned short *)emu->fx8010.etram_pages.area + tram_pos + tram_size / 2,
1605 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1606 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number];
1614 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1615 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number];
1619 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + 0x80 + pcm->etram[i], 0, 0);
1625 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1627 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number];
1631 dev_dbg(emu->card->dev, "prepare: etram_pages = 0x%p, dma_area = 0x%x, "
1633 emu->fx8010.etram_pages, runtime->dma_area,
1641 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_running, 0, 0); /* reset */
1642 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 0); /* reset */
1643 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_size, 0, runtime->buffer_size);
1644 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_ptr, 0, 0); /* reset ptr number */
1645 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_count, 0, runtime->period_size);
1646 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_tmpcount, 0, runtime->period_size);
1648 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + 0x80 + pcm->etram[i], 0, (TANKMEMADDRREG_READ|TANKMEMADDRREG_ALIGN) + i * (runtime->buffer_size / pcm->channels));
1654 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1655 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number];
1658 spin_lock(&emu->reg_lock);
1672 snd_emu10k1_ptr_write(emu, SPCS0 + i, 0, bits);
1676 result = snd_emu10k1_fx8010_register_irq_handler(emu, snd_emu10k1_fx8010_playback_irq, pcm->gpr_running, substream, &pcm->irq);
1680 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 1);
1685 snd_emu10k1_fx8010_unregister_irq_handler(emu, &pcm->irq);
1686 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 0);
1695 spin_unlock(&emu->reg_lock);
1701 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1702 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number];
1705 if (!snd_emu10k1_ptr_read(emu, emu->gpr_base + pcm->gpr_trigger, 0))
1707 ptr = snd_emu10k1_ptr_read(emu, emu->gpr_base + pcm->gpr_ptr, 0) << 2;
1733 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1735 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number];
1740 spin_lock_irq(&emu->reg_lock);
1742 spin_unlock_irq(&emu->reg_lock);
1746 spin_unlock_irq(&emu->reg_lock);
1752 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
1753 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number];
1755 spin_lock_irq(&emu->reg_lock);
1757 spin_unlock_irq(&emu->reg_lock);
1771 int snd_emu10k1_pcm_efx(struct snd_emu10k1 *emu, int device)
1777 if ((err = snd_pcm_new(emu->card, "emu10k1 efx", device, 8, 1, &pcm)) < 0)
1780 pcm->private_data = emu;
1787 emu->pcm_efx = pcm;
1793 /* emu->efx_voices_mask[0] = FXWC_DEFAULTROUTE_C | FXWC_DEFAULTROUTE_A; */
1794 if (emu->audigy) {
1795 emu->efx_voices_mask[0] = 0;
1796 if (emu->card_capabilities->emu_model)
1801 emu->efx_voices_mask[1] = 0xffffffff;
1803 emu->efx_voices_mask[1] = 0xffff;
1805 emu->efx_voices_mask[0] = 0xffff0000;
1806 emu->efx_voices_mask[1] = 0;
1814 kctl = snd_ctl_new1(&snd_emu10k1_pcm_efx_voices_mask, emu);
1818 err = snd_ctl_add(emu->card, kctl);
1822 snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV, &emu->pci->dev,