estructura WDF_INTERRUPT_CONFIG (wdfinterrupt.h)
[Se aplica a KMDF y UMDF]
La estructura WDF_INTERRUPT_CONFIG contiene información de configuración para una interrupción del dispositivo.
Sintaxis
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;
Miembros
Size
Tamaño, en bytes, de esta estructura.
SpinLock
Identificador de un objeto de bloqueo por número de marco, obtenido por una llamada anterior a WdfSpinLockCreate o NULL. Si este parámetro es NULL, el marco usa un objeto de bloqueo de número interno. El marco adquiere el bloqueo de número antes de llamar a la función de devolución de llamada de eventos EvtInterruptSynchronize del controlador y cuando el controlador llama a WdfInterruptAcquireLock. Para el control de interrupciones de nivel pasivo, establezca en NULL.
A partir de la versión 2.0 de UMDF, UMDF siempre usa el control de interrupciones de nivel pasivo. En este caso, establezca este miembro en NULL.
ShareVector
Valor con tipo WDF_TRI_STATE. Si este valor es WdfTrue, se puede compartir el vector de interrupción. Si el valor es WdfFalse, no se puede compartir el vector de interrupción. Si el valor es WdfDefault, el administrador de PnP usa el valor del controlador de bus.
FloatingSave
Valor booleano que, si es TRUE, indica que el sistema guardará el punto flotante del procesador y el estado MMX cuando se interrumpa el dispositivo. Si es FALSE, el sistema no guarda el punto flotante y el estado MMX. Un controlador debe establecer este valor en TRUE solo si su función de devolución de llamada EvtInterruptIsr debe usar registros mmx o de punto flotante. Para obtener más información sobre cómo guardar el punto flotante y el estado MMX, vea Usar punto flotante o MMX en un controlador WDM.
Este miembro se omite a partir de la versión 2.0 de UMDF.
AutomaticSerialization
Valor booleano que, si es TRUE, indica que el marco sincronizará la ejecución de la función de devolución de llamada EvtInterruptDpc o EvtInterruptWorkItem del objeto de interrupción con funciones de devolución de llamada de otros objetos que están debajo del objeto primario de la interrupción. Para obtener más información, vea la sección Comentarios que se muestra más adelante.
EvtInterruptIsr
Puntero a la función de devolución de llamada EvtInterruptIsr del controlador. Este puntero no puede ser NULL.
EvtInterruptDpc
Puntero a la función de devolución de llamada EvtInterruptDpc del controlador o NULL. El controlador puede proporcionar EvtInterruptWorkItem o EvtInterruptDpc, pero no ambos.
EvtInterruptEnable
Puntero a la función de devolución de llamada EvtInterruptEnable del controlador o NULL.
EvtInterruptDisable
Puntero a la función de devolución de llamada EvtInterruptDisable del controlador o NULL.
EvtInterruptWorkItem
Puntero a la función de devolución de llamada EvtInterruptWorkItem del controlador o NULL. El controlador puede proporcionar EvtInterruptWorkItem o EvtInterruptDpc, pero no ambos. El miembro EvtInterruptWorkItem está disponible en la versión 1.11 y versiones posteriores de KMDF.
InterruptRaw
Puntero a la estructura CM_PARTIAL_RESOURCE_DESCRIPTOR que describe los recursos sin procesar asignados al sistema a la interrupción. Este miembro solo se usa si la interrupción se crea en la devolución de llamada EvtDevicePrepareHardware . El miembro InterruptRaw está disponible en la versión 1.11 y versiones posteriores de KMDF.
InterruptTranslated
Puntero a la estructura CM_PARTIAL_RESOURCE_DESCRIPTOR que describe los recursos traducidos que el sistema asignó a la interrupción. Este miembro solo se usa si la interrupción se crea en la devolución de llamada EvtDevicePrepareHardware . El miembro InterruptTranslated está disponible en la versión 1.11 y versiones posteriores de KMDF.
WaitLock
Identificador de un objeto wait-lock de marco, obtenido por una llamada anterior a WdfWaitLockCreate o NULL. Si WaitLock no es NULL, PassiveHandling debe establecerse en TRUE. El miembro WaitLock está disponible en la versión 1.11 y versiones posteriores de KMDF. Para obtener más información sobre WaitLock, vea Comentarios.
PassiveHandling
Establézcalo en FALSE para el control de interrupciones en el IRQL (DIRQL) del dispositivo. Establézcalo en TRUE para el control de interrupciones de nivel pasivo. El miembro PassiveHandling está disponible en la versión 1.11 y versiones posteriores de KMDF. A partir de la versión 2.0 de UMDF, WDF_INTERRUPT_CONFIG_INIT siempre establece este miembro en TRUE.
ReportInactiveOnPowerDown
Este miembro solo se aplica a KMDF.
Valor de tipo WDF_TRI_STATE que solo se aplica si el controlador no ha llamado a WdfDeviceInitSetPowerNotPageable. Este miembro puede tener uno de los siguientes valores:
WdfTrue : KMDF notifica la interrupción inactiva cuando el dispositivo pasa a un estado de bajo consumo (Dx). En los sistemas operativos anteriores a Windows 8, el comportamiento del marco coincide con el descrito para WdfFalse.
WdfFalse : KMDF desconecta la interrupción cuando el dispositivo pasa a un estado de bajo consumo (Dx).
WdfDefault : en plataformas basadas en ARM, el comportamiento del marco coincide con el descrito para WdfTrue. En otras plataformas, el comportamiento del marco coincide con el descrito para WdfFalse.
El miembro ReportInactiveOnPowerDown está disponible en la versión 1.11 y versiones posteriores de KMDF. No está disponible en la versión 2.0 de UMDF.
Para obtener más información sobre cómo notificar una interrupción inactiva, vea Hacer que un ISR esté activo o inactivo.
CanWakeDevice
Valor booleano que indica si la interrupción se usa para reactivar el dispositivo desde un estado de bajo consumo. Si es FALSE, la interrupción no se usa para reactivar el dispositivo. Si es TRUE, la interrupción se usa para reactivar el dispositivo. El miembro CanWakeDevice está disponible a partir de la versión 1.13 de KMDF y la versión 2.0 de UMDF.
Comentarios
La estructura WDF_INTERRUPT_CONFIG se usa como entrada para WdfInterruptCreate.
Para inicializar una estructura de WDF_INTERRUPT_CONFIG , el controlador debe llamar primero a WDF_INTERRUPT_CONFIG_INIT y, a continuación, rellenar los miembros de la estructura que WDF_INTERRUPT_CONFIG_INIT no inicializa.
Si AutomaticSerialization es TRUE, se aplican las reglas siguientes:
- Si el nivel de ejecución del objeto primario de la interrupción es WdfExecutionLevelPassive, el controlador puede proporcionar EvtInterruptWorkItem, pero no debe proporcionar EvtInterruptDpc en esta estructura de configuración.
- Si el nivel de ejecución del objeto primario de la interrupción es WdfExecutionLevelDispatch, el controlador puede proporcionar EvtInterruptDpc, pero no debe proporcionar EvtInterruptWorkItem en esta estructura de configuración. En este segundo caso, el propio objeto de interrupción todavía puede ser pasivo.
Para obtener más información sobre la automaticserialización y la sincronización de las funciones de devolución de llamada del controlador, consulte Técnicas de sincronización para controladores de Framework-Based.
De forma predeterminada, los controladores de función KMDF son paginables. Un controlador llama a WdfDeviceInitSetPowerNotPageable para especificar que no es paginable de energía.
En las versiones de KMDF anteriores a la 1.11, el marco siempre desconecta las interrupciones de los controladores paginables de energía cuando el dispositivo pasa a un estado de bajo consumo (Dx). A partir de la versión 1.11 de KMDF, puede cambiar este comportamiento estableciendo el miembro ReportInactiveOnPowerDown de esta estructura. En el caso de los controladores que no admiten páginas de energía, las interrupciones permanecen conectadas cuando se producen transiciones de estado Dx, independientemente del valor establecido en ReportInactiveOnPowerDown.
Si un controlador UMDF establece ReportInactiveOnPowerDown, se omite el valor.
Para obtener más información sobre el control de interrupciones en controladores basados en marcos, consulte Control de interrupciones de hardware.
El controlador puede usar el miembro CanWakeDevice de esta estructura para crear una interrupción que se puede usar para devolver el dispositivo de un estado Dx de baja potencia a D0. La rutina de devolución de llamada EvtInterruptIsr del controlador está programada para ejecutarse en IRQL = PASSIVE_LEVEL después de que el dispositivo entre en D0.
Para obtener más información, vea Usar una interrupción para reactivar un dispositivo.
Requisitos
Requisito | Value |
---|---|
Versión mínima de KMDF | 1.0 |
Versión mínima de UMDF | 2.0 |
Encabezado | wdfinterrupt.h (incluir Wdf.h) |