[WDF] Add Windows Driver Framework files

Takern from Microsoft GitHub repo:
d9c6040fe9

Licensed under MIT
This commit is contained in:
Victor Perevertkin 2020-09-24 23:51:15 +03:00
parent 545df81502
commit 8a978a179f
No known key found for this signature in database
GPG key ID: C750B7222E9C7830
475 changed files with 285099 additions and 0 deletions

View file

@ -0,0 +1,151 @@
/*++
Copyright (c) Microsoft. All rights reserved.
Module Name:
PowerStateMachineKm.cpp
Abstract:
This module implements the Power state machine for the driver framework.
This code was split out from FxPkgPnp.cpp.
Author:
Environment:
Kernel mode only
Revision History:
--*/
#include "..\pnppriv.hpp"
extern "C" {
#if defined(EVENT_TRACING)
#include "PowerStateMachineKm.tmh"
#endif
}
_Must_inspect_result_
BOOLEAN
FxPkgPnp::PowerDmaPowerUp(
VOID
)
/*++
Routine Description:
Calls FxDmaEnabler::PowerUp on all registered FxDmaEnabler objects. As soon
as a PowerUp call fails, we stop iterating over the list.
Arguments:
None
Return Value:
TRUE if PowerUp succeeded on all enablers, FALSE otherwise
--*/
{
FxTransactionedEntry* ple;
NTSTATUS status;
BOOLEAN result;
result = TRUE;
//
// Power up each dma enabler
//
if (m_DmaEnablerList != NULL) {
m_DmaEnablerList->LockForEnum(GetDriverGlobals());
ple = NULL;
while ((ple = m_DmaEnablerList->GetNextEntry(ple)) != NULL) {
status = ((FxDmaEnabler*) ple->GetTransactionedObject())->PowerUp();
if (!NT_SUCCESS(status)) {
result = FALSE;
break;
}
}
m_DmaEnablerList->UnlockFromEnum(GetDriverGlobals());
}
return result;
}
BOOLEAN
FxPkgPnp::PowerDmaPowerDown(
VOID
)
/*++
Routine Description:
Calls FxDmaEnabler::PowerDown on all registered FxDmaEnabler objects. All
errors are accumulated, all enablers will be PowerDown'ed.
Arguments:
None
Return Value:
TRUE if PowerDown succeeded on all enablers, FALSE otherwise
--*/
{
FxTransactionedEntry* ple;
NTSTATUS status;
BOOLEAN result;
result = TRUE;
//
// Power up each dma enabler
//
if (m_DmaEnablerList != NULL) {
m_DmaEnablerList->LockForEnum(GetDriverGlobals());
ple = NULL;
while ((ple = m_DmaEnablerList->GetNextEntry(ple)) != NULL) {
status = ((FxDmaEnabler*) ple->GetTransactionedObject())->PowerDown();
if (!NT_SUCCESS(status)) {
//
// We do not break out of the loop on power down failure. We will
// continue to power down each channel regardless of the previous
// channel's power down status.
//
result = FALSE;
}
}
m_DmaEnablerList->UnlockFromEnum(GetDriverGlobals());
}
return result;
}
VOID
FxPkgPnp::_PowerSetSystemWakeSource(
__in FxIrp* Irp
)
/*++
Routine Description:
Set source of wake if OS supports this.
Arguments:
Irp
Return Value:
None
--*/
{
PoSetSystemWake(Irp->GetIrp());
}