Share via


Comunicação backchannel do driver de miniporto PF

Um driver de miniporta da PF (Função Física) PCI Express (PCIe) se comunica com um driver de miniporta da FUNÇÃO Virtual PCIe (VF) para emitir notificações sobre alterações nos dados de um bloco de configuração de VF. O driver de miniporta PF emite essas notificações para invalidar os dados no bloco de configuração do VF. Em resposta a essa notificação, o driver de miniporta VF pode emitir uma solicitação de backchannel para o driver de miniporto PF para ler os dados de um bloco de configuração VF invalidado.

Um bloco de configuração de VF é usado para comunicação backchannel entre os drivers de miniporto PF e VF. O IHV 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.

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.

As seguintes etapas ocorrem ao emitir e manipular notificações de dados de configuração de VF inválidos:

  1. No sistema operacional convidado, o NDIS emite uma solicitação de controle de E/S de IOCTL_VPCI_INVALIDATE_BLOCK. Quando esse IOCTL é concluído, o NDIS é notificado de que os dados de configuração do VF foram alterados.

  2. No sistema operacional de gerenciamento executado na partição pai do Hyper-V, ocorrem as seguintes etapas:

    1. O driver de miniporto PF chama a função NdisMInvalidateConfigBlock para notificar o NDIS de que os dados de configuração do VF foram alterados e não são mais válidos. O driver define o parâmetro BlockMask como uma máscara de bits ULONGLONG que especifica quais blocos de configuração de VF foram alterados. Cada bit na máscara de bits corresponde a um bloco de configuração de VF. Se o bit for definido como um, os dados no bloco de configuração do VF correspondente serão alterados.

    2. O NDIS sinaliza a pilha de virtualização, que é executada no sistema operacional de gerenciamento, sobre a alteração nos dados do bloco de configuração do VF. A pilha de virtualização armazena em cache os dados do parâmetro BlockMask .

      Nota Cada vez que o driver de miniporto PF chama NdisMInvalidateConfigBlock, a pilha de virtualização ORs os dados do parâmetro BlockMask com o valor atual em seu cache.

    3. A pilha de virtualização notifica o driver VPCI (PCI virtual), que é executado no sistema operacional convidado, sobre a invalidação de dados de configuração de VF. A pilha de virtualização envia os dados do parâmetro BlockMask armazenados em cache para o driver VPCI.

  3. No sistema operacional convidado que é executado em uma partição filho do Hyper-V, ocorrem as seguintes etapas:

    1. O driver VPCI salva os dados de parâmetro BlockMask armazenados em cache no membro BlockMask da estrutura VPCI_INVALIDATE_BLOCK_OUTPUT associada à solicitação IOCTL_VPCI_INVALIDATE_BLOCK .

    2. O driver VPCI conclui com êxito a solicitação de IOCTL_VPCI_INVALIDATE_BLOCK . Quando isso acontece, o NDIS emite uma solicitação de método OID (identificador de objeto) de OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK para o driver de miniporto VF. Um NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO é passado na solicitação OID. Essa estrutura contém os dados de parâmetro BlockMask armazenados em cache.

      O NDIS também emite outra solicitação IOCTL_VPCI_INVALIDATE_BLOCK para lidar com notificações sucessivas de alterações nos dados de configuração do VF.

    3. Quando o driver VF lida com a solicitação OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK , ele pode ler dados dos blocos de configuração de VF especificados chamando NdisMReadConfigBlock. Para obter mais informações sobre esse processo, consulte Comunicação backchannel de um driver de miniporto VF.