Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо только к KMDF]
В этом разделе описывается, как драйвер KMDF для устройства DMA шины обрабатывает запрос ввода-вывода. Если вы пишете драйвер KMDF, реализующий DMA в системном режиме, см. раздел "Поддержка System-Mode DMA".
Для обработки запросов ввода-вывода в драйвере KMDF для устройства с DMA ведущей шины требуется код в нескольких функциях обратного вызова драйвера, как показано на следующем рисунке.
Как показано выше, обработка, связанная с DMA, выполняется на четырех этапах:
Функция обратного вызова EvtDriverDeviceAdd или EvtDevicePrepareHardware должна включать транзакции DMA для устройства, чтобы драйвер мог использовать возможности DMA платформы. Эта же функция обратного вызова также должна создать общий буфер , если для устройства и драйвера требуется доступ к буферу общей памяти.
Когда драйвер получает запрос ввода-вывода, который требует от устройства выполнения операции DMA, один из обработчиков запросов драйвера должен создать и инициализировать новую транзакцию DMA. (Обратите внимание, что если драйвер повторно использует объекты транзакций DMA, функция обратного вызова EvtDriverDeviceAdd может создать объекты транзакций.) Затем обработчик запросов должен инициировать транзакцию DMA, чтобы фреймворк начал разделять транзакцию на более мелкие передачи DMA, если необходимо, и вызывать функцию обратного вызова EvtProgramDma драйвера.
Функция обратного вызова evtProgramDma вашего драйвера программирует оборудование DMA для единственной передачи DMA и активирует прерывания устройства.
При прерывании устройства платформа вызывает функцию обратного вызова EvtInterruptIsr драйвера, которая сохраняет переменную информацию об устройстве и планирует выполнение функции обратного вызова EvtInterruptDpc драйвера.
Функция обратного вызова EvtInterruptDpc драйвера завершает каждую передачу DMA после того, как оборудование завершает её обработку. После завершения окончательной передачи транзакции DMA функция обратного вызова EvtInterruptDpcзавершает транзакцию DMA.
Драйвер может повторно использовать свои объекты транзакций DMA , чтобы убедиться, что они могут работать, когда ресурсы памяти низки.
Драйвер может предоставить набор функций обратного вызова, обрабатывающих операции управления питанием для DMA.
Некоторые драйверы используют общие буферы , к которым может получить доступ как устройство, так и драйвер.