estrutura WDF_INTERRUPT_CONFIG (wdfinterrupt.h)
[Aplica-se a KMDF e UMDF]
A estrutura WDF_INTERRUPT_CONFIG contém informações de configuração para uma interrupção de dispositivo.
Sintaxe
typedef struct _WDF_INTERRUPT_CONFIG {
ULONG Size;
WDFSPINLOCK SpinLock;
WDF_TRI_STATE ShareVector;
BOOLEAN FloatingSave;
BOOLEAN AutomaticSerialization;
PFN_WDF_INTERRUPT_ISR EvtInterruptIsr;
PFN_WDF_INTERRUPT_DPC EvtInterruptDpc;
PFN_WDF_INTERRUPT_ENABLE EvtInterruptEnable;
PFN_WDF_INTERRUPT_DISABLE EvtInterruptDisable;
PFN_WDF_INTERRUPT_WORKITEM EvtInterruptWorkItem;
PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptRaw;
PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptTranslated;
WDFWAITLOCK WaitLock;
BOOLEAN PassiveHandling;
WDF_TRI_STATE ReportInactiveOnPowerDown;
BOOLEAN CanWakeDevice;
} WDF_INTERRUPT_CONFIG, *PWDF_INTERRUPT_CONFIG;
Membros
Size
O tamanho, em bytes, dessa estrutura.
SpinLock
O identificador de um objeto de bloqueio de rotação da estrutura, obtido por uma chamada anterior para WdfSpinLockCreate ou NULL. Se esse parâmetro for NULL, a estrutura usará um objeto de bloqueio de rotação interno. A estrutura adquire o bloqueio de rotação antes de chamar o do driver EvtInterruptSynchronize função de retorno de chamada de evento e quando o driver chama WdfInterruptAcquireLock. Para tratamento de interrupção de nível passivo, defina como NULL.
Começando com o UMDF versão 2.0, o UMDF sempre usa o tratamento de interrupção de nível passivo. Nesse caso, defina esse membro como NULL.
ShareVector
Um valor WDF_TRI_STATEdigitado. Se esse valor for WdfTrue, o vetor de interrupção poderá ser compartilhado. Se o valor for WdfFalse, o vetor de interrupção não poderá ser compartilhado. Se o valor for WdfDefault, o gerenciador PnP usará o valor do driver de ônibus.
FloatingSave
Um valor booliano que, se verdadeiro, indica que o sistema salvará o ponto flutuante do processador e o estado MMX quando o dispositivo for interrompido. Se FALSE, o sistema não salvará o ponto flutuante e o estado MMX. Um driver deve definir esse valor como verdadeiro somente se sua função de retorno de chamada EvtInterruptIsr precisar usar registros de ponto flutuante ou MMX. Para obter mais informações sobre como salvar o ponto flutuante e o estado MMX, consulte Usando Ponto Flutuante ou MMX em umde Driver do WDM.
Esse membro é ignorado a partir da versão 2.0 da UMDF.
AutomaticSerialization
Um valor booliano que, se verdadeiro, indica que a estrutura sincronizará a execução da função de retorno de chamada EvtInterruptDpc do objeto de interrupção ou EvtInterruptWorkItem função de retorno de chamada com funções de retorno de chamada de outros objetos que estão abaixo do objeto pai da interrupção. Para obter mais informações, consulte a seção Comentários a seguir.
EvtInterruptIsr
Um ponteiro para a função de retorno de chamada EvtInterruptIsr do driver. Esse ponteiro não pode ser NULL.
EvtInterruptDpc
Um ponteiro para a função de retorno de chamada EvtInterruptDpc do driver ou NULL. O driver pode fornecer EvtInterruptWorkItem ou EvtInterruptDpc, mas não ambos.
EvtInterruptEnable
Um ponteiro para a função de retorno de chamada EvtInterruptEnable do driver ou NULL.
EvtInterruptDisable
Um ponteiro para a função de retorno de chamada EvtInterruptDisable do driver ou NULL.
EvtInterruptWorkItem
Um ponteiro para a função de retorno de chamada EvtInterruptWorkItem do driver ou NULL. O driver pode fornecer EvtInterruptWorkItem ou EvtInterruptDpc, mas não ambos. O membro EvtInterruptWorkItem está disponível na versão 1.11 e versões posteriores do KMDF.
InterruptRaw
Um ponteiro para a estrutura de CM_PARTIAL_RESOURCE_DESCRIPTOR que descreve os recursos brutos que o sistema atribuiu à interrupção. Esse membro só será usado se a interrupção for criada no EvtDevicePrepareHardware retorno de chamada. O membro InterruptRaw está disponível na versão 1.11 e versões posteriores do KMDF.
InterruptTranslated
Um ponteiro para a estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR que descreve os recursos traduzidos que o sistema atribuiu à interrupção. Esse membro só será usado se a interrupção for criada no EvtDevicePrepareHardware retorno de chamada. O membro InterruptTranslated está disponível na versão 1.11 e versões posteriores do KMDF.
WaitLock
Um identificador para um objeto de bloqueio de espera da estrutura, obtido por uma chamada anterior para WdfWaitLockCreate ou NULL. Se WaitLock não forNULL, PassiveHandling deverá ser definido como TRUE. O membro WaitLock está disponível na versão 1.11 e versões posteriores do KMDF. Para obter mais informações sobre WaitLock, consulte Comentários.
PassiveHandling
Defina como FALSE para tratamento de interrupção no DIRQL (IRQL) do dispositivo. Defina como TRUE para tratamento de interrupção de nível passivo. O membro PassiveHandling está disponível na versão 1.11 e versões posteriores do KMDF. A partir do UMDF versão 2.0, WDF_INTERRUPT_CONFIG_INIT sempre define esse membro como TRUE.
ReportInactiveOnPowerDown
Esse membro aplica-se somente ao KMDF.
Um valor digitado WDF_TRI_STATEque se aplica somente se o driver não tiver chamado WdfDeviceInitSetPowerNotPageable. Esse membro pode ter um dos seguintes valores:
WdfTrue – KMDF relata a interrupção inativa quando o dispositivo faz a transição para um estado de baixa potência (Dx). Em sistemas operacionais anteriores ao Windows 8, o comportamento da estrutura corresponde ao descrito para WdfFalse.
WdfFalse – KMDF desconecta a interrupção quando o dispositivo faz a transição para um estado Dx (baixa potência).
WdfDefault – Em plataformas baseadas em ARM, o comportamento da estrutura corresponde ao descrito para WdfTrue. Em outras plataformas, o comportamento da estrutura corresponde ao descrito para WdfFalse.
O membro ReportInactiveOnPowerDown está disponível na versão 1.11 e versões posteriores do KMDF. Ele não está disponível no UMDF versão 2.0.
Para obter mais informações sobre como relatar uma interrupção inativa, consulte Tornando um ISR Ativo ou Inativo.
CanWakeDevice
Um valor booliano que indica se a interrupção é usada para ativar o dispositivo de um estado de baixa potência. Se FALSE, a interrupção não será usada para ativar o dispositivo. Se verdadeiro, a interrupção será usada para ativar o dispositivo. O membro CanWakeDevice está disponível a partir do KMDF versão 1.13 e UMDF versão 2.0.
Observações
A estrutura WDF_INTERRUPT_CONFIG é usada como entrada para WdfInterruptCreate.
Para inicializar uma estrutura de WDF_INTERRUPT_CONFIG, o driver deve primeiro chamar WDF_INTERRUPT_CONFIG_INIT e, em seguida, preencher os membros da estrutura que WDF_INTERRUPT_CONFIG_INIT não inicializar.
Se de AutomaticSerialization for TRUE, as seguintes regras se aplicarão:
- Se o nível de execução do objeto pai da interrupção for WdfExecutionLevelPassive, o driver poderá fornecer EvtInterruptWorkItem, mas não deverá fornecer EvtInterruptDpc nessa estrutura de configuração.
- Se o nível de execução do objeto pai da interrupção for WdfExecutionLevelDispatch, o driver poderá fornecer EvtInterruptDpc, mas não deverá fornecer EvtInterruptWorkItem nessa estrutura de configuração. Nesse segundo caso, o próprio objeto de interrupção ainda pode ser passivo.
- EvtInterruptEnable
- EvtInterruptDisable
- EvtInterruptSynchronize
- EvtInterruptIsr
Para obter mais informações sobre de AutomaticSerialization e sincronizar funções de retorno de chamada do driver, consulte Técnicas de Sincronização para drivers de Framework-Based.
Por padrão, os drivers de função KMDF são de energia paginável. Um driver chama WdfDeviceInitSetPowerNotPageable para especificar que ele não é de energia pageable.
Em versões kmdf anteriores à 1.11, a estrutura sempre desconecta interrupções de drivers de energia pageable quando o dispositivo faz a transição para um estado Dx (baixa potência). A partir do KMDF versão 1.11, você pode alterar esse comportamento definindo o ReportInactiveOnPowerDown membro dessa estrutura. Para drivers pagináveis sem energia, as interrupções permanecem conectadas quando ocorrem transições de estado Dx, independentemente do valor definido em ReportInactiveOnPowerDown.
Se um driver UMDF definir ReportInactiveOnPowerDown, o valor será ignorado.
Para obter mais informações sobre como lidar com interrupções em drivers baseados em estrutura, consulte Tratando interrupções de hardware.
O driver pode usar o membro canWakeDevice dessa estrutura para criar uma interrupção que pode ser usada para trazer o dispositivo de um estado Dx de baixa potência de volta para D0. A rotina de retorno de chamada EvtInterruptIsr do driver está agendada para ser executada em IRQL = PASSIVE_LEVEL depois que o dispositivo entra em D0.
Para obter mais informações, consulte Usando uma interrupção para ativar um dispositivo.
Requisitos
Requisito | Valor |
---|---|
versão mínima do KMDF | 1.0 |
versão mínima do UMDF | 2.0 |
cabeçalho | wdfinterrupt.h (inclua Wdf.h) |