Функция 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) |