Partilhar via


Definindo os dados de configuração de PCI de uma função virtual

O driver de miniporto para uma VF (função virtual) PCI Express (PCIe) é executado no sistema operacional convidado de uma partição filho do Hyper-V. Por isso, o driver de miniporto VF não pode acessar diretamente recursos de hardware, como o espaço de configuração PCI do VF. Somente o driver de miniporto para a função física pcie (PF) pode acessar o espaço de configuração PCI para um VF. O driver de miniporto PF é executado no sistema operacional de gerenciamento de uma partição pai do Hyper-V e tem acesso privilegiado aos recursos do VF.

O driver sobreposto, como a pilha de virtualização, emite a solicitação de conjunto de OID de OID_SRIOV_WRITE_VF_CONFIG_SPACE quando o driver de miniporto VF chama NdisMSetBusData para gravar em seu espaço de configuração PCI.

Antes de emitir essa solicitação de conjunto de OID, o driver sobreposto deve definir os membros da estruturaNDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS da seguinte maneira:

  • Defina o membro VFId como o identificador do VF para o qual as informações devem ser gravadas.

  • Defina o membro Offset como o deslocamento dentro do espaço de configuração PCI do VF no qual os dados serão gravados.

  • Defina o membro Length como o número de bytes a serem gravados no espaço de configuração PCI do VF.

  • Defina o membro BufferOffset como o deslocamento dentro do buffer (referenciado pelo membroInformationBuffer ) que conterá os dados gravados no espaço de configuração PCI do VF especificado. Esse deslocamento é especificado em unidades de bytes desde o início da estrutura NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS .

Quando ele lida com a solicitação de método OID de OID_SRIOV_WRITE_VF_CONFIG_SPACE, o driver de miniporto PF deve seguir estas diretrizes:

  • O driver de miniporto PF deve verificar se o VF, especificado pelo membro VFId da estrutura NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS , tem recursos que foram alocados anteriormente. O driver de miniporto PF aloca recursos para um VF por meio de uma solicitação de método OID de OID_NIC_SWITCH_ALLOCATE_VF.

    Se os recursos do VF especificado não tiverem sido alocados, o driver deverá falhar na solicitação OID.

  • O driver de miniporto PF chama NdisMSetVirtualFunctionBusData para gravar no espaço de configuração PCI solicitado. No entanto, o driver de miniporto PF também pode retornar dados de espaço de configuração PCI para o VF que o driver armazena em cache de operações de leitura ou gravação anteriores do espaço de configuração PCI.

    Nota Se um IHV (fornecedor independente de hardware) fornecer um VBD (driver de barramento virtual) como parte de seu pacote de driver SR-IOV, seu driver de miniporto PF não deverá chamar NdisMSetVirtualFunctionBusData. Em vez disso, o driver deve fazer a interface com o VBD por meio de um canal de comunicação privado e solicitar que o VBD chame SetVirtualFunctionData. Essa função é exposta da interface GUID_VPCI_INTERFACE_STANDARD compatível com o driver de barramento VPCI (PCI virtual) subjacente.

Se o driver de miniporto PF puder concluir com êxito a solicitação OID, o driver deverá copiar os dados de espaço de configuração PCI solicitados para o buffer referenciado pelo membro InformationBuffer da estrutura de NDIS_OID_REQUEST . O driver copia os dados para o buffer no deslocamento especificado pelo membroBufferOffset da estrutura NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS .