цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Написание драйверов для Windows. Закрепления и открепления области DMA

Написание драйверов для Windows. Закрепления и открепления области DMA

Автор: Mike(admin) от 4-12-2018, 06:55

В этой статье рассмотрим закрепления и открепления области DMA. Функция закрепления области подготавливает DMA-передачу. Эта функция вызывает закрепление указанной области памяти в физических адресах и возвращает физический адрес.


Написание драйверов для Windows.

Если необходимо, эта функция будет производить переотображение страничного механизма памяти для обеспечения того, что память будет непрерывной и не будет пересекать физическую границу 128К. Эта функция также допускает некоторые компромиссы, и вызывающая программа может дать указание не производить переотображение в том случае, если физические адреса не удовлетворяют заданным условиям. В противном случае физическая память закрепляется - она не может быть перемещена в физической памяти или сброшена на диск.


Если драйвер устройства имеет физический адрес, он может программировать аппаратуру DMA для выполнения передачи. Поскольку в этом случае нет необходимости виртуализировать порты и можно указывать физические адреса для аппаратуры DMA, драйвер устройства может отключить VDMAD, вызвав функцию отключения трансляции DMA. После отключения прерывания в VM должны оставаться запрещенными, чтобы не допустить другие драйверы устройств к аппаратуре DMA для виртуализации. Драйвер устройства должен отключить трансляцию DMA, запрограммировать аппаратуру DMA и включить трансляцию обратно перед разрешением прерываний. Трансляция DMA включается вызовом функции включения трансляции DMA.


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


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


Драйвер устройства может не закреплять начальную область передачи DMA и осуществить выделение буфера передачи DMA напрямую с помощью функции запроса буфера DMA. Эта функция позволяет также осуществить передачу данных в выделенный буфер. Выделенный буфер может быть освобожден вызовом функции 0x8108. Эта функция также может передавать данные из буфера перед его освобождением. Еще две функции выполняют копирование в буфер DMA и из буфера DMA. Они имеют номера 0x8109 и 0x810А, соответственно. Эти функции просто копируют данные в буфер DMA, выделенный с помощью функций запроса буфера DMA или закрепления буфера DMA, и из него.




© digitrode.ru


Теги: Windows



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий