GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT función de devolución de llamada (gpioclx.h)
La función de devolución de llamada de evento CLIENT_PreProcessControllerInterrupt realiza cualquier preprocesamiento de una interrupción de E/S de uso general (GPIO) que se debe realizar inmediatamente si el ISR está programado para ejecutarse más adelante.
Sintaxis
GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT GpioClientPreProcessControllerInterrupt;
NTSTATUS GpioClientPreProcessControllerInterrupt(
[in] PVOID Context,
[in] BANK_ID BankId,
ULONG64 EnabledMask
)
{...}
Parámetros
[in] Context
Puntero al contexto del dispositivo del controlador GPIO.
[in] BankId
Banco que contiene la patilla GPIO de interrupción. Si N es el número de bancos en el controlador GPIO, BankId es un entero del intervalo comprendido entre 0 y N-1. La extensión del marco GPIO obtuvo previamente el número de bancos en el controlador de la función de devolución de llamada de evento CLIENT_QueryControllerBasicInformation . Para obtener más información, vea Comentarios en CLIENT_CONTROLLER_BASIC_INFORMATION.
EnabledMask
Valor devuelto
La función CLIENT_PreProcessControllerInterrupt devuelve STATUS_SUCCESS si la llamada se realiza correctamente. De lo contrario, devuelve un código de error adecuado.
Comentarios
Esta función de devolución de llamada es opcional. Un controlador de controlador GPIO implementa esta función solo si realiza la mayoría de su control de interrupciones en PASSIVE_LEVEL, pero debe realizar algún procesamiento inicial de una interrupción en DIRQL.
Normalmente, un controlador de controlador GPIO puede acceder a un controlador GPIO asignado a memoria en DIRQL, pero puede acceder a un controlador GPIO conectado en serie solo en PASSIVE_LEVEL. Sin embargo, algunos controladores GPIO conectados en serie pueden perder datos de estado de interrupción si retrasan la captura de los bits de estado de interrupción hasta que IRQL cae a PASSIVE_LEVEL. Cuando irQL más adelante cae a PASSIVE_LEVEL, la extensión de marco GPIO (GpioClx) puede llamar a la función de devolución de llamada CLIENT_QueryActiveInterrupts del controlador para recuperar el contenido del registro.
El controlador del controlador GPIO indica si debe controlar las interrupciones en PASSIVE_LEVEL en la información del dispositivo que pasa a GpioClx durante la devolución de llamada de CLIENT_QueryControllerBasicInformation . Si el controlador GPIO está asignado a memoria, de modo que el controlador pueda acceder a los registros del controlador en DIRQL, el controlador establece el bit de marca MemoryMappedController en el miembro Flags de la estructura CLIENT_CONTROLLER_BASIC_INFORMATION que el controlador pasa a GpioClx. De lo contrario, el controlador establece MemoryMappedController = 0 para indicar que el controlador debe controlar las interrupciones en PASSIVE_LEVEL. Para obtener más información, vea ISR de nivel pasivo.
Para registrar la función de devolución de llamada de CLIENT_PreProcessControllerInterrupt del controlador, llame al método GPIO_CLX_RegisterClient . Este método acepta, como parámetro de entrada, un puntero a una estructura de GPIO_CLIENT_REGISTRATION_PACKET que contiene un puntero de función CLIENT_PreProcessControllerInterrupt .
Ejemplos
Para definir un CLIENT_PreProcessControllerInterrupt función de devolución de llamada, primero debe proporcionar una declaración de función que identifique el tipo de función de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada ayuda a Análisis de código para controladores, Comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.
Por ejemplo, para definir una función de devolución de llamada CLIENT_PreProcessControllerInterrupt denominada MyEvtGpioPreProcessInterrupt
, use el tipo de función GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT, como se muestra en este ejemplo de código:
GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT MyEvtGpioPreProcessInterrupt;
A continuación, implemente la función de devolución de llamada de la siguiente manera:
_Use_decl_annotations_
NTSTATUS
MyEvtGpioPreProcessInterrupt(
PVOID Context
)
{ ... }
El tipo de función GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT se define en el archivo de encabezado Gpioclx.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, consulte Declaración de funciones mediante tipos de rol de función para controladores KMDF. Para obtener más información sobre Use_decl_annotations, consulte Anotación del comportamiento de la función.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Se admite a partir de Windows 8. |
Plataforma de destino | Escritorio |
Encabezado | gpioclx.h |
IRQL | Se llama en DIRQL. |