Partager via


Communication backchannel à partir du pilote PF Miniport

Un pilote miniport de la fonction physique PCI Express (PCIe) communique avec un pilote miniport de la fonction virtuelle PCIe (VF) pour émettre des notifications concernant les modifications apportées aux données d’un bloc de configuration VF. Le pilote pf miniport émet ces notifications pour invalider les données dans le bloc de configuration VF. En réponse à cette notification, le pilote miniport VF peut envoyer une demande de canal arrière au pilote pf miniport pour lire les données d’un bloc de configuration VF invalidé.

Un bloc de configuration VF est utilisé pour la communication backchannel entre les pilotes PF et VF miniport. L’IHV peut définir un ou plusieurs blocs de configuration VF pour l’appareil. Chaque bloc de configuration VF a un format, une longueur et un ID de bloc définis par IHV.

Note Les données de chaque bloc de configuration VF sont utilisées uniquement par les pilotes PF et VF miniport. Le format et le contenu de ces données sont opaques pour les composants du système d’exploitation Windows.

Les étapes suivantes se produisent lors de l’émission et de la gestion des notifications de données de configuration VF non valides :

  1. Dans le système d’exploitation invité, NDIS émet une demande de contrôle d’E/S de IOCTL_VPCI_INVALIDATE_BLOCK. Une fois ce IOCTL terminé, NDIS est averti que les données de configuration VF ont changé.

  2. Dans le système d’exploitation de gestion qui s’exécute dans la partition parente Hyper-V, les étapes suivantes se produisent :

    1. Le pilote pf miniport appelle la fonction NdisMInvalidateConfigBlock pour notifier NDIS que les données de configuration VF ont changé et ne sont plus valides. Le pilote définit le paramètre BlockMask sur un masque de bits ULONGLONG qui spécifie les blocs de configuration VF qui ont été modifiés. Chaque bit dans le masque de bits correspond à un bloc de configuration VF. Si le bit est défini sur un, les données du bloc de configuration VF correspondant ont changé.

    2. NDIS signale à la pile de virtualisation, qui s’exécute dans le système d’exploitation de gestion, la modification des données de blocs de configuration VF. La pile de virtualisation met en cache les données du paramètre BlockMask .

      Note Chaque fois que le pilote PF miniport appelle NdisMInvalidateConfigBlock, la pile de virtualisation oRs les données du paramètre BlockMask avec la valeur actuelle dans son cache.

    3. La pile de virtualisation informe le pilote PCI virtuel (VPCI), qui s’exécute dans le système d’exploitation invité, de l’invalidation des données de configuration VF. La pile de virtualisation envoie les données de paramètre BlockMask mises en cache au pilote VPCI.

  3. Dans le système d’exploitation invité qui s’exécute dans une partition enfant Hyper-V, les étapes suivantes se produisent :

    1. Le pilote VPCI enregistre les données de paramètre BlockMask mises en cache dans le membre BlockMask de la structure VPCI_INVALIDATE_BLOCK_OUTPUT associée à la requête IOCTL_VPCI_INVALIDATE_BLOCK .

    2. Le pilote VPCI termine correctement la demande de IOCTL_VPCI_INVALIDATE_BLOCK . Dans ce cas, NDIS émet une demande de méthode d’identificateur d’objet (OID) de OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK au pilote miniport VF. Un NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO est transmis dans la requête OID. Cette structure contient les données de paramètre BlockMask mises en cache.

      NDIS émet également une autre demande IOCTL_VPCI_INVALIDATE_BLOCK pour gérer les notifications successives des modifications apportées aux données de configuration VF.

    3. Lorsque le pilote VF gère la demande de OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK , il peut lire les données des blocs de configuration VF spécifiés en appelant NdisMReadConfigBlock. Pour plus d’informations sur ce processus, consultez Communication backchannel à partir d’un pilote VF Miniport.