簡體   English   中英

關於dma_sync_single_for_cpu()的問題

[英]Questions about dma_sync_single_for_cpu() / dma_sync_single_for_device()

我的代碼使用流DMA API將分配的緩沖區映射到DMA區域,如下所示:

void perform_dma(void *buffer)
{
    dma_map_single(buffer...  DMA_BIDIRECTIONAL);  <- map buffer to physical address

    ring_doorbell()  -> notify device to read DMA content

    // wait until DMA is done or wake up by interrupts 
    .....

    dma_unmap_single(... , DMA_BIDIRECTIONAL)   <- unmap buffer
}

DMA方向為BIDIRECTIONAL, buffer已分配,在調用perform_dma()之前由調用方填充,並在完成后釋放。

我應該使用

  • dma_sync_single_for_device()之后(但在通知設備執行DMA之前dma_sync_single_for_device() dma_map_single()

  • dma_sync_single_for_cpu()右前dma_unmap_single()作為緩沖會被呼叫者之后讀取perform_dma()

是。 您可以在此KernelTLV演示文稿 (幻燈片13)中查找。 那里有關於緩沖區責任的解釋。

在演示的示例中,據說您(驅動程序)可以在dma_sync_single_for_cpu()之后更改緩沖區內容,並通過調用dma_sync_single_for_device()將所有權返回給設備。

這是所有權問題。 dma_sync_single_for_device()將所有權授予DMA控制器,其中dma_sync_single_for_cpu()獲得所有權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM