605
605
plug->gen.slave != plug->req_slave);
608
slv->access = clt->access;
608
switch (slv->access) {
609
case SND_PCM_ACCESS_RW_INTERLEAVED:
610
slv->access = SND_PCM_ACCESS_MMAP_INTERLEAVED;
612
case SND_PCM_ACCESS_RW_NONINTERLEAVED:
613
slv->access = SND_PCM_ACCESS_MMAP_NONINTERLEAVED;
743
752
return 0; /* OK, we have mmap support */
744
753
#ifdef BUILD_PCM_PLUGIN_MMAP_EMUL
745
754
/* no mmap support - we need mmap emulation */
756
if (!snd_pcm_access_mask_test(smask, SND_PCM_ACCESS_RW_INTERLEAVED) &&
757
!snd_pcm_access_mask_test(smask, SND_PCM_ACCESS_RW_NONINTERLEAVED))
758
return -EINVAL; /* even no RW access? no way! */
746
760
cmask = (const snd_pcm_access_mask_t *)
747
761
snd_pcm_hw_param_get_mask(cparams,
748
762
SND_PCM_HW_PARAM_ACCESS);
749
763
snd_mask_none(&mask);
750
764
if (snd_pcm_access_mask_test(cmask, SND_PCM_ACCESS_RW_INTERLEAVED) ||
751
snd_pcm_access_mask_test(cmask, SND_PCM_ACCESS_MMAP_INTERLEAVED))
752
snd_pcm_access_mask_set(&mask,
753
SND_PCM_ACCESS_RW_INTERLEAVED);
765
snd_pcm_access_mask_test(cmask, SND_PCM_ACCESS_MMAP_INTERLEAVED)) {
766
if (snd_pcm_access_mask_test(smask, SND_PCM_ACCESS_RW_INTERLEAVED))
767
snd_pcm_access_mask_set(&mask,
768
SND_PCM_ACCESS_RW_INTERLEAVED);
754
770
if (snd_pcm_access_mask_test(cmask, SND_PCM_ACCESS_RW_NONINTERLEAVED) ||
755
snd_pcm_access_mask_test(cmask, SND_PCM_ACCESS_MMAP_NONINTERLEAVED))
756
snd_pcm_access_mask_set(&mask,
757
SND_PCM_ACCESS_RW_NONINTERLEAVED);
771
snd_pcm_access_mask_test(cmask, SND_PCM_ACCESS_MMAP_NONINTERLEAVED)) {
772
if (snd_pcm_access_mask_test(smask, SND_PCM_ACCESS_RW_NONINTERLEAVED))
773
snd_pcm_access_mask_set(&mask,
774
SND_PCM_ACCESS_RW_NONINTERLEAVED);
776
if (!snd_mask_empty(&mask))
777
*smask = mask; /* prefer the straight conversion */