Hi,
I’m working on adding DMA support to a driver for a custom PCI Express data acquisition board. After reading the “DMA support in KMDF drivers” whitepaper and talking with the hardware engineer, I am trying to make a go of it using WdfDmaProfilePacket64, as the board doesn’t really have hardware S-G support. The board does have multiple DMA channels, however, 1 channel for each device on the board. So for example, if the board has 10 A/D converters, there will be 10 independent DMA channels, 1 per A/D.
The goal is to be able to use all devices on the board simultaneously if requested. I’ve written my driver so far to create a separate DMA transaction object for each channel on the board. I do this in the EvtDevicePrepareHardware callback. This seems to work and I can successfully DMA to/from any 1 device. When I try to execute a second DMA transaction on another channel (while the first is still active on a different channel), WdfDmaTransactionExecute fails with STATUS_WDF_BUSY. The KMDF documentation pretty clearly points out that this will result from using a packet profile and attempting to execute a Transaction while another is still executing.
Is it possible to use multiple transaction objects when you’ve selected a packet profile?
The answer seems obvious based on the Microsoft docs, but some of the advice given in the thread below seemed to indicate otherwise:
http://www.osronline.com/showthread.cfm?link=166607
Thanks in advance.