Visible to Intel only — GUID: ewa1447184239518
Ixiasoft
Visible to Intel only — GUID: ewa1447184239518
Ixiasoft
3.1.6.1. Implementing a DMA Transfer
For Windows, the Jungo WinDriver imposes a 5000 to 10000 limit on the number of interrupts received per second in user mode. This limit translates to a 2.5 gigabytes per second (GBps) to 5 GBps DMA bandwidth when a full 128-entry table of 4 KB page is transferred per interrupt.
On Windows, polling is the default method for maximizing PCIe DMA bandwidth at the expense of CPU run time. To use interrupts instead of polling, assign a non-NULL value to the ACL_PCIE_DMA_USE_MSI environment variable.
To implement a DMA transfer:
- Verify that the previous DMA transfer sent all the requested bytes of data.
- Map the virtual memories that are requested for DMA transfer to physical addresses.
Note: The amount of virtual memory that can be mapped at a time is system dependent. Large DMA transfers require multiple mapping or unmapping operations. For a higher bandwidth, map the virtual memory ahead in a separate thread that is in parallel to the transfer.
- Set up the DMA descriptor table on local memory.
- Write the location of the DMA descriptor table, which is in user memory, to the DMA control registers (that is, RC Read Status and Descriptor Base and RC Write Status and Descriptor Base).
- Write the Platform Designer address of descriptor FIFOs to the DMA control registers (that is EP Read Descriptor FIFO Base and EP Write Status and Descriptor FIFO Base).
- Write the start signal to the RD_DMA_LAST_PTR and WR_DMA_LAST_PTR DMA control registers.
- After the current DMA transfer finishes, repeat the procedure to implement the next DMA transfer.