Мой драйвер устройства для PCIe FPGA основан на 7600.16385.1\src\general\PLX9x5x.
При ReadFile в приложении вызывается PLxEvtIoRead:
//
// Initialize this new DmaTransaction.
//
status = WdfDmaTransactionInitializeUsingRequest(
devExt->ReadDmaTransaction,
Request,
PLxEvtProgramReadDma,
WdfDmaDirectionReadFromDevice );
//
// Execute this DmaTransaction.
//
status = WdfDmaTransactionExecute( devExt->ReadDmaTransaction,
WDF_NO_CONTEXT);
....
Upon calling to WdfDmaTransactionExecute, PLxEvtProgramReadDma is called.
BOOLEAN
PLxEvtProgramReadDma(
IN WDFDMATRANSACTION Transaction,
IN WDFDEVICE Device,
IN WDFCONTEXT Context,
IN WDF_DMA_DIRECTION Direction,
IN PSCATTER_GATHER_LIST SgList
)
{
KdPrint ((???SgList->NumberOfElements = %d\n???,SgList->NumberOfElements));
}
Проблема: я хочу передать большой объем данных через этот список Scatter/Gather (около 1 ГБ), но кажется, что NumberOfElements чем-то ограничен, каким-то образом большая передача составляет 1 МБ (255 элементов в списке, каждый 4k). я изменил MaximumTransfecrLength в функции ниже на 500 МБ:
WDF_DMA_ENABLER_CONFIG_INIT(&dmaConfig,
WdfDmaProfileScatterGatherDuplex,
deviceContext->MaximumTransferLength);
но все же я не могу передать более 1 МБ. что ограничивает NumberOfElements и как я могу это решить?