11556Srgrimes/****************************************************************************** 21556Srgrimes * 31556Srgrimes * Module Name: aslcompiler.h - common include file for iASL 41556Srgrimes * 51556Srgrimes *****************************************************************************/ 61556Srgrimes 71556Srgrimes/* 81556Srgrimes * Copyright (C) 2000 - 2023, Intel Corp. 91556Srgrimes * All rights reserved. 101556Srgrimes * 111556Srgrimes * Redistribution and use in source and binary forms, with or without 121556Srgrimes * modification, are permitted provided that the following conditions 131556Srgrimes * are met: 141556Srgrimes * 1. Redistributions of source code must retain the above copyright 151556Srgrimes * notice, this list of conditions, and the following disclaimer, 161556Srgrimes * without modification. 171556Srgrimes * 2. Redistributions in binary form must reproduce at minimum a disclaimer 181556Srgrimes * substantially similar to the "NO WARRANTY" disclaimer below 191556Srgrimes * ("Disclaimer") and any redistribution must be conditioned upon 201556Srgrimes * including a substantially similar Disclaimer requirement for further 211556Srgrimes * binary redistribution. 221556Srgrimes * 3. Neither the names of the above-listed copyright holders nor the names 231556Srgrimes * of any contributors may be used to endorse or promote products derived 241556Srgrimes * from this software without specific prior written permission. 251556Srgrimes * 261556Srgrimes * Alternatively, this software may be distributed under the terms of the 271556Srgrimes * GNU General Public License ("GPL") version 2 as published by the Free 281556Srgrimes * Software Foundation. 291556Srgrimes * 301556Srgrimes * NO WARRANTY 311556Srgrimes * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 321556Srgrimes * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 331556Srgrimes * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 3436150Scharnier * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3536150Scharnier * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3636150Scharnier * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 371556Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3899110Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 3999110Sobrien * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 401556Srgrimes * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 411556Srgrimes * POSSIBILITY OF SUCH DAMAGES. 421556Srgrimes */ 431556Srgrimes 441556Srgrimes#ifndef __ASLCOMPILER_H 451556Srgrimes#define __ASLCOMPILER_H 461556Srgrimes 471556Srgrimes#include "acpi.h" 481556Srgrimes#include "accommon.h" 491556Srgrimes#include "amlresrc.h" 5053891Scracauer#include "acdebug.h" 5117987Speter 5238521Scracauer/* Microsoft-specific */ 531556Srgrimes 5478732Sdd#if (defined WIN32 || defined WIN64) 5517987Speter 561556Srgrimes/* warn : used #pragma pack */ 571556Srgrimes#pragma warning(disable:4103) 581556Srgrimes 591556Srgrimes/* warn : named type definition in parentheses */ 601556Srgrimes#pragma warning(disable:4115) 611556Srgrimes#endif 621556Srgrimes 631556Srgrimes#include <stdio.h> 6438521Scracauer#include <stdlib.h> 6538530Scracauer#include <string.h> 6638521Scracauer#include <errno.h> 671556Srgrimes#include <ctype.h> 681556Srgrimes 691556Srgrimes/* Compiler headers */ 70213811Sobrien 7120425Ssteve#include "asldefine.h" 721556Srgrimes#include "asltypes.h" 731556Srgrimes#include "aslmessages.h" 741556Srgrimes#include "aslglobal.h" 751556Srgrimes#include "preprocess.h" 76199660Sjilles#include "dtcompiler.h" 77199660Sjilles 78199660Sjilles 791556Srgrimes/******************************************************************************* 801556Srgrimes * 811556Srgrimes * Compiler prototypes 8290111Simp * 8317987Speter ******************************************************************************/ 84199660Sjilles 851556Srgrimes/* 861556Srgrimes * Main ASL parser - generated from flex/bison, lex/yacc, etc. 871556Srgrimes */ 881556SrgrimesACPI_PARSE_OBJECT * 891556SrgrimesAslDoError ( 901556Srgrimes void); 911556Srgrimes 921556Srgrimesint 93276038SjillesAslCompilerlex( 94276038Sjilles void); 95276038Sjilles 96276038Sjillesvoid 97276038SjillesAslResetCurrentLineBuffer ( 98276038Sjilles void); 99276038Sjilles 100276038Sjillesvoid 1011556SrgrimesAslInsertLineBuffer ( 1021556Srgrimes int SourceChar); 1031556Srgrimes 10490111Simpint 10590111SimpAslPopInputFileStack ( 106211281Sjilles void); 10717987Speter 1081556Srgrimesvoid 109211281SjillesAslPushInputFileStack ( 110211281Sjilles FILE *InputFile, 11138521Scracauer char *Filename); 11238536Scracauer 11338536Scracauervoid 11438536ScracauerAslParserCleanup ( 11538521Scracauer void); 116155301Sschweikh 11738521Scracauer 11838521Scracauer/* 1191556Srgrimes * aslstartup - entered from main() 1201556Srgrimes */ 12138521Scracauervoid 12238521ScracauerAslInitializeGlobals ( 12338521Scracauer void); 124276038Sjilles 12538521Scracauertypedef 1261556SrgrimesACPI_STATUS (*ASL_PATHNAME_CALLBACK) ( 1271556Srgrimes char *); 1281556Srgrimes 129216622SjillesACPI_STATUS 130216622SjillesAslDoOneFile ( 131216622Sjilles char *Filename); 132216622Sjilles 133216622SjillesACPI_STATUS 134274899SjillesAslCheckForErrorExit ( 135274899Sjilles void); 136216622Sjilles 137216622Sjilles 138216622Sjilles/* 139216622Sjilles * aslcompile - compile mainline 140216622Sjilles */ 141216622Sjillesvoid 142216622SjillesAslCompilerSignon ( 143216622Sjilles UINT32 FileId); 144216622Sjilles 145216622Sjillesvoid 146216622SjillesAslCompilerFileHeader ( 147216622Sjilles UINT32 FileId); 148216622Sjilles 149216622SjillesACPI_STATUS 150216622SjillesCmDoCompile ( 1511556Srgrimes void); 15220425Ssteve 1531556Srgrimesint 1541556SrgrimesCmDoAslMiddleAndBackEnd ( 1551556Srgrimes void); 156213811Sobrien 15790111Simpvoid 15820425SsteveCmDoOutputFiles ( 159199660Sjilles void); 160199660Sjilles 161199660Sjillesint 162199660SjillesCmCleanupAndExit ( 163199660Sjilles void); 164199660Sjilles 165199660SjillesACPI_STATUS 166199660SjillesAslDoDisassembly ( 167199660Sjilles void); 1681556Srgrimes 16920425Ssteve 17020425Ssteve/* 17120425Ssteve * aslallocate - memory allocation 17220425Ssteve */ 17320425Sstevevoid * 17420425SsteveUtLocalCalloc ( 175216622Sjilles UINT32 Size); 176216622Sjilles 17720425Sstevevoid 17820425SsteveUtExpandLineBuffers ( 17920425Ssteve void); 18020425Ssteve 18120425Sstevevoid 1821556SrgrimesUtReallocLineBuffers ( 18375577Skris char **Buffer, 18417987Speter UINT32 OldSize, 1851556Srgrimes UINT32 NewSize); 18620425Ssteve 18720425Sstevevoid 18820425SsteveUtFreeLineBuffers ( 18920425Ssteve void); 19017987Speter 19120425Ssteve 19220425Ssteve/* 19375577Skris * aslcache - local cache support 19420425Ssteve */ 19520425Sstevechar * 1961556SrgrimesUtLocalCacheCalloc ( 19720425Ssteve UINT32 Length); 1981556Srgrimes 1991556SrgrimesACPI_PARSE_OBJECT * 200UtParseOpCacheCalloc ( 201 void); 202 203DT_SUBTABLE * 204UtSubtableCacheCalloc ( 205 void); 206 207DT_FIELD * 208UtFieldCacheCalloc ( 209 void); 210 211void 212UtDeleteLocalCaches ( 213 void); 214 215 216/* 217 * aslascii - ascii support 218 */ 219ACPI_STATUS 220FlIsFileAsciiSource ( 221 char *Filename, 222 BOOLEAN DisplayErrors); 223 224 225/* 226 * aslwalks - semantic analysis and parse tree walks 227 */ 228ACPI_STATUS 229AnOtherSemanticAnalysisWalkBegin ( 230 ACPI_PARSE_OBJECT *Op, 231 UINT32 Level, 232 void *Context); 233 234ACPI_STATUS 235AnOtherSemanticAnalysisWalkEnd ( 236 ACPI_PARSE_OBJECT *Op, 237 UINT32 Level, 238 void *Context); 239 240ACPI_STATUS 241AnOperandTypecheckWalkEnd ( 242 ACPI_PARSE_OBJECT *Op, 243 UINT32 Level, 244 void *Context); 245 246ACPI_STATUS 247AnMethodTypingWalkEnd ( 248 ACPI_PARSE_OBJECT *Op, 249 UINT32 Level, 250 void *Context); 251 252 253/* 254 * aslmethod - Control method analysis walk 255 */ 256ACPI_STATUS 257MtMethodAnalysisWalkBegin ( 258 ACPI_PARSE_OBJECT *Op, 259 UINT32 Level, 260 void *Context); 261 262ACPI_STATUS 263MtMethodAnalysisWalkEnd ( 264 ACPI_PARSE_OBJECT *Op, 265 UINT32 Level, 266 void *Context); 267 268UINT32 269MtProcessTypeOp ( 270 ACPI_PARSE_OBJECT *TypeOp); 271 272UINT8 273MtProcessParameterTypeList ( 274 ACPI_PARSE_OBJECT *ParamTypeOp, 275 UINT32 *TypeList); 276 277 278/* 279 * aslbtypes - bitfield data types 280 */ 281UINT32 282AnMapObjTypeToBtype ( 283 ACPI_PARSE_OBJECT *Op); 284 285UINT32 286AnMapArgTypeToBtype ( 287 UINT32 ArgType); 288 289UINT32 290AnGetBtype ( 291 ACPI_PARSE_OBJECT *Op); 292 293void 294AnFormatBtype ( 295 char *Buffer, 296 UINT32 Btype); 297 298 299/* 300 * aslanalyze - Support functions for parse tree walks 301 */ 302void 303AnCheckId ( 304 ACPI_PARSE_OBJECT *Op, 305 ACPI_NAME Type); 306 307/* Values for Type argument above */ 308 309#define ASL_TYPE_HID 0 310#define ASL_TYPE_CID 1 311 312BOOLEAN 313AnIsInternalMethod ( 314 ACPI_PARSE_OBJECT *Op); 315 316UINT32 317AnGetInternalMethodReturnType ( 318 ACPI_PARSE_OBJECT *Op); 319 320BOOLEAN 321AnLastStatementIsReturn ( 322 ACPI_PARSE_OBJECT *Op); 323 324void 325AnCheckMethodReturnValue ( 326 ACPI_PARSE_OBJECT *Op, 327 const ACPI_OPCODE_INFO *OpInfo, 328 ACPI_PARSE_OBJECT *ArgOp, 329 UINT32 RequiredBtypes, 330 UINT32 ThisNodeBtype); 331 332BOOLEAN 333AnIsResultUsed ( 334 ACPI_PARSE_OBJECT *Op); 335 336void 337ApCheckForGpeNameConflict ( 338 ACPI_PARSE_OBJECT *Op); 339 340void 341ApCheckRegMethod ( 342 ACPI_PARSE_OBJECT *Op); 343 344BOOLEAN 345ApFindNameInScope ( 346 char *Name, 347 ACPI_PARSE_OBJECT *Op); 348 349BOOLEAN 350ApFindNameInDeviceTree ( 351 char *Name, 352 ACPI_PARSE_OBJECT *Op); 353 354/* 355 * aslerror - error handling/reporting 356 */ 357void 358AslAbort ( 359 void); 360 361void 362AslDualParseOpError ( 363 UINT8 Level, 364 UINT16 MainMessageId, 365 ACPI_PARSE_OBJECT *MainOp, 366 char *MainMessage, 367 UINT16 SecondMessageId, 368 ACPI_PARSE_OBJECT *SecondOp, 369 char *SecondaryMessage); 370 371void 372AslError ( 373 UINT8 Level, 374 UINT16 MessageId, 375 ACPI_PARSE_OBJECT *Op, 376 char *ExtraMessage); 377 378void 379AslCheckExpectedExceptions ( 380 void); 381 382ACPI_STATUS 383AslLogExpectedException ( 384 char *MessageIdString); 385 386ACPI_STATUS 387AslElevateException ( 388 char *MessageIdString); 389 390ACPI_STATUS 391AslDisableException ( 392 char *MessageIdString); 393 394BOOLEAN 395AslIsExceptionIgnored ( 396 char *Filename, 397 UINT32 LineNumber, 398 UINT8 Level, 399 UINT16 MessageId); 400 401void 402AslLogExpectedExceptionByLine ( 403 char *MessageIdString); 404 405void 406AslCoreSubsystemError ( 407 ACPI_PARSE_OBJECT *Op, 408 ACPI_STATUS Status, 409 char *ExtraMessage, 410 BOOLEAN Abort); 411 412int 413AslCompilererror( 414 const char *s); 415 416void 417AslCommonError ( 418 UINT8 Level, 419 UINT16 MessageId, 420 UINT32 CurrentLineNumber, 421 UINT32 LogicalLineNumber, 422 UINT32 LogicalByteOffset, 423 UINT32 Column, 424 char *Filename, 425 char *ExtraMessage); 426 427void 428AslCommonError2 ( 429 UINT8 Level, 430 UINT16 MessageId, 431 UINT32 LineNumber, 432 UINT32 Column, 433 char *SourceLine, 434 char *Filename, 435 char *ExtraMessage); 436 437void 438AePrintException ( 439 UINT32 FileId, 440 ASL_ERROR_MSG *Enode, 441 char *Header); 442 443void 444AePrintErrorLog ( 445 UINT32 FileId); 446 447void 448AeClearErrorLog ( 449 void); 450 451 452/* 453 * asllisting - generate all "listing" type files 454 */ 455void 456LsDoListings ( 457 void); 458 459void 460LsWriteNodeToAsmListing ( 461 ACPI_PARSE_OBJECT *Op); 462 463void 464LsWriteNode ( 465 ACPI_PARSE_OBJECT *Op, 466 UINT32 FileId); 467 468void 469LsDumpParseTree ( 470 void); 471 472 473/* 474 * asllistsup - Listing file support utilities 475 */ 476void 477LsDumpAscii ( 478 UINT32 FileId, 479 UINT32 Count, 480 UINT8 *Buffer); 481 482void 483LsDumpAsciiInComment ( 484 UINT32 FileId, 485 UINT32 Count, 486 UINT8 *Buffer); 487 488void 489LsCheckException ( 490 UINT32 LineNumber, 491 UINT32 FileId); 492 493void 494LsFlushListingBuffer ( 495 UINT32 FileId); 496 497void 498LsWriteListingHexBytes ( 499 UINT8 *Buffer, 500 UINT32 Length, 501 UINT32 FileId); 502 503void 504LsWriteSourceLines ( 505 UINT32 ToLineNumber, 506 UINT32 ToLogicalLineNumber, 507 UINT32 FileId); 508 509UINT32 510LsWriteOneSourceLine ( 511 UINT32 FileId); 512 513void 514LsPushNode ( 515 char *Filename); 516 517ASL_LISTING_NODE * 518LsPopNode ( 519 void); 520 521 522/* 523 * aslhex - generate all "hex" output files (C, ASM, ASL) 524 */ 525void 526HxDoHexOutput ( 527 void); 528 529 530/* 531 * aslfold - constant folding 532 */ 533ACPI_STATUS 534OpcAmlConstantWalk ( 535 ACPI_PARSE_OBJECT *Op, 536 UINT32 Level, 537 void *Context); 538 539 540/* 541 * aslmessages - exception strings 542 */ 543const char * 544AeDecodeMessageId ( 545 UINT16 MessageId); 546 547const char * 548AeDecodeExceptionLevel ( 549 UINT8 Level); 550 551UINT16 552AeBuildFullExceptionCode ( 553 UINT8 Level, 554 UINT16 MessageId); 555 556/* 557 * asloffset - generate C offset file for BIOS support 558 */ 559ACPI_STATUS 560LsAmlOffsetWalk ( 561 ACPI_PARSE_OBJECT *Op, 562 UINT32 Level, 563 void *Context); 564 565void 566LsDoOffsetTableHeader ( 567 UINT32 FileId); 568 569void 570LsDoOffsetTableFooter ( 571 UINT32 FileId); 572 573 574/* 575 * aslopcodes - generate AML opcodes 576 */ 577ACPI_STATUS 578OpcAmlOpcodeWalk ( 579 ACPI_PARSE_OBJECT *Op, 580 UINT32 Level, 581 void *Context); 582 583ACPI_STATUS 584OpcAmlOpcodeUpdateWalk ( 585 ACPI_PARSE_OBJECT *Op, 586 UINT32 Level, 587 void *Context); 588 589void 590OpcGenerateAmlOpcode ( 591 ACPI_PARSE_OBJECT *Op); 592 593UINT32 594OpcSetOptimalIntegerSize ( 595 ACPI_PARSE_OBJECT *Op); 596 597void 598OpcGetIntegerWidth ( 599 ACPI_PARSE_OBJECT *Op); 600 601 602/* 603 * asloperands - generate AML operands for the AML opcodes 604 */ 605ACPI_PARSE_OBJECT * 606UtGetArg ( 607 ACPI_PARSE_OBJECT *Op, 608 UINT32 Argn); 609 610void 611OpnGenerateAmlOperands ( 612 ACPI_PARSE_OBJECT *Op); 613 614void 615OpnDoPackage ( 616 ACPI_PARSE_OBJECT *Op); 617 618 619/* 620 * aslopt - optimization 621 */ 622void 623OptOptimizeNamePath ( 624 ACPI_PARSE_OBJECT *Op, 625 UINT32 Flags, 626 ACPI_WALK_STATE *WalkState, 627 char *AmlNameString, 628 ACPI_NAMESPACE_NODE *TargetNode); 629 630 631/* 632 * aslpld - ToPLD macro support 633 */ 634void 635OpcDoPld ( 636 ACPI_PARSE_OBJECT *Op); 637 638 639/* 640 * aslprintf - Printf/Fprintf macros 641 */ 642void 643OpcDoPrintf ( 644 ACPI_PARSE_OBJECT *Op); 645 646void 647OpcDoFprintf ( 648 ACPI_PARSE_OBJECT *Op); 649 650 651/* 652 * aslprune - parse tree pruner 653 */ 654void 655AslPruneParseTree ( 656 UINT32 PruneDepth, 657 UINT32 Type); 658 659 660/* 661 * aslcodegen - code generation 662 */ 663void 664CgGenerateAmlOutput ( 665 void); 666 667void 668CgLocalWriteAmlData ( 669 ACPI_PARSE_OBJECT *Op, 670 void *Buffer, 671 UINT32 Length); 672 673 674/* 675 * aslfile 676 */ 677void 678FlOpenFile ( 679 UINT32 FileId, 680 char *Filename, 681 char *Mode); 682 683 684/* 685 * asllength - calculate/adjust AML package lengths 686 */ 687ACPI_STATUS 688LnPackageLengthWalk ( 689 ACPI_PARSE_OBJECT *Op, 690 UINT32 Level, 691 void *Context); 692 693ACPI_STATUS 694LnInitLengthsWalk ( 695 ACPI_PARSE_OBJECT *Op, 696 UINT32 Level, 697 void *Context); 698 699void 700CgGenerateAmlLengths ( 701 ACPI_PARSE_OBJECT *Op); 702 703 704/* 705 * aslmap - opcode mappings and reserved method names 706 */ 707ACPI_OBJECT_TYPE 708AslMapNamedOpcodeToDataType ( 709 UINT16 Opcode); 710 711 712/* 713 * aslpredef - ACPI predefined names support 714 */ 715BOOLEAN 716ApCheckForPredefinedMethod ( 717 ACPI_PARSE_OBJECT *Op, 718 ASL_METHOD_INFO *MethodInfo); 719 720void 721ApCheckPredefinedReturnValue ( 722 ACPI_PARSE_OBJECT *Op, 723 ASL_METHOD_INFO *MethodInfo); 724 725UINT32 726ApCheckForPredefinedName ( 727 ACPI_PARSE_OBJECT *Op, 728 char *Name); 729 730void 731ApCheckForPredefinedObject ( 732 ACPI_PARSE_OBJECT *Op, 733 char *Name); 734 735ACPI_STATUS 736ApCheckObjectType ( 737 const char *PredefinedName, 738 ACPI_PARSE_OBJECT *Op, 739 UINT32 ExpectedBtypes, 740 UINT32 PackageIndex); 741 742void 743ApDisplayReservedNames ( 744 void); 745 746 747/* 748 * aslprepkg - ACPI predefined names support for packages 749 */ 750void 751ApCheckPackage ( 752 ACPI_PARSE_OBJECT *ParentOp, 753 const ACPI_PREDEFINED_INFO *Predefined); 754 755 756/* 757 * asltransform - parse tree transformations 758 */ 759ACPI_STATUS 760TrAmlTransformWalkBegin ( 761 ACPI_PARSE_OBJECT *Op, 762 UINT32 Level, 763 void *Context); 764 765ACPI_STATUS 766TrAmlTransformWalkEnd ( 767 ACPI_PARSE_OBJECT *Op, 768 UINT32 Level, 769 void *Context); 770 771 772/* 773 * aslexternal - External opcode support 774 */ 775ACPI_STATUS 776ExAmlExternalWalkBegin ( 777 ACPI_PARSE_OBJECT *Op, 778 UINT32 Level, 779 void *Context); 780 781ACPI_STATUS 782ExAmlExternalWalkEnd ( 783 ACPI_PARSE_OBJECT *Op, 784 UINT32 Level, 785 void *Context); 786 787void 788ExDoExternal ( 789 ACPI_PARSE_OBJECT *Op); 790 791/* Values for "Visitation" parameter above */ 792 793#define ASL_WALK_VISIT_DOWNWARD 0x01 794#define ASL_WALK_VISIT_UPWARD 0x02 795#define ASL_WALK_VISIT_DB_SEPARATELY 0x04 796#define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD) 797 798 799/* 800 * aslparseop.c - Parse op create/allocate/cache 801 */ 802ACPI_PARSE_OBJECT * 803TrCreateOp ( 804 UINT32 ParseOpcode, 805 UINT32 NumChildren, 806 ...); 807 808ACPI_PARSE_OBJECT * 809TrCreateLeafOp ( 810 UINT32 ParseOpcode); 811 812ACPI_PARSE_OBJECT * 813TrCreateNullTargetOp ( 814 void); 815 816ACPI_PARSE_OBJECT * 817TrCreateAssignmentOp ( 818 ACPI_PARSE_OBJECT *Target, 819 ACPI_PARSE_OBJECT *Source); 820 821ACPI_PARSE_OBJECT * 822TrCreateTargetOp ( 823 ACPI_PARSE_OBJECT *OriginalOp, 824 ACPI_PARSE_OBJECT *ParentOp); 825 826ACPI_PARSE_OBJECT * 827TrCreateValuedLeafOp ( 828 UINT32 ParseOpcode, 829 UINT64 Value); 830 831ACPI_PARSE_OBJECT * 832TrCreateConstantLeafOp ( 833 UINT32 ParseOpcode); 834 835ACPI_PARSE_OBJECT * 836TrAllocateOp ( 837 UINT32 ParseOpcode); 838 839void 840TrPrintOpFlags ( 841 UINT32 Flags, 842 UINT32 OutputLevel); 843 844 845/* 846 * asltree.c - Parse tree management 847 */ 848void 849TrSetOpParent ( 850 ACPI_PARSE_OBJECT *Op, 851 ACPI_PARSE_OBJECT *ParentOp); 852 853ACPI_PARSE_OBJECT * 854TrSetOpIntegerValue ( 855 UINT32 ParseOpcode, 856 ACPI_PARSE_OBJECT *Op); 857 858void 859TrSetOpEndLineNumber ( 860 ACPI_PARSE_OBJECT *Op); 861 862void 863TrSetOpCurrentFilename ( 864 ACPI_PARSE_OBJECT *Op); 865 866void 867TrSetOpIntegerWidth ( 868 ACPI_PARSE_OBJECT *TableSignature, 869 ACPI_PARSE_OBJECT *Revision); 870 871ACPI_PARSE_OBJECT * 872TrLinkOpChildren ( 873 ACPI_PARSE_OBJECT *Op, 874 UINT32 NumChildren, 875 ...); 876 877ACPI_PARSE_OBJECT * 878TrLinkPeerOp ( 879 ACPI_PARSE_OBJECT *Op1, 880 ACPI_PARSE_OBJECT *Op2); 881 882ACPI_PARSE_OBJECT * 883TrLinkChildOp ( 884 ACPI_PARSE_OBJECT *Op1, 885 ACPI_PARSE_OBJECT *Op2); 886 887ACPI_PARSE_OBJECT * 888TrSetOpFlags ( 889 ACPI_PARSE_OBJECT *Op, 890 UINT32 Flags); 891 892ACPI_PARSE_OBJECT * 893TrSetOpAmlLength ( 894 ACPI_PARSE_OBJECT *Op, 895 UINT32 Length); 896 897ACPI_PARSE_OBJECT * 898TrLinkPeerOps ( 899 UINT32 NumPeers, 900 ...); 901 902ACPI_STATUS 903TrWalkParseTree ( 904 ACPI_PARSE_OBJECT *Op, 905 UINT32 Visitation, 906 ASL_WALK_CALLBACK DescendingCallback, 907 ASL_WALK_CALLBACK AscendingCallback, 908 void *Context); 909 910 911/* 912 * aslfiles - File I/O support 913 */ 914void 915FlAddIncludeDirectory ( 916 char *Dir); 917 918char * 919FlMergePathnames ( 920 char *PrefixDir, 921 char *FilePathname); 922 923void 924FlOpenIncludeFile ( 925 ACPI_PARSE_OBJECT *Op); 926 927void 928FlFileError ( 929 UINT32 FileId, 930 UINT8 ErrorId); 931 932UINT32 933FlGetFileSize ( 934 UINT32 FileId); 935 936ACPI_STATUS 937FlReadFile ( 938 UINT32 FileId, 939 void *Buffer, 940 UINT32 Length); 941 942void 943FlWriteFile ( 944 UINT32 FileId, 945 void *Buffer, 946 UINT32 Length); 947 948void 949FlSeekFile ( 950 UINT32 FileId, 951 long Offset); 952 953void 954FlSeekFileSet ( 955 UINT32 FileId, 956 long Offset); 957 958void 959FlCloseFile ( 960 UINT32 FileId); 961 962ACPI_PRINTF_LIKE (2) 963void 964FlPrintFile ( 965 UINT32 FileId, 966 char *Format, 967 ...); 968 969void 970FlDeleteFile ( 971 UINT32 FileId); 972 973void 974FlSetLineNumber ( 975 UINT32 LineNumber); 976 977void 978FlSetFilename ( 979 char *Filename); 980 981ACPI_STATUS 982FlOpenInputFile ( 983 char *InputFilename); 984 985ACPI_STATUS 986FlOpenAmlOutputFile ( 987 char *InputFilename); 988 989ACPI_STATUS 990FlOpenMiscOutputFiles ( 991 char *InputFilename); 992 993ACPI_STATUS 994FlInitOneFile ( 995 char *InputFilename); 996 997ASL_FILE_SWITCH_STATUS 998FlSwitchFileSet ( 999 char *InputFilename); 1000 1001FILE * 1002FlGetFileHandle ( 1003 UINT32 OutFileId, 1004 UINT32 InFileId, 1005 char *Filename); 1006 1007ASL_GLOBAL_FILE_NODE * 1008FlGetFileNode ( 1009 UINT32 FileId, 1010 char *Filename); 1011 1012ASL_GLOBAL_FILE_NODE * 1013FlGetCurrentFileNode ( 1014 void); 1015 1016 1017/* 1018 * aslhwmap - hardware map summary 1019 */ 1020void 1021MpEmitMappingInfo ( 1022 void); 1023 1024 1025/* 1026 * asload - load namespace in prep for cross reference 1027 */ 1028ACPI_STATUS 1029LdLoadNamespace ( 1030 ACPI_PARSE_OBJECT *RootOp); 1031 1032/* 1033 * asllookup - namespace lookup functions 1034 */ 1035void 1036LkFindUnreferencedObjects ( 1037 void); 1038 1039 1040/* 1041 * aslhelp - help screens 1042 */ 1043void 1044Usage ( 1045 void); 1046 1047void 1048AslFilenameHelp ( 1049 void); 1050 1051void 1052AslDisassemblyHelp ( 1053 void); 1054 1055 1056/* 1057 * aslnamesp - namespace output file generation 1058 */ 1059ACPI_STATUS 1060NsDisplayNamespace ( 1061 void); 1062 1063void 1064NsSetupNamespaceListing ( 1065 void *Handle); 1066 1067 1068/* 1069 * asloptions - command line processing 1070 */ 1071int 1072AslCommandLine ( 1073 int argc, 1074 char **argv); 1075 1076 1077/* 1078 * aslxref - namespace cross reference 1079 */ 1080ACPI_STATUS 1081XfCrossReferenceNamespace ( 1082 void); 1083 1084 1085/* 1086 * aslxrefout 1087 */ 1088void 1089OtPrintHeaders ( 1090 char *Message); 1091 1092void 1093OtCreateXrefFile ( 1094 void); 1095 1096void 1097OtXrefWalkPart1 ( 1098 ACPI_PARSE_OBJECT *Op, 1099 UINT32 Level, 1100 ASL_METHOD_INFO *MethodInfo); 1101 1102 1103/* 1104 * aslutils - common compiler utilities 1105 */ 1106ACPI_PRINTF_LIKE(2) 1107void 1108DbgPrint ( 1109 UINT32 Type, 1110 char *Format, 1111 ...); 1112 1113/* Type values for above */ 1114 1115#define ASL_DEBUG_OUTPUT 0 1116#define ASL_PARSE_OUTPUT 1 1117#define ASL_TREE_OUTPUT 2 1118 1119BOOLEAN 1120UtIsIdInteger ( 1121 UINT8 *Target); 1122 1123UINT8 1124UtIsBigEndianMachine ( 1125 void); 1126 1127BOOLEAN 1128UtQueryForOverwrite ( 1129 char *Pathname); 1130 1131void 1132UtDumpStringOp ( 1133 ACPI_PARSE_OBJECT *Op, 1134 UINT32 Level); 1135 1136void 1137UtDumpIntegerOp ( 1138 ACPI_PARSE_OBJECT *Op, 1139 UINT32 Level, 1140 UINT32 IntegerLength); 1141 1142void 1143UtDumpBasicOp ( 1144 ACPI_PARSE_OBJECT *Op, 1145 UINT32 Level); 1146 1147ACPI_NAMESPACE_NODE * 1148UtGetParentMethodNode ( 1149 ACPI_NAMESPACE_NODE *Node); 1150 1151ACPI_PARSE_OBJECT * 1152UtGetParentMethodOp ( 1153 ACPI_PARSE_OBJECT *Op); 1154 1155BOOLEAN 1156UtNodeIsDescendantOf ( 1157 ACPI_NAMESPACE_NODE *Node1, 1158 ACPI_NAMESPACE_NODE *Node2); 1159 1160void 1161UtDisplaySupportedTables ( 1162 void); 1163 1164void 1165UtDisplayConstantOpcodes ( 1166 void); 1167 1168UINT8 1169UtBeginEvent ( 1170 char *Name); 1171 1172void 1173UtEndEvent ( 1174 UINT8 Event); 1175 1176void 1177UtDisplaySummary ( 1178 UINT32 FileId); 1179 1180void 1181UtDisplayOneSummary ( 1182 UINT32 FileId, 1183 BOOLEAN DisplayErrorSummary); 1184 1185void 1186UtConvertByteToHex ( 1187 UINT8 RawByte, 1188 UINT8 *Buffer); 1189 1190void 1191UtConvertByteToAsmHex ( 1192 UINT8 RawByte, 1193 UINT8 *Buffer); 1194 1195char * 1196UtGetOpName ( 1197 UINT32 ParseOpcode); 1198 1199void 1200UtSetParseOpName ( 1201 ACPI_PARSE_OBJECT *Op); 1202 1203ACPI_STATUS 1204UtInternalizeName ( 1205 char *ExternalName, 1206 char **ConvertedName); 1207 1208BOOLEAN 1209UtNameContainsAllPrefix ( 1210 ACPI_PARSE_OBJECT *Op); 1211 1212void 1213UtAttachNamepathToOwner ( 1214 ACPI_PARSE_OBJECT *Op, 1215 ACPI_PARSE_OBJECT *NameNode); 1216 1217ACPI_PARSE_OBJECT * 1218UtCheckIntegerRange ( 1219 ACPI_PARSE_OBJECT *Op, 1220 UINT32 LowValue, 1221 UINT32 HighValue); 1222 1223UINT64 1224UtDoConstant ( 1225 char *String); 1226 1227char * 1228AcpiUtStrdup ( 1229 char *String); 1230 1231char * 1232AcpiUtStrcat ( 1233 char *String1, 1234 char *String2); 1235 1236 1237/* 1238 * asluuid - UUID support 1239 */ 1240ACPI_STATUS 1241AuValidateUuid ( 1242 char *InString); 1243 1244ACPI_STATUS 1245AuConvertUuidToString ( 1246 char *UuIdBuffer, 1247 char *OutString); 1248 1249 1250/* 1251 * aslresource - Resource template generation utilities 1252 */ 1253void 1254RsSmallAddressCheck ( 1255 UINT8 Type, 1256 UINT32 Minimum, 1257 UINT32 Maximum, 1258 UINT32 Length, 1259 UINT32 Alignment, 1260 ACPI_PARSE_OBJECT *MinOp, 1261 ACPI_PARSE_OBJECT *MaxOp, 1262 ACPI_PARSE_OBJECT *LengthOp, 1263 ACPI_PARSE_OBJECT *AlignOp, 1264 ACPI_PARSE_OBJECT *Op); 1265 1266void 1267RsLargeAddressCheck ( 1268 UINT64 Minimum, 1269 UINT64 Maximum, 1270 UINT64 Length, 1271 UINT64 Granularity, 1272 UINT8 Flags, 1273 ACPI_PARSE_OBJECT *MinOp, 1274 ACPI_PARSE_OBJECT *MaxOp, 1275 ACPI_PARSE_OBJECT *LengthOp, 1276 ACPI_PARSE_OBJECT *GranOp, 1277 ACPI_PARSE_OBJECT *Op); 1278 1279UINT16 1280RsGetStringDataLength ( 1281 ACPI_PARSE_OBJECT *InitializerOp); 1282 1283ASL_RESOURCE_NODE * 1284RsAllocateResourceNode ( 1285 UINT32 Size); 1286 1287void 1288RsCreateResourceField ( 1289 ACPI_PARSE_OBJECT *Op, 1290 char *Name, 1291 UINT32 ByteOffset, 1292 UINT32 BitOffset, 1293 UINT32 BitLength); 1294 1295void 1296RsSetFlagBits ( 1297 UINT8 *Flags, 1298 ACPI_PARSE_OBJECT *Op, 1299 UINT8 Position, 1300 UINT8 DefaultBit); 1301 1302void 1303RsSetFlagBits16 ( 1304 UINT16 *Flags, 1305 ACPI_PARSE_OBJECT *Op, 1306 UINT8 Position, 1307 UINT8 DefaultBit); 1308 1309ACPI_PARSE_OBJECT * 1310RsCompleteNodeAndGetNext ( 1311 ACPI_PARSE_OBJECT *Op); 1312 1313void 1314RsCheckListForDuplicates ( 1315 ACPI_PARSE_OBJECT *Op); 1316 1317ASL_RESOURCE_NODE * 1318RsDoOneResourceDescriptor ( 1319 ASL_RESOURCE_INFO *Info, 1320 UINT8 *State); 1321 1322/* Values for State above */ 1323 1324#define ACPI_RSTATE_NORMAL 0 1325#define ACPI_RSTATE_START_DEPENDENT 1 1326#define ACPI_RSTATE_DEPENDENT_LIST 2 1327 1328UINT32 1329RsLinkDescriptorChain ( 1330 ASL_RESOURCE_NODE **PreviousRnode, 1331 ASL_RESOURCE_NODE *Rnode); 1332 1333void 1334RsDoResourceTemplate ( 1335 ACPI_PARSE_OBJECT *Op); 1336 1337 1338/* 1339 * aslrestype1 - Miscellaneous Small descriptors 1340 */ 1341ASL_RESOURCE_NODE * 1342RsDoEndTagDescriptor ( 1343 ASL_RESOURCE_INFO *Info); 1344 1345ASL_RESOURCE_NODE * 1346RsDoEndDependentDescriptor ( 1347 ASL_RESOURCE_INFO *Info); 1348 1349ASL_RESOURCE_NODE * 1350RsDoMemory24Descriptor ( 1351 ASL_RESOURCE_INFO *Info); 1352 1353ASL_RESOURCE_NODE * 1354RsDoMemory32Descriptor ( 1355 ASL_RESOURCE_INFO *Info); 1356 1357ASL_RESOURCE_NODE * 1358RsDoMemory32FixedDescriptor ( 1359 ASL_RESOURCE_INFO *Info); 1360 1361ASL_RESOURCE_NODE * 1362RsDoStartDependentDescriptor ( 1363 ASL_RESOURCE_INFO *Info); 1364 1365ASL_RESOURCE_NODE * 1366RsDoStartDependentNoPriDescriptor ( 1367 ASL_RESOURCE_INFO *Info); 1368 1369ASL_RESOURCE_NODE * 1370RsDoVendorSmallDescriptor ( 1371 ASL_RESOURCE_INFO *Info); 1372 1373 1374/* 1375 * aslrestype1i - I/O-related Small descriptors 1376 */ 1377ASL_RESOURCE_NODE * 1378RsDoDmaDescriptor ( 1379 ASL_RESOURCE_INFO *Info); 1380 1381ASL_RESOURCE_NODE * 1382RsDoFixedDmaDescriptor ( 1383 ASL_RESOURCE_INFO *Info); 1384 1385ASL_RESOURCE_NODE * 1386RsDoFixedIoDescriptor ( 1387 ASL_RESOURCE_INFO *Info); 1388 1389ASL_RESOURCE_NODE * 1390RsDoIoDescriptor ( 1391 ASL_RESOURCE_INFO *Info); 1392 1393ASL_RESOURCE_NODE * 1394RsDoIrqDescriptor ( 1395 ASL_RESOURCE_INFO *Info); 1396 1397ASL_RESOURCE_NODE * 1398RsDoIrqNoFlagsDescriptor ( 1399 ASL_RESOURCE_INFO *Info); 1400 1401 1402/* 1403 * aslrestype2 - Large resource descriptors 1404 */ 1405ASL_RESOURCE_NODE * 1406RsDoInterruptDescriptor ( 1407 ASL_RESOURCE_INFO *Info); 1408 1409ASL_RESOURCE_NODE * 1410RsDoVendorLargeDescriptor ( 1411 ASL_RESOURCE_INFO *Info); 1412 1413ASL_RESOURCE_NODE * 1414RsDoGeneralRegisterDescriptor ( 1415 ASL_RESOURCE_INFO *Info); 1416 1417ASL_RESOURCE_NODE * 1418RsDoGpioIntDescriptor ( 1419 ASL_RESOURCE_INFO *Info); 1420 1421ASL_RESOURCE_NODE * 1422RsDoGpioIoDescriptor ( 1423 ASL_RESOURCE_INFO *Info); 1424 1425ASL_RESOURCE_NODE * 1426RsDoI2cSerialBusDescriptor ( 1427 ASL_RESOURCE_INFO *Info); 1428 1429ASL_RESOURCE_NODE * 1430RsDoSpiSerialBusDescriptor ( 1431 ASL_RESOURCE_INFO *Info); 1432 1433ASL_RESOURCE_NODE * 1434RsDoUartSerialBusDescriptor ( 1435 ASL_RESOURCE_INFO *Info); 1436 1437ASL_RESOURCE_NODE * 1438RsDoCsi2SerialBusDescriptor ( 1439 ASL_RESOURCE_INFO *Info); 1440 1441ASL_RESOURCE_NODE * 1442RsDoPinFunctionDescriptor ( 1443 ASL_RESOURCE_INFO *Info); 1444 1445ASL_RESOURCE_NODE * 1446RsDoPinConfigDescriptor ( 1447 ASL_RESOURCE_INFO *Info); 1448 1449ASL_RESOURCE_NODE * 1450RsDoPinGroupDescriptor ( 1451 ASL_RESOURCE_INFO *Info); 1452 1453ASL_RESOURCE_NODE * 1454RsDoPinGroupFunctionDescriptor ( 1455 ASL_RESOURCE_INFO *Info); 1456 1457ASL_RESOURCE_NODE * 1458RsDoPinGroupConfigDescriptor ( 1459 ASL_RESOURCE_INFO *Info); 1460 1461ASL_RESOURCE_NODE * 1462RsDoClockInputDescriptor ( 1463 ASL_RESOURCE_INFO *Info); 1464 1465/* 1466 * aslrestype2d - DWord address descriptors 1467 */ 1468ASL_RESOURCE_NODE * 1469RsDoDwordIoDescriptor ( 1470 ASL_RESOURCE_INFO *Info); 1471 1472ASL_RESOURCE_NODE * 1473RsDoDwordMemoryDescriptor ( 1474 ASL_RESOURCE_INFO *Info); 1475 1476ASL_RESOURCE_NODE * 1477RsDoDwordSpaceDescriptor ( 1478 ASL_RESOURCE_INFO *Info); 1479 1480 1481/* 1482 * aslrestype2e - Extended address descriptors 1483 */ 1484ASL_RESOURCE_NODE * 1485RsDoExtendedIoDescriptor ( 1486 ASL_RESOURCE_INFO *Info); 1487 1488ASL_RESOURCE_NODE * 1489RsDoExtendedMemoryDescriptor ( 1490 ASL_RESOURCE_INFO *Info); 1491 1492ASL_RESOURCE_NODE * 1493RsDoExtendedSpaceDescriptor ( 1494 ASL_RESOURCE_INFO *Info); 1495 1496 1497/* 1498 * aslrestype2q - QWord address descriptors 1499 */ 1500ASL_RESOURCE_NODE * 1501RsDoQwordIoDescriptor ( 1502 ASL_RESOURCE_INFO *Info); 1503 1504ASL_RESOURCE_NODE * 1505RsDoQwordMemoryDescriptor ( 1506 ASL_RESOURCE_INFO *Info); 1507 1508ASL_RESOURCE_NODE * 1509RsDoQwordSpaceDescriptor ( 1510 ASL_RESOURCE_INFO *Info); 1511 1512 1513/* 1514 * aslrestype2w - Word address descriptors 1515 */ 1516ASL_RESOURCE_NODE * 1517RsDoWordIoDescriptor ( 1518 ASL_RESOURCE_INFO *Info); 1519 1520ASL_RESOURCE_NODE * 1521RsDoWordSpaceDescriptor ( 1522 ASL_RESOURCE_INFO *Info); 1523 1524ASL_RESOURCE_NODE * 1525RsDoWordBusNumberDescriptor ( 1526 ASL_RESOURCE_INFO *Info); 1527 1528 1529/* 1530 * Entry to data table compiler subsystem 1531 */ 1532ACPI_STATUS 1533DtDoCompile( 1534 void); 1535 1536ACPI_STATUS 1537DtCreateTemplates ( 1538 char **argv); 1539 1540 1541/* 1542 * ASL/ASL+ converter debug 1543 */ 1544ACPI_PRINTF_LIKE (1) 1545void 1546CvDbgPrint ( 1547 char *Fmt, 1548 ...); 1549 1550 1551#endif /* __ASLCOMPILER_H */ 1552