[alsa-devel] Difference between substream->dma_buffer and substream->runtime->dma_buffer_p?

Nobin Mathew nobin.mathew at gmail.com
Fri Jun 15 09:47:16 CEST 2007


I think this like static and dynamic allocation of buffers.

if it allocated at device driver insertion time then it stored in
substream entry.

And this can be used by both playback and capture

If it allocated at runtime then it is stored in runtime entry.
And you can have different buffers for both playback and capture.

if no substream is open then runtime structure pointer will be NULL.

Nobin


On 6/15/07, Timur Tabi <timur at freescale.com> wrote:
> The snd_pcm_substream structure has a snd_dma_buffer structure.  snd_dma_buffer looks like
> this:
>
> struct snd_dma_buffer {
>         struct snd_dma_device dev;      /* device type */
>         unsigned char *area;    /* virtual pointer */
>         dma_addr_t addr;        /* physical address */
>         size_t bytes;           /* buffer size in bytes */
>         void *private_data;     /* private for allocator; don't touch */
> };
>
> snd_pcm_substream also has a snd_pcm_runtime structure, which looks like this:
>
> struct snd_pcm_runtime {
> ...
>
>         /* -- DMA -- */
>         unsigned char *dma_area;        /* DMA area */
>         dma_addr_t dma_addr;            /* physical bus address (not accessible from main CPU) */
>         size_t dma_bytes;               /* size of DMA area */
>
>         struct snd_dma_buffer *dma_buffer_p;    /* allocated buffer */
>
>
> Why the redundancy?  Not only does snd_pcm_runtime have dma_area, dma_addr, and dma_bytes,
> but it also has a pointer to a dns_dma_buffer structure, which also has this information!
>
> So given a snd_pcm_substream structure, you can obtain the physical address of the DMA
> buffer three ways:
>
> substream->dma_buffer.addr
> substream->runtime->dma_addr
> substream->runtime->dma_buffer_p->addr
>
> When will these three variable contain different values?  If the answer is never, then why
> do they all exist?
>
> --
> Timur Tabi
> Linux Kernel Developer @ Freescale
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>


More information about the Alsa-devel mailing list