1 | /****************************************************************************** |
2 | * |
3 | * Name: aclocal.h - Internal data types used across the ACPI subsystem |
4 | * |
5 | *****************************************************************************/ |
6 | |
7 | /* |
8 | * Copyright (C) 2000 - 2016, Intel Corp. |
9 | * All rights reserved. |
10 | * |
11 | * Redistribution and use in source and binary forms, with or without |
12 | * modification, are permitted provided that the following conditions |
13 | * are met: |
14 | * 1. Redistributions of source code must retain the above copyright |
15 | * notice, this list of conditions, and the following disclaimer, |
16 | * without modification. |
17 | * 2. Redistributions in binary form must reproduce at minimum a disclaimer |
18 | * substantially similar to the "NO WARRANTY" disclaimer below |
19 | * ("Disclaimer") and any redistribution must be conditioned upon |
20 | * including a substantially similar Disclaimer requirement for further |
21 | * binary redistribution. |
22 | * 3. Neither the names of the above-listed copyright holders nor the names |
23 | * of any contributors may be used to endorse or promote products derived |
24 | * from this software without specific prior written permission. |
25 | * |
26 | * Alternatively, this software may be distributed under the terms of the |
27 | * GNU General Public License ("GPL") version 2 as published by the Free |
28 | * Software Foundation. |
29 | * |
30 | * NO WARRANTY |
31 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
32 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
33 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR |
34 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
35 | * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
36 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
37 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
38 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
39 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
40 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
41 | * POSSIBILITY OF SUCH DAMAGES. |
42 | */ |
43 | |
44 | #ifndef __ACLOCAL_H__ |
45 | #define __ACLOCAL_H__ |
46 | |
47 | |
48 | /* acpisrc:StructDefs -- for acpisrc conversion */ |
49 | |
50 | #define ACPI_SERIALIZED 0xFF |
51 | |
52 | typedef UINT32 ACPI_MUTEX_HANDLE; |
53 | #define ACPI_GLOBAL_LOCK (ACPI_SEMAPHORE) (-1) |
54 | |
55 | /* Total number of aml opcodes defined */ |
56 | |
57 | #define AML_NUM_OPCODES 0x82 |
58 | |
59 | |
60 | /* Forward declarations */ |
61 | |
62 | struct acpi_walk_state; |
63 | struct acpi_obj_mutex; |
64 | union acpi_parse_object; |
65 | |
66 | |
67 | /***************************************************************************** |
68 | * |
69 | * Mutex typedefs and structs |
70 | * |
71 | ****************************************************************************/ |
72 | |
73 | |
74 | /* |
75 | * Predefined handles for the mutex objects used within the subsystem |
76 | * All mutex objects are automatically created by AcpiUtMutexInitialize. |
77 | * |
78 | * The acquire/release ordering protocol is implied via this list. Mutexes |
79 | * with a lower value must be acquired before mutexes with a higher value. |
80 | * |
81 | * NOTE: any changes here must be reflected in the AcpiGbl_MutexNames |
82 | * table below also! |
83 | */ |
84 | #define ACPI_MTX_INTERPRETER 0 /* AML Interpreter, main lock */ |
85 | #define ACPI_MTX_NAMESPACE 1 /* ACPI Namespace */ |
86 | #define ACPI_MTX_TABLES 2 /* Data for ACPI tables */ |
87 | #define ACPI_MTX_EVENTS 3 /* Data for ACPI events */ |
88 | #define ACPI_MTX_CACHES 4 /* Internal caches, general purposes */ |
89 | #define ACPI_MTX_MEMORY 5 /* Debug memory tracking lists */ |
90 | |
91 | #define ACPI_MAX_MUTEX 5 |
92 | #define ACPI_NUM_MUTEX (ACPI_MAX_MUTEX+1) |
93 | |
94 | /* Lock structure for reader/writer interfaces */ |
95 | |
96 | typedef struct acpi_rw_lock |
97 | { |
98 | ACPI_MUTEX WriterMutex; |
99 | ACPI_MUTEX ReaderMutex; |
100 | UINT32 NumReaders; |
101 | |
102 | } ACPI_RW_LOCK; |
103 | |
104 | |
105 | /* |
106 | * Predefined handles for spinlocks used within the subsystem. |
107 | * These spinlocks are created by AcpiUtMutexInitialize |
108 | */ |
109 | #define ACPI_LOCK_GPES 0 |
110 | #define ACPI_LOCK_HARDWARE 1 |
111 | |
112 | #define ACPI_MAX_LOCK 1 |
113 | #define ACPI_NUM_LOCK (ACPI_MAX_LOCK+1) |
114 | |
115 | |
116 | /* This Thread ID means that the mutex is not in use (unlocked) */ |
117 | |
118 | #define ACPI_MUTEX_NOT_ACQUIRED ((ACPI_THREAD_ID) -1) |
119 | |
120 | /* This Thread ID means an invalid thread ID */ |
121 | |
122 | #ifdef ACPI_OS_INVALID_THREAD_ID |
123 | #define ACPI_INVALID_THREAD_ID ACPI_OS_INVALID_THREAD_ID |
124 | #else |
125 | #define ACPI_INVALID_THREAD_ID ((ACPI_THREAD_ID) 0xFFFFFFFF) |
126 | #endif |
127 | |
128 | /* Table for the global mutexes */ |
129 | |
130 | typedef struct acpi_mutex_info |
131 | { |
132 | ACPI_MUTEX Mutex; |
133 | UINT32 UseCount; |
134 | ACPI_THREAD_ID ThreadId; |
135 | |
136 | } ACPI_MUTEX_INFO; |
137 | |
138 | |
139 | /* Lock flag parameter for various interfaces */ |
140 | |
141 | #define ACPI_MTX_DO_NOT_LOCK 0 |
142 | #define ACPI_MTX_LOCK 1 |
143 | |
144 | |
145 | /* Field access granularities */ |
146 | |
147 | #define ACPI_FIELD_BYTE_GRANULARITY 1 |
148 | #define ACPI_FIELD_WORD_GRANULARITY 2 |
149 | #define ACPI_FIELD_DWORD_GRANULARITY 4 |
150 | #define ACPI_FIELD_QWORD_GRANULARITY 8 |
151 | |
152 | |
153 | #define ACPI_ENTRY_NOT_FOUND NULL |
154 | |
155 | |
156 | /***************************************************************************** |
157 | * |
158 | * Namespace typedefs and structs |
159 | * |
160 | ****************************************************************************/ |
161 | |
162 | /* Operational modes of the AML interpreter/scanner */ |
163 | |
164 | typedef enum |
165 | { |
166 | ACPI_IMODE_LOAD_PASS1 = 0x01, |
167 | ACPI_IMODE_LOAD_PASS2 = 0x02, |
168 | ACPI_IMODE_EXECUTE = 0x03 |
169 | |
170 | } ACPI_INTERPRETER_MODE; |
171 | |
172 | |
173 | /* |
174 | * The Namespace Node describes a named object that appears in the AML. |
175 | * DescriptorType is used to differentiate between internal descriptors. |
176 | * |
177 | * The node is optimized for both 32-bit and 64-bit platforms: |
178 | * 20 bytes for the 32-bit case, 32 bytes for the 64-bit case. |
179 | * |
180 | * Note: The DescriptorType and Type fields must appear in the identical |
181 | * position in both the ACPI_NAMESPACE_NODE and ACPI_OPERAND_OBJECT |
182 | * structures. |
183 | */ |
184 | typedef struct acpi_namespace_node |
185 | { |
186 | union acpi_operand_object *Object; /* Interpreter object */ |
187 | UINT8 DescriptorType; /* Differentiate object descriptor types */ |
188 | UINT8 Type; /* ACPI Type associated with this name */ |
189 | UINT8 Flags; /* Miscellaneous flags */ |
190 | ACPI_OWNER_ID OwnerId; /* Node creator */ |
191 | ACPI_NAME_UNION Name; /* ACPI Name, always 4 chars per ACPI spec */ |
192 | struct acpi_namespace_node *Parent; /* Parent node */ |
193 | struct acpi_namespace_node *Child; /* First child */ |
194 | struct acpi_namespace_node *Peer; /* First peer */ |
195 | |
196 | /* |
197 | * The following fields are used by the ASL compiler and disassembler only |
198 | */ |
199 | #ifdef ACPI_LARGE_NAMESPACE_NODE |
200 | union acpi_parse_object *Op; |
201 | void *MethodLocals; |
202 | void *MethodArgs; |
203 | UINT32 Value; |
204 | UINT32 Length; |
205 | UINT8 ArgCount; |
206 | |
207 | #endif |
208 | |
209 | } ACPI_NAMESPACE_NODE; |
210 | |
211 | |
212 | /* Namespace Node flags */ |
213 | |
214 | #define ANOBJ_RESERVED 0x01 /* Available for use */ |
215 | #define ANOBJ_TEMPORARY 0x02 /* Node is create by a method and is temporary */ |
216 | #define ANOBJ_METHOD_ARG 0x04 /* Node is a method argument */ |
217 | #define ANOBJ_METHOD_LOCAL 0x08 /* Node is a method local */ |
218 | #define ANOBJ_SUBTREE_HAS_INI 0x10 /* Used to optimize device initialization */ |
219 | #define ANOBJ_EVALUATED 0x20 /* Set on first evaluation of node */ |
220 | #define ANOBJ_ALLOCATED_BUFFER 0x40 /* Method AML buffer is dynamic (InstallMethod) */ |
221 | |
222 | #define ANOBJ_IS_EXTERNAL 0x08 /* iASL only: This object created via External() */ |
223 | #define ANOBJ_METHOD_NO_RETVAL 0x10 /* iASL only: Method has no return value */ |
224 | #define ANOBJ_METHOD_SOME_NO_RETVAL 0x20 /* iASL only: Method has at least one return value */ |
225 | #define ANOBJ_IS_REFERENCED 0x80 /* iASL only: Object was referenced */ |
226 | |
227 | |
228 | /* Internal ACPI table management - master table list */ |
229 | |
230 | typedef struct acpi_table_list |
231 | { |
232 | ACPI_TABLE_DESC *Tables; /* Table descriptor array */ |
233 | UINT32 CurrentTableCount; /* Tables currently in the array */ |
234 | UINT32 MaxTableCount; /* Max tables array will hold */ |
235 | UINT8 Flags; |
236 | |
237 | } ACPI_TABLE_LIST; |
238 | |
239 | /* Flags for above */ |
240 | |
241 | #define ACPI_ROOT_ORIGIN_UNKNOWN (0) /* ~ORIGIN_ALLOCATED */ |
242 | #define ACPI_ROOT_ORIGIN_ALLOCATED (1) |
243 | #define ACPI_ROOT_ALLOW_RESIZE (2) |
244 | |
245 | |
246 | /* List to manage incoming ACPI tables */ |
247 | |
248 | typedef struct acpi_new_table_desc |
249 | { |
250 | ACPI_TABLE_HEADER *Table; |
251 | struct acpi_new_table_desc *Next; |
252 | |
253 | } ACPI_NEW_TABLE_DESC; |
254 | |
255 | |
256 | /* Predefined table indexes */ |
257 | |
258 | #define ACPI_INVALID_TABLE_INDEX (0xFFFFFFFF) |
259 | |
260 | |
261 | typedef struct acpi_find_context |
262 | { |
263 | char *SearchFor; |
264 | ACPI_HANDLE *List; |
265 | UINT32 *Count; |
266 | |
267 | } ACPI_FIND_CONTEXT; |
268 | |
269 | |
270 | typedef struct acpi_ns_search_data |
271 | { |
272 | ACPI_NAMESPACE_NODE *Node; |
273 | |
274 | } ACPI_NS_SEARCH_DATA; |
275 | |
276 | |
277 | /* Object types used during package copies */ |
278 | |
279 | #define ACPI_COPY_TYPE_SIMPLE 0 |
280 | #define ACPI_COPY_TYPE_PACKAGE 1 |
281 | |
282 | |
283 | /* Info structure used to convert external<->internal namestrings */ |
284 | |
285 | typedef struct acpi_namestring_info |
286 | { |
287 | const char *ExternalName; |
288 | const char *NextExternalChar; |
289 | char *InternalName; |
290 | UINT32 Length; |
291 | UINT32 NumSegments; |
292 | UINT32 NumCarats; |
293 | BOOLEAN FullyQualified; |
294 | |
295 | } ACPI_NAMESTRING_INFO; |
296 | |
297 | |
298 | /* Field creation info */ |
299 | |
300 | typedef struct acpi_create_field_info |
301 | { |
302 | ACPI_NAMESPACE_NODE *RegionNode; |
303 | ACPI_NAMESPACE_NODE *FieldNode; |
304 | ACPI_NAMESPACE_NODE *RegisterNode; |
305 | ACPI_NAMESPACE_NODE *DataRegisterNode; |
306 | ACPI_NAMESPACE_NODE *ConnectionNode; |
307 | UINT8 *ResourceBuffer; |
308 | UINT32 BankValue; |
309 | UINT32 FieldBitPosition; |
310 | UINT32 FieldBitLength; |
311 | UINT16 ResourceLength; |
312 | UINT16 PinNumberIndex; |
313 | UINT8 FieldFlags; |
314 | UINT8 Attribute; |
315 | UINT8 FieldType; |
316 | UINT8 AccessLength; |
317 | |
318 | } ACPI_CREATE_FIELD_INFO; |
319 | |
320 | |
321 | typedef |
322 | ACPI_STATUS (*ACPI_INTERNAL_METHOD) ( |
323 | struct acpi_walk_state *WalkState); |
324 | |
325 | |
326 | /* |
327 | * Bitmapped ACPI types. Used internally only |
328 | */ |
329 | #define ACPI_BTYPE_ANY 0x00000000 |
330 | #define ACPI_BTYPE_INTEGER 0x00000001 |
331 | #define ACPI_BTYPE_STRING 0x00000002 |
332 | #define ACPI_BTYPE_BUFFER 0x00000004 |
333 | #define ACPI_BTYPE_PACKAGE 0x00000008 |
334 | #define ACPI_BTYPE_FIELD_UNIT 0x00000010 |
335 | #define ACPI_BTYPE_DEVICE 0x00000020 |
336 | #define ACPI_BTYPE_EVENT 0x00000040 |
337 | #define ACPI_BTYPE_METHOD 0x00000080 |
338 | #define ACPI_BTYPE_MUTEX 0x00000100 |
339 | #define ACPI_BTYPE_REGION 0x00000200 |
340 | #define ACPI_BTYPE_POWER 0x00000400 |
341 | #define ACPI_BTYPE_PROCESSOR 0x00000800 |
342 | #define ACPI_BTYPE_THERMAL 0x00001000 |
343 | #define ACPI_BTYPE_BUFFER_FIELD 0x00002000 |
344 | #define ACPI_BTYPE_DDB_HANDLE 0x00004000 |
345 | #define ACPI_BTYPE_DEBUG_OBJECT 0x00008000 |
346 | #define ACPI_BTYPE_REFERENCE_OBJECT 0x00010000 /* From Index(), RefOf(), etc (Type6Opcodes) */ |
347 | #define ACPI_BTYPE_RESOURCE 0x00020000 |
348 | #define ACPI_BTYPE_NAMED_REFERENCE 0x00040000 /* Generic unresolved Name or Namepath */ |
349 | |
350 | #define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER) |
351 | |
352 | #define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE) |
353 | |
354 | /* Used by Copy, DeRefOf, Store, Printf, Fprintf */ |
355 | |
356 | #define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE_OBJECT | ACPI_BTYPE_DDB_HANDLE) |
357 | #define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR) |
358 | #define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */ |
359 | #define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF |
360 | |
361 | #pragma pack(1) |
362 | |
363 | /* |
364 | * Information structure for ACPI predefined names. |
365 | * Each entry in the table contains the following items: |
366 | * |
367 | * Name - The ACPI reserved name |
368 | * ParamCount - Number of arguments to the method |
369 | * ExpectedReturnBtypes - Allowed type(s) for the return value |
370 | */ |
371 | typedef struct acpi_name_info |
372 | { |
373 | char Name[ACPI_NAME_SIZE]; |
374 | UINT16 ArgumentList; |
375 | UINT8 ExpectedBtypes; |
376 | |
377 | } ACPI_NAME_INFO; |
378 | |
379 | /* |
380 | * Secondary information structures for ACPI predefined objects that return |
381 | * package objects. This structure appears as the next entry in the table |
382 | * after the NAME_INFO structure above. |
383 | * |
384 | * The reason for this is to minimize the size of the predefined name table. |
385 | */ |
386 | |
387 | /* |
388 | * Used for ACPI_PTYPE1_FIXED, ACPI_PTYPE1_VAR, ACPI_PTYPE2, |
389 | * ACPI_PTYPE2_MIN, ACPI_PTYPE2_PKG_COUNT, ACPI_PTYPE2_COUNT, |
390 | * ACPI_PTYPE2_FIX_VAR |
391 | */ |
392 | typedef struct acpi_package_info |
393 | { |
394 | UINT8 Type; |
395 | UINT8 ObjectType1; |
396 | UINT8 Count1; |
397 | UINT8 ObjectType2; |
398 | UINT8 Count2; |
399 | UINT16 Reserved; |
400 | |
401 | } ACPI_PACKAGE_INFO; |
402 | |
403 | /* Used for ACPI_PTYPE2_FIXED */ |
404 | |
405 | typedef struct acpi_package_info2 |
406 | { |
407 | UINT8 Type; |
408 | UINT8 Count; |
409 | UINT8 ObjectType[4]; |
410 | UINT8 Reserved; |
411 | |
412 | } ACPI_PACKAGE_INFO2; |
413 | |
414 | /* Used for ACPI_PTYPE1_OPTION */ |
415 | |
416 | typedef struct acpi_package_info3 |
417 | { |
418 | UINT8 Type; |
419 | UINT8 Count; |
420 | UINT8 ObjectType[2]; |
421 | UINT8 TailObjectType; |
422 | UINT16 Reserved; |
423 | |
424 | } ACPI_PACKAGE_INFO3; |
425 | |
426 | typedef struct acpi_package_info4 |
427 | { |
428 | UINT8 Type; |
429 | UINT8 ObjectType1; |
430 | UINT8 Count1; |
431 | UINT8 SubObjectTypes; |
432 | UINT8 PkgCount; |
433 | UINT16 Reserved; |
434 | |
435 | } ACPI_PACKAGE_INFO4; |
436 | |
437 | typedef union acpi_predefined_info |
438 | { |
439 | ACPI_NAME_INFO Info; |
440 | ACPI_PACKAGE_INFO RetInfo; |
441 | ACPI_PACKAGE_INFO2 RetInfo2; |
442 | ACPI_PACKAGE_INFO3 RetInfo3; |
443 | ACPI_PACKAGE_INFO4 RetInfo4; |
444 | |
445 | } ACPI_PREDEFINED_INFO; |
446 | |
447 | /* Reset to default packing */ |
448 | |
449 | #pragma pack() |
450 | |
451 | |
452 | /* Return object auto-repair info */ |
453 | |
454 | typedef ACPI_STATUS (*ACPI_OBJECT_CONVERTER) ( |
455 | struct acpi_namespace_node *Scope, |
456 | union acpi_operand_object *OriginalObject, |
457 | union acpi_operand_object **ConvertedObject); |
458 | |
459 | typedef struct acpi_simple_repair_info |
460 | { |
461 | char Name[ACPI_NAME_SIZE]; |
462 | UINT32 UnexpectedBtypes; |
463 | UINT32 PackageIndex; |
464 | ACPI_OBJECT_CONVERTER ObjectConverter; |
465 | |
466 | } ACPI_SIMPLE_REPAIR_INFO; |
467 | |
468 | |
469 | /* |
470 | * Bitmapped return value types |
471 | * Note: the actual data types must be contiguous, a loop in nspredef.c |
472 | * depends on this. |
473 | */ |
474 | #define ACPI_RTYPE_ANY 0x00 |
475 | #define ACPI_RTYPE_NONE 0x01 |
476 | #define ACPI_RTYPE_INTEGER 0x02 |
477 | #define ACPI_RTYPE_STRING 0x04 |
478 | #define ACPI_RTYPE_BUFFER 0x08 |
479 | #define ACPI_RTYPE_PACKAGE 0x10 |
480 | #define ACPI_RTYPE_REFERENCE 0x20 |
481 | #define ACPI_RTYPE_ALL 0x3F |
482 | |
483 | #define ACPI_NUM_RTYPES 5 /* Number of actual object types */ |
484 | |
485 | |
486 | /* Info for running the _REG methods */ |
487 | |
488 | typedef struct acpi_reg_walk_info |
489 | { |
490 | ACPI_ADR_SPACE_TYPE SpaceId; |
491 | UINT32 Function; |
492 | UINT32 RegRunCount; |
493 | |
494 | } ACPI_REG_WALK_INFO; |
495 | |
496 | |
497 | /***************************************************************************** |
498 | * |
499 | * Event typedefs and structs |
500 | * |
501 | ****************************************************************************/ |
502 | |
503 | /* Dispatch info for each host-installed SCI handler */ |
504 | |
505 | typedef struct acpi_sci_handler_info |
506 | { |
507 | struct acpi_sci_handler_info *Next; |
508 | ACPI_SCI_HANDLER Address; /* Address of handler */ |
509 | void *Context; /* Context to be passed to handler */ |
510 | |
511 | } ACPI_SCI_HANDLER_INFO; |
512 | |
513 | /* Dispatch info for each GPE -- either a method or handler, cannot be both */ |
514 | |
515 | typedef struct acpi_gpe_handler_info |
516 | { |
517 | ACPI_GPE_HANDLER Address; /* Address of handler, if any */ |
518 | void *Context; /* Context to be passed to handler */ |
519 | ACPI_NAMESPACE_NODE *MethodNode; /* Method node for this GPE level (saved) */ |
520 | UINT8 OriginalFlags; /* Original (pre-handler) GPE info */ |
521 | BOOLEAN OriginallyEnabled; /* True if GPE was originally enabled */ |
522 | |
523 | } ACPI_GPE_HANDLER_INFO; |
524 | |
525 | /* Notify info for implicit notify, multiple device objects */ |
526 | |
527 | typedef struct acpi_gpe_notify_info |
528 | { |
529 | ACPI_NAMESPACE_NODE *DeviceNode; /* Device to be notified */ |
530 | struct acpi_gpe_notify_info *Next; |
531 | |
532 | } ACPI_GPE_NOTIFY_INFO; |
533 | |
534 | /* |
535 | * GPE dispatch info. At any time, the GPE can have at most one type |
536 | * of dispatch - Method, Handler, or Implicit Notify. |
537 | */ |
538 | typedef union acpi_gpe_dispatch_info |
539 | { |
540 | ACPI_NAMESPACE_NODE *MethodNode; /* Method node for this GPE level */ |
541 | ACPI_GPE_HANDLER_INFO *Handler; /* Installed GPE handler */ |
542 | ACPI_GPE_NOTIFY_INFO *NotifyList; /* List of _PRW devices for implicit notifies */ |
543 | |
544 | } ACPI_GPE_DISPATCH_INFO; |
545 | |
546 | /* |
547 | * Information about a GPE, one per each GPE in an array. |
548 | * NOTE: Important to keep this struct as small as possible. |
549 | */ |
550 | typedef struct acpi_gpe_event_info |
551 | { |
552 | union acpi_gpe_dispatch_info Dispatch; /* Either Method, Handler, or NotifyList */ |
553 | struct acpi_gpe_register_info *RegisterInfo; /* Backpointer to register info */ |
554 | UINT8 Flags; /* Misc info about this GPE */ |
555 | UINT8 GpeNumber; /* This GPE */ |
556 | UINT8 RuntimeCount; /* References to a run GPE */ |
557 | BOOLEAN DisableForDispatch; /* Masked during dispatching */ |
558 | |
559 | } ACPI_GPE_EVENT_INFO; |
560 | |
561 | /* Information about a GPE register pair, one per each status/enable pair in an array */ |
562 | |
563 | typedef struct acpi_gpe_register_info |
564 | { |
565 | ACPI_GENERIC_ADDRESS StatusAddress; /* Address of status reg */ |
566 | ACPI_GENERIC_ADDRESS EnableAddress; /* Address of enable reg */ |
567 | UINT16 BaseGpeNumber; /* Base GPE number for this register */ |
568 | UINT8 EnableForWake; /* GPEs to keep enabled when sleeping */ |
569 | UINT8 EnableForRun; /* GPEs to keep enabled when running */ |
570 | UINT8 MaskForRun; /* GPEs to keep masked when running */ |
571 | UINT8 EnableMask; /* Current mask of enabled GPEs */ |
572 | |
573 | } ACPI_GPE_REGISTER_INFO; |
574 | |
575 | /* |
576 | * Information about a GPE register block, one per each installed block -- |
577 | * GPE0, GPE1, and one per each installed GPE Block Device. |
578 | */ |
579 | typedef struct acpi_gpe_block_info |
580 | { |
581 | ACPI_NAMESPACE_NODE *Node; |
582 | struct acpi_gpe_block_info *Previous; |
583 | struct acpi_gpe_block_info *Next; |
584 | struct acpi_gpe_xrupt_info *XruptBlock; /* Backpointer to interrupt block */ |
585 | ACPI_GPE_REGISTER_INFO *RegisterInfo; /* One per GPE register pair */ |
586 | ACPI_GPE_EVENT_INFO *EventInfo; /* One for each GPE */ |
587 | UINT64 Address; /* Base address of the block */ |
588 | UINT32 RegisterCount; /* Number of register pairs in block */ |
589 | UINT16 GpeCount; /* Number of individual GPEs in block */ |
590 | UINT16 BlockBaseNumber;/* Base GPE number for this block */ |
591 | UINT8 SpaceId; |
592 | BOOLEAN Initialized; /* TRUE if this block is initialized */ |
593 | |
594 | } ACPI_GPE_BLOCK_INFO; |
595 | |
596 | /* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */ |
597 | |
598 | typedef struct acpi_gpe_xrupt_info |
599 | { |
600 | struct acpi_gpe_xrupt_info *Previous; |
601 | struct acpi_gpe_xrupt_info *Next; |
602 | ACPI_GPE_BLOCK_INFO *GpeBlockListHead; /* List of GPE blocks for this xrupt */ |
603 | UINT32 InterruptNumber; /* System interrupt number */ |
604 | |
605 | } ACPI_GPE_XRUPT_INFO; |
606 | |
607 | typedef struct acpi_gpe_walk_info |
608 | { |
609 | ACPI_NAMESPACE_NODE *GpeDevice; |
610 | ACPI_GPE_BLOCK_INFO *GpeBlock; |
611 | UINT16 Count; |
612 | ACPI_OWNER_ID OwnerId; |
613 | BOOLEAN ExecuteByOwnerId; |
614 | |
615 | } ACPI_GPE_WALK_INFO; |
616 | |
617 | typedef struct acpi_gpe_device_info |
618 | { |
619 | UINT32 Index; |
620 | UINT32 NextBlockBaseIndex; |
621 | ACPI_STATUS Status; |
622 | ACPI_NAMESPACE_NODE *GpeDevice; |
623 | |
624 | } ACPI_GPE_DEVICE_INFO; |
625 | |
626 | typedef ACPI_STATUS (*ACPI_GPE_CALLBACK) ( |
627 | ACPI_GPE_XRUPT_INFO *GpeXruptInfo, |
628 | ACPI_GPE_BLOCK_INFO *GpeBlock, |
629 | void *Context); |
630 | |
631 | |
632 | /* Information about each particular fixed event */ |
633 | |
634 | typedef struct acpi_fixed_event_handler |
635 | { |
636 | ACPI_EVENT_HANDLER Handler; /* Address of handler. */ |
637 | void *Context; /* Context to be passed to handler */ |
638 | |
639 | } ACPI_FIXED_EVENT_HANDLER; |
640 | |
641 | typedef struct acpi_fixed_event_info |
642 | { |
643 | UINT8 StatusRegisterId; |
644 | UINT8 EnableRegisterId; |
645 | UINT16 StatusBitMask; |
646 | UINT16 EnableBitMask; |
647 | |
648 | } ACPI_FIXED_EVENT_INFO; |
649 | |
650 | /* Information used during field processing */ |
651 | |
652 | typedef struct acpi_field_info |
653 | { |
654 | UINT8 SkipField; |
655 | UINT8 FieldFlag; |
656 | UINT32 PkgLength; |
657 | |
658 | } ACPI_FIELD_INFO; |
659 | |
660 | |
661 | /***************************************************************************** |
662 | * |
663 | * Generic "state" object for stacks |
664 | * |
665 | ****************************************************************************/ |
666 | |
667 | #define ACPI_CONTROL_NORMAL 0xC0 |
668 | #define ACPI_CONTROL_CONDITIONAL_EXECUTING 0xC1 |
669 | #define ACPI_CONTROL_PREDICATE_EXECUTING 0xC2 |
670 | #define ACPI_CONTROL_PREDICATE_FALSE 0xC3 |
671 | #define ACPI_CONTROL_PREDICATE_TRUE 0xC4 |
672 | |
673 | |
674 | #define ACPI_STATE_COMMON \ |
675 | void *Next; \ |
676 | UINT8 DescriptorType; /* To differentiate various internal objs */\ |
677 | UINT8 Flags; \ |
678 | UINT16 Value; \ |
679 | UINT16 State; |
680 | |
681 | /* There are 2 bytes available here until the next natural alignment boundary */ |
682 | |
683 | typedef struct acpi_common_state |
684 | { |
685 | ACPI_STATE_COMMON |
686 | } ACPI_COMMON_STATE; |
687 | |
688 | |
689 | /* |
690 | * Update state - used to traverse complex objects such as packages |
691 | */ |
692 | typedef struct acpi_update_state |
693 | { |
694 | ACPI_STATE_COMMON |
695 | union acpi_operand_object *Object; |
696 | |
697 | } ACPI_UPDATE_STATE; |
698 | |
699 | |
700 | /* |
701 | * Pkg state - used to traverse nested package structures |
702 | */ |
703 | typedef struct acpi_pkg_state |
704 | { |
705 | ACPI_STATE_COMMON |
706 | UINT16 Index; |
707 | union acpi_operand_object *SourceObject; |
708 | union acpi_operand_object *DestObject; |
709 | struct acpi_walk_state *WalkState; |
710 | void *ThisTargetObj; |
711 | UINT32 NumPackages; |
712 | |
713 | } ACPI_PKG_STATE; |
714 | |
715 | |
716 | /* |
717 | * Control state - one per if/else and while constructs. |
718 | * Allows nesting of these constructs |
719 | */ |
720 | typedef struct acpi_control_state |
721 | { |
722 | ACPI_STATE_COMMON |
723 | UINT16 Opcode; |
724 | union acpi_parse_object *PredicateOp; |
725 | UINT8 *AmlPredicateStart; /* Start of if/while predicate */ |
726 | UINT8 *PackageEnd; /* End of if/while block */ |
727 | UINT32 LoopCount; /* While() loop counter */ |
728 | |
729 | } ACPI_CONTROL_STATE; |
730 | |
731 | |
732 | /* |
733 | * Scope state - current scope during namespace lookups |
734 | */ |
735 | typedef struct acpi_scope_state |
736 | { |
737 | ACPI_STATE_COMMON |
738 | ACPI_NAMESPACE_NODE *Node; |
739 | |
740 | } ACPI_SCOPE_STATE; |
741 | |
742 | |
743 | typedef struct acpi_pscope_state |
744 | { |
745 | ACPI_STATE_COMMON |
746 | UINT32 ArgCount; /* Number of fixed arguments */ |
747 | union acpi_parse_object *Op; /* Current op being parsed */ |
748 | UINT8 *ArgEnd; /* Current argument end */ |
749 | UINT8 *PkgEnd; /* Current package end */ |
750 | UINT32 ArgList; /* Next argument to parse */ |
751 | |
752 | } ACPI_PSCOPE_STATE; |
753 | |
754 | |
755 | /* |
756 | * Thread state - one per thread across multiple walk states. Multiple walk |
757 | * states are created when there are nested control methods executing. |
758 | */ |
759 | typedef struct acpi_thread_state |
760 | { |
761 | ACPI_STATE_COMMON |
762 | UINT8 CurrentSyncLevel; /* Mutex Sync (nested acquire) level */ |
763 | struct acpi_walk_state *WalkStateList; /* Head of list of WalkStates for this thread */ |
764 | union acpi_operand_object *AcquiredMutexList; /* List of all currently acquired mutexes */ |
765 | ACPI_THREAD_ID ThreadId; /* Running thread ID */ |
766 | |
767 | } ACPI_THREAD_STATE; |
768 | |
769 | |
770 | /* |
771 | * Result values - used to accumulate the results of nested |
772 | * AML arguments |
773 | */ |
774 | typedef struct acpi_result_values |
775 | { |
776 | ACPI_STATE_COMMON |
777 | union acpi_operand_object *ObjDesc [ACPI_RESULTS_FRAME_OBJ_NUM]; |
778 | |
779 | } ACPI_RESULT_VALUES; |
780 | |
781 | |
782 | typedef |
783 | ACPI_STATUS (*ACPI_PARSE_DOWNWARDS) ( |
784 | struct acpi_walk_state *WalkState, |
785 | union acpi_parse_object **OutOp); |
786 | |
787 | typedef |
788 | ACPI_STATUS (*ACPI_PARSE_UPWARDS) ( |
789 | struct acpi_walk_state *WalkState); |
790 | |
791 | |
792 | /* Global handlers for AML Notifies */ |
793 | |
794 | typedef struct acpi_global_notify_handler |
795 | { |
796 | ACPI_NOTIFY_HANDLER Handler; |
797 | void *Context; |
798 | |
799 | } ACPI_GLOBAL_NOTIFY_HANDLER; |
800 | |
801 | /* |
802 | * Notify info - used to pass info to the deferred notify |
803 | * handler/dispatcher. |
804 | */ |
805 | typedef struct acpi_notify_info |
806 | { |
807 | ACPI_STATE_COMMON |
808 | UINT8 HandlerListId; |
809 | ACPI_NAMESPACE_NODE *Node; |
810 | union acpi_operand_object *HandlerListHead; |
811 | ACPI_GLOBAL_NOTIFY_HANDLER *Global; |
812 | |
813 | } ACPI_NOTIFY_INFO; |
814 | |
815 | |
816 | /* Generic state is union of structs above */ |
817 | |
818 | typedef union acpi_generic_state |
819 | { |
820 | ACPI_COMMON_STATE Common; |
821 | ACPI_CONTROL_STATE Control; |
822 | ACPI_UPDATE_STATE Update; |
823 | ACPI_SCOPE_STATE Scope; |
824 | ACPI_PSCOPE_STATE ParseScope; |
825 | ACPI_PKG_STATE Pkg; |
826 | ACPI_THREAD_STATE Thread; |
827 | ACPI_RESULT_VALUES Results; |
828 | ACPI_NOTIFY_INFO Notify; |
829 | |
830 | } ACPI_GENERIC_STATE; |
831 | |
832 | |
833 | /***************************************************************************** |
834 | * |
835 | * Interpreter typedefs and structs |
836 | * |
837 | ****************************************************************************/ |
838 | |
839 | typedef |
840 | ACPI_STATUS (*ACPI_EXECUTE_OP) ( |
841 | struct acpi_walk_state *WalkState); |
842 | |
843 | /* Address Range info block */ |
844 | |
845 | typedef struct acpi_address_range |
846 | { |
847 | struct acpi_address_range *Next; |
848 | ACPI_NAMESPACE_NODE *RegionNode; |
849 | ACPI_PHYSICAL_ADDRESS StartAddress; |
850 | ACPI_PHYSICAL_ADDRESS EndAddress; |
851 | |
852 | } ACPI_ADDRESS_RANGE; |
853 | |
854 | |
855 | /***************************************************************************** |
856 | * |
857 | * Parser typedefs and structs |
858 | * |
859 | ****************************************************************************/ |
860 | |
861 | /* |
862 | * AML opcode, name, and argument layout |
863 | */ |
864 | typedef struct acpi_opcode_info |
865 | { |
866 | #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT) |
867 | const char *Name; /* Opcode name (disassembler/debug only) */ |
868 | #endif |
869 | UINT32 ParseArgs; /* Grammar/Parse time arguments */ |
870 | UINT32 RuntimeArgs; /* Interpret time arguments */ |
871 | UINT16 Flags; /* Misc flags */ |
872 | UINT8 ObjectType; /* Corresponding internal object type */ |
873 | UINT8 Class; /* Opcode class */ |
874 | UINT8 Type; /* Opcode type */ |
875 | |
876 | } ACPI_OPCODE_INFO; |
877 | |
878 | /* Structure for Resource Tag information */ |
879 | |
880 | typedef struct acpi_tag_info |
881 | { |
882 | UINT32 BitOffset; |
883 | UINT32 BitLength; |
884 | |
885 | } ACPI_TAG_INFO; |
886 | |
887 | /* Value associated with the parse object */ |
888 | |
889 | typedef union acpi_parse_value |
890 | { |
891 | UINT64 Integer; /* Integer constant (Up to 64 bits) */ |
892 | UINT32 Size; /* bytelist or field size */ |
893 | char *String; /* NULL terminated string */ |
894 | UINT8 *Buffer; /* buffer or string */ |
895 | char *Name; /* NULL terminated string */ |
896 | union acpi_parse_object *Arg; /* arguments and contained ops */ |
897 | ACPI_TAG_INFO Tag; /* Resource descriptor tag info */ |
898 | |
899 | } ACPI_PARSE_VALUE; |
900 | |
901 | |
902 | #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT) |
903 | #define ACPI_DISASM_ONLY_MEMBERS(a) a; |
904 | #else |
905 | #define ACPI_DISASM_ONLY_MEMBERS(a) |
906 | #endif |
907 | |
908 | #define ACPI_PARSE_COMMON \ |
909 | union acpi_parse_object *Parent; /* Parent op */\ |
910 | UINT8 DescriptorType; /* To differentiate various internal objs */\ |
911 | UINT8 Flags; /* Type of Op */\ |
912 | UINT16 AmlOpcode; /* AML opcode */\ |
913 | UINT8 *Aml; /* Address of declaration in AML */\ |
914 | union acpi_parse_object *Next; /* Next op */\ |
915 | ACPI_NAMESPACE_NODE *Node; /* For use by interpreter */\ |
916 | ACPI_PARSE_VALUE Value; /* Value or args associated with the opcode */\ |
917 | UINT8 ArgListLength; /* Number of elements in the arg list */\ |
918 | ACPI_DISASM_ONLY_MEMBERS (\ |
919 | UINT16 DisasmFlags; /* Used during AML disassembly */\ |
920 | UINT8 DisasmOpcode; /* Subtype used for disassembly */\ |
921 | const char *OperatorSymbol;/* Used for C-style operator name strings */\ |
922 | char AmlOpName[16]) /* Op name (debug only) */ |
923 | |
924 | |
925 | /* Flags for DisasmFlags field above */ |
926 | |
927 | #define ACPI_DASM_BUFFER 0x00 /* Buffer is a simple data buffer */ |
928 | #define ACPI_DASM_RESOURCE 0x01 /* Buffer is a Resource Descriptor */ |
929 | #define ACPI_DASM_STRING 0x02 /* Buffer is a ASCII string */ |
930 | #define ACPI_DASM_UNICODE 0x03 /* Buffer is a Unicode string */ |
931 | #define ACPI_DASM_PLD_METHOD 0x04 /* Buffer is a _PLD method bit-packed buffer */ |
932 | #define ACPI_DASM_UUID 0x05 /* Buffer is a UUID/GUID */ |
933 | #define ACPI_DASM_EISAID 0x06 /* Integer is an EISAID */ |
934 | #define ACPI_DASM_MATCHOP 0x07 /* Parent opcode is a Match() operator */ |
935 | #define ACPI_DASM_LNOT_PREFIX 0x08 /* Start of a LNotEqual (etc.) pair of opcodes */ |
936 | #define ACPI_DASM_LNOT_SUFFIX 0x09 /* End of a LNotEqual (etc.) pair of opcodes */ |
937 | #define ACPI_DASM_HID_STRING 0x0A /* String is a _HID or _CID */ |
938 | #define ACPI_DASM_IGNORE 0x0B /* Not used at this time */ |
939 | |
940 | /* |
941 | * Generic operation (for example: If, While, Store) |
942 | */ |
943 | typedef struct acpi_parse_obj_common |
944 | { |
945 | ACPI_PARSE_COMMON |
946 | } ACPI_PARSE_OBJ_COMMON; |
947 | |
948 | |
949 | /* |
950 | * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and OpRegions), |
951 | * and bytelists. |
952 | */ |
953 | typedef struct acpi_parse_obj_named |
954 | { |
955 | ACPI_PARSE_COMMON |
956 | UINT8 *Path; |
957 | UINT8 *Data; /* AML body or bytelist data */ |
958 | UINT32 Length; /* AML length */ |
959 | UINT32 Name; /* 4-byte name or zero if no name */ |
960 | |
961 | } ACPI_PARSE_OBJ_NAMED; |
962 | |
963 | |
964 | /* This version is used by the iASL compiler only */ |
965 | |
966 | #define ACPI_MAX_PARSEOP_NAME 20 |
967 | |
968 | typedef struct acpi_parse_obj_asl |
969 | { |
970 | ACPI_PARSE_COMMON |
971 | union acpi_parse_object *Child; |
972 | union acpi_parse_object *ParentMethod; |
973 | char *Filename; |
974 | char *ExternalName; |
975 | char *Namepath; |
976 | char NameSeg[4]; |
977 | UINT32 ; |
978 | UINT32 Column; |
979 | UINT32 LineNumber; |
980 | UINT32 LogicalLineNumber; |
981 | UINT32 LogicalByteOffset; |
982 | UINT32 EndLine; |
983 | UINT32 EndLogicalLine; |
984 | UINT32 AcpiBtype; |
985 | UINT32 AmlLength; |
986 | UINT32 AmlSubtreeLength; |
987 | UINT32 FinalAmlLength; |
988 | UINT32 FinalAmlOffset; |
989 | UINT32 CompileFlags; |
990 | UINT16 ParseOpcode; |
991 | UINT8 AmlOpcodeLength; |
992 | UINT8 AmlPkgLenBytes; |
993 | UINT8 ; |
994 | char ParseOpName[ACPI_MAX_PARSEOP_NAME]; |
995 | |
996 | } ACPI_PARSE_OBJ_ASL; |
997 | |
998 | typedef union acpi_parse_object |
999 | { |
1000 | ACPI_PARSE_OBJ_COMMON Common; |
1001 | ACPI_PARSE_OBJ_NAMED Named; |
1002 | ACPI_PARSE_OBJ_ASL Asl; |
1003 | |
1004 | } ACPI_PARSE_OBJECT; |
1005 | |
1006 | |
1007 | /* |
1008 | * Parse state - one state per parser invocation and each control |
1009 | * method. |
1010 | */ |
1011 | typedef struct acpi_parse_state |
1012 | { |
1013 | UINT8 *AmlStart; /* First AML byte */ |
1014 | UINT8 *Aml; /* Next AML byte */ |
1015 | UINT8 *AmlEnd; /* (last + 1) AML byte */ |
1016 | UINT8 *PkgStart; /* Current package begin */ |
1017 | UINT8 *PkgEnd; /* Current package end */ |
1018 | union acpi_parse_object *StartOp; /* Root of parse tree */ |
1019 | struct acpi_namespace_node *StartNode; |
1020 | union acpi_generic_state *Scope; /* Current scope */ |
1021 | union acpi_parse_object *StartScope; |
1022 | UINT32 AmlSize; |
1023 | |
1024 | } ACPI_PARSE_STATE; |
1025 | |
1026 | |
1027 | /* Parse object flags */ |
1028 | |
1029 | #define ACPI_PARSEOP_GENERIC 0x01 |
1030 | #define ACPI_PARSEOP_NAMED_OBJECT 0x02 |
1031 | #define ACPI_PARSEOP_DEFERRED 0x04 |
1032 | #define ACPI_PARSEOP_BYTELIST 0x08 |
1033 | #define ACPI_PARSEOP_IN_STACK 0x10 |
1034 | #define ACPI_PARSEOP_TARGET 0x20 |
1035 | #define ACPI_PARSEOP_IN_CACHE 0x80 |
1036 | |
1037 | /* Parse object DisasmFlags */ |
1038 | |
1039 | #define ACPI_PARSEOP_IGNORE 0x0001 |
1040 | #define ACPI_PARSEOP_PARAMETER_LIST 0x0002 |
1041 | #define ACPI_PARSEOP_EMPTY_TERMLIST 0x0004 |
1042 | #define ACPI_PARSEOP_PREDEFINED_CHECKED 0x0008 |
1043 | #define ACPI_PARSEOP_CLOSING_PAREN 0x0010 |
1044 | #define ACPI_PARSEOP_COMPOUND_ASSIGNMENT 0x0020 |
1045 | #define ACPI_PARSEOP_ASSIGNMENT 0x0040 |
1046 | #define ACPI_PARSEOP_ELSEIF 0x0080 |
1047 | #define ACPI_PARSEOP_LEGACY_ASL_ONLY 0x0100 |
1048 | |
1049 | |
1050 | /***************************************************************************** |
1051 | * |
1052 | * Hardware (ACPI registers) and PNP |
1053 | * |
1054 | ****************************************************************************/ |
1055 | |
1056 | typedef struct acpi_bit_register_info |
1057 | { |
1058 | UINT8 ParentRegister; |
1059 | UINT8 BitPosition; |
1060 | UINT16 AccessBitMask; |
1061 | |
1062 | } ACPI_BIT_REGISTER_INFO; |
1063 | |
1064 | |
1065 | /* |
1066 | * Some ACPI registers have bits that must be ignored -- meaning that they |
1067 | * must be preserved. |
1068 | */ |
1069 | #define ACPI_PM1_STATUS_PRESERVED_BITS 0x0800 /* Bit 11 */ |
1070 | |
1071 | /* Write-only bits must be zeroed by software */ |
1072 | |
1073 | #define ACPI_PM1_CONTROL_WRITEONLY_BITS 0x2004 /* Bits 13, 2 */ |
1074 | |
1075 | /* For control registers, both ignored and reserved bits must be preserved */ |
1076 | |
1077 | /* |
1078 | * For PM1 control, the SCI enable bit (bit 0, SCI_EN) is defined by the |
1079 | * ACPI specification to be a "preserved" bit - "OSPM always preserves this |
1080 | * bit position", section 4.7.3.2.1. However, on some machines the OS must |
1081 | * write a one to this bit after resume for the machine to work properly. |
1082 | * To enable this, we no longer attempt to preserve this bit. No machines |
1083 | * are known to fail if the bit is not preserved. (May 2009) |
1084 | */ |
1085 | #define ACPI_PM1_CONTROL_IGNORED_BITS 0x0200 /* Bit 9 */ |
1086 | #define ACPI_PM1_CONTROL_RESERVED_BITS 0xC1F8 /* Bits 14-15, 3-8 */ |
1087 | #define ACPI_PM1_CONTROL_PRESERVED_BITS \ |
1088 | (ACPI_PM1_CONTROL_IGNORED_BITS | ACPI_PM1_CONTROL_RESERVED_BITS) |
1089 | |
1090 | #define ACPI_PM2_CONTROL_PRESERVED_BITS 0xFFFFFFFE /* All except bit 0 */ |
1091 | |
1092 | /* |
1093 | * Register IDs |
1094 | * These are the full ACPI registers |
1095 | */ |
1096 | #define ACPI_REGISTER_PM1_STATUS 0x01 |
1097 | #define ACPI_REGISTER_PM1_ENABLE 0x02 |
1098 | #define ACPI_REGISTER_PM1_CONTROL 0x03 |
1099 | #define ACPI_REGISTER_PM2_CONTROL 0x04 |
1100 | #define ACPI_REGISTER_PM_TIMER 0x05 |
1101 | #define ACPI_REGISTER_PROCESSOR_BLOCK 0x06 |
1102 | #define ACPI_REGISTER_SMI_COMMAND_BLOCK 0x07 |
1103 | |
1104 | |
1105 | /* Masks used to access the BitRegisters */ |
1106 | |
1107 | #define ACPI_BITMASK_TIMER_STATUS 0x0001 |
1108 | #define ACPI_BITMASK_BUS_MASTER_STATUS 0x0010 |
1109 | #define ACPI_BITMASK_GLOBAL_LOCK_STATUS 0x0020 |
1110 | #define ACPI_BITMASK_POWER_BUTTON_STATUS 0x0100 |
1111 | #define ACPI_BITMASK_SLEEP_BUTTON_STATUS 0x0200 |
1112 | #define ACPI_BITMASK_RT_CLOCK_STATUS 0x0400 |
1113 | #define ACPI_BITMASK_PCIEXP_WAKE_STATUS 0x4000 /* ACPI 3.0 */ |
1114 | #define ACPI_BITMASK_WAKE_STATUS 0x8000 |
1115 | |
1116 | #define ACPI_BITMASK_ALL_FIXED_STATUS (\ |
1117 | ACPI_BITMASK_TIMER_STATUS | \ |
1118 | ACPI_BITMASK_BUS_MASTER_STATUS | \ |
1119 | ACPI_BITMASK_GLOBAL_LOCK_STATUS | \ |
1120 | ACPI_BITMASK_POWER_BUTTON_STATUS | \ |
1121 | ACPI_BITMASK_SLEEP_BUTTON_STATUS | \ |
1122 | ACPI_BITMASK_RT_CLOCK_STATUS | \ |
1123 | ACPI_BITMASK_PCIEXP_WAKE_STATUS | \ |
1124 | ACPI_BITMASK_WAKE_STATUS) |
1125 | |
1126 | #define ACPI_BITMASK_TIMER_ENABLE 0x0001 |
1127 | #define ACPI_BITMASK_GLOBAL_LOCK_ENABLE 0x0020 |
1128 | #define ACPI_BITMASK_POWER_BUTTON_ENABLE 0x0100 |
1129 | #define ACPI_BITMASK_SLEEP_BUTTON_ENABLE 0x0200 |
1130 | #define ACPI_BITMASK_RT_CLOCK_ENABLE 0x0400 |
1131 | #define ACPI_BITMASK_PCIEXP_WAKE_DISABLE 0x4000 /* ACPI 3.0 */ |
1132 | |
1133 | #define ACPI_BITMASK_SCI_ENABLE 0x0001 |
1134 | #define ACPI_BITMASK_BUS_MASTER_RLD 0x0002 |
1135 | #define ACPI_BITMASK_GLOBAL_LOCK_RELEASE 0x0004 |
1136 | #define ACPI_BITMASK_SLEEP_TYPE 0x1C00 |
1137 | #define ACPI_BITMASK_SLEEP_ENABLE 0x2000 |
1138 | |
1139 | #define ACPI_BITMASK_ARB_DISABLE 0x0001 |
1140 | |
1141 | |
1142 | /* Raw bit position of each BitRegister */ |
1143 | |
1144 | #define ACPI_BITPOSITION_TIMER_STATUS 0x00 |
1145 | #define ACPI_BITPOSITION_BUS_MASTER_STATUS 0x04 |
1146 | #define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS 0x05 |
1147 | #define ACPI_BITPOSITION_POWER_BUTTON_STATUS 0x08 |
1148 | #define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS 0x09 |
1149 | #define ACPI_BITPOSITION_RT_CLOCK_STATUS 0x0A |
1150 | #define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS 0x0E /* ACPI 3.0 */ |
1151 | #define ACPI_BITPOSITION_WAKE_STATUS 0x0F |
1152 | |
1153 | #define ACPI_BITPOSITION_TIMER_ENABLE 0x00 |
1154 | #define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE 0x05 |
1155 | #define ACPI_BITPOSITION_POWER_BUTTON_ENABLE 0x08 |
1156 | #define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE 0x09 |
1157 | #define ACPI_BITPOSITION_RT_CLOCK_ENABLE 0x0A |
1158 | #define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE 0x0E /* ACPI 3.0 */ |
1159 | |
1160 | #define ACPI_BITPOSITION_SCI_ENABLE 0x00 |
1161 | #define ACPI_BITPOSITION_BUS_MASTER_RLD 0x01 |
1162 | #define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE 0x02 |
1163 | #define ACPI_BITPOSITION_SLEEP_TYPE 0x0A |
1164 | #define ACPI_BITPOSITION_SLEEP_ENABLE 0x0D |
1165 | |
1166 | #define ACPI_BITPOSITION_ARB_DISABLE 0x00 |
1167 | |
1168 | |
1169 | /* Structs and definitions for _OSI support and I/O port validation */ |
1170 | |
1171 | #define ACPI_ALWAYS_ILLEGAL 0x00 |
1172 | |
1173 | typedef struct acpi_interface_info |
1174 | { |
1175 | char *Name; |
1176 | struct acpi_interface_info *Next; |
1177 | UINT8 Flags; |
1178 | UINT8 Value; |
1179 | |
1180 | } ACPI_INTERFACE_INFO; |
1181 | |
1182 | #define ACPI_OSI_INVALID 0x01 |
1183 | #define ACPI_OSI_DYNAMIC 0x02 |
1184 | #define ACPI_OSI_FEATURE 0x04 |
1185 | #define ACPI_OSI_DEFAULT_INVALID 0x08 |
1186 | #define ACPI_OSI_OPTIONAL_FEATURE (ACPI_OSI_FEATURE | ACPI_OSI_DEFAULT_INVALID | ACPI_OSI_INVALID) |
1187 | |
1188 | typedef struct acpi_port_info |
1189 | { |
1190 | const char *Name; |
1191 | UINT16 Start; |
1192 | UINT16 End; |
1193 | UINT8 OsiDependency; |
1194 | |
1195 | } ACPI_PORT_INFO; |
1196 | |
1197 | |
1198 | /***************************************************************************** |
1199 | * |
1200 | * Resource descriptors |
1201 | * |
1202 | ****************************************************************************/ |
1203 | |
1204 | /* ResourceType values */ |
1205 | |
1206 | #define ACPI_ADDRESS_TYPE_MEMORY_RANGE 0 |
1207 | #define ACPI_ADDRESS_TYPE_IO_RANGE 1 |
1208 | #define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE 2 |
1209 | |
1210 | /* Resource descriptor types and masks */ |
1211 | |
1212 | #define ACPI_RESOURCE_NAME_LARGE 0x80 |
1213 | #define ACPI_RESOURCE_NAME_SMALL 0x00 |
1214 | |
1215 | #define ACPI_RESOURCE_NAME_SMALL_MASK 0x78 /* Bits 6:3 contain the type */ |
1216 | #define ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK 0x07 /* Bits 2:0 contain the length */ |
1217 | #define ACPI_RESOURCE_NAME_LARGE_MASK 0x7F /* Bits 6:0 contain the type */ |
1218 | |
1219 | |
1220 | /* |
1221 | * Small resource descriptor "names" as defined by the ACPI specification. |
1222 | * Note: Bits 2:0 are used for the descriptor length |
1223 | */ |
1224 | #define ACPI_RESOURCE_NAME_IRQ 0x20 |
1225 | #define ACPI_RESOURCE_NAME_DMA 0x28 |
1226 | #define ACPI_RESOURCE_NAME_START_DEPENDENT 0x30 |
1227 | #define ACPI_RESOURCE_NAME_END_DEPENDENT 0x38 |
1228 | #define ACPI_RESOURCE_NAME_IO 0x40 |
1229 | #define ACPI_RESOURCE_NAME_FIXED_IO 0x48 |
1230 | #define ACPI_RESOURCE_NAME_FIXED_DMA 0x50 |
1231 | #define ACPI_RESOURCE_NAME_RESERVED_S2 0x58 |
1232 | #define ACPI_RESOURCE_NAME_RESERVED_S3 0x60 |
1233 | #define ACPI_RESOURCE_NAME_RESERVED_S4 0x68 |
1234 | #define ACPI_RESOURCE_NAME_VENDOR_SMALL 0x70 |
1235 | #define ACPI_RESOURCE_NAME_END_TAG 0x78 |
1236 | |
1237 | /* |
1238 | * Large resource descriptor "names" as defined by the ACPI specification. |
1239 | * Note: includes the Large Descriptor bit in bit[7] |
1240 | */ |
1241 | #define ACPI_RESOURCE_NAME_MEMORY24 0x81 |
1242 | #define ACPI_RESOURCE_NAME_GENERIC_REGISTER 0x82 |
1243 | #define ACPI_RESOURCE_NAME_RESERVED_L1 0x83 |
1244 | #define ACPI_RESOURCE_NAME_VENDOR_LARGE 0x84 |
1245 | #define ACPI_RESOURCE_NAME_MEMORY32 0x85 |
1246 | #define ACPI_RESOURCE_NAME_FIXED_MEMORY32 0x86 |
1247 | #define ACPI_RESOURCE_NAME_ADDRESS32 0x87 |
1248 | #define ACPI_RESOURCE_NAME_ADDRESS16 0x88 |
1249 | #define ACPI_RESOURCE_NAME_EXTENDED_IRQ 0x89 |
1250 | #define ACPI_RESOURCE_NAME_ADDRESS64 0x8A |
1251 | #define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B |
1252 | #define ACPI_RESOURCE_NAME_GPIO 0x8C |
1253 | #define ACPI_RESOURCE_NAME_SERIAL_BUS 0x8E |
1254 | #define ACPI_RESOURCE_NAME_LARGE_MAX 0x8E |
1255 | |
1256 | |
1257 | /***************************************************************************** |
1258 | * |
1259 | * Miscellaneous |
1260 | * |
1261 | ****************************************************************************/ |
1262 | |
1263 | #define ACPI_ASCII_ZERO 0x30 |
1264 | |
1265 | |
1266 | /***************************************************************************** |
1267 | * |
1268 | * Disassembler |
1269 | * |
1270 | ****************************************************************************/ |
1271 | |
1272 | typedef struct acpi_external_list |
1273 | { |
1274 | char *Path; |
1275 | char *InternalPath; |
1276 | struct acpi_external_list *Next; |
1277 | UINT32 Value; |
1278 | UINT16 Length; |
1279 | UINT16 Flags; |
1280 | UINT8 Type; |
1281 | |
1282 | } ACPI_EXTERNAL_LIST; |
1283 | |
1284 | /* Values for Flags field above */ |
1285 | |
1286 | #define ACPI_EXT_RESOLVED_REFERENCE 0x01 /* Object was resolved during cross ref */ |
1287 | #define ACPI_EXT_ORIGIN_FROM_FILE 0x02 /* External came from a file */ |
1288 | #define ACPI_EXT_INTERNAL_PATH_ALLOCATED 0x04 /* Deallocate internal path on completion */ |
1289 | #define ACPI_EXT_EXTERNAL_EMITTED 0x08 /* External() statement has been emitted */ |
1290 | #define ACPI_EXT_ORIGIN_FROM_OPCODE 0x10 /* External came from a External() opcode */ |
1291 | |
1292 | |
1293 | typedef struct acpi_external_file |
1294 | { |
1295 | char *Path; |
1296 | struct acpi_external_file *Next; |
1297 | |
1298 | } ACPI_EXTERNAL_FILE; |
1299 | |
1300 | |
1301 | /***************************************************************************** |
1302 | * |
1303 | * Debugger |
1304 | * |
1305 | ****************************************************************************/ |
1306 | |
1307 | typedef struct acpi_db_method_info |
1308 | { |
1309 | ACPI_HANDLE Method; |
1310 | ACPI_HANDLE MainThreadGate; |
1311 | ACPI_HANDLE ThreadCompleteGate; |
1312 | ACPI_HANDLE InfoGate; |
1313 | ACPI_THREAD_ID *Threads; |
1314 | UINT32 NumThreads; |
1315 | UINT32 NumCreated; |
1316 | UINT32 NumCompleted; |
1317 | |
1318 | char *Name; |
1319 | UINT32 Flags; |
1320 | UINT32 NumLoops; |
1321 | char Pathname[ACPI_DB_LINE_BUFFER_SIZE]; |
1322 | char **Args; |
1323 | ACPI_OBJECT_TYPE *Types; |
1324 | |
1325 | /* |
1326 | * Arguments to be passed to method for the command |
1327 | * Threads - |
1328 | * the Number of threads, ID of current thread and |
1329 | * Index of current thread inside all them created. |
1330 | */ |
1331 | char InitArgs; |
1332 | #ifdef ACPI_DEBUGGER |
1333 | ACPI_OBJECT_TYPE ArgTypes[4]; |
1334 | #endif |
1335 | char *Arguments[4]; |
1336 | char NumThreadsStr[11]; |
1337 | char IdOfThreadStr[11]; |
1338 | char IndexOfThreadStr[11]; |
1339 | |
1340 | } ACPI_DB_METHOD_INFO; |
1341 | |
1342 | typedef struct acpi_integrity_info |
1343 | { |
1344 | UINT32 Nodes; |
1345 | UINT32 Objects; |
1346 | |
1347 | } ACPI_INTEGRITY_INFO; |
1348 | |
1349 | |
1350 | #define ACPI_DB_DISABLE_OUTPUT 0x00 |
1351 | #define ACPI_DB_REDIRECTABLE_OUTPUT 0x01 |
1352 | #define ACPI_DB_CONSOLE_OUTPUT 0x02 |
1353 | #define ACPI_DB_DUPLICATE_OUTPUT 0x03 |
1354 | |
1355 | |
1356 | typedef struct acpi_object_info |
1357 | { |
1358 | UINT32 Types[ACPI_TOTAL_TYPES]; |
1359 | |
1360 | } ACPI_OBJECT_INFO; |
1361 | |
1362 | |
1363 | /***************************************************************************** |
1364 | * |
1365 | * Debug |
1366 | * |
1367 | ****************************************************************************/ |
1368 | |
1369 | /* Entry for a memory allocation (debug only) */ |
1370 | |
1371 | #define ACPI_MEM_MALLOC 0 |
1372 | #define ACPI_MEM_CALLOC 1 |
1373 | #define ACPI_MAX_MODULE_NAME 16 |
1374 | |
1375 | #define \ |
1376 | struct acpi_debug_mem_block *; \ |
1377 | struct acpi_debug_mem_block *; \ |
1378 | UINT32 ; \ |
1379 | UINT32 ; \ |
1380 | UINT32 ; \ |
1381 | char [ACPI_MAX_MODULE_NAME]; \ |
1382 | UINT8 ; |
1383 | |
1384 | typedef struct |
1385 | { |
1386 | ACPI_COMMON_DEBUG_MEM_HEADER |
1387 | |
1388 | } ; |
1389 | |
1390 | typedef struct acpi_debug_mem_block |
1391 | { |
1392 | ACPI_COMMON_DEBUG_MEM_HEADER |
1393 | UINT64 UserSpace; |
1394 | |
1395 | } ACPI_DEBUG_MEM_BLOCK; |
1396 | |
1397 | |
1398 | #define ACPI_MEM_LIST_GLOBAL 0 |
1399 | #define ACPI_MEM_LIST_NSNODE 1 |
1400 | #define ACPI_MEM_LIST_MAX 1 |
1401 | #define ACPI_NUM_MEM_LISTS 2 |
1402 | |
1403 | |
1404 | /***************************************************************************** |
1405 | * |
1406 | * Info/help support |
1407 | * |
1408 | ****************************************************************************/ |
1409 | |
1410 | typedef struct ah_predefined_name |
1411 | { |
1412 | char *Name; |
1413 | char *Description; |
1414 | #ifndef ACPI_ASL_COMPILER |
1415 | char *Action; |
1416 | #endif |
1417 | |
1418 | } AH_PREDEFINED_NAME; |
1419 | |
1420 | typedef struct ah_device_id |
1421 | { |
1422 | const char *Name; |
1423 | const char *Description; |
1424 | |
1425 | } AH_DEVICE_ID; |
1426 | |
1427 | typedef struct ah_uuid |
1428 | { |
1429 | const char *Description; |
1430 | const char *String; |
1431 | |
1432 | } AH_UUID; |
1433 | |
1434 | typedef struct ah_table |
1435 | { |
1436 | char *Signature; |
1437 | char *Description; |
1438 | |
1439 | } AH_TABLE; |
1440 | |
1441 | #endif /* __ACLOCAL_H__ */ |
1442 | |