Compartilhar via


Tratamento de uma interrupção msi

O NDIS chama a função MiniportMessageInterrupt quando um adaptador de rede cartão (NIC) gera uma interrupção. O parâmetro MessageId nesta função identifica a mensagem MSI-X.

MiniportMessageInterrupt deve sempre retornar TRUE depois de processar a interrupção porque as interrupções de mensagem não são compartilhadas.

Um driver de miniporte deve fazer o menor trabalho possível em sua função MiniportMessageInterrupt . O driver deve adiar as operações de E/S para a função MiniportMessageInterruptDpc , que o NDIS chama para concluir o processamento adiado de uma interrupção.

Para enfileirar DPCs (chamadas de procedimento adiadas adicionais) após o retorno de MiniportMessageInterrupt , o driver de miniport define os bits do parâmetro TargetProcessors da função MiniportMessageInterrupt . Para solicitar DPCs adicionais de MiniportMessageInterrupt ou MiniportMessageInterruptDPC, o driver de miniport pode chamar a função NdisMQueueDpc .

O driver de miniporto pode chamar NdisMQueueDpc para solicitar DPCs adicionais para outros processadores.

O NDIS 6.1 e versões posteriores garantem que os DPCs para mensagens diferentes agendadas para a mesma CPU sejam enfileirados separadamente. Por exemplo, se um driver de miniporto agendar dois DPCs ao mesmo tempo na CPU 1 (um DPC para a mensagem 0 e o outro DPC para a mensagem 1), dois DPCs serão enfileirados para CPU 1 (um DPC com a mensagem 0 e o outro DPC com a mensagem 1).

O NDIS também garante que os DPCs para a mesma mensagem agendadas em CPUs diferentes sejam enfileirados separadamente. Por exemplo, se um driver de miniporto agendar dois DPCs (um DPC na CPU 0 para a mensagem 0 e um DPC na CPU 1 para a mensagem 0), dois DPCs separados serão enfileirados na CPU 0 e na CPU 1, ambos para a mensagem 0.