From cbefdefb0206f30368a940b37e4b476b2f99624c Mon Sep 17 00:00:00 2001
From: "Dimitrie O. Paun" <dpaun@rogers.com>
Date: Tue, 12 Aug 2003 18:56:54 +0000
Subject: [PATCH] Consolidate all kernel power management functions. Provide
 prototypes and stubs for missing functions.

---
 dlls/kernel/Makefile.in   |   1 +
 dlls/kernel/kernel32.spec |   4 +-
 dlls/kernel/powermgnt.c   | 100 ++++++++++++++++++++++++++++++++++++++
 dlls/kernel/thread.c      |  19 --------
 include/winbase.h         |   2 +
 include/winnt.h           |   7 +++
 win32/newfns.c            |  42 +---------------
 7 files changed, 113 insertions(+), 62 deletions(-)
 create mode 100644 dlls/kernel/powermgnt.c

diff --git a/dlls/kernel/Makefile.in b/dlls/kernel/Makefile.in
index 9ddddfcba15..ac7449b1cdf 100644
--- a/dlls/kernel/Makefile.in
+++ b/dlls/kernel/Makefile.in
@@ -34,6 +34,7 @@ C_SRCS = \
 	lcformat.c \
 	local16.c \
 	locale.c \
+	powermgnt.c \
 	process.c \
 	resource.c \
 	resource16.c \
diff --git a/dlls/kernel/kernel32.spec b/dlls/kernel/kernel32.spec
index 6797b4d982e..4dfaeddfb09 100644
--- a/dlls/kernel/kernel32.spec
+++ b/dlls/kernel/kernel32.spec
@@ -573,7 +573,7 @@
 @ stdcall IsDBCSLeadByteEx(long long)
 @ stub IsLSCallback
 @ stub IsSLCallback
-@ stub IsSystemResumeAutomatic
+@ stdcall IsSystemResumeAutomatic()
 @ stdcall IsValidCodePage(long)
 @ stub IsValidLanguageGroup
 @ stdcall IsValidLocale(long long)
@@ -691,7 +691,7 @@
 @ stdcall RemoveDirectoryA(str)
 @ stdcall RemoveDirectoryW(wstr)
 @ stub RequestDeviceWakeup
-@ stub RequestWakeupLatency
+@ stdcall RequestWakeupLatency(long)
 @ stdcall ResetEvent(long)
 @ stub ResetWriteWatch
 @ stdcall ResumeThread(long)
diff --git a/dlls/kernel/powermgnt.c b/dlls/kernel/powermgnt.c
new file mode 100644
index 00000000000..d1f3847e027
--- /dev/null
+++ b/dlls/kernel/powermgnt.c
@@ -0,0 +1,100 @@
+/*
+ * Copyright 1995 Thomas Sandford (tdgsandf@prds-grn.demon.co.uk)
+ * Copyright 2003 Dimitrie O. Paun
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "winbase.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(powermgnt);
+
+/******************************************************************************
+ *           GetDevicePowerState   (KERNEL32.@)
+ */
+BOOL WINAPI GetDevicePowerState(HANDLE hDevice, BOOL* pfOn)
+{
+    FIXME("(hDevice %p pfOn %p): stub\n", hDevice, pfOn);
+    return TRUE; /* no information */
+}
+
+/***********************************************************************
+ *           GetSystemPowerStatus      (KERNEL32.@)
+ */
+BOOL WINAPI GetSystemPowerStatus(LPSYSTEM_POWER_STATUS sps_ptr)
+{
+    FIXME("(): stub, harmless.\n");
+    return FALSE;   /* no power management support */
+}
+
+/***********************************************************************
+ *           IsSystemResumeAutomatic   (KERNEL32.@)
+ */
+BOOL WINAPI IsSystemResumeAutomatic(void)
+{
+    FIXME("(): stub, harmless.\n");
+    return FALSE;
+}
+
+/***********************************************************************
+ *           RequestWakeupLatency      (KERNEL32.@)
+ */
+BOOL WINAPI RequestWakeupLatency(LATENCY_TIME latency)
+{
+    FIXME("(): stub, harmless.\n");
+    return TRUE;
+}
+
+/***********************************************************************
+ *           SetSystemPowerState      (KERNEL32.@)
+ */
+BOOL WINAPI SetSystemPowerState(BOOL suspend_or_hibernate,
+                                  BOOL force_flag)
+{
+    FIXME("(): stub, harmless.\n");
+    /* suspend_or_hibernate flag: w95 does not support
+       this feature anyway */
+
+    for ( ;0; )
+    {
+        if ( force_flag )
+        {
+        }
+        else
+        {
+        }
+    }
+    return TRUE;
+}
+
+/***********************************************************************
+ * SetThreadExecutionState (KERNEL32.@)
+ *
+ * Informs the system that activity is taking place for
+ * power management purposes.
+ */
+EXECUTION_STATE WINAPI SetThreadExecutionState(EXECUTION_STATE flags)
+{
+    static EXECUTION_STATE current =
+        ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED | ES_USER_PRESENT;
+    EXECUTION_STATE old = current;
+
+    FIXME("(0x%lx): stub, harmless.\n", flags);
+
+    if (!(current & ES_CONTINUOUS) || (flags & ES_CONTINUOUS))
+        current = flags;
+    return old;
+}
diff --git a/dlls/kernel/thread.c b/dlls/kernel/thread.c
index a8d83df6ebe..d9cafd9df99 100644
--- a/dlls/kernel/thread.c
+++ b/dlls/kernel/thread.c
@@ -238,25 +238,6 @@ DWORD WINAPI SetThreadIdealProcessor(
 }
 
 
-/***********************************************************************
- * SetThreadExecutionState (KERNEL32.@)
- *
- * Informs the system that activity is taking place for
- * power management purposes.
- */
-EXECUTION_STATE WINAPI SetThreadExecutionState(EXECUTION_STATE flags)
-{
-    static EXECUTION_STATE current =
-        ES_SYSTEM_REQUIRED|ES_DISPLAY_REQUIRED|ES_USER_PRESENT;
-    EXECUTION_STATE old = current;
-
-    if (!(current & ES_CONTINUOUS) || (flags & ES_CONTINUOUS))
-        current = flags;
-    FIXME("(0x%lx): stub, harmless (power management).\n", flags);
-    return old;
-}
-
-
 /* callback for QueueUserAPC */
 static void CALLBACK call_user_apc( ULONG_PTR arg1, ULONG_PTR arg2, ULONG_PTR arg3 )
 {
diff --git a/include/winbase.h b/include/winbase.h
index 365c6a714d4..7298ff6fc15 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -1441,6 +1441,7 @@ BOOL        WINAPI HeapWalk(HANDLE,LPPROCESS_HEAP_ENTRY);
 DWORD       WINAPI InitializeAcl(PACL,DWORD,DWORD);
 BOOL        WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
 BOOL        WINAPI InitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
+BOOL        WINAPI IsSystemResumeAutomatic(void);
 BOOL        WINAPI IsTextUnicode(CONST LPVOID lpBuffer, int cb, LPINT lpi);
 BOOL        WINAPI IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
 BOOL        WINAPI IsValidSid(PSID);
@@ -1514,6 +1515,7 @@ BOOL        WINAPI ReleaseMutex(HANDLE);
 BOOL        WINAPI ReleaseSemaphore(HANDLE,LONG,LPLONG);
 BOOL        WINAPI ReportEventA(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCSTR *,LPVOID);
 BOOL        WINAPI ReportEventW(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCWSTR *,LPVOID);
+BOOL        WINAPI RequestWakeupLatency(LATENCY_TIME latency);
 #define     ReportEvent WINELIB_NAME_AW(ReportEvent)
 BOOL        WINAPI ResetEvent(HANDLE);
 DWORD       WINAPI ResumeThread(HANDLE);
diff --git a/include/winnt.h b/include/winnt.h
index ca3a0f74224..e56fa5b8c02 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -3375,6 +3375,13 @@ typedef enum tagSID_NAME_USE {
 #define REG_QWORD		11	/* QWORD in little endian format */
 #define REG_QWORD_LITTLE_ENDIAN	11	/* QWORD in little endian format */
 
+/* ----------------------------- begin power management --------------------- */
+
+typedef enum _LATENCY_TIME {
+	LT_DONT_CARE,
+	LT_LOWEST_LATENCY
+} LATENCY_TIME, *PLATENCY_TIME;
+
 /* ----------------------------- begin registry ----------------------------- */
 
 /* Registry security values */
diff --git a/win32/newfns.c b/win32/newfns.c
index 9c3ac40a32b..9ab2b760273 100644
--- a/win32/newfns.c
+++ b/win32/newfns.c
@@ -42,7 +42,6 @@ at a later date. */
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(win32);
-WINE_DECLARE_DEBUG_CHANNEL(debug);
 
 
 /****************************************************************************
@@ -51,37 +50,7 @@ WINE_DECLARE_DEBUG_CHANNEL(debug);
 BOOL WINAPI FlushInstructionCache(HANDLE hProcess, LPCVOID lpBaseAddress, SIZE_T dwSize)
 {
     if (GetVersion() & 0x80000000) return TRUE; /* not NT, always TRUE */
-    FIXME_(debug)("(0x%08lx,%p,0x%08lx): stub\n",(DWORD)hProcess, lpBaseAddress, dwSize);
-    return TRUE;
-}
-
-/***********************************************************************
- *           GetSystemPowerStatus      (KERNEL32.@)
- */
-BOOL WINAPI GetSystemPowerStatus(LPSYSTEM_POWER_STATUS sps_ptr)
-{
-    return FALSE;   /* no power management support */
-}
-
-
-/***********************************************************************
- *           SetSystemPowerState      (KERNEL32.@)
- */
-BOOL WINAPI SetSystemPowerState(BOOL suspend_or_hibernate,
-                                  BOOL force_flag)
-{
-    /* suspend_or_hibernate flag: w95 does not support
-       this feature anyway */
-
-    for ( ;0; )
-    {
-        if ( force_flag )
-        {
-        }
-        else
-        {
-        }
-    }
+    FIXME("(%p,%p,0x%08lx): stub\n",hProcess, lpBaseAddress, dwSize);
     return TRUE;
 }
 
@@ -201,15 +170,6 @@ BOOL WINAPI GetQueuedCompletionStatus(
     return FALSE;
 }
 
-/******************************************************************************
- *           GetDevicePowerState   (KERNEL32.@)
- */
-BOOL WINAPI GetDevicePowerState(HANDLE hDevice, BOOL* pfOn)
-{
-    FIXME("(hDevice %p pfOn %p): stub\n", hDevice, pfOn);
-    return TRUE; /* no information */
-}
-
 /***********************************************************************
  *           Beep   (KERNEL32.@)
  */
-- 
GitLab