Завершающие функции
Множество функций интерфейса верхнего уровня драйвера
сетевой карты и функций интерфейса нижнего уровня драйвера протокола разработаны
для поддержки .асинхронных операций. Чтобы не тратить бесполезно такты
процессора, ожидая в цикле завершения какой-нибудь длительной операции
или сигнала от устройства, сетевые драйверы полагаются на возможность
управления большинством операций асинхронно.
Асинхронный ввод/вывод поддерживается с помощью использования завершающих
функций. Когда драйвер протокола вызывает NDIS, чтобы отправить пакет
(что приводит в результате к вызову функции MiniportSend в драйвере сетевой
карты), драйвер сетевой карты может попытаться завершить эту передачу
немедленно и вернуть в качестве результата соответствующее значение статуса
операции. Для синхронных операций вероятным значением статуса могут быть
NDIS_STATUS_SUCCESS (если операция завершилась успешно) и NDIS_STATUS_RESOURCES
или NDIS_STATUS_ FAILURE в случае неудачи. А может, тут же вернуть управление
со значением статуса операции NDIS_STATUS_PENDING.
Но операция отправки пакета в сеть может потребовать некоторого времени
для ее завершения. За это время драйвер сетевой карты (или NDIS) поставит
пакет в очередь, и будет ожидать до тех пор, пока сетевая карта не просигнализирует
результат операции отправки. Функция MiniportSend драйвера сетевой карты
может управлять этой операцией отправки асинхронно, путем возвращения
значения статуса NDIS_STATUS_ PENDING. Когда драйвер сетевой карты завершит
отправку, он вызовет завершающую функцию NdisMSendComplete, передав в
эту функцию указатель на отосланный NDIS-пакет. Эта информация передается
драйверу протокола, сигнализируя завершение операции отправки.
Большинство операций драйвера, которые могут потребовать продолжительного
времени для их завершения, поддерживают асинхронное выполнение с простой
завершающей функцией. Такие функции имеют имена вида
NdisMXxxComplete. Наряду с функциями отправления и получения, завершающие
функции доступны для установки и опроса параметров конфигурации, сброса
устройств, индикации статуса.
|