Détection de blocage LE

Certains microprogrammes ont un minuteur de surveillance qui peut détecter les blocages de microprogramme. Certains pilotes IHV (LE) ont une logique pour détecter si le microprogramme ne progresse pas. L’UE permet au LE d’indiquer ces conditions.

L’indication doit se trouver sur le port de l’adaptateur (par exemple, portid=0xFFFF). Par défaut, les indications déclenchent le LE pour effectuer la procédure de récupération de réinitialisation complète : appel du diagnostic, collecte d’informations de débogage et demande plDR.

Lorsque le minuteur LE ou le minuteur de surveillance du microprogramme détecte que le microprogramme s’est bloqué, les attentes de l’UE sont les suivantes.

  1. Si dans D0,

    1. Le LE indique NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED.
    2. Au retour de l’indication, le LE retourne (le cas échéant) la commande WDI bloquée.
    3. L’ue démarre la procédure Réinitialiser la récupération (RR).
  2. Si dans Dx, cela ne peut se produire qu’avec un blocage détecté du microprogramme.

    1. Le microprogramme déclenche l’interruption de veille.
    2. Lors de la réception d’une commande D0, indique la raison du blocage du microprogramme.
    3. Après avoir retourné l’OID D0 WDI, le LE indique NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED.
    4. Terminez la procédure comme dans D0 : 1a, 1b et 1c.

wdi le hang detection.

Détection de blocage dans Dx

Il est possible que le microprogramme arrête la progression dans Dx. Dans ce cas, Dx est D3Hot pour la carte réseau PCIe et D2 pour USB et SDIO. La carte réseau est armée pour se réveiller et doit maintenir l’association de point d’accès de manière autonome, ou analyser le NLO si elle n’est pas associée.

Lorsque la carte réseau se trouve dans Dx, la communication avec l’hôte est bloquée, car le bus peut être à l’état hors tension. Par conséquent, le LE n’est pas en mesure de détecter le microprogramme bloqué. Le microprogramme lui-même doit détecter la condition et déclencher la ligne de veille (si la partie wake du code est toujours active) pour ramener la pile à D0, indirectement via ACPI ou la fin du bus, NDIS wait_wake_irp. Pour cette raison, NDIS définit D0 sur la carte réseau.

Le microprogramme déclare wake pour une telle condition. Le LE doit indiquer une raison de sortie de veille pour le blocage du microprogramme. La raison de l’éveil WDI_WAKE_REASON_CODE_FIRMWARE_STALLED est définie comme un enum avec les autres raisons de l’éveil.

Pour que réinitialiser la récupération fonctionne dans ce scénario, au moins deux parties du microprogramme doivent toujours fonctionner.

  1. Code de détection de blocage.
  2. Code permettant d’affirmer l’interruption de veille.

En cas d’absence de l’une ou l’autre, le côté hôte ne sait pas si le microprogramme est bloqué et si la récupération de données ne se produit pas. Ce scénario ne fait pas partie de l’objectif de conception.

détection de blocage wdi dans dx.

Récupération de réinitialisation déclenchée par le module de système d’exploitation

Il s’agit d’informations pour les IHVs. Outre les blocages détectés par UE et LE, d’autres composants du système d’exploitation peuvent détecter des blocages et/ou déclencher l’ue pour appeler la procédure réinitialiser la récupération. Actuellement, le composant wlansvc en mode utilisateur dans Windows 10 peut demander une réinitialisation de la récupération à l’ue lorsqu’il détecte une connexion avec une connectivité Internet et perd par la suite la possibilité d’accéder à un serveur DNS sans dissociation pendant un certain temps. À l’avenir, Microsoft peut trouver d’autres cas pour déclencher une réinitialisation de la récupération afin d’améliorer les expériences des utilisateurs finaux.

NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED

WDI_TLV_INDICATION_WAKE_REASON