scatter/gather 列表中 NumberOfElements 的限制
limitation for NumberOfElements in scatter/gather list
我的 PCIe FPGA 设备驱动程序基于 7600.16385。1\src\general\PLX9x5x
在应用程序中读取文件时,调用 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 GB),但似乎 NumberOfElements 受到某些限制,不知何故最大的传输是 1MB(列表中有 255 个元素,每个 4k)。我将下面函数中的 MaximumTransfecrLength 更改为 500MB:
WDF_DMA_ENABLER_CONFIG_INIT(&dmaConfig,
WdfDmaProfileScatterGatherDuplex,
deviceContext->MaximumTransferLength);
但我仍然不能传输超过 1MB。
限制 NumberOfElements 的因素是什么?我该如何解决?
我需要将WDF_DMA_ENABLER_CONFIG_INIT函数中的第二个参数更改为WdfDmaProfileScatterGather64,当然我们必须确保硬件(FPGA或PCIE端点另一端的任何东西)可以支持64位寻址模式.
我只是将我的代码更改如下:
WDF_DMA_ENABLER_CONFIG_INIT(&dmaConfig,
WdfDmaProfileScatterGather64,
deviceContext->MaximumTransferLength);
我的 PCIe FPGA 设备驱动程序基于 7600.16385。1\src\general\PLX9x5x
在应用程序中读取文件时,调用 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 GB),但似乎 NumberOfElements 受到某些限制,不知何故最大的传输是 1MB(列表中有 255 个元素,每个 4k)。我将下面函数中的 MaximumTransfecrLength 更改为 500MB:
WDF_DMA_ENABLER_CONFIG_INIT(&dmaConfig,
WdfDmaProfileScatterGatherDuplex,
deviceContext->MaximumTransferLength);
但我仍然不能传输超过 1MB。 限制 NumberOfElements 的因素是什么?我该如何解决?
我需要将WDF_DMA_ENABLER_CONFIG_INIT函数中的第二个参数更改为WdfDmaProfileScatterGather64,当然我们必须确保硬件(FPGA或PCIE端点另一端的任何东西)可以支持64位寻址模式.
我只是将我的代码更改如下:
WDF_DMA_ENABLER_CONFIG_INIT(&dmaConfig,
WdfDmaProfileScatterGather64,
deviceContext->MaximumTransferLength);