Partager via


Configuration dynamique de MSI-X

Windows Vista Service Pack 1 (SP1), Windows Server 2008 et les systèmes d’exploitation ultérieurs prennent en charge la modification dynamique des propriétés des messages d’interruption MSI-X. (La spécification PCI 3.0 a défini MSI-X.) Le pilote de bus PCI expose l’interface GUID_MSIX_TABLE_CONFIG_INTERFACE pour permettre aux pilotes des périphériques PCI de modifier les paramètres dans la table d’interruption du matériel de bus.

Les pilotes utilisent l’interface en envoyant une requête IRP_MN_QUERY_INTERFACE au pilote de bus, avec le paramètre InterfaceType égal à GUID_MSIX_TABLE_CONFIG_INTERFACE. Le pilote de bus fournit un pointeur vers une structure PCI_MSIX_TABLE_CONFIG_INTERFACE , qui fournit des pointeurs vers trois routines qui modifient la table d’interruption :

  • SetTableEntry affecte un ID de message à l’entrée de table matérielle.

  • MaskTableEntry masque l’interruption correspondant à une entrée de table matérielle.

  • UnmaskTableEntry démasque l’interruption correspondant à une entrée de table matérielle.

Par défaut, la table d’interruptions est configurée de telle sorte que la première entrée ait l’ID de message zéro, la deuxième entrée a l’ID de message un, et ainsi de suite. Si le nombre d’entrées de table dépasse le nombre de messages, chaque entrée de table supplémentaire se voit attribuer l’ID de message zéro. (L’ID de message est l’index de l’entrée de l’interruption dans le membre MessageInfo de la structure IO_INTERRUPT_MESSAGE_INFO qui décrit les interruptions signalées par le message du pilote. La routine IoConnectInterruptEx fournit un pointeur vers cette structure.)