Hi
I have allocated the DMA buffer using snd_pcm_lib_malloc_pages() and it was preallocated as:
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_CONTINUOUS, snd_dma_continuous_data (GFP_KERNEL), 128 * 1024, 128 * 1024);
and then,
snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
None of these calls fail.
The physical address of the allocated buffer is shown as 0 in my case since according to 'Writing an ALSA driver' the physical address of the DMA buffer will not be accessble from the main CPU. Is that why the physical address is shown as 0?
Also, in my pointer function, I need the DMA buffers physical address to calculate the position in buffer etc. How can do that since runtime->dma_addr is 0 for me?
Apologies for longish mail but I have to paste the actual paragraphs here to clear my understanding in less number of emails by avoiding further emails.
In chapter 5, in DMA buffer information, it is said that,
1. The dma_area holds the buffer pointer (the logical address). You can call memcpy from/to this pointer. Meanwhile, dma_addr holds the physical address of the buffer. This field is specified only when the buffer is a linear buffer.
and in descrition of prepare callback it says,
2. The physical address of the allocated buffer is set to runtime->dma_area.
Statements 1 and 2 contradict each other or I am mis reading them?
How should I get the physical address in pointer callbacks? As runtime->dma_area or runtime->dma_addr which is 0?
-pharaoh.