acparser.h revision 217365
1/****************************************************************************** 2 * 3 * Module Name: acparser.h - AML Parser subcomponent prototypes and defines 4 * 5 *****************************************************************************/ 6 7/* 8 * Copyright (C) 2000 - 2011, 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 45#ifndef __ACPARSER_H__ 46#define __ACPARSER_H__ 47 48 49#define OP_HAS_RETURN_VALUE 1 50 51/* Variable number of arguments. This field must be 32 bits */ 52 53#define ACPI_VAR_ARGS ACPI_UINT32_MAX 54 55 56#define ACPI_PARSE_DELETE_TREE 0x0001 57#define ACPI_PARSE_NO_TREE_DELETE 0x0000 58#define ACPI_PARSE_TREE_MASK 0x0001 59 60#define ACPI_PARSE_LOAD_PASS1 0x0010 61#define ACPI_PARSE_LOAD_PASS2 0x0020 62#define ACPI_PARSE_EXECUTE 0x0030 63#define ACPI_PARSE_MODE_MASK 0x0030 64 65#define ACPI_PARSE_DEFERRED_OP 0x0100 66#define ACPI_PARSE_DISASSEMBLE 0x0200 67 68#define ACPI_PARSE_MODULE_LEVEL 0x0400 69 70/****************************************************************************** 71 * 72 * Parser interfaces 73 * 74 *****************************************************************************/ 75 76 77/* 78 * psxface - Parser external interfaces 79 */ 80ACPI_STATUS 81AcpiPsExecuteMethod ( 82 ACPI_EVALUATE_INFO *Info); 83 84 85/* 86 * psargs - Parse AML opcode arguments 87 */ 88UINT8 * 89AcpiPsGetNextPackageEnd ( 90 ACPI_PARSE_STATE *ParserState); 91 92char * 93AcpiPsGetNextNamestring ( 94 ACPI_PARSE_STATE *ParserState); 95 96void 97AcpiPsGetNextSimpleArg ( 98 ACPI_PARSE_STATE *ParserState, 99 UINT32 ArgType, 100 ACPI_PARSE_OBJECT *Arg); 101 102ACPI_STATUS 103AcpiPsGetNextNamepath ( 104 ACPI_WALK_STATE *WalkState, 105 ACPI_PARSE_STATE *ParserState, 106 ACPI_PARSE_OBJECT *Arg, 107 BOOLEAN MethodCall); 108 109ACPI_STATUS 110AcpiPsGetNextArg ( 111 ACPI_WALK_STATE *WalkState, 112 ACPI_PARSE_STATE *ParserState, 113 UINT32 ArgType, 114 ACPI_PARSE_OBJECT **ReturnArg); 115 116 117/* 118 * psfind 119 */ 120ACPI_PARSE_OBJECT * 121AcpiPsFindName ( 122 ACPI_PARSE_OBJECT *Scope, 123 UINT32 Name, 124 UINT32 Opcode); 125 126ACPI_PARSE_OBJECT* 127AcpiPsGetParent ( 128 ACPI_PARSE_OBJECT *Op); 129 130 131/* 132 * psopcode - AML Opcode information 133 */ 134const ACPI_OPCODE_INFO * 135AcpiPsGetOpcodeInfo ( 136 UINT16 Opcode); 137 138char * 139AcpiPsGetOpcodeName ( 140 UINT16 Opcode); 141 142UINT8 143AcpiPsGetArgumentCount ( 144 UINT32 OpType); 145 146 147/* 148 * psparse - top level parsing routines 149 */ 150ACPI_STATUS 151AcpiPsParseAml ( 152 ACPI_WALK_STATE *WalkState); 153 154UINT32 155AcpiPsGetOpcodeSize ( 156 UINT32 Opcode); 157 158UINT16 159AcpiPsPeekOpcode ( 160 ACPI_PARSE_STATE *state); 161 162ACPI_STATUS 163AcpiPsCompleteThisOp ( 164 ACPI_WALK_STATE *WalkState, 165 ACPI_PARSE_OBJECT *Op); 166 167ACPI_STATUS 168AcpiPsNextParseState ( 169 ACPI_WALK_STATE *WalkState, 170 ACPI_PARSE_OBJECT *Op, 171 ACPI_STATUS CallbackStatus); 172 173 174/* 175 * psloop - main parse loop 176 */ 177ACPI_STATUS 178AcpiPsParseLoop ( 179 ACPI_WALK_STATE *WalkState); 180 181 182/* 183 * psscope - Scope stack management routines 184 */ 185ACPI_STATUS 186AcpiPsInitScope ( 187 ACPI_PARSE_STATE *ParserState, 188 ACPI_PARSE_OBJECT *Root); 189 190ACPI_PARSE_OBJECT * 191AcpiPsGetParentScope ( 192 ACPI_PARSE_STATE *state); 193 194BOOLEAN 195AcpiPsHasCompletedScope ( 196 ACPI_PARSE_STATE *ParserState); 197 198void 199AcpiPsPopScope ( 200 ACPI_PARSE_STATE *ParserState, 201 ACPI_PARSE_OBJECT **Op, 202 UINT32 *ArgList, 203 UINT32 *ArgCount); 204 205ACPI_STATUS 206AcpiPsPushScope ( 207 ACPI_PARSE_STATE *ParserState, 208 ACPI_PARSE_OBJECT *Op, 209 UINT32 RemainingArgs, 210 UINT32 ArgCount); 211 212void 213AcpiPsCleanupScope ( 214 ACPI_PARSE_STATE *state); 215 216 217/* 218 * pstree - parse tree manipulation routines 219 */ 220void 221AcpiPsAppendArg( 222 ACPI_PARSE_OBJECT *op, 223 ACPI_PARSE_OBJECT *arg); 224 225ACPI_PARSE_OBJECT* 226AcpiPsFind ( 227 ACPI_PARSE_OBJECT *Scope, 228 char *Path, 229 UINT16 Opcode, 230 UINT32 Create); 231 232ACPI_PARSE_OBJECT * 233AcpiPsGetArg( 234 ACPI_PARSE_OBJECT *op, 235 UINT32 argn); 236 237ACPI_PARSE_OBJECT * 238AcpiPsGetDepthNext ( 239 ACPI_PARSE_OBJECT *Origin, 240 ACPI_PARSE_OBJECT *Op); 241 242 243/* 244 * pswalk - parse tree walk routines 245 */ 246ACPI_STATUS 247AcpiPsWalkParsedAml ( 248 ACPI_PARSE_OBJECT *StartOp, 249 ACPI_PARSE_OBJECT *EndOp, 250 ACPI_OPERAND_OBJECT *MthDesc, 251 ACPI_NAMESPACE_NODE *StartNode, 252 ACPI_OPERAND_OBJECT **Params, 253 ACPI_OPERAND_OBJECT **CallerReturnDesc, 254 ACPI_OWNER_ID OwnerId, 255 ACPI_PARSE_DOWNWARDS DescendingCallback, 256 ACPI_PARSE_UPWARDS AscendingCallback); 257 258ACPI_STATUS 259AcpiPsGetNextWalkOp ( 260 ACPI_WALK_STATE *WalkState, 261 ACPI_PARSE_OBJECT *Op, 262 ACPI_PARSE_UPWARDS AscendingCallback); 263 264ACPI_STATUS 265AcpiPsDeleteCompletedOp ( 266 ACPI_WALK_STATE *WalkState); 267 268void 269AcpiPsDeleteParseTree ( 270 ACPI_PARSE_OBJECT *root); 271 272 273/* 274 * psutils - parser utilities 275 */ 276ACPI_PARSE_OBJECT * 277AcpiPsCreateScopeOp ( 278 void); 279 280void 281AcpiPsInitOp ( 282 ACPI_PARSE_OBJECT *op, 283 UINT16 opcode); 284 285ACPI_PARSE_OBJECT * 286AcpiPsAllocOp ( 287 UINT16 opcode); 288 289void 290AcpiPsFreeOp ( 291 ACPI_PARSE_OBJECT *Op); 292 293BOOLEAN 294AcpiPsIsLeadingChar ( 295 UINT32 c); 296 297BOOLEAN 298AcpiPsIsPrefixChar ( 299 UINT32 c); 300 301UINT32 302AcpiPsGetName( 303 ACPI_PARSE_OBJECT *op); 304 305void 306AcpiPsSetName( 307 ACPI_PARSE_OBJECT *op, 308 UINT32 name); 309 310 311/* 312 * psdump - display parser tree 313 */ 314UINT32 315AcpiPsSprintPath ( 316 char *BufferStart, 317 UINT32 BufferSize, 318 ACPI_PARSE_OBJECT *Op); 319 320UINT32 321AcpiPsSprintOp ( 322 char *BufferStart, 323 UINT32 BufferSize, 324 ACPI_PARSE_OBJECT *Op); 325 326void 327AcpiPsShow ( 328 ACPI_PARSE_OBJECT *op); 329 330 331#endif /* __ACPARSER_H__ */ 332