Detecção de travamento le
Alguns firmware têm um temporizador watchdog que pode detectar travas de firmware. Alguns LE (drivers IHV) têm lógica para detectar se o firmware não está progredindo. A UE permite que o LE indique essas condições.
A indicação deve estar na porta do Adaptador (por exemplo, portid=0xFFFF). Por padrão, as indicações disparam o LE para executar o procedimento de recuperação de redefinição completa : chamar diagnosticar, coletar informações de depuração e solicitar PLDR.
Quando o temporizador le ou firmware watchdog detecta que o firmware parou, as expectativas da UE são as seguintes.
Se estiver em D0,
- O LE indica NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED.
- No retorno da indicação, o LE retorna (se houver) o comando WDI paralisado.
- A UE inicia o procedimento de Recuperação de Redefinição (RR).
Se estiver no Dx, isso só poderá ocorrer com o firmware detectado.
- O firmware gera interrupção de ativação.
- Ao receber um comando D0, indica o motivo da ativação do motivo pelo qual o firmware parou.
- Depois de retornar d0 OID WDI, o LE indica NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED.
- Conclua o procedimento como em D0: 1a, 1b e 1c.
Detecção de travamento no Dx
É possível que o firmware pare o progresso no Dx. Nesse caso, Dx é D3Hot para PCIe NIC e D2 para USB e SDIO. A NIC está armada para ativar e espera-se que mantenha a associação de ponto de acesso de forma autônoma ou verifique o NLO se não estiver associado.
Quando a NIC está em Dx, a comunicação com o host é bloqueada porque o barramento pode estar no estado de desligar. Portanto, o LE não é capaz de detectar firmware paralisado. O firmware em si precisa detectar a condição e elevar a linha de ativação (se a parte de ativação do código ainda estiver ativa) para trazer a pilha para D0, indiretamente por meio de ACPI ou conclusão de barramento, wait_wake_irp NDIS. Devido a isso, o NDIS define D0 como a NIC.
O firmware declara a ativação para tal condição. O LE deve indicar um motivo de ativação para a parada de firmware. O motivo da ativação WDI_WAKE_REASON_CODE_FIRMWARE_STALLED é definido como uma enumeração com os outros motivos de ativação.
Para que a Recuperação de Redefinição funcione nesse cenário, pelo menos duas partes do firmware ainda devem funcionar.
- O código de detecção de travamento.
- O código para declarar a interrupção de ativação.
Se houver uma falta de um deles, o lado host não saberá se o firmware está paralisado e o RR não acontece. Esse cenário não faz parte da meta de design.
Recuperação de redefinição disparada pelo módulo do sistema operacional
Isso é informativo para IHVs. Além das travas detectadas por UE e LE, outros componentes do sistema operacional podem detectar travas e/ou disparar a UE para invocar o procedimento de Recuperação de Redefinição. Atualmente, o componente wlansvc do modo de usuário no Windows 10 pode solicitar uma Recuperação de Redefinição para UE quando detecta uma conexão com a conectividade com a Internet e, posteriormente, perde a capacidade de acessar um servidor DNS sem desassociação por algum tempo. No futuro, a Microsoft poderá encontrar casos adicionais para disparar uma Recuperação de Redefinição para aprimorar as experiências do usuário final.