Включение транзакций DMA
[Относится только к KMDF]
Если драйвер на основе платформы обрабатывает операции ввода-вывода для устройств DMA, драйвер должен включить функции DMA платформы для каждого устройства DMA. Чтобы включить эти функции, функция обратного вызова EvtDriverDeviceAdd или EvtDevicePrepareHardware драйвера должна:
Вызовите WdfDeviceSetAlignmentRequirement, чтобы указать требование устройства к выравниванию буфера.
Вызовите WdfDmaEnablerCreate , чтобы указать тип операций DMA (один пакет или точечная/сборная) и максимальный размер передачи, поддерживаемый устройством. Начиная с KMDF версии 1.11, платформа поддерживает системный режим DMA в системах на основе микросхем (SoC), работающих в Windows 8 или более поздних версиях операционной системы.
Вызовите WdfDmaEnablerSetMaximumScatterGatherElements , чтобы указать максимальное количество элементов, которое устройство может поддерживать в списке точечной и сборной, если устройство поддерживает операции точечной и сборной.
В следующем примере кода из примера PLX9x5x показано, как включить функции DMA платформы. Этот код отображается в файле Init.c.
WDF_DMA_ENABLER_CONFIG dmaConfig;
WdfDeviceSetAlignmentRequirement( DevExt->Device, PCI9656_DTE_ALIGNMENT_16 );
WDF_DMA_ENABLER_CONFIG_INIT( &dmaConfig,
WdfDmaProfileScatterGather64Duplex,
DevExt->MaximumTransferLength );
status = WdfDmaEnablerCreate( DevExt->Device,
&dmaConfig,
WDF_NO_OBJECT_ATTRIBUTES,
&DevExt->DmaEnabler );
Если драйверу требуются общие буферы, функция обратного вызова EvtDriverDeviceAdd драйвера обычно настраивает их. Дополнительные сведения об этих буферах см. в разделе Использование общих буферов.
После вызова WdfDmaEnablerCreate драйвер может вызвать WdfDmaEnablerWdmGetDmaAdapter , чтобы получить указатели на структуры WDM DMA_ADAPTER , создаваемые платформой для направления ввода и вывода устройства. Однако большинству драйверов на основе платформы не требуется доступ к этим структурам.