OID_PNP_SET_POWER
OID OID_PNP_SET_POWER уведомляет драйвер минипорта о том, что его базовый сетевой адаптер будет переходить в состояние питания устройства, указанное в InformationBuffer. Состояние питания устройства указывается как одно из следующих NDIS_DEVICE_POWER_STATE значений:
- NdisDeviceStateD0
- NdisDeviceStateD1
- NdisDeviceStateD2
- NdisDeviceStateD3
Запросу OID_PNP_SET_POWER может предшествовать запрос OID_PNP_QUERY_POWER .
Начиная с версии NDIS 6.30, NDIS не будет приостанавливать и перезапускать драйверы NDIS в стеке драйверов во время перехода состояния питания, если выполняются следующие условия:
Базовый драйвер мини-порта устанавливает флаг NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND в структуре NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES . Драйвер передает указатель на эту структуру в вызове функции NdisMSetMiniportAttributes .
Все драйверы фильтров, подключенные к драйверу мини-порта, поддерживают NDIS 6.30 или более поздние версии NDIS.
Все драйверы протоколов, привязанные к драйверу минипорта, поддерживают NDIS 6.30 или более поздние версии NDIS.
Переход в состояние Low-Power (D1–D3)
Когда драйвер минипорта обрабатывает запрос набора OID_PNP_SET_POWER для перехода в состояние с низким энергопотреблением, он должен выполнить следующие действия.
Полностью подготовьте сетевой адаптер к указанному состоянию питания сетевого устройства. Задача, выполняемая драйвером мини-порта для этого, зависит от устройства.
Дождитесь возврата вызовов функции NdisMIndicateReceiveNetBufferLists .
Дождитесь завершения запросов на отправку, обработанных сетевым адаптером. После завершения работы драйвер мини-порта должен вызвать функцию NdisMSendNetBufferListsComplete . Драйвер должен задать для элемента Status в каждой структуре NET_BUFFER_LIST соответствующее значение NDIS_STATUS_Xxx .
Выполните все ожидающие отправки запросы, вызвав функцию NdisMSendNetBufferListsComplete . Драйвер должен задать для элемента Status в каждой структуре NET_BUFFER_LISTзначение NDIS_STATUS_LOW_POWER_STATE.
Немедленно отклоните все новые запросы на отправку, выполненные в ее функции MiniportSendNetBufferLists , вызвав функцию NdisMSendNetBufferListsComplete . Драйвер должен задать для элемента Status в каждой структуре NET_BUFFER_LISTзначение NDIS_STATUS_LOW_POWER_STATE.
Драйвер miniport, поддерживающий NDIS 6.30 и более поздние версии NDIS, также должен выполнять следующие действия:
Не дожидаться завершения ожидающих получения указаний с помощью вызовов функции MiniportReturnNetBufferLists . Кроме того, драйвер мини-порта не должен изменять структуру NET_BUFFER_LIST или данные для пакетов, ожидающих завершения.
Обработка OID_PNP_SET_POWER запроса к состоянию с низким энергопотреблением из состояний адаптера Приостановлено или Работает. Дополнительные сведения об этих состояниях см. в разделе Состояния и операции адаптера Miniport.
Перед переходом сетевого адаптера в состояние D3 драйвер мини-порта должен отключить все, что находится под контролем драйвера минипорта, выполнив следующие задачи:
Отключите прерывания и подсистему DMA на сетевом адаптере.
Остановите обработчик приема в сетевом адаптере.
Не отменяйте выделение и не изменяйте дескрипторы приема и буферы пакетов, связанные с ожидающими указаниями получения.
Отмена всех таймеров NDIS.
Примечание Драйвер мини-порта не может получить доступ к сетевому адаптеру после того, как драйвер шины переведет сетевой адаптер в состояние D3.
Переход в состояние Full-Power (D0)
Когда драйвер мини-порта обрабатывает запрос набора OID_PNP_SET_POWER для перехода в состояние полной мощности, он должен восстановить подсистему приема сетевого адаптера в том же состоянии, в которое находился обработчик приема до перехода адаптера в состояние с низким энергопотреблением.
Примечание Драйвер мини-порта не должен обращаться к буферам приема, связанным с ожидающими указаниями получения, или изменять их.
NDIS вызывает функцию MiniportRestart драйвера минипорта после перехода в состояние полной мощности, только если NDIS вызывал функцию MiniportPause драйвера перед переходом в состояние с низким энергопотреблением.
Примечание Промежуточный драйвер всегда должен возвращать NDIS_STATUS_SUCCESS в запрос OID_PNP_SET_POWER. Промежуточный драйвер никогда не должен распространять запрос OID_PNP_SET_POWER на базовый драйвер мини-порта.
Коды состояния возврата
Функция MiniportOidRequest драйвера miniport возвращает одно из следующих значений для этого запроса:
Термин | Описание |
---|---|
NDIS_STATUS_SUCCESS |
Драйвер мини-порта успешно выполнил запрос. |
NDIS_STATUS_PENDING |
Драйвер мини-порта выполнит запрос асинхронно. После того как драйвер мини-порта завершит всю обработку, он должен выполнить запрос, вызвав функцию NdisMOidRequestComplete , передав NDIS_STATUS_SUCCESS для параметра Status . |
NDIS_STATUS_NOT_ACCEPTED |
Драйвер минипорта сбрасывается. |
Требования
Версия |
Поддерживается для NDIS 5.1 и NDIS 6.0 и более поздних версий. |
Заголовок |
Ntddndis.h (включая Ndis.h) |
См. также раздел
NdisMIndicateReceiveNetBufferLists