Мой код использует API потокового DMA для сопоставления выделенного буфера с областью 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 двунаправленное и выделено buffer
, заполняемое вызывающей стороной до вызова perform_dma()
и освобождается после того, как это сделано.
Должен ли я использовать
dma_sync_single_for_device()
после вызова dma_map_single()
(но перед уведомлением устройства о выполнении DMA)
и
dma_sync_single_for_cpu()
непосредственно перед dma_unmap_single()
(так как буфер будет считываться вызывающей стороной после perform_dma()
)?