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:
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.
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 .
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:
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.
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.
- Quando a NIC é iniciada inicialmente, ela está pronta para estar em qualquer um dos modos (criando um comutador NIC ou criando filas VMQ).
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.