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