Поделиться через


Функция WdfDmaTransactionSetDeviceAddressOffset (wdfdmatransaction.h)

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

Метод WdfDmaTransactionSetDeviceAddressOffset указывает смещение регистра, к которому будет обращаться системный контроллер DMA при выполнении операции DMA.

Синтаксис

void WdfDmaTransactionSetDeviceAddressOffset(
  [in] WDFDMATRANSACTION DmaTransaction,
  [in] ULONG             Offset
);

Параметры

[in] DmaTransaction

Дескриптор объекта транзакции DMA, который указывает транзакцию для изменения.

[in] Offset

Смещение регистра от DeviceAddress , указанного в WDF_DMA_SYSTEM_PROFILE_CONFIG, до или из которого должно выполняться DMA.

Возвращаемое значение

None

Remarks

WdfDmaTransactionSetDeviceAddressOffset необходимо использовать с активатором DMA, указывающим системный профиль DMA.

Драйверы на основе платформы вызывают WdfDmaTransactionSetDeviceAddressOffset после инициализации транзакции DMA и перед ее выполнением.

Драйвер может использовать этот метод для доступа к нескольким регистрам в файле регистрации устройства.

Например, драйвер может использовать DMA для доступа к отдельным регистрам чтения и записи в файле регистрации устройства.

Для этого драйвер указывает базовый адрес файла регистрации устройства при настройке включающего компонента, а затем задает смещение регистра чтения или записи при необходимости перед выполнением транзакции.

Если драйвер вызывает этот метод в операционной системе до Windows 8, средство проверки платформы сообщает об ошибке.

Примеры

В следующем примере кода инициализируется транзакция DMA. Затем он задает смещение регистра, к которому будет обращаться системный контроллер DMA, предоставляет подпрограмму обратного вызова завершения передачи и выполняет транзакцию DMA.

status = WdfDmaTransactionInitialize(
                                     RequestContext->DmaTransaction,
                                     EvtProgramDma,
                                     direction,
                                     mdl,
                                     startingVa,
                                     length
                                     );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

WdfDmaTransactionSetDeviceAddressOffset(
                                        RequestContext->DmaTransaction,
                                        READ_DATA_REGISTER_OFFSET
                                        );

WdfDmaTransactionSetTransferCompleteCallback(
                                             RequestContext->DmaTransaction,
                                             EvtDmaTransactionDmaTransferComplete,
                                             RequestContext
                                             );

status = WdfDmaTransactionExecute(
                                  RequestContext->DmaTransaction, 
                                  RequestContext );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

return status;

Complete:

WdfDmaTransactionRelease(
                         RequestContext->DmaTransaction
                         );

Требования

Требование Значение
Минимальная версия клиента Windows 8
Целевая платформа Универсальное
Минимальная версия KMDF 1.11
Верхняя часть wdfdmatransaction.h (включая Wdf.h)
Библиотека Wdf01000.sys (см. раздел Управление версиями библиотеки Платформы).
IRQL <=DISPATCH_LEVEL
Правила соответствия DDI DriverCreate(kmdf)

См. также раздел

WDF_DMA_SYSTEM_PROFILE_CONFIG