Dear List,
I try to increase the performance of our DMA Transfer to and from our PCIe Card. The DMA controller on our card can drive several DMA transfers at the same time. We use a descriptor list to tell each channel in the DMA Controller what and where to transfer. This list can hold a limited number of segments to transfer. To maximize performance I need to create a IOSubMemoryDescriptor that produces exactly the amount of segments ( through IODMACommand) to fill the descriptor list. To define a maximum segment count would be OK, too, because the list could be shorter, but it is not the optimum. Is there a way to do this? If not I have always depenencies between the DMA channels and this means waiting.
IOMemoryCursor did this
virtual UInt32 genPhysicalSegments( IOByteCount fromPosition, void *segments, UInt32 maxSegments, -> our scatter/gather list size UInt32 maxTransferSize = 0, IOByteCount *transferSize = 0);
But we use IODMACommand to get 64 Bit addresses.
Can two IOSubMemoryDescriptors describe the same memory or overlap and can they be prepared at the same time?
Thank you very much.
Jürgen
|