1118611Snjl 2118611Snjl/****************************************************************************** 3118611Snjl * 4151937Sjkim * Module Name: aslcompiler.h - common include file for iASL 5118611Snjl * 6118611Snjl *****************************************************************************/ 7118611Snjl 8217365Sjkim/* 9217365Sjkim * Copyright (C) 2000 - 2011, Intel Corp. 10118611Snjl * All rights reserved. 11118611Snjl * 12217365Sjkim * Redistribution and use in source and binary forms, with or without 13217365Sjkim * modification, are permitted provided that the following conditions 14217365Sjkim * are met: 15217365Sjkim * 1. Redistributions of source code must retain the above copyright 16217365Sjkim * notice, this list of conditions, and the following disclaimer, 17217365Sjkim * without modification. 18217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 19217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 20217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 21217365Sjkim * including a substantially similar Disclaimer requirement for further 22217365Sjkim * binary redistribution. 23217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 24217365Sjkim * of any contributors may be used to endorse or promote products derived 25217365Sjkim * from this software without specific prior written permission. 26118611Snjl * 27217365Sjkim * Alternatively, this software may be distributed under the terms of the 28217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 29217365Sjkim * Software Foundation. 30118611Snjl * 31217365Sjkim * NO WARRANTY 32217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 33217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 34217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 35217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 36217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 37217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 38217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 39217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 40217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 41217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 42217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 43217365Sjkim */ 44118611Snjl 45118611Snjl 46118611Snjl#ifndef __ASLCOMPILER_H 47118611Snjl#define __ASLCOMPILER_H 48118611Snjl 49217365Sjkim#include <contrib/dev/acpica/include/acpi.h> 50217365Sjkim#include <contrib/dev/acpica/include/accommon.h> 51217365Sjkim#include <contrib/dev/acpica/include/amlresrc.h> 52217365Sjkim#include <contrib/dev/acpica/include/acdebug.h> 53118611Snjl 54118611Snjl/* Microsoft-specific */ 55118611Snjl 56118611Snjl#if (defined WIN32 || defined WIN64) 57118611Snjl 58118611Snjl/* warn : used #pragma pack */ 59118611Snjl#pragma warning(disable:4103) 60118611Snjl 61118611Snjl/* warn : named type definition in parentheses */ 62118611Snjl#pragma warning(disable:4115) 63118611Snjl#endif 64118611Snjl 65118611Snjl#include <stdio.h> 66118611Snjl#include <stdlib.h> 67118611Snjl#include <stdarg.h> 68118611Snjl#include <string.h> 69118611Snjl#include <errno.h> 70118611Snjl#include <ctype.h> 71118611Snjl 72151937Sjkim/* Compiler headers */ 73118611Snjl 74151937Sjkim#include <contrib/dev/acpica/compiler/asldefine.h> 75151937Sjkim#include <contrib/dev/acpica/compiler/asltypes.h> 76213806Sjkim#include <contrib/dev/acpica/compiler/aslmessages.h> 77151937Sjkim#include <contrib/dev/acpica/compiler/aslglobal.h> 78118611Snjl 79118611Snjl 80118611Snjl/******************************************************************************* 81118611Snjl * 82118611Snjl * Compiler prototypes 83118611Snjl * 84118611Snjl ******************************************************************************/ 85118611Snjl 86151937Sjkim/* 87151937Sjkim * parser - generated from flex/bison, lex/yacc, etc. 88151937Sjkim */ 89118611Snjlint 90118611SnjlAslCompilerparse( 91118611Snjl void); 92118611Snjl 93118611SnjlACPI_PARSE_OBJECT * 94118611SnjlAslDoError ( 95118611Snjl void); 96118611Snjl 97118611Snjlint 98118611SnjlAslCompilerlex( 99118611Snjl void); 100118611Snjl 101118611Snjlvoid 102118611SnjlResetCurrentLineBuffer ( 103118611Snjl void); 104118611Snjl 105118611Snjlvoid 106118611SnjlInsertLineBuffer ( 107118611Snjl int SourceChar); 108118611Snjl 109118611Snjlint 110118611SnjlAslPopInputFileStack ( 111118611Snjl void); 112118611Snjl 113118611Snjlvoid 114118611SnjlAslPushInputFileStack ( 115118611Snjl FILE *InputFile, 116118611Snjl char *Filename); 117118611Snjl 118193529Sjkim/* 119209746Sjkim * aslstartup - entered from main() 120193529Sjkim */ 121209746Sjkimvoid 122209746SjkimAslInitializeGlobals ( 123209746Sjkim void); 124209746Sjkim 125210976Sjkimtypedef 126210976SjkimACPI_STATUS (*ASL_PATHNAME_CALLBACK) ( 127210976Sjkim char *); 128210976Sjkim 129193529SjkimACPI_STATUS 130193529SjkimAslDoOnePathname ( 131210976Sjkim char *Pathname, 132210976Sjkim ASL_PATHNAME_CALLBACK Callback); 133118611Snjl 134193529SjkimACPI_STATUS 135193529SjkimAslDoOneFile ( 136193529Sjkim char *Filename); 137193529Sjkim 138151937Sjkim/* 139151937Sjkim * aslcompile - compile mainline 140151937Sjkim */ 141118611Snjlvoid 142118611SnjlAslCompilerSignon ( 143118611Snjl UINT32 FileId); 144118611Snjl 145118611Snjlvoid 146118611SnjlAslCompilerFileHeader ( 147118611Snjl UINT32 FileId); 148118611Snjl 149151937Sjkimint 150151937SjkimCmDoCompile ( 151151937Sjkim void); 152151937Sjkim 153118611Snjlvoid 154151937SjkimCmDoOutputFiles ( 155151937Sjkim void); 156118611Snjl 157151937Sjkimvoid 158151937SjkimCmCleanupAndExit ( 159151937Sjkim void); 160118611Snjl 161209746SjkimACPI_STATUS 162209746SjkimFlCheckForAscii ( 163209746Sjkim ASL_FILE_INFO *FileInfo); 164118611Snjl 165209746Sjkim 166151937Sjkim/* 167218590Sjkim * aslwalks - semantic analysis and parse tree walks 168151937Sjkim */ 169151937SjkimACPI_STATUS 170151937SjkimAnOtherSemanticAnalysisWalkBegin ( 171151937Sjkim ACPI_PARSE_OBJECT *Op, 172151937Sjkim UINT32 Level, 173151937Sjkim void *Context); 174118611Snjl 175151937SjkimACPI_STATUS 176151937SjkimAnOtherSemanticAnalysisWalkEnd ( 177151937Sjkim ACPI_PARSE_OBJECT *Op, 178151937Sjkim UINT32 Level, 179151937Sjkim void *Context); 180118611Snjl 181151937SjkimACPI_STATUS 182151937SjkimAnOperandTypecheckWalkEnd ( 183151937Sjkim ACPI_PARSE_OBJECT *Op, 184151937Sjkim UINT32 Level, 185151937Sjkim void *Context); 186118611Snjl 187151937SjkimACPI_STATUS 188151937SjkimAnMethodAnalysisWalkBegin ( 189151937Sjkim ACPI_PARSE_OBJECT *Op, 190151937Sjkim UINT32 Level, 191151937Sjkim void *Context); 192118611Snjl 193151937SjkimACPI_STATUS 194151937SjkimAnMethodAnalysisWalkEnd ( 195151937Sjkim ACPI_PARSE_OBJECT *Op, 196151937Sjkim UINT32 Level, 197151937Sjkim void *Context); 198118611Snjl 199151937SjkimACPI_STATUS 200218590SjkimAnMethodTypingWalkEnd ( 201151937Sjkim ACPI_PARSE_OBJECT *Op, 202151937Sjkim UINT32 Level, 203151937Sjkim void *Context); 204118611Snjl 205218590Sjkim 206218590Sjkim/* 207218590Sjkim * aslbtypes - bitfield data types 208218590Sjkim */ 209218590SjkimUINT32 210218590SjkimAnMapObjTypeToBtype ( 211218590Sjkim ACPI_PARSE_OBJECT *Op); 212218590Sjkim 213218590SjkimUINT32 214218590SjkimAnMapArgTypeToBtype ( 215218590Sjkim UINT32 ArgType); 216218590Sjkim 217218590SjkimUINT32 218218590SjkimAnGetBtype ( 219218590Sjkim ACPI_PARSE_OBJECT *Op); 220218590Sjkim 221218590Sjkimvoid 222218590SjkimAnFormatBtype ( 223218590Sjkim char *Buffer, 224218590Sjkim UINT32 Btype); 225218590Sjkim 226218590Sjkim 227218590Sjkim/* 228218590Sjkim * aslanalyze - Support functions for parse tree walks 229218590Sjkim */ 230218590Sjkimvoid 231218590SjkimAnCheckId ( 232151937Sjkim ACPI_PARSE_OBJECT *Op, 233218590Sjkim ACPI_NAME Type); 234118611Snjl 235218590Sjkim/* Values for Type argument above */ 236151937Sjkim 237218590Sjkim#define ASL_TYPE_HID 0 238218590Sjkim#define ASL_TYPE_CID 1 239218590Sjkim 240218590SjkimBOOLEAN 241218590SjkimAnIsInternalMethod ( 242218590Sjkim ACPI_PARSE_OBJECT *Op); 243218590Sjkim 244218590SjkimUINT32 245218590SjkimAnGetInternalMethodReturnType ( 246218590Sjkim ACPI_PARSE_OBJECT *Op); 247218590Sjkim 248218590SjkimBOOLEAN 249218590SjkimAnLastStatementIsReturn ( 250218590Sjkim ACPI_PARSE_OBJECT *Op); 251218590Sjkim 252218590Sjkimvoid 253218590SjkimAnCheckMethodReturnValue ( 254218590Sjkim ACPI_PARSE_OBJECT *Op, 255218590Sjkim const ACPI_OPCODE_INFO *OpInfo, 256218590Sjkim ACPI_PARSE_OBJECT *ArgOp, 257218590Sjkim UINT32 RequiredBtypes, 258218590Sjkim UINT32 ThisNodeBtype); 259218590Sjkim 260218590SjkimBOOLEAN 261218590SjkimAnIsResultUsed ( 262218590Sjkim ACPI_PARSE_OBJECT *Op); 263218590Sjkim 264218590Sjkimvoid 265218590SjkimApCheckForGpeNameConflict ( 266218590Sjkim ACPI_PARSE_OBJECT *Op); 267218590Sjkim 268220663Sjkimvoid 269220663SjkimApCheckRegMethod ( 270220663Sjkim ACPI_PARSE_OBJECT *Op); 271218590Sjkim 272220663Sjkim 273151937Sjkim/* 274151937Sjkim * aslerror - error handling/reporting 275151937Sjkim */ 276118611Snjlvoid 277118611SnjlAslError ( 278118611Snjl UINT8 Level, 279118611Snjl UINT8 MessageId, 280118611Snjl ACPI_PARSE_OBJECT *Op, 281118611Snjl char *ExtraMessage); 282118611Snjl 283118611Snjlvoid 284118611SnjlAslCoreSubsystemError ( 285118611Snjl ACPI_PARSE_OBJECT *Op, 286118611Snjl ACPI_STATUS Status, 287118611Snjl char *ExtraMessage, 288118611Snjl BOOLEAN Abort); 289118611Snjl 290151937Sjkimint 291151937SjkimAslCompilererror( 292151937Sjkim char *s); 293151937Sjkim 294118611Snjlvoid 295118611SnjlAslCommonError ( 296118611Snjl UINT8 Level, 297118611Snjl UINT8 MessageId, 298118611Snjl UINT32 CurrentLineNumber, 299118611Snjl UINT32 LogicalLineNumber, 300118611Snjl UINT32 LogicalByteOffset, 301118611Snjl UINT32 Column, 302118611Snjl char *Filename, 303118611Snjl char *ExtraMessage); 304118611Snjl 305118611Snjlvoid 306118611SnjlAePrintException ( 307118611Snjl UINT32 FileId, 308118611Snjl ASL_ERROR_MSG *Enode, 309118611Snjl char *Header); 310118611Snjl 311118611Snjlvoid 312118611SnjlAePrintErrorLog ( 313118611Snjl UINT32 FileId); 314118611Snjl 315193529Sjkimvoid 316193529SjkimAeClearErrorLog ( 317193529Sjkim void); 318193529Sjkim 319167802SjkimACPI_PHYSICAL_ADDRESS 320118611SnjlAeLocalGetRootPointer ( 321167802Sjkim void); 322118611Snjl 323118611Snjl 324151937Sjkim/* 325151937Sjkim * asllisting - generate all "listing" type files 326151937Sjkim */ 327118611Snjlvoid 328151937SjkimLsDoListings ( 329151937Sjkim void); 330118611Snjl 331118611Snjlvoid 332118611SnjlLsWriteNodeToAsmListing ( 333118611Snjl ACPI_PARSE_OBJECT *Op); 334118611Snjl 335118611Snjlvoid 336118611SnjlLsWriteNode ( 337118611Snjl ACPI_PARSE_OBJECT *Op, 338118611Snjl UINT32 FileId); 339118611Snjl 340118611Snjlvoid 341118611SnjlLsDoHexOutput ( 342118611Snjl void); 343118611Snjl 344167802Sjkimvoid 345167802SjkimLsDumpParseTree ( 346167802Sjkim void); 347118611Snjl 348151937Sjkim/* 349151937Sjkim * aslfold - constant folding 350151937Sjkim */ 351151937SjkimACPI_STATUS 352151937SjkimOpcAmlConstantWalk ( 353151937Sjkim ACPI_PARSE_OBJECT *Op, 354151937Sjkim UINT32 Level, 355151937Sjkim void *Context); 356118611Snjl 357118611Snjl 358118611Snjl/* 359118611Snjl * aslopcodes - generate AML opcodes 360118611Snjl */ 361118611SnjlACPI_STATUS 362118611SnjlOpcAmlOpcodeWalk ( 363118611Snjl ACPI_PARSE_OBJECT *Op, 364118611Snjl UINT32 Level, 365118611Snjl void *Context); 366118611Snjl 367118611SnjlACPI_STATUS 368151937SjkimOpcAmlOpcodeUpdateWalk ( 369118611Snjl ACPI_PARSE_OBJECT *Op, 370118611Snjl UINT32 Level, 371118611Snjl void *Context); 372118611Snjl 373118611Snjlvoid 374118611SnjlOpcGenerateAmlOpcode ( 375118611Snjl ACPI_PARSE_OBJECT *Op); 376118611Snjl 377118611SnjlUINT32 378118611SnjlOpcSetOptimalIntegerSize ( 379118611Snjl ACPI_PARSE_OBJECT *Op); 380118611Snjl 381118611Snjlvoid 382118611SnjlOpcGetIntegerWidth ( 383118611Snjl ACPI_PARSE_OBJECT *Op); 384118611Snjl 385151937Sjkim 386118611Snjl/* 387118611Snjl * asloperands - generate AML operands for the AML opcodes 388118611Snjl */ 389151937SjkimACPI_PARSE_OBJECT * 390151937SjkimUtGetArg ( 391151937Sjkim ACPI_PARSE_OBJECT *Op, 392151937Sjkim UINT32 Argn); 393118611Snjl 394118611Snjlvoid 395118611SnjlOpnGenerateAmlOperands ( 396118611Snjl ACPI_PARSE_OBJECT *Op); 397118611Snjl 398118611Snjlvoid 399118611SnjlOpnDoPackage ( 400118611Snjl ACPI_PARSE_OBJECT *Op); 401118611Snjl 402118611Snjl 403118611Snjl/* 404118611Snjl * aslopt - optmization 405118611Snjl */ 406118611Snjlvoid 407118611SnjlOptOptimizeNamePath ( 408118611Snjl ACPI_PARSE_OBJECT *Op, 409118611Snjl UINT32 Flags, 410118611Snjl ACPI_WALK_STATE *WalkState, 411118611Snjl char *AmlNameString, 412118611Snjl ACPI_NAMESPACE_NODE *TargetNode); 413118611Snjl 414118611Snjl 415118611Snjl/* 416151937Sjkim * aslcodegen - code generation 417118611Snjl */ 418118611Snjlvoid 419151937SjkimCgGenerateAmlOutput ( 420151937Sjkim void); 421118611Snjl 422118611Snjl 423151937Sjkim/* 424209746Sjkim * aslfile 425209746Sjkim */ 426209746Sjkimvoid 427209746SjkimFlOpenFile ( 428209746Sjkim UINT32 FileId, 429209746Sjkim char *Filename, 430209746Sjkim char *Mode); 431209746Sjkim 432209746Sjkim 433209746Sjkim/* 434151937Sjkim * asllength - calculate/adjust AML package lengths 435151937Sjkim */ 436118611SnjlACPI_STATUS 437118611SnjlLnPackageLengthWalk ( 438118611Snjl ACPI_PARSE_OBJECT *Op, 439118611Snjl UINT32 Level, 440118611Snjl void *Context); 441118611Snjl 442118611SnjlACPI_STATUS 443118611SnjlLnInitLengthsWalk ( 444118611Snjl ACPI_PARSE_OBJECT *Op, 445118611Snjl UINT32 Level, 446118611Snjl void *Context); 447118611Snjl 448118611Snjlvoid 449151937SjkimCgGenerateAmlLengths ( 450151937Sjkim ACPI_PARSE_OBJECT *Op); 451118611Snjl 452118611Snjl 453118611Snjl/* 454151937Sjkim * aslmap - opcode mappings and reserved method names 455118611Snjl */ 456118611SnjlACPI_OBJECT_TYPE 457118611SnjlAslMapNamedOpcodeToDataType ( 458118611Snjl UINT16 Opcode); 459118611Snjl 460204773Sjkim 461204773Sjkim/* 462204773Sjkim * aslpredef - ACPI predefined names support 463204773Sjkim */ 464220663SjkimBOOLEAN 465204773SjkimApCheckForPredefinedMethod ( 466204773Sjkim ACPI_PARSE_OBJECT *Op, 467204773Sjkim ASL_METHOD_INFO *MethodInfo); 468204773Sjkim 469206117Sjkimvoid 470206117SjkimApCheckPredefinedReturnValue ( 471206117Sjkim ACPI_PARSE_OBJECT *Op, 472206117Sjkim ASL_METHOD_INFO *MethodInfo); 473206117Sjkim 474204773SjkimUINT32 475204773SjkimApCheckForPredefinedName ( 476204773Sjkim ACPI_PARSE_OBJECT *Op, 477204773Sjkim char *Name); 478204773Sjkim 479204773Sjkimvoid 480204773SjkimApCheckForPredefinedObject ( 481204773Sjkim ACPI_PARSE_OBJECT *Op, 482204773Sjkim char *Name); 483204773Sjkim 484204773Sjkimvoid 485204773SjkimApDisplayReservedNames ( 486151937Sjkim void); 487151937Sjkim 488151937Sjkim 489118611Snjl/* 490118611Snjl * asltransform - parse tree transformations 491118611Snjl */ 492118611SnjlACPI_STATUS 493118611SnjlTrAmlTransformWalk ( 494118611Snjl ACPI_PARSE_OBJECT *Op, 495118611Snjl UINT32 Level, 496118611Snjl void *Context); 497118611Snjl 498118611Snjl 499118611Snjl/* 500118611Snjl * asltree - parse tree support 501118611Snjl */ 502118611SnjlACPI_STATUS 503118611SnjlTrWalkParseTree ( 504118611Snjl ACPI_PARSE_OBJECT *Op, 505118611Snjl UINT32 Visitation, 506118611Snjl ASL_WALK_CALLBACK DescendingCallback, 507118611Snjl ASL_WALK_CALLBACK AscendingCallback, 508118611Snjl void *Context); 509118611Snjl 510118611Snjl/* Values for "Visitation" parameter above */ 511118611Snjl 512118611Snjl#define ASL_WALK_VISIT_DOWNWARD 0x01 513118611Snjl#define ASL_WALK_VISIT_UPWARD 0x02 514118611Snjl#define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD) 515118611Snjl 516118611Snjl 517151937SjkimACPI_PARSE_OBJECT * 518151937SjkimTrAllocateNode ( 519151937Sjkim UINT32 ParseOpcode); 520118611Snjl 521151937Sjkimvoid 522151937SjkimTrReleaseNode ( 523151937Sjkim ACPI_PARSE_OBJECT *Op); 524151937Sjkim 525118611SnjlACPI_PARSE_OBJECT * 526118611SnjlTrUpdateNode ( 527118611Snjl UINT32 ParseOpcode, 528118611Snjl ACPI_PARSE_OBJECT *Op); 529118611Snjl 530118611SnjlACPI_PARSE_OBJECT * 531118611SnjlTrCreateNode ( 532118611Snjl UINT32 ParseOpcode, 533118611Snjl UINT32 NumChildren, 534118611Snjl ...); 535118611Snjl 536118611SnjlACPI_PARSE_OBJECT * 537118611SnjlTrCreateLeafNode ( 538118611Snjl UINT32 ParseOpcode); 539118611Snjl 540118611SnjlACPI_PARSE_OBJECT * 541118611SnjlTrCreateValuedLeafNode ( 542118611Snjl UINT32 ParseOpcode, 543202771Sjkim UINT64 Value); 544118611Snjl 545118611SnjlACPI_PARSE_OBJECT * 546218590SjkimTrCreateConstantLeafNode ( 547218590Sjkim UINT32 ParseOpcode); 548218590Sjkim 549218590SjkimACPI_PARSE_OBJECT * 550118611SnjlTrLinkChildren ( 551118611Snjl ACPI_PARSE_OBJECT *Op, 552118611Snjl UINT32 NumChildren, 553118611Snjl ...); 554118611Snjl 555118611Snjlvoid 556118611SnjlTrSetEndLineNumber ( 557118611Snjl ACPI_PARSE_OBJECT *Op); 558118611Snjl 559118611Snjlvoid 560151937SjkimTrWalkTree ( 561151937Sjkim void); 562118611Snjl 563118611SnjlACPI_PARSE_OBJECT * 564118611SnjlTrLinkPeerNode ( 565118611Snjl ACPI_PARSE_OBJECT *Op1, 566118611Snjl ACPI_PARSE_OBJECT *Op2); 567118611Snjl 568118611SnjlACPI_PARSE_OBJECT * 569118611SnjlTrLinkChildNode ( 570118611Snjl ACPI_PARSE_OBJECT *Op1, 571118611Snjl ACPI_PARSE_OBJECT *Op2); 572118611Snjl 573118611SnjlACPI_PARSE_OBJECT * 574118611SnjlTrSetNodeFlags ( 575118611Snjl ACPI_PARSE_OBJECT *Op, 576118611Snjl UINT32 Flags); 577118611Snjl 578118611SnjlACPI_PARSE_OBJECT * 579118611SnjlTrLinkPeerNodes ( 580118611Snjl UINT32 NumPeers, 581118611Snjl ...); 582118611Snjl 583118611Snjl 584118611Snjl/* 585118611Snjl * aslfiles - File I/O support 586118611Snjl */ 587118611Snjlvoid 588151937SjkimAslAbort ( 589151937Sjkim void); 590118611Snjl 591118611Snjlvoid 592197104SjkimFlAddIncludeDirectory ( 593197104Sjkim char *Dir); 594197104Sjkim 595197104Sjkimvoid 596118611SnjlFlOpenIncludeFile ( 597118611Snjl ACPI_PARSE_OBJECT *Op); 598118611Snjl 599118611Snjlvoid 600118611SnjlFlFileError ( 601118611Snjl UINT32 FileId, 602118611Snjl UINT8 ErrorId); 603118611Snjl 604207344SjkimUINT32 605207344SjkimFlGetFileSize ( 606207344Sjkim UINT32 FileId); 607207344Sjkim 608118611SnjlACPI_STATUS 609118611SnjlFlReadFile ( 610118611Snjl UINT32 FileId, 611118611Snjl void *Buffer, 612118611Snjl UINT32 Length); 613118611Snjl 614118611Snjlvoid 615118611SnjlFlWriteFile ( 616118611Snjl UINT32 FileId, 617118611Snjl void *Buffer, 618118611Snjl UINT32 Length); 619118611Snjl 620118611Snjlvoid 621118611SnjlFlSeekFile ( 622118611Snjl UINT32 FileId, 623118611Snjl long Offset); 624118611Snjl 625118611Snjlvoid 626118611SnjlFlCloseFile ( 627118611Snjl UINT32 FileId); 628118611Snjl 629118611Snjlvoid 630118611SnjlFlPrintFile ( 631118611Snjl UINT32 FileId, 632118611Snjl char *Format, 633118611Snjl ...); 634118611Snjl 635118611Snjlvoid 636118611SnjlFlSetLineNumber ( 637118611Snjl ACPI_PARSE_OBJECT *Op); 638118611Snjl 639118611SnjlACPI_STATUS 640118611SnjlFlOpenInputFile ( 641118611Snjl char *InputFilename); 642118611Snjl 643118611SnjlACPI_STATUS 644118611SnjlFlOpenAmlOutputFile ( 645118611Snjl char *InputFilename); 646118611Snjl 647118611SnjlACPI_STATUS 648118611SnjlFlOpenMiscOutputFiles ( 649118611Snjl char *InputFilename); 650118611Snjl 651118611Snjl 652151937Sjkim/* 653151937Sjkim * asload - load namespace in prep for cross reference 654151937Sjkim */ 655118611SnjlACPI_STATUS 656118611SnjlLdLoadNamespace ( 657118611Snjl ACPI_PARSE_OBJECT *RootOp); 658118611Snjl 659118611Snjl 660151937Sjkim/* 661151937Sjkim * asllookup - namespace cross reference 662151937Sjkim */ 663118611SnjlACPI_STATUS 664151937SjkimLkCrossReferenceNamespace ( 665151937Sjkim void); 666118611Snjl 667167802Sjkimvoid 668167802SjkimLkFindUnreferencedObjects ( 669167802Sjkim void); 670167802Sjkim 671118611SnjlACPI_STATUS 672118611SnjlLsDisplayNamespace ( 673118611Snjl void); 674118611Snjl 675212761Sjkimvoid 676212761SjkimLsSetupNsList ( 677212761Sjkim void *Handle); 678118611Snjl 679212761Sjkim 680151937Sjkim/* 681151937Sjkim * aslutils - common compiler utilites 682151937Sjkim */ 683151937Sjkimvoid 684151937SjkimDbgPrint ( 685151937Sjkim UINT32 Type, 686151937Sjkim char *Format, 687151937Sjkim ...); 688118611Snjl 689151937Sjkim/* Type values for above */ 690118611Snjl 691151937Sjkim#define ASL_DEBUG_OUTPUT 0 692151937Sjkim#define ASL_PARSE_OUTPUT 1 693151937Sjkim#define ASL_TREE_OUTPUT 2 694151937Sjkim 695118611Snjlvoid 696209746SjkimUtDisplaySupportedTables ( 697209746Sjkim void); 698209746Sjkim 699209746Sjkimvoid 700118611SnjlUtDisplayConstantOpcodes ( 701118611Snjl void); 702118611Snjl 703151937SjkimUINT8 704118611SnjlUtBeginEvent ( 705118611Snjl char *Name); 706118611Snjl 707118611Snjlvoid 708118611SnjlUtEndEvent ( 709151937Sjkim UINT8 Event); 710118611Snjl 711118611Snjlvoid * 712118611SnjlUtLocalCalloc ( 713118611Snjl UINT32 Size); 714118611Snjl 715118611Snjlvoid 716118611SnjlUtPrintFormattedName ( 717118611Snjl UINT16 ParseOpcode, 718118611Snjl UINT32 Level); 719118611Snjl 720118611Snjlvoid 721118611SnjlUtDisplaySummary ( 722118611Snjl UINT32 FileId); 723118611Snjl 724118611SnjlUINT8 725118611SnjlUtHexCharToValue ( 726151937Sjkim int HexChar); 727118611Snjl 728118611Snjlvoid 729118611SnjlUtConvertByteToHex ( 730118611Snjl UINT8 RawByte, 731118611Snjl UINT8 *Buffer); 732118611Snjl 733118611Snjlvoid 734118611SnjlUtConvertByteToAsmHex ( 735118611Snjl UINT8 RawByte, 736118611Snjl UINT8 *Buffer); 737118611Snjl 738118611Snjlchar * 739118611SnjlUtGetOpName ( 740118611Snjl UINT32 ParseOpcode); 741118611Snjl 742118611Snjlvoid 743118611SnjlUtSetParseOpName ( 744118611Snjl ACPI_PARSE_OBJECT *Op); 745118611Snjl 746118611Snjlchar * 747118611SnjlUtGetStringBuffer ( 748118611Snjl UINT32 Length); 749118611Snjl 750118611SnjlACPI_STATUS 751118611SnjlUtInternalizeName ( 752118611Snjl char *ExternalName, 753118611Snjl char **ConvertedName); 754118611Snjl 755118611Snjlvoid 756118611SnjlUtAttachNamepathToOwner ( 757118611Snjl ACPI_PARSE_OBJECT *Op, 758118611Snjl ACPI_PARSE_OBJECT *NameNode); 759118611Snjl 760118611SnjlACPI_PARSE_OBJECT * 761118611SnjlUtCheckIntegerRange ( 762118611Snjl ACPI_PARSE_OBJECT *Op, 763118611Snjl UINT32 LowValue, 764118611Snjl UINT32 HighValue); 765118611Snjl 766202771SjkimUINT64 767118611SnjlUtDoConstant ( 768118611Snjl char *String); 769118611Snjl 770220663SjkimACPI_STATUS 771220663SjkimUtStrtoul64 ( 772220663Sjkim char *String, 773220663Sjkim UINT32 Base, 774220663Sjkim UINT64 *RetInteger); 775220663Sjkim 776220663Sjkim 777217365Sjkim/* 778217365Sjkim * asluuid - UUID support 779217365Sjkim */ 780217365SjkimACPI_STATUS 781217365SjkimAuValidateUuid ( 782217365Sjkim char *InString); 783118611Snjl 784217365SjkimACPI_STATUS 785217365SjkimAuConvertStringToUuid ( 786217365Sjkim char *InString, 787217365Sjkim char *UuIdBuffer); 788217365Sjkim 789217365SjkimACPI_STATUS 790217365SjkimAuConvertUuidToString ( 791217365Sjkim char *UuIdBuffer, 792217365Sjkim char *OutString); 793217365Sjkim 794118611Snjl/* 795151937Sjkim * aslresource - Resource template generation utilities 796118611Snjl */ 797207344Sjkimvoid 798207344SjkimRsSmallAddressCheck ( 799207344Sjkim UINT8 Type, 800207344Sjkim UINT32 Minimum, 801207344Sjkim UINT32 Maximum, 802207344Sjkim UINT32 Length, 803207344Sjkim UINT32 Alignment, 804207344Sjkim ACPI_PARSE_OBJECT *MinOp, 805207344Sjkim ACPI_PARSE_OBJECT *MaxOp, 806207344Sjkim ACPI_PARSE_OBJECT *LengthOp, 807213806Sjkim ACPI_PARSE_OBJECT *AlignOp, 808213806Sjkim ACPI_PARSE_OBJECT *Op); 809207344Sjkim 810207344Sjkimvoid 811207344SjkimRsLargeAddressCheck ( 812207344Sjkim UINT64 Minimum, 813207344Sjkim UINT64 Maximum, 814207344Sjkim UINT64 Length, 815207344Sjkim UINT64 Granularity, 816207344Sjkim UINT8 Flags, 817207344Sjkim ACPI_PARSE_OBJECT *MinOp, 818207344Sjkim ACPI_PARSE_OBJECT *MaxOp, 819207344Sjkim ACPI_PARSE_OBJECT *LengthOp, 820213806Sjkim ACPI_PARSE_OBJECT *GranOp, 821213806Sjkim ACPI_PARSE_OBJECT *Op); 822207344Sjkim 823207344SjkimUINT16 824207344SjkimRsGetStringDataLength ( 825207344Sjkim ACPI_PARSE_OBJECT *InitializerOp); 826207344Sjkim 827118611SnjlASL_RESOURCE_NODE * 828118611SnjlRsAllocateResourceNode ( 829118611Snjl UINT32 Size); 830118611Snjl 831151937Sjkimvoid 832118611SnjlRsCreateBitField ( 833118611Snjl ACPI_PARSE_OBJECT *Op, 834118611Snjl char *Name, 835118611Snjl UINT32 ByteOffset, 836118611Snjl UINT32 BitOffset); 837118611Snjl 838118611Snjlvoid 839118611SnjlRsCreateByteField ( 840118611Snjl ACPI_PARSE_OBJECT *Op, 841118611Snjl char *Name, 842118611Snjl UINT32 ByteOffset); 843118611Snjl 844118611Snjlvoid 845118611SnjlRsSetFlagBits ( 846118611Snjl UINT8 *Flags, 847118611Snjl ACPI_PARSE_OBJECT *Op, 848118611Snjl UINT8 Position, 849118611Snjl UINT8 DefaultBit); 850118611Snjl 851118611SnjlACPI_PARSE_OBJECT * 852118611SnjlRsCompleteNodeAndGetNext ( 853118611Snjl ACPI_PARSE_OBJECT *Op); 854118611Snjl 855151937Sjkimvoid 856151937SjkimRsCheckListForDuplicates ( 857151937Sjkim ACPI_PARSE_OBJECT *Op); 858151937Sjkim 859118611SnjlASL_RESOURCE_NODE * 860118611SnjlRsDoOneResourceDescriptor ( 861118611Snjl ACPI_PARSE_OBJECT *DescriptorTypeOp, 862118611Snjl UINT32 CurrentByteOffset, 863118611Snjl UINT8 *State); 864118611Snjl 865151937Sjkim/* Values for State above */ 866151937Sjkim 867118611Snjl#define ACPI_RSTATE_NORMAL 0 868118611Snjl#define ACPI_RSTATE_START_DEPENDENT 1 869118611Snjl#define ACPI_RSTATE_DEPENDENT_LIST 2 870118611Snjl 871118611SnjlUINT32 872118611SnjlRsLinkDescriptorChain ( 873118611Snjl ASL_RESOURCE_NODE **PreviousRnode, 874118611Snjl ASL_RESOURCE_NODE *Rnode); 875118611Snjl 876151937Sjkimvoid 877151937SjkimRsDoResourceTemplate ( 878151937Sjkim ACPI_PARSE_OBJECT *Op); 879118611Snjl 880151937Sjkim 881118611Snjl/* 882207344Sjkim * aslrestype1 - Miscellaneous Small descriptors 883118611Snjl */ 884118611SnjlASL_RESOURCE_NODE * 885167802SjkimRsDoEndTagDescriptor ( 886167802Sjkim ACPI_PARSE_OBJECT *Op, 887167802Sjkim UINT32 CurrentByteOffset); 888167802Sjkim 889167802SjkimASL_RESOURCE_NODE * 890207344SjkimRsDoEndDependentDescriptor ( 891118611Snjl ACPI_PARSE_OBJECT *Op, 892118611Snjl UINT32 CurrentByteOffset); 893118611Snjl 894118611SnjlASL_RESOURCE_NODE * 895207344SjkimRsDoMemory24Descriptor ( 896118611Snjl ACPI_PARSE_OBJECT *Op, 897118611Snjl UINT32 CurrentByteOffset); 898118611Snjl 899118611SnjlASL_RESOURCE_NODE * 900207344SjkimRsDoMemory32Descriptor ( 901118611Snjl ACPI_PARSE_OBJECT *Op, 902118611Snjl UINT32 CurrentByteOffset); 903118611Snjl 904118611SnjlASL_RESOURCE_NODE * 905207344SjkimRsDoMemory32FixedDescriptor ( 906118611Snjl ACPI_PARSE_OBJECT *Op, 907118611Snjl UINT32 CurrentByteOffset); 908118611Snjl 909118611SnjlASL_RESOURCE_NODE * 910207344SjkimRsDoStartDependentDescriptor ( 911118611Snjl ACPI_PARSE_OBJECT *Op, 912118611Snjl UINT32 CurrentByteOffset); 913118611Snjl 914118611SnjlASL_RESOURCE_NODE * 915207344SjkimRsDoStartDependentNoPriDescriptor ( 916118611Snjl ACPI_PARSE_OBJECT *Op, 917118611Snjl UINT32 CurrentByteOffset); 918118611Snjl 919118611SnjlASL_RESOURCE_NODE * 920207344SjkimRsDoVendorSmallDescriptor ( 921118611Snjl ACPI_PARSE_OBJECT *Op, 922118611Snjl UINT32 CurrentByteOffset); 923118611Snjl 924207344Sjkim 925207344Sjkim/* 926207344Sjkim * aslrestype1i - I/O-related Small descriptors 927207344Sjkim */ 928118611SnjlASL_RESOURCE_NODE * 929207344SjkimRsDoDmaDescriptor ( 930118611Snjl ACPI_PARSE_OBJECT *Op, 931118611Snjl UINT32 CurrentByteOffset); 932118611Snjl 933118611SnjlASL_RESOURCE_NODE * 934207344SjkimRsDoFixedIoDescriptor ( 935118611Snjl ACPI_PARSE_OBJECT *Op, 936118611Snjl UINT32 CurrentByteOffset); 937118611Snjl 938118611SnjlASL_RESOURCE_NODE * 939207344SjkimRsDoIoDescriptor ( 940118611Snjl ACPI_PARSE_OBJECT *Op, 941118611Snjl UINT32 CurrentByteOffset); 942118611Snjl 943118611SnjlASL_RESOURCE_NODE * 944207344SjkimRsDoIrqDescriptor ( 945118611Snjl ACPI_PARSE_OBJECT *Op, 946118611Snjl UINT32 CurrentByteOffset); 947118611Snjl 948118611SnjlASL_RESOURCE_NODE * 949207344SjkimRsDoIrqNoFlagsDescriptor ( 950118611Snjl ACPI_PARSE_OBJECT *Op, 951118611Snjl UINT32 CurrentByteOffset); 952118611Snjl 953118611Snjl 954118611Snjl/* 955207344Sjkim * aslrestype2 - Large resource descriptors 956118611Snjl */ 957151937SjkimASL_RESOURCE_NODE * 958151937SjkimRsDoInterruptDescriptor ( 959151937Sjkim ACPI_PARSE_OBJECT *Op, 960151937Sjkim UINT32 CurrentByteOffset); 961118611Snjl 962118611SnjlASL_RESOURCE_NODE * 963207344SjkimRsDoVendorLargeDescriptor ( 964207344Sjkim ACPI_PARSE_OBJECT *Op, 965207344Sjkim UINT32 CurrentByteOffset); 966207344Sjkim 967207344SjkimASL_RESOURCE_NODE * 968207344SjkimRsDoGeneralRegisterDescriptor ( 969207344Sjkim ACPI_PARSE_OBJECT *Op, 970207344Sjkim UINT32 CurrentByteOffset); 971207344Sjkim 972207344Sjkim 973207344Sjkim/* 974207344Sjkim * aslrestype2d - DWord address descriptors 975207344Sjkim */ 976207344SjkimASL_RESOURCE_NODE * 977118611SnjlRsDoDwordIoDescriptor ( 978118611Snjl ACPI_PARSE_OBJECT *Op, 979118611Snjl UINT32 CurrentByteOffset); 980118611Snjl 981118611SnjlASL_RESOURCE_NODE * 982118611SnjlRsDoDwordMemoryDescriptor ( 983118611Snjl ACPI_PARSE_OBJECT *Op, 984118611Snjl UINT32 CurrentByteOffset); 985118611Snjl 986118611SnjlASL_RESOURCE_NODE * 987151937SjkimRsDoDwordSpaceDescriptor ( 988151937Sjkim ACPI_PARSE_OBJECT *Op, 989151937Sjkim UINT32 CurrentByteOffset); 990151937Sjkim 991207344Sjkim 992207344Sjkim/* 993207344Sjkim * aslrestype2e - Extended address descriptors 994207344Sjkim */ 995151937SjkimASL_RESOURCE_NODE * 996151937SjkimRsDoExtendedIoDescriptor ( 997151937Sjkim ACPI_PARSE_OBJECT *Op, 998151937Sjkim UINT32 CurrentByteOffset); 999151937Sjkim 1000151937SjkimASL_RESOURCE_NODE * 1001151937SjkimRsDoExtendedMemoryDescriptor ( 1002151937Sjkim ACPI_PARSE_OBJECT *Op, 1003151937Sjkim UINT32 CurrentByteOffset); 1004151937Sjkim 1005151937SjkimASL_RESOURCE_NODE * 1006151937SjkimRsDoExtendedSpaceDescriptor ( 1007151937Sjkim ACPI_PARSE_OBJECT *Op, 1008151937Sjkim UINT32 CurrentByteOffset); 1009151937Sjkim 1010207344Sjkim 1011207344Sjkim/* 1012207344Sjkim * aslrestype2q - QWord address descriptors 1013207344Sjkim */ 1014151937SjkimASL_RESOURCE_NODE * 1015118611SnjlRsDoQwordIoDescriptor ( 1016118611Snjl ACPI_PARSE_OBJECT *Op, 1017118611Snjl UINT32 CurrentByteOffset); 1018118611Snjl 1019118611SnjlASL_RESOURCE_NODE * 1020118611SnjlRsDoQwordMemoryDescriptor ( 1021118611Snjl ACPI_PARSE_OBJECT *Op, 1022118611Snjl UINT32 CurrentByteOffset); 1023118611Snjl 1024118611SnjlASL_RESOURCE_NODE * 1025151937SjkimRsDoQwordSpaceDescriptor ( 1026151937Sjkim ACPI_PARSE_OBJECT *Op, 1027151937Sjkim UINT32 CurrentByteOffset); 1028151937Sjkim 1029207344Sjkim 1030207344Sjkim/* 1031207344Sjkim * aslrestype2w - Word address descriptors 1032207344Sjkim */ 1033151937SjkimASL_RESOURCE_NODE * 1034118611SnjlRsDoWordIoDescriptor ( 1035118611Snjl ACPI_PARSE_OBJECT *Op, 1036118611Snjl UINT32 CurrentByteOffset); 1037118611Snjl 1038118611SnjlASL_RESOURCE_NODE * 1039151937SjkimRsDoWordSpaceDescriptor ( 1040151937Sjkim ACPI_PARSE_OBJECT *Op, 1041151937Sjkim UINT32 CurrentByteOffset); 1042151937Sjkim 1043151937SjkimASL_RESOURCE_NODE * 1044118611SnjlRsDoWordBusNumberDescriptor ( 1045118611Snjl ACPI_PARSE_OBJECT *Op, 1046118611Snjl UINT32 CurrentByteOffset); 1047118611Snjl 1048209746Sjkim/* 1049209746Sjkim * Entry to data table compiler subsystem 1050209746Sjkim */ 1051209746SjkimACPI_STATUS 1052209746SjkimDtDoCompile( 1053209746Sjkim void); 1054209746Sjkim 1055209746SjkimACPI_STATUS 1056209746SjkimDtCreateTemplates ( 1057209746Sjkim char *Signature); 1058209746Sjkim 1059118611Snjl#endif /* __ASLCOMPILER_H */ 1060118611Snjl 1061