adf2a0c592a0eef8bc82f0583f8c0e7ceac6ae19
[reactos.git] / reactos / drivers / bus / acpi / include / acpisys.h
1 /*
2 * PROJECT: ReactOS ACPI bus driver
3 * FILE: acpi/ospm/include/acpisys.h
4 * PURPOSE: ACPI bus driver definitions
5 */
6 typedef enum _DEVICE_PNP_STATE {
7
8 NotStarted = 0, // Not started yet
9 Started, // Device has received the START_DEVICE IRP
10 StopPending, // Device has received the QUERY_STOP IRP
11 Stopped, // Device has received the STOP_DEVICE IRP
12 UnKnown // Unknown state
13
14 } DEVICE_PNP_STATE;
15
16 //
17 // A common header for the device extensions of the PDOs and FDO
18 //
19
20 typedef struct _COMMON_DEVICE_DATA
21 {
22 PDEVICE_OBJECT Self;
23 BOOLEAN IsFDO;
24 DEVICE_PNP_STATE DevicePnPState;
25 DEVICE_PNP_STATE PreviousPnPState;
26 SYSTEM_POWER_STATE SystemPowerState;
27 DEVICE_POWER_STATE DevicePowerState;
28 } COMMON_DEVICE_DATA, *PCOMMON_DEVICE_DATA;
29
30 typedef struct _PDO_DEVICE_DATA
31 {
32 COMMON_DEVICE_DATA Common;
33 ACPI_HANDLE AcpiHandle;
34 // A back pointer to the bus
35 PDEVICE_OBJECT ParentFdo;
36 // An array of (zero terminated wide character strings).
37 // The array itself also null terminated
38 PWCHAR HardwareIDs;
39 // Link point to hold all the PDOs for a single bus together
40 LIST_ENTRY Link;
41 ULONG InterfaceRefCount;
42 UNICODE_STRING InterfaceName;
43
44 } PDO_DEVICE_DATA, *PPDO_DEVICE_DATA;
45
46 //
47 // The device extension of the bus itself. From whence the PDO's are born.
48 //
49
50 typedef struct _FDO_DEVICE_DATA
51 {
52 COMMON_DEVICE_DATA Common;
53 PDEVICE_OBJECT UnderlyingPDO;
54
55 // The underlying bus PDO and the actual device object to which our
56 // FDO is attached
57 PDEVICE_OBJECT NextLowerDriver;
58
59 // List of PDOs created so far
60 LIST_ENTRY ListOfPDOs;
61
62 // The PDOs currently enumerated.
63 ULONG NumPDOs;
64
65 // A synchronization for access to the device extension.
66 FAST_MUTEX Mutex;
67
68 } FDO_DEVICE_DATA, *PFDO_DEVICE_DATA;
69
70 #define FDO_FROM_PDO(pdoData) \
71 ((PFDO_DEVICE_DATA) (pdoData)->ParentFdo->DeviceExtension)
72
73 #define INITIALIZE_PNP_STATE(_Data_) \
74 (_Data_).DevicePnPState = NotStarted;\
75 (_Data_).PreviousPnPState = NotStarted;
76
77 #define SET_NEW_PNP_STATE(_Data_, _state_) \
78 (_Data_).PreviousPnPState = (_Data_).DevicePnPState;\
79 (_Data_).DevicePnPState = (_state_);
80
81 #define RESTORE_PREVIOUS_PNP_STATE(_Data_) \
82 (_Data_).DevicePnPState = (_Data_).PreviousPnPState;\
83
84 /* acpienum.c */
85
86 NTSTATUS
87 ACPIEnumerateDevices(
88 PFDO_DEVICE_DATA DeviceExtension);
89
90 NTSTATUS
91 NTAPI
92 Bus_PDO_EvalMethod(PPDO_DEVICE_DATA DeviceData,
93 PIRP Irp);
94
95 NTSTATUS
96 NTAPI
97 Bus_CreateClose (
98 PDEVICE_OBJECT DeviceObject,
99 PIRP Irp
100 );
101
102 VOID
103 Bus_DriverUnload (
104 PDRIVER_OBJECT DriverObject
105 );
106
107 PCHAR
108 PnPMinorFunctionString (
109 UCHAR MinorFunction
110 );
111
112 NTSTATUS
113 NTAPI
114 Bus_AddDevice(
115 PDRIVER_OBJECT DriverObject,
116 PDEVICE_OBJECT PhysicalDeviceObject
117 );
118
119 NTSTATUS
120 Bus_SendIrpSynchronously (
121 PDEVICE_OBJECT DeviceObject,
122 PIRP Irp
123 );
124
125 NTSTATUS
126 NTAPI
127 Bus_PnP (
128 PDEVICE_OBJECT DeviceObject,
129 PIRP Irp
130 );
131
132 NTSTATUS
133 Bus_CompletionRoutine(
134 PDEVICE_OBJECT DeviceObject,
135 PIRP Irp,
136 PVOID Context
137 );
138
139 VOID
140 Bus_InitializePdo (
141 PDEVICE_OBJECT Pdo,
142 PFDO_DEVICE_DATA FdoData
143 );
144
145
146 void
147 Bus_RemoveFdo (
148 PFDO_DEVICE_DATA FdoData
149 );
150
151 NTSTATUS
152 Bus_DestroyPdo (
153 PDEVICE_OBJECT Device,
154 PPDO_DEVICE_DATA PdoData
155 );
156
157
158 NTSTATUS
159 Bus_FDO_PnP (
160 PDEVICE_OBJECT DeviceObject,
161 PIRP Irp,
162 PIO_STACK_LOCATION IrpStack,
163 PFDO_DEVICE_DATA DeviceData
164 );
165
166
167 NTSTATUS
168 Bus_StartFdo (
169 PFDO_DEVICE_DATA FdoData,
170 PIRP Irp );
171
172 PCHAR
173 DbgDeviceIDString(
174 BUS_QUERY_ID_TYPE Type
175 );
176
177 PCHAR
178 DbgDeviceRelationString(
179 DEVICE_RELATION_TYPE Type
180 );
181
182 NTSTATUS
183 Bus_FDO_Power (
184 PFDO_DEVICE_DATA FdoData,
185 PIRP Irp
186 );
187
188 NTSTATUS
189 Bus_PDO_Power (
190 PPDO_DEVICE_DATA PdoData,
191 PIRP Irp
192 );
193
194 NTSTATUS
195 NTAPI
196 Bus_Power (
197 PDEVICE_OBJECT DeviceObject,
198 PIRP Irp
199 );
200
201 PCHAR
202 PowerMinorFunctionString (
203 UCHAR MinorFunction
204 );
205
206 PCHAR
207 DbgSystemPowerString(
208 SYSTEM_POWER_STATE Type
209 );
210
211 PCHAR
212 DbgDevicePowerString(
213 DEVICE_POWER_STATE Type
214 );
215
216 NTSTATUS
217 Bus_PDO_PnP (
218 PDEVICE_OBJECT DeviceObject,
219 PIRP Irp,
220 PIO_STACK_LOCATION IrpStack,
221 PPDO_DEVICE_DATA DeviceData
222 );
223
224 NTSTATUS
225 Bus_PDO_QueryDeviceCaps(
226 PPDO_DEVICE_DATA DeviceData,
227 PIRP Irp );
228
229 NTSTATUS
230 Bus_PDO_QueryDeviceId(
231 PPDO_DEVICE_DATA DeviceData,
232 PIRP Irp );
233
234
235 NTSTATUS
236 Bus_PDO_QueryDeviceText(
237 PPDO_DEVICE_DATA DeviceData,
238 PIRP Irp );
239
240 NTSTATUS
241 Bus_PDO_QueryResources(
242 PPDO_DEVICE_DATA DeviceData,
243 PIRP Irp );
244
245 NTSTATUS
246 Bus_PDO_QueryResourceRequirements(
247 PPDO_DEVICE_DATA DeviceData,
248 PIRP Irp );
249
250 NTSTATUS
251 Bus_PDO_QueryDeviceRelations(
252 PPDO_DEVICE_DATA DeviceData,
253 PIRP Irp );
254
255 NTSTATUS
256 Bus_PDO_QueryBusInformation(
257 PPDO_DEVICE_DATA DeviceData,
258 PIRP Irp );
259
260 NTSTATUS
261 Bus_GetDeviceCapabilities(
262 PDEVICE_OBJECT DeviceObject,
263 PDEVICE_CAPABILITIES DeviceCapabilities
264 );
265
266 NTSTATUS
267 Bus_PDO_QueryInterface(
268 PPDO_DEVICE_DATA DeviceData,
269 PIRP Irp );
270
271 BOOLEAN
272 Bus_GetCrispinessLevel(
273 PVOID Context,
274 PUCHAR Level
275 );
276 BOOLEAN
277 Bus_SetCrispinessLevel(
278 PVOID Context,
279 UCHAR Level
280 );
281 BOOLEAN
282 Bus_IsSafetyLockEnabled(
283 PVOID Context
284 );
285 VOID
286 Bus_InterfaceReference (
287 PVOID Context
288 );
289 VOID
290 Bus_InterfaceDereference (
291 PVOID Context
292 );
293
294 /* EOF */