[CMBATT]: Implement CmBattQueryTag and CmBattNotifyHandler for getting ACPI Battery...
[reactos.git] / reactos / 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 <debug.h>
15
16 #define CMBATT_GENERIC_STATUS 0x01
17 #define CMBATT_GENERIC_INFO 0x02
18 #define CMBATT_GENERIC_WARNING 0x04
19 #define CMBATT_ACPI_WARNING 0x08
20 #define CMBATT_POWER_INFO 0x10
21 #define CMBATT_PNP_INFO 0x20
22 #define CMBATT_ACPI_ENTRY_EXIT 0x40
23 #define CMBATT_PNP_ENTRY_EXIT 0x200
24 #define CMBATT_ACPI_ASSERT 0x400
25
26 typedef enum _CMBATT_EXTENSION_TYPE
27 {
28 CmBattAcAdapter,
29 CmBattBattery
30 } CMBATT_EXTENSION_TYPE;
31
32 #define ACPI_BUS_CHECK 0x00
33 #define ACPI_DEVICE_CHECK 0x01
34
35 #define ACPI_STA_PRESENT 0x01
36 #define ACPI_STA_ENABLED 0x02
37 #define ACPI_STA_SHOW_UI 0x04
38 #define ACPI_STA_FUNCTIONAL 0x08
39 #define ACPI_STA_BATTERY_PRESENT 0x10
40
41 #define ACPI_BATT_NOTIFY_STATUS 0x80
42 #define ACPI_BATT_NOTIFY_INFO 0x81
43
44 #define ACPI_BATT_STAT_DISCHARG 0x0001
45 #define ACPI_BATT_STAT_CHARGING 0x0002
46 #define ACPI_BATT_STAT_CRITICAL 0x0004
47
48 #define CM_MAX_VALUE 0x7FFFFFFF
49 #define CM_UNKNOWN_VALUE 0xFFFFFFFF
50
51 typedef struct _ACPI_BST_DATA
52 {
53 ULONG State;
54 ULONG PresentRate;
55 ULONG RemainingCapacity;
56 ULONG PresentVoltage;
57 } ACPI_BST_DATA, *PACPI_BST_DATA;
58
59 #define ACPI_BATT_POWER_UNIT_WATTS 0x0
60 #define ACPI_BATT_POWER_UNIT_AMPS 0x1
61
62 typedef struct _ACPI_BIF_DATA
63 {
64 ULONG PowerUnit;
65 ULONG DesignCapacity;
66 ULONG LastFullCapacity;
67 ULONG BatteryTechnology;
68 ULONG DesignVoltage;
69 ULONG DesignCapacityWarning;
70 ULONG DesignCapacityLow;
71 ULONG BatteryCapacityGranularity1;
72 ULONG BatteryCapacityGranularity2;
73 CHAR ModelNumber[256];
74 CHAR SerialNubmer[256];
75 CHAR BatteryType[256];
76 CHAR OemInfo[256];
77 } ACPI_BIF_DATA, *PACPI_BIF_DATA;
78
79 #define CMBATT_AR_NOTIFY 0x01
80 #define CMBATT_AR_INSERT 0x02
81 #define CMBATT_AR_REMOVE 0x04
82
83 typedef struct _CMBATT_DEVICE_EXTENSION
84 {
85 CMBATT_EXTENSION_TYPE FdoType;
86 PDEVICE_OBJECT DeviceObject;
87 PDEVICE_OBJECT FdoDeviceObject;
88 PDEVICE_OBJECT PdoDeviceObject;
89 PDEVICE_OBJECT AttachedDevice;
90 FAST_MUTEX FastMutex;
91 ULONG HandleCount;
92 PIRP PowerIrp;
93 POWER_STATE PowerState;
94 WMILIB_CONTEXT WmiLibInfo;
95 ULONG WaitWakeEnable;
96 ULONG WmiCount;
97 KEVENT WmiEvent;
98 ULONG DeviceId;
99 PUNICODE_STRING DeviceName;
100 ACPI_INTERFACE_STANDARD2 AcpiInterface;
101 BOOLEAN DelayNotification;
102 BOOLEAN ArFlag;
103 PVOID ClassData;
104 BOOLEAN Started;
105 BOOLEAN NotifySent;
106 LONG ArLockValue;
107 ULONG TagData;
108 ULONG Tag;
109 ULONG ModelNumberLength;
110 PCHAR ModelNumber;
111 ULONG SerialNumberLength;
112 PCHAR SerialNumber;
113 ULONG OemInfoLength;
114 PCHAR OemInfo;
115 ACPI_BST_DATA BstData;
116 ACPI_BIF_DATA BifData;
117 ULONG Id;
118 ULONG State;
119 ULONG RemainingCapacity;
120 ULONG PresentVoltage;
121 ULONG Rate;
122 BATTERY_INFORMATION BatteryInformation;
123 ULONG BatteryCapacityGranularity1;
124 ULONG BatteryCapacityGranularity2;
125 BOOLEAN TripPointSet;
126 ULONG TripPointValue;
127 ULONG TripPointOld;
128 ULONGLONG InterruptTime;
129 } CMBATT_DEVICE_EXTENSION, *PCMBATT_DEVICE_EXTENSION;
130
131 NTSTATUS
132 NTAPI
133 CmBattPowerDispatch(
134 PDEVICE_OBJECT DeviceObject,
135 PIRP Irp
136 );
137
138 NTSTATUS
139 NTAPI
140 CmBattPnpDispatch(
141 PDEVICE_OBJECT DeviceObject,
142 PIRP Irp
143 );
144
145 NTSTATUS
146 NTAPI
147 CmBattAddDevice(
148 PDRIVER_OBJECT DriverObject,
149 PDEVICE_OBJECT DeviceObject
150 );
151
152 NTSTATUS
153 NTAPI
154 CmBattSystemControl(
155 PDEVICE_OBJECT DeviceObject,
156 PIRP Irp
157 );
158
159 NTSTATUS
160 NTAPI
161 CmBattGetBstData(
162 PCMBATT_DEVICE_EXTENSION DeviceExtension,
163 PACPI_BST_DATA BstData
164 );
165
166 NTSTATUS
167 NTAPI
168 CmBattGetPsrData(
169 PDEVICE_OBJECT DeviceObject,
170 PULONG PsrData
171 );
172
173 NTSTATUS
174 NTAPI
175 CmBattGetStaData(
176 PDEVICE_OBJECT DeviceObject,
177 PULONG StaData
178 );
179
180 /* EOF */