Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

415 lines
11 KiB

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