153289f6aSNate Lawson /****************************************************************************** 253289f6aSNate Lawson * 353289f6aSNate Lawson * Module Name: aslutils -- compiler utilities 453289f6aSNate Lawson * 553289f6aSNate Lawson *****************************************************************************/ 653289f6aSNate Lawson 7*0d84335fSJung-uk Kim /****************************************************************************** 8*0d84335fSJung-uk Kim * 9*0d84335fSJung-uk Kim * 1. Copyright Notice 10*0d84335fSJung-uk Kim * 11*0d84335fSJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp. 1253289f6aSNate Lawson * All rights reserved. 1353289f6aSNate Lawson * 14*0d84335fSJung-uk Kim * 2. License 15*0d84335fSJung-uk Kim * 16*0d84335fSJung-uk Kim * 2.1. This is your license from Intel Corp. under its intellectual property 17*0d84335fSJung-uk Kim * rights. You may have additional license terms from the party that provided 18*0d84335fSJung-uk Kim * you this software, covering your right to use that party's intellectual 19*0d84335fSJung-uk Kim * property rights. 20*0d84335fSJung-uk Kim * 21*0d84335fSJung-uk Kim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 22*0d84335fSJung-uk Kim * copy of the source code appearing in this file ("Covered Code") an 23*0d84335fSJung-uk Kim * irrevocable, perpetual, worldwide license under Intel's copyrights in the 24*0d84335fSJung-uk Kim * base code distributed originally by Intel ("Original Intel Code") to copy, 25*0d84335fSJung-uk Kim * make derivatives, distribute, use and display any portion of the Covered 26*0d84335fSJung-uk Kim * Code in any form, with the right to sublicense such rights; and 27*0d84335fSJung-uk Kim * 28*0d84335fSJung-uk Kim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 29*0d84335fSJung-uk Kim * license (with the right to sublicense), under only those claims of Intel 30*0d84335fSJung-uk Kim * patents that are infringed by the Original Intel Code, to make, use, sell, 31*0d84335fSJung-uk Kim * offer to sell, and import the Covered Code and derivative works thereof 32*0d84335fSJung-uk Kim * solely to the minimum extent necessary to exercise the above copyright 33*0d84335fSJung-uk Kim * license, and in no event shall the patent license extend to any additions 34*0d84335fSJung-uk Kim * to or modifications of the Original Intel Code. No other license or right 35*0d84335fSJung-uk Kim * is granted directly or by implication, estoppel or otherwise; 36*0d84335fSJung-uk Kim * 37*0d84335fSJung-uk Kim * The above copyright and patent license is granted only if the following 38*0d84335fSJung-uk Kim * conditions are met: 39*0d84335fSJung-uk Kim * 40*0d84335fSJung-uk Kim * 3. Conditions 41*0d84335fSJung-uk Kim * 42*0d84335fSJung-uk Kim * 3.1. Redistribution of Source with Rights to Further Distribute Source. 43*0d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 44*0d84335fSJung-uk Kim * Code or modification with rights to further distribute source must include 45*0d84335fSJung-uk Kim * the above Copyright Notice, the above License, this list of Conditions, 46*0d84335fSJung-uk Kim * and the following Disclaimer and Export Compliance provision. In addition, 47*0d84335fSJung-uk Kim * Licensee must cause all Covered Code to which Licensee contributes to 48*0d84335fSJung-uk Kim * contain a file documenting the changes Licensee made to create that Covered 49*0d84335fSJung-uk Kim * Code and the date of any change. Licensee must include in that file the 50*0d84335fSJung-uk Kim * documentation of any changes made by any predecessor Licensee. Licensee 51*0d84335fSJung-uk Kim * must include a prominent statement that the modification is derived, 52*0d84335fSJung-uk Kim * directly or indirectly, from Original Intel Code. 53*0d84335fSJung-uk Kim * 54*0d84335fSJung-uk Kim * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 55*0d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 56*0d84335fSJung-uk Kim * Code or modification without rights to further distribute source must 57*0d84335fSJung-uk Kim * include the following Disclaimer and Export Compliance provision in the 58*0d84335fSJung-uk Kim * documentation and/or other materials provided with distribution. In 59*0d84335fSJung-uk Kim * addition, Licensee may not authorize further sublicense of source of any 60*0d84335fSJung-uk Kim * portion of the Covered Code, and must include terms to the effect that the 61*0d84335fSJung-uk Kim * license from Licensee to its licensee is limited to the intellectual 62*0d84335fSJung-uk Kim * property embodied in the software Licensee provides to its licensee, and 63*0d84335fSJung-uk Kim * not to intellectual property embodied in modifications its licensee may 64*0d84335fSJung-uk Kim * make. 65*0d84335fSJung-uk Kim * 66*0d84335fSJung-uk Kim * 3.3. Redistribution of Executable. Redistribution in executable form of any 67*0d84335fSJung-uk Kim * substantial portion of the Covered Code or modification must reproduce the 68*0d84335fSJung-uk Kim * above Copyright Notice, and the following Disclaimer and Export Compliance 69*0d84335fSJung-uk Kim * provision in the documentation and/or other materials provided with the 70*0d84335fSJung-uk Kim * distribution. 71*0d84335fSJung-uk Kim * 72*0d84335fSJung-uk Kim * 3.4. Intel retains all right, title, and interest in and to the Original 73*0d84335fSJung-uk Kim * Intel Code. 74*0d84335fSJung-uk Kim * 75*0d84335fSJung-uk Kim * 3.5. Neither the name Intel nor any other trademark owned or controlled by 76*0d84335fSJung-uk Kim * Intel shall be used in advertising or otherwise to promote the sale, use or 77*0d84335fSJung-uk Kim * other dealings in products derived from or relating to the Covered Code 78*0d84335fSJung-uk Kim * without prior written authorization from Intel. 79*0d84335fSJung-uk Kim * 80*0d84335fSJung-uk Kim * 4. Disclaimer and Export Compliance 81*0d84335fSJung-uk Kim * 82*0d84335fSJung-uk Kim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 83*0d84335fSJung-uk Kim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 84*0d84335fSJung-uk Kim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 85*0d84335fSJung-uk Kim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 86*0d84335fSJung-uk Kim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 87*0d84335fSJung-uk Kim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 88*0d84335fSJung-uk Kim * PARTICULAR PURPOSE. 89*0d84335fSJung-uk Kim * 90*0d84335fSJung-uk Kim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 91*0d84335fSJung-uk Kim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 92*0d84335fSJung-uk Kim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 93*0d84335fSJung-uk Kim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 94*0d84335fSJung-uk Kim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 95*0d84335fSJung-uk Kim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 96*0d84335fSJung-uk Kim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 97*0d84335fSJung-uk Kim * LIMITED REMEDY. 98*0d84335fSJung-uk Kim * 99*0d84335fSJung-uk Kim * 4.3. Licensee shall not export, either directly or indirectly, any of this 100*0d84335fSJung-uk Kim * software or system incorporating such software without first obtaining any 101*0d84335fSJung-uk Kim * required license or other approval from the U. S. Department of Commerce or 102*0d84335fSJung-uk Kim * any other agency or department of the United States Government. In the 103*0d84335fSJung-uk Kim * event Licensee exports any such software from the United States or 104*0d84335fSJung-uk Kim * re-exports any such software from a foreign destination, Licensee shall 105*0d84335fSJung-uk Kim * ensure that the distribution and export/re-export of the software is in 106*0d84335fSJung-uk Kim * compliance with all laws, regulations, orders, or other restrictions of the 107*0d84335fSJung-uk Kim * U.S. Export Administration Regulations. Licensee agrees that neither it nor 108*0d84335fSJung-uk Kim * any of its subsidiaries will export/re-export any technical data, process, 109*0d84335fSJung-uk Kim * software, or service, directly or indirectly, to any country for which the 110*0d84335fSJung-uk Kim * United States government or any agency thereof requires an export license, 111*0d84335fSJung-uk Kim * other governmental approval, or letter of assurance, without first obtaining 112*0d84335fSJung-uk Kim * such license, approval or letter. 113*0d84335fSJung-uk Kim * 114*0d84335fSJung-uk Kim ***************************************************************************** 115*0d84335fSJung-uk Kim * 116*0d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 117*0d84335fSJung-uk Kim * following license: 118*0d84335fSJung-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 * 134*0d84335fSJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 135*0d84335fSJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 136*0d84335fSJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 137*0d84335fSJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 138*0d84335fSJung-uk Kim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 139*0d84335fSJung-uk Kim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 140*0d84335fSJung-uk Kim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 141*0d84335fSJung-uk Kim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 142*0d84335fSJung-uk Kim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 143*0d84335fSJung-uk Kim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 144*0d84335fSJung-uk Kim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 145*0d84335fSJung-uk Kim * 146*0d84335fSJung-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 * 150*0d84335fSJung-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 17753289f6aSNate Lawson 17853289f6aSNate Lawson /******************************************************************************* 17953289f6aSNate Lawson * 180f8146b88SJung-uk Kim * FUNCTION: UtIsBigEndianMachine 181f8146b88SJung-uk Kim * 182f8146b88SJung-uk Kim * PARAMETERS: None 183f8146b88SJung-uk Kim * 184f8146b88SJung-uk Kim * RETURN: TRUE if machine is big endian 185f8146b88SJung-uk Kim * FALSE if machine is little endian 186f8146b88SJung-uk Kim * 187f8146b88SJung-uk Kim * DESCRIPTION: Detect whether machine is little endian or big endian. 188f8146b88SJung-uk Kim * 189f8146b88SJung-uk Kim ******************************************************************************/ 190f8146b88SJung-uk Kim 191f8146b88SJung-uk Kim UINT8 192f8146b88SJung-uk Kim UtIsBigEndianMachine ( 193f8146b88SJung-uk Kim void) 194f8146b88SJung-uk Kim { 195f8146b88SJung-uk Kim union { 196f8146b88SJung-uk Kim UINT32 Integer; 197f8146b88SJung-uk Kim UINT8 Bytes[4]; 198f8146b88SJung-uk Kim } Overlay = {0xFF000000}; 199f8146b88SJung-uk Kim 200f8146b88SJung-uk Kim 201f8146b88SJung-uk Kim return (Overlay.Bytes[0]); /* Returns 0xFF (TRUE) for big endian */ 202f8146b88SJung-uk Kim } 203f8146b88SJung-uk Kim 204f8146b88SJung-uk Kim 205f8146b88SJung-uk Kim /****************************************************************************** 206f8146b88SJung-uk Kim * 207f8146b88SJung-uk Kim * FUNCTION: UtQueryForOverwrite 208f8146b88SJung-uk Kim * 209f8146b88SJung-uk Kim * PARAMETERS: Pathname - Output filename 210f8146b88SJung-uk Kim * 211f8146b88SJung-uk Kim * RETURN: TRUE if file does not exist or overwrite is authorized 212f8146b88SJung-uk Kim * 213f8146b88SJung-uk Kim * DESCRIPTION: Query for file overwrite if it already exists. 214f8146b88SJung-uk Kim * 215f8146b88SJung-uk Kim ******************************************************************************/ 216f8146b88SJung-uk Kim 217f8146b88SJung-uk Kim BOOLEAN 218f8146b88SJung-uk Kim UtQueryForOverwrite ( 219f8146b88SJung-uk Kim char *Pathname) 220f8146b88SJung-uk Kim { 221f8146b88SJung-uk Kim struct stat StatInfo; 222f8146b88SJung-uk Kim 223f8146b88SJung-uk Kim 224f8146b88SJung-uk Kim if (!stat (Pathname, &StatInfo)) 225f8146b88SJung-uk Kim { 226f8146b88SJung-uk Kim fprintf (stderr, "Target file \"%s\" already exists, overwrite? [y|n] ", 227f8146b88SJung-uk Kim Pathname); 228f8146b88SJung-uk Kim 229f8146b88SJung-uk Kim if (getchar () != 'y') 230f8146b88SJung-uk Kim { 231f8146b88SJung-uk Kim return (FALSE); 232f8146b88SJung-uk Kim } 233f8146b88SJung-uk Kim } 234f8146b88SJung-uk Kim 235f8146b88SJung-uk Kim return (TRUE); 236f8146b88SJung-uk Kim } 237f8146b88SJung-uk Kim 238f8146b88SJung-uk Kim 239f8146b88SJung-uk Kim /******************************************************************************* 240f8146b88SJung-uk Kim * 241a88e22b7SJung-uk Kim * FUNCTION: UtDisplaySupportedTables 242a88e22b7SJung-uk Kim * 243a88e22b7SJung-uk Kim * PARAMETERS: None 244a88e22b7SJung-uk Kim * 245a88e22b7SJung-uk Kim * RETURN: None 246a88e22b7SJung-uk Kim * 247a88e22b7SJung-uk Kim * DESCRIPTION: Print all supported ACPI table names. 248a88e22b7SJung-uk Kim * 249a88e22b7SJung-uk Kim ******************************************************************************/ 250a88e22b7SJung-uk Kim 251a88e22b7SJung-uk Kim void 252a88e22b7SJung-uk Kim UtDisplaySupportedTables ( 253a88e22b7SJung-uk Kim void) 254a88e22b7SJung-uk Kim { 255a371a5fdSJung-uk Kim const AH_TABLE *TableData; 2561df130f1SJung-uk Kim UINT32 i; 257a88e22b7SJung-uk Kim 258a88e22b7SJung-uk Kim 2591df130f1SJung-uk Kim printf ("\nACPI tables supported by iASL version %8.8X:\n" 2601df130f1SJung-uk Kim " (Compiler, Disassembler, Template Generator)\n\n", 2611df130f1SJung-uk Kim ACPI_CA_VERSION); 262a88e22b7SJung-uk Kim 263a371a5fdSJung-uk Kim /* All ACPI tables with the common table header */ 264a88e22b7SJung-uk Kim 265a371a5fdSJung-uk Kim printf ("\n Supported ACPI tables:\n"); 26628482948SJung-uk Kim for (TableData = Gbl_AcpiSupportedTables, i = 1; 267a371a5fdSJung-uk Kim TableData->Signature; TableData++, i++) 268a88e22b7SJung-uk Kim { 269a371a5fdSJung-uk Kim printf ("%8u) %s %s\n", i, 270a371a5fdSJung-uk Kim TableData->Signature, TableData->Description); 271a88e22b7SJung-uk Kim } 272a88e22b7SJung-uk Kim } 273a88e22b7SJung-uk Kim 274a88e22b7SJung-uk Kim 275a88e22b7SJung-uk Kim /******************************************************************************* 276a88e22b7SJung-uk Kim * 277f38b0f21SJung-uk Kim * FUNCTION: UtDisplayConstantOpcodes 27853289f6aSNate Lawson * 27953289f6aSNate Lawson * PARAMETERS: None 28053289f6aSNate Lawson * 28153289f6aSNate Lawson * RETURN: None 28253289f6aSNate Lawson * 28353289f6aSNate Lawson * DESCRIPTION: Print AML opcodes that can be used in constant expressions. 28453289f6aSNate Lawson * 28553289f6aSNate Lawson ******************************************************************************/ 28653289f6aSNate Lawson 28753289f6aSNate Lawson void 28853289f6aSNate Lawson UtDisplayConstantOpcodes ( 28953289f6aSNate Lawson void) 29053289f6aSNate Lawson { 29153289f6aSNate Lawson UINT32 i; 29253289f6aSNate Lawson 293fba7fc7eSJung-uk Kim 29453289f6aSNate Lawson printf ("Constant expression opcode information\n\n"); 29553289f6aSNate Lawson 29653289f6aSNate Lawson for (i = 0; i < sizeof (AcpiGbl_AmlOpInfo) / sizeof (ACPI_OPCODE_INFO); i++) 29753289f6aSNate Lawson { 29853289f6aSNate Lawson if (AcpiGbl_AmlOpInfo[i].Flags & AML_CONSTANT) 29953289f6aSNate Lawson { 30053289f6aSNate Lawson printf ("%s\n", AcpiGbl_AmlOpInfo[i].Name); 30153289f6aSNate Lawson } 30253289f6aSNate Lawson } 30353289f6aSNate Lawson } 30453289f6aSNate Lawson 30553289f6aSNate Lawson 30653289f6aSNate Lawson /******************************************************************************* 30753289f6aSNate Lawson * 30853289f6aSNate Lawson * FUNCTION: UtLocalCalloc 30953289f6aSNate Lawson * 31053289f6aSNate Lawson * PARAMETERS: Size - Bytes to be allocated 31153289f6aSNate Lawson * 31253289f6aSNate Lawson * RETURN: Pointer to the allocated memory. Guaranteed to be valid. 31353289f6aSNate Lawson * 31453289f6aSNate Lawson * DESCRIPTION: Allocate zero-initialized memory. Aborts the compile on an 31553289f6aSNate Lawson * allocation failure, on the assumption that nothing more can be 31653289f6aSNate Lawson * accomplished. 31753289f6aSNate Lawson * 31853289f6aSNate Lawson ******************************************************************************/ 31953289f6aSNate Lawson 32053289f6aSNate Lawson void * 32153289f6aSNate Lawson UtLocalCalloc ( 32253289f6aSNate Lawson UINT32 Size) 32353289f6aSNate Lawson { 32453289f6aSNate Lawson void *Allocated; 32553289f6aSNate Lawson 32653289f6aSNate Lawson 3271a39cfb0SJung-uk Kim Allocated = ACPI_ALLOCATE_ZEROED (Size); 32853289f6aSNate Lawson if (!Allocated) 32953289f6aSNate Lawson { 33053289f6aSNate Lawson AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION, 33153289f6aSNate Lawson Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 33253289f6aSNate Lawson Gbl_InputByteCount, Gbl_CurrentColumn, 33353289f6aSNate Lawson Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 334a88e22b7SJung-uk Kim 335a88e22b7SJung-uk Kim CmCleanupAndExit (); 33653289f6aSNate Lawson exit (1); 33753289f6aSNate Lawson } 33853289f6aSNate Lawson 33953289f6aSNate Lawson TotalAllocations++; 34053289f6aSNate Lawson TotalAllocated += Size; 3411a39cfb0SJung-uk Kim return (Allocated); 34253289f6aSNate Lawson } 34353289f6aSNate Lawson 34453289f6aSNate Lawson 34553289f6aSNate Lawson /******************************************************************************* 34653289f6aSNate Lawson * 34753289f6aSNate Lawson * FUNCTION: UtBeginEvent 34853289f6aSNate Lawson * 349fba7fc7eSJung-uk Kim * PARAMETERS: Name - Ascii name of this event 35053289f6aSNate Lawson * 351f38b0f21SJung-uk Kim * RETURN: Event number (integer index) 35253289f6aSNate Lawson * 35353289f6aSNate Lawson * DESCRIPTION: Saves the current time with this event 35453289f6aSNate Lawson * 35553289f6aSNate Lawson ******************************************************************************/ 35653289f6aSNate Lawson 357fba7fc7eSJung-uk Kim UINT8 35853289f6aSNate Lawson UtBeginEvent ( 35953289f6aSNate Lawson char *Name) 36053289f6aSNate Lawson { 36153289f6aSNate Lawson 362fba7fc7eSJung-uk Kim if (AslGbl_NextEvent >= ASL_NUM_EVENTS) 363fba7fc7eSJung-uk Kim { 364fba7fc7eSJung-uk Kim AcpiOsPrintf ("Ran out of compiler event structs!\n"); 365fba7fc7eSJung-uk Kim return (AslGbl_NextEvent); 366fba7fc7eSJung-uk Kim } 367fba7fc7eSJung-uk Kim 368fba7fc7eSJung-uk Kim /* Init event with current (start) time */ 369fba7fc7eSJung-uk Kim 370fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].StartTime = AcpiOsGetTimer (); 371fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].EventName = Name; 372fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].Valid = TRUE; 373fba7fc7eSJung-uk Kim return (AslGbl_NextEvent++); 37453289f6aSNate Lawson } 37553289f6aSNate Lawson 37653289f6aSNate Lawson 37753289f6aSNate Lawson /******************************************************************************* 37853289f6aSNate Lawson * 37953289f6aSNate Lawson * FUNCTION: UtEndEvent 38053289f6aSNate Lawson * 38153289f6aSNate Lawson * PARAMETERS: Event - Event number (integer index) 38253289f6aSNate Lawson * 38353289f6aSNate Lawson * RETURN: None 38453289f6aSNate Lawson * 38553289f6aSNate Lawson * DESCRIPTION: Saves the current time (end time) with this event 38653289f6aSNate Lawson * 38753289f6aSNate Lawson ******************************************************************************/ 38853289f6aSNate Lawson 38953289f6aSNate Lawson void 39053289f6aSNate Lawson UtEndEvent ( 391fba7fc7eSJung-uk Kim UINT8 Event) 39253289f6aSNate Lawson { 39353289f6aSNate Lawson 394fba7fc7eSJung-uk Kim if (Event >= ASL_NUM_EVENTS) 395fba7fc7eSJung-uk Kim { 396fba7fc7eSJung-uk Kim return; 397fba7fc7eSJung-uk Kim } 398fba7fc7eSJung-uk Kim 399fba7fc7eSJung-uk Kim /* Insert end time for event */ 400fba7fc7eSJung-uk Kim 401fba7fc7eSJung-uk Kim AslGbl_Events[Event].EndTime = AcpiOsGetTimer (); 40253289f6aSNate Lawson } 40353289f6aSNate Lawson 40453289f6aSNate Lawson 40553289f6aSNate Lawson /******************************************************************************* 40653289f6aSNate Lawson * 40753289f6aSNate Lawson * FUNCTION: DbgPrint 40853289f6aSNate Lawson * 409fba7fc7eSJung-uk Kim * PARAMETERS: Type - Type of output 410fba7fc7eSJung-uk Kim * Fmt - Printf format string 41153289f6aSNate Lawson * ... - variable printf list 41253289f6aSNate Lawson * 41353289f6aSNate Lawson * RETURN: None 41453289f6aSNate Lawson * 41553289f6aSNate Lawson * DESCRIPTION: Conditional print statement. Prints to stderr only if the 41653289f6aSNate Lawson * debug flag is set. 41753289f6aSNate Lawson * 41853289f6aSNate Lawson ******************************************************************************/ 41953289f6aSNate Lawson 42053289f6aSNate Lawson void 42153289f6aSNate Lawson DbgPrint ( 42253289f6aSNate Lawson UINT32 Type, 42353289f6aSNate Lawson char *Fmt, 42453289f6aSNate Lawson ...) 42553289f6aSNate Lawson { 42653289f6aSNate Lawson va_list Args; 42753289f6aSNate Lawson 42853289f6aSNate Lawson 42953289f6aSNate Lawson if (!Gbl_DebugFlag) 43053289f6aSNate Lawson { 43153289f6aSNate Lawson return; 43253289f6aSNate Lawson } 43353289f6aSNate Lawson 43453289f6aSNate Lawson if ((Type == ASL_PARSE_OUTPUT) && 43553289f6aSNate Lawson (!(AslCompilerdebug))) 43653289f6aSNate Lawson { 43753289f6aSNate Lawson return; 43853289f6aSNate Lawson } 43953289f6aSNate Lawson 4408d744e47SJung-uk Kim va_start (Args, Fmt); 44153289f6aSNate Lawson (void) vfprintf (stderr, Fmt, Args); 44253289f6aSNate Lawson va_end (Args); 44353289f6aSNate Lawson return; 44453289f6aSNate Lawson } 44553289f6aSNate Lawson 44653289f6aSNate Lawson 44753289f6aSNate Lawson /******************************************************************************* 44853289f6aSNate Lawson * 44953289f6aSNate Lawson * FUNCTION: UtSetParseOpName 45053289f6aSNate Lawson * 451f38b0f21SJung-uk Kim * PARAMETERS: Op - Parse op to be named. 45253289f6aSNate Lawson * 45353289f6aSNate Lawson * RETURN: None 45453289f6aSNate Lawson * 45553289f6aSNate Lawson * DESCRIPTION: Insert the ascii name of the parse opcode 45653289f6aSNate Lawson * 45753289f6aSNate Lawson ******************************************************************************/ 45853289f6aSNate Lawson 45953289f6aSNate Lawson void 46053289f6aSNate Lawson UtSetParseOpName ( 46153289f6aSNate Lawson ACPI_PARSE_OBJECT *Op) 46253289f6aSNate Lawson { 463fba7fc7eSJung-uk Kim 4641a39cfb0SJung-uk Kim strncpy (Op->Asl.ParseOpName, UtGetOpName (Op->Asl.ParseOpcode), 4651a39cfb0SJung-uk Kim ACPI_MAX_PARSEOP_NAME); 46653289f6aSNate Lawson } 46753289f6aSNate Lawson 46853289f6aSNate Lawson 46953289f6aSNate Lawson /******************************************************************************* 47053289f6aSNate Lawson * 47153289f6aSNate Lawson * FUNCTION: UtDisplaySummary 47253289f6aSNate Lawson * 473fba7fc7eSJung-uk Kim * PARAMETERS: FileID - ID of outpout file 47453289f6aSNate Lawson * 47553289f6aSNate Lawson * RETURN: None 47653289f6aSNate Lawson * 47753289f6aSNate Lawson * DESCRIPTION: Display compilation statistics 47853289f6aSNate Lawson * 47953289f6aSNate Lawson ******************************************************************************/ 48053289f6aSNate Lawson 48153289f6aSNate Lawson void 48253289f6aSNate Lawson UtDisplaySummary ( 48353289f6aSNate Lawson UINT32 FileId) 48453289f6aSNate Lawson { 4853f0275a0SJung-uk Kim UINT32 i; 4863f0275a0SJung-uk Kim 48753289f6aSNate Lawson 48853289f6aSNate Lawson if (FileId != ASL_FILE_STDOUT) 48953289f6aSNate Lawson { 49053289f6aSNate Lawson /* Compiler name and version number */ 49153289f6aSNate Lawson 49261673a1fSJung-uk Kim FlPrintFile (FileId, "%s version %X\n\n", 49361673a1fSJung-uk Kim ASL_COMPILER_NAME, (UINT32) ACPI_CA_VERSION); 49453289f6aSNate Lawson } 49553289f6aSNate Lawson 4963f0275a0SJung-uk Kim /* Summary of main input and output files */ 4973f0275a0SJung-uk Kim 498a88e22b7SJung-uk Kim if (Gbl_FileType == ASL_INPUT_TYPE_ASCII_DATA) 499a88e22b7SJung-uk Kim { 500a88e22b7SJung-uk Kim FlPrintFile (FileId, 5013f0275a0SJung-uk Kim "%-14s %s - %u lines, %u bytes, %u fields\n", 5023f0275a0SJung-uk Kim "Table Input:", 503a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_CurrentLineNumber, 504a88e22b7SJung-uk Kim Gbl_InputByteCount, Gbl_InputFieldCount); 505a88e22b7SJung-uk Kim 506a88e22b7SJung-uk Kim if ((Gbl_ExceptionCount[ASL_ERROR] == 0) || (Gbl_IgnoreErrors)) 507a88e22b7SJung-uk Kim { 508a88e22b7SJung-uk Kim FlPrintFile (FileId, 5093f0275a0SJung-uk Kim "%-14s %s - %u bytes\n", 5103f0275a0SJung-uk Kim "Binary Output:", 511a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_AML_OUTPUT].Filename, Gbl_TableLength); 512a88e22b7SJung-uk Kim } 513a88e22b7SJung-uk Kim } 514a88e22b7SJung-uk Kim else 515a88e22b7SJung-uk Kim { 51653289f6aSNate Lawson FlPrintFile (FileId, 5173f0275a0SJung-uk Kim "%-14s %s - %u lines, %u bytes, %u keywords\n", 5183f0275a0SJung-uk Kim "ASL Input:", 51953289f6aSNate Lawson Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_CurrentLineNumber, 5205ef50723SJung-uk Kim Gbl_OriginalInputFileSize, TotalKeywords); 52153289f6aSNate Lawson 52253289f6aSNate Lawson /* AML summary */ 52353289f6aSNate Lawson 52453289f6aSNate Lawson if ((Gbl_ExceptionCount[ASL_ERROR] == 0) || (Gbl_IgnoreErrors)) 52553289f6aSNate Lawson { 5265ef50723SJung-uk Kim if (Gbl_Files[ASL_FILE_AML_OUTPUT].Handle) 5275ef50723SJung-uk Kim { 52853289f6aSNate Lawson FlPrintFile (FileId, 529f8146b88SJung-uk Kim "%-14s %s - %u bytes, %u named objects, " 530f8146b88SJung-uk Kim "%u executable opcodes\n", 5313f0275a0SJung-uk Kim "AML Output:", 532f8146b88SJung-uk Kim Gbl_Files[ASL_FILE_AML_OUTPUT].Filename, 533f8146b88SJung-uk Kim FlGetFileSize (ASL_FILE_AML_OUTPUT), 53453289f6aSNate Lawson TotalNamedObjects, TotalExecutableOpcodes); 53553289f6aSNate Lawson } 536a88e22b7SJung-uk Kim } 5375ef50723SJung-uk Kim } 53853289f6aSNate Lawson 5393f0275a0SJung-uk Kim /* Display summary of any optional files */ 5403f0275a0SJung-uk Kim 5413f0275a0SJung-uk Kim for (i = ASL_FILE_SOURCE_OUTPUT; i <= ASL_MAX_FILE_TYPE; i++) 5423f0275a0SJung-uk Kim { 5433f0275a0SJung-uk Kim if (!Gbl_Files[i].Filename || !Gbl_Files[i].Handle) 5443f0275a0SJung-uk Kim { 5453f0275a0SJung-uk Kim continue; 5463f0275a0SJung-uk Kim } 5473f0275a0SJung-uk Kim 5483f0275a0SJung-uk Kim /* .SRC is a temp file unless specifically requested */ 5493f0275a0SJung-uk Kim 5503f0275a0SJung-uk Kim if ((i == ASL_FILE_SOURCE_OUTPUT) && (!Gbl_SourceOutputFlag)) 5513f0275a0SJung-uk Kim { 5523f0275a0SJung-uk Kim continue; 5533f0275a0SJung-uk Kim } 5543f0275a0SJung-uk Kim 5555ef50723SJung-uk Kim /* .PRE is the preprocessor intermediate file */ 5564c52cad2SJung-uk Kim 5575ef50723SJung-uk Kim if ((i == ASL_FILE_PREPROCESSOR) && (!Gbl_KeepPreprocessorTempFile)) 5584c52cad2SJung-uk Kim { 5594c52cad2SJung-uk Kim continue; 5604c52cad2SJung-uk Kim } 5614c52cad2SJung-uk Kim 5623f0275a0SJung-uk Kim FlPrintFile (FileId, "%14s %s - %u bytes\n", 563042ff955SJung-uk Kim Gbl_Files[i].ShortDescription, 5643f0275a0SJung-uk Kim Gbl_Files[i].Filename, FlGetFileSize (i)); 5653f0275a0SJung-uk Kim } 5663f0275a0SJung-uk Kim 56753289f6aSNate Lawson /* Error summary */ 56853289f6aSNate Lawson 56953289f6aSNate Lawson FlPrintFile (FileId, 5703f0275a0SJung-uk Kim "\nCompilation complete. %u Errors, %u Warnings, %u Remarks", 57153289f6aSNate Lawson Gbl_ExceptionCount[ASL_ERROR], 5721a39cfb0SJung-uk Kim Gbl_ExceptionCount[ASL_WARNING] + 5731a39cfb0SJung-uk Kim Gbl_ExceptionCount[ASL_WARNING2] + 5741a39cfb0SJung-uk Kim Gbl_ExceptionCount[ASL_WARNING3], 575a88e22b7SJung-uk Kim Gbl_ExceptionCount[ASL_REMARK]); 576a88e22b7SJung-uk Kim 577a88e22b7SJung-uk Kim if (Gbl_FileType != ASL_INPUT_TYPE_ASCII_DATA) 578a88e22b7SJung-uk Kim { 5797cf3e94aSJung-uk Kim FlPrintFile (FileId, ", %u Optimizations", 5807cf3e94aSJung-uk Kim Gbl_ExceptionCount[ASL_OPTIMIZATION]); 5817cf3e94aSJung-uk Kim 5827cf3e94aSJung-uk Kim if (TotalFolds) 5837cf3e94aSJung-uk Kim { 5847cf3e94aSJung-uk Kim FlPrintFile (FileId, ", %u Constants Folded", TotalFolds); 5857cf3e94aSJung-uk Kim } 586a88e22b7SJung-uk Kim } 587a88e22b7SJung-uk Kim 588a88e22b7SJung-uk Kim FlPrintFile (FileId, "\n"); 58953289f6aSNate Lawson } 59053289f6aSNate Lawson 59153289f6aSNate Lawson 59253289f6aSNate Lawson /******************************************************************************* 59353289f6aSNate Lawson * 594f38b0f21SJung-uk Kim * FUNCTION: UtCheckIntegerRange 59553289f6aSNate Lawson * 59653289f6aSNate Lawson * PARAMETERS: Op - Integer parse node 59753289f6aSNate Lawson * LowValue - Smallest allowed value 59853289f6aSNate Lawson * HighValue - Largest allowed value 59953289f6aSNate Lawson * 60053289f6aSNate Lawson * RETURN: Op if OK, otherwise NULL 60153289f6aSNate Lawson * 60253289f6aSNate Lawson * DESCRIPTION: Check integer for an allowable range 60353289f6aSNate Lawson * 60453289f6aSNate Lawson ******************************************************************************/ 60553289f6aSNate Lawson 60653289f6aSNate Lawson ACPI_PARSE_OBJECT * 60753289f6aSNate Lawson UtCheckIntegerRange ( 60853289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 60953289f6aSNate Lawson UINT32 LowValue, 61053289f6aSNate Lawson UINT32 HighValue) 61153289f6aSNate Lawson { 61253289f6aSNate Lawson 61353289f6aSNate Lawson if (!Op) 61453289f6aSNate Lawson { 6158ef1a331SJung-uk Kim return (NULL); 61653289f6aSNate Lawson } 61753289f6aSNate Lawson 6181df130f1SJung-uk Kim if ((Op->Asl.Value.Integer < LowValue) || 6191df130f1SJung-uk Kim (Op->Asl.Value.Integer > HighValue)) 62053289f6aSNate Lawson { 6211df130f1SJung-uk Kim sprintf (MsgBuffer, "0x%X, allowable: 0x%X-0x%X", 6221df130f1SJung-uk Kim (UINT32) Op->Asl.Value.Integer, LowValue, HighValue); 6231df130f1SJung-uk Kim 6241df130f1SJung-uk Kim AslError (ASL_ERROR, ASL_MSG_RANGE, Op, MsgBuffer); 6251df130f1SJung-uk Kim return (NULL); 62653289f6aSNate Lawson } 62753289f6aSNate Lawson 6281df130f1SJung-uk Kim return (Op); 62953289f6aSNate Lawson } 63053289f6aSNate Lawson 63153289f6aSNate Lawson 63253289f6aSNate Lawson /******************************************************************************* 63353289f6aSNate Lawson * 634313a0c13SJung-uk Kim * FUNCTION: UtStringCacheCalloc 63553289f6aSNate Lawson * 63653289f6aSNate Lawson * PARAMETERS: Length - Size of buffer requested 63753289f6aSNate Lawson * 63853289f6aSNate Lawson * RETURN: Pointer to the buffer. Aborts on allocation failure 63953289f6aSNate Lawson * 64053289f6aSNate Lawson * DESCRIPTION: Allocate a string buffer. Bypass the local 64153289f6aSNate Lawson * dynamic memory manager for performance reasons (This has a 64253289f6aSNate Lawson * major impact on the speed of the compiler.) 64353289f6aSNate Lawson * 64453289f6aSNate Lawson ******************************************************************************/ 64553289f6aSNate Lawson 64653289f6aSNate Lawson char * 647313a0c13SJung-uk Kim UtStringCacheCalloc ( 64853289f6aSNate Lawson UINT32 Length) 64953289f6aSNate Lawson { 65053289f6aSNate Lawson char *Buffer; 651313a0c13SJung-uk Kim ASL_CACHE_INFO *Cache; 6521c0e1b6dSJung-uk Kim UINT32 CacheSize = ASL_STRING_CACHE_SIZE; 65353289f6aSNate Lawson 65453289f6aSNate Lawson 6551c0e1b6dSJung-uk Kim if (Length > CacheSize) 656313a0c13SJung-uk Kim { 6571c0e1b6dSJung-uk Kim CacheSize = Length; 6581c0e1b6dSJung-uk Kim 6591c0e1b6dSJung-uk Kim if (Gbl_StringCacheList) 6601c0e1b6dSJung-uk Kim { 6611c0e1b6dSJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); 6621c0e1b6dSJung-uk Kim 6631c0e1b6dSJung-uk Kim /* Link new cache buffer just following head of list */ 6641c0e1b6dSJung-uk Kim 6651c0e1b6dSJung-uk Kim Cache->Next = Gbl_StringCacheList->Next; 6661c0e1b6dSJung-uk Kim Gbl_StringCacheList->Next = Cache; 6671c0e1b6dSJung-uk Kim 6681c0e1b6dSJung-uk Kim /* Leave cache management pointers alone as they pertain to head */ 6691c0e1b6dSJung-uk Kim 6701c0e1b6dSJung-uk Kim Gbl_StringCount++; 6711c0e1b6dSJung-uk Kim Gbl_StringSize += Length; 6721c0e1b6dSJung-uk Kim 6731c0e1b6dSJung-uk Kim return (Cache->Buffer); 6741c0e1b6dSJung-uk Kim } 675313a0c13SJung-uk Kim } 676313a0c13SJung-uk Kim 67753289f6aSNate Lawson if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast) 67853289f6aSNate Lawson { 679313a0c13SJung-uk Kim /* Allocate a new buffer */ 680313a0c13SJung-uk Kim 6811c0e1b6dSJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); 682313a0c13SJung-uk Kim 683313a0c13SJung-uk Kim /* Link new cache buffer to head of list */ 684313a0c13SJung-uk Kim 685313a0c13SJung-uk Kim Cache->Next = Gbl_StringCacheList; 686313a0c13SJung-uk Kim Gbl_StringCacheList = Cache; 687313a0c13SJung-uk Kim 688313a0c13SJung-uk Kim /* Setup cache management pointers */ 689313a0c13SJung-uk Kim 690313a0c13SJung-uk Kim Gbl_StringCacheNext = Cache->Buffer; 6911c0e1b6dSJung-uk Kim Gbl_StringCacheLast = Gbl_StringCacheNext + CacheSize; 69253289f6aSNate Lawson } 69353289f6aSNate Lawson 694313a0c13SJung-uk Kim Gbl_StringCount++; 695313a0c13SJung-uk Kim Gbl_StringSize += Length; 696313a0c13SJung-uk Kim 69753289f6aSNate Lawson Buffer = Gbl_StringCacheNext; 69853289f6aSNate Lawson Gbl_StringCacheNext += Length; 69953289f6aSNate Lawson return (Buffer); 70053289f6aSNate Lawson } 70153289f6aSNate Lawson 70253289f6aSNate Lawson 703042ff955SJung-uk Kim /****************************************************************************** 704042ff955SJung-uk Kim * 705042ff955SJung-uk Kim * FUNCTION: UtExpandLineBuffers 706042ff955SJung-uk Kim * 707042ff955SJung-uk Kim * PARAMETERS: None. Updates global line buffer pointers. 708042ff955SJung-uk Kim * 709042ff955SJung-uk Kim * RETURN: None. Reallocates the global line buffers 710042ff955SJung-uk Kim * 711042ff955SJung-uk Kim * DESCRIPTION: Called if the current line buffer becomes filled. Reallocates 712042ff955SJung-uk Kim * all global line buffers and updates Gbl_LineBufferSize. NOTE: 713042ff955SJung-uk Kim * Also used for the initial allocation of the buffers, when 714042ff955SJung-uk Kim * all of the buffer pointers are NULL. Initial allocations are 715042ff955SJung-uk Kim * of size ASL_DEFAULT_LINE_BUFFER_SIZE 716042ff955SJung-uk Kim * 717042ff955SJung-uk Kim *****************************************************************************/ 718042ff955SJung-uk Kim 719042ff955SJung-uk Kim void 720042ff955SJung-uk Kim UtExpandLineBuffers ( 721042ff955SJung-uk Kim void) 722042ff955SJung-uk Kim { 723042ff955SJung-uk Kim UINT32 NewSize; 724042ff955SJung-uk Kim 725042ff955SJung-uk Kim 726042ff955SJung-uk Kim /* Attempt to double the size of all line buffers */ 727042ff955SJung-uk Kim 728042ff955SJung-uk Kim NewSize = Gbl_LineBufferSize * 2; 729042ff955SJung-uk Kim if (Gbl_CurrentLineBuffer) 730042ff955SJung-uk Kim { 731313a0c13SJung-uk Kim DbgPrint (ASL_DEBUG_OUTPUT, 732313a0c13SJung-uk Kim "Increasing line buffer size from %u to %u\n", 733042ff955SJung-uk Kim Gbl_LineBufferSize, NewSize); 734042ff955SJung-uk Kim } 735042ff955SJung-uk Kim 736042ff955SJung-uk Kim Gbl_CurrentLineBuffer = realloc (Gbl_CurrentLineBuffer, NewSize); 737042ff955SJung-uk Kim Gbl_LineBufPtr = Gbl_CurrentLineBuffer; 738042ff955SJung-uk Kim if (!Gbl_CurrentLineBuffer) 739042ff955SJung-uk Kim { 740042ff955SJung-uk Kim goto ErrorExit; 741042ff955SJung-uk Kim } 742042ff955SJung-uk Kim 743042ff955SJung-uk Kim Gbl_MainTokenBuffer = realloc (Gbl_MainTokenBuffer, NewSize); 744042ff955SJung-uk Kim if (!Gbl_MainTokenBuffer) 745042ff955SJung-uk Kim { 746042ff955SJung-uk Kim goto ErrorExit; 747042ff955SJung-uk Kim } 748042ff955SJung-uk Kim 749042ff955SJung-uk Kim Gbl_MacroTokenBuffer = realloc (Gbl_MacroTokenBuffer, NewSize); 750042ff955SJung-uk Kim if (!Gbl_MacroTokenBuffer) 751042ff955SJung-uk Kim { 752042ff955SJung-uk Kim goto ErrorExit; 753042ff955SJung-uk Kim } 754042ff955SJung-uk Kim 755042ff955SJung-uk Kim Gbl_ExpressionTokenBuffer = realloc (Gbl_ExpressionTokenBuffer, NewSize); 756042ff955SJung-uk Kim if (!Gbl_ExpressionTokenBuffer) 757042ff955SJung-uk Kim { 758042ff955SJung-uk Kim goto ErrorExit; 759042ff955SJung-uk Kim } 760042ff955SJung-uk Kim 761042ff955SJung-uk Kim Gbl_LineBufferSize = NewSize; 762042ff955SJung-uk Kim return; 763042ff955SJung-uk Kim 764042ff955SJung-uk Kim 765042ff955SJung-uk Kim /* On error above, simply issue error messages and abort, cannot continue */ 766042ff955SJung-uk Kim 767042ff955SJung-uk Kim ErrorExit: 768042ff955SJung-uk Kim printf ("Could not increase line buffer size from %u to %u\n", 769042ff955SJung-uk Kim Gbl_LineBufferSize, Gbl_LineBufferSize * 2); 770042ff955SJung-uk Kim 771042ff955SJung-uk Kim AslError (ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, 772042ff955SJung-uk Kim NULL, NULL); 773042ff955SJung-uk Kim AslAbort (); 774042ff955SJung-uk Kim } 775042ff955SJung-uk Kim 776042ff955SJung-uk Kim 777313a0c13SJung-uk Kim /****************************************************************************** 778313a0c13SJung-uk Kim * 779313a0c13SJung-uk Kim * FUNCTION: UtFreeLineBuffers 780313a0c13SJung-uk Kim * 781313a0c13SJung-uk Kim * PARAMETERS: None 782313a0c13SJung-uk Kim * 783313a0c13SJung-uk Kim * RETURN: None 784313a0c13SJung-uk Kim * 785313a0c13SJung-uk Kim * DESCRIPTION: Free all line buffers 786313a0c13SJung-uk Kim * 787313a0c13SJung-uk Kim *****************************************************************************/ 788313a0c13SJung-uk Kim 789313a0c13SJung-uk Kim void 790313a0c13SJung-uk Kim UtFreeLineBuffers ( 791313a0c13SJung-uk Kim void) 792313a0c13SJung-uk Kim { 793313a0c13SJung-uk Kim 794313a0c13SJung-uk Kim free (Gbl_CurrentLineBuffer); 795313a0c13SJung-uk Kim free (Gbl_MainTokenBuffer); 796313a0c13SJung-uk Kim free (Gbl_MacroTokenBuffer); 797313a0c13SJung-uk Kim free (Gbl_ExpressionTokenBuffer); 798313a0c13SJung-uk Kim } 799313a0c13SJung-uk Kim 800313a0c13SJung-uk Kim 80153289f6aSNate Lawson /******************************************************************************* 80253289f6aSNate Lawson * 80353289f6aSNate Lawson * FUNCTION: UtInternalizeName 80453289f6aSNate Lawson * 80553289f6aSNate Lawson * PARAMETERS: ExternalName - Name to convert 80653289f6aSNate Lawson * ConvertedName - Where the converted name is returned 80753289f6aSNate Lawson * 80853289f6aSNate Lawson * RETURN: Status 80953289f6aSNate Lawson * 81053289f6aSNate Lawson * DESCRIPTION: Convert an external (ASL) name to an internal (AML) name 81153289f6aSNate Lawson * 81253289f6aSNate Lawson ******************************************************************************/ 81353289f6aSNate Lawson 81453289f6aSNate Lawson ACPI_STATUS 81553289f6aSNate Lawson UtInternalizeName ( 81653289f6aSNate Lawson char *ExternalName, 81753289f6aSNate Lawson char **ConvertedName) 81853289f6aSNate Lawson { 81953289f6aSNate Lawson ACPI_NAMESTRING_INFO Info; 82053289f6aSNate Lawson ACPI_STATUS Status; 82153289f6aSNate Lawson 82253289f6aSNate Lawson 82353289f6aSNate Lawson if (!ExternalName) 82453289f6aSNate Lawson { 82553289f6aSNate Lawson return (AE_OK); 82653289f6aSNate Lawson } 82753289f6aSNate Lawson 82853289f6aSNate Lawson /* Get the length of the new internal name */ 82953289f6aSNate Lawson 83053289f6aSNate Lawson Info.ExternalName = ExternalName; 83153289f6aSNate Lawson AcpiNsGetInternalNameLength (&Info); 83253289f6aSNate Lawson 83353289f6aSNate Lawson /* We need a segment to store the internal name */ 83453289f6aSNate Lawson 835313a0c13SJung-uk Kim Info.InternalName = UtStringCacheCalloc (Info.Length); 83653289f6aSNate Lawson if (!Info.InternalName) 83753289f6aSNate Lawson { 83853289f6aSNate Lawson return (AE_NO_MEMORY); 83953289f6aSNate Lawson } 84053289f6aSNate Lawson 84153289f6aSNate Lawson /* Build the name */ 84253289f6aSNate Lawson 84353289f6aSNate Lawson Status = AcpiNsBuildInternalName (&Info); 84453289f6aSNate Lawson if (ACPI_FAILURE (Status)) 84553289f6aSNate Lawson { 84653289f6aSNate Lawson return (Status); 84753289f6aSNate Lawson } 84853289f6aSNate Lawson 84953289f6aSNate Lawson *ConvertedName = Info.InternalName; 85053289f6aSNate Lawson return (AE_OK); 85153289f6aSNate Lawson } 85253289f6aSNate Lawson 85353289f6aSNate Lawson 85453289f6aSNate Lawson /******************************************************************************* 85553289f6aSNate Lawson * 85653289f6aSNate Lawson * FUNCTION: UtPadNameWithUnderscores 85753289f6aSNate Lawson * 85853289f6aSNate Lawson * PARAMETERS: NameSeg - Input nameseg 85953289f6aSNate Lawson * PaddedNameSeg - Output padded nameseg 86053289f6aSNate Lawson * 86153289f6aSNate Lawson * RETURN: Padded nameseg. 86253289f6aSNate Lawson * 86353289f6aSNate Lawson * DESCRIPTION: Pads a NameSeg with underscores if necessary to form a full 86453289f6aSNate Lawson * ACPI_NAME. 86553289f6aSNate Lawson * 86653289f6aSNate Lawson ******************************************************************************/ 86753289f6aSNate Lawson 868fba7fc7eSJung-uk Kim static void 86953289f6aSNate Lawson UtPadNameWithUnderscores ( 87053289f6aSNate Lawson char *NameSeg, 87153289f6aSNate Lawson char *PaddedNameSeg) 87253289f6aSNate Lawson { 87353289f6aSNate Lawson UINT32 i; 87453289f6aSNate Lawson 87553289f6aSNate Lawson 87653289f6aSNate Lawson for (i = 0; (i < ACPI_NAME_SIZE); i++) 87753289f6aSNate Lawson { 87853289f6aSNate Lawson if (*NameSeg) 87953289f6aSNate Lawson { 88053289f6aSNate Lawson *PaddedNameSeg = *NameSeg; 88153289f6aSNate Lawson NameSeg++; 88253289f6aSNate Lawson } 88353289f6aSNate Lawson else 88453289f6aSNate Lawson { 88553289f6aSNate Lawson *PaddedNameSeg = '_'; 88653289f6aSNate Lawson } 887f8146b88SJung-uk Kim 88853289f6aSNate Lawson PaddedNameSeg++; 88953289f6aSNate Lawson } 89053289f6aSNate Lawson } 89153289f6aSNate Lawson 89253289f6aSNate Lawson 89353289f6aSNate Lawson /******************************************************************************* 89453289f6aSNate Lawson * 89553289f6aSNate Lawson * FUNCTION: UtAttachNameseg 89653289f6aSNate Lawson * 89753289f6aSNate Lawson * PARAMETERS: Op - Parent parse node 89853289f6aSNate Lawson * Name - Full ExternalName 89953289f6aSNate Lawson * 900fba7fc7eSJung-uk Kim * RETURN: None; Sets the NameSeg field in parent node 90153289f6aSNate Lawson * 90253289f6aSNate Lawson * DESCRIPTION: Extract the last nameseg of the ExternalName and store it 90353289f6aSNate Lawson * in the NameSeg field of the Op. 90453289f6aSNate Lawson * 90553289f6aSNate Lawson ******************************************************************************/ 90653289f6aSNate Lawson 907fba7fc7eSJung-uk Kim static void 90853289f6aSNate Lawson UtAttachNameseg ( 90953289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 91053289f6aSNate Lawson char *Name) 91153289f6aSNate Lawson { 91253289f6aSNate Lawson char *NameSeg; 91353289f6aSNate Lawson char PaddedNameSeg[4]; 91453289f6aSNate Lawson 91553289f6aSNate Lawson 91653289f6aSNate Lawson if (!Name) 91753289f6aSNate Lawson { 91853289f6aSNate Lawson return; 91953289f6aSNate Lawson } 92053289f6aSNate Lawson 92153289f6aSNate Lawson /* Look for the last dot in the namepath */ 92253289f6aSNate Lawson 92353289f6aSNate Lawson NameSeg = strrchr (Name, '.'); 92453289f6aSNate Lawson if (NameSeg) 92553289f6aSNate Lawson { 92653289f6aSNate Lawson /* Found last dot, we have also found the final nameseg */ 92753289f6aSNate Lawson 92853289f6aSNate Lawson NameSeg++; 92953289f6aSNate Lawson UtPadNameWithUnderscores (NameSeg, PaddedNameSeg); 93053289f6aSNate Lawson } 93153289f6aSNate Lawson else 93253289f6aSNate Lawson { 93353289f6aSNate Lawson /* No dots in the namepath, there is only a single nameseg. */ 93453289f6aSNate Lawson /* Handle prefixes */ 93553289f6aSNate Lawson 936efcc2a30SJung-uk Kim while (ACPI_IS_ROOT_PREFIX (*Name) || 937efcc2a30SJung-uk Kim ACPI_IS_PARENT_PREFIX (*Name)) 93853289f6aSNate Lawson { 93953289f6aSNate Lawson Name++; 94053289f6aSNate Lawson } 94153289f6aSNate Lawson 9428ef1a331SJung-uk Kim /* Remaining string should be one single nameseg */ 94353289f6aSNate Lawson 94453289f6aSNate Lawson UtPadNameWithUnderscores (Name, PaddedNameSeg); 94553289f6aSNate Lawson } 94653289f6aSNate Lawson 9478ef1a331SJung-uk Kim ACPI_MOVE_NAME (Op->Asl.NameSeg, PaddedNameSeg); 94853289f6aSNate Lawson } 94953289f6aSNate Lawson 95053289f6aSNate Lawson 95153289f6aSNate Lawson /******************************************************************************* 95253289f6aSNate Lawson * 95353289f6aSNate Lawson * FUNCTION: UtAttachNamepathToOwner 95453289f6aSNate Lawson * 95553289f6aSNate Lawson * PARAMETERS: Op - Parent parse node 95653289f6aSNate Lawson * NameOp - Node that contains the name 95753289f6aSNate Lawson * 95853289f6aSNate Lawson * RETURN: Sets the ExternalName and Namepath in the parent node 95953289f6aSNate Lawson * 96053289f6aSNate Lawson * DESCRIPTION: Store the name in two forms in the parent node: The original 96153289f6aSNate Lawson * (external) name, and the internalized name that is used within 96253289f6aSNate Lawson * the ACPI namespace manager. 96353289f6aSNate Lawson * 96453289f6aSNate Lawson ******************************************************************************/ 96553289f6aSNate Lawson 96653289f6aSNate Lawson void 96753289f6aSNate Lawson UtAttachNamepathToOwner ( 96853289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 96953289f6aSNate Lawson ACPI_PARSE_OBJECT *NameOp) 97053289f6aSNate Lawson { 97153289f6aSNate Lawson ACPI_STATUS Status; 97253289f6aSNate Lawson 97353289f6aSNate Lawson 97453289f6aSNate Lawson /* Full external path */ 97553289f6aSNate Lawson 97653289f6aSNate Lawson Op->Asl.ExternalName = NameOp->Asl.Value.String; 97753289f6aSNate Lawson 978fba7fc7eSJung-uk Kim /* Save the NameOp for possible error reporting later */ 979fba7fc7eSJung-uk Kim 980fba7fc7eSJung-uk Kim Op->Asl.ParentMethod = (void *) NameOp; 981fba7fc7eSJung-uk Kim 98253289f6aSNate Lawson /* Last nameseg of the path */ 98353289f6aSNate Lawson 98453289f6aSNate Lawson UtAttachNameseg (Op, Op->Asl.ExternalName); 98553289f6aSNate Lawson 98653289f6aSNate Lawson /* Create internalized path */ 98753289f6aSNate Lawson 98853289f6aSNate Lawson Status = UtInternalizeName (NameOp->Asl.Value.String, &Op->Asl.Namepath); 98953289f6aSNate Lawson if (ACPI_FAILURE (Status)) 99053289f6aSNate Lawson { 99153289f6aSNate Lawson /* TBD: abort on no memory */ 99253289f6aSNate Lawson } 99353289f6aSNate Lawson } 99453289f6aSNate Lawson 99553289f6aSNate Lawson 99653289f6aSNate Lawson /******************************************************************************* 99753289f6aSNate Lawson * 99853289f6aSNate Lawson * FUNCTION: UtDoConstant 99953289f6aSNate Lawson * 1000493deb39SJung-uk Kim * PARAMETERS: String - Hexadecimal or decimal string 100153289f6aSNate Lawson * 100253289f6aSNate Lawson * RETURN: Converted Integer 100353289f6aSNate Lawson * 1004f38b0f21SJung-uk Kim * DESCRIPTION: Convert a string to an integer, with error checking. 100553289f6aSNate Lawson * 100653289f6aSNate Lawson ******************************************************************************/ 100753289f6aSNate Lawson 10089a179dd8SJung-uk Kim UINT64 100953289f6aSNate Lawson UtDoConstant ( 101053289f6aSNate Lawson char *String) 101153289f6aSNate Lawson { 101253289f6aSNate Lawson ACPI_STATUS Status; 10139a179dd8SJung-uk Kim UINT64 Converted; 101453289f6aSNate Lawson char ErrBuf[64]; 101553289f6aSNate Lawson 101653289f6aSNate Lawson 1017493deb39SJung-uk Kim Status = AcpiUtStrtoul64 (String, ACPI_STRTOUL_64BIT, &Converted); 101853289f6aSNate Lawson if (ACPI_FAILURE (Status)) 101953289f6aSNate Lawson { 1020fba7fc7eSJung-uk Kim sprintf (ErrBuf, "%s %s\n", "Conversion error:", 1021fba7fc7eSJung-uk Kim AcpiFormatException (Status)); 102253289f6aSNate Lawson AslCompilererror (ErrBuf); 102353289f6aSNate Lawson } 102453289f6aSNate Lawson 102553289f6aSNate Lawson return (Converted); 102653289f6aSNate Lawson } 1027