Partager via


Interrogation de l’espace de configuration PCI pour une fonction virtuelle

Note Cette méthode ne peut être utilisée qu’en superposant les pilotes qui s’exécutent dans le système d’exploitation de gestion de la partition parente Hyper-V.

Le pilote miniport pour une fonction virtuelle PCI Express (PCIe) s’exécute dans le système d’exploitation invité d’une partition enfant Hyper-V. Pour cette raison, le pilote miniport VF ne peut pas accéder directement aux ressources matérielles, telles que l’espace de configuration PCIe de la VF. Seul le pilote miniport pour la fonction physique PCIe (PF) peut accéder à l’espace de configuration PCIe pour une VF. Le pilote pf miniport s’exécute dans le système d’exploitation de gestion d’une partition parente Hyper-V et dispose d’un accès privilégié aux ressources VF.

Un pilote qui s’exécute dans le système d’exploitation de gestion émet une demande de méthode d’identificateur d’objet (OID) de OID_SRIOV_READ_VF_CONFIG_SPACE de lire les données de l’espace de configuration PCIe pour une VF spécifiée sur la carte réseau.

Par exemple, la pile de virtualisation qui s’exécute dans le système d’exploitation de gestion émet la demande de méthode OID de OID_SRIOV_READ_VF_CONFIG_SPACE lorsque le pilote VF miniport appelle NdisMGetBusData pour lire à partir de son espace de configuration PCIe VF.

Avant d’effectuer cette demande de méthode OID, le pilote qui se superpose doit définir les membres de la structure NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS de la manière suivante :

  • Le membre VFId doit être défini sur l’identificateur de la VF à partir de laquelle les informations doivent être lues.

  • Le membre Offset doit être défini sur le décalage dans l’espace de configuration PCIe de la VF dans laquelle les données seront lues.

  • Le membre Length doit être défini sur le nombre d’octets à lire à partir de l’espace de configuration PCIe de la VF.

  • Le membre BufferOffset doit être défini sur le décalage dans la mémoire tampon (référencé par le membre InformationBuffer ) qui contiendra les données lues à partir de l’espace de configuration PCI de la VF spécifiée. Ce décalage est spécifié en unités d’octets à partir du début de la structure NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS .

Lorsqu’il gère la demande de méthode OID de OID_SRIOV_READ_VF_CONFIG_SPACE, le pilote pf miniport doit suivre les instructions suivantes :

  • Le pilote miniport doit vérifier que le VF, spécifié par le membre VFId de la structure NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS , dispose de ressources qui ont déjà été allouées. Le pilote miniport alloue des ressources pour une machine virtuelle via une requête de méthode OID de OID_NIC_SWITCH_ALLOCATE_VF. Si les ressources de la VF spécifiée n’ont pas été allouées, le pilote doit échouer dans la requête OID.

  • Le pilote miniport doit vérifier que la mémoire tampon (référencée par le membre InformationBuffer de la structure NDIS_OID_REQUEST ) est suffisamment grande pour renvoyer les données d’espace de configuration PCIe demandées. Si ce n’est pas vrai, le pilote doit échouer la requête OID.

  • Le pilote miniport appelle généralement NdisMGetVirtualFunctionBusData pour interroger l’espace de configuration PCIe demandé. Toutefois, le pilote miniport peut également retourner des données d’espace de configuration PCIe pour la VF mise en cache par le pilote à partir des opérations de lecture ou d’écriture précédentes de l’espace de configuration PCIe.

    Note Si un fournisseur de matériel indépendant (IHV) fournit un pilote de bus virtuel (VBD) dans le cadre de son package de pilotes SR-IOV, son pilote miniport ne doit pas appeler NdisMGetVirtualFunctionBusData. Au lieu de cela, le pilote doit s’interfacer avec le VBD via un canal de communication privé et demander au VBD d’appeler ReadVfConfigBlock. Cette fonction est exposée à partir de l’interface GUID_VPCI_INTERFACE_STANDARD prise en charge par le pilote de bus PCI virtuel (VPCI) sous-jacent.

Après un retour réussi de cette demande de méthode OID, le membre InformationBuffer de la structure NDIS_OID_REQUEST contient un pointeur vers une mémoire tampon allouée à l’appelant. Cette mémoire tampon est mise en forme pour contenir les éléments suivants :