我正在开发一份DMA例程,用于将数据从PC传输到PCIe卡上的FPGA。我已经阅读了DMA-API.txt和LDD3第15章的详细信息。然而,我无法弄清楚如何在PC与PCIe卡上的一致的iomem块之间进行DMA传输。LDD3中PCI的样例映射了一个缓冲区,然后“告诉卡”执行DMA传输,但我需要PC来执行此操作。
我已经找到的信息:
我已经找到的信息:
Request bus master
pci_set_master(pdev);
Set the DMA mask
if (dma_set_mask(&(pdev->dev), DMA_BIT_MASK(32))) { dev_err(&pdev->dev,"No suitable DMA available.\n"); goto cleanup; }
Request a DMA channel
if (request_dma(dmachannel, DRIVER_NAME)) { dev_err(&pdev->dev,"Could not reserve DMA channel %d.\n", dmachannel); goto cleanup; }
Map a buffer for DMA transfer
dma_handle = pci_map_single(pci_dev, buffer, count, DMA_TO_DEVICE);
问题:
我需要做什么才能让PC执行DMA传输而不是卡片?
谢谢您的帮助!
首先感谢您的回复。也许我应该更准确地提出我的问题:
- 在我看来,PC必须有一个DMA控制器。如何访问此DMA控制器以启动对PCIe卡中内存映射IO区域的传输?
- 我们的规格要求PC的DMA控制器启动传输。但是,我只能找到设备执行DMA任务的示例(DMA_mapping.txt,LDD3第15章)。是否有原因,为什么没有人使用PC的DMA控制器(它仍然具有DMA通道)?请求为我们的项目更改规格是否更好?
感谢您的耐心。