Hello Takashi,
I called the function snd_pcm_lib_preallocate_pages_for_all passing SNDRV_DMA_TYPE_DEV and pointer to struct device as parameters. This doesn't crash. However with SNDRV_DMA_TYPE_CONTINUOUS it did crash.
I have used the function "snd_pcm_lib_malloc_pages" in the hw_params callout to allocate DMA memory. I hope this is the right way of doing the DMA allocation.
With this above configuration can I stay assured that "dma_addr" will give me the physical address of the buffer?
Regards; Aadish
On Thu, Jun 24, 2010 at 1:57 PM, Adish Kuvelker adkuvi@gmail.com wrote:
Hello Takashi,
I'm sorry as this is getting bit confusing for me. Playing the PCM data I would want to pass the starting physical address of this location to the DMA start address. Now can I access "dma_addr" directly for this purpose? Do I still have to allocate DMA memory or will just passing of this dma_addr as source address suffice?
I am new to ALSA framework and it's getting a bit confusing to me.
Regards; Aadish
On Thu, Jun 24, 2010 at 1:14 PM, Takashi Iwai tiwai@suse.de wrote:
At Thu, 24 Jun 2010 12:52:47 +0530, Adish Kuvelker wrote:
Hello,
If I use "SNDRV_DMA_TYPE_CONTINUOUS" as a parameter to pre-allocate function to get contiguous locations of memory and use the function snd_dma_continuous_data() would that be correct setting for my case?
I guess no. As mentioned, it's no DMA memory, i.e. simple pages allocated via __get_free_pages() and co.
Where are the parameters of dma_addr and dma_area written to the runtime structure?
These are available only for pages properly allocated for DMA.
Takashi
Regards; Aadish
On Thu, Jun 24, 2010 at 12:45 PM, Takashi Iwai tiwai@suse.de wrote:
At Thu, 24 Jun 2010 12:38:35 +0530, Adish Kuvelker wrote:
Hello Takashi,
I am developing a DMA Controller driver to service the PCM out data to the Audio controller on the arm-based ATLASIII procesor. In case you need any more information on the architecture I can pass.
Since the DMA isn't on PCI bus I am pre-allocation continuous memero using the "snd_pcm_lib_preallocate_pages_for_all" passing SNDDRV_DMA_TYPE_DEV and "snd_dma_continuous_data" as appropriate parameters.
snd_dma_continuous_data() is only for SNDRV_DMA_TYPE_CONTINUOUS. In this case, the pages aren't for DMA.
For SNDRV_DMA_TYPE_DEV, simply pass the device pointer you use.
Takashi