Determinando as funcionalidades de comutador NIC

Este tópico descreve como os drivers NDIS e overlying determinam os recursos de comutador NIC de um adaptador de rede que dá suporte à virtualização de E/S de raiz única (SR-IOV). Este tópico inclui as informações a seguir:

Relatar funcionalidades de comutador NIC durante MiniportInitializeEx

Consultando funcionalidades de comutador NIC por drivers overlying

Nota Somente o driver de miniporto para a PF (Função Física) PCI Express (PCIe) de um adaptador de rede SR-IOV pode relatar os recursos de comutador NIC. Os drivers de miniport para VFs (PcIe Virtual Functions) não devem relatar os recursos de comutador NIC do adaptador SR-IOV.

Para obter mais informações sobre comutadores NIC, consulte Comutadores NIC.

Relatar funcionalidades de comutador NIC durante MiniportInitializeEx

Quando o NDIS chama a função MiniportInitializeEx do driver de miniport, o driver fornece os seguintes recursos de comutador NIC:

  • O conjunto completo de recursos de hardware para um comutador NIC que o adaptador de rede pode dar suporte.

    Nota A partir do NDIS 6.30, apenas um comutador NIC é criado no adaptador de rede. Essa opção é conhecida como a opção NIC padrão.

  • Os recursos de comutador NIC que estão atualmente habilitados no adaptador de rede.

O driver de miniporto relata os recursos de hardware de comutador NIC do adaptador de rede subjacente por meio de uma estrutura NDIS_NIC_SWITCH_CAPABILITIES inicializada da seguinte maneira:

  1. O driver de miniporta inicializa o membro Header . O driver define o membro Tipo de Cabeçalho como NDIS_OBJECT_TYPE_DEFAULT.

    A partir do NDIS 6.30, o driver de miniporto define o membro Revision de Header como NDIS_NIC_SWITCH_CAPABILITIES_REVISION_2 e o membro Size como NDIS_SIZEOF_NIC_SWITCH_CAPABILITIES_REVISION_2.

  2. O driver de miniporto define os sinalizadores apropriados no membro NicSwitchCapabilities da estrutura NDIS_NIC_SWITCH_CAPABILITIES para os recursos de comutador NIC do adaptador de rede SR-IOV. Por exemplo, o driver de miniporto define o sinalizador NDIS_NIC_SWITCH_CAPS_PER_VPORT_INTERRUPT_MODERATION_SUPPORTED se a opção NIC oferecer suporte à moderação de interrupção em cada porta virtual (VPort) criada na opção .

  3. O driver de miniporto define os outros membros da estrutura NDIS_NIC_SWITCH_CAPABILITIES para o intervalo de valores para os recursos de comutador NIC do adaptador de rede SR-IOV. Por exemplo, o driver de miniporto define os membros MaxNumVFs e MaxNumVPorts com o número máximo de VFs e VPorts que o adaptador pode dar suporte.

    Nota Dependendo dos recursos de hardware disponíveis no adaptador de rede, o driver de miniporto pode definir o membro MaxNumVFs como um valor menor que seus *NumVFs palavra-chave. Para obter mais informações sobre esse palavra-chave, consulte Palavras-chave INF padronizadas para SR-IOV.

Quando o NDIS chama a função MiniportInitializeEx do driver de miniport, o driver registra os recursos de comutador NIC do adaptador de rede seguindo estas etapas:

  1. O driver de miniporta inicializa uma estrutura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .

    O driver de miniporte define o membro HardwareNicSwitchCapabilities como um ponteiro para uma estrutura de NDIS_NIC_SWITCH_CAPABILITIES inicializada anteriormente.

    Se a configuração do Registro para o *SRIOV INF palavra-chave tiver um valor igual a um, o adaptador de rede está habilitado atualmente para criação e configuração do comutador NIC. O driver de miniporto define os membros CurrentNicSwitchCapabilities como um ponteiro para o mesmo NDIS_NIC_SWITCH_CAPABILITIES estrutura.

    Se a configuração do Registro para o *SRIOV INF palavra-chave tiver um valor igual a zero, o adaptador de rede não está habilitado atualmente para criação e configuração de comutador NIC. O driver de miniporto deve definir o membro CurrentNicSwitchCapabilities como NULL.

    Para obter mais informações sobre o palavra-chave *SRIOV INF, consulte Palavras-chave INF padronizadas para SR-IOV.

  2. O driver chama NdisMSetMiniportAttributes e define o parâmetro MiniportAttributes como um ponteiro para a estrutura NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .

Para obter mais informações sobre o processo de inicialização do adaptador, consulte Inicializando um adaptador de miniporto.

Criando um comutador NIC sem SR-IOV

Os drivers de miniport no NDIS 6.60 e posteriores devem seguir os requisitos a seguir para a coexistência de um comutador NIC e recursos de VMQ quando SR-IOV não estiver habilitado. Quando SR-IOV estiver habilitado, o driver de miniporto deverá seguir os requisitos existentes na seção anterior.

  • O driver de miniporto anuncia a opção NIC e os recursos de VMQ.
  • A NIC pode alternar entre o comutador NIC e o modo VMQ sem uma reinicialização nic.
    • Quando a NIC é iniciada inicialmente, ela está pronta para estar em qualquer um dos modos (criando um comutador NIC ou criando filas VMQ).
      • Se uma opção NIC for criada, o miniporto falhará em quaisquer retornos de chamada de alocação de fila de VMQ subsequentes.
      • Se uma fila VMQ for criada primeiro, o driver de miniporto terá sucesso na alocação da fila VMQ e falhará em qualquer chamada de alocação de comutador NIC.
    • Quando a opção NIC é excluída ou todas as filas VMQ são excluídas, o driver de miniporto retorna ao estado inicial e está pronto para entrar em qualquer um desses modos novamente.

Para anunciar que uma opção NIC pode ser criada sem o uso de SR-IOV, o driver de miniporto define o sinalizador NDIS_NIC_SWITCH_CAPS_NIC_SWITCH_WITHOUT_IOV_SUPPORTED no membro NicSwitchCapabilities da estrutura NDIS_NIC_SWITCH_CAPABILITIES .

Consultando funcionalidades de comutador NIC por drivers overlying

O NDIS passa os recursos de comutador NIC atualmente habilitados do adaptador de rede para drivers overlying que se associam ao adaptador de rede da seguinte maneira:

  • Quando o NDIS chama a função FilterAttach de um driver de filtro sobressalente, o NDIS passa os recursos de comutador NIC do adaptador de rede por meio do parâmetro AttachParameters . Esse parâmetro contém um ponteiro para uma estrutura NDIS_FILTER_ATTACH_PARAMETERS . O membro NicSwitchCapabilities dessa estrutura contém um ponteiro para uma estrutura NDIS_NIC_SWITCH_CAPABILITIES .

  • Quando o NDIS chama a função ProtocolBindAdapterEx de um driver de protocolo sobreposto, o NDIS passa os recursos de comutador NIC do adaptador de rede por meio do parâmetro BindParameters . Esse parâmetro contém um ponteiro para uma estrutura NDIS_FILTER_ATTACH_PARAMETERS . O membro NicSwitchCapabilities dessa estrutura contém um ponteiro para uma estrutura NDIS_NIC_SWITCH_CAPABILITIES .

O NDIS também retorna a estrutura NDIS_NIC_SWITCH_CAPABILITIES quando lida com solicitações de consulta OID (identificador de objeto) de OID_NIC_SWITCH_HARDWARE_CAPABILITIES e OID_NIC_SWITCH_CURRENT_CAPABILITIES emitidas por drivers de filtro ou protocolo sobrepostos.