reactos/sdk/lib/drivers/wdf/shared/inc/private/common/fxpoxinterface.hpp
Victor Perevertkin 1f377076d7
[WDF] Fix KMDF so it can compile with ReactOS SDK
Not all files are included, but these are necessary to compile cdrom driver.
So far it can only be statically linked with drivers, a proper
implementation requires wdfldr helper driver
2020-11-03 00:06:27 +03:00

197 lines
3.3 KiB
C++

//
// Copyright (C) Microsoft. All rights reserved.
//
#ifndef _FXPOXINTERFACE_H_
#define _FXPOXINTERFACE_H_
#include "fxdevicepwrreqstatemachine.hpp"
class FxPoxInterface {
friend class FxDevicePwrRequirementMachine;
public:
FxPoxInterface(
__in FxPkgPnp* PkgPnp
);
~FxPoxInterface(
VOID
);
NTSTATUS
CreateDevicePowerRequirementMachine(
VOID
);
NTSTATUS
NotifyDevicePowerDown(
VOID
);
VOID
DeviceIsPoweredOn(
VOID
);
FxPkgPnp*
PkgPnp(
VOID
)
{
return m_PkgPnp;
}
POHANDLE
GetPoHandle(
VOID
)
{
return m_PoHandle;
}
NTSTATUS
InitializeComponents(
VOID
);
VOID
UninitializeComponents(
VOID
);
VOID
RequestComponentActive(
VOID
);
BOOLEAN
DeclareComponentIdle(
VOID
);
VOID
UpdateIdleTimeoutHint(
VOID
);
VOID
SimulateDevicePowerRequired(
VOID
);
VOID
SimulateDevicePowerNotRequired(
VOID
);
VOID
PoxReportDevicePoweredOn(
VOID
);
VOID
PowerRequiredCallbackInvoked(
VOID
);
VOID
PowerNotRequiredCallbackInvoked(
VOID
);
private:
NTSTATUS
PoxRegisterDevice(
VOID
);
VOID
DprProcessEventFromPoxCallback(
__in FxDevicePwrRequirementEvents Event
);
struct _POX_SETTINGS *
GetPowerFrameworkSettings(
VOID
);
VOID
PowerRequiredCallbackWorker(
__in BOOLEAN InvokedFromPoxCallback
);
VOID
PowerNotRequiredCallbackWorker(
__in BOOLEAN InvokedFromPoxCallback
);
VOID
PoxStartDevicePowerManagement(
VOID
);
VOID
PoxUnregisterDevice(
VOID
);
VOID
PoxActivateComponent(
VOID
);
VOID
PoxIdleComponent(
VOID
);
VOID
PoxSetDeviceIdleTimeout(
__in ULONGLONG IdleTimeout
);
static PO_FX_COMPONENT_IDLE_STATE_CALLBACK StateCallback;
static PO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK ComponentActiveCallback;
static PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK ComponentIdleCallback;
static PO_FX_DEVICE_POWER_REQUIRED_CALLBACK PowerRequiredCallback;
static PO_FX_DEVICE_POWER_NOT_REQUIRED_CALLBACK PowerNotRequiredCallback;
static PO_FX_POWER_CONTROL_CALLBACK PowerControlCallback;
public:
//
// Device power requirement state machine
//
FxDevicePwrRequirementMachine * m_DevicePowerRequirementMachine;
//
// Idle timeout hint to be provided to power framework at the next
// opportunity, i.e. a pending update to the idle timeout hint.
//
ULONG m_NextIdleTimeoutHint;
private:
FxPkgPnp* m_PkgPnp;
//
// Handle obtained upon registration with power manager
//
POHANDLE m_PoHandle;
//
// Variable that tracks whether device power is required and the lock that
// protects this variable
//
BOOLEAN m_DevicePowerRequired;
MxLock m_DevicePowerRequiredLock;
//
// Idle timeout hint currently provided to power framework.
//
ULONG m_CurrentIdleTimeoutHint;
};
#endif // _FXPOXINTERFACE_H_