структура WDF_INTERRUPT_CONFIG (wdfinterrupt.h)

[Относится к KMDF и UMDF]

Структура WDF_INTERRUPT_CONFIG содержит сведения о конфигурации прерывания устройства.

Синтаксис

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;

Члены

Size

Размер данной структуры (в байтах).

SpinLock

Дескриптор объекта spin-lock платформы, полученный при предыдущем вызове WdfSpinLockCreate или NULL. Если этот параметр имеет значение NULL, платформа использует внутренний объект спин-блокировки. Платформа получает спиновую блокировку перед вызовом функции обратного вызова события EvtInterruptSynchronize драйвера и при вызове драйвером WdfInterruptAcquireLock. Для обработки прерываний пассивного уровня задайте значение NULL.

Начиная с UMDF версии 2.0, UMDF всегда использует обработку прерываний пассивного уровня. В этом случае присвойте этому члену значение NULL.

ShareVector

WDF_TRI_STATE типизированное значение. Если это значение равно WdfTrue, вектор прерывания можно совместно использовать. Если значение — WdfFalse, вектор прерывания не может быть общим. Если значение — WdfDefault, диспетчер PnP использует значение водителя автобуса.

FloatingSave

Логическое значение, которое, если значение TRUE, указывает на то, что система сохранит состояние процессора с плавающей запятой и MMX при прерывании устройства. Если значение FALSE, система не сохраняет состояние с плавающей запятой и MMX. Драйвер должен задать для этого значения значение TRUE , только если функция обратного вызова EvtInterruptIsr должна использовать регистры с плавающей запятой или MMX. Дополнительные сведения о сохранении состояния с плавающей запятой и MMX см. в статье Использование с плавающей запятой или MMX в драйвере WDM.

Этот элемент игнорируется, начиная с UMDF версии 2.0.

AutomaticSerialization

Логическое значение, которое, если значение TRUE, указывает, что платформа синхронизирует выполнение функции обратного вызова EvtInterruptDpc или EvtInterruptWorkItem объекта прерывания с функциями обратного вызова из других объектов, которые находятся под родительским объектом прерывания. Дополнительные сведения см. в разделе "Примечания".

EvtInterruptIsr

Указатель на функцию обратного вызова EvtInterruptIsr драйвера. Этот указатель не может иметь значение NULL.

EvtInterruptDpc

Указатель на функцию обратного вызова EvtInterruptDpc драйвера или NULL. Драйвер может предоставить EvtInterruptWorkItem или EvtInterruptDpc, но не оба.

EvtInterruptEnable

Указатель на функцию обратного вызова EvtInterruptEnable драйвера или NULL.

EvtInterruptDisable

Указатель на функцию обратного вызова EvtInterruptDisable драйвера или NULL.

EvtInterruptWorkItem

Указатель на функцию обратного вызова EvtInterruptWorkItem драйвера или NULL. Драйвер может предоставить EvtInterruptWorkItem или EvtInterruptDpc, но не оба. Член EvtInterruptWorkItem доступен в KMDF версии 1.11 и более поздних версиях.

InterruptRaw

Указатель на структуру CM_PARTIAL_RESOURCE_DESCRIPTOR , описывающую необработанные ресурсы , назначенные системой прерыванию. Этот член используется только в том случае, если прерывание создается в обратном вызове EvtDevicePrepareHardware . Член InterruptRaw доступен в KMDF версии 1.11 и более поздних версиях.

InterruptTranslated

Указатель на структуру CM_PARTIAL_RESOURCE_DESCRIPTOR , описывающую преобразованные ресурсы , назначенные системе прерыванию. Этот член используется только в том случае, если прерывание создается в обратном вызове EvtDevicePrepareHardware . Член InterruptTranslated доступен в KMDF версии 1.11 и более поздних версиях.

WaitLock

Дескриптор объекта платформы wait-lock, полученный при предыдущем вызове WdfWaitLockCreate или NULL. Если значение WaitLock не равно NULL, параметру PassiveHandling необходимо задать значение TRUE. Элемент WaitLock доступен в KMDF версии 1.11 и более поздних версиях. Дополнительные сведения о WaitLock см. в разделе Примечания.

PassiveHandling

Установите значение FALSE для обработки прерываний в IRQL устройства (DIRQL). Задайте значение TRUE для обработки прерываний пассивного уровня. Элемент PassiveHandling доступен в KMDF версии 1.11 и более поздних версиях. Начиная с версии UMDF 2.0 , WDF_INTERRUPT_CONFIG_INIT всегда присваивает этому члену значение TRUE.

ReportInactiveOnPowerDown

Этот элемент применяется только к KMDF.

Значение типа WDF_TRI_STATE, которое применяется только в том случае, если драйвер не вызвал WdfDeviceInitSetPowerNotPageable. Этот элемент может иметь одно из следующих значений:

WdfTrue — KMDF сообщает о неактивном прерывании при переходе устройства в состояние с низким энергопотреблением (Dx). В операционных системах до Windows 8 поведение платформы соответствует описанному для WdfFalse.

Примечание Если параметру CanWakeDevice присвоено значение TRUE , а параметру ReportInactiveOnPowerDown присвоено значение WdfTrue, платформа не сообщает о неактивном прерывании при переходе устройства в состояние с низким энергопотреблением.
 

WdfFalse — KMDF отключает прерывание при переходе устройства в состояние с низким энергопотреблением (Dx).

WdfDefault — на платформах на основе ARM поведение платформы соответствует описанному для WdfTrue. На других платформах поведение платформы соответствует описанному для WdfFalse.

Элемент ReportInactiveOnPowerDown доступен в KMDF версии 1.11 и более поздних версиях. Он недоступен в UMDF версии 2.0.

Дополнительные сведения о том, как сообщить о неактивном прерывании, см. в статье Создание isr active или Inactive.

CanWakeDevice

Логическое значение, указывающее, используется ли прерывание для пробуждения устройства из состояния с низким энергопотреблением. Если значение FALSE, прерывание не используется для пробуждения устройства. Если задано значение TRUE, прерывание используется для пробуждения устройства. Элемент CanWakeDevice доступен начиная с KMDF версии 1.13 и UMDF версии 2.0.

Комментарии

Структура WDF_INTERRUPT_CONFIG используется в качестве входных данных для WdfInterruptCreate.

Чтобы инициализировать структуру WDF_INTERRUPT_CONFIG , драйвер должен сначала вызвать WDF_INTERRUPT_CONFIG_INIT , а затем заполнить элементы структуры, которые WDF_INTERRUPT_CONFIG_INIT не инициализирует.

Если параметр AutomaticSerialization имеет значение TRUE, применяются следующие правила:

  • Если уровень выполнения родительского объекта прерывания — WdfExecutionLevelPassive, драйвер может предоставить EvtInterruptWorkItem, но не должен предоставлять EvtInterruptDpc в этой структуре конфигурации.
  • Если уровень выполнения родительского объекта прерывания — WdfExecutionLevelDispatch, драйвер может предоставить EvtInterruptDpc, но не должен предоставлять EvtInterruptWorkItem в этой структуре конфигурации. Во втором случае сам объект прерывания по-прежнему может быть пассивным.
Драйвер может использовать элемент WaitLock этой структуры, чтобы обеспечить собственную блокировку прерываний для обработки прерываний пассивного уровня. Если драйвер задает для PassiveHandling значение TRUE, но не предоставляет WaitLock, платформа создает блокировку прерываний внутри системы. Платформа получает блокировку прерываний пассивного уровня перед вызовом следующих функций обратного вызова:
EvtInterruptEnable
EvtInterruptDisable
EvtInterruptSynchronize
EvtInterruptIsr

Дополнительные сведения об автоматическойсериализации и синхронизации функций обратного вызова драйвера см. в статье Методы синхронизации для драйверов Framework-Based.

По умолчанию драйверы функций KMDF доступны для power pageable. Драйвер вызывает WdfDeviceInitSetPowerNotPageable , чтобы указать, что он недоступен для страниц.

В версиях KMDF, предшествующих версии 1.11, платформа всегда отключает прерывания работы драйверов power pageable, когда устройство переходит в состояние с низким энергопотреблением (Dx). Начиная с KMDF версии 1.11 это поведение можно изменить, задав элемент ReportInactiveOnPowerDown этой структуры. Для драйверов, не доступных для страниц, прерывания остаются подключенными при переходе состояния Dx, независимо от значения, заданного в ReportInactiveOnPowerDown.

Если драйвер UMDF задает параметр ReportInactiveOnPowerDown, значение игнорируется.

Дополнительные сведения об обработке прерываний в драйверах на основе платформы см. в разделе Обработка аппаратных прерываний.

Драйвер может использовать элемент CanWakeDevice этой структуры для создания прерывания, которое можно использовать для возврата устройства из состояния Dx с низким энергопотреблением в D0. Подпрограмма обратного вызова EvtInterruptIsr драйвера должна выполняться по адресу IRQL = PASSIVE_LEVEL после входа устройства в D0.

Дополнительные сведения см. в разделе Использование прерывания для пробуждения устройства.

Требования

Требование Значение
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfinterrupt.h (включая Wdf.h)

См. также раздел

EvtInterruptDisable

EvtInterruptDpc

EvtInterruptEnable

EvtInterruptIsr

WDF_INTERRUPT_CONFIG_INIT

WDF_TRI_STATE

WdfDeviceInitSetPowerNotPageable

WdfDeviceInitSetPowerPageable

WdfInterruptCreate

WdfInterruptQueueDpcForIsr

WdfSpinLockCreate