[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