Control de una interrupción de MSI
NDIS llama a la función MiniportMessageInterrupt cuando una tarjeta de interfaz de red (NIC) genera una interrupción. El parámetro MessageId de esta función identifica el mensaje MSI-X.
MiniportMessageInterrupt siempre debe devolver TRUE después de procesar la interrupción porque las interrupciones del mensaje no se comparten.
Un controlador de minipuerto debe realizar el menor trabajo posible en su función MiniportMessageInterrupt . El controlador debe aplazar las operaciones de E/S a la función MiniportMessageInterruptDpc , que llama a NDIS para completar el procesamiento diferido de una interrupción.
Para poner en cola llamadas de procedimiento diferido adicionales (DPC) después de que se devuelva MiniportMessageInterrupt , el controlador de minipuerto establece los bits del parámetro TargetProcessors de la función MiniportMessageInterrupt . Para solicitar DPC adicionales desde MiniportMessageInterrupt o MiniportMessageInterruptDPC, el controlador de miniport puede llamar a la función NdisMQueueDpc .
El controlador de minipuerto puede llamar a NdisMQueueDpc para solicitar DPC adicionales para otros procesadores.
NDIS 6.1 y versiones posteriores garantizan que los DPC para distintos mensajes programados para la misma CPU se ponen en cola por separado. Por ejemplo, si un controlador de minipuerto programa dos DPC al mismo tiempo en la CPU 1 (un DPC para el mensaje 0 y el otro DPC para el mensaje 1), dos DPC se ponen en cola para la CPU 1 (un DPC con el mensaje 0 y el otro DPC con el mensaje 1).
NDIS también garantiza que los DPC para el mismo mensaje programado en distintas CPU se ponen en cola por separado. Por ejemplo, si un controlador de minipuerto programa dos DPC (un DPC en la CPU 0 para el mensaje 0 y un DPC en la CPU 1 para el mensaje 0), dos DPC independientes se ponen en cola en la CPU 0 y la CPU 1, ambos para el mensaje 0.