Windows NT 4.0 source code leak
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.

175 lines
3.6 KiB

4 years ago
  1. /*++ BUILD Version: 0002
  2. Copyright (c) 1995 Microsoft Corporation
  3. Module Name:
  4. pop.h
  5. Abstract:
  6. This module contains the private structure definitions and APIs used by
  7. the NT Power Manager.
  8. Author:
  9. N. Yoshiyama [IBM Corp.] 01-Mar-1994
  10. Revision History:
  11. --*/
  12. #ifndef _POP_
  13. #define _POP_
  14. #include "ntos.h"
  15. #define PopLockStateDatabase(OldIrql) \
  16. KeAcquireSpinLock (&PopStateLock, OldIrql);
  17. #define PopUnlockStateDatabase(OldIrql) \
  18. KeReleaseSpinLock (&PopStateLock, OldIrql);
  19. #define PopLockDeviceList(sharable) \
  20. if (sharable) { \
  21. ExAcquireResourceShared(&PsLoadedModuleResource, TRUE); \
  22. } else { \
  23. ExAcquireResourceExclusive(&PsLoadedModuleResource, TRUE); \
  24. }
  25. #define PopUnlockDeviceList() \
  26. ExReleaseResource(&PsLoadedModuleResource);
  27. // debugging
  28. #if DBG
  29. #define POERROR 0
  30. #define PODIAG1 1
  31. #define PODIAG2 2
  32. #define PODIAG3 3
  33. extern ULONG PoDebug;
  34. extern PUCHAR PopPowerState(POWER_STATE);
  35. VOID
  36. PoDebugPrint(
  37. ULONG DebugPrintLevel,
  38. PCCHAR DebugMessage,
  39. ...
  40. );
  41. #define PoDbgPrint(level,msg) { if (level < PoDebug) DbgPrint(msg); }
  42. #else
  43. #define PoDbgPrint(level,msg)
  44. #endif //DBG
  45. //
  46. // Define the global data for the Power Manager.
  47. //
  48. extern ERESOURCE PopDatabaseLock;
  49. extern KEVENT PopStateDatabaseIdle;
  50. extern KSPIN_LOCK PopStateLock;
  51. extern LIST_ENTRY PopDeviceList;
  52. extern LIST_ENTRY PopAsyncStateChangeQueue;
  53. extern LIST_ENTRY PopSyncStateChangeQueue;
  54. extern LIST_ENTRY PopStateChangeInProgress;
  55. extern LIST_ENTRY PopStateChangeWorkerList;
  56. extern BOOLEAN PopSyncChangeInProgress;
  57. extern KTIMER PopStateChangeTimer;
  58. extern KDPC PopStateChangeDpc;
  59. extern BOOLEAN PopStateChangeDpcActive;
  60. extern LIST_ENTRY PopActiveIdleScanQueue;
  61. extern LIST_ENTRY PopInactiveIdleQueue;
  62. extern KTIMER PopIdleScanTimer;
  63. extern KDPC PopIdleScanDpc;
  64. extern LARGE_INTEGER PopIdleScanTime;
  65. extern ULONG PopIdleScanTimeInSeconds;
  66. extern UCHAR PopNewPendingState[MaximumPowerState][MaximumPowerState];
  67. extern POBJECT_TYPE IoDeviceObjectType;
  68. extern WORK_QUEUE_ITEM PopStateChangeWorkItem;
  69. #define VerifyUp MaximumPowerState
  70. // idle.c
  71. VOID
  72. PopScanForIdleDevices (
  73. IN PKDPC Dpc,
  74. IN PVOID DeferredContext,
  75. IN PVOID SystemArgument1,
  76. IN PVOID SystemArgument2
  77. );
  78. // misc.c
  79. POBJECT_NAME_INFORMATION
  80. PopGetDeviceName (
  81. PDEVICE_OBJECT DeviceObject
  82. );
  83. // postate.c
  84. VOID
  85. PopRequestPowerChange (
  86. IN PDEVOBJ_EXTENSION PowerExtension,
  87. IN POWER_STATE SystemPowerState,
  88. IN ULONG DevicePowerState
  89. );
  90. VOID
  91. PopStateChange (
  92. IN PKDPC Dpc,
  93. IN PVOID DeferredContext,
  94. IN PVOID SystemArgument1,
  95. IN PVOID SystemArgument2
  96. );
  97. VOID
  98. PopStateChangeWorker (
  99. IN PVOID WorkerContext
  100. );
  101. NTSTATUS
  102. PopSetPowerComplete(
  103. IN PDEVICE_OBJECT DeviceObject,
  104. IN PIRP Irp,
  105. IN PVOID Context
  106. );
  107. #define PopIsStateDatabaseIdle() \
  108. (IsListEmpty (&PopStateChangeInProgress) && \
  109. IsListEmpty (&PopSyncStateChangeQueue) && \
  110. IsListEmpty (&PopAsyncStateChangeQueue) )
  111. // suspend.c
  112. PVOID
  113. PopGetBroadcastOrder (
  114. VOID
  115. );
  116. NTSTATUS
  117. PopBroadcastSetPower (
  118. IN PVOID BroadcastOrder,
  119. IN POWER_STATE PowerState,
  120. IN OUT PLIST_ENTRY FailedDevice
  121. );
  122. VOID
  123. PopReleaseBroadcast (
  124. IN PVOID BroadcastOrder
  125. );
  126. #endif // _POP_