Включение транзакций DMA

[Относится только к KMDF]

Если драйвер на основе платформы обрабатывает операции ввода-вывода для устройств DMA, драйвер должен включить функции DMA платформы для каждого устройства DMA. Чтобы включить эти функции, функция обратного вызова EvtDriverDeviceAdd или EvtDevicePrepareHardware драйвера должна:

  1. Вызовите WdfDeviceSetAlignmentRequirement, чтобы указать требование устройства к выравниванию буфера.

  2. Вызовите WdfDmaEnablerCreate , чтобы указать тип операций DMA (один пакет или точечная/сборная) и максимальный размер передачи, поддерживаемый устройством. Начиная с KMDF версии 1.11, платформа поддерживает системный режим DMA в системах на основе микросхем (SoC), работающих в Windows 8 или более поздних версиях операционной системы.

  3. Вызовите 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 , создаваемые платформой для направления ввода и вывода устройства. Однако большинству драйверов на основе платформы не требуется доступ к этим структурам.