1 /******************************************************************************
3 * Name: acinterp.h - Interpreter subcomponent prototypes and defines
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2014, Intel Corp.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
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.
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.
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.
44 #ifndef __ACINTERP_H__
45 #define __ACINTERP_H__
48 #pragma pack(push) /* Set default struct packing */
50 #define ACPI_WALK_OPERANDS (&(WalkState->Operands [WalkState->NumOperands -1]))
52 /* Macros for tables used for debug output */
54 #define ACPI_EXD_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_OPERAND_OBJECT,f)
55 #define ACPI_EXD_NSOFFSET(f) (UINT8) ACPI_OFFSET (ACPI_NAMESPACE_NODE,f)
56 #define ACPI_EXD_TABLE_SIZE(name) (sizeof(name) / sizeof (ACPI_EXDUMP_INFO))
59 * If possible, pack the following structures to byte alignment, since we
60 * don't care about performance for debug output. Two cases where we cannot
61 * pack the structures:
63 * 1) Hardware does not support misaligned memory transfers
64 * 2) Compiler does not support pointers within packed structures
66 #if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
70 typedef const struct acpi_exdump_info
78 /* Values for the Opcode field above */
80 #define ACPI_EXD_INIT 0
81 #define ACPI_EXD_TYPE 1
82 #define ACPI_EXD_UINT8 2
83 #define ACPI_EXD_UINT16 3
84 #define ACPI_EXD_UINT32 4
85 #define ACPI_EXD_UINT64 5
86 #define ACPI_EXD_LITERAL 6
87 #define ACPI_EXD_POINTER 7
88 #define ACPI_EXD_ADDRESS 8
89 #define ACPI_EXD_STRING 9
90 #define ACPI_EXD_BUFFER 10
91 #define ACPI_EXD_PACKAGE 11
92 #define ACPI_EXD_FIELD 12
93 #define ACPI_EXD_REFERENCE 13
94 #define ACPI_EXD_LIST 14 /* Operand object list */
95 #define ACPI_EXD_HDLR_LIST 15 /* Address Handler list */
96 #define ACPI_EXD_RGN_LIST 16 /* Region list */
97 #define ACPI_EXD_NODE 17 /* Namespace Node */
99 /* restore default alignment */
105 * exconvrt - object conversion
108 AcpiExConvertToInteger (
109 ACPI_OPERAND_OBJECT *ObjDesc,
110 ACPI_OPERAND_OBJECT **ResultDesc,
114 AcpiExConvertToBuffer (
115 ACPI_OPERAND_OBJECT *ObjDesc,
116 ACPI_OPERAND_OBJECT **ResultDesc);
119 AcpiExConvertToString (
120 ACPI_OPERAND_OBJECT *ObjDesc,
121 ACPI_OPERAND_OBJECT **ResultDesc,
124 /* Types for ->String conversion */
126 #define ACPI_EXPLICIT_BYTE_COPY 0x00000000
127 #define ACPI_EXPLICIT_CONVERT_HEX 0x00000001
128 #define ACPI_IMPLICIT_CONVERT_HEX 0x00000002
129 #define ACPI_EXPLICIT_CONVERT_DECIMAL 0x00000003
132 AcpiExConvertToTargetType (
133 ACPI_OBJECT_TYPE DestinationType,
134 ACPI_OPERAND_OBJECT *SourceDesc,
135 ACPI_OPERAND_OBJECT **ResultDesc,
136 ACPI_WALK_STATE *WalkState);
140 * exdebug - AML debug object
143 AcpiExDoDebugObject (
144 ACPI_OPERAND_OBJECT *SourceDesc,
150 * exfield - ACPI AML (p-code) execution - field manipulation
153 AcpiExCommonBufferSetup (
154 ACPI_OPERAND_OBJECT *ObjDesc,
159 AcpiExWriteWithUpdateRule (
160 ACPI_OPERAND_OBJECT *ObjDesc,
163 UINT32 FieldDatumByteOffset);
166 AcpiExGetBufferDatum(
170 UINT32 ByteGranularity,
171 UINT32 BufferOffset);
174 AcpiExSetBufferDatum (
178 UINT32 ByteGranularity,
179 UINT32 BufferOffset);
182 AcpiExReadDataFromField (
183 ACPI_WALK_STATE *WalkState,
184 ACPI_OPERAND_OBJECT *ObjDesc,
185 ACPI_OPERAND_OBJECT **RetBufferDesc);
188 AcpiExWriteDataToField (
189 ACPI_OPERAND_OBJECT *SourceDesc,
190 ACPI_OPERAND_OBJECT *ObjDesc,
191 ACPI_OPERAND_OBJECT **ResultDesc);
195 * exfldio - low level field I/O
198 AcpiExExtractFromField (
199 ACPI_OPERAND_OBJECT *ObjDesc,
201 UINT32 BufferLength);
204 AcpiExInsertIntoField (
205 ACPI_OPERAND_OBJECT *ObjDesc,
207 UINT32 BufferLength);
211 ACPI_OPERAND_OBJECT *ObjDesc,
212 UINT32 FieldDatumByteOffset,
218 * exmisc - misc support routines
221 AcpiExGetObjectReference (
222 ACPI_OPERAND_OBJECT *ObjDesc,
223 ACPI_OPERAND_OBJECT **ReturnDesc,
224 ACPI_WALK_STATE *WalkState);
227 AcpiExConcatTemplate (
228 ACPI_OPERAND_OBJECT *ObjDesc,
229 ACPI_OPERAND_OBJECT *ObjDesc2,
230 ACPI_OPERAND_OBJECT **ActualReturnDesc,
231 ACPI_WALK_STATE *WalkState);
234 AcpiExDoConcatenate (
235 ACPI_OPERAND_OBJECT *ObjDesc,
236 ACPI_OPERAND_OBJECT *ObjDesc2,
237 ACPI_OPERAND_OBJECT **ActualReturnDesc,
238 ACPI_WALK_STATE *WalkState);
241 AcpiExDoLogicalNumericOp (
245 BOOLEAN *LogicalResult);
250 ACPI_OPERAND_OBJECT *Operand0,
251 ACPI_OPERAND_OBJECT *Operand1,
252 BOOLEAN *LogicalResult);
262 ACPI_WALK_STATE *WalkState);
265 AcpiExCreateProcessor (
266 ACPI_WALK_STATE *WalkState);
269 AcpiExCreatePowerResource (
270 ACPI_WALK_STATE *WalkState);
277 ACPI_WALK_STATE *WalkState);
281 ACPI_WALK_STATE *WalkState);
285 ACPI_WALK_STATE *WalkState);
291 ACPI_WALK_STATE *WalkState);
295 * exconfig - dynamic table load/unload
299 ACPI_OPERAND_OBJECT *ObjDesc,
300 ACPI_OPERAND_OBJECT *Target,
301 ACPI_WALK_STATE *WalkState);
305 ACPI_WALK_STATE *WalkState,
306 ACPI_OPERAND_OBJECT **ReturnDesc);
310 ACPI_OPERAND_OBJECT *DdbHandle);
314 * exmutex - mutex support
318 ACPI_OPERAND_OBJECT *TimeDesc,
319 ACPI_OPERAND_OBJECT *ObjDesc,
320 ACPI_WALK_STATE *WalkState);
323 AcpiExAcquireMutexObject (
325 ACPI_OPERAND_OBJECT *ObjDesc,
326 ACPI_THREAD_ID ThreadId);
330 ACPI_OPERAND_OBJECT *ObjDesc,
331 ACPI_WALK_STATE *WalkState);
334 AcpiExReleaseMutexObject (
335 ACPI_OPERAND_OBJECT *ObjDesc);
338 AcpiExReleaseAllMutexes (
339 ACPI_THREAD_STATE *Thread);
343 ACPI_OPERAND_OBJECT *ObjDesc);
347 * exprep - ACPI AML execution - prep utilities
350 AcpiExPrepCommonFieldObject (
351 ACPI_OPERAND_OBJECT *ObjDesc,
353 UINT8 FieldAttribute,
354 UINT32 FieldBitPosition,
355 UINT32 FieldBitLength);
358 AcpiExPrepFieldValue (
359 ACPI_CREATE_FIELD_INFO *Info);
363 * exsystem - Interface to OS services
366 AcpiExSystemDoNotifyOp (
367 ACPI_OPERAND_OBJECT *Value,
368 ACPI_OPERAND_OBJECT *ObjDesc);
375 AcpiExSystemDoStall (
379 AcpiExSystemSignalEvent(
380 ACPI_OPERAND_OBJECT *ObjDesc);
383 AcpiExSystemWaitEvent(
384 ACPI_OPERAND_OBJECT *Time,
385 ACPI_OPERAND_OBJECT *ObjDesc);
388 AcpiExSystemResetEvent(
389 ACPI_OPERAND_OBJECT *ObjDesc);
392 AcpiExSystemWaitSemaphore (
393 ACPI_SEMAPHORE Semaphore,
397 AcpiExSystemWaitMutex (
402 * exoparg1 - ACPI AML execution, 1 operand
405 AcpiExOpcode_0A_0T_1R (
406 ACPI_WALK_STATE *WalkState);
409 AcpiExOpcode_1A_0T_0R (
410 ACPI_WALK_STATE *WalkState);
413 AcpiExOpcode_1A_0T_1R (
414 ACPI_WALK_STATE *WalkState);
417 AcpiExOpcode_1A_1T_1R (
418 ACPI_WALK_STATE *WalkState);
421 AcpiExOpcode_1A_1T_0R (
422 ACPI_WALK_STATE *WalkState);
425 * exoparg2 - ACPI AML execution, 2 operands
428 AcpiExOpcode_2A_0T_0R (
429 ACPI_WALK_STATE *WalkState);
432 AcpiExOpcode_2A_0T_1R (
433 ACPI_WALK_STATE *WalkState);
436 AcpiExOpcode_2A_1T_1R (
437 ACPI_WALK_STATE *WalkState);
440 AcpiExOpcode_2A_2T_1R (
441 ACPI_WALK_STATE *WalkState);
445 * exoparg3 - ACPI AML execution, 3 operands
448 AcpiExOpcode_3A_0T_0R (
449 ACPI_WALK_STATE *WalkState);
452 AcpiExOpcode_3A_1T_1R (
453 ACPI_WALK_STATE *WalkState);
457 * exoparg6 - ACPI AML execution, 6 operands
460 AcpiExOpcode_6A_0T_1R (
461 ACPI_WALK_STATE *WalkState);
465 * exresolv - Object resolution and get value functions
468 AcpiExResolveToValue (
469 ACPI_OPERAND_OBJECT **StackPtr,
470 ACPI_WALK_STATE *WalkState);
473 AcpiExResolveMultiple (
474 ACPI_WALK_STATE *WalkState,
475 ACPI_OPERAND_OBJECT *Operand,
476 ACPI_OBJECT_TYPE *ReturnType,
477 ACPI_OPERAND_OBJECT **ReturnDesc);
481 * exresnte - resolve namespace node
484 AcpiExResolveNodeToValue (
485 ACPI_NAMESPACE_NODE **StackPtr,
486 ACPI_WALK_STATE *WalkState);
490 * exresop - resolve operand to value
493 AcpiExResolveOperands (
495 ACPI_OPERAND_OBJECT **StackPtr,
496 ACPI_WALK_STATE *WalkState);
500 * exdump - Interpreter debug output routines
504 ACPI_OPERAND_OBJECT *ObjDesc,
509 ACPI_OPERAND_OBJECT **Operands,
510 const char *OpcodeName,
514 AcpiExDumpObjectDescriptor (
515 ACPI_OPERAND_OBJECT *Object,
519 AcpiExDumpNamespaceNode (
520 ACPI_NAMESPACE_NODE *Node,
525 * exnames - AML namestring support
528 AcpiExGetNameString (
529 ACPI_OBJECT_TYPE DataType,
531 char **OutNameString,
532 UINT32 *OutNameLength);
536 * exstore - Object store support
540 ACPI_OPERAND_OBJECT *ValDesc,
541 ACPI_OPERAND_OBJECT *DestDesc,
542 ACPI_WALK_STATE *WalkState);
545 AcpiExStoreObjectToNode (
546 ACPI_OPERAND_OBJECT *SourceDesc,
547 ACPI_NAMESPACE_NODE *Node,
548 ACPI_WALK_STATE *WalkState,
549 UINT8 ImplicitConversion);
551 #define ACPI_IMPLICIT_CONVERSION TRUE
552 #define ACPI_NO_IMPLICIT_CONVERSION FALSE
556 * exstoren - resolve/store object
559 AcpiExResolveObject (
560 ACPI_OPERAND_OBJECT **SourceDescPtr,
561 ACPI_OBJECT_TYPE TargetType,
562 ACPI_WALK_STATE *WalkState);
565 AcpiExStoreObjectToObject (
566 ACPI_OPERAND_OBJECT *SourceDesc,
567 ACPI_OPERAND_OBJECT *DestDesc,
568 ACPI_OPERAND_OBJECT **NewDesc,
569 ACPI_WALK_STATE *WalkState);
573 * exstorob - store object - buffer/string
576 AcpiExStoreBufferToBuffer (
577 ACPI_OPERAND_OBJECT *SourceDesc,
578 ACPI_OPERAND_OBJECT *TargetDesc);
581 AcpiExStoreStringToString (
582 ACPI_OPERAND_OBJECT *SourceDesc,
583 ACPI_OPERAND_OBJECT *TargetDesc);
587 * excopy - object copy
590 AcpiExCopyIntegerToIndexField (
591 ACPI_OPERAND_OBJECT *SourceDesc,
592 ACPI_OPERAND_OBJECT *TargetDesc);
595 AcpiExCopyIntegerToBankField (
596 ACPI_OPERAND_OBJECT *SourceDesc,
597 ACPI_OPERAND_OBJECT *TargetDesc);
600 AcpiExCopyDataToNamedField (
601 ACPI_OPERAND_OBJECT *SourceDesc,
602 ACPI_NAMESPACE_NODE *Node);
605 AcpiExCopyIntegerToBufferField (
606 ACPI_OPERAND_OBJECT *SourceDesc,
607 ACPI_OPERAND_OBJECT *TargetDesc);
611 * exutils - interpreter/scanner utilities
614 AcpiExEnterInterpreter (
618 AcpiExExitInterpreter (
622 AcpiExTruncateFor32bitTable (
623 ACPI_OPERAND_OBJECT *ObjDesc);
626 AcpiExAcquireGlobalLock (
630 AcpiExReleaseGlobalLock (
634 AcpiExEisaIdToString (
636 UINT64 CompressedId);
639 AcpiExIntegerToString (
649 * exregion - default OpRegion handlers
652 AcpiExSystemMemorySpaceHandler (
654 ACPI_PHYSICAL_ADDRESS Address,
657 void *HandlerContext,
658 void *RegionContext);
661 AcpiExSystemIoSpaceHandler (
663 ACPI_PHYSICAL_ADDRESS Address,
666 void *HandlerContext,
667 void *RegionContext);
670 AcpiExPciConfigSpaceHandler (
672 ACPI_PHYSICAL_ADDRESS Address,
675 void *HandlerContext,
676 void *RegionContext);
679 AcpiExCmosSpaceHandler (
681 ACPI_PHYSICAL_ADDRESS Address,
684 void *HandlerContext,
685 void *RegionContext);
688 AcpiExPciBarSpaceHandler (
690 ACPI_PHYSICAL_ADDRESS Address,
693 void *HandlerContext,
694 void *RegionContext);
697 AcpiExEmbeddedControllerSpaceHandler (
699 ACPI_PHYSICAL_ADDRESS Address,
702 void *HandlerContext,
703 void *RegionContext);
706 AcpiExSmBusSpaceHandler (
708 ACPI_PHYSICAL_ADDRESS Address,
711 void *HandlerContext,
712 void *RegionContext);
716 AcpiExDataTableSpaceHandler (
718 ACPI_PHYSICAL_ADDRESS Address,
721 void *HandlerContext,
722 void *RegionContext);
724 #pragma pack(pop) /* Restore original struct packing */
726 #endif /* __INTERP_H__ */