acparser.h revision 245582
1331722Seadler/****************************************************************************** 2144518Sdavidxu * 3144518Sdavidxu * Module Name: acparser.h - AML Parser subcomponent prototypes and defines 4144518Sdavidxu * 5144518Sdavidxu *****************************************************************************/ 6144518Sdavidxu 7144518Sdavidxu/* 8144518Sdavidxu * Copyright (C) 2000 - 2013, Intel Corp. 9144518Sdavidxu * All rights reserved. 10144518Sdavidxu * 11144518Sdavidxu * Redistribution and use in source and binary forms, with or without 12144518Sdavidxu * modification, are permitted provided that the following conditions 13165967Simp * are met: 14144518Sdavidxu * 1. Redistributions of source code must retain the above copyright 15144518Sdavidxu * notice, this list of conditions, and the following disclaimer, 16144518Sdavidxu * without modification. 17144518Sdavidxu * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18144518Sdavidxu * substantially similar to the "NO WARRANTY" disclaimer below 19144518Sdavidxu * ("Disclaimer") and any redistribution must be conditioned upon 20144518Sdavidxu * including a substantially similar Disclaimer requirement for further 21144518Sdavidxu * binary redistribution. 22144518Sdavidxu * 3. Neither the names of the above-listed copyright holders nor the names 23144518Sdavidxu * of any contributors may be used to endorse or promote products derived 24144518Sdavidxu * from this software without specific prior written permission. 25144518Sdavidxu * 26144518Sdavidxu * Alternatively, this software may be distributed under the terms of the 27144518Sdavidxu * GNU General Public License ("GPL") version 2 as published by the Free 28144518Sdavidxu * Software Foundation. 29144518Sdavidxu * 30297706Skib * NO WARRANTY 31297706Skib * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32297706Skib * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33149691Sstefanf * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34144518Sdavidxu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35144518Sdavidxu * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36144518Sdavidxu * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37144518Sdavidxu * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38144518Sdavidxu * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39144518Sdavidxu * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40144518Sdavidxu * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41144518Sdavidxu * POSSIBILITY OF SUCH DAMAGES. 42144518Sdavidxu */ 43144518Sdavidxu 44144518Sdavidxu 45144518Sdavidxu#ifndef __ACPARSER_H__ 46144518Sdavidxu#define __ACPARSER_H__ 47144518Sdavidxu 48144518Sdavidxu 49144921Sdavidxu#define OP_HAS_RETURN_VALUE 1 50144921Sdavidxu 51144921Sdavidxu/* Variable number of arguments. This field must be 32 bits */ 52144518Sdavidxu 53144518Sdavidxu#define ACPI_VAR_ARGS ACPI_UINT32_MAX 54144518Sdavidxu 55144518Sdavidxu 56144518Sdavidxu#define ACPI_PARSE_DELETE_TREE 0x0001 57144518Sdavidxu#define ACPI_PARSE_NO_TREE_DELETE 0x0000 58144518Sdavidxu#define ACPI_PARSE_TREE_MASK 0x0001 59144518Sdavidxu 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 * psobject - support for parse object processing 133 */ 134ACPI_STATUS 135AcpiPsBuildNamedOp ( 136 ACPI_WALK_STATE *WalkState, 137 UINT8 *AmlOpStart, 138 ACPI_PARSE_OBJECT *UnnamedOp, 139 ACPI_PARSE_OBJECT **Op); 140 141ACPI_STATUS 142AcpiPsCreateOp ( 143 ACPI_WALK_STATE *WalkState, 144 UINT8 *AmlOpStart, 145 ACPI_PARSE_OBJECT **NewOp); 146 147ACPI_STATUS 148AcpiPsCompleteOp ( 149 ACPI_WALK_STATE *WalkState, 150 ACPI_PARSE_OBJECT **Op, 151 ACPI_STATUS Status); 152 153ACPI_STATUS 154AcpiPsCompleteFinalOp ( 155 ACPI_WALK_STATE *WalkState, 156 ACPI_PARSE_OBJECT *Op, 157 ACPI_STATUS Status); 158 159 160/* 161 * psopinfo - AML Opcode information 162 */ 163const ACPI_OPCODE_INFO * 164AcpiPsGetOpcodeInfo ( 165 UINT16 Opcode); 166 167char * 168AcpiPsGetOpcodeName ( 169 UINT16 Opcode); 170 171UINT8 172AcpiPsGetArgumentCount ( 173 UINT32 OpType); 174 175 176/* 177 * psparse - top level parsing routines 178 */ 179ACPI_STATUS 180AcpiPsParseAml ( 181 ACPI_WALK_STATE *WalkState); 182 183UINT32 184AcpiPsGetOpcodeSize ( 185 UINT32 Opcode); 186 187UINT16 188AcpiPsPeekOpcode ( 189 ACPI_PARSE_STATE *state); 190 191ACPI_STATUS 192AcpiPsCompleteThisOp ( 193 ACPI_WALK_STATE *WalkState, 194 ACPI_PARSE_OBJECT *Op); 195 196ACPI_STATUS 197AcpiPsNextParseState ( 198 ACPI_WALK_STATE *WalkState, 199 ACPI_PARSE_OBJECT *Op, 200 ACPI_STATUS CallbackStatus); 201 202 203/* 204 * psloop - main parse loop 205 */ 206ACPI_STATUS 207AcpiPsParseLoop ( 208 ACPI_WALK_STATE *WalkState); 209 210 211/* 212 * psscope - Scope stack management routines 213 */ 214ACPI_STATUS 215AcpiPsInitScope ( 216 ACPI_PARSE_STATE *ParserState, 217 ACPI_PARSE_OBJECT *Root); 218 219ACPI_PARSE_OBJECT * 220AcpiPsGetParentScope ( 221 ACPI_PARSE_STATE *state); 222 223BOOLEAN 224AcpiPsHasCompletedScope ( 225 ACPI_PARSE_STATE *ParserState); 226 227void 228AcpiPsPopScope ( 229 ACPI_PARSE_STATE *ParserState, 230 ACPI_PARSE_OBJECT **Op, 231 UINT32 *ArgList, 232 UINT32 *ArgCount); 233 234ACPI_STATUS 235AcpiPsPushScope ( 236 ACPI_PARSE_STATE *ParserState, 237 ACPI_PARSE_OBJECT *Op, 238 UINT32 RemainingArgs, 239 UINT32 ArgCount); 240 241void 242AcpiPsCleanupScope ( 243 ACPI_PARSE_STATE *state); 244 245 246/* 247 * pstree - parse tree manipulation routines 248 */ 249void 250AcpiPsAppendArg( 251 ACPI_PARSE_OBJECT *op, 252 ACPI_PARSE_OBJECT *arg); 253 254ACPI_PARSE_OBJECT* 255AcpiPsFind ( 256 ACPI_PARSE_OBJECT *Scope, 257 char *Path, 258 UINT16 Opcode, 259 UINT32 Create); 260 261ACPI_PARSE_OBJECT * 262AcpiPsGetArg( 263 ACPI_PARSE_OBJECT *op, 264 UINT32 argn); 265 266ACPI_PARSE_OBJECT * 267AcpiPsGetDepthNext ( 268 ACPI_PARSE_OBJECT *Origin, 269 ACPI_PARSE_OBJECT *Op); 270 271 272/* 273 * pswalk - parse tree walk routines 274 */ 275ACPI_STATUS 276AcpiPsWalkParsedAml ( 277 ACPI_PARSE_OBJECT *StartOp, 278 ACPI_PARSE_OBJECT *EndOp, 279 ACPI_OPERAND_OBJECT *MthDesc, 280 ACPI_NAMESPACE_NODE *StartNode, 281 ACPI_OPERAND_OBJECT **Params, 282 ACPI_OPERAND_OBJECT **CallerReturnDesc, 283 ACPI_OWNER_ID OwnerId, 284 ACPI_PARSE_DOWNWARDS DescendingCallback, 285 ACPI_PARSE_UPWARDS AscendingCallback); 286 287ACPI_STATUS 288AcpiPsGetNextWalkOp ( 289 ACPI_WALK_STATE *WalkState, 290 ACPI_PARSE_OBJECT *Op, 291 ACPI_PARSE_UPWARDS AscendingCallback); 292 293ACPI_STATUS 294AcpiPsDeleteCompletedOp ( 295 ACPI_WALK_STATE *WalkState); 296 297void 298AcpiPsDeleteParseTree ( 299 ACPI_PARSE_OBJECT *root); 300 301 302/* 303 * psutils - parser utilities 304 */ 305ACPI_PARSE_OBJECT * 306AcpiPsCreateScopeOp ( 307 void); 308 309void 310AcpiPsInitOp ( 311 ACPI_PARSE_OBJECT *op, 312 UINT16 opcode); 313 314ACPI_PARSE_OBJECT * 315AcpiPsAllocOp ( 316 UINT16 opcode); 317 318void 319AcpiPsFreeOp ( 320 ACPI_PARSE_OBJECT *Op); 321 322BOOLEAN 323AcpiPsIsLeadingChar ( 324 UINT32 c); 325 326UINT32 327AcpiPsGetName( 328 ACPI_PARSE_OBJECT *op); 329 330void 331AcpiPsSetName( 332 ACPI_PARSE_OBJECT *op, 333 UINT32 name); 334 335 336/* 337 * psdump - display parser tree 338 */ 339UINT32 340AcpiPsSprintPath ( 341 char *BufferStart, 342 UINT32 BufferSize, 343 ACPI_PARSE_OBJECT *Op); 344 345UINT32 346AcpiPsSprintOp ( 347 char *BufferStart, 348 UINT32 BufferSize, 349 ACPI_PARSE_OBJECT *Op); 350 351void 352AcpiPsShow ( 353 ACPI_PARSE_OBJECT *op); 354 355 356#endif /* __ACPARSER_H__ */ 357