Comunicação backchannel de um driver de miniporto VF
Um driver de miniporta de uma VF (Função Virtual) PCI Express (PCIe) se comunica com o driver de miniporto da função física PCIe (PF) para ler ou gravar dados de um bloco de configuração de VF.
Um bloco de configuração de VF é usado para comunicação backchannel entre os drivers de miniporto PF e VF. O IHV (fornecedor independente de hardware) pode definir um ou mais blocos de configuração de VF para o dispositivo. Cada bloco de configuração de VF tem um formato definido por IHV, comprimento e ID de bloco. Por exemplo, o IHV pode definir um bloco de configuração de VF que pode ser usado para o endereço MAC (controle de acesso à mídia) do driver de miniporto VF. Outro bloco de configuração de VF pode ser usado para a configuração atual de VF e VPort (porta virtual).
Nota Os dados de cada bloco de configuração de VF são usados apenas pelos drivers de miniporto PF e VF. O formato e o conteúdo desses dados são opacos aos componentes do sistema operacional Windows.
Cada bloco de configuração de VF recebe um identificador exclusivo pelo IHV. Isso permite que o driver de miniporto VF consulte ou defina informações sobre blocos de configuração de VF específicos.
Os drivers de miniporto VF iniciam a operação de leitura ou gravação em um bloco de configuração de VF especificado por meio das seguintes funções:
NdisMReadConfigBlock, que lê dados de um bloco de configuração de VF especificado. Quando o driver de miniporto VF chama essa função, ele especifica o identificador de bloco e o comprimento dos dados a serem lidos. O driver também passa um ponteiro para o buffer que conterá os dados solicitados.
NdisMWriteConfigBlock, que grava dados em um bloco de configuração de VF especificado. Quando o driver de miniporto VF chama essa função, ele especifica o identificador de bloco e o comprimento dos dados a serem gravados. O driver também passa um ponteiro para o buffer do qual os dados devem ser gravados.
O driver de miniporto PF gerencia o acesso ao bloco de configuração de VF especificado das seguintes maneiras:
Quando o driver de miniporta VF chama NdisMReadConfigBlock, o NDIS emite uma solicitação de método OID (identificador de objeto) de OID_SRIOV_READ_VF_CONFIG_BLOCK para o driver de miniporto PF. Essa solicitação OID contém os dados de parâmetro que foram passados pelo driver de miniporto VF na chamada de função.
O driver de miniporto PF executa a operação de leitura e retorna os dados solicitados quando o driver conclui a solicitação OID. Depois que a solicitação OID for concluída, o NDIS retornará da chamada para NdisMReadConfigBlock.
Quando o driver de miniporta VF chama NdisMWriteConfigBlock, o NDIS emite uma solicitação de método OID de OID_SRIOV_WRITE_VF_CONFIG_BLOCK para o driver de miniporto PF. Essa solicitação OID contém os dados de parâmetro que foram passados pelo driver de miniporto VF na chamada de função.
O driver de miniporto PF executa a operação de gravação e conclui a solicitação OID. Depois que a solicitação OID for concluída, o NDIS retornará da chamada para NdisMWriteConfigBlock.
A figura a seguir mostra o processo envolvido na leitura e gravação de blocos de configuração de VF sobre a interface de backchannel SR-IOV.