[alsa-devel] SNDRV_PCM_INFO_MMAP - what do I need for it?
Timur Tabi
timur at freescale.com
Wed Jan 16 20:06:00 CET 2008
Takashi Iwai wrote:
> At Wed, 16 Jan 2008 09:17:57 -0600,
> Timur Tabi wrote:
>> My 8610 ASoC driver has this:
>>
>> static const struct snd_pcm_hardware fsl_dma_hardware = {
>>
>> .info = SNDRV_PCM_INFO_INTERLEAVED,
>>
>> This means that MMAP is not enabled.
>>
>> I understand what MMAP is, but not from an ALSA driver perspective. If I change
>> the above line to this:
>>
>> .info = SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP |
>> SNDRV_PCM_INFO_MMAP_VALID,
>>
>> what does ALSA do differently? Do I need to define any new functions? From an
>> application perspective, what is different?
>
> It means that the driver supports mmap access to the PCM buffer.
>
> In some cases, you need to implement a proper mmap callback. For
> example, when the coheret (dma) pages are allocated via
> dma_alloc_coherent and used for the PCM buffer, you need mmap callback
> for ARM, at least because the default mmap handler in the PCM core
> doesn't work for ARM. In this case, prepare your own mmap callback
> and pass it to pcm ops. It should call simply dma_mmap_coherent()
> appropriately.
The default mmap handler in the PCM core is snd_pcm_default_mmap()?
How can I know whether this function works? Can I just add those two flags to
my .info line, and then .... ? Is there an ALSA mmap test utility?
>> Also, does DMIX need MMAP support?
>
> Yes, mandatory.
So just to be clear: the fact that I do *not* have "SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID" defined in snd_pcm_hardware.info is the reason why I
get this error message:
root at MPC8610HPCD:/home/demo_files/mp3# alsaplayer -o alsa -q -F 48000
-d plug:dmix ./527182737.mp3 &
[1] 3224
root at MPC8610HPCD:/home/demo_files/mp3# ALSA lib
pcm_direct.c:874:(snd_pcm_direct_initialize_slave) slave plugin does not
support mmap interleaved or mmap noninterleaved access
ALSA lib pcm_dmix.c:878:(snd_pcm_dmix_open) unable to initialize slave
snd_pcm_open: Invalid argument (plug:dmix)
Failed to initialize plugin!
...
--
Timur Tabi
Linux kernel developer at Freescale
More information about the Alsa-devel
mailing list