Detección de bloqueo de LE
Algunos firmware tienen un temporizador guardián que puede detectar bloqueos de firmware. Algunos controladores IHV (LE) tienen lógica para detectar si el firmware no está avanzando. La UE permite que la LE indique estas condiciones.
La indicación debe estar en el puerto adaptador (por ejemplo, portid=0xFFFF). De forma predeterminada, las indicaciones desencadenan la LE para realizar el procedimiento de recuperación de restablecimiento completo: llamar al diagnóstico, recopilar información de depuración y solicitar PLDR.
Cuando el temporizador del guardián de firmware o LE detecta que el firmware se ha detenido, las expectativas de la UE son las siguientes.
Si está en D0,
- Le indica NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED.
- En la devolución de la indicación, el LE devuelve (si existe) el comando WDI detenido.
- La UE inicia el procedimiento Restablecer recuperación (RR).
Si se encuentra en Dx, esto solo puede ocurrir con el firmware detectado.
- El firmware genera una interrupción de reactivación.
- Al recibir un comando D0, indica el motivo de reactivación por el que el firmware se detuvo.
- Después de devolver el OID de D0 WDI, le indica NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED.
- Finalice el procedimiento como en D0: 1a, 1b y 1c.
Detección de bloqueos en Dx
Es posible que el firmware detenga el progreso en Dx. En este caso, Dx es D3Hot para PCIe NIC y D2 para USB y SDIO. La NIC está armada para reactivar y esperar mantener la asociación de punto de acceso de forma autónoma, o examinar NLO si no está asociada.
Cuando la NIC está en Dx, la comunicación con el host se bloquea porque el bus podría estar en estado de apagado. Por lo tanto, la LE no es capaz de detectar firmware detenido. El propio firmware tiene que detectar la condición y elevar la línea de reactivación (si la parte de reactivación del código todavía está activa) para llevar la pila a D0, indirectamente a través de ACPI o bus completando, NDIS wait_wake_irp. Debido a esto, NDIS establece D0 en la NIC.
El firmware confirma la reactivación de dicha condición. El LE debe indicar un motivo de reactivación para el puesto de firmware. El motivo de reactivación WDI_WAKE_REASON_CODE_FIRMWARE_STALLED se define como una enumeración con los otros motivos de reactivación.
Para que el restablecimiento de recuperación funcione en este escenario, al menos dos partes del firmware deben seguir funcionando.
- Código de detección de bloqueo.
- Código para declarar la interrupción de reactivación.
Si no hay ninguna, el lado host no sabe si el firmware está detenido y rr. Este escenario no forma parte del objetivo de diseño.
Recuperación de restablecimiento desencadenado por el módulo del sistema operativo
Esto es informativo para IHD. Además de los bloqueos detectados por UE y LE, otros componentes del sistema operativo pueden detectar bloqueos o desencadenar la UE para invocar el procedimiento restablecer recuperación. Actualmente, el componente wlansvc del modo de usuario en Windows 10 puede solicitar un restablecimiento de recuperación a UE cuando detecta una conexión con conectividad a Internet y, posteriormente, pierde la capacidad de acceder a un servidor DNS sin desasociación durante algún tiempo. En el futuro, Microsoft puede encontrar casos adicionales para desencadenar una recuperación de restablecimiento para mejorar las experiencias del usuario final.