Condividi tramite


Esecuzione di query sullo spazio di configurazione PCI per una funzione virtuale

Nota Questo metodo può essere usato solo tramite driver eccessivamente eseguiti nel sistema operativo di gestione della partizione padre Hyper-V.

Il driver miniport per una funzione virtuale PCI Express (PCIe) viene eseguito nel sistema operativo guest di una partizione figlio Hyper-V. Per questo motivo, il driver miniport VF non può accedere direttamente alle risorse hardware, ad esempio lo spazio di configurazione PCIe di VF. Solo il driver miniport per la funzione fisica PCIe (PF) può accedere allo spazio di configurazione PCIe per un VF. Il driver miniport PF viene eseguito nel sistema operativo di gestione di una partizione padre Hyper-V e ha accesso privilegiato alle risorse VF.

Un driver eccessivamente in esecuzione nel sistema operativo di gestione invia una richiesta di metodo OID (Object Identifier) di OID_SRIOV_READ_VF_CONFIG_SPACE per leggere i dati dallo spazio di configurazione PCIe per un VF specificato nella scheda di rete.

Ad esempio, lo stack di virtualizzazione eseguito nel sistema operativo di gestione invia la richiesta del metodo OID di OID_SRIOV_READ_VF_CONFIG_SPACE quando il driver miniport VF chiama NdisMGetBusData per leggere dallo spazio di configurazione PCIe VF.

Prima di eseguire questa richiesta di metodo OID, il driver overlying deve impostare i membri della struttura NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS nel modo seguente:

  • Il membro VFId deve essere impostato sull'identificatore della funzione VF da cui leggere le informazioni.

  • Il membro Offset deve essere impostato sull'offset all'interno dello spazio di configurazione PCIe del VF in cui verranno letti i dati.

  • Il membro Length deve essere impostato sul numero di byte da leggere dallo spazio di configurazione PCIe di VF.

  • Il membro BufferOffset deve essere impostato sull'offset all'interno del buffer (a cui fa riferimento il membro InformationBuffer ) che conterrà i dati letti dallo spazio di configurazione PCI VF specificato. Questo offset viene specificato in unità di byte dall'inizio della struttura NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS .

Quando gestisce la richiesta del metodo OID di OID_SRIOV_READ_VF_CONFIG_SPACE, il driver miniport PF deve seguire queste linee guida:

  • Il driver miniport deve verificare che il VF, specificato dal membro VFId della struttura NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS , disponga di risorse allocate in precedenza. Il driver miniport alloca le risorse per un VF tramite una richiesta di metodo OID di OID_NIC_SWITCH_ALLOCATE_VF. Se le risorse per il VF specificato non sono state allocate, il driver deve non riuscire la richiesta OID.

  • Il driver miniport deve verificare che il buffer (a cui fa riferimento il membro InformationBuffer della struttura NDIS_OID_REQUEST ) sia sufficientemente grande da restituire i dati dello spazio di configurazione PCIe richiesto. In caso contrario, il driver deve non riuscire la richiesta OID.

  • Il driver miniport chiama in genere NdisMGetVirtualFunctionBusData per eseguire una query sullo spazio di configurazione PCIe richiesto. Tuttavia, il driver miniport può anche restituire i dati dello spazio di configurazione PCIe per la funzione VF memorizzata nella cache dal driver dalle operazioni di lettura o scrittura precedenti dello spazio di configurazione PCIe.

    Nota Se un fornitore di hardware indipendente (IHV) fornisce un driver bus virtuale (VBD) come parte del pacchetto driver SR-IOV, il driver miniport non deve chiamare NdisMGetVirtualFunctionBusData. Al contrario, il driver deve interfacciarsi con VBD tramite un canale di comunicazione privato e richiedere che la chiamata VBD ReadVfConfigBlock. Questa funzione viene esposta dall'interfaccia GUID_VPCI_INTERFACE_STANDARD supportata dal driver bus PCI (VPCI) virtuale sottostante.

Una volta restituito correttamente da questa richiesta di metodo OID, il membro InformationBuffer della struttura NDIS_OID_REQUEST contiene un puntatore a un buffer allocato dal chiamante. Questo buffer è formattato per contenere quanto segue: