alsa DMA 切入點

aningxiaoxixi發表於2020-11-15

描述 DMA 的重點引數

snd_pcm_substream是pcm中間層的核心,絕大部分任務都是在substream中處理,尤其是他的ops(snd_pcm_ops)欄位,
許多user空間的應用程式通過alsa-lib對驅動程式的請求都是由該結構中的函式處理。
它的runtime欄位則指向snd_pcm_runtime結構,snd_pcm_runtime記錄這substream的一些重要的軟體和硬體執行環境和引數。

在音效卡的hw_params階段,snd_soc_platform_driver結構的ops->hw_params會被呼叫,在該回撥用,
通常會使用api:snd_pcm_set_runtime_buffer()把substream->dma_buffer的數值拷貝
到substream->runtime的相關欄位中(.dma_area, .dma_addr, .dma_bytes),
這樣以後就可以通過substream->runtime獲得這些地址和大小資訊了。

注意 snd_pcm_substream 也包含很多資訊

索引關鍵詞 runtime
runtime->hw 設定硬體引數
runtime->dma_addr 實體地址
runtime->dma_area 指標地址
runtime->dma_area size大小

dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
dma_addr_t dma_handle) 函式
可以的得出 dma_addr 是(handle 實體地址) dma_area 是地址(指標地址) dma_bytes 是size
申請這些資料一般是在 platform 中 hw_params 中設定,關於具體怎麼賦值的 索引 dma_area dma_addr

相關文章