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