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


Макрос 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.

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

None

Remarks

Драйверы подчиненных сетевых адаптеров DMA вызывают NdisMSetupDmaTransfer в ответ на входящие запросы на отправку, для которых драйвер устанавливает для WriteToDevice значение TRUE. Они устанавливают для WriteToDeviceзначение FALSE при передаче полученных данных из сетевого адаптера в память узла.

Вызывающий объект NdisMSetupDmaTransfer предоставляет дескриптор буфера, сопоставляющий диапазон памяти узла, который является целевым объектом передачи или содержит данные для операции скачивания с узла на сетевой адаптер. Чтобы указать размер передачи в соответствии с ограничениями DMA сетевой карты, вызывающий объект может при необходимости настроить поддиапзон для передачи с параметрами Offset и Length .

Вызывающий объект должен предоставить дескриптор буфера, указывающий диапазон узлов, в который будут передаваться полученные данные из сетевого адаптера, если writeToDevice имеет значение FALSE. В противном случае дескриптор буфера в buffer был привязан к входным данным дескриптора пакета для драйвера мини-порта.Функция MiniportSendNetBufferLists.

Чтобы повысить производительность небольших запросов на передачу, таких как запрос на отправку длиной менее 256 байт, драйвер мини-порта может скопировать данные пакета во внутренний промежуточный буфер и передать сопоставление дескриптора буфера, выделенного драйвером, в NdisMSetupDmaTransfer.

При возвращении из NdisMSetupDmaTransfer контроллер DMA узла запрограммирован для передачи. Затем драйвер мини-порта программируйте сетевой адаптер для операции передачи.

После завершения передачи драйвер мини-порта должен вызватьФункция NdisMCompleteDmaTransfer.

Требования

Требование Значение
Минимальная версия клиента Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. раздел NdisMSetupDmaTransfer (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. раздел NdisMSetupDmaTransfer (NDIS 5.1)) в Windows XP.
Целевая платформа Универсальное
Верхняя часть ndis.h (включая Ndis.h)
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI Irql_Miniport_Driver_Function(ndis)

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

MiniportSendNetBufferLists

NdisMCompleteDmaTransfer

NdisMRegisterDmaChannel