/*++ 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