GPIO-Based interromper recursos
Drivers para dispositivos periféricos que enviam interrupções para pinos de E/S de uso geral (GPIO) adquirem interrupções de GPIO como recursos abstratos de interrupção do Windows. Os drivers kmdf (estrutura de driver do modo kernel) e os drivers da UMDF (estrutura de driver do modo de usuário) recebem esses recursos por meio de suas funções de retorno de chamada de evento EvtDevicePrepareHardware.
Os drivers de dispositivo periféricos que usam recursos de interrupção baseados em GPIO podem ignorar detalhes de implementação de baixo nível, como se uma interrupção é gerada por um pino GPIO em vez de por um controlador de interrupção ou por um pino de interrupção em um chip de processador.
Uma interrupção baseada em GPIO é um recurso do tipo CmResourceTypeInterrupt. Os parâmetros de configuração para essa interrupção estão contidos no membro u.Interrupt da estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR que descreve o recurso de interrupção. Para conectar uma ISR (rotina de serviço de interrupção) a uma interrupção, um driver UMDF ou KMDF fornece as descrições brutas e traduzidas do recurso de interrupção para um método de criação de interrupção.
O driver KMDF ou UMDF para um dispositivo periférico chama o método WdfInterruptCreate para conectar um ISR à interrupção do dispositivo. Um dos parâmetros de entrada para esse método é um ponteiro para uma estrutura WDF_INTERRUPT_CONFIG que contém informações de configuração para a interrupção.
Se um driver de dispositivo periférico usar mais de um recurso de interrupção GPIO, esse driver deverá estar ciente da ordem em que esses recursos aparecem nas listas de recursos brutos e traduzidos que são fornecidos como parâmetros de entrada para a função EvtDevicePrepareHardware ou o método OnPrepareHardware . Os recursos nessas listas aparecem na ordem em que são descritos no firmware da plataforma, que deve corresponder à ordem esperada pelo driver.