128c506b8Sjruoho /****************************************************************************** 228c506b8Sjruoho * 328c506b8Sjruoho * Module Name: acparser.h - AML Parser subcomponent prototypes and defines 428c506b8Sjruoho * 528c506b8Sjruoho *****************************************************************************/ 628c506b8Sjruoho 7124f4c82Sjruoho /* 8*046a2985Schristos * Copyright (C) 2000 - 2023, Intel Corp. 928c506b8Sjruoho * All rights reserved. 1028c506b8Sjruoho * 11124f4c82Sjruoho * Redistribution and use in source and binary forms, with or without 12124f4c82Sjruoho * modification, are permitted provided that the following conditions 13124f4c82Sjruoho * are met: 14124f4c82Sjruoho * 1. Redistributions of source code must retain the above copyright 15124f4c82Sjruoho * notice, this list of conditions, and the following disclaimer, 16124f4c82Sjruoho * without modification. 17124f4c82Sjruoho * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18124f4c82Sjruoho * substantially similar to the "NO WARRANTY" disclaimer below 19124f4c82Sjruoho * ("Disclaimer") and any redistribution must be conditioned upon 20124f4c82Sjruoho * including a substantially similar Disclaimer requirement for further 21124f4c82Sjruoho * binary redistribution. 22124f4c82Sjruoho * 3. Neither the names of the above-listed copyright holders nor the names 23124f4c82Sjruoho * of any contributors may be used to endorse or promote products derived 24124f4c82Sjruoho * from this software without specific prior written permission. 2528c506b8Sjruoho * 26124f4c82Sjruoho * Alternatively, this software may be distributed under the terms of the 27124f4c82Sjruoho * GNU General Public License ("GPL") version 2 as published by the Free 28124f4c82Sjruoho * Software Foundation. 2928c506b8Sjruoho * 30124f4c82Sjruoho * NO WARRANTY 31124f4c82Sjruoho * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32124f4c82Sjruoho * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3346a330b4Schristos * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 34124f4c82Sjruoho * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35124f4c82Sjruoho * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36124f4c82Sjruoho * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37124f4c82Sjruoho * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38124f4c82Sjruoho * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39124f4c82Sjruoho * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40124f4c82Sjruoho * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41124f4c82Sjruoho * POSSIBILITY OF SUCH DAMAGES. 42124f4c82Sjruoho */ 4328c506b8Sjruoho 4428c506b8Sjruoho #ifndef __ACPARSER_H__ 4528c506b8Sjruoho #define __ACPARSER_H__ 4628c506b8Sjruoho 4728c506b8Sjruoho 4828c506b8Sjruoho #define OP_HAS_RETURN_VALUE 1 4928c506b8Sjruoho 5028c506b8Sjruoho /* Variable number of arguments. This field must be 32 bits */ 5128c506b8Sjruoho 5228c506b8Sjruoho #define ACPI_VAR_ARGS ACPI_UINT32_MAX 5328c506b8Sjruoho 5428c506b8Sjruoho 5528c506b8Sjruoho #define ACPI_PARSE_DELETE_TREE 0x0001 5628c506b8Sjruoho #define ACPI_PARSE_NO_TREE_DELETE 0x0000 5728c506b8Sjruoho #define ACPI_PARSE_TREE_MASK 0x0001 5828c506b8Sjruoho 5928c506b8Sjruoho #define ACPI_PARSE_LOAD_PASS1 0x0010 6028c506b8Sjruoho #define ACPI_PARSE_LOAD_PASS2 0x0020 6128c506b8Sjruoho #define ACPI_PARSE_EXECUTE 0x0030 6228c506b8Sjruoho #define ACPI_PARSE_MODE_MASK 0x0030 6328c506b8Sjruoho 6428c506b8Sjruoho #define ACPI_PARSE_DEFERRED_OP 0x0100 6528c506b8Sjruoho #define ACPI_PARSE_DISASSEMBLE 0x0200 6628c506b8Sjruoho 6728c506b8Sjruoho #define ACPI_PARSE_MODULE_LEVEL 0x0400 6828c506b8Sjruoho 6928c506b8Sjruoho /****************************************************************************** 7028c506b8Sjruoho * 7128c506b8Sjruoho * Parser interfaces 7228c506b8Sjruoho * 7328c506b8Sjruoho *****************************************************************************/ 7428c506b8Sjruoho 75c72da027Schristos extern const UINT8 AcpiGbl_ShortOpIndex[]; 76c72da027Schristos extern const UINT8 AcpiGbl_LongOpIndex[]; 77c72da027Schristos 7828c506b8Sjruoho 7928c506b8Sjruoho /* 8028c506b8Sjruoho * psxface - Parser external interfaces 8128c506b8Sjruoho */ 8228c506b8Sjruoho ACPI_STATUS 8328c506b8Sjruoho AcpiPsExecuteMethod ( 8428c506b8Sjruoho ACPI_EVALUATE_INFO *Info); 8528c506b8Sjruoho 86d0e1da26Schristos ACPI_STATUS 87d0e1da26Schristos AcpiPsExecuteTable ( 88d0e1da26Schristos ACPI_EVALUATE_INFO *Info); 89d0e1da26Schristos 9028c506b8Sjruoho 9128c506b8Sjruoho /* 9228c506b8Sjruoho * psargs - Parse AML opcode arguments 9328c506b8Sjruoho */ 9428c506b8Sjruoho UINT8 * 9528c506b8Sjruoho AcpiPsGetNextPackageEnd ( 9628c506b8Sjruoho ACPI_PARSE_STATE *ParserState); 9728c506b8Sjruoho 9828c506b8Sjruoho char * 9928c506b8Sjruoho AcpiPsGetNextNamestring ( 10028c506b8Sjruoho ACPI_PARSE_STATE *ParserState); 10128c506b8Sjruoho 10228c506b8Sjruoho void 10328c506b8Sjruoho AcpiPsGetNextSimpleArg ( 10428c506b8Sjruoho ACPI_PARSE_STATE *ParserState, 10528c506b8Sjruoho UINT32 ArgType, 10628c506b8Sjruoho ACPI_PARSE_OBJECT *Arg); 10728c506b8Sjruoho 10828c506b8Sjruoho ACPI_STATUS 10928c506b8Sjruoho AcpiPsGetNextNamepath ( 11028c506b8Sjruoho ACPI_WALK_STATE *WalkState, 11128c506b8Sjruoho ACPI_PARSE_STATE *ParserState, 11228c506b8Sjruoho ACPI_PARSE_OBJECT *Arg, 11371e38f1dSchristos BOOLEAN PossibleMethodCall); 11471e38f1dSchristos 11571e38f1dSchristos /* Values for BOOLEAN above */ 11671e38f1dSchristos 11771e38f1dSchristos #define ACPI_NOT_METHOD_CALL FALSE 11871e38f1dSchristos #define ACPI_POSSIBLE_METHOD_CALL TRUE 11928c506b8Sjruoho 12028c506b8Sjruoho ACPI_STATUS 12128c506b8Sjruoho AcpiPsGetNextArg ( 12228c506b8Sjruoho ACPI_WALK_STATE *WalkState, 12328c506b8Sjruoho ACPI_PARSE_STATE *ParserState, 12428c506b8Sjruoho UINT32 ArgType, 12528c506b8Sjruoho ACPI_PARSE_OBJECT **ReturnArg); 12628c506b8Sjruoho 12728c506b8Sjruoho 12828c506b8Sjruoho /* 12928c506b8Sjruoho * psfind 13028c506b8Sjruoho */ 13128c506b8Sjruoho ACPI_PARSE_OBJECT * 13228c506b8Sjruoho AcpiPsFindName ( 13328c506b8Sjruoho ACPI_PARSE_OBJECT *Scope, 13428c506b8Sjruoho UINT32 Name, 13528c506b8Sjruoho UINT32 Opcode); 13628c506b8Sjruoho 13728c506b8Sjruoho ACPI_PARSE_OBJECT* 13828c506b8Sjruoho AcpiPsGetParent ( 13928c506b8Sjruoho ACPI_PARSE_OBJECT *Op); 14028c506b8Sjruoho 14128c506b8Sjruoho 14228c506b8Sjruoho /* 143ff4a156dSchristos * psobject - support for parse object processing 144ff4a156dSchristos */ 145ff4a156dSchristos ACPI_STATUS 146ff4a156dSchristos AcpiPsBuildNamedOp ( 147ff4a156dSchristos ACPI_WALK_STATE *WalkState, 148ff4a156dSchristos UINT8 *AmlOpStart, 149ff4a156dSchristos ACPI_PARSE_OBJECT *UnnamedOp, 150ff4a156dSchristos ACPI_PARSE_OBJECT **Op); 151ff4a156dSchristos 152ff4a156dSchristos ACPI_STATUS 153ff4a156dSchristos AcpiPsCreateOp ( 154ff4a156dSchristos ACPI_WALK_STATE *WalkState, 155ff4a156dSchristos UINT8 *AmlOpStart, 156ff4a156dSchristos ACPI_PARSE_OBJECT **NewOp); 157ff4a156dSchristos 158ff4a156dSchristos ACPI_STATUS 159ff4a156dSchristos AcpiPsCompleteOp ( 160ff4a156dSchristos ACPI_WALK_STATE *WalkState, 161ff4a156dSchristos ACPI_PARSE_OBJECT **Op, 162ff4a156dSchristos ACPI_STATUS Status); 163ff4a156dSchristos 164ff4a156dSchristos ACPI_STATUS 165ff4a156dSchristos AcpiPsCompleteFinalOp ( 166ff4a156dSchristos ACPI_WALK_STATE *WalkState, 167ff4a156dSchristos ACPI_PARSE_OBJECT *Op, 168ff4a156dSchristos ACPI_STATUS Status); 169ff4a156dSchristos 170ff4a156dSchristos 171ff4a156dSchristos /* 172ff4a156dSchristos * psopinfo - AML Opcode information 17328c506b8Sjruoho */ 17428c506b8Sjruoho const ACPI_OPCODE_INFO * 17528c506b8Sjruoho AcpiPsGetOpcodeInfo ( 17628c506b8Sjruoho UINT16 Opcode); 17728c506b8Sjruoho 178cfbb7280Schristos const char * 17928c506b8Sjruoho AcpiPsGetOpcodeName ( 18028c506b8Sjruoho UINT16 Opcode); 18128c506b8Sjruoho 18228c506b8Sjruoho UINT8 18328c506b8Sjruoho AcpiPsGetArgumentCount ( 18428c506b8Sjruoho UINT32 OpType); 18528c506b8Sjruoho 18628c506b8Sjruoho 18728c506b8Sjruoho /* 18828c506b8Sjruoho * psparse - top level parsing routines 18928c506b8Sjruoho */ 19028c506b8Sjruoho ACPI_STATUS 19128c506b8Sjruoho AcpiPsParseAml ( 19228c506b8Sjruoho ACPI_WALK_STATE *WalkState); 19328c506b8Sjruoho 19428c506b8Sjruoho UINT32 19528c506b8Sjruoho AcpiPsGetOpcodeSize ( 19628c506b8Sjruoho UINT32 Opcode); 19728c506b8Sjruoho 19828c506b8Sjruoho UINT16 19928c506b8Sjruoho AcpiPsPeekOpcode ( 20028c506b8Sjruoho ACPI_PARSE_STATE *state); 20128c506b8Sjruoho 20228c506b8Sjruoho ACPI_STATUS 20328c506b8Sjruoho AcpiPsCompleteThisOp ( 20428c506b8Sjruoho ACPI_WALK_STATE *WalkState, 20528c506b8Sjruoho ACPI_PARSE_OBJECT *Op); 20628c506b8Sjruoho 20728c506b8Sjruoho ACPI_STATUS 20828c506b8Sjruoho AcpiPsNextParseState ( 20928c506b8Sjruoho ACPI_WALK_STATE *WalkState, 21028c506b8Sjruoho ACPI_PARSE_OBJECT *Op, 21128c506b8Sjruoho ACPI_STATUS CallbackStatus); 21228c506b8Sjruoho 21328c506b8Sjruoho 21428c506b8Sjruoho /* 21528c506b8Sjruoho * psloop - main parse loop 21628c506b8Sjruoho */ 21728c506b8Sjruoho ACPI_STATUS 21828c506b8Sjruoho AcpiPsParseLoop ( 21928c506b8Sjruoho ACPI_WALK_STATE *WalkState); 22028c506b8Sjruoho 22128c506b8Sjruoho 22228c506b8Sjruoho /* 22328c506b8Sjruoho * psscope - Scope stack management routines 22428c506b8Sjruoho */ 22528c506b8Sjruoho ACPI_STATUS 22628c506b8Sjruoho AcpiPsInitScope ( 22728c506b8Sjruoho ACPI_PARSE_STATE *ParserState, 22828c506b8Sjruoho ACPI_PARSE_OBJECT *Root); 22928c506b8Sjruoho 23028c506b8Sjruoho ACPI_PARSE_OBJECT * 23128c506b8Sjruoho AcpiPsGetParentScope ( 23228c506b8Sjruoho ACPI_PARSE_STATE *state); 23328c506b8Sjruoho 23428c506b8Sjruoho BOOLEAN 23528c506b8Sjruoho AcpiPsHasCompletedScope ( 23628c506b8Sjruoho ACPI_PARSE_STATE *ParserState); 23728c506b8Sjruoho 23828c506b8Sjruoho void 23928c506b8Sjruoho AcpiPsPopScope ( 24028c506b8Sjruoho ACPI_PARSE_STATE *ParserState, 24128c506b8Sjruoho ACPI_PARSE_OBJECT **Op, 24228c506b8Sjruoho UINT32 *ArgList, 24328c506b8Sjruoho UINT32 *ArgCount); 24428c506b8Sjruoho 24528c506b8Sjruoho ACPI_STATUS 24628c506b8Sjruoho AcpiPsPushScope ( 24728c506b8Sjruoho ACPI_PARSE_STATE *ParserState, 24828c506b8Sjruoho ACPI_PARSE_OBJECT *Op, 24928c506b8Sjruoho UINT32 RemainingArgs, 25028c506b8Sjruoho UINT32 ArgCount); 25128c506b8Sjruoho 25228c506b8Sjruoho void 25328c506b8Sjruoho AcpiPsCleanupScope ( 25428c506b8Sjruoho ACPI_PARSE_STATE *state); 25528c506b8Sjruoho 25628c506b8Sjruoho 25728c506b8Sjruoho /* 25828c506b8Sjruoho * pstree - parse tree manipulation routines 25928c506b8Sjruoho */ 26028c506b8Sjruoho void 26128c506b8Sjruoho AcpiPsAppendArg( 26228c506b8Sjruoho ACPI_PARSE_OBJECT *op, 26328c506b8Sjruoho ACPI_PARSE_OBJECT *arg); 26428c506b8Sjruoho 26528c506b8Sjruoho ACPI_PARSE_OBJECT* 26628c506b8Sjruoho AcpiPsFind ( 26728c506b8Sjruoho ACPI_PARSE_OBJECT *Scope, 26828c506b8Sjruoho char *Path, 26928c506b8Sjruoho UINT16 Opcode, 27028c506b8Sjruoho UINT32 Create); 27128c506b8Sjruoho 27228c506b8Sjruoho ACPI_PARSE_OBJECT * 27328c506b8Sjruoho AcpiPsGetArg( 27428c506b8Sjruoho ACPI_PARSE_OBJECT *op, 27528c506b8Sjruoho UINT32 argn); 27628c506b8Sjruoho 27728c506b8Sjruoho ACPI_PARSE_OBJECT * 27828c506b8Sjruoho AcpiPsGetDepthNext ( 27928c506b8Sjruoho ACPI_PARSE_OBJECT *Origin, 28028c506b8Sjruoho ACPI_PARSE_OBJECT *Op); 28128c506b8Sjruoho 28228c506b8Sjruoho 28328c506b8Sjruoho /* 28428c506b8Sjruoho * pswalk - parse tree walk routines 28528c506b8Sjruoho */ 28628c506b8Sjruoho ACPI_STATUS 28728c506b8Sjruoho AcpiPsWalkParsedAml ( 28828c506b8Sjruoho ACPI_PARSE_OBJECT *StartOp, 28928c506b8Sjruoho ACPI_PARSE_OBJECT *EndOp, 29028c506b8Sjruoho ACPI_OPERAND_OBJECT *MthDesc, 29128c506b8Sjruoho ACPI_NAMESPACE_NODE *StartNode, 29228c506b8Sjruoho ACPI_OPERAND_OBJECT **Params, 29328c506b8Sjruoho ACPI_OPERAND_OBJECT **CallerReturnDesc, 29428c506b8Sjruoho ACPI_OWNER_ID OwnerId, 29528c506b8Sjruoho ACPI_PARSE_DOWNWARDS DescendingCallback, 29628c506b8Sjruoho ACPI_PARSE_UPWARDS AscendingCallback); 29728c506b8Sjruoho 29828c506b8Sjruoho ACPI_STATUS 29928c506b8Sjruoho AcpiPsGetNextWalkOp ( 30028c506b8Sjruoho ACPI_WALK_STATE *WalkState, 30128c506b8Sjruoho ACPI_PARSE_OBJECT *Op, 30228c506b8Sjruoho ACPI_PARSE_UPWARDS AscendingCallback); 30328c506b8Sjruoho 30428c506b8Sjruoho ACPI_STATUS 30528c506b8Sjruoho AcpiPsDeleteCompletedOp ( 30628c506b8Sjruoho ACPI_WALK_STATE *WalkState); 30728c506b8Sjruoho 30828c506b8Sjruoho void 30928c506b8Sjruoho AcpiPsDeleteParseTree ( 31028c506b8Sjruoho ACPI_PARSE_OBJECT *root); 31128c506b8Sjruoho 31228c506b8Sjruoho 31328c506b8Sjruoho /* 31428c506b8Sjruoho * psutils - parser utilities 31528c506b8Sjruoho */ 31628c506b8Sjruoho ACPI_PARSE_OBJECT * 31728c506b8Sjruoho AcpiPsCreateScopeOp ( 318c72da027Schristos UINT8 *Aml); 31928c506b8Sjruoho 32028c506b8Sjruoho void 32128c506b8Sjruoho AcpiPsInitOp ( 32228c506b8Sjruoho ACPI_PARSE_OBJECT *op, 32328c506b8Sjruoho UINT16 opcode); 32428c506b8Sjruoho 32528c506b8Sjruoho ACPI_PARSE_OBJECT * 32628c506b8Sjruoho AcpiPsAllocOp ( 327c72da027Schristos UINT16 Opcode, 328c72da027Schristos UINT8 *Aml); 32928c506b8Sjruoho 33028c506b8Sjruoho void 33128c506b8Sjruoho AcpiPsFreeOp ( 33228c506b8Sjruoho ACPI_PARSE_OBJECT *Op); 33328c506b8Sjruoho 33428c506b8Sjruoho BOOLEAN 33528c506b8Sjruoho AcpiPsIsLeadingChar ( 33628c506b8Sjruoho UINT32 c); 33728c506b8Sjruoho 33828c506b8Sjruoho UINT32 33928c506b8Sjruoho AcpiPsGetName( 34028c506b8Sjruoho ACPI_PARSE_OBJECT *op); 34128c506b8Sjruoho 34228c506b8Sjruoho void 34328c506b8Sjruoho AcpiPsSetName( 34428c506b8Sjruoho ACPI_PARSE_OBJECT *op, 34528c506b8Sjruoho UINT32 name); 34628c506b8Sjruoho 34728c506b8Sjruoho 34828c506b8Sjruoho /* 34928c506b8Sjruoho * psdump - display parser tree 35028c506b8Sjruoho */ 35128c506b8Sjruoho UINT32 35228c506b8Sjruoho AcpiPsSprintPath ( 35328c506b8Sjruoho char *BufferStart, 35428c506b8Sjruoho UINT32 BufferSize, 35528c506b8Sjruoho ACPI_PARSE_OBJECT *Op); 35628c506b8Sjruoho 35728c506b8Sjruoho UINT32 35828c506b8Sjruoho AcpiPsSprintOp ( 35928c506b8Sjruoho char *BufferStart, 36028c506b8Sjruoho UINT32 BufferSize, 36128c506b8Sjruoho ACPI_PARSE_OBJECT *Op); 36228c506b8Sjruoho 36328c506b8Sjruoho void 36428c506b8Sjruoho AcpiPsShow ( 36528c506b8Sjruoho ACPI_PARSE_OBJECT *op); 36628c506b8Sjruoho 36728c506b8Sjruoho 36828c506b8Sjruoho #endif /* __ACPARSER_H__ */ 369