From: Ashok Bruno on
Can I have multiple DMA transactions on the same DMA enabler?
ie. only one DMA transaction happens at a time, but to avoid creating
scatter gather lists, memory, etc. each DMA transaction remain in existence
until the app exits.


From: Stephan Wolf [MVP] on
What is a "DMA enabler"?

DMA transactions are usually set up and then executed. The hardware DMA
engine will take care of coordinating multiple "concurrent" DMA
transactions. No need to do anything in software here.

Not sure if I got your question right, though.

Stephan
---
Ashok Bruno wrote:
> Can I have multiple DMA transactions on the same DMA enabler?
> ie. only one DMA transaction happens at a time, but to avoid creating
> scatter gather lists, memory, etc. each DMA transaction remain in existence
> until the app exits.

From: already5chosen on

Stephan Wolf [MVP] wrote:
> What is a "DMA enabler"?

"DMA enabler" is a WDF wrapper object for WDM PDMA_ADAPTER.
"DMA transaction" is WDF wrapper object for WDM GetScatterGatherList()
and associated DMA adapter routines.

WdfDmaTransactionCreate()=Framework Housekeeping
WdfDmaTransactionInitialize()=More Framework Housekeeping
WdfDmaTransactionExecute()=GetScatterGatherList()
WdfDmaTransactionRelease()=PutScatterGatherList()
EvtProgramDma()=DMA ExecutionRoutine()

So translating the question into WDM terms, OP wants to call
GetScatterGatherList() several times for the same DMA_ADAPTER object
without calling PutScatterGatherList() in between. He wants to reuse
each scatter/gather list for several HW DMA operations.

I think, what he wants is possible but not recommended.
Back in 1999-2000 I did something similar myself. But with today's
processors building scatter/gather lists is sufficiently fast so I
would rather avoid this sort of excessive optimization unless we are
talking about transfer rates of over 1GB/s.