Sync with trunk head.
[reactos.git] / drivers / bus / acpi / cmbatt / cmbatt.h
1 /*
2 * PROJECT: ReactOS ACPI-Compliant Control Method Battery
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: boot/drivers/bus/acpi/cmbatt/cmbatt.h
5 * PURPOSE: Main Header File
6 * PROGRAMMERS: ReactOS Portable Systems Group
7 */
8
9 #include <ntddk.h>
10 #include <initguid.h>
11 #include <batclass.h>
12 #include <acpiioct.h>
13 #include <wmilib.h>
14 #include <wdmguid.h>
15 #include <debug.h>
16
17 #define IOCTL_BATTERY_QUERY_UNIQUE_ID \
18 CTL_CODE(FILE_DEVICE_BATTERY, 0x101, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294404
19
20 #define IOCTL_BATTERY_QUERY_STA \
21 CTL_CODE(FILE_DEVICE_BATTERY, 0x102, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294408
22
23 #define IOCTL_BATTERY_QUERY_PSR \
24 CTL_CODE(FILE_DEVICE_BATTERY, 0x103, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x29440C
25
26 #define IOCTL_BATTERY_SET_TRIP_POINT \
27 CTL_CODE(FILE_DEVICE_BATTERY, 0x104, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294410
28
29 #define IOCTL_BATTERY_QUERY_BIF \
30 CTL_CODE(FILE_DEVICE_BATTERY, 0x105, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294414
31
32 #define IOCTL_BATTERY_QUERY_BST \
33 CTL_CODE(FILE_DEVICE_BATTERY, 0x106, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294418
34
35 #define CMBATT_GENERIC_STATUS 0x01
36 #define CMBATT_GENERIC_INFO 0x02
37 #define CMBATT_GENERIC_WARNING 0x04
38 #define CMBATT_ACPI_WARNING 0x08
39 #define CMBATT_POWER_INFO 0x10
40 #define CMBATT_PNP_INFO 0x20
41 #define CMBATT_ACPI_ENTRY_EXIT 0x40
42 #define CMBATT_PNP_ENTRY_EXIT 0x200
43 #define CMBATT_ACPI_ASSERT 0x400
44
45 typedef enum _CMBATT_EXTENSION_TYPE
46 {
47 CmBattAcAdapter,
48 CmBattBattery
49 } CMBATT_EXTENSION_TYPE;
50
51 #define ACPI_BUS_CHECK 0x00
52 #define ACPI_DEVICE_CHECK 0x01
53
54 #define ACPI_STA_PRESENT 0x01
55 #define ACPI_STA_ENABLED 0x02
56 #define ACPI_STA_SHOW_UI 0x04
57 #define ACPI_STA_FUNCTIONAL 0x08
58 #define ACPI_STA_BATTERY_PRESENT 0x10
59
60 #define ACPI_BATT_NOTIFY_STATUS 0x80
61 #define ACPI_BATT_NOTIFY_INFO 0x81
62
63 #define ACPI_BATT_STAT_DISCHARG 0x0001
64 #define ACPI_BATT_STAT_CHARGING 0x0002
65 #define ACPI_BATT_STAT_CRITICAL 0x0004
66
67 #define CM_MAX_VALUE 0x7FFFFFFF
68 #define CM_UNKNOWN_VALUE 0xFFFFFFFF
69
70 typedef struct _ACPI_BST_DATA
71 {
72 ULONG State;
73 ULONG PresentRate;
74 ULONG RemainingCapacity;
75 ULONG PresentVoltage;
76 } ACPI_BST_DATA, *PACPI_BST_DATA;
77
78 #define ACPI_BATT_POWER_UNIT_WATTS 0x0
79 #define ACPI_BATT_POWER_UNIT_AMPS 0x1
80
81 typedef struct _ACPI_BIF_DATA
82 {
83 ULONG PowerUnit;
84 ULONG DesignCapacity;
85 ULONG LastFullCapacity;
86 ULONG BatteryTechnology;
87 ULONG DesignVoltage;
88 ULONG DesignCapacityWarning;
89 ULONG DesignCapacityLow;
90 ULONG BatteryCapacityGranularity1;
91 ULONG BatteryCapacityGranularity2;
92 CHAR ModelNumber[256];
93 CHAR SerialNubmer[256];
94 CHAR BatteryType[256];
95 CHAR OemInfo[256];
96 } ACPI_BIF_DATA, *PACPI_BIF_DATA;
97
98 #define CMBATT_AR_NOTIFY 0x01
99 #define CMBATT_AR_INSERT 0x02
100 #define CMBATT_AR_REMOVE 0x04
101
102 typedef struct _CMBATT_DEVICE_EXTENSION
103 {
104 CMBATT_EXTENSION_TYPE FdoType;
105 PDEVICE_OBJECT DeviceObject;
106 PDEVICE_OBJECT FdoDeviceObject;
107 PDEVICE_OBJECT PdoDeviceObject;
108 PDEVICE_OBJECT AttachedDevice;
109 FAST_MUTEX FastMutex;
110 ULONG HandleCount;
111 PIRP PowerIrp;
112 POWER_STATE PowerState;
113 WMILIB_CONTEXT WmiLibInfo;
114 BOOLEAN WaitWakeEnable;
115 IO_REMOVE_LOCK RemoveLock;
116 ULONG DeviceId;
117 PUNICODE_STRING DeviceName;
118 ACPI_INTERFACE_STANDARD AcpiInterface;
119 BOOLEAN DelayNotification;
120 BOOLEAN ArFlag;
121 PVOID ClassData;
122 BOOLEAN Started;
123 BOOLEAN NotifySent;
124 LONG ArLockValue;
125 ULONG TagData;
126 ULONG Tag;
127 ULONG ModelNumberLength;
128 PCHAR ModelNumber;
129 ULONG SerialNumberLength;
130 PCHAR SerialNumber;
131 ULONG OemInfoLength;
132 PCHAR OemInfo;
133 ACPI_BST_DATA BstData;
134 ACPI_BIF_DATA BifData;
135 ULONG Id;
136 ULONG State;
137 ULONG RemainingCapacity;
138 ULONG PresentVoltage;
139 ULONG Rate;
140 BATTERY_INFORMATION BatteryInformation;
141 ULONG BatteryCapacityGranularity1;
142 ULONG BatteryCapacityGranularity2;
143 BOOLEAN TripPointSet;
144 ULONG TripPointValue;
145 ULONG TripPointOld;
146 ULONGLONG InterruptTime;
147 } CMBATT_DEVICE_EXTENSION, *PCMBATT_DEVICE_EXTENSION;
148
149 NTSTATUS
150 NTAPI
151 CmBattPowerDispatch(
152 PDEVICE_OBJECT DeviceObject,
153 PIRP Irp
154 );
155
156 NTSTATUS
157 NTAPI
158 CmBattPnpDispatch(
159 PDEVICE_OBJECT DeviceObject,
160 PIRP Irp
161 );
162
163 NTSTATUS
164 NTAPI
165 CmBattAddDevice(
166 PDRIVER_OBJECT DriverObject,
167 PDEVICE_OBJECT DeviceObject
168 );
169
170 NTSTATUS
171 NTAPI
172 CmBattSystemControl(
173 PDEVICE_OBJECT DeviceObject,
174 PIRP Irp
175 );
176
177 NTSTATUS
178 NTAPI
179 CmBattGetBstData(
180 PCMBATT_DEVICE_EXTENSION DeviceExtension,
181 PACPI_BST_DATA BstData
182 );
183
184 NTSTATUS
185 NTAPI
186 CmBattGetPsrData(
187 PDEVICE_OBJECT DeviceObject,
188 PULONG PsrData
189 );
190
191 NTSTATUS
192 NTAPI
193 CmBattGetStaData(
194 PDEVICE_OBJECT DeviceObject,
195 PULONG StaData
196 );
197
198 NTSTATUS
199 NTAPI
200 CmBattGetBifData(
201 PCMBATT_DEVICE_EXTENSION DeviceExtension,
202 PACPI_BIF_DATA BifData
203 );
204
205 NTSTATUS
206 NTAPI
207 CmBattSetTripPpoint(
208 PCMBATT_DEVICE_EXTENSION DeviceExtension,
209 ULONG AlarmValue
210 );
211
212 VOID
213 NTAPI
214 CmBattNotifyHandler(
215 IN PCMBATT_DEVICE_EXTENSION DeviceExtension,
216 IN ULONG NotifyValue
217 );
218
219 NTSTATUS
220 NTAPI
221 CmBattWmiDeRegistration(
222 PCMBATT_DEVICE_EXTENSION DeviceExtension
223 );
224
225 NTSTATUS
226 NTAPI
227 CmBattWmiRegistration(
228 PCMBATT_DEVICE_EXTENSION DeviceExtension
229 );
230
231 NTSTATUS
232 NTAPI
233 CmBattGetUniqueId(
234 PDEVICE_OBJECT DeviceObject,
235 PULONG UniqueId
236 );
237
238 NTSTATUS
239 NTAPI
240 CmBattQueryInformation(
241 IN PCMBATT_DEVICE_EXTENSION FdoExtension,
242 IN ULONG Tag,
243 IN BATTERY_QUERY_INFORMATION_LEVEL InfoLevel,
244 IN OPTIONAL LONG AtRate,
245 IN PVOID Buffer,
246 IN ULONG BufferLength,
247 OUT PULONG ReturnedLength
248 );
249
250 NTSTATUS
251 NTAPI
252 CmBattQueryStatus(
253 IN PCMBATT_DEVICE_EXTENSION DeviceExtension,
254 IN ULONG Tag,
255 IN PBATTERY_STATUS BatteryStatus
256 );
257
258 NTSTATUS
259 NTAPI
260 CmBattSetStatusNotify(
261 IN PCMBATT_DEVICE_EXTENSION DeviceExtension,
262 IN ULONG BatteryTag,
263 IN PBATTERY_NOTIFY BatteryNotify
264 );
265
266 NTSTATUS
267 NTAPI
268 CmBattDisableStatusNotify(
269 IN PCMBATT_DEVICE_EXTENSION DeviceExtension
270 );
271
272 NTSTATUS
273 NTAPI
274 CmBattQueryTag(
275 IN PCMBATT_DEVICE_EXTENSION DeviceExtension,
276 OUT PULONG Tag
277 );
278
279 extern PDEVICE_OBJECT AcAdapterPdo;
280 extern ULONG CmBattDebug;
281
282 /* EOF */