Обнаружение зависания le
Некоторые встроенное ПО имеют таймер наблюдения, который может обнаруживать зависание встроенного ПО. Некоторые драйверы IHV (LE) имеют логику, чтобы определить, не выполняется ли прогресс встроенного ПО. UE позволяет le le указывать такие условия.
Указание должно находиться в порте адаптера (например, portid=0xFFFF). По умолчанию индикаторы запускают LE для выполнения процедуры полного сброса восстановления— вызова диагностики, сбора отладочной информации и запроса PLDR.
Когда таймер отслеживания LE или встроенного ПО обнаруживает, что встроенное ПО застопорилось, ожидания от UE выдаются следующим образом.
Если в D0,
- Le указывает на NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED.
- При возврате из указания LE возвращает (если таковой есть) застопорив команду WDI.
- UE запускает процедуру сброса восстановления (RR).
Если в Dx, это может произойти только при обнаружении остановки встроенного ПО.
- Встроенное ПО вызывает прерывание пробуждения.
- При получении команды D0 указывает причину пробуждения, по которой зависло встроенное ПО.
- После возврата идентификатора WDI D0 le указывает на NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED.
- Завершите процедуру, как в D0: 1a, 1b и 1c.
Обнаружение зависаний в Dx
Возможно, что встроенное ПО перестает работать в Dx. В этом случае Dx имеет значение D3Hot для сетевого адаптера PCIe и D2 для USB и SDIO. Сетевой адаптер вооружен для пробуждения и, как ожидается, будет поддерживать связь точки доступа автономно или сканировать NLO, если она не связана.
Если сетевой адаптер находится в Dx, обмен данными с узлом блокируется, так как шина может находиться в состоянии выключения питания. Таким образом, le не может обнаружить зависание встроенного ПО. Встроенное ПО само по себе необходимо определить условие и вызвать линию пробуждения (если часть кода для пробуждения все еще активна), чтобы перевести стек в D0, косвенно через ACPI или завершение шины, NDIS wait_wake_irp. В связи с этим NDIS устанавливает D0 в сетевой адаптер.
Встроенное ПО подтверждает пробуждение для такого условия. Le должен указывать причину пробуждения для остановки встроенного ПО. Причина пробуждения WDI_WAKE_REASON_CODE_FIRMWARE_STALLED определяется как перечисление с другими причинами пробуждения.
Чтобы восстановление сброса работало в этом сценарии, по крайней мере две части встроенного ПО по-прежнему должны работать.
- Код обнаружения зависаний.
- Код для утверждения прерывания пробуждения.
При отсутствии любого из них сторона узла не знает, зависло ли встроенное ПО и RR не происходит. Этот сценарий не является частью цели разработки.
Восстановление сброса, активированное модулем ОС
Это информационное для IHV. Помимо обнаруженных зависаний UE и LE, другие компоненты ОС могут обнаруживать зависания и (или) активировать UE для вызова процедуры сброса восстановления. В настоящее время компонент wlansvc пользовательского режима в Windows 10 может запросить восстановление сброса в UE, когда обнаруживает подключение с подключением к Интернету и впоследствии теряет возможность доступа к DNS-серверу без отмены связи в течение некоторого времени. В будущем корпорация Майкрософт может найти дополнительные варианты активации восстановления сброса для улучшения взаимодействия с конечными пользователями.