Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les pilotes miniport doivent enregistrer une fonction de filtre pour les exigences de ressources s’ils prennent en charge MSI-X et modifient l’affinité d’interruption pour chaque message MSI-X ou suppriment les ressources d’interruption de message.
NDIS appelle la fonction MiniportFilterResourceRequirements après que NDIS a reçu le paquet de requête d'entrée/sortie (IRP) IRP_MN_FILTER_RESOURCE_REQUIREMENTS pour une carte d’interface réseau (NIC). NDIS appelle MiniportFilterResourceRequirements une fois que les pilotes de fonction sous-jacents dans la pile d’appareils ont terminé l’IRP.
NDIS appelle MiniportFilterResourceRequirements après que la fonction MiniportAddDevice retourne NDIS_STATUS_SUCCESS. NDIS peut de nouveau appeler à tout moment MiniportFilterResourceRequirements avant d’appeler MiniportRemoveDevice. NDIS peut appeler MiniportFilterResourceRequirements pendant l’exécution du miniport. Bien que le miniport puisse modifier la liste des ressources comme décrit ci-dessous, le miniport ne doit pas tenter immédiatement d’utiliser les nouvelles ressources. NDIS arrêtera et réinitialisera le miniport avec les nouvelles ressources ; ce n’est qu’alors que le miniport devrait tenter d’utiliser les nouvelles ressources.
IRP_MN_FILTER_RESOURCE_REQUIREMENTS fournit une liste de ressources en tant que structure IO_RESOURCE_REQUIREMENTS_LIST sur Irp-IoStatus.Information>. Les ressources de la liste sont décrites par IO_RESOURCE_DESCRIPTOR structures.
Un pilote miniport peut modifier la stratégie d’affinité d’interruption pour chaque ressource de type CmResourceTypeInterrupt qui décrit un message MSI-X. Si une stratégie d’affinité demande le ciblage d’un ensemble spécifique de processeurs, le pilote miniport définit également un masque KAFFINITY sur Interrupt.TargetedProcessors dans la structure IO_RESOURCE_DESCRIPTOR.
Un pilote miniport peut supprimer toutes les ressources de type CmResourceTypeInterrupt qui sont des ressources d’interruption de message. Le pilote peut ensuite s'enregistrer pour des interruptions basées sur ligne dans la fonction MiniportInitializeEx. Si le pilote miniport ne supprime pas ces ressources d’interruption de message, le système d’exploitation échoue si le pilote tente d’inscrire des interruptions basées sur des lignes dans MiniportInitializeEx.
Un pilote miniport NDIS 6.1 ou version ultérieure peut ajouter des ressources d’interruption de message à la liste des ressources. Par exemple, sur un ordinateur avec huit processeurs, si la carte réseau peut générer quatre messages MSI-X et si le système d’exploitation active les quatre interruptions de message, le système d’exploitation initialise quatre entrées de table de messages dans l’espace de configuration MSI-X de l’appareil et place quatre ressources d’interruption de message dans la liste des ressources. Dans ce cas, étant donné que le pilote miniport nécessite davantage de ressources d’interruption de message, il peut allouer quatre ressources d’interruption de message supplémentaires à la liste des ressources et définir l’affinité de chaque message MSI-X sur un processeur. Si le système d’exploitation peut fournir davantage de ressources d’interruption de message, l’adaptateur miniport reçoit huit ressources d’interruption de message au démarrage. Dans ce cas, les messages ont des nombres compris entre 0 et 7.
Chaque ressource d’interruption de message dans la liste est affectée ultérieurement à un numéro de message qui correspond à l’ordre qu’elle affiche dans la liste. Par exemple, les premières ressources d’interruption de message de la liste sont affectées au message 0, la deuxième est affectée au message 1, et ainsi de suite.
Pour affecter une entrée de table MSI-X à un processeur au moment de l’exécution, le pilote miniport peut appeler la fonction NdisMConfigMSIXTableEntry , qui mappe une entrée de table à un message MSI-X qui a déjà l’affinité définie sur l’UC. Pour plus d’informations sur les opérations de configuration des entrées de table MSI-X, consultez Modification de l’affinité processeur des entrées de table MSI-X.
Pour allouer de la mémoire pour une nouvelle liste des besoins en ressources, utilisez la fonction NdisAllocateMemoryWithTagPriority . Vous pouvez libérer la mémoire de l’ancienne liste des conditions requises pour les ressources avec la fonction NdisFreeMemory .
Les pilotes Miniport ne doivent pas modifier d’autres ressources, telles que CmResourceTypeMemory et Les ressources CmResourceTypePort. Les pilotes miniport doivent éviter d’ajouter une nouvelle ressource à la liste des ressources. Toutefois, les pilotes miniport NDIS 6.1 et ultérieurs peuvent ajouter d’autres ressources d’interruption de message. Si le pilote miniport ajoute davantage de ressources d’interruption de message, il ne doit pas les supprimer de la fonction MiniportStartDevice .
Pour plus d’informations sur l’ajout et la suppression de ressources, consultez IRP_MN_FILTER_RESOURCE_REQUIREMENTS.