GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT funzione di callback (gpioclx.h)

La funzione di callback degli eventi CLIENT_PreProcessControllerInterrupt esegue qualsiasi pre-elaborazione di un interruzione di I/O (GPIO) per utilizzo generico che deve essere eseguita immediatamente se l'ISR è pianificata per l'esecuzione in un secondo momento.

Sintassi

GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT GpioClientPreProcessControllerInterrupt;

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

Parametri

[in] Context

Puntatore al contesto del dispositivo del controller GPIO.

[in] BankId

Banca che contiene il pin GPIO interrotto. Se N è il numero di banche nel controller GPIO, BankId è un intero nell'intervallo da 0 a N-1. L'estensione del framework GPIO ha ottenuto in precedenza il numero di banche nel controller dalla funzione di callback degli eventi CLIENT_QueryControllerBasicInformation . Per altre informazioni, vedere Osservazioni in CLIENT_CONTROLLER_BASIC_INFORMATION.

EnabledMask

Valore restituito

La funzione CLIENT_PreProcessControllerInterrupt restituisce STATUS_SUCCESS se la chiamata ha esito positivo. In caso contrario, restituisce un codice di errore appropriato.

Commenti

Questa funzione di callback è facoltativa. Un driver del controller GPIO implementa questa funzione solo se esegue la maggior parte della gestione degli interruzioni in PASSIVE_LEVEL, ma deve eseguire un'elaborazione iniziale di un interruzione in DIRQL.

In genere, un driver del controller GPIO può accedere a un controller GPIO mappato alla memoria in DIRQL, ma può accedere a un controller GPIO connesso serialmente solo in PASSIVE_LEVEL. Tuttavia, alcuni controller GPIO connessi serialmente potrebbero perdere dati di stato di interruzione se ritardano l'acquisizione dei bit di stato di interruzione fino a quando irQL non scende a PASSIVE_LEVEL. Quando irQL viene successivamente eliminato in PASSIVE_LEVEL, l'estensione del framework GPIO (GpioClx) può chiamare la funzione di callback del driver CLIENT_QueryActiveInterrupts per recuperare il contenuto del registro.

Il driver del controller GPIO indica se deve gestire gli interruzioni in PASSIVE_LEVEL nelle informazioni sul dispositivo passate a GpioClx durante il callback CLIENT_QueryControllerBasicInformation. Se il controller GPIO è mappato alla memoria, in modo che il driver possa accedere ai registri del controller in DIRQL, il driver imposta il flag MemoryMappedController nel membro Flags della struttura CLIENT_CONTROLLER_BASIC_INFORMATION che il driver passa a GpioClx. In caso contrario, il driver imposta MemoryMappedController = 0 per indicare che il driver deve gestire gli interruzioni in PASSIVE_LEVEL. Per altre informazioni, vedere ISR a livello passivo.

Per registrare la funzione di callback del driver CLIENT_PreProcessControllerInterrupt , chiamare il metodo GPIO_CLX_RegisterClient . Questo metodo accetta, come parametro di input, un puntatore a una struttura GPIO_CLIENT_REGISTRATION_PACKET che contiene un puntatore alla funzione CLIENT_PreProcessControllerInterrupt .

Esempio

Per definire una funzione di callback CLIENT_PreProcessControllerInterrupt , è prima necessario specificare una dichiarazione di funzione che identifica il tipo di funzione di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione usando i tipi di funzione callback consente l'analisi del codice per i driver, il verifica driver statico (SDV) e altri strumenti di verifica trovano errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.

Ad esempio, per definire una funzione di callback CLIENT_PreProcessControllerInterrupt denominata MyEvtGpioPreProcessInterrupt, usare il tipo di funzione GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT, come illustrato nell'esempio di codice seguente:

GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT MyEvtGpioPreProcessInterrupt;

Implementare quindi la funzione di callback come indicato di seguito:

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

Il tipo di funzione GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT è definito nel file di intestazione Gpioclx.h. Per identificare in modo più accurato gli errori durante l'esecuzione degli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alla definizione della funzione. L'annotazione Use_decl_annotations garantisce che vengano usate le annotazioni applicate al tipo di funzione GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo per i driver KMDF. Per altre informazioni su Use_decl_annotations, vedere Annotazione del comportamento della funzione.

Requisiti

Requisito Valore
Client minimo supportato Supportato a partire da Windows 8.
Piattaforma di destinazione Desktop
Intestazione gpioclx.h
IRQL Chiamata in DIRQL.

Vedi anche

GPIO_CLIENT_REGISTRATION_PACKET

GPIO_CLX_RegisterClient