27 #ifndef _FXINTERRUPT_H_ 28 #define _FXINTERRUPT_H_ 84 #if ((FX_CORE_MODE)==(FX_CORE_KERNEL_MODE)) 143 #if ((FX_CORE_MODE)==(FX_CORE_KERNEL_MODE)) 169 #if ((FX_CORE_MODE)==(FX_CORE_USER_MODE)) 218 #if (FX_CORE_MODE == FX_CORE_KERNEL_MODE) 378 #if ((FX_CORE_MODE)==(FX_CORE_KERNEL_MODE)) 406 #elif ((FX_CORE_MODE)==(FX_CORE_USER_MODE)) 485 #if (FX_CORE_MODE == FX_CORE_KERNEL_MODE) 619 #if ((FX_CORE_MODE)==(FX_CORE_KERNEL_MODE)) 624 #elif ((FX_CORE_MODE)==(FX_CORE_USER_MODE)) 630 ThreadpoolWaitCallback(
635 QueueSingleWaitOnInterruptEvent(
640 StartThreadpoolWaitQueue(
645 StopAndFlushThreadpoolWaitQueue(
853 #if (FX_CORE_MODE == FX_CORE_KERNEL_MODE) 869 #endif // _FXINTERRUPT_H_
BOOLEAN IsSharedSpinLock(VOID)
NTSTATUS InterruptEnableInvokeCallback(VOID)
_Must_inspect_result_ NTSTATUS Initialize(__in CfxDevice *Device, __in FxObject *Parent, __in PWDF_INTERRUPT_CONFIG Configuration)
KSYNCHRONIZE_ROUTINE * MdInterruptSynchronizeRoutine
__inline BOOLEAN IsPassiveConnect(VOID)
static MdDeferredRoutineType _InterruptDpcThunk
static EVT_SYSTEMWORKITEM _InterruptWorkItemCallback
static MdInterruptServiceRoutineType _InterruptThunk
PCM_PARTIAL_RESOURCE_DESCRIPTOR GetResources(VOID)
virtual BOOLEAN Dispose(VOID)
#define CM_RESOURCE_INTERRUPT_WAKE_HINT
_Must_inspect_result_ NTSTATUS ConnectInternal(VOID)
VOID AssignResources(__in PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescRaw, __in PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescTrans)
BOOLEAN SharesLock(FxInterrupt *Interrupt)
VOID InvokeWakeInterruptEvtIsr(VOID)
VOID DpcHandler(__in_opt PVOID SystemArgument1, __in_opt PVOID SystemArgument2)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG Configuration
VOID RevokeResourcesInternal(VOID)
#define UNREFERENCED_PARAMETER(P)
enum _WDF_TRI_STATE WDF_TRI_STATE
static MdInterruptSynchronizeRoutineType _InterruptMarkDisconnecting
VOID FlushQueuedWorkitem(VOID)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt
BOOLEAN m_IsEdgeTriggeredNonMsiInterrupt
BOOLEAN m_CreatedInPrepareHardware
PFN_WDF_INTERRUPT_DISABLE m_EvtInterruptDisable
BOOLEAN m_DisposeWaitLock
RD_INTERRUPT_CONTEXT m_RdInterruptContext
NTSTATUS InterruptEnable(VOID)
WDF_TRI_STATE m_ShareVector
IO_WORKITEM_ROUTINE MX_WORKITEM_ROUTINE
FxSystemWorkItem * m_SystemWorkItem
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
__inline BOOLEAN IsAutomaticSerialization(VOID)
BOOLEAN QueueDpcForIsr(VOID)
_Must_inspect_result_ NTSTATUS Disconnect(__in ULONG NotifyFlags)
VOID AssignResourcesInternal(__in PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescRaw, __in PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescTrans, __in PWDF_INTERRUPT_INFO InterruptConfig)
#define CM_RESOURCE_INTERRUPT_MESSAGE
_Must_inspect_result_ NTSTATUS Connect(__in ULONG NotifyFlags)
KSERVICE_ROUTINE MdInterruptServiceRoutineType
PCM_PARTIAL_RESOURCE_DESCRIPTOR m_CmTranslatedResource
_Must_inspect_result_ NTSTATUS ForceDisconnect(VOID)
VOID FlushAndRundownInternal(VOID)
VOID RevokeResources(VOID)
VOID OnPostReleaseHardware(VOID)
BOOLEAN m_ForceDisconnected
EVT_WDF_INTERRUPT_SYNCHRONIZE * PFN_WDF_INTERRUPT_SYNCHRONIZE
volatile KIRQL m_SynchronizeIrql
static MdInterruptSynchronizeRoutineType _InterruptSynchronizeThunk
WDF_INTERRUPT_POLICY m_Policy
VOID ReportActive(_In_ BOOLEAN Internal=FALSE)
PVOID __inline GetObjectHandle(VOID)
VOID DisconnectInternal(VOID)
__inline BOOLEAN QueueDeferredRoutineForIsr(VOID)
enum _WDF_INTERRUPT_POLICY WDF_INTERRUPT_POLICY
struct _KINTERRUPT * m_Interrupt
BOOLEAN IsSoftDisconnectCapable(VOID)
#define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS
BOOLEAN _SynchronizeExecution(__in MdInterrupt Interrupt, __in MdInterruptSynchronizeRoutine SynchronizeRoutine, __in PVOID SynchronizeContext)
PWDF_INTERRUPT_INFO GetInfo(VOID)
WDF_INTERRUPT_PRIORITY m_Priority
VOID ProcessEvent(__in FxWakeInterruptEvents Event)
VOID SetSyncIrql(KIRQL SyncIrql)
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
BOOLEAN IsLevelTriggered(__in ULONG Flags)
VOID ProcessWakeInterruptEvent(__in FxWakeInterruptEvents Event)
BOOLEAN IsSyncIrqlSet(VOID)
static MdInterruptSynchronizeRoutineType _InterruptEnableThunk
VOID FlushQueuedDpcs(VOID)
_Must_inspect_result_ _In_ ULONG Flags
BOOLEAN m_PassiveHandlingByRedirector
_In_ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
CfxDevice * GetDevice(VOID)
NTSTATUS InterruptDisable(VOID)
EVT_WDF_INTERRUPT_WORKITEM * PFN_WDF_INTERRUPT_WORKITEM
enum _WDF_INTERRUPT_PRIORITY WDF_INTERRUPT_PRIORITY
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY _In_ KAFFINITY TargetProcessorSet
BOOLEAN m_PassiveHandling
VOID FlushAndRundown(VOID)
VOID SetPolicyInternal(__in WDF_INTERRUPT_POLICY Policy, __in WDF_INTERRUPT_PRIORITY Priority, __in PGROUP_AFFINITY TargetProcessorSet)
PFN_WDF_INTERRUPT_WORKITEM m_EvtInterruptWorkItem
EVT_WDF_INTERRUPT_ISR * PFN_WDF_INTERRUPT_ISR
VOID FilterResourceRequirements(__inout PIO_RESOURCE_DESCRIPTOR IoResourceDescriptor)
EVT_WDF_INTERRUPT_ENABLE * PFN_WDF_INTERRUPT_ENABLE
BOOLEAN m_UseSoftDisconnect
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
FxInterruptEnableParameters FxInterruptDisableParameters
VOID SetPolicy(__in WDF_INTERRUPT_POLICY Policy, __in WDF_INTERRUPT_PRIORITY Priority, __in PGROUP_AFFINITY TargetProcessorSet)
BOOLEAN Synchronize(__in PFN_WDF_INTERRUPT_SYNCHRONIZE Callback, __in WDFCONTEXT Context)
_Must_inspect_result_ NTSTATUS InitializeWorker(__in FxObject *Parent, __in PWDF_INTERRUPT_CONFIG Configuration)
VOID WorkItemHandler(VOID)
FxCallbackLock * m_CallbackLock
__inline BOOLEAN IsWakeCapable(VOID)
#define _Must_inspect_result_
static BOOLEAN _IsWakeHintedInterrupt(__in USHORT ResourceFlags)
_Must_inspect_result_ _In_ WDFDEVICE Device
FxLibraryGlobalsType FxLibraryGlobals
PFN_WDF_INTERRUPT_ISR m_EvtInterruptIsr
PFN_WDF_INTERRUPT_ENABLE m_EvtInterruptEnable
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
KDEFERRED_ROUTINE MdDeferredRoutineType
_In_ PKSYNCHRONIZE_ROUTINE _In_opt_ __drv_aliasesMem PVOID SynchronizeContext
__inline BOOLEAN IsPassiveHandling(VOID)
static MdInterruptSynchronizeRoutineType _InterruptDisableThunk
_Must_inspect_result_ NTSTATUS ForceReconnect(VOID)
EVT_WDF_INTERRUPT_DISABLE * PFN_WDF_INTERRUPT_DISABLE
BOOLEAN TryToAcquireLock(VOID)
#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE
KIRQL GetResourceIrql(VOID)
_Must_inspect_result_ NTSTATUS InitializeInternal(__in FxObject *Parent, __in PWDF_INTERRUPT_CONFIG Configuration)
WDFINTERRUPT GetHandle(VOID)
BOOLEAN QueueWorkItemForIsr(VOID)
_Must_inspect_result_ NTSTATUS CreateWakeInterruptMachine(VOID)
FxInterrupt(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
FxInterruptWaitblock * m_InterruptWaitblock
BOOLEAN WakeInterruptIsr(VOID)
static _Must_inspect_result_ NTSTATUS _CreateAndInit(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in CfxDevice *Device, __in_opt FxObject *Parent, __in PWDF_OBJECT_ATTRIBUTES Attributes, __in PWDF_INTERRUPT_CONFIG Configuration, __out FxInterrupt **Interrupt)
PFN_WDF_INTERRUPT_DPC m_EvtInterruptDpc
GROUP_AFFINITY m_Processors
virtual VOID DeleteObject(VOID)
virtual ~FxInterrupt(VOID)
FxWakeInterruptMachine * m_WakeInterruptMachine
VOID ReportInactive(_In_ BOOLEAN Internal=FALSE)
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY Policy
VOID SetActiveForWake(__in BOOLEAN ActiveForWake)
static BOOLEAN _IsMessageInterrupt(__in USHORT ResourceFlags)
NTSTATUS InterruptDisableInvokeCallback(VOID)
KSYNCHRONIZE_ROUTINE MdInterruptSynchronizeRoutineType
BOOLEAN IsActiveForWake(VOID)
struct _KINTERRUPT * m_InterruptCaptured
PFN_IO_REPORT_INTERRUPT_INACTIVE IoReportInterruptInactive
WDF_INTERRUPT_INFO m_InterruptInfo
EVT_WDF_INTERRUPT_DPC * PFN_WDF_INTERRUPT_DPC
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
struct _KINTERRUPT * GetInterruptPtr(VOID)