1 /**
2  * This file is part of the mingw-w64 runtime package.
3  * No warranty is given; refer to the file DISCLAIMER within this package.
4  */
5 
6 #include <winapifamily.h>
7 #include <devpropdef.h>
8 
9 DEFINE_DEVPROPKEY(PROCESSOR_NUMBER_PKEY,0x5724c81d,0xd5af,0x4c1f,0xa1,0x03,0xa0,0x6e,0x28,0xf2,0x04,0xc6,1);
10 
11 DEFINE_GUID(GUID_DEVICE_BATTERY,0x72631e54,0x78A4,0x11d0,0xbc,0xf7,0x00,0xaa,0x00,0xb7,0xb3,0x2a);
12 DEFINE_GUID(GUID_DEVICE_APPLICATIONLAUNCH_BUTTON,0x629758ee,0x986e,0x4d9e,0x8e,0x47,0xde,0x27,0xf8,0xab,0x05,0x4d);
13 DEFINE_GUID(GUID_DEVICE_SYS_BUTTON,0x4AFA3D53,0x74A7,0x11d0,0xbe,0x5e,0x00,0xA0,0xC9,0x06,0x28,0x57);
14 DEFINE_GUID(GUID_DEVICE_LID,0x4AFA3D52,0x74A7,0x11d0,0xbe,0x5e,0x00,0xA0,0xC9,0x06,0x28,0x57);
15 DEFINE_GUID(GUID_DEVICE_THERMAL_ZONE,0x4AFA3D51,0x74A7,0x11d0,0xbe,0x5e,0x00,0xA0,0xC9,0x06,0x28,0x57);
16 DEFINE_GUID(GUID_DEVICE_PROCESSOR,0x97fadb10,0x4e33,0x40ae,0x35,0x9c,0x8b,0xef,0x02,0x9d,0xbd,0xd0);
17 DEFINE_GUID(GUID_DEVICE_MEMORY,0x3fd0f03d,0x92e0,0x45fb,0xb7,0x5c,0x5e,0xd8,0xff,0xb0,0x10,0x21);
18 DEFINE_GUID(GUID_DEVICE_ACPI_TIME,0x97f99bf6,0x4497,0x4f18,0xbb,0x22,0x4b,0x9f,0xb2,0xfb,0xef,0x9c);
19 DEFINE_GUID(GUID_DEVICE_MESSAGE_INDICATOR,0xcd48a365,0xfa94,0x4ce2,0xa2,0x32,0xa1,0xb7,0x64,0xe5,0xd8,0xb4);
20 DEFINE_GUID(GUID_CLASS_INPUT,0x4d1e55b2,0xf16f,0x11cf,0x88,0xcb,0x00,0x11,0x11,0x00,0x00,0x30);
21 
22 #ifndef _POCLASS_
23 #define _POCLASS_
24 
25 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
26 
27 #define BATTERY_UNKNOWN_CAPACITY 0xffffffff
28 #define UNKNOWN_CAPACITY BATTERY_UNKNOWN_CAPACITY
29 
30 #define BATTERY_SET_CHARGE_SUPPORTED 0x1
31 #define BATTERY_SET_DISCHARGE_SUPPORTED  0x2
32 #define BATTERY_SET_CHARGINGSOURCE_SUPPORTED 0x4
33 #define BATTERY_SET_RESUME_SUPPORTED 0x4
34 #define BATTERY_SEALED 0x10000000
35 #define BATTERY_IS_SHORT_TERM 0x20000000
36 #define BATTERY_CAPACITY_RELATIVE 0x40000000
37 #define BATTERY_SYSTEM_BATTERY 0x80000000
38 
39 #define BATTERY_UNKNOWN_TIME 0xffffffff
40 
41 #define BATTERY_UNKNOWN_CURRENT 0xffffffff
42 #define UNKNOWN_CURRENT BATTERY_UNKNOWN_CURRENT
43 
44 #define BATTERY_UNKNOWN_VOLTAGE 0xffffffff
45 #define BATTERY_UNKNOWN_RATE 0x80000000
46 #define UNKNOWN_RATE BATTERY_UNKNOWN_RATE
47 #define UNKNOWN_VOLTAGE BATTERY_UNKNOWN_VOLTAGE
48 
49 #define BATTERY_POWER_ON_LINE 0x1
50 #define BATTERY_DISCHARGING 0x2
51 #define BATTERY_CHARGING 0x4
52 #define BATTERY_CRITICAL 0x8
53 
54 #define BATTERY_TAG_INVALID 0
55 
56 #define ACTIVE_COOLING 0x0
57 #define PASSIVE_COOLING 0x1
58 
59 #define SYS_BUTTON_POWER 0x1
60 #define SYS_BUTTON_SLEEP 0x2
61 #define SYS_BUTTON_LID   0x4
62 #define SYS_BUTTON_WAKE  0x80000000
63 
64 #define SYS_BUTTON_LID_STATE_MASK 0x30000
65 #define SYS_BUTTON_LID_OPEN 0x10000
66 #define SYS_BUTTON_LID_CLOSED 0x20000
67 #define SYS_BUTTON_LID_INITIAL 0x40000
68 #define SYS_BUTTON_LID_CHANGED 0x80000
69 
70 #define PROCESSOR_PCC_COMMAND_GET_AVERAGE_FREQUENCY 0x0
71 #define PROCESSOR_PCC_COMMAND_SET_DESIRED_FREQUENCY 0x1
72 
73 #define ACPI_TIME_ADJUST_DAYLIGHT 0x1
74 #define ACPI_TIME_IN_DAYLIGHT 0x2
75 #define ACPI_TIME_ZONE_UNKNOWN 0x7FF
76 
77 #define PROCESSOR_PCC_INTERFACE_STANDARD_VERSION 1
78 
79 #define THERMAL_COOLING_INTERFACE_VERSION 1
80 
81 #define THERMAL_DEVICE_INTERFACE_VERSION 1
82 
83 #define MAX_BATTERY_STRING_SIZE 128
84 #define MAX_ACTIVE_COOLING_LEVELS 10
85 
86 #define IOCTL_SET_SYS_MESSAGE_INDICATOR CTL_CODE(FILE_DEVICE_BATTERY,0x70,METHOD_BUFFERED,FILE_WRITE_ACCESS)
87 
88 #define IOCTL_SET_WAKE_ALARM_VALUE CTL_CODE(FILE_DEVICE_BATTERY,0x80,METHOD_BUFFERED,FILE_WRITE_ACCESS)
89 #define IOCTL_SET_WAKE_ALARM_POLICY CTL_CODE(FILE_DEVICE_BATTERY,0x81,METHOD_BUFFERED,FILE_WRITE_ACCESS)
90 #define IOCTL_GET_WAKE_ALARM_VALUE CTL_CODE(FILE_DEVICE_BATTERY,0x82,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
91 #define IOCTL_GET_WAKE_ALARM_POLICY CTL_CODE(FILE_DEVICE_BATTERY,0x83,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
92 
93 #define IOCTL_ACPI_GET_REAL_TIME CTL_CODE(FILE_DEVICE_BATTERY,0x84,METHOD_BUFFERED,FILE_READ_DATA)
94 #define IOCTL_ACPI_SET_REAL_TIME CTL_CODE(FILE_DEVICE_BATTERY,0x85,METHOD_BUFFERED,FILE_WRITE_ACCESS)
95 
96 #define IOCTL_BATTERY_QUERY_TAG CTL_CODE(FILE_DEVICE_BATTERY,0x10,METHOD_BUFFERED,FILE_READ_ACCESS)
97 #define IOCTL_BATTERY_QUERY_INFORMATION CTL_CODE(FILE_DEVICE_BATTERY,0x11,METHOD_BUFFERED,FILE_READ_ACCESS)
98 #define IOCTL_BATTERY_SET_INFORMATION CTL_CODE(FILE_DEVICE_BATTERY,0x12,METHOD_BUFFERED,FILE_WRITE_ACCESS)
99 #define IOCTL_BATTERY_QUERY_STATUS CTL_CODE(FILE_DEVICE_BATTERY,0x13,METHOD_BUFFERED,FILE_READ_ACCESS)
100 
101 #define IOCTL_THERMAL_QUERY_INFORMATION CTL_CODE(FILE_DEVICE_BATTERY,0x20,METHOD_BUFFERED,FILE_READ_ACCESS)
102 #define IOCTL_THERMAL_SET_COOLING_POLICY CTL_CODE(FILE_DEVICE_BATTERY,0x21,METHOD_BUFFERED,FILE_WRITE_ACCESS)
103 #define IOCTL_RUN_ACTIVE_COOLING_METHOD CTL_CODE(FILE_DEVICE_BATTERY,0x22,METHOD_BUFFERED,FILE_WRITE_ACCESS)
104 #define IOCTL_THERMAL_SET_PASSIVE_LIMIT CTL_CODE(FILE_DEVICE_BATTERY,0x23,METHOD_BUFFERED,FILE_WRITE_ACCESS)
105 #define IOCTL_THERMAL_READ_TEMPERATURE CTL_CODE(FILE_DEVICE_BATTERY,0x24,METHOD_BUFFERED,FILE_READ_ACCESS)
106 #define IOCTL_QUERY_LID CTL_CODE(FILE_DEVICE_BATTERY,0x30,METHOD_BUFFERED,FILE_READ_ACCESS)
107 #define IOCTL_NOTIFY_SWITCH_EVENT CTL_CODE(FILE_DEVICE_BATTERY,0x40,METHOD_BUFFERED,FILE_READ_ACCESS)
108 #define IOCTL_GET_SYS_BUTTON_CAPS CTL_CODE(FILE_DEVICE_BATTERY,0x50,METHOD_BUFFERED,FILE_READ_ACCESS)
109 #define IOCTL_GET_SYS_BUTTON_EVENT CTL_CODE(FILE_DEVICE_BATTERY,0x51,METHOD_BUFFERED,FILE_READ_ACCESS)
110 
111 #define IOCTL_GET_PROCESSOR_OBJ_INFO \
112         CTL_CODE(FILE_DEVICE_BATTERY,0x60,METHOD_BUFFERED,FILE_READ_ACCESS)
113 
114 typedef enum {
115   BatteryInformation, BatteryGranularityInformation, BatteryTemperature, BatteryEstimatedTime,
116   BatteryDeviceName, BatteryManufactureDate, BatteryManufactureName, BatteryUniqueID,
117   BatterySerialNumber
118 } BATTERY_QUERY_INFORMATION_LEVEL;
119 
120 typedef enum {
121   BatteryCriticalBias, BatteryCharge, BatteryDischarge, BatteryChargingSource
122 } BATTERY_SET_INFORMATION_LEVEL;
123 
124 typedef enum _BATTERY_CHARGING_SOURCE_TYPE {
125   BatteryChargingSourceType_None, BatteryChargingSourceType_AC,
126   BatteryChargingSourceType_USB, BatteryChargingSourceType_Wireless
127 } BATTERY_CHARGING_SOURCE_TYPE, *PBATTERY_CHARGING_SOURCE_TYPE;
128 
129 typedef struct _BATTERY_QUERY_INFORMATION {
130   ULONG BatteryTag;
131   BATTERY_QUERY_INFORMATION_LEVEL InformationLevel;
132   ULONG AtRate;
133 } BATTERY_QUERY_INFORMATION, *PBATTERY_QUERY_INFORMATION;
134 
135 typedef struct _BATTERY_INFORMATION {
136   ULONG Capabilities;
137   UCHAR Technology;
138   UCHAR Reserved[3];
139   UCHAR Chemistry[4];
140   ULONG DesignedCapacity;
141   ULONG FullChargedCapacity;
142   ULONG DefaultAlert1;
143   ULONG DefaultAlert2;
144   ULONG CriticalBias;
145   ULONG CycleCount;
146 } BATTERY_INFORMATION, *PBATTERY_INFORMATION;
147 
148 typedef struct _BATTERY_CHARGING_SOURCE {
149   BATTERY_CHARGING_SOURCE_TYPE Type;
150   ULONG MaxCurrent;
151 } BATTERY_CHARGING_SOURCE, *PBATTERY_CHARGING_SOURCE;
152 
153 typedef struct _BATTERY_SET_INFORMATION {
154   ULONG BatteryTag;
155   BATTERY_SET_INFORMATION_LEVEL InformationLevel;
156   UCHAR Buffer[1];
157 } BATTERY_SET_INFORMATION, *PBATTERY_SET_INFORMATION;
158 
159 typedef struct _BATTERY_WAIT_STATUS {
160   ULONG BatteryTag;
161   ULONG Timeout;
162   ULONG PowerState;
163   ULONG LowCapacity;
164   ULONG HighCapacity;
165 } BATTERY_WAIT_STATUS, *PBATTERY_WAIT_STATUS;
166 
167 typedef struct _BATTERY_STATUS {
168   ULONG PowerState;
169   ULONG Capacity;
170   ULONG Voltage;
171   LONG Rate;
172 } BATTERY_STATUS, *PBATTERY_STATUS;
173 
174 typedef struct _BATTERY_MANUFACTURE_DATE {
175   UCHAR Day;
176   UCHAR Month;
177   USHORT Year;
178 } BATTERY_MANUFACTURE_DATE, *PBATTERY_MANUFACTURE_DATE;
179 
180 typedef struct _THERMAL_INFORMATION {
181   ULONG ThermalStamp;
182   ULONG ThermalConstant1;
183   ULONG ThermalConstant2;
184   KAFFINITY Processors;
185   ULONG SamplingPeriod;
186   ULONG CurrentTemperature;
187   ULONG PassiveTripPoint;
188   ULONG CriticalTripPoint;
189   UCHAR ActiveTripPointCount;
190   ULONG ActiveTripPoint[MAX_ACTIVE_COOLING_LEVELS];
191 } THERMAL_INFORMATION, *PTHERMAL_INFORMATION;
192 
193 typedef struct _THERMAL_WAIT_READ {
194   ULONG Timeout;
195   ULONG LowTemperature;
196   ULONG HighTemperature;
197 } THERMAL_WAIT_READ, *PTHERMAL_WAIT_READ;
198 
199 typedef struct {
200   ULONG PhysicalID;
201   ULONG PBlkAddress;
202   UCHAR PBlkLength;
203 } PROCESSOR_OBJECT_INFO, *PPROCESSOR_OBJECT_INFO;
204 
205 typedef struct {
206   ULONG PhysicalID;
207   ULONG PBlkAddress;
208   UCHAR PBlkLength;
209   ULONG InitialApicId;
210 } PROCESSOR_OBJECT_INFO_EX, *PPROCESSOR_OBJECT_INFO_EX;
211 
212 #ifndef _WINDOWS_
213 
214 #include "pshpack1.h"
215 
216 typedef struct _PCC_HEADER {
217   ULONG Signature;
218   USHORT HeaderLength;
219   UCHAR MajorVersion;
220   UCHAR MinorVersion;
221   union {
222     __MINGW_EXTENSION struct {
223       ULONG SciDoorbell : 1;
224       ULONG Reserved : 31;
225     };
226     ULONG AsULong;
227   } SupportedFeatures;
228   union {
229     __MINGW_EXTENSION struct {
230       USHORT CommandCode : 8;
231       USHORT ReservedZ : 7;
232       USHORT SciDoorbell : 1;
233     };
234     USHORT AsUShort;
235   } Command;
236   union {
237     __MINGW_EXTENSION struct {
238       USHORT CommandComplete : 1;
239       USHORT SciReceived : 1;
240       USHORT Error : 1;
241       USHORT Reserved : 13;
242     };
243     USHORT AsUShort;
244   } Status;
245   ULONG Latency;
246   ULONG MinimumCommandInterval;
247   ULONG MaximumCommandInterval;
248   ULONG NominalFrequency;
249   ULONG MinimumFrequency;
250   ULONG MinimumUnthrottledFrequency;
251 } PCC_HEADER, *PPCC_HEADER;
252 
253 typedef struct _PCC_INPUT_BUFFER {
254   UCHAR ControlEnabled;
255   __MINGW_EXTENSION union {
256     struct {
257       UCHAR ReservedZ[3];
258     } GetAverageFrequency;
259     struct {
260       UCHAR DesiredFrequency;
261       UCHAR ReservedZ[2];
262     } SetDesiredFrequency;
263   };
264 } PCC_INPUT_BUFFER, *PPCC_INPUT_BUFFER;
265 
266 typedef union _PCC_OUTPUT_BUFFER {
267   struct {
268     UCHAR AverageFrequency;
269     UCHAR FrequencyLimit;
270     UCHAR Reserved[2];
271   } GetAverageFrequency;
272   struct {
273     UCHAR Reserved[4];
274   } SetDesiredFrequency;
275 } PCC_OUTPUT_BUFFER, *PPCC_OUTPUT_BUFFER;
276 
277 #include "poppack.h"
278 
279 typedef VOID (*PPROCESSOR_PCC_DOORBELL_CALLBACK)(ULONG Status, ULONG_PTR Context);
280 typedef NTSTATUS (*PPROCESSOR_PCC_RING_DOORBELL)(UCHAR Command, PPROCESSOR_PCC_DOORBELL_CALLBACK Callback, ULONG_PTR Context);
281 
282 typedef struct _PROCESSOR_PCC_INTERFACE_STANDARD {
283   USHORT Size;
284   USHORT Version;
285   PVOID Context;
286   PINTERFACE_REFERENCE InterfaceReference;
287   PINTERFACE_DEREFERENCE InterfaceDereference;
288   PPROCESSOR_PCC_RING_DOORBELL PccRingDoorbell;
289   PPCC_HEADER PccHeader;
290   ULONG PccHeaderLength;
291 } PROCESSOR_PCC_INTERFACE_STANDARD, *PPROCESSOR_PCC_INTERFACE_STANDARD;
292 
293 typedef VOID (*PDEVICE_ACTIVE_COOLING)(PVOID Context, BOOLEAN Engaged);
294 typedef VOID (*PDEVICE_PASSIVE_COOLING)(PVOID Context, ULONG Percentage);
295 
296 typedef struct _THERMAL_COOLING_INTERFACE {
297   USHORT Size;
298   USHORT Version;
299   PVOID Context;
300   PINTERFACE_REFERENCE InterfaceReference;
301   PINTERFACE_DEREFERENCE InterfaceDereference;
302   ULONG Flags;
303   PDEVICE_ACTIVE_COOLING ActiveCooling;
304   PDEVICE_PASSIVE_COOLING PassiveCooling;
305 } THERMAL_COOLING_INTERFACE, *PTHERMAL_COOLING_INTERFACE;
306 
307 typedef THERMAL_COOLING_INTERFACE THERMAL_DEVICE_INTERFACE;
308 typedef THERMAL_COOLING_INTERFACE *PTHERMAL_DEVICE_INTERFACE;
309 
310 typedef enum _THERMAL_DEVICE_INTERFACE_FLAGS {
311   ThermalDeviceFlagActiveCooling = 1,
312   ThermalDeviceFlagPassiveCooling = 2
313 } THERMAL_DEVICE_INTERFACE_FLAGS, *PTHERMAL_DEVICE_INTERFACE_FLAGS;
314 
315 #endif // _WINDOWS_
316 
317 typedef struct _WAKE_ALARM_INFORMATION {
318   ULONG TimerIdentifier;
319   ULONG Timeout;
320 } WAKE_ALARM_INFORMATION, *PWAKE_ALARM_INFORMATION;
321 
322 typedef struct _ACPI_REAL_TIME {
323   UINT16 Year;
324   UINT8 Month;
325   UINT8 Day;
326   UINT8 Hour;
327   UINT8 Minute;
328   UINT8 Second;
329   UINT8 Valid;
330   UINT16 Milliseconds;
331   INT16 TimeZone;
332   UINT8 DayLight;
333   UINT8 Reserved1[3];
334 } ACPI_REAL_TIME, *PACPI_REAL_TIME;
335 
336 #endif /* WINAPI_PARTITION_DESKTOP.  */
337 
338 #endif
339 
340