|
|
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
dpower.h
Abstract:
This handles requests to have devices set themselves at specific power levels
Author:
Jason Clark (jasoncl) Stephane Plante (splante)
Environment:
Kernel mode only.
Revision History:
09-Oct-96 Initial Revision 20-Nov-96 Interrupt Vector support 31-Mar-97 Cleanup 29-Sep-97 Major Rewrite
--*/
#ifndef _DEVPOWER_H_
#define _DEVPOWER_H_
#define DEVICE_POWER_MAXIMUM 4
#define SYSTEM_POWER_MAXIMUM 6
//
// Prototype function pointer
//
typedef NTSTATUS (*PACPI_POWER_FUNCTION)( IN PACPI_POWER_REQUEST);
extern BOOLEAN AcpiPowerDpcRunning; extern BOOLEAN AcpiPowerWorkDone; extern KSPIN_LOCK AcpiPowerLock; extern KSPIN_LOCK AcpiPowerQueueLock; extern LIST_ENTRY AcpiPowerDelayedQueueList; extern LIST_ENTRY AcpiPowerQueueList; extern LIST_ENTRY AcpiPowerPhase0List; extern LIST_ENTRY AcpiPowerPhase1List; extern LIST_ENTRY AcpiPowerPhase2List; extern LIST_ENTRY AcpiPowerPhase3List; extern LIST_ENTRY AcpiPowerPhase4List; extern LIST_ENTRY AcpiPowerPhase5List; extern LIST_ENTRY AcpiPowerWaitWakeList; extern LIST_ENTRY AcpiPowerSynchronizeList; extern LIST_ENTRY AcpiPowerNodeList; extern KDPC AcpiPowerDpc; extern BOOLEAN AcpiPowerLeavingS0; extern NPAGED_LOOKASIDE_LIST ObjectDataLookAsideList; extern NPAGED_LOOKASIDE_LIST RequestLookAsideList; extern DEVICE_POWER_STATE DevicePowerStateTranslation[DEVICE_POWER_MAXIMUM]; extern SYSTEM_POWER_STATE SystemPowerStateTranslation[SYSTEM_POWER_MAXIMUM]; extern ULONG AcpiSystemStateTranslation[PowerSystemMaximum];
VOID ACPIDeviceCancelWaitWakeIrp( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );
VOID EXPORT ACPIDeviceCancelWaitWakeIrpCallBack( IN PNSOBJ AcpiObject, IN NTSTATUS Status, IN POBJDATA ObjectData, IN PVOID Context );
VOID ACPIDeviceCompleteCommon( IN PULONG OldWorkDone, IN ULONG NewWorkDone );
VOID EXPORT ACPIDeviceCompleteGenericPhase( IN PNSOBJ AcpiObject, IN NTSTATUS Status, IN POBJDATA ObjectData, IN PVOID Context );
VOID EXPORT ACPIDeviceCompleteInterpreterRequest( IN PVOID Context );
VOID EXPORT ACPIDeviceCompletePhase3Off( IN PNSOBJ AcpiObject, IN NTSTATUS Status, IN POBJDATA ObjectData, IN PVOID Context );
VOID EXPORT ACPIDeviceCompletePhase3On( IN PNSOBJ AcpiObject, IN NTSTATUS Status, IN POBJDATA ObjectData, IN PVOID Context );
VOID ACPIDeviceCompleteRequest( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDeviceInitializePowerRequest( IN PDEVICE_EXTENSION DeviceExtension, IN POWER_STATE Power, IN PACPI_POWER_CALLBACK CallBack, IN PVOID CallBackContext, IN POWER_ACTION PowerAction, IN ACPI_POWER_REQUEST_TYPE RequestType, IN ULONG Flags );
NTSTATUS ACPIDeviceInternalDelayedDeviceRequest( IN PDEVICE_EXTENSION DeviceExtension, IN DEVICE_POWER_STATE DeviceState, IN PACPI_POWER_CALLBACK CallBack, IN PVOID CallBackContext );
NTSTATUS ACPIDeviceInternalDeviceRequest( IN PDEVICE_EXTENSION DeviceExtension, IN DEVICE_POWER_STATE DeviceState, IN PACPI_POWER_CALLBACK CallBack, IN PVOID CallBackContext, IN ULONG Flags );
VOID ACPIDeviceInternalQueueRequest( IN PDEVICE_EXTENSION DeviceExtension, IN PACPI_POWER_REQUEST PowerRequest, IN ULONG Flags );
VOID ACPIDeviceIrpCompleteRequest( IN PDEVICE_EXTENSION DeviceExtension, IN PVOID Context, IN NTSTATUS Status );
VOID ACPIDeviceIrpDelayedDeviceOffRequest( IN PDEVICE_EXTENSION DeviceExtension, IN PVOID Context, IN NTSTATUS Status );
VOID ACPIDeviceIrpDelayedDeviceOnRequest( IN PDEVICE_EXTENSION DeviceExtension, IN PVOID Context, IN NTSTATUS Status );
NTSTATUS ACPIDeviceIrpDeviceFilterRequest( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PACPI_POWER_CALLBACK CallBack );
NTSTATUS ACPIDeviceIrpDeviceRequest( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PACPI_POWER_CALLBACK CallBack );
VOID ACPIDeviceIrpForwardRequest( IN PDEVICE_EXTENSION DeviceExtension, IN PVOID Context, IN NTSTATUS Status );
NTSTATUS ACPIDeviceIrpSystemRequest( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PACPI_POWER_CALLBACK CallBack );
NTSTATUS ACPIDeviceIrpWaitWakeRequest( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PACPI_POWER_CALLBACK CallBack );
VOID ACPIDeviceIrpWaitWakeRequestComplete( IN PACPI_POWER_REQUEST PowerRequest );
VOID EXPORT ACPIDeviceIrpWaitWakeRequestPending( IN PNSOBJ AcpiObject, IN NTSTATUS Status, IN POBJDATA ObjectData, IN PVOID Context );
NTSTATUS ACPIDeviceIrpWarmEjectRequest( IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp, IN PACPI_POWER_CALLBACK CallBack, IN BOOLEAN UpdateHardwareProfile );
#define ACPIDeviceMapACPIPowerState( STATE ) \
(STATE >= PowerSystemMaximum ? \ (ULONG) -1 : AcpiSystemStateTranslation[STATE]) #define ACPIDeviceMapPowerState( STATE ) \
(STATE >= DEVICE_POWER_MAXIMUM ? \ PowerDeviceUnspecified : \ DevicePowerStateTranslation[STATE]) #define ACPIDeviceMapSystemState( STATE) \
(STATE >= SYSTEM_POWER_MAXIMUM ? \ PowerSystemUnspecified : \ SystemPowerStateTranslation[STATE])
NTSTATUS ACPIDevicePowerDetermineSupportedDeviceStates( IN PDEVICE_EXTENSION DeviceExtension, IN PULONG SupportedPrStates, IN PULONG SupportedPsStates );
VOID ACPIDevicePowerDpc( IN PKDPC Dpc, IN PVOID DpcContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2 );
NTSTATUS ACPIDevicePowerFlushQueue( PDEVICE_EXTENSION DeviceExtension );
VOID ACPIDevicePowerNotifyEvent( IN PDEVICE_EXTENSION DeviceExtension, IN PVOID Context, IN NTSTATUS Status );
NTSTATUS ACPIDevicePowerProcessForward( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessGenericPhase( IN PLIST_ENTRY ListEntry, IN PACPI_POWER_FUNCTION **DispatchTable, IN BOOLEAN Complete );
NTSTATUS ACPIDevicePowerProcessInvalid( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase0DeviceSubPhase1( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase0DeviceSubPhase2( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase0SystemSubPhase1( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase1DeviceSubPhase1( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase1DeviceSubPhase2( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase1DeviceSubPhase3( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase1DeviceSubPhase4( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase2SystemSubPhase1( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase2SystemSubPhase2( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase2SystemSubPhase3( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase3( VOID );
NTSTATUS ACPIDevicePowerProcessPhase4( VOID );
NTSTATUS ACPIDevicePowerProcessPhase5DeviceSubPhase1( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase5DeviceSubPhase2( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase5DeviceSubPhase3( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase5DeviceSubPhase4( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase5DeviceSubPhase5( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase5DeviceSubPhase6( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase5SystemSubPhase1( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase5SystemSubPhase2( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase5SystemSubPhase3( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase5SystemSubPhase4( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase5WarmEjectSubPhase1( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessPhase5WarmEjectSubPhase2( IN PACPI_POWER_REQUEST PowerRequest );
NTSTATUS ACPIDevicePowerProcessSynchronizeList( IN PLIST_ENTRY ListEntry );
#endif
|