167754Smsmith/****************************************************************************** 267754Smsmith * 367754Smsmith * Module Name: acparser.h - AML Parser subcomponent prototypes and defines 467754Smsmith * 567754Smsmith *****************************************************************************/ 667754Smsmith 7217365Sjkim/* 8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp. 970243Smsmith * All rights reserved. 1067754Smsmith * 11217365Sjkim * Redistribution and use in source and binary forms, with or without 12217365Sjkim * modification, are permitted provided that the following conditions 13217365Sjkim * are met: 14217365Sjkim * 1. Redistributions of source code must retain the above copyright 15217365Sjkim * notice, this list of conditions, and the following disclaimer, 16217365Sjkim * without modification. 17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20217365Sjkim * including a substantially similar Disclaimer requirement for further 21217365Sjkim * binary redistribution. 22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23217365Sjkim * of any contributors may be used to endorse or promote products derived 24217365Sjkim * from this software without specific prior written permission. 2567754Smsmith * 26217365Sjkim * Alternatively, this software may be distributed under the terms of the 27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28217365Sjkim * Software Foundation. 2967754Smsmith * 30217365Sjkim * NO WARRANTY 31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 42217365Sjkim */ 4367754Smsmith 4467754Smsmith#ifndef __ACPARSER_H__ 4567754Smsmith#define __ACPARSER_H__ 4667754Smsmith 4767754Smsmith 4887031Smsmith#define OP_HAS_RETURN_VALUE 1 4967754Smsmith 50167802Sjkim/* Variable number of arguments. This field must be 32 bits */ 5167754Smsmith 5287031Smsmith#define ACPI_VAR_ARGS ACPI_UINT32_MAX 5367754Smsmith 5467754Smsmith 5567754Smsmith#define ACPI_PARSE_DELETE_TREE 0x0001 5667754Smsmith#define ACPI_PARSE_NO_TREE_DELETE 0x0000 5767754Smsmith#define ACPI_PARSE_TREE_MASK 0x0001 5867754Smsmith 5967754Smsmith#define ACPI_PARSE_LOAD_PASS1 0x0010 6067754Smsmith#define ACPI_PARSE_LOAD_PASS2 0x0020 6167754Smsmith#define ACPI_PARSE_EXECUTE 0x0030 6267754Smsmith#define ACPI_PARSE_MODE_MASK 0x0030 6367754Smsmith 64104470Siwasaki#define ACPI_PARSE_DEFERRED_OP 0x0100 65151937Sjkim#define ACPI_PARSE_DISASSEMBLE 0x0200 6667754Smsmith 67197104Sjkim#define ACPI_PARSE_MODULE_LEVEL 0x0400 6887031Smsmith 6967754Smsmith/****************************************************************************** 7067754Smsmith * 7167754Smsmith * Parser interfaces 7267754Smsmith * 7367754Smsmith *****************************************************************************/ 7467754Smsmith 75284460Sjkimextern const UINT8 AcpiGbl_ShortOpIndex[]; 76284460Sjkimextern const UINT8 AcpiGbl_LongOpIndex[]; 7767754Smsmith 78284460Sjkim 79151937Sjkim/* 80151937Sjkim * psxface - Parser external interfaces 81151937Sjkim */ 82151937SjkimACPI_STATUS 83151937SjkimAcpiPsExecuteMethod ( 84167802Sjkim ACPI_EVALUATE_INFO *Info); 8567754Smsmith 86151937Sjkim 87151937Sjkim/* 88151937Sjkim * psargs - Parse AML opcode arguments 89151937Sjkim */ 9067754SmsmithUINT8 * 9167754SmsmithAcpiPsGetNextPackageEnd ( 9267754Smsmith ACPI_PARSE_STATE *ParserState); 9367754Smsmith 94114237Snjlchar * 9567754SmsmithAcpiPsGetNextNamestring ( 9667754Smsmith ACPI_PARSE_STATE *ParserState); 9767754Smsmith 9867754Smsmithvoid 9967754SmsmithAcpiPsGetNextSimpleArg ( 10067754Smsmith ACPI_PARSE_STATE *ParserState, 10187031Smsmith UINT32 ArgType, 10287031Smsmith ACPI_PARSE_OBJECT *Arg); 10367754Smsmith 104102550SiwasakiACPI_STATUS 10567754SmsmithAcpiPsGetNextNamepath ( 106107325Siwasaki ACPI_WALK_STATE *WalkState, 10767754Smsmith ACPI_PARSE_STATE *ParserState, 10867754Smsmith ACPI_PARSE_OBJECT *Arg, 109306536Sjkim BOOLEAN PossibleMethodCall); 11067754Smsmith 111306536Sjkim/* Values for BOOLEAN above */ 112306536Sjkim 113306536Sjkim#define ACPI_NOT_METHOD_CALL FALSE 114306536Sjkim#define ACPI_POSSIBLE_METHOD_CALL TRUE 115306536Sjkim 116102550SiwasakiACPI_STATUS 11767754SmsmithAcpiPsGetNextArg ( 118107325Siwasaki ACPI_WALK_STATE *WalkState, 11967754Smsmith ACPI_PARSE_STATE *ParserState, 12067754Smsmith UINT32 ArgType, 121102550Siwasaki ACPI_PARSE_OBJECT **ReturnArg); 12267754Smsmith 12367754Smsmith 124151937Sjkim/* 125151937Sjkim * psfind 126151937Sjkim */ 12787031SmsmithACPI_PARSE_OBJECT * 12887031SmsmithAcpiPsFindName ( 12987031Smsmith ACPI_PARSE_OBJECT *Scope, 13087031Smsmith UINT32 Name, 13187031Smsmith UINT32 Opcode); 13287031Smsmith 13387031SmsmithACPI_PARSE_OBJECT* 13487031SmsmithAcpiPsGetParent ( 13587031Smsmith ACPI_PARSE_OBJECT *Op); 13687031Smsmith 13787031Smsmith 138151937Sjkim/* 139245582Sjkim * psobject - support for parse object processing 140151937Sjkim */ 141245582SjkimACPI_STATUS 142245582SjkimAcpiPsBuildNamedOp ( 143245582Sjkim ACPI_WALK_STATE *WalkState, 144245582Sjkim UINT8 *AmlOpStart, 145245582Sjkim ACPI_PARSE_OBJECT *UnnamedOp, 146245582Sjkim ACPI_PARSE_OBJECT **Op); 147245582Sjkim 148245582SjkimACPI_STATUS 149245582SjkimAcpiPsCreateOp ( 150245582Sjkim ACPI_WALK_STATE *WalkState, 151245582Sjkim UINT8 *AmlOpStart, 152245582Sjkim ACPI_PARSE_OBJECT **NewOp); 153245582Sjkim 154245582SjkimACPI_STATUS 155245582SjkimAcpiPsCompleteOp ( 156245582Sjkim ACPI_WALK_STATE *WalkState, 157245582Sjkim ACPI_PARSE_OBJECT **Op, 158245582Sjkim ACPI_STATUS Status); 159245582Sjkim 160245582SjkimACPI_STATUS 161245582SjkimAcpiPsCompleteFinalOp ( 162245582Sjkim ACPI_WALK_STATE *WalkState, 163245582Sjkim ACPI_PARSE_OBJECT *Op, 164245582Sjkim ACPI_STATUS Status); 165245582Sjkim 166245582Sjkim 167245582Sjkim/* 168245582Sjkim * psopinfo - AML Opcode information 169245582Sjkim */ 17083174Smsmithconst ACPI_OPCODE_INFO * 17167754SmsmithAcpiPsGetOpcodeInfo ( 17267754Smsmith UINT16 Opcode); 17367754Smsmith 174306536Sjkimconst char * 17567754SmsmithAcpiPsGetOpcodeName ( 17667754Smsmith UINT16 Opcode); 17767754Smsmith 178167802SjkimUINT8 179167802SjkimAcpiPsGetArgumentCount ( 180167802Sjkim UINT32 OpType); 18167754Smsmith 182167802Sjkim 183151937Sjkim/* 184151937Sjkim * psparse - top level parsing routines 185151937Sjkim */ 186151937SjkimACPI_STATUS 187151937SjkimAcpiPsParseAml ( 188151937Sjkim ACPI_WALK_STATE *WalkState); 18967754Smsmith 19087031SmsmithUINT32 19187031SmsmithAcpiPsGetOpcodeSize ( 19287031Smsmith UINT32 Opcode); 19387031Smsmith 194151937SjkimUINT16 195151937SjkimAcpiPsPeekOpcode ( 196151937Sjkim ACPI_PARSE_STATE *state); 197151937Sjkim 198151937SjkimACPI_STATUS 19987031SmsmithAcpiPsCompleteThisOp ( 20087031Smsmith ACPI_WALK_STATE *WalkState, 20187031Smsmith ACPI_PARSE_OBJECT *Op); 20287031Smsmith 20367754SmsmithACPI_STATUS 20487031SmsmithAcpiPsNextParseState ( 20587031Smsmith ACPI_WALK_STATE *WalkState, 20687031Smsmith ACPI_PARSE_OBJECT *Op, 20787031Smsmith ACPI_STATUS CallbackStatus); 20887031Smsmith 20967754Smsmith 210151937Sjkim/* 211151937Sjkim * psloop - main parse loop 212151937Sjkim */ 21367754SmsmithACPI_STATUS 21467754SmsmithAcpiPsParseLoop ( 21567754Smsmith ACPI_WALK_STATE *WalkState); 21667754Smsmith 21767754Smsmith 218151937Sjkim/* 219151937Sjkim * psscope - Scope stack management routines 220151937Sjkim */ 22167754SmsmithACPI_STATUS 22267754SmsmithAcpiPsInitScope ( 22367754Smsmith ACPI_PARSE_STATE *ParserState, 22467754Smsmith ACPI_PARSE_OBJECT *Root); 22567754Smsmith 22667754SmsmithACPI_PARSE_OBJECT * 22767754SmsmithAcpiPsGetParentScope ( 22867754Smsmith ACPI_PARSE_STATE *state); 22967754Smsmith 23067754SmsmithBOOLEAN 23167754SmsmithAcpiPsHasCompletedScope ( 23267754Smsmith ACPI_PARSE_STATE *ParserState); 23367754Smsmith 23467754Smsmithvoid 23567754SmsmithAcpiPsPopScope ( 23667754Smsmith ACPI_PARSE_STATE *ParserState, 23767754Smsmith ACPI_PARSE_OBJECT **Op, 23867754Smsmith UINT32 *ArgList, 23967754Smsmith UINT32 *ArgCount); 24067754Smsmith 24167754SmsmithACPI_STATUS 24267754SmsmithAcpiPsPushScope ( 24367754Smsmith ACPI_PARSE_STATE *ParserState, 24467754Smsmith ACPI_PARSE_OBJECT *Op, 24567754Smsmith UINT32 RemainingArgs, 24667754Smsmith UINT32 ArgCount); 24767754Smsmith 24867754Smsmithvoid 24967754SmsmithAcpiPsCleanupScope ( 25067754Smsmith ACPI_PARSE_STATE *state); 25167754Smsmith 25267754Smsmith 253151937Sjkim/* 254151937Sjkim * pstree - parse tree manipulation routines 255151937Sjkim */ 25667754Smsmithvoid 25767754SmsmithAcpiPsAppendArg( 25867754Smsmith ACPI_PARSE_OBJECT *op, 25967754Smsmith ACPI_PARSE_OBJECT *arg); 26067754Smsmith 26167754SmsmithACPI_PARSE_OBJECT* 26267754SmsmithAcpiPsFind ( 26367754Smsmith ACPI_PARSE_OBJECT *Scope, 264114237Snjl char *Path, 26567754Smsmith UINT16 Opcode, 26667754Smsmith UINT32 Create); 26767754Smsmith 26867754SmsmithACPI_PARSE_OBJECT * 26967754SmsmithAcpiPsGetArg( 27067754Smsmith ACPI_PARSE_OBJECT *op, 27167754Smsmith UINT32 argn); 27267754Smsmith 27367754SmsmithACPI_PARSE_OBJECT * 27467754SmsmithAcpiPsGetDepthNext ( 27567754Smsmith ACPI_PARSE_OBJECT *Origin, 27667754Smsmith ACPI_PARSE_OBJECT *Op); 27767754Smsmith 27867754Smsmith 279151937Sjkim/* 280151937Sjkim * pswalk - parse tree walk routines 281151937Sjkim */ 28267754SmsmithACPI_STATUS 28367754SmsmithAcpiPsWalkParsedAml ( 28467754Smsmith ACPI_PARSE_OBJECT *StartOp, 28567754Smsmith ACPI_PARSE_OBJECT *EndOp, 28667754Smsmith ACPI_OPERAND_OBJECT *MthDesc, 28767754Smsmith ACPI_NAMESPACE_NODE *StartNode, 28867754Smsmith ACPI_OPERAND_OBJECT **Params, 28967754Smsmith ACPI_OPERAND_OBJECT **CallerReturnDesc, 29067754Smsmith ACPI_OWNER_ID OwnerId, 29167754Smsmith ACPI_PARSE_DOWNWARDS DescendingCallback, 29267754Smsmith ACPI_PARSE_UPWARDS AscendingCallback); 29367754Smsmith 29467754SmsmithACPI_STATUS 29567754SmsmithAcpiPsGetNextWalkOp ( 29667754Smsmith ACPI_WALK_STATE *WalkState, 29767754Smsmith ACPI_PARSE_OBJECT *Op, 29867754Smsmith ACPI_PARSE_UPWARDS AscendingCallback); 29967754Smsmith 30087031SmsmithACPI_STATUS 30187031SmsmithAcpiPsDeleteCompletedOp ( 30287031Smsmith ACPI_WALK_STATE *WalkState); 30367754Smsmith 304151937Sjkimvoid 305151937SjkimAcpiPsDeleteParseTree ( 306151937Sjkim ACPI_PARSE_OBJECT *root); 30787031Smsmith 30867754Smsmith 309151937Sjkim/* 310151937Sjkim * psutils - parser utilities 311151937Sjkim */ 312100966SiwasakiACPI_PARSE_OBJECT * 313100966SiwasakiAcpiPsCreateScopeOp ( 314306536Sjkim UINT8 *Aml); 315100966Siwasaki 31667754Smsmithvoid 31767754SmsmithAcpiPsInitOp ( 31867754Smsmith ACPI_PARSE_OBJECT *op, 31967754Smsmith UINT16 opcode); 32067754Smsmith 32167754SmsmithACPI_PARSE_OBJECT * 32267754SmsmithAcpiPsAllocOp ( 323306536Sjkim UINT16 Opcode, 324306536Sjkim UINT8 *Aml); 32567754Smsmith 32667754Smsmithvoid 32767754SmsmithAcpiPsFreeOp ( 32867754Smsmith ACPI_PARSE_OBJECT *Op); 32967754Smsmith 33067754SmsmithBOOLEAN 33167754SmsmithAcpiPsIsLeadingChar ( 33267754Smsmith UINT32 c); 33367754Smsmith 33467754SmsmithUINT32 33567754SmsmithAcpiPsGetName( 33667754Smsmith ACPI_PARSE_OBJECT *op); 33767754Smsmith 33867754Smsmithvoid 33967754SmsmithAcpiPsSetName( 34067754Smsmith ACPI_PARSE_OBJECT *op, 34167754Smsmith UINT32 name); 34267754Smsmith 34367754Smsmith 344151937Sjkim/* 345151937Sjkim * psdump - display parser tree 346151937Sjkim */ 34767754SmsmithUINT32 34867754SmsmithAcpiPsSprintPath ( 349114237Snjl char *BufferStart, 35067754Smsmith UINT32 BufferSize, 35167754Smsmith ACPI_PARSE_OBJECT *Op); 35267754Smsmith 35367754SmsmithUINT32 35467754SmsmithAcpiPsSprintOp ( 355114237Snjl char *BufferStart, 35667754Smsmith UINT32 BufferSize, 35767754Smsmith ACPI_PARSE_OBJECT *Op); 35867754Smsmith 35967754Smsmithvoid 36067754SmsmithAcpiPsShow ( 36167754Smsmith ACPI_PARSE_OBJECT *op); 36267754Smsmith 36367754Smsmith 36467754Smsmith#endif /* __ACPARSER_H__ */ 365