Макрос NdisMSetupDmaTransfer (ndis.h)
Функция NdisMSetupDmaTransfer настраивает контроллер DMA узла для передачи DMA.
Синтаксис
void NdisMSetupDmaTransfer(
_S,
_H,
_B,
_O,
_L,
_M_
);
Параметры
_S
Указатель на указанную вызывающим переменную, в которой эта функция возвращает состояние запроса, которое может быть одним из следующих:
NDIS_STATUS_SUCCESS
Контроллер DMA настроен для передачи указанных данных, которые были удалены на устройство или с устройства для обеспечения целостности данных.
NDIS_STATUS_RESOURCES
Попытка настроить контроллер DMA для передачи завершилась сбоем либо из-за того, что канал, назначенный MiniportDmaHandle в настоящее время использует передачу данных или так как заданная длина недопустима.
_H
Дескриптор DMA, возвращаемый функцией NdisMRegisterDmaChannel во время инициализации.
_B
Указатель на дескриптор буфера, сопоставляющий диапазон памяти узла, из которого будут передаваться данные.
_O
Смещение байтов в сопоставленный буфер, с которого должна начинаться передача. Ноль указывает, что передача должна начинаться с начального байта диапазона, указанного в буфере.
_L
Количество байтов передаваемых данных. Диапазон, указанный смещения и длины, должен быть правильным подрангом, указанным в буфере.
_M_
Логическое значение, которое TRUE для исходящей передачи из системы через сетевой адаптер. В противном случае FALSE.
Возвращаемое значение
Никакой
Замечания
Драйверы подчиненных сетевых адаптеров DMA вызывают NdisMSetupDmaTransfer в ответ на входящие запросы на отправку, для которых драйвер задает WriteToDeviceTRUE. Они задают WriteToDevice значение false false при передаче данных из сетевой карты в память узла.
Вызывающий объект NdisMSetupDmaTransfer предоставляет дескриптор буфера, сопоставляющий диапазон памяти узла, который является целевым объектом передачи или содержит данные для операции скачивания с узла на сетевой адаптер. Чтобы указать размер передачи, соответствующий ограничениям DMA сетевого адаптера, вызывающий объект может при необходимости настроить подранг для передачи с помощью параметра Offset и Length.
Вызывающий объект должен предоставить дескриптор буфера, указывающий диапазон узлов, в который будут передаваться полученные данные из сетевой карты, когда writeToDevicefalse. В противном случае дескриптор буфера в буфера был привязан к входным данным дескриптора пакета к драйверу минипорта. функция MiniportSendNetBufferLists.
Чтобы повысить производительность небольших запросов передачи, таких как запрос на отправку менее 256 байтов, мини-драйвер может скопировать данные пакета в внутренний промежуточный буфер и передать сопоставление дескриптора буфера, выделенного драйвером, в NdisMSetupDmaTransfer.
При возвращении из NdisMSetupDmaTransferконтроллер DMA узла был запрограммирован для передачи. Затем минипорт-драйвер программит сетевой адаптер для операции передачи.
После завершения передачи драйвер минипорта должен вызвать функции NdisMCompleteDmaTransfer.