Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os drivers de miniport devem registrar uma função de filtro de requisitos de recurso se derem suporte a MSI-X e alterarão a afinidade de interrupção para cada mensagem MSI-X ou removerão os recursos de interrupção da mensagem.
O NDIS chama a função MiniportFilterResourceRequirements depois que o NDIS recebe o pacote de solicitação de E/S (IRP, I/O request packet) IRP_MN_FILTER_RESOURCE_REQUIREMENTS para uma NIC (Network Interface Card, placa de interface de rede). O NDIS chama MiniportFilterResourceRequirements depois que os drivers de função subjacentes da pilha de dispositivos concluíram o IRP.
O NDIS chamará MiniportFilterResourceRequirements depois que a função MiniportAddDevice retornar NDIS_STATUS_SUCCESS. O NDIS pode chamar MiniportFilterResourceRequirements novamente a qualquer momento antes de chamar MiniportRemoveDevice. O NDIS pode chamar MiniportFilterResourceRequirements enquanto o miniport está funcionando. Embora o miniporto possa modificar a lista de recursos, conforme descrito abaixo, o miniporto não deve tentar usar imediatamente os novos recursos. O NDIS eventualmente interromperá e inicializará novamente o miniporto com os novos recursos; somente então o miniporto deve tentar usar os novos recursos.
IRP_MN_FILTER_RESOURCE_REQUIREMENTS fornece uma lista de recursos como uma estrutura IO_RESOURCE_REQUIREMENTS_LIST em Irp-IoStatus.Information>. Os recursos na lista são descritos por estruturas de IO_RESOURCE_DESCRIPTOR .
Um driver de miniporte pode modificar a política de afinidade de interrupção de cada recurso do tipo CmResourceTypeInterrupt que descreve uma mensagem MSI-X. Se uma política de afinidade solicitar o direcionamento para um conjunto específico de processadores, o driver de miniporto também definirá uma máscara KAFFINITY em Interrupt.TargetedProcessors na estrutura IO_RESOURCE_DESCRIPTOR.
Um driver de miniporto pode remover todos os recursos do tipo CmResourceTypeInterrupt que são recursos de interrupção de mensagem. Em seguida, o driver pode registrar-se para interrupções baseadas em linha na função MiniportInitializeEx. Se o driver de miniporto não remover esses recursos de interrupção de mensagem, o sistema operacional falhará se o driver tentar registrar interrupções baseadas em linha no MiniportInitializeEx.
Um driver de miniporto NDIS 6.1 ou posterior pode adicionar recursos de interrupção de mensagem à lista de recursos. Por exemplo, em um computador com oito CPUs, se a NIC puder gerar quatro mensagens MSI-X e se o sistema operacional habilitar as quatro interrupções de mensagem, o sistema operacional inicializará quatro entradas de tabela de mensagens no espaço de configuração MSI-X do dispositivo e colocará quatro recursos de interrupção de mensagem na lista de recursos. Nesse caso, como o driver de miniporto requer mais recursos de interrupção de mensagem, ele pode alocar mais quatro recursos de interrupção de mensagem para a lista de recursos e definir a afinidade de cada mensagem MSI-X para uma CPU. Se o sistema operacional puder fornecer mais recursos de interrupção de mensagem, o adaptador de miniporto receberá oito recursos de interrupção de mensagem quando ele for iniciado. Nesse caso, as mensagens têm números de 0 a 7.
Cada recurso de interrupção de mensagem na lista recebe um número de mensagem mais tarde que corresponde à ordem que ele mostra na lista. Por exemplo, os primeiros recursos de interrupção de mensagem na lista são atribuídos à mensagem 0, o segundo é atribuído à mensagem 1 e assim por diante.
Para atribuir uma entrada de tabela MSI-X a uma CPU em tempo de execução, o driver de miniporto pode chamar a função NdisMConfigMSIXTableEntry , que mapeia uma entrada de tabela para uma mensagem de MSI-X que já tem a afinidade definida para a CPU. Para obter mais informações sobre operações de configuração para entradas de tabela MSI-X, consulte Alterando a afinidade de CPU das entradas de tabela MSI-X.
Para alocar memória para uma nova lista de requisitos de recursos, use a função NdisAllocateMemoryWithTagPriority . Você pode liberar a memória para a lista antiga de requisitos de recursos com a função NdisFreeMemory .
Os drivers de miniporto não devem modificar outros recursos, como CmResourceTypeMemory e recursos CmResourceTypePort. Os drivers de miniporto devem evitar a adição de um novo recurso à lista de recursos. No entanto, os drivers de miniporto NDIS 6.1 e posteriores podem adicionar mais recursos de interrupção de mensagem. Se o driver do miniporto adicionar mais recursos de interrupção de mensagem, ele não deverá removê-los da função MiniportStartDevice.
Para obter mais informações sobre como adicionar e remover recursos, consulte IRP_MN_FILTER_RESOURCE_REQUIREMENTS.