1
2
3
4
5
6
7
8
9
10 #ifndef _ACOBJECT_H
11 #define _ACOBJECT_H
12
13
14
15
16
17
18
19
20
21
22
23
24 #if ACPI_MACHINE_WIDTH == 64
25 #pragma pack(8)
26 #else
27 #pragma pack(4)
28 #endif
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 #define ACPI_OBJECT_COMMON_HEADER \
47 union acpi_operand_object *next_object; \
48 u8 descriptor_type; \
49 u8 type; \
50 u16 reference_count; \
51 u8 flags;
52
53
54
55
56
57
58
59 #define AOPOBJ_AML_CONSTANT 0x01
60 #define AOPOBJ_STATIC_POINTER 0x02
61 #define AOPOBJ_DATA_VALID 0x04
62 #define AOPOBJ_OBJECT_INITIALIZED 0x08
63 #define AOPOBJ_REG_CONNECTED 0x10
64 #define AOPOBJ_SETUP_COMPLETE 0x20
65 #define AOPOBJ_INVALID 0x40
66
67
68
69
70
71
72
73 struct acpi_object_common {
74 ACPI_OBJECT_COMMON_HEADER};
75
76 struct acpi_object_integer {
77 ACPI_OBJECT_COMMON_HEADER u8 fill[3];
78 u64 value;
79 };
80
81
82
83
84
85
86
87 #define ACPI_COMMON_BUFFER_INFO(_type) \
88 _type *pointer; \
89 u32 length;
90
91
92
93 struct acpi_object_string {
94 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO(char)
95 };
96
97 struct acpi_object_buffer {
98 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO(u8)
99 u32 aml_length;
100 u8 *aml_start;
101 struct acpi_namespace_node *node;
102 };
103
104 struct acpi_object_package {
105 ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *node;
106 union acpi_operand_object **elements;
107 u8 *aml_start;
108 u32 aml_length;
109 u32 count;
110 };
111
112
113
114
115
116
117
118 struct acpi_object_event {
119 ACPI_OBJECT_COMMON_HEADER acpi_semaphore os_semaphore;
120 };
121
122 struct acpi_object_mutex {
123 ACPI_OBJECT_COMMON_HEADER u8 sync_level;
124 u16 acquisition_depth;
125 acpi_mutex os_mutex;
126 acpi_thread_id thread_id;
127 struct acpi_thread_state *owner_thread;
128 union acpi_operand_object *prev;
129 union acpi_operand_object *next;
130 struct acpi_namespace_node *node;
131 u8 original_sync_level;
132 };
133
134 struct acpi_object_region {
135 ACPI_OBJECT_COMMON_HEADER u8 space_id;
136 struct acpi_namespace_node *node;
137 union acpi_operand_object *handler;
138 union acpi_operand_object *next;
139 acpi_physical_address address;
140 u32 length;
141 };
142
143 struct acpi_object_method {
144 ACPI_OBJECT_COMMON_HEADER u8 info_flags;
145 u8 param_count;
146 u8 sync_level;
147 union acpi_operand_object *mutex;
148 union acpi_operand_object *node;
149 u8 *aml_start;
150 union {
151 acpi_internal_method implementation;
152 union acpi_operand_object *handler;
153 } dispatch;
154
155 u32 aml_length;
156 acpi_owner_id owner_id;
157 u8 thread_count;
158 };
159
160
161
162 #define ACPI_METHOD_MODULE_LEVEL 0x01
163 #define ACPI_METHOD_INTERNAL_ONLY 0x02
164 #define ACPI_METHOD_SERIALIZED 0x04
165 #define ACPI_METHOD_SERIALIZED_PENDING 0x08
166 #define ACPI_METHOD_IGNORE_SYNC_LEVEL 0x10
167 #define ACPI_METHOD_MODIFIED_NAMESPACE 0x20
168
169
170
171
172
173
174
175
176
177
178 #define ACPI_COMMON_NOTIFY_INFO \
179 union acpi_operand_object *notify_list[2]; \
180 union acpi_operand_object *handler;
181
182
183
184 struct acpi_object_notify_common {
185 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO};
186
187 struct acpi_object_device {
188 ACPI_OBJECT_COMMON_HEADER
189 ACPI_COMMON_NOTIFY_INFO struct acpi_gpe_block_info *gpe_block;
190 };
191
192 struct acpi_object_power_resource {
193 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO u32 system_level;
194 u32 resource_order;
195 };
196
197 struct acpi_object_processor {
198 ACPI_OBJECT_COMMON_HEADER
199
200 u8 proc_id;
201 u8 length;
202 ACPI_COMMON_NOTIFY_INFO acpi_io_address address;
203 };
204
205 struct acpi_object_thermal_zone {
206 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO};
207
208
209
210
211
212
213
214
215
216
217
218
219 #define ACPI_COMMON_FIELD_INFO \
220 u8 field_flags; \
221 u8 attribute; \
222 u8 access_byte_width; \
223 struct acpi_namespace_node *node; \
224 u32 bit_length; \
225 u32 base_byte_offset; \
226 u32 value; \
227 u8 start_field_bit_offset;\
228 u8 access_length;
229
230
231
232
233 struct acpi_object_field_common {
234 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *region_obj;
235 };
236
237 struct acpi_object_region_field {
238 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO u16 resource_length;
239 union acpi_operand_object *region_obj;
240 u8 *resource_buffer;
241 u16 pin_number_index;
242 u8 *internal_pcc_buffer;
243 };
244
245 struct acpi_object_bank_field {
246 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *region_obj;
247 union acpi_operand_object *bank_obj;
248 };
249
250 struct acpi_object_index_field {
251 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO
252
253
254
255
256 union acpi_operand_object *index_obj;
257 union acpi_operand_object *data_obj;
258 };
259
260
261
262 struct acpi_object_buffer_field {
263 ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *buffer_obj;
264 };
265
266
267
268
269
270
271
272 struct acpi_object_notify_handler {
273 ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *node;
274 u32 handler_type;
275 acpi_notify_handler handler;
276 void *context;
277 union acpi_operand_object *next[2];
278 };
279
280 struct acpi_object_addr_handler {
281 ACPI_OBJECT_COMMON_HEADER u8 space_id;
282 u8 handler_flags;
283 acpi_adr_space_handler handler;
284 struct acpi_namespace_node *node;
285 void *context;
286 acpi_adr_space_setup setup;
287 union acpi_operand_object *region_list;
288 union acpi_operand_object *next;
289 };
290
291
292
293 #define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED 0x01
294
295
296
297
298
299
300
301
302
303
304
305
306 struct acpi_object_reference {
307 ACPI_OBJECT_COMMON_HEADER u8 class;
308 u8 target_type;
309 u8 resolved;
310 void *object;
311 struct acpi_namespace_node *node;
312 union acpi_operand_object **where;
313 u8 *index_pointer;
314 u8 *aml;
315 u32 value;
316 };
317
318
319
320 typedef enum {
321 ACPI_REFCLASS_LOCAL = 0,
322 ACPI_REFCLASS_ARG = 1,
323 ACPI_REFCLASS_REFOF = 2,
324 ACPI_REFCLASS_INDEX = 3,
325 ACPI_REFCLASS_TABLE = 4,
326 ACPI_REFCLASS_NAME = 5,
327 ACPI_REFCLASS_DEBUG = 6,
328
329 ACPI_REFCLASS_MAX = 6
330 } ACPI_REFERENCE_CLASSES;
331
332
333
334
335
336
337
338
339 struct acpi_object_extra {
340 ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *method_REG;
341 struct acpi_namespace_node *scope_node;
342 void *region_context;
343 u8 *aml_start;
344 u32 aml_length;
345 };
346
347
348
349 struct acpi_object_data {
350 ACPI_OBJECT_COMMON_HEADER acpi_object_handler handler;
351 void *pointer;
352 };
353
354
355
356 struct acpi_object_cache_list {
357 ACPI_OBJECT_COMMON_HEADER union acpi_operand_object *next;
358 };
359
360
361
362
363
364
365
366 union acpi_operand_object {
367 struct acpi_object_common common;
368 struct acpi_object_integer integer;
369 struct acpi_object_string string;
370 struct acpi_object_buffer buffer;
371 struct acpi_object_package package;
372 struct acpi_object_event event;
373 struct acpi_object_method method;
374 struct acpi_object_mutex mutex;
375 struct acpi_object_region region;
376 struct acpi_object_notify_common common_notify;
377 struct acpi_object_device device;
378 struct acpi_object_power_resource power_resource;
379 struct acpi_object_processor processor;
380 struct acpi_object_thermal_zone thermal_zone;
381 struct acpi_object_field_common common_field;
382 struct acpi_object_region_field field;
383 struct acpi_object_buffer_field buffer_field;
384 struct acpi_object_bank_field bank_field;
385 struct acpi_object_index_field index_field;
386 struct acpi_object_notify_handler notify;
387 struct acpi_object_addr_handler address_space;
388 struct acpi_object_reference reference;
389 struct acpi_object_extra extra;
390 struct acpi_object_data data;
391 struct acpi_object_cache_list cache;
392
393
394
395
396
397
398 struct acpi_namespace_node node;
399 };
400
401
402
403
404
405
406
407
408
409 #define ACPI_DESC_TYPE_CACHED 0x01
410 #define ACPI_DESC_TYPE_STATE 0x02
411 #define ACPI_DESC_TYPE_STATE_UPDATE 0x03
412 #define ACPI_DESC_TYPE_STATE_PACKAGE 0x04
413 #define ACPI_DESC_TYPE_STATE_CONTROL 0x05
414 #define ACPI_DESC_TYPE_STATE_RPSCOPE 0x06
415 #define ACPI_DESC_TYPE_STATE_PSCOPE 0x07
416 #define ACPI_DESC_TYPE_STATE_WSCOPE 0x08
417 #define ACPI_DESC_TYPE_STATE_RESULT 0x09
418 #define ACPI_DESC_TYPE_STATE_NOTIFY 0x0A
419 #define ACPI_DESC_TYPE_STATE_THREAD 0x0B
420 #define ACPI_DESC_TYPE_WALK 0x0C
421 #define ACPI_DESC_TYPE_PARSER 0x0D
422 #define ACPI_DESC_TYPE_OPERAND 0x0E
423 #define ACPI_DESC_TYPE_NAMED 0x0F
424 #define ACPI_DESC_TYPE_MAX 0x0F
425
426 struct acpi_common_descriptor {
427 void *common_pointer;
428 u8 descriptor_type;
429 };
430
431 union acpi_descriptor {
432 struct acpi_common_descriptor common;
433 union acpi_operand_object object;
434 struct acpi_namespace_node node;
435 union acpi_parse_object op;
436 };
437
438 #pragma pack()
439
440 #endif