Partager via


Gestion d’une interruption MSI

NDIS appelle la fonction MiniportMessageInterrupt lorsqu’une interface réseau carte génère une interruption. Le paramètre MessageId de cette fonction identifie le message MSI-X.

MiniportMessageInterrupt doit toujours retourner TRUE après le traitement de l’interruption, car les interruptions de message ne sont pas partagées.

Un pilote miniport doit effectuer le moins de travail possible dans sa fonction MiniportMessageInterrupt . Le pilote doit reporter les opérations d’E/S à la fonction MiniportMessageInterruptDpc , que NDIS appelle pour terminer le traitement différé d’une interruption.

Pour mettre en file d’attente d’autres appels de procédure différée (PDC) après le retour de MiniportMessageInterrupt , le pilote miniport définit les bits du paramètre TargetProcessors de la fonction MiniportMessageInterrupt . Pour demander des DCP supplémentaires auprès de MiniportMessageInterrupt ou MiniportMessageInterruptDPC, le pilote miniport peut appeler la fonction NdisMQueueDpc .

Le pilote miniport peut appeler NdisMQueueDpc pour demander des DCP supplémentaires pour d’autres processeurs.

NDIS 6.1 et versions ultérieures garantit que les DPC pour les différents messages planifiés pour le même processeur sont mis en file d’attente séparément. Par exemple, si un pilote miniport planifie deux PDC en même temps sur le processeur 1 (un DPC pour le message 0 et l’autre DPC pour le message 1), deux DPC sont mis en file d’attente pour le processeur 1 (un DPC avec le message 0 et l’autre DPC avec le message 1).

NDIS garantit également que les DDC pour le même message qui sont planifiés sur des processeurs différents sont mis en file d’attente séparément. Par exemple, si un pilote miniport planifie deux PDC (un DPC sur l’UC 0 pour le message 0 et un DPC sur le processeur 1 pour le message 0), deux DCP distincts sont mis en file d’attente sur le processeur 0 et le processeur 1, tous deux pour le message 0.