阅读:1879回复:0
DriverStudio中关于DMA的类-PCIe驱动开发
最近用DS写PCIe的驱动,用到DMA控制传输,不支持Scatter/Gather的情况下,关于DMA的三个类KDmaAdapter,KDmaTransfer和KCommonBuffer应该怎么用呢?
1.初始化KDmaAdapter时设置了DMA单个传输的最大长度为1M: DEVICE_DESCRIPTION dd; dd.MaximumLength = MAX_DMA_LENGTH; // 1M 再为KDmaTransfer非配分页内存 m_DmaTransfer = new(NonPagedPool) KDmaTransfer(this, &m_Dma); 这是只是分配了一个非分页内存也就是4KB大小是么?因为我只能读写的4KB的数据,我不知道为什么。。。为什么DMA可传输数据量不是KDmaAdapter里设置的DMA单个传输的最大长度为1M呢?怎样才能写入大于4KB的数据呢? 2.不支持Scatter/Gather的话,需不需要用到KCommonBuffer呢?在什么情况下用KCommonBuffer呢? 3.怎样连续多次DMA传输呢? 驱动菜鸟,希望得到各位大侠指点!!! |
|