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.

Nota Si CanWakeDevice está establecido en TRUE y ReportInactiveOnPowerDown está establecido en WdfTrue, el marco no notifica la interrupción inactiva cuando el dispositivo pasa a un estado de bajo consumo.
 

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.
El controlador puede usar el miembro WaitLock de esta estructura para proporcionar su propio bloqueo de interrupción para el control de interrupciones de nivel pasivo. Si el controlador establece PassiveHandling en TRUE pero no proporciona un WaitLock, el marco crea un bloqueo de interrupción internamente. El marco adquiere el bloqueo de interrupción de nivel pasivo antes de llamar a las siguientes funciones de devolución de llamada:
EvtInterruptEnable
EvtInterruptDisable
EvtInterruptSynchronize
EvtInterruptIsr

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)

Consulte también

EvtInterruptDisable

EvtInterruptDpc

EvtInterruptEnable

EvtInterruptIsr

WDF_INTERRUPT_CONFIG_INIT

WDF_TRI_STATE

WdfDeviceInitSetPowerNotPageable

WdfDeviceInitSetPowerPageable

WdfInterruptCreate

WdfInterruptQueueDpcForIsr

WdfSpinLockCreate