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 du contrôleur GPIO.

[in] BankId

Banque qui contient le code PIN GPIO d’interruption. 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 retournée

La fonction CLIENT_PreProcessControllerInterrupt retourne STATUS_SUCCESS si l’appel réussit. Sinon, il 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 du DIRQL.

En règle générale, un pilote de contrôleur GPIO peut accéder à un contrôleur GPIO mappé en mémoire au niveau de DIRQL, mais il 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 interruptions status données s’ils retardent la capture des bits d’interruption status 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 périphérique 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 du DIRQL, le pilote définit le bit d’indicateur MemoryMappedController dans le membre Flags de la structure CLIENT_CONTROLLER_BASIC_INFORMATION que le pilote transmet à 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 ISR de niveau passif.

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 fonction de rappel aide l’analyse du code pour les pilotes, le vérificateur de pilotes statique (SDV) et d’autres outils de vérification à la recherche d’erreurs. Il s’agit d’une exigence pour l’écriture de 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 indiqué 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 lors de l’exécution des 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 Annotating Function Behavior.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge à partir de Windows 8.
Plateforme cible Desktop (Expérience utilisateur)
En-tête gpioclx.h
IRQL Appelé à la DIRQL.

Voir aussi

GPIO_CLIENT_REGISTRATION_PACKET

GPIO_CLX_RegisterClient