153289f6aSNate Lawson /****************************************************************************** 253289f6aSNate Lawson * 353289f6aSNate Lawson * Module Name: aslutils -- compiler utilities 453289f6aSNate Lawson * 553289f6aSNate Lawson *****************************************************************************/ 653289f6aSNate Lawson 70d84335fSJung-uk Kim /****************************************************************************** 80d84335fSJung-uk Kim * 90d84335fSJung-uk Kim * 1. Copyright Notice 100d84335fSJung-uk Kim * 11f425b8beSJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. 1253289f6aSNate Lawson * All rights reserved. 1353289f6aSNate Lawson * 140d84335fSJung-uk Kim * 2. License 150d84335fSJung-uk Kim * 160d84335fSJung-uk Kim * 2.1. This is your license from Intel Corp. under its intellectual property 170d84335fSJung-uk Kim * rights. You may have additional license terms from the party that provided 180d84335fSJung-uk Kim * you this software, covering your right to use that party's intellectual 190d84335fSJung-uk Kim * property rights. 200d84335fSJung-uk Kim * 210d84335fSJung-uk Kim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 220d84335fSJung-uk Kim * copy of the source code appearing in this file ("Covered Code") an 230d84335fSJung-uk Kim * irrevocable, perpetual, worldwide license under Intel's copyrights in the 240d84335fSJung-uk Kim * base code distributed originally by Intel ("Original Intel Code") to copy, 250d84335fSJung-uk Kim * make derivatives, distribute, use and display any portion of the Covered 260d84335fSJung-uk Kim * Code in any form, with the right to sublicense such rights; and 270d84335fSJung-uk Kim * 280d84335fSJung-uk Kim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 290d84335fSJung-uk Kim * license (with the right to sublicense), under only those claims of Intel 300d84335fSJung-uk Kim * patents that are infringed by the Original Intel Code, to make, use, sell, 310d84335fSJung-uk Kim * offer to sell, and import the Covered Code and derivative works thereof 320d84335fSJung-uk Kim * solely to the minimum extent necessary to exercise the above copyright 330d84335fSJung-uk Kim * license, and in no event shall the patent license extend to any additions 340d84335fSJung-uk Kim * to or modifications of the Original Intel Code. No other license or right 350d84335fSJung-uk Kim * is granted directly or by implication, estoppel or otherwise; 360d84335fSJung-uk Kim * 370d84335fSJung-uk Kim * The above copyright and patent license is granted only if the following 380d84335fSJung-uk Kim * conditions are met: 390d84335fSJung-uk Kim * 400d84335fSJung-uk Kim * 3. Conditions 410d84335fSJung-uk Kim * 420d84335fSJung-uk Kim * 3.1. Redistribution of Source with Rights to Further Distribute Source. 430d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 440d84335fSJung-uk Kim * Code or modification with rights to further distribute source must include 450d84335fSJung-uk Kim * the above Copyright Notice, the above License, this list of Conditions, 460d84335fSJung-uk Kim * and the following Disclaimer and Export Compliance provision. In addition, 470d84335fSJung-uk Kim * Licensee must cause all Covered Code to which Licensee contributes to 480d84335fSJung-uk Kim * contain a file documenting the changes Licensee made to create that Covered 490d84335fSJung-uk Kim * Code and the date of any change. Licensee must include in that file the 500d84335fSJung-uk Kim * documentation of any changes made by any predecessor Licensee. Licensee 510d84335fSJung-uk Kim * must include a prominent statement that the modification is derived, 520d84335fSJung-uk Kim * directly or indirectly, from Original Intel Code. 530d84335fSJung-uk Kim * 540d84335fSJung-uk Kim * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 550d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 560d84335fSJung-uk Kim * Code or modification without rights to further distribute source must 570d84335fSJung-uk Kim * include the following Disclaimer and Export Compliance provision in the 580d84335fSJung-uk Kim * documentation and/or other materials provided with distribution. In 590d84335fSJung-uk Kim * addition, Licensee may not authorize further sublicense of source of any 600d84335fSJung-uk Kim * portion of the Covered Code, and must include terms to the effect that the 610d84335fSJung-uk Kim * license from Licensee to its licensee is limited to the intellectual 620d84335fSJung-uk Kim * property embodied in the software Licensee provides to its licensee, and 630d84335fSJung-uk Kim * not to intellectual property embodied in modifications its licensee may 640d84335fSJung-uk Kim * make. 650d84335fSJung-uk Kim * 660d84335fSJung-uk Kim * 3.3. Redistribution of Executable. Redistribution in executable form of any 670d84335fSJung-uk Kim * substantial portion of the Covered Code or modification must reproduce the 680d84335fSJung-uk Kim * above Copyright Notice, and the following Disclaimer and Export Compliance 690d84335fSJung-uk Kim * provision in the documentation and/or other materials provided with the 700d84335fSJung-uk Kim * distribution. 710d84335fSJung-uk Kim * 720d84335fSJung-uk Kim * 3.4. Intel retains all right, title, and interest in and to the Original 730d84335fSJung-uk Kim * Intel Code. 740d84335fSJung-uk Kim * 750d84335fSJung-uk Kim * 3.5. Neither the name Intel nor any other trademark owned or controlled by 760d84335fSJung-uk Kim * Intel shall be used in advertising or otherwise to promote the sale, use or 770d84335fSJung-uk Kim * other dealings in products derived from or relating to the Covered Code 780d84335fSJung-uk Kim * without prior written authorization from Intel. 790d84335fSJung-uk Kim * 800d84335fSJung-uk Kim * 4. Disclaimer and Export Compliance 810d84335fSJung-uk Kim * 820d84335fSJung-uk Kim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 830d84335fSJung-uk Kim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 840d84335fSJung-uk Kim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 850d84335fSJung-uk Kim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 860d84335fSJung-uk Kim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 870d84335fSJung-uk Kim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 880d84335fSJung-uk Kim * PARTICULAR PURPOSE. 890d84335fSJung-uk Kim * 900d84335fSJung-uk Kim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 910d84335fSJung-uk Kim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 920d84335fSJung-uk Kim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 930d84335fSJung-uk Kim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 940d84335fSJung-uk Kim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 950d84335fSJung-uk Kim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 960d84335fSJung-uk Kim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 970d84335fSJung-uk Kim * LIMITED REMEDY. 980d84335fSJung-uk Kim * 990d84335fSJung-uk Kim * 4.3. Licensee shall not export, either directly or indirectly, any of this 1000d84335fSJung-uk Kim * software or system incorporating such software without first obtaining any 1010d84335fSJung-uk Kim * required license or other approval from the U. S. Department of Commerce or 1020d84335fSJung-uk Kim * any other agency or department of the United States Government. In the 1030d84335fSJung-uk Kim * event Licensee exports any such software from the United States or 1040d84335fSJung-uk Kim * re-exports any such software from a foreign destination, Licensee shall 1050d84335fSJung-uk Kim * ensure that the distribution and export/re-export of the software is in 1060d84335fSJung-uk Kim * compliance with all laws, regulations, orders, or other restrictions of the 1070d84335fSJung-uk Kim * U.S. Export Administration Regulations. Licensee agrees that neither it nor 1080d84335fSJung-uk Kim * any of its subsidiaries will export/re-export any technical data, process, 1090d84335fSJung-uk Kim * software, or service, directly or indirectly, to any country for which the 1100d84335fSJung-uk Kim * United States government or any agency thereof requires an export license, 1110d84335fSJung-uk Kim * other governmental approval, or letter of assurance, without first obtaining 1120d84335fSJung-uk Kim * such license, approval or letter. 1130d84335fSJung-uk Kim * 1140d84335fSJung-uk Kim ***************************************************************************** 1150d84335fSJung-uk Kim * 1160d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 1170d84335fSJung-uk Kim * following license: 1180d84335fSJung-uk Kim * 119d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without 120d244b227SJung-uk Kim * modification, are permitted provided that the following conditions 121d244b227SJung-uk Kim * are met: 122d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 123d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 124d244b227SJung-uk Kim * without modification. 125d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 126d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 127d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 128d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further 129d244b227SJung-uk Kim * binary redistribution. 130d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 131d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived 132d244b227SJung-uk Kim * from this software without specific prior written permission. 13353289f6aSNate Lawson * 1340d84335fSJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1350d84335fSJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1360d84335fSJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1370d84335fSJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1380d84335fSJung-uk Kim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 1390d84335fSJung-uk Kim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 1400d84335fSJung-uk Kim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1410d84335fSJung-uk Kim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 1420d84335fSJung-uk Kim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1430d84335fSJung-uk Kim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1440d84335fSJung-uk Kim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1450d84335fSJung-uk Kim * 1460d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 147d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 148d244b227SJung-uk Kim * Software Foundation. 14953289f6aSNate Lawson * 1500d84335fSJung-uk Kim *****************************************************************************/ 15153289f6aSNate Lawson 152ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 15353289f6aSNate Lawson #include "aslcompiler.y.h" 154a88e22b7SJung-uk Kim #include <contrib/dev/acpica/include/acdisasm.h> 155ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acnamesp.h> 156ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/amlcode.h> 1573c1812acSJung-uk Kim #include <contrib/dev/acpica/include/acapps.h> 158f8146b88SJung-uk Kim #include <sys/stat.h> 159f8146b88SJung-uk Kim 16053289f6aSNate Lawson 16153289f6aSNate Lawson #define _COMPONENT ACPI_COMPILER 16253289f6aSNate Lawson ACPI_MODULE_NAME ("aslutils") 16353289f6aSNate Lawson 1643f0275a0SJung-uk Kim 165fba7fc7eSJung-uk Kim /* Local prototypes */ 16653289f6aSNate Lawson 167fba7fc7eSJung-uk Kim static void 168fba7fc7eSJung-uk Kim UtPadNameWithUnderscores ( 169fba7fc7eSJung-uk Kim char *NameSeg, 170fba7fc7eSJung-uk Kim char *PaddedNameSeg); 171fba7fc7eSJung-uk Kim 172fba7fc7eSJung-uk Kim static void 173fba7fc7eSJung-uk Kim UtAttachNameseg ( 174fba7fc7eSJung-uk Kim ACPI_PARSE_OBJECT *Op, 175fba7fc7eSJung-uk Kim char *Name); 17653289f6aSNate Lawson 17744b0f624SJung-uk Kim static void 17844b0f624SJung-uk Kim UtDisplayErrorSummary ( 17944b0f624SJung-uk Kim UINT32 FileId); 18044b0f624SJung-uk Kim 18153289f6aSNate Lawson 18253289f6aSNate Lawson /******************************************************************************* 18353289f6aSNate Lawson * 184f8146b88SJung-uk Kim * FUNCTION: UtIsBigEndianMachine 185f8146b88SJung-uk Kim * 186f8146b88SJung-uk Kim * PARAMETERS: None 187f8146b88SJung-uk Kim * 188f8146b88SJung-uk Kim * RETURN: TRUE if machine is big endian 189f8146b88SJung-uk Kim * FALSE if machine is little endian 190f8146b88SJung-uk Kim * 191f8146b88SJung-uk Kim * DESCRIPTION: Detect whether machine is little endian or big endian. 192f8146b88SJung-uk Kim * 193f8146b88SJung-uk Kim ******************************************************************************/ 194f8146b88SJung-uk Kim 195f8146b88SJung-uk Kim UINT8 196f8146b88SJung-uk Kim UtIsBigEndianMachine ( 197f8146b88SJung-uk Kim void) 198f8146b88SJung-uk Kim { 199f8146b88SJung-uk Kim union { 200f8146b88SJung-uk Kim UINT32 Integer; 201f8146b88SJung-uk Kim UINT8 Bytes[4]; 202f8146b88SJung-uk Kim } Overlay = {0xFF000000}; 203f8146b88SJung-uk Kim 204f8146b88SJung-uk Kim 205f8146b88SJung-uk Kim return (Overlay.Bytes[0]); /* Returns 0xFF (TRUE) for big endian */ 206f8146b88SJung-uk Kim } 207f8146b88SJung-uk Kim 208f8146b88SJung-uk Kim 209f8146b88SJung-uk Kim /****************************************************************************** 210f8146b88SJung-uk Kim * 211f8146b88SJung-uk Kim * FUNCTION: UtQueryForOverwrite 212f8146b88SJung-uk Kim * 213f8146b88SJung-uk Kim * PARAMETERS: Pathname - Output filename 214f8146b88SJung-uk Kim * 215f8146b88SJung-uk Kim * RETURN: TRUE if file does not exist or overwrite is authorized 216f8146b88SJung-uk Kim * 217f8146b88SJung-uk Kim * DESCRIPTION: Query for file overwrite if it already exists. 218f8146b88SJung-uk Kim * 219f8146b88SJung-uk Kim ******************************************************************************/ 220f8146b88SJung-uk Kim 221f8146b88SJung-uk Kim BOOLEAN 222f8146b88SJung-uk Kim UtQueryForOverwrite ( 223f8146b88SJung-uk Kim char *Pathname) 224f8146b88SJung-uk Kim { 225f8146b88SJung-uk Kim struct stat StatInfo; 226a009b7dcSJung-uk Kim int InChar; 227f8146b88SJung-uk Kim 228f8146b88SJung-uk Kim 229f8146b88SJung-uk Kim if (!stat (Pathname, &StatInfo)) 230f8146b88SJung-uk Kim { 231f8146b88SJung-uk Kim fprintf (stderr, "Target file \"%s\" already exists, overwrite? [y|n] ", 232f8146b88SJung-uk Kim Pathname); 233f8146b88SJung-uk Kim 234a009b7dcSJung-uk Kim InChar = fgetc (stdin); 235a009b7dcSJung-uk Kim if (InChar == '\n') 236a009b7dcSJung-uk Kim { 237a009b7dcSJung-uk Kim InChar = fgetc (stdin); 238a009b7dcSJung-uk Kim } 239a009b7dcSJung-uk Kim 240a009b7dcSJung-uk Kim if ((InChar != 'y') && (InChar != 'Y')) 241f8146b88SJung-uk Kim { 242f8146b88SJung-uk Kim return (FALSE); 243f8146b88SJung-uk Kim } 244f8146b88SJung-uk Kim } 245f8146b88SJung-uk Kim 246f8146b88SJung-uk Kim return (TRUE); 247f8146b88SJung-uk Kim } 248f8146b88SJung-uk Kim 249f8146b88SJung-uk Kim 250f8146b88SJung-uk Kim /******************************************************************************* 251f8146b88SJung-uk Kim * 252835b56bfSJung-uk Kim * FUNCTION: UtNodeIsDescendantOf 253835b56bfSJung-uk Kim * 254835b56bfSJung-uk Kim * PARAMETERS: Node1 - Child node 255835b56bfSJung-uk Kim * Node2 - Possible parent node 256835b56bfSJung-uk Kim * 257835b56bfSJung-uk Kim * RETURN: Boolean 258835b56bfSJung-uk Kim * 259835b56bfSJung-uk Kim * DESCRIPTION: Returns TRUE if Node1 is a descendant of Node2. Otherwise, 260835b56bfSJung-uk Kim * return FALSE. Note, we assume a NULL Node2 element to be the 261835b56bfSJung-uk Kim * topmost (root) scope. All nodes are descendants of the root. 262835b56bfSJung-uk Kim * Note: Nodes at the same level (siblings) are not considered 263835b56bfSJung-uk Kim * descendants. 264835b56bfSJung-uk Kim * 265835b56bfSJung-uk Kim ******************************************************************************/ 266835b56bfSJung-uk Kim 267835b56bfSJung-uk Kim BOOLEAN 268835b56bfSJung-uk Kim UtNodeIsDescendantOf ( 269835b56bfSJung-uk Kim ACPI_NAMESPACE_NODE *Node1, 270835b56bfSJung-uk Kim ACPI_NAMESPACE_NODE *Node2) 271835b56bfSJung-uk Kim { 272835b56bfSJung-uk Kim 273835b56bfSJung-uk Kim if (Node1 == Node2) 274835b56bfSJung-uk Kim { 275835b56bfSJung-uk Kim return (FALSE); 276835b56bfSJung-uk Kim } 277835b56bfSJung-uk Kim 278835b56bfSJung-uk Kim if (!Node2) 279835b56bfSJung-uk Kim { 280835b56bfSJung-uk Kim return (TRUE); /* All nodes descend from the root */ 281835b56bfSJung-uk Kim } 282835b56bfSJung-uk Kim 283835b56bfSJung-uk Kim /* Walk upward until the root is reached or parent is found */ 284835b56bfSJung-uk Kim 285835b56bfSJung-uk Kim while (Node1) 286835b56bfSJung-uk Kim { 287835b56bfSJung-uk Kim if (Node1 == Node2) 288835b56bfSJung-uk Kim { 289835b56bfSJung-uk Kim return (TRUE); 290835b56bfSJung-uk Kim } 291835b56bfSJung-uk Kim 292835b56bfSJung-uk Kim Node1 = Node1->Parent; 293835b56bfSJung-uk Kim } 294835b56bfSJung-uk Kim 295835b56bfSJung-uk Kim return (FALSE); 296835b56bfSJung-uk Kim } 297835b56bfSJung-uk Kim 298835b56bfSJung-uk Kim 299835b56bfSJung-uk Kim /******************************************************************************* 300835b56bfSJung-uk Kim * 301ec0234b4SJung-uk Kim * FUNCTION: UtGetParentMethodNode 302835b56bfSJung-uk Kim * 303835b56bfSJung-uk Kim * PARAMETERS: Node - Namespace node for any object 304835b56bfSJung-uk Kim * 305835b56bfSJung-uk Kim * RETURN: Namespace node for the parent method 306835b56bfSJung-uk Kim * NULL - object is not within a method 307835b56bfSJung-uk Kim * 308835b56bfSJung-uk Kim * DESCRIPTION: Find the parent (owning) method node for a namespace object 309835b56bfSJung-uk Kim * 310835b56bfSJung-uk Kim ******************************************************************************/ 311835b56bfSJung-uk Kim 312ec0234b4SJung-uk Kim ACPI_NAMESPACE_NODE * 313ec0234b4SJung-uk Kim UtGetParentMethodNode ( 314835b56bfSJung-uk Kim ACPI_NAMESPACE_NODE *Node) 315835b56bfSJung-uk Kim { 316835b56bfSJung-uk Kim ACPI_NAMESPACE_NODE *ParentNode; 317835b56bfSJung-uk Kim 318835b56bfSJung-uk Kim 319835b56bfSJung-uk Kim if (!Node) 320835b56bfSJung-uk Kim { 321835b56bfSJung-uk Kim return (NULL); 322835b56bfSJung-uk Kim } 323835b56bfSJung-uk Kim 324835b56bfSJung-uk Kim /* Walk upward until a method is found, or the root is reached */ 325835b56bfSJung-uk Kim 326835b56bfSJung-uk Kim ParentNode = Node->Parent; 327835b56bfSJung-uk Kim while (ParentNode) 328835b56bfSJung-uk Kim { 329835b56bfSJung-uk Kim if (ParentNode->Type == ACPI_TYPE_METHOD) 330835b56bfSJung-uk Kim { 331835b56bfSJung-uk Kim return (ParentNode); 332835b56bfSJung-uk Kim } 333835b56bfSJung-uk Kim 334835b56bfSJung-uk Kim ParentNode = ParentNode->Parent; 335835b56bfSJung-uk Kim } 336835b56bfSJung-uk Kim 337835b56bfSJung-uk Kim return (NULL); /* Object is not within a control method */ 338835b56bfSJung-uk Kim } 339835b56bfSJung-uk Kim 340835b56bfSJung-uk Kim 341835b56bfSJung-uk Kim /******************************************************************************* 342835b56bfSJung-uk Kim * 343ec0234b4SJung-uk Kim * FUNCTION: UtGetParentMethodOp 344ec0234b4SJung-uk Kim * 345ec0234b4SJung-uk Kim * PARAMETERS: Op - Parse Op to be checked 346ec0234b4SJung-uk Kim * 347ec0234b4SJung-uk Kim * RETURN: Control method Op if found. NULL otherwise 348ec0234b4SJung-uk Kim * 349ec0234b4SJung-uk Kim * DESCRIPTION: Find the control method parent of a parse op. Returns NULL if 350ec0234b4SJung-uk Kim * the input Op is not within a control method. 351ec0234b4SJung-uk Kim * 352ec0234b4SJung-uk Kim ******************************************************************************/ 353ec0234b4SJung-uk Kim 354ec0234b4SJung-uk Kim ACPI_PARSE_OBJECT * 355ec0234b4SJung-uk Kim UtGetParentMethodOp ( 356ec0234b4SJung-uk Kim ACPI_PARSE_OBJECT *Op) 357ec0234b4SJung-uk Kim { 358ec0234b4SJung-uk Kim ACPI_PARSE_OBJECT *NextOp; 359ec0234b4SJung-uk Kim 360ec0234b4SJung-uk Kim 361ec0234b4SJung-uk Kim NextOp = Op->Asl.Parent; 362ec0234b4SJung-uk Kim while (NextOp) 363ec0234b4SJung-uk Kim { 364ec0234b4SJung-uk Kim if (NextOp->Asl.AmlOpcode == AML_METHOD_OP) 365ec0234b4SJung-uk Kim { 366ec0234b4SJung-uk Kim return (NextOp); 367ec0234b4SJung-uk Kim } 368ec0234b4SJung-uk Kim 369ec0234b4SJung-uk Kim NextOp = NextOp->Asl.Parent; 370ec0234b4SJung-uk Kim } 371ec0234b4SJung-uk Kim 372ec0234b4SJung-uk Kim return (NULL); /* No parent method found */ 373ec0234b4SJung-uk Kim } 374ec0234b4SJung-uk Kim 375ec0234b4SJung-uk Kim 376ec0234b4SJung-uk Kim /******************************************************************************* 377ec0234b4SJung-uk Kim * 378a88e22b7SJung-uk Kim * FUNCTION: UtDisplaySupportedTables 379a88e22b7SJung-uk Kim * 380a88e22b7SJung-uk Kim * PARAMETERS: None 381a88e22b7SJung-uk Kim * 382a88e22b7SJung-uk Kim * RETURN: None 383a88e22b7SJung-uk Kim * 384a88e22b7SJung-uk Kim * DESCRIPTION: Print all supported ACPI table names. 385a88e22b7SJung-uk Kim * 386a88e22b7SJung-uk Kim ******************************************************************************/ 387a88e22b7SJung-uk Kim 388a88e22b7SJung-uk Kim void 389a88e22b7SJung-uk Kim UtDisplaySupportedTables ( 390a88e22b7SJung-uk Kim void) 391a88e22b7SJung-uk Kim { 392a371a5fdSJung-uk Kim const AH_TABLE *TableData; 3931df130f1SJung-uk Kim UINT32 i; 394a88e22b7SJung-uk Kim 395a88e22b7SJung-uk Kim 3961df130f1SJung-uk Kim printf ("\nACPI tables supported by iASL version %8.8X:\n" 3971df130f1SJung-uk Kim " (Compiler, Disassembler, Template Generator)\n\n", 3981df130f1SJung-uk Kim ACPI_CA_VERSION); 399a88e22b7SJung-uk Kim 400a371a5fdSJung-uk Kim /* All ACPI tables with the common table header */ 401a88e22b7SJung-uk Kim 402a371a5fdSJung-uk Kim printf ("\n Supported ACPI tables:\n"); 4036f1f1a63SJung-uk Kim for (TableData = AcpiGbl_SupportedTables, i = 1; 404a371a5fdSJung-uk Kim TableData->Signature; TableData++, i++) 405a88e22b7SJung-uk Kim { 406a371a5fdSJung-uk Kim printf ("%8u) %s %s\n", i, 407a371a5fdSJung-uk Kim TableData->Signature, TableData->Description); 408a88e22b7SJung-uk Kim } 409a88e22b7SJung-uk Kim } 410a88e22b7SJung-uk Kim 411a88e22b7SJung-uk Kim 412a88e22b7SJung-uk Kim /******************************************************************************* 413a88e22b7SJung-uk Kim * 414f38b0f21SJung-uk Kim * FUNCTION: UtDisplayConstantOpcodes 41553289f6aSNate Lawson * 41653289f6aSNate Lawson * PARAMETERS: None 41753289f6aSNate Lawson * 41853289f6aSNate Lawson * RETURN: None 41953289f6aSNate Lawson * 42053289f6aSNate Lawson * DESCRIPTION: Print AML opcodes that can be used in constant expressions. 42153289f6aSNate Lawson * 42253289f6aSNate Lawson ******************************************************************************/ 42353289f6aSNate Lawson 42453289f6aSNate Lawson void 42553289f6aSNate Lawson UtDisplayConstantOpcodes ( 42653289f6aSNate Lawson void) 42753289f6aSNate Lawson { 42853289f6aSNate Lawson UINT32 i; 42953289f6aSNate Lawson 430fba7fc7eSJung-uk Kim 43153289f6aSNate Lawson printf ("Constant expression opcode information\n\n"); 43253289f6aSNate Lawson 43353289f6aSNate Lawson for (i = 0; i < sizeof (AcpiGbl_AmlOpInfo) / sizeof (ACPI_OPCODE_INFO); i++) 43453289f6aSNate Lawson { 43553289f6aSNate Lawson if (AcpiGbl_AmlOpInfo[i].Flags & AML_CONSTANT) 43653289f6aSNate Lawson { 43753289f6aSNate Lawson printf ("%s\n", AcpiGbl_AmlOpInfo[i].Name); 43853289f6aSNate Lawson } 43953289f6aSNate Lawson } 44053289f6aSNate Lawson } 44153289f6aSNate Lawson 44253289f6aSNate Lawson 44353289f6aSNate Lawson /******************************************************************************* 44453289f6aSNate Lawson * 44553289f6aSNate Lawson * FUNCTION: UtBeginEvent 44653289f6aSNate Lawson * 447fba7fc7eSJung-uk Kim * PARAMETERS: Name - Ascii name of this event 44853289f6aSNate Lawson * 449f38b0f21SJung-uk Kim * RETURN: Event number (integer index) 45053289f6aSNate Lawson * 45153289f6aSNate Lawson * DESCRIPTION: Saves the current time with this event 45253289f6aSNate Lawson * 45353289f6aSNate Lawson ******************************************************************************/ 45453289f6aSNate Lawson 455fba7fc7eSJung-uk Kim UINT8 45653289f6aSNate Lawson UtBeginEvent ( 45753289f6aSNate Lawson char *Name) 45853289f6aSNate Lawson { 45953289f6aSNate Lawson 460fba7fc7eSJung-uk Kim if (AslGbl_NextEvent >= ASL_NUM_EVENTS) 461fba7fc7eSJung-uk Kim { 462fba7fc7eSJung-uk Kim AcpiOsPrintf ("Ran out of compiler event structs!\n"); 463fba7fc7eSJung-uk Kim return (AslGbl_NextEvent); 464fba7fc7eSJung-uk Kim } 465fba7fc7eSJung-uk Kim 466fba7fc7eSJung-uk Kim /* Init event with current (start) time */ 467fba7fc7eSJung-uk Kim 468fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].StartTime = AcpiOsGetTimer (); 469fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].EventName = Name; 470fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].Valid = TRUE; 471fba7fc7eSJung-uk Kim return (AslGbl_NextEvent++); 47253289f6aSNate Lawson } 47353289f6aSNate Lawson 47453289f6aSNate Lawson 47553289f6aSNate Lawson /******************************************************************************* 47653289f6aSNate Lawson * 47753289f6aSNate Lawson * FUNCTION: UtEndEvent 47853289f6aSNate Lawson * 47953289f6aSNate Lawson * PARAMETERS: Event - Event number (integer index) 48053289f6aSNate Lawson * 48153289f6aSNate Lawson * RETURN: None 48253289f6aSNate Lawson * 48353289f6aSNate Lawson * DESCRIPTION: Saves the current time (end time) with this event 48453289f6aSNate Lawson * 48553289f6aSNate Lawson ******************************************************************************/ 48653289f6aSNate Lawson 48753289f6aSNate Lawson void 48853289f6aSNate Lawson UtEndEvent ( 489fba7fc7eSJung-uk Kim UINT8 Event) 49053289f6aSNate Lawson { 49153289f6aSNate Lawson 492fba7fc7eSJung-uk Kim if (Event >= ASL_NUM_EVENTS) 493fba7fc7eSJung-uk Kim { 494fba7fc7eSJung-uk Kim return; 495fba7fc7eSJung-uk Kim } 496fba7fc7eSJung-uk Kim 497fba7fc7eSJung-uk Kim /* Insert end time for event */ 498fba7fc7eSJung-uk Kim 499fba7fc7eSJung-uk Kim AslGbl_Events[Event].EndTime = AcpiOsGetTimer (); 50053289f6aSNate Lawson } 50153289f6aSNate Lawson 50253289f6aSNate Lawson 50353289f6aSNate Lawson /******************************************************************************* 50453289f6aSNate Lawson * 50553289f6aSNate Lawson * FUNCTION: DbgPrint 50653289f6aSNate Lawson * 507fba7fc7eSJung-uk Kim * PARAMETERS: Type - Type of output 508fba7fc7eSJung-uk Kim * Fmt - Printf format string 50953289f6aSNate Lawson * ... - variable printf list 51053289f6aSNate Lawson * 51153289f6aSNate Lawson * RETURN: None 51253289f6aSNate Lawson * 51353289f6aSNate Lawson * DESCRIPTION: Conditional print statement. Prints to stderr only if the 51453289f6aSNate Lawson * debug flag is set. 51553289f6aSNate Lawson * 51653289f6aSNate Lawson ******************************************************************************/ 51753289f6aSNate Lawson 51853289f6aSNate Lawson void 51953289f6aSNate Lawson DbgPrint ( 52053289f6aSNate Lawson UINT32 Type, 52153289f6aSNate Lawson char *Fmt, 52253289f6aSNate Lawson ...) 52353289f6aSNate Lawson { 52453289f6aSNate Lawson va_list Args; 52553289f6aSNate Lawson 52653289f6aSNate Lawson 5276f1f1a63SJung-uk Kim if (!AslGbl_DebugFlag) 52853289f6aSNate Lawson { 52953289f6aSNate Lawson return; 53053289f6aSNate Lawson } 53153289f6aSNate Lawson 53253289f6aSNate Lawson if ((Type == ASL_PARSE_OUTPUT) && 53353289f6aSNate Lawson (!(AslCompilerdebug))) 53453289f6aSNate Lawson { 53553289f6aSNate Lawson return; 53653289f6aSNate Lawson } 53753289f6aSNate Lawson 5388d744e47SJung-uk Kim va_start (Args, Fmt); 53953289f6aSNate Lawson (void) vfprintf (stderr, Fmt, Args); 54053289f6aSNate Lawson va_end (Args); 54153289f6aSNate Lawson return; 54253289f6aSNate Lawson } 54353289f6aSNate Lawson 54453289f6aSNate Lawson 54553289f6aSNate Lawson /******************************************************************************* 54653289f6aSNate Lawson * 54753289f6aSNate Lawson * FUNCTION: UtSetParseOpName 54853289f6aSNate Lawson * 549f38b0f21SJung-uk Kim * PARAMETERS: Op - Parse op to be named. 55053289f6aSNate Lawson * 55153289f6aSNate Lawson * RETURN: None 55253289f6aSNate Lawson * 55353289f6aSNate Lawson * DESCRIPTION: Insert the ascii name of the parse opcode 55453289f6aSNate Lawson * 55553289f6aSNate Lawson ******************************************************************************/ 55653289f6aSNate Lawson 55753289f6aSNate Lawson void 55853289f6aSNate Lawson UtSetParseOpName ( 55953289f6aSNate Lawson ACPI_PARSE_OBJECT *Op) 56053289f6aSNate Lawson { 561fba7fc7eSJung-uk Kim 562f1db5ef7SJung-uk Kim AcpiUtSafeStrncpy (Op->Asl.ParseOpName, UtGetOpName (Op->Asl.ParseOpcode), 5631a39cfb0SJung-uk Kim ACPI_MAX_PARSEOP_NAME); 56453289f6aSNate Lawson } 56553289f6aSNate Lawson 56653289f6aSNate Lawson 56753289f6aSNate Lawson /******************************************************************************* 56853289f6aSNate Lawson * 56944b0f624SJung-uk Kim * FUNCTION: UtDisplayOneSummary 57053289f6aSNate Lawson * 571fba7fc7eSJung-uk Kim * PARAMETERS: FileID - ID of outpout file 57253289f6aSNate Lawson * 57353289f6aSNate Lawson * RETURN: None 57453289f6aSNate Lawson * 57544b0f624SJung-uk Kim * DESCRIPTION: Display compilation statistics for one input file 57653289f6aSNate Lawson * 57753289f6aSNate Lawson ******************************************************************************/ 57853289f6aSNate Lawson 57953289f6aSNate Lawson void 58044b0f624SJung-uk Kim UtDisplayOneSummary ( 58144b0f624SJung-uk Kim UINT32 FileId, 58244b0f624SJung-uk Kim BOOLEAN DisplayErrorSummary) 58353289f6aSNate Lawson { 5843f0275a0SJung-uk Kim UINT32 i; 58544b0f624SJung-uk Kim ASL_GLOBAL_FILE_NODE *FileNode; 5869ad8b64eSJung-uk Kim BOOLEAN DisplayAMLSummary; 5873f0275a0SJung-uk Kim 58853289f6aSNate Lawson 5899ad8b64eSJung-uk Kim DisplayAMLSummary = 5909ad8b64eSJung-uk Kim !AslGbl_PreprocessOnly && !AslGbl_ParserErrorDetected && 5919ad8b64eSJung-uk Kim ((AslGbl_ExceptionCount[ASL_ERROR] == 0) || AslGbl_IgnoreErrors) && 5929ad8b64eSJung-uk Kim AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle; 5939ad8b64eSJung-uk Kim 59453289f6aSNate Lawson if (FileId != ASL_FILE_STDOUT) 59553289f6aSNate Lawson { 59653289f6aSNate Lawson /* Compiler name and version number */ 59753289f6aSNate Lawson 59861673a1fSJung-uk Kim FlPrintFile (FileId, "%s version %X\n\n", 59961673a1fSJung-uk Kim ASL_COMPILER_NAME, (UINT32) ACPI_CA_VERSION); 60053289f6aSNate Lawson } 60153289f6aSNate Lawson 6023f0275a0SJung-uk Kim /* Summary of main input and output files */ 6033f0275a0SJung-uk Kim 60444b0f624SJung-uk Kim FileNode = FlGetCurrentFileNode (); 605a009b7dcSJung-uk Kim 60644b0f624SJung-uk Kim if (FileNode->ParserErrorDetected) 60744b0f624SJung-uk Kim { 60853289f6aSNate Lawson FlPrintFile (FileId, 60944b0f624SJung-uk Kim "%-14s %s - Compilation aborted due to parser-detected syntax error(s)\n", 610a009b7dcSJung-uk Kim "Input file:", AslGbl_Files[ASL_FILE_INPUT].Filename); 61144b0f624SJung-uk Kim } 612a009b7dcSJung-uk Kim else if (FileNode->FileType == ASL_INPUT_TYPE_ASCII_DATA) 613a009b7dcSJung-uk Kim { 614a009b7dcSJung-uk Kim FlPrintFile (FileId, 615a009b7dcSJung-uk Kim "%-14s %s - %7u bytes %6u fields %8u source lines\n", 616a009b7dcSJung-uk Kim "Table Input:", 617a009b7dcSJung-uk Kim AslGbl_Files[ASL_FILE_INPUT].Filename, 618a009b7dcSJung-uk Kim FileNode->OriginalInputFileSize, FileNode->TotalFields, 619a009b7dcSJung-uk Kim FileNode->TotalLineCount); 620a009b7dcSJung-uk Kim 621a009b7dcSJung-uk Kim FlPrintFile (FileId, 622a009b7dcSJung-uk Kim "%-14s %s - %7u bytes\n", 623a009b7dcSJung-uk Kim "Binary Output:", 624a009b7dcSJung-uk Kim AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, FileNode->OutputByteLength); 625a009b7dcSJung-uk Kim } 626a009b7dcSJung-uk Kim else if (FileNode->FileType == ASL_INPUT_TYPE_ASCII_ASL) 62744b0f624SJung-uk Kim { 62844b0f624SJung-uk Kim FlPrintFile (FileId, 62944b0f624SJung-uk Kim "%-14s %s - %7u bytes %6u keywords %6u source lines\n", 6303f0275a0SJung-uk Kim "ASL Input:", 63144b0f624SJung-uk Kim AslGbl_Files[ASL_FILE_INPUT].Filename, 63244b0f624SJung-uk Kim FileNode->OriginalInputFileSize, 63344b0f624SJung-uk Kim FileNode->TotalKeywords, 63444b0f624SJung-uk Kim FileNode->TotalLineCount); 63553289f6aSNate Lawson 63653289f6aSNate Lawson /* AML summary */ 63753289f6aSNate Lawson 6389ad8b64eSJung-uk Kim if (DisplayAMLSummary) 6395ef50723SJung-uk Kim { 64053289f6aSNate Lawson FlPrintFile (FileId, 64144b0f624SJung-uk Kim "%-14s %s - %7u bytes %6u opcodes %6u named objects\n", 6423f0275a0SJung-uk Kim "AML Output:", 6436f1f1a63SJung-uk Kim AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, 644f8146b88SJung-uk Kim FlGetFileSize (ASL_FILE_AML_OUTPUT), 64544b0f624SJung-uk Kim FileNode->TotalExecutableOpcodes, 64644b0f624SJung-uk Kim FileNode->TotalNamedObjects); 64753289f6aSNate Lawson } 648a88e22b7SJung-uk Kim } 64953289f6aSNate Lawson 6503f0275a0SJung-uk Kim /* Display summary of any optional files */ 6513f0275a0SJung-uk Kim 6523f0275a0SJung-uk Kim for (i = ASL_FILE_SOURCE_OUTPUT; i <= ASL_MAX_FILE_TYPE; i++) 6533f0275a0SJung-uk Kim { 6546f1f1a63SJung-uk Kim if (!AslGbl_Files[i].Filename || !AslGbl_Files[i].Handle) 6553f0275a0SJung-uk Kim { 6563f0275a0SJung-uk Kim continue; 6573f0275a0SJung-uk Kim } 6583f0275a0SJung-uk Kim 6593f0275a0SJung-uk Kim /* .SRC is a temp file unless specifically requested */ 6603f0275a0SJung-uk Kim 6616f1f1a63SJung-uk Kim if ((i == ASL_FILE_SOURCE_OUTPUT) && (!AslGbl_SourceOutputFlag)) 6623f0275a0SJung-uk Kim { 6633f0275a0SJung-uk Kim continue; 6643f0275a0SJung-uk Kim } 6653f0275a0SJung-uk Kim 6665ef50723SJung-uk Kim /* .PRE is the preprocessor intermediate file */ 6674c52cad2SJung-uk Kim 6686f1f1a63SJung-uk Kim if ((i == ASL_FILE_PREPROCESSOR) && (!AslGbl_KeepPreprocessorTempFile)) 6694c52cad2SJung-uk Kim { 6704c52cad2SJung-uk Kim continue; 6714c52cad2SJung-uk Kim } 6724c52cad2SJung-uk Kim 6739ad8b64eSJung-uk Kim FlPrintFile (FileId, "%-14s %s - %7u bytes\n", 67444b0f624SJung-uk Kim AslGbl_FileDescs[i].ShortDescription, 6756f1f1a63SJung-uk Kim AslGbl_Files[i].Filename, FlGetFileSize (i)); 6763f0275a0SJung-uk Kim } 6773f0275a0SJung-uk Kim 67844b0f624SJung-uk Kim 67944b0f624SJung-uk Kim /* 68044b0f624SJung-uk Kim * Optionally emit an error summary for a file. This is used to enhance the 68144b0f624SJung-uk Kim * appearance of listing files. 68244b0f624SJung-uk Kim */ 68344b0f624SJung-uk Kim if (DisplayErrorSummary) 68444b0f624SJung-uk Kim { 68544b0f624SJung-uk Kim UtDisplayErrorSummary (FileId); 68644b0f624SJung-uk Kim } 68744b0f624SJung-uk Kim } 68844b0f624SJung-uk Kim 68944b0f624SJung-uk Kim 69044b0f624SJung-uk Kim /******************************************************************************* 69144b0f624SJung-uk Kim * 69244b0f624SJung-uk Kim * FUNCTION: UtDisplayErrorSummary 69344b0f624SJung-uk Kim * 69444b0f624SJung-uk Kim * PARAMETERS: FileID - ID of outpout file 69544b0f624SJung-uk Kim * 69644b0f624SJung-uk Kim * RETURN: None 69744b0f624SJung-uk Kim * 69844b0f624SJung-uk Kim * DESCRIPTION: Display compilation statistics for all input files 69944b0f624SJung-uk Kim * 70044b0f624SJung-uk Kim ******************************************************************************/ 70144b0f624SJung-uk Kim 70244b0f624SJung-uk Kim static void 70344b0f624SJung-uk Kim UtDisplayErrorSummary ( 70444b0f624SJung-uk Kim UINT32 FileId) 70544b0f624SJung-uk Kim { 70644b0f624SJung-uk Kim BOOLEAN ErrorDetected; 70744b0f624SJung-uk Kim 70844b0f624SJung-uk Kim 70944b0f624SJung-uk Kim ErrorDetected = AslGbl_ParserErrorDetected || 71044b0f624SJung-uk Kim ((AslGbl_ExceptionCount[ASL_ERROR] > 0) && !AslGbl_IgnoreErrors); 71144b0f624SJung-uk Kim 71244b0f624SJung-uk Kim if (ErrorDetected) 71344b0f624SJung-uk Kim { 71444b0f624SJung-uk Kim FlPrintFile (FileId, "\nCompilation failed. "); 71544b0f624SJung-uk Kim } 71644b0f624SJung-uk Kim else 71744b0f624SJung-uk Kim { 71844b0f624SJung-uk Kim FlPrintFile (FileId, "\nCompilation successful. "); 71944b0f624SJung-uk Kim } 72053289f6aSNate Lawson 72153289f6aSNate Lawson FlPrintFile (FileId, 72244b0f624SJung-uk Kim "%u Errors, %u Warnings, %u Remarks", 7236f1f1a63SJung-uk Kim AslGbl_ExceptionCount[ASL_ERROR], 7246f1f1a63SJung-uk Kim AslGbl_ExceptionCount[ASL_WARNING] + 7256f1f1a63SJung-uk Kim AslGbl_ExceptionCount[ASL_WARNING2] + 7266f1f1a63SJung-uk Kim AslGbl_ExceptionCount[ASL_WARNING3], 7276f1f1a63SJung-uk Kim AslGbl_ExceptionCount[ASL_REMARK]); 728a88e22b7SJung-uk Kim 7296f1f1a63SJung-uk Kim if (AslGbl_FileType != ASL_INPUT_TYPE_ASCII_DATA) 730a88e22b7SJung-uk Kim { 73144b0f624SJung-uk Kim if (AslGbl_ParserErrorDetected) 73244b0f624SJung-uk Kim { 73344b0f624SJung-uk Kim FlPrintFile (FileId, 73444b0f624SJung-uk Kim "\nNo AML files were generated due to syntax error(s)\n"); 73544b0f624SJung-uk Kim return; 73644b0f624SJung-uk Kim } 73744b0f624SJung-uk Kim else if (ErrorDetected) 73844b0f624SJung-uk Kim { 73944b0f624SJung-uk Kim FlPrintFile (FileId, 74044b0f624SJung-uk Kim "\nNo AML files were generated due to compiler error(s)\n"); 74144b0f624SJung-uk Kim return; 74244b0f624SJung-uk Kim } 74344b0f624SJung-uk Kim 7447cf3e94aSJung-uk Kim FlPrintFile (FileId, ", %u Optimizations", 7456f1f1a63SJung-uk Kim AslGbl_ExceptionCount[ASL_OPTIMIZATION]); 7467cf3e94aSJung-uk Kim 7476f1f1a63SJung-uk Kim if (AslGbl_TotalFolds) 7487cf3e94aSJung-uk Kim { 7496f1f1a63SJung-uk Kim FlPrintFile (FileId, ", %u Constants Folded", AslGbl_TotalFolds); 7507cf3e94aSJung-uk Kim } 751a88e22b7SJung-uk Kim } 752a88e22b7SJung-uk Kim 753a88e22b7SJung-uk Kim FlPrintFile (FileId, "\n"); 75453289f6aSNate Lawson } 75553289f6aSNate Lawson 75653289f6aSNate Lawson 75753289f6aSNate Lawson /******************************************************************************* 75853289f6aSNate Lawson * 75944b0f624SJung-uk Kim * FUNCTION: UtDisplaySummary 76044b0f624SJung-uk Kim * 76144b0f624SJung-uk Kim * PARAMETERS: FileID - ID of outpout file 76244b0f624SJung-uk Kim * 76344b0f624SJung-uk Kim * RETURN: None 76444b0f624SJung-uk Kim * 76544b0f624SJung-uk Kim * DESCRIPTION: Display compilation statistics for all input files 76644b0f624SJung-uk Kim * 76744b0f624SJung-uk Kim ******************************************************************************/ 76844b0f624SJung-uk Kim 76944b0f624SJung-uk Kim void 77044b0f624SJung-uk Kim UtDisplaySummary ( 77144b0f624SJung-uk Kim UINT32 FileId) 77244b0f624SJung-uk Kim { 77344b0f624SJung-uk Kim ASL_GLOBAL_FILE_NODE *Current = AslGbl_FilesList; 77444b0f624SJung-uk Kim 77544b0f624SJung-uk Kim 77644b0f624SJung-uk Kim while (Current) 77744b0f624SJung-uk Kim { 77844b0f624SJung-uk Kim switch (FlSwitchFileSet(Current->Files[ASL_FILE_INPUT].Filename)) 77944b0f624SJung-uk Kim { 78044b0f624SJung-uk Kim case SWITCH_TO_SAME_FILE: 78144b0f624SJung-uk Kim case SWITCH_TO_DIFFERENT_FILE: 78244b0f624SJung-uk Kim 78344b0f624SJung-uk Kim UtDisplayOneSummary (FileId, FALSE); 78444b0f624SJung-uk Kim Current = Current->Next; 78544b0f624SJung-uk Kim break; 78644b0f624SJung-uk Kim 78744b0f624SJung-uk Kim case FILE_NOT_FOUND: 78844b0f624SJung-uk Kim default: 78944b0f624SJung-uk Kim 79044b0f624SJung-uk Kim Current = NULL; 79144b0f624SJung-uk Kim break; 79244b0f624SJung-uk Kim } 79344b0f624SJung-uk Kim } 79444b0f624SJung-uk Kim UtDisplayErrorSummary (FileId); 79544b0f624SJung-uk Kim } 79644b0f624SJung-uk Kim 79744b0f624SJung-uk Kim /******************************************************************************* 79844b0f624SJung-uk Kim * 799f38b0f21SJung-uk Kim * FUNCTION: UtCheckIntegerRange 80053289f6aSNate Lawson * 80153289f6aSNate Lawson * PARAMETERS: Op - Integer parse node 80253289f6aSNate Lawson * LowValue - Smallest allowed value 80353289f6aSNate Lawson * HighValue - Largest allowed value 80453289f6aSNate Lawson * 80553289f6aSNate Lawson * RETURN: Op if OK, otherwise NULL 80653289f6aSNate Lawson * 80753289f6aSNate Lawson * DESCRIPTION: Check integer for an allowable range 80853289f6aSNate Lawson * 80953289f6aSNate Lawson ******************************************************************************/ 81053289f6aSNate Lawson 81153289f6aSNate Lawson ACPI_PARSE_OBJECT * 81253289f6aSNate Lawson UtCheckIntegerRange ( 81353289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 81453289f6aSNate Lawson UINT32 LowValue, 81553289f6aSNate Lawson UINT32 HighValue) 81653289f6aSNate Lawson { 81753289f6aSNate Lawson 81853289f6aSNate Lawson if (!Op) 81953289f6aSNate Lawson { 8208ef1a331SJung-uk Kim return (NULL); 82153289f6aSNate Lawson } 82253289f6aSNate Lawson 8231df130f1SJung-uk Kim if ((Op->Asl.Value.Integer < LowValue) || 8241df130f1SJung-uk Kim (Op->Asl.Value.Integer > HighValue)) 82553289f6aSNate Lawson { 8266f1f1a63SJung-uk Kim sprintf (AslGbl_MsgBuffer, "0x%X, allowable: 0x%X-0x%X", 8271df130f1SJung-uk Kim (UINT32) Op->Asl.Value.Integer, LowValue, HighValue); 8281df130f1SJung-uk Kim 8296f1f1a63SJung-uk Kim AslError (ASL_ERROR, ASL_MSG_RANGE, Op, AslGbl_MsgBuffer); 8301df130f1SJung-uk Kim return (NULL); 83153289f6aSNate Lawson } 83253289f6aSNate Lawson 8331df130f1SJung-uk Kim return (Op); 83453289f6aSNate Lawson } 83553289f6aSNate Lawson 83653289f6aSNate Lawson 83753289f6aSNate Lawson /******************************************************************************* 83853289f6aSNate Lawson * 83953289f6aSNate Lawson * FUNCTION: UtInternalizeName 84053289f6aSNate Lawson * 84153289f6aSNate Lawson * PARAMETERS: ExternalName - Name to convert 84253289f6aSNate Lawson * ConvertedName - Where the converted name is returned 84353289f6aSNate Lawson * 84453289f6aSNate Lawson * RETURN: Status 84553289f6aSNate Lawson * 84653289f6aSNate Lawson * DESCRIPTION: Convert an external (ASL) name to an internal (AML) name 84753289f6aSNate Lawson * 84853289f6aSNate Lawson ******************************************************************************/ 84953289f6aSNate Lawson 85053289f6aSNate Lawson ACPI_STATUS 85153289f6aSNate Lawson UtInternalizeName ( 85253289f6aSNate Lawson char *ExternalName, 85353289f6aSNate Lawson char **ConvertedName) 85453289f6aSNate Lawson { 85553289f6aSNate Lawson ACPI_NAMESTRING_INFO Info; 85653289f6aSNate Lawson ACPI_STATUS Status; 85753289f6aSNate Lawson 85853289f6aSNate Lawson 85953289f6aSNate Lawson if (!ExternalName) 86053289f6aSNate Lawson { 86153289f6aSNate Lawson return (AE_OK); 86253289f6aSNate Lawson } 86353289f6aSNate Lawson 86453289f6aSNate Lawson /* Get the length of the new internal name */ 86553289f6aSNate Lawson 86653289f6aSNate Lawson Info.ExternalName = ExternalName; 86753289f6aSNate Lawson AcpiNsGetInternalNameLength (&Info); 86853289f6aSNate Lawson 86953289f6aSNate Lawson /* We need a segment to store the internal name */ 87053289f6aSNate Lawson 87167d9aa44SJung-uk Kim Info.InternalName = UtLocalCacheCalloc (Info.Length); 87253289f6aSNate Lawson 87353289f6aSNate Lawson /* Build the name */ 87453289f6aSNate Lawson 87553289f6aSNate Lawson Status = AcpiNsBuildInternalName (&Info); 87653289f6aSNate Lawson if (ACPI_FAILURE (Status)) 87753289f6aSNate Lawson { 87853289f6aSNate Lawson return (Status); 87953289f6aSNate Lawson } 88053289f6aSNate Lawson 88153289f6aSNate Lawson *ConvertedName = Info.InternalName; 88253289f6aSNate Lawson return (AE_OK); 88353289f6aSNate Lawson } 88453289f6aSNate Lawson 88553289f6aSNate Lawson 88653289f6aSNate Lawson /******************************************************************************* 88753289f6aSNate Lawson * 88853289f6aSNate Lawson * FUNCTION: UtPadNameWithUnderscores 88953289f6aSNate Lawson * 89053289f6aSNate Lawson * PARAMETERS: NameSeg - Input nameseg 89153289f6aSNate Lawson * PaddedNameSeg - Output padded nameseg 89253289f6aSNate Lawson * 89353289f6aSNate Lawson * RETURN: Padded nameseg. 89453289f6aSNate Lawson * 89553289f6aSNate Lawson * DESCRIPTION: Pads a NameSeg with underscores if necessary to form a full 89653289f6aSNate Lawson * ACPI_NAME. 89753289f6aSNate Lawson * 89853289f6aSNate Lawson ******************************************************************************/ 89953289f6aSNate Lawson 900fba7fc7eSJung-uk Kim static void 90153289f6aSNate Lawson UtPadNameWithUnderscores ( 90253289f6aSNate Lawson char *NameSeg, 90353289f6aSNate Lawson char *PaddedNameSeg) 90453289f6aSNate Lawson { 90553289f6aSNate Lawson UINT32 i; 90653289f6aSNate Lawson 90753289f6aSNate Lawson 908278f0de6SJung-uk Kim for (i = 0; (i < ACPI_NAMESEG_SIZE); i++) 90953289f6aSNate Lawson { 91053289f6aSNate Lawson if (*NameSeg) 91153289f6aSNate Lawson { 91253289f6aSNate Lawson *PaddedNameSeg = *NameSeg; 91353289f6aSNate Lawson NameSeg++; 91453289f6aSNate Lawson } 91553289f6aSNate Lawson else 91653289f6aSNate Lawson { 91753289f6aSNate Lawson *PaddedNameSeg = '_'; 91853289f6aSNate Lawson } 919f8146b88SJung-uk Kim 92053289f6aSNate Lawson PaddedNameSeg++; 92153289f6aSNate Lawson } 92253289f6aSNate Lawson } 92353289f6aSNate Lawson 92453289f6aSNate Lawson 92553289f6aSNate Lawson /******************************************************************************* 92653289f6aSNate Lawson * 92753289f6aSNate Lawson * FUNCTION: UtAttachNameseg 92853289f6aSNate Lawson * 92953289f6aSNate Lawson * PARAMETERS: Op - Parent parse node 93053289f6aSNate Lawson * Name - Full ExternalName 93153289f6aSNate Lawson * 932fba7fc7eSJung-uk Kim * RETURN: None; Sets the NameSeg field in parent node 93353289f6aSNate Lawson * 93453289f6aSNate Lawson * DESCRIPTION: Extract the last nameseg of the ExternalName and store it 93553289f6aSNate Lawson * in the NameSeg field of the Op. 93653289f6aSNate Lawson * 93753289f6aSNate Lawson ******************************************************************************/ 93853289f6aSNate Lawson 939fba7fc7eSJung-uk Kim static void 94053289f6aSNate Lawson UtAttachNameseg ( 94153289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 94253289f6aSNate Lawson char *Name) 94353289f6aSNate Lawson { 94453289f6aSNate Lawson char *NameSeg; 94553289f6aSNate Lawson char PaddedNameSeg[4]; 94653289f6aSNate Lawson 94753289f6aSNate Lawson 94853289f6aSNate Lawson if (!Name) 94953289f6aSNate Lawson { 95053289f6aSNate Lawson return; 95153289f6aSNate Lawson } 95253289f6aSNate Lawson 95353289f6aSNate Lawson /* Look for the last dot in the namepath */ 95453289f6aSNate Lawson 95553289f6aSNate Lawson NameSeg = strrchr (Name, '.'); 95653289f6aSNate Lawson if (NameSeg) 95753289f6aSNate Lawson { 95853289f6aSNate Lawson /* Found last dot, we have also found the final nameseg */ 95953289f6aSNate Lawson 96053289f6aSNate Lawson NameSeg++; 96153289f6aSNate Lawson UtPadNameWithUnderscores (NameSeg, PaddedNameSeg); 96253289f6aSNate Lawson } 96353289f6aSNate Lawson else 96453289f6aSNate Lawson { 96553289f6aSNate Lawson /* No dots in the namepath, there is only a single nameseg. */ 96653289f6aSNate Lawson /* Handle prefixes */ 96753289f6aSNate Lawson 968efcc2a30SJung-uk Kim while (ACPI_IS_ROOT_PREFIX (*Name) || 969efcc2a30SJung-uk Kim ACPI_IS_PARENT_PREFIX (*Name)) 97053289f6aSNate Lawson { 97153289f6aSNate Lawson Name++; 97253289f6aSNate Lawson } 97353289f6aSNate Lawson 9748ef1a331SJung-uk Kim /* Remaining string should be one single nameseg */ 97553289f6aSNate Lawson 97653289f6aSNate Lawson UtPadNameWithUnderscores (Name, PaddedNameSeg); 97753289f6aSNate Lawson } 97853289f6aSNate Lawson 979278f0de6SJung-uk Kim ACPI_COPY_NAMESEG (Op->Asl.NameSeg, PaddedNameSeg); 98053289f6aSNate Lawson } 98153289f6aSNate Lawson 98253289f6aSNate Lawson 98353289f6aSNate Lawson /******************************************************************************* 98453289f6aSNate Lawson * 98553289f6aSNate Lawson * FUNCTION: UtAttachNamepathToOwner 98653289f6aSNate Lawson * 98753289f6aSNate Lawson * PARAMETERS: Op - Parent parse node 98853289f6aSNate Lawson * NameOp - Node that contains the name 98953289f6aSNate Lawson * 99053289f6aSNate Lawson * RETURN: Sets the ExternalName and Namepath in the parent node 99153289f6aSNate Lawson * 99253289f6aSNate Lawson * DESCRIPTION: Store the name in two forms in the parent node: The original 99353289f6aSNate Lawson * (external) name, and the internalized name that is used within 99453289f6aSNate Lawson * the ACPI namespace manager. 99553289f6aSNate Lawson * 99653289f6aSNate Lawson ******************************************************************************/ 99753289f6aSNate Lawson 99853289f6aSNate Lawson void 99953289f6aSNate Lawson UtAttachNamepathToOwner ( 100053289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 100153289f6aSNate Lawson ACPI_PARSE_OBJECT *NameOp) 100253289f6aSNate Lawson { 100353289f6aSNate Lawson ACPI_STATUS Status; 100453289f6aSNate Lawson 100553289f6aSNate Lawson 100653289f6aSNate Lawson /* Full external path */ 100753289f6aSNate Lawson 100853289f6aSNate Lawson Op->Asl.ExternalName = NameOp->Asl.Value.String; 100953289f6aSNate Lawson 1010fba7fc7eSJung-uk Kim /* Save the NameOp for possible error reporting later */ 1011fba7fc7eSJung-uk Kim 1012fba7fc7eSJung-uk Kim Op->Asl.ParentMethod = (void *) NameOp; 1013fba7fc7eSJung-uk Kim 101453289f6aSNate Lawson /* Last nameseg of the path */ 101553289f6aSNate Lawson 101653289f6aSNate Lawson UtAttachNameseg (Op, Op->Asl.ExternalName); 101753289f6aSNate Lawson 101853289f6aSNate Lawson /* Create internalized path */ 101953289f6aSNate Lawson 102053289f6aSNate Lawson Status = UtInternalizeName (NameOp->Asl.Value.String, &Op->Asl.Namepath); 102153289f6aSNate Lawson if (ACPI_FAILURE (Status)) 102253289f6aSNate Lawson { 102353289f6aSNate Lawson /* TBD: abort on no memory */ 102453289f6aSNate Lawson } 102553289f6aSNate Lawson } 102653289f6aSNate Lawson 102753289f6aSNate Lawson 102853289f6aSNate Lawson /******************************************************************************* 102953289f6aSNate Lawson * 1030a009b7dcSJung-uk Kim * FUNCTION: UtNameContainsAllPrefix 1031a009b7dcSJung-uk Kim * 1032a009b7dcSJung-uk Kim * PARAMETERS: Op - Op containing NameString 1033a009b7dcSJung-uk Kim * 1034a009b7dcSJung-uk Kim * RETURN: NameString consists of all ^ characters 1035a009b7dcSJung-uk Kim * 1036a009b7dcSJung-uk Kim * DESCRIPTION: Determine if this Op contains a name segment that consists of 1037a009b7dcSJung-uk Kim * all '^' characters. 1038a009b7dcSJung-uk Kim * 1039a009b7dcSJung-uk Kim ******************************************************************************/ 1040a009b7dcSJung-uk Kim 1041a009b7dcSJung-uk Kim BOOLEAN 1042a009b7dcSJung-uk Kim UtNameContainsAllPrefix ( 1043a009b7dcSJung-uk Kim ACPI_PARSE_OBJECT *Op) 1044a009b7dcSJung-uk Kim { 1045a009b7dcSJung-uk Kim UINT32 Length = Op->Asl.AmlLength; 1046a009b7dcSJung-uk Kim UINT32 i; 1047a009b7dcSJung-uk Kim 1048a009b7dcSJung-uk Kim for (i = 0; i < Length; i++) 1049a009b7dcSJung-uk Kim { 1050a009b7dcSJung-uk Kim if (Op->Asl.Value.String[i] != '^') 1051a009b7dcSJung-uk Kim { 1052a009b7dcSJung-uk Kim return (FALSE); 1053a009b7dcSJung-uk Kim } 1054a009b7dcSJung-uk Kim } 1055a009b7dcSJung-uk Kim 1056a009b7dcSJung-uk Kim return (TRUE); 1057a009b7dcSJung-uk Kim } 1058a009b7dcSJung-uk Kim 1059a009b7dcSJung-uk Kim /******************************************************************************* 1060a009b7dcSJung-uk Kim * 106153289f6aSNate Lawson * FUNCTION: UtDoConstant 106253289f6aSNate Lawson * 10632f6a1a81SJung-uk Kim * PARAMETERS: String - Hex/Decimal/Octal 106453289f6aSNate Lawson * 106553289f6aSNate Lawson * RETURN: Converted Integer 106653289f6aSNate Lawson * 10672f6a1a81SJung-uk Kim * DESCRIPTION: Convert a string to an integer, with overflow/error checking. 106853289f6aSNate Lawson * 106953289f6aSNate Lawson ******************************************************************************/ 107053289f6aSNate Lawson 10719a179dd8SJung-uk Kim UINT64 107253289f6aSNate Lawson UtDoConstant ( 107353289f6aSNate Lawson char *String) 107453289f6aSNate Lawson { 107553289f6aSNate Lawson ACPI_STATUS Status; 10762f6a1a81SJung-uk Kim UINT64 ConvertedInteger; 1077*f15e9afbSJung-uk Kim char ErrBuf[128]; 1078*f15e9afbSJung-uk Kim const ACPI_EXCEPTION_INFO *ExceptionInfo; 107953289f6aSNate Lawson 108053289f6aSNate Lawson 10812f6a1a81SJung-uk Kim Status = AcpiUtStrtoul64 (String, &ConvertedInteger); 108253289f6aSNate Lawson if (ACPI_FAILURE (Status)) 108353289f6aSNate Lawson { 1084*f15e9afbSJung-uk Kim ExceptionInfo = AcpiUtValidateException ((ACPI_STATUS) Status); 1085*f15e9afbSJung-uk Kim sprintf (ErrBuf, " %s while converting to 64-bit integer", 1086*f15e9afbSJung-uk Kim ExceptionInfo->Description); 10872f6a1a81SJung-uk Kim 10886f1f1a63SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_SYNTAX, AslGbl_CurrentLineNumber, 10896f1f1a63SJung-uk Kim AslGbl_LogicalLineNumber, AslGbl_CurrentLineOffset, 10906f1f1a63SJung-uk Kim AslGbl_CurrentColumn, AslGbl_Files[ASL_FILE_INPUT].Filename, ErrBuf); 109153289f6aSNate Lawson } 109253289f6aSNate Lawson 10932f6a1a81SJung-uk Kim return (ConvertedInteger); 109453289f6aSNate Lawson } 1095a009b7dcSJung-uk Kim 1096a009b7dcSJung-uk Kim 1097a009b7dcSJung-uk Kim /****************************************************************************** 1098a009b7dcSJung-uk Kim * 1099a009b7dcSJung-uk Kim * FUNCTION: AcpiUtStrdup 1100a009b7dcSJung-uk Kim * 1101a009b7dcSJung-uk Kim * PARAMETERS: String1 - string to duplicate 1102a009b7dcSJung-uk Kim * 1103a009b7dcSJung-uk Kim * RETURN: int that signifies string relationship. Zero means strings 1104a009b7dcSJung-uk Kim * are equal. 1105a009b7dcSJung-uk Kim * 1106a009b7dcSJung-uk Kim * DESCRIPTION: Duplicate the string using UtCacheAlloc to avoid manual memory 1107a009b7dcSJung-uk Kim * reclamation. 1108a009b7dcSJung-uk Kim * 1109a009b7dcSJung-uk Kim ******************************************************************************/ 1110a009b7dcSJung-uk Kim 1111a009b7dcSJung-uk Kim char * 1112a009b7dcSJung-uk Kim AcpiUtStrdup ( 1113a009b7dcSJung-uk Kim char *String) 1114a009b7dcSJung-uk Kim { 1115a009b7dcSJung-uk Kim char *NewString = (char *) UtLocalCalloc (strlen (String) + 1); 1116a009b7dcSJung-uk Kim 1117a009b7dcSJung-uk Kim 1118a009b7dcSJung-uk Kim strcpy (NewString, String); 1119a009b7dcSJung-uk Kim return (NewString); 1120a009b7dcSJung-uk Kim } 1121a009b7dcSJung-uk Kim 1122a009b7dcSJung-uk Kim 1123a009b7dcSJung-uk Kim /****************************************************************************** 1124a009b7dcSJung-uk Kim * 1125a009b7dcSJung-uk Kim * FUNCTION: AcpiUtStrcat 1126a009b7dcSJung-uk Kim * 1127a009b7dcSJung-uk Kim * PARAMETERS: String1 1128a009b7dcSJung-uk Kim * String2 1129a009b7dcSJung-uk Kim * 1130a009b7dcSJung-uk Kim * RETURN: New string with String1 concatenated with String2 1131a009b7dcSJung-uk Kim * 1132a009b7dcSJung-uk Kim * DESCRIPTION: Concatenate string1 and string2 1133a009b7dcSJung-uk Kim * 1134a009b7dcSJung-uk Kim ******************************************************************************/ 1135a009b7dcSJung-uk Kim 1136a009b7dcSJung-uk Kim char * 1137a009b7dcSJung-uk Kim AcpiUtStrcat ( 1138a009b7dcSJung-uk Kim char *String1, 1139a009b7dcSJung-uk Kim char *String2) 1140a009b7dcSJung-uk Kim { 1141a009b7dcSJung-uk Kim UINT32 String1Length = strlen (String1); 1142a009b7dcSJung-uk Kim char *NewString = (char *) UtLocalCalloc (strlen (String1) + strlen (String2) + 1); 1143a009b7dcSJung-uk Kim 1144a009b7dcSJung-uk Kim strcpy (NewString, String1); 1145a009b7dcSJung-uk Kim strcpy (NewString + String1Length, String2); 1146a009b7dcSJung-uk Kim return (NewString); 1147a009b7dcSJung-uk Kim } 1148