Partager via


GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT fonction de rappel (gpioclx.h)

La fonction de rappel d’événement CLIENT_PreProcessControllerInterrupt effectue tout prétraitement d’une interruption d’E/S à usage général (GPIO) qui doit être effectuée immédiatement si l’ISR est planifié pour s’exécuter ultérieurement.

Syntaxe

GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT GpioClientPreProcessControllerInterrupt;

NTSTATUS GpioClientPreProcessControllerInterrupt(
  [in] PVOID Context,
  [in] BANK_ID BankId,
       ULONG64 EnabledMask
)
{...}

Paramètres

[in] Context

Pointeur vers le contexte de périphérique du pilote de contrôleur GPIO.

[in] BankId

Banque qui contient l’interruption de la broche GPIO. Si N est le nombre de banques dans le contrôleur GPIO, BankId est un entier compris entre 0 et N-1. L’extension de framework GPIO a précédemment obtenu le nombre de banques dans le contrôleur à partir de la fonction de rappel d’événement CLIENT_QueryControllerBasicInformation. Pour plus d’informations, consultez Remarques dans CLIENT_CONTROLLER_BASIC_INFORMATION.

EnabledMask

Valeur de retour

La fonction CLIENT_PreProcessControllerInterrupt retourne STATUS_SUCCESS si l’appel réussit. Sinon, elle retourne un code d’erreur approprié.

Remarques

Cette fonction de rappel est facultative. Un pilote de contrôleur GPIO implémente cette fonction uniquement s’il effectue la plupart de sa gestion des interruptions à PASSIVE_LEVEL, mais doit effectuer un traitement initial d’une interruption au niveau de DIRQL.

En règle générale, un pilote de contrôleur GPIO peut accéder à un contrôleur GPIO mappé en mémoire sur DIRQL, mais peut accéder à un contrôleur GPIO connecté en série uniquement à PASSIVE_LEVEL. Toutefois, certains contrôleurs GPIO connectés en série peuvent perdre des données d’état d’interruption s’ils retardent la capture des bits d’état d’interruption jusqu’à ce que l’IRQL tombe à PASSIVE_LEVEL. Lorsque l’IRQL passe ultérieurement à PASSIVE_LEVEL, l’extension d’infrastructure GPIO (GpioClx) peut appeler la fonction de rappel CLIENT_QueryActiveInterrupts du pilote pour récupérer le contenu du registre.

Le pilote du contrôleur GPIO indique s’il doit gérer les interruptions à PASSIVE_LEVEL dans les informations de l’appareil qu’il transmet à GpioClx pendant le rappel CLIENT_QueryControllerBasicInformation. Si le contrôleur GPIO est mappé en mémoire, afin que le pilote puisse accéder aux registres du contrôleur au niveau DIRQL, le pilote définit le memoryMappedController bit d’indicateur dans le Flags membre de la structure CLIENT_CONTROLLER_BASIC_INFORMATION que le pilote passe à GpioClx. Sinon, le pilote définit MemoryMappedController = 0 pour indiquer que le pilote doit gérer les interruptions à PASSIVE_LEVEL. Pour plus d’informations, consultez Passive-Level isr.

Pour inscrire la fonction de rappel CLIENT_PreProcessControllerInterrupt de votre pilote, appelez la méthode GPIO_CLX_RegisterClient. Cette méthode accepte, en tant que paramètre d’entrée, un pointeur vers une structure GPIO_CLIENT_REGISTRATION_PACKET qui contient un pointeur de fonction CLIENT_PreProcessControllerInterrupt.

Exemples

Pour définir une fonction de rappel CLIENT_PreProcessControllerInterrupt, vous devez d’abord fournir une déclaration de fonction qui identifie le type de fonction de rappel que vous définissez. Windows fournit un ensemble de types de fonctions de rappel pour les pilotes. La déclaration d’une fonction à l’aide des types de fonctions de rappel permet d'Analyse du code pour les pilotes, static Driver Verifier (SDV) et d’autres outils de vérification recherchent des erreurs, et il est nécessaire d’écrire des pilotes pour le système d’exploitation Windows.

Par exemple, pour définir une fonction de rappel CLIENT_PreProcessControllerInterrupt nommée MyEvtGpioPreProcessInterrupt, utilisez le type de fonction GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT, comme illustré dans cet exemple de code :

GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT MyEvtGpioPreProcessInterrupt;

Ensuite, implémentez votre fonction de rappel comme suit :

_Use_decl_annotations_
NTSTATUS
  MyEvtGpioPreProcessInterrupt(
    PVOID Context
    )
{ ... }

Le type de fonction GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT est défini dans le fichier d’en-tête Gpioclx.h. Pour identifier plus précisément les erreurs lorsque vous exécutez les outils d’analyse du code, veillez à ajouter l’annotation Use_decl_annotations à votre définition de fonction. L’annotation Use_decl_annotations garantit que les annotations appliquées au type de fonction GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes KMDF. Pour plus d’informations sur Use_decl_annotations, consultez annoter le comportement de la fonction.

Exigences

Exigence Valeur
client minimum pris en charge Prise en charge à partir de Windows 8.
plateforme cible Bureau
d’en-tête gpioclx.h
IRQL Appelé à DIRQL.

Voir aussi

GPIO_CLIENT_REGISTRATION_PACKET

GPIO_CLX_RegisterClient