acparser.h revision 193267
1132734Skan/****************************************************************************** 272566Sobrien * 3169699Skan * Module Name: acparser.h - AML Parser subcomponent prototypes and defines 4169699Skan * 518334Speter *****************************************************************************/ 690282Sobrien 718334Speter/****************************************************************************** 890282Sobrien * 990282Sobrien * 1. Copyright Notice 1090282Sobrien * 1190282Sobrien * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. 1218334Speter * All rights reserved. 1390282Sobrien * 1490282Sobrien * 2. License 1590282Sobrien * 1690282Sobrien * 2.1. This is your license from Intel Corp. under its intellectual property 1718334Speter * rights. You may have additional license terms from the party that provided 1818334Speter * you this software, covering your right to use that party's intellectual 1990282Sobrien * property rights. 20169699Skan * 21169699Skan * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 2218334Speter * copy of the source code appearing in this file ("Covered Code") an 2352558Sobrien * irrevocable, perpetual, worldwide license under Intel's copyrights in the 2452558Sobrien * base code distributed originally by Intel ("Original Intel Code") to copy, 2518334Speter * make derivatives, distribute, use and display any portion of the Covered 2618334Speter * Code in any form, with the right to sublicense such rights; and 2718334Speter * 2818334Speter * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 2918334Speter * license (with the right to sublicense), under only those claims of Intel 3018334Speter * patents that are infringed by the Original Intel Code, to make, use, sell, 3150615Sobrien * offer to sell, and import the Covered Code and derivative works thereof 3250615Sobrien * solely to the minimum extent necessary to exercise the above copyright 3350615Sobrien * license, and in no event shall the patent license extend to any additions 34132734Skan * to or modifications of the Original Intel Code. No other license or right 35132734Skan * is granted directly or by implication, estoppel or otherwise; 3618334Speter * 3718334Speter * The above copyright and patent license is granted only if the following 3850615Sobrien * conditions are met: 3950615Sobrien * 4018334Speter * 3. Conditions 4150615Sobrien * 4250615Sobrien * 3.1. Redistribution of Source with Rights to Further Distribute Source. 4350615Sobrien * Redistribution of source code of any substantial portion of the Covered 4418334Speter * Code or modification with rights to further distribute source must include 4518334Speter * the above Copyright Notice, the above License, this list of Conditions, 46169699Skan * and the following Disclaimer and Export Compliance provision. In addition, 4718334Speter * Licensee must cause all Covered Code to which Licensee contributes to 4818334Speter * contain a file documenting the changes Licensee made to create that Covered 49169699Skan * Code and the date of any change. Licensee must include in that file the 5018334Speter * documentation of any changes made by any predecessor Licensee. Licensee 5190282Sobrien * must include a prominent statement that the modification is derived, 5218334Speter * directly or indirectly, from Original Intel Code. 5318334Speter * 5450615Sobrien * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 5590282Sobrien * Redistribution of source code of any substantial portion of the Covered 5690282Sobrien * Code or modification without rights to further distribute source must 5750615Sobrien * include the following Disclaimer and Export Compliance provision in the 5818334Speter * documentation and/or other materials provided with distribution. In 5950615Sobrien * addition, Licensee may not authorize further sublicense of source of any 6090282Sobrien * portion of the Covered Code, and must include terms to the effect that the 6150615Sobrien * license from Licensee to its licensee is limited to the intellectual 6252558Sobrien * property embodied in the software Licensee provides to its licensee, and 6352558Sobrien * not to intellectual property embodied in modifications its licensee may 6452558Sobrien * make. 6590282Sobrien * 6690282Sobrien * 3.3. Redistribution of Executable. Redistribution in executable form of any 6790282Sobrien * substantial portion of the Covered Code or modification must reproduce the 6890282Sobrien * above Copyright Notice, and the following Disclaimer and Export Compliance 6990282Sobrien * provision in the documentation and/or other materials provided with the 7090282Sobrien * distribution. 7190282Sobrien * 7290282Sobrien * 3.4. Intel retains all right, title, and interest in and to the Original 7390282Sobrien * Intel Code. 74117414Skan * 7590282Sobrien * 3.5. Neither the name Intel nor any other trademark owned or controlled by 7690282Sobrien * Intel shall be used in advertising or otherwise to promote the sale, use or 7790282Sobrien * other dealings in products derived from or relating to the Covered Code 78117414Skan * without prior written authorization from Intel. 79132734Skan * 80132734Skan * 4. Disclaimer and Export Compliance 81132734Skan * 82132734Skan * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 83132734Skan * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 84132734Skan * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 85132734Skan * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 86169699Skan * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 8718334Speter * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 8850615Sobrien * PARTICULAR PURPOSE. 8950615Sobrien * 9050615Sobrien * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 9150615Sobrien * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 9250615Sobrien * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 9350615Sobrien * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 9450615Sobrien * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 9550615Sobrien * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 9650615Sobrien * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 9750615Sobrien * LIMITED REMEDY. 9850615Sobrien * 9950615Sobrien * 4.3. Licensee shall not export, either directly or indirectly, any of this 10018334Speter * software or system incorporating such software without first obtaining any 10190282Sobrien * required license or other approval from the U. S. Department of Commerce or 10290282Sobrien * any other agency or department of the United States Government. In the 10318334Speter * event Licensee exports any such software from the United States or 104132734Skan * re-exports any such software from a foreign destination, Licensee shall 105132734Skan * ensure that the distribution and export/re-export of the software is in 106132734Skan * compliance with all laws, regulations, orders, or other restrictions of the 107132734Skan * U.S. Export Administration Regulations. Licensee agrees that neither it nor 108132734Skan * any of its subsidiaries will export/re-export any technical data, process, 109132734Skan * software, or service, directly or indirectly, to any country for which the 110132734Skan * United States government or any agency thereof requires an export license, 111132734Skan * other governmental approval, or letter of assurance, without first obtaining 11218334Speter * such license, approval or letter. 113132734Skan * 114132734Skan *****************************************************************************/ 115132734Skan 11650615Sobrien 117132734Skan#ifndef __ACPARSER_H__ 118132734Skan#define __ACPARSER_H__ 119132734Skan 120132734Skan 121132734Skan#define OP_HAS_RETURN_VALUE 1 12218334Speter 123117414Skan/* Variable number of arguments. This field must be 32 bits */ 124117414Skan 125117414Skan#define ACPI_VAR_ARGS ACPI_UINT32_MAX 126132734Skan 127132734Skan 128132734Skan#define ACPI_PARSE_DELETE_TREE 0x0001 12950615Sobrien#define ACPI_PARSE_NO_TREE_DELETE 0x0000 13050615Sobrien#define ACPI_PARSE_TREE_MASK 0x0001 13118334Speter 13218334Speter#define ACPI_PARSE_LOAD_PASS1 0x0010 13318334Speter#define ACPI_PARSE_LOAD_PASS2 0x0020 13490282Sobrien#define ACPI_PARSE_EXECUTE 0x0030 13518334Speter#define ACPI_PARSE_MODE_MASK 0x0030 136132734Skan 137132734Skan#define ACPI_PARSE_DEFERRED_OP 0x0100 13818334Speter#define ACPI_PARSE_DISASSEMBLE 0x0200 13918334Speter 14018334Speter 14118334Speter/****************************************************************************** 14218334Speter * 14390282Sobrien * Parser interfaces 14418334Speter * 145169699Skan *****************************************************************************/ 146169699Skan 147169699Skan 148169699Skan/* 149169699Skan * psxface - Parser external interfaces 150169699Skan */ 151169699SkanACPI_STATUS 152169699SkanAcpiPsExecuteMethod ( 153132734Skan ACPI_EVALUATE_INFO *Info); 15418334Speter 155132734Skan 15618334Speter/* 157169699Skan * psargs - Parse AML opcode arguments 158169699Skan */ 15952558SobrienUINT8 * 16052558SobrienAcpiPsGetNextPackageEnd ( 16152558Sobrien ACPI_PARSE_STATE *ParserState); 16218334Speter 16318334Speterchar * 16418334SpeterAcpiPsGetNextNamestring ( 16518334Speter ACPI_PARSE_STATE *ParserState); 16618334Speter 16718334Spetervoid 16818334SpeterAcpiPsGetNextSimpleArg ( 169169699Skan ACPI_PARSE_STATE *ParserState, 170169699Skan UINT32 ArgType, 171169699Skan ACPI_PARSE_OBJECT *Arg); 172169699Skan 173169699SkanACPI_STATUS 174169699SkanAcpiPsGetNextNamepath ( 175169699Skan ACPI_WALK_STATE *WalkState, 176169699Skan ACPI_PARSE_STATE *ParserState, 177169699Skan ACPI_PARSE_OBJECT *Arg, 178169699Skan BOOLEAN MethodCall); 17918334Speter 18018334SpeterACPI_STATUS 18152558SobrienAcpiPsGetNextArg ( 18218334Speter ACPI_WALK_STATE *WalkState, 183117414Skan ACPI_PARSE_STATE *ParserState, 184117414Skan UINT32 ArgType, 185117414Skan ACPI_PARSE_OBJECT **ReturnArg); 186117414Skan 18718334Speter 18818334Speter/* 18918334Speter * psfind 19018334Speter */ 19118334SpeterACPI_PARSE_OBJECT * 19218334SpeterAcpiPsFindName ( 193117414Skan ACPI_PARSE_OBJECT *Scope, 194117414Skan UINT32 Name, 195117414Skan UINT32 Opcode); 196117414Skan 197117414SkanACPI_PARSE_OBJECT* 19890282SobrienAcpiPsGetParent ( 19918334Speter ACPI_PARSE_OBJECT *Op); 200132734Skan 20190282Sobrien 202169699Skan/* 20390282Sobrien * psopcode - AML Opcode information 204169699Skan */ 20590282Sobrienconst ACPI_OPCODE_INFO * 20690282SobrienAcpiPsGetOpcodeInfo ( 20790282Sobrien UINT16 Opcode); 20890282Sobrien 20990282Sobrienchar * 21052558SobrienAcpiPsGetOpcodeName ( 21118334Speter UINT16 Opcode); 21218334Speter 21318334SpeterUINT8 214132734SkanAcpiPsGetArgumentCount ( 21518334Speter UINT32 OpType); 21618334Speter 21718334Speter 21818334Speter/* 21918334Speter * psparse - top level parsing routines 22018334Speter */ 22118334SpeterACPI_STATUS 22218334SpeterAcpiPsParseAml ( 22318334Speter ACPI_WALK_STATE *WalkState); 22418334Speter 22550615SobrienUINT32 226117414SkanAcpiPsGetOpcodeSize ( 227117414Skan UINT32 Opcode); 22850615Sobrien 22950615SobrienUINT16 23050615SobrienAcpiPsPeekOpcode ( 23150615Sobrien ACPI_PARSE_STATE *state); 23290282Sobrien 23390282SobrienACPI_STATUS 23490282SobrienAcpiPsCompleteThisOp ( 23518334Speter ACPI_WALK_STATE *WalkState, 236169699Skan ACPI_PARSE_OBJECT *Op); 23790282Sobrien 238169699SkanACPI_STATUS 23990282SobrienAcpiPsNextParseState ( 24018334Speter ACPI_WALK_STATE *WalkState, 24118334Speter ACPI_PARSE_OBJECT *Op, 24218334Speter ACPI_STATUS CallbackStatus); 24318334Speter 24418334Speter 245132734Skan/* 24690282Sobrien * psloop - main parse loop 24790282Sobrien */ 24890282SobrienACPI_STATUS 249132734SkanAcpiPsParseLoop ( 250132734Skan ACPI_WALK_STATE *WalkState); 251132734Skan 252132734Skan 253132734Skan/* 254132734Skan * psscope - Scope stack management routines 255132734Skan */ 256132734SkanACPI_STATUS 25718334SpeterAcpiPsInitScope ( 25818334Speter ACPI_PARSE_STATE *ParserState, 25918334Speter ACPI_PARSE_OBJECT *Root); 26018334Speter 26118334SpeterACPI_PARSE_OBJECT * 26218334SpeterAcpiPsGetParentScope ( 263169699Skan ACPI_PARSE_STATE *state); 264169699Skan 26518334SpeterBOOLEAN 26618334SpeterAcpiPsHasCompletedScope ( 26718334Speter ACPI_PARSE_STATE *ParserState); 26818334Speter 26918334Spetervoid 27018334SpeterAcpiPsPopScope ( 27118334Speter ACPI_PARSE_STATE *ParserState, 27218334Speter ACPI_PARSE_OBJECT **Op, 27318334Speter UINT32 *ArgList, 27418334Speter UINT32 *ArgCount); 27518334Speter 27618334SpeterACPI_STATUS 27718334SpeterAcpiPsPushScope ( 27818334Speter ACPI_PARSE_STATE *ParserState, 27918334Speter ACPI_PARSE_OBJECT *Op, 28018334Speter UINT32 RemainingArgs, 28152558Sobrien UINT32 ArgCount); 28252558Sobrien 283169699Skanvoid 28452558SobrienAcpiPsCleanupScope ( 285169699Skan ACPI_PARSE_STATE *state); 28652558Sobrien 28796289Sobrien 28896289Sobrien/* 28996289Sobrien * pstree - parse tree manipulation routines 29096289Sobrien */ 29196289Sobrienvoid 29218334SpeterAcpiPsAppendArg( 29318334Speter ACPI_PARSE_OBJECT *op, 29418334Speter ACPI_PARSE_OBJECT *arg); 29518334Speter 29618334SpeterACPI_PARSE_OBJECT* 29718334SpeterAcpiPsFind ( 298132734Skan ACPI_PARSE_OBJECT *Scope, 29918334Speter char *Path, 300132734Skan UINT16 Opcode, 301132734Skan UINT32 Create); 302132734Skan 303132734SkanACPI_PARSE_OBJECT * 304132734SkanAcpiPsGetArg( 305169699Skan ACPI_PARSE_OBJECT *op, 306169699Skan UINT32 argn); 307169699Skan 308169699SkanACPI_PARSE_OBJECT * 309169699SkanAcpiPsGetDepthNext ( 310169699Skan ACPI_PARSE_OBJECT *Origin, 311169699Skan ACPI_PARSE_OBJECT *Op); 312169699Skan 313117414Skan 314117414Skan/* 315117414Skan * pswalk - parse tree walk routines 316117414Skan */ 31718334SpeterACPI_STATUS 31818334SpeterAcpiPsWalkParsedAml ( 31918334Speter ACPI_PARSE_OBJECT *StartOp, 32018334Speter ACPI_PARSE_OBJECT *EndOp, 32118334Speter ACPI_OPERAND_OBJECT *MthDesc, 32250615Sobrien ACPI_NAMESPACE_NODE *StartNode, 32350615Sobrien ACPI_OPERAND_OBJECT **Params, 32450615Sobrien ACPI_OPERAND_OBJECT **CallerReturnDesc, 32550615Sobrien ACPI_OWNER_ID OwnerId, 32650615Sobrien ACPI_PARSE_DOWNWARDS DescendingCallback, 32750615Sobrien ACPI_PARSE_UPWARDS AscendingCallback); 32850615Sobrien 32950615SobrienACPI_STATUS 33050615SobrienAcpiPsGetNextWalkOp ( 33190282Sobrien ACPI_WALK_STATE *WalkState, 33290282Sobrien ACPI_PARSE_OBJECT *Op, 33390282Sobrien ACPI_PARSE_UPWARDS AscendingCallback); 33490282Sobrien 33590282SobrienACPI_STATUS 33690282SobrienAcpiPsDeleteCompletedOp ( 33790282Sobrien ACPI_WALK_STATE *WalkState); 33890282Sobrien 33990282Sobrienvoid 34090282SobrienAcpiPsDeleteParseTree ( 34190282Sobrien ACPI_PARSE_OBJECT *root); 34290282Sobrien 34350615Sobrien 34490282Sobrien/* 34590282Sobrien * psutils - parser utilities 34690282Sobrien */ 34790282SobrienACPI_PARSE_OBJECT * 34890282SobrienAcpiPsCreateScopeOp ( 349169699Skan void); 350169699Skan 351169699Skanvoid 352169699SkanAcpiPsInitOp ( 353117414Skan ACPI_PARSE_OBJECT *op, 354169699Skan UINT16 opcode); 355169699Skan 356117414SkanACPI_PARSE_OBJECT * 357169699SkanAcpiPsAllocOp ( 358117414Skan UINT16 opcode); 35990282Sobrien 36090282Sobrienvoid 36190282SobrienAcpiPsFreeOp ( 36290282Sobrien ACPI_PARSE_OBJECT *Op); 36390282Sobrien 36490282SobrienBOOLEAN 36590282SobrienAcpiPsIsLeadingChar ( 36690282Sobrien UINT32 c); 36790282Sobrien 36890282SobrienBOOLEAN 36990282SobrienAcpiPsIsPrefixChar ( 37090282Sobrien UINT32 c); 37190282Sobrien 37250615SobrienUINT32 37350615SobrienAcpiPsGetName( 37490282Sobrien ACPI_PARSE_OBJECT *op); 37590282Sobrien 37690282Sobrienvoid 37750615SobrienAcpiPsSetName( 37850615Sobrien ACPI_PARSE_OBJECT *op, 37950615Sobrien UINT32 name); 380132734Skan 381132734Skan 382132734Skan/* 38352558Sobrien * psdump - display parser tree 38452558Sobrien */ 38552558SobrienUINT32 38690282SobrienAcpiPsSprintPath ( 387169699Skan char *BufferStart, 388169699Skan UINT32 BufferSize, 38990282Sobrien ACPI_PARSE_OBJECT *Op); 39090282Sobrien 391169699SkanUINT32 39290282SobrienAcpiPsSprintOp ( 39390282Sobrien char *BufferStart, 394132734Skan UINT32 BufferSize, 395132734Skan ACPI_PARSE_OBJECT *Op); 39618334Speter 397132734Skanvoid 398132734SkanAcpiPsShow ( 399169699Skan ACPI_PARSE_OBJECT *op); 400169699Skan 40118334Speter 402132734Skan#endif /* __ACPARSER_H__ */ 403132734Skan