Partager via


Définition des données de configuration PCI d’une fonction virtuelle

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 PCI de la VF. Seul le pilote miniport pour la fonction physique PCIe (PF) peut accéder à l’espace de configuration PCI 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.

Le pilote de surlignement, tel que la pile de virtualisation, émet la demande de jeu OID de OID_SRIOV_WRITE_VF_CONFIG_SPACE lorsque le pilote VF miniport appelle NdisMSetBusData pour écrire dans son espace de configuration PCI.

Avant d’effectuer cette demande de jeu d’OID, le pilote en sur-position doit définir les membres de la structureNDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS de la manière suivante :

  • Définissez le membre VFId sur l’identificateur de la VF pour laquelle les informations doivent être écrites.

  • Définissez le membre Offset sur le décalage dans l’espace de configuration PCI de la VF dans laquelle les données seront écrites.

  • Définissez le membre Length sur le nombre d’octets à écrire dans l’espace de configuration PCI de la VF.

  • Définissez le membre BufferOffset sur le décalage dans la mémoire tampon (référencé par le membreInformationBuffer ) qui contiendra les données écrites dans 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_WRITE_VF_CONFIG_SPACE_PARAMETERS .

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

  • Le pilote pf miniport doit vérifier que le VF, spécifié par le membre VFId de la structure NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS , dispose de ressources qui ont déjà été allouées. Le pilote pf miniport alloue des ressources pour une machine virtuelle via une demande 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 pf miniport appelle NdisMSetVirtualFunctionBusData pour écrire dans l’espace de configuration PCI demandé. Toutefois, le pilote pf miniport peut également retourner des données d’espace de configuration PCI 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 PCI.

    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 pf miniport ne doit pas appeler NdisMSetVirtualFunctionBusData. Au lieu de cela, le pilote doit s’interfacer avec le VBD via un canal de communication privé et demander au VBD d’appeler SetVirtualFunctionData. 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.

Si le pilote pf miniport peut exécuter correctement la demande OID, il doit copier les données d’espace de configuration PCI demandées dans la mémoire tampon référencée par le membre InformationBuffer de la structure NDIS_OID_REQUEST . Le pilote copie les données dans la mémoire tampon au décalage spécifié par le membreBufferOffset de la structure NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS .