LE 當機偵測
某些韌體具有可偵測韌體停止回應的監視程式定時器。 某些 IHV 驅動程式 (LE) 有邏輯可偵測韌體是否未向前推進。 UE 可讓 LE 指出這類條件。
指示應位於配接器埠上(例如 portid=0xFFFF)。 根據預設,指示會觸發 LE 來執行完整重設復原程式 -- 呼叫診斷、收集偵錯資訊,以及要求 PLDR。
當 LE 或韌體監視程式定時器偵測到韌體停滯時,來自 UE 的預期如下所示。
如果在 D0 中,則為
- LE 表示 NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED。
- 在返回指示時,如果有停止的 WDI 命令,LE 會將其傳回。
- UE 會啟動重設復原 (RR) 程式。
如果位於 Dx 中,這只能在偵測到韌體停滯的情況下發生。
- 韌體會引發喚醒中斷。
- 在接收 D0 命令時,表示韌體停止的原因。
- 傳回 D0 WDI OID 之後,LE 會指出 NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED。
- 完成程式,如 D0:1a、1b 和 1c。
Dx 中的停止偵測
韌體有可能在 Dx 中停止進度。 在此情況下,Dx 是適用於PCIe NIC的 D3Hot,而適用於USB和 SDIO 則為 D2。 NIC 已準備好喚醒,並預期能自主維持接入點的關聯,如果未關聯,則掃描 NLO。
當 NIC 處於 Dx 時,因為總線可能處於關閉電源狀態,所以會封鎖與主機的通訊。 因此,LE 無法偵測停滯的韌體。 韌體本身必須偵測條件並引發喚醒線(如果程式代碼的喚醒部分仍在運作中),才能透過ACPI或總線完成間接將堆棧帶入 D0,NDIS wait_wake_irp。 因此,NDIS 會將 D0 設定為 NIC。
韌體會啟動喚醒以應對這類情況。 LE 應該指出韌體停止的喚醒原因。 喚醒原因 WDI_WAKE_REASON_CODE_FIRMWARE_STALLED 被定義為與其他喚醒原因一起的列舉常數。
若要讓重設復原在此案例中運作,韌體中至少有兩個部分仍必須正常運作。
- 偵測當機碼。
- 設置喚醒中斷的代碼。
如果缺少任一項,主機端就不知道韌體是否已停止,且 RR 不會發生。 此案例不屬於設計目標的一部分。
作業系統模組觸發的重設恢復
對獨立硬體供應商的資訊。 除了 UE 和 LE 偵測到的停止回應之外,其他 OS 元件可能會偵測到停止回應,並且/或者觸發 UE 來執行重置恢復程序。 目前,Windows 10 中的使用者模式 wlansvc 元件可能會在偵測到與因特網的連線並隨後長時間無法存取 DNS 伺服器時,要求對 UE 執行重設復原,而不會在這段期間中斷連線。 未來,Microsoft可能會發現其他情況來觸發重設復原,以增強用戶體驗。