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 * 110d84335fSJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2017, 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 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: UtBeginEvent 30953289f6aSNate Lawson * 310fba7fc7eSJung-uk Kim * PARAMETERS: Name - Ascii name of this event 31153289f6aSNate Lawson * 312f38b0f21SJung-uk Kim * RETURN: Event number (integer index) 31353289f6aSNate Lawson * 31453289f6aSNate Lawson * DESCRIPTION: Saves the current time with this event 31553289f6aSNate Lawson * 31653289f6aSNate Lawson ******************************************************************************/ 31753289f6aSNate Lawson 318fba7fc7eSJung-uk Kim UINT8 31953289f6aSNate Lawson UtBeginEvent ( 32053289f6aSNate Lawson char *Name) 32153289f6aSNate Lawson { 32253289f6aSNate Lawson 323fba7fc7eSJung-uk Kim if (AslGbl_NextEvent >= ASL_NUM_EVENTS) 324fba7fc7eSJung-uk Kim { 325fba7fc7eSJung-uk Kim AcpiOsPrintf ("Ran out of compiler event structs!\n"); 326fba7fc7eSJung-uk Kim return (AslGbl_NextEvent); 327fba7fc7eSJung-uk Kim } 328fba7fc7eSJung-uk Kim 329fba7fc7eSJung-uk Kim /* Init event with current (start) time */ 330fba7fc7eSJung-uk Kim 331fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].StartTime = AcpiOsGetTimer (); 332fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].EventName = Name; 333fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].Valid = TRUE; 334fba7fc7eSJung-uk Kim return (AslGbl_NextEvent++); 33553289f6aSNate Lawson } 33653289f6aSNate Lawson 33753289f6aSNate Lawson 33853289f6aSNate Lawson /******************************************************************************* 33953289f6aSNate Lawson * 34053289f6aSNate Lawson * FUNCTION: UtEndEvent 34153289f6aSNate Lawson * 34253289f6aSNate Lawson * PARAMETERS: Event - Event number (integer index) 34353289f6aSNate Lawson * 34453289f6aSNate Lawson * RETURN: None 34553289f6aSNate Lawson * 34653289f6aSNate Lawson * DESCRIPTION: Saves the current time (end time) with this event 34753289f6aSNate Lawson * 34853289f6aSNate Lawson ******************************************************************************/ 34953289f6aSNate Lawson 35053289f6aSNate Lawson void 35153289f6aSNate Lawson UtEndEvent ( 352fba7fc7eSJung-uk Kim UINT8 Event) 35353289f6aSNate Lawson { 35453289f6aSNate Lawson 355fba7fc7eSJung-uk Kim if (Event >= ASL_NUM_EVENTS) 356fba7fc7eSJung-uk Kim { 357fba7fc7eSJung-uk Kim return; 358fba7fc7eSJung-uk Kim } 359fba7fc7eSJung-uk Kim 360fba7fc7eSJung-uk Kim /* Insert end time for event */ 361fba7fc7eSJung-uk Kim 362fba7fc7eSJung-uk Kim AslGbl_Events[Event].EndTime = AcpiOsGetTimer (); 36353289f6aSNate Lawson } 36453289f6aSNate Lawson 36553289f6aSNate Lawson 36653289f6aSNate Lawson /******************************************************************************* 36753289f6aSNate Lawson * 36853289f6aSNate Lawson * FUNCTION: DbgPrint 36953289f6aSNate Lawson * 370fba7fc7eSJung-uk Kim * PARAMETERS: Type - Type of output 371fba7fc7eSJung-uk Kim * Fmt - Printf format string 37253289f6aSNate Lawson * ... - variable printf list 37353289f6aSNate Lawson * 37453289f6aSNate Lawson * RETURN: None 37553289f6aSNate Lawson * 37653289f6aSNate Lawson * DESCRIPTION: Conditional print statement. Prints to stderr only if the 37753289f6aSNate Lawson * debug flag is set. 37853289f6aSNate Lawson * 37953289f6aSNate Lawson ******************************************************************************/ 38053289f6aSNate Lawson 38153289f6aSNate Lawson void 38253289f6aSNate Lawson DbgPrint ( 38353289f6aSNate Lawson UINT32 Type, 38453289f6aSNate Lawson char *Fmt, 38553289f6aSNate Lawson ...) 38653289f6aSNate Lawson { 38753289f6aSNate Lawson va_list Args; 38853289f6aSNate Lawson 38953289f6aSNate Lawson 39053289f6aSNate Lawson if (!Gbl_DebugFlag) 39153289f6aSNate Lawson { 39253289f6aSNate Lawson return; 39353289f6aSNate Lawson } 39453289f6aSNate Lawson 39553289f6aSNate Lawson if ((Type == ASL_PARSE_OUTPUT) && 39653289f6aSNate Lawson (!(AslCompilerdebug))) 39753289f6aSNate Lawson { 39853289f6aSNate Lawson return; 39953289f6aSNate Lawson } 40053289f6aSNate Lawson 4018d744e47SJung-uk Kim va_start (Args, Fmt); 40253289f6aSNate Lawson (void) vfprintf (stderr, Fmt, Args); 40353289f6aSNate Lawson va_end (Args); 40453289f6aSNate Lawson return; 40553289f6aSNate Lawson } 40653289f6aSNate Lawson 40753289f6aSNate Lawson 40853289f6aSNate Lawson /******************************************************************************* 40953289f6aSNate Lawson * 41053289f6aSNate Lawson * FUNCTION: UtSetParseOpName 41153289f6aSNate Lawson * 412f38b0f21SJung-uk Kim * PARAMETERS: Op - Parse op to be named. 41353289f6aSNate Lawson * 41453289f6aSNate Lawson * RETURN: None 41553289f6aSNate Lawson * 41653289f6aSNate Lawson * DESCRIPTION: Insert the ascii name of the parse opcode 41753289f6aSNate Lawson * 41853289f6aSNate Lawson ******************************************************************************/ 41953289f6aSNate Lawson 42053289f6aSNate Lawson void 42153289f6aSNate Lawson UtSetParseOpName ( 42253289f6aSNate Lawson ACPI_PARSE_OBJECT *Op) 42353289f6aSNate Lawson { 424fba7fc7eSJung-uk Kim 4251a39cfb0SJung-uk Kim strncpy (Op->Asl.ParseOpName, UtGetOpName (Op->Asl.ParseOpcode), 4261a39cfb0SJung-uk Kim ACPI_MAX_PARSEOP_NAME); 42753289f6aSNate Lawson } 42853289f6aSNate Lawson 42953289f6aSNate Lawson 43053289f6aSNate Lawson /******************************************************************************* 43153289f6aSNate Lawson * 43253289f6aSNate Lawson * FUNCTION: UtDisplaySummary 43353289f6aSNate Lawson * 434fba7fc7eSJung-uk Kim * PARAMETERS: FileID - ID of outpout file 43553289f6aSNate Lawson * 43653289f6aSNate Lawson * RETURN: None 43753289f6aSNate Lawson * 43853289f6aSNate Lawson * DESCRIPTION: Display compilation statistics 43953289f6aSNate Lawson * 44053289f6aSNate Lawson ******************************************************************************/ 44153289f6aSNate Lawson 44253289f6aSNate Lawson void 44353289f6aSNate Lawson UtDisplaySummary ( 44453289f6aSNate Lawson UINT32 FileId) 44553289f6aSNate Lawson { 4463f0275a0SJung-uk Kim UINT32 i; 4473f0275a0SJung-uk Kim 44853289f6aSNate Lawson 44953289f6aSNate Lawson if (FileId != ASL_FILE_STDOUT) 45053289f6aSNate Lawson { 45153289f6aSNate Lawson /* Compiler name and version number */ 45253289f6aSNate Lawson 45361673a1fSJung-uk Kim FlPrintFile (FileId, "%s version %X\n\n", 45461673a1fSJung-uk Kim ASL_COMPILER_NAME, (UINT32) ACPI_CA_VERSION); 45553289f6aSNate Lawson } 45653289f6aSNate Lawson 4573f0275a0SJung-uk Kim /* Summary of main input and output files */ 4583f0275a0SJung-uk Kim 459a88e22b7SJung-uk Kim if (Gbl_FileType == ASL_INPUT_TYPE_ASCII_DATA) 460a88e22b7SJung-uk Kim { 461a88e22b7SJung-uk Kim FlPrintFile (FileId, 4623f0275a0SJung-uk Kim "%-14s %s - %u lines, %u bytes, %u fields\n", 4633f0275a0SJung-uk Kim "Table Input:", 464a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_CurrentLineNumber, 465a88e22b7SJung-uk Kim Gbl_InputByteCount, Gbl_InputFieldCount); 466a88e22b7SJung-uk Kim 467a88e22b7SJung-uk Kim if ((Gbl_ExceptionCount[ASL_ERROR] == 0) || (Gbl_IgnoreErrors)) 468a88e22b7SJung-uk Kim { 469a88e22b7SJung-uk Kim FlPrintFile (FileId, 4703f0275a0SJung-uk Kim "%-14s %s - %u bytes\n", 4713f0275a0SJung-uk Kim "Binary Output:", 472a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_AML_OUTPUT].Filename, Gbl_TableLength); 473a88e22b7SJung-uk Kim } 474a88e22b7SJung-uk Kim } 475a88e22b7SJung-uk Kim else 476a88e22b7SJung-uk Kim { 47753289f6aSNate Lawson FlPrintFile (FileId, 4783f0275a0SJung-uk Kim "%-14s %s - %u lines, %u bytes, %u keywords\n", 4793f0275a0SJung-uk Kim "ASL Input:", 48053289f6aSNate Lawson Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_CurrentLineNumber, 4815ef50723SJung-uk Kim Gbl_OriginalInputFileSize, TotalKeywords); 48253289f6aSNate Lawson 48353289f6aSNate Lawson /* AML summary */ 48453289f6aSNate Lawson 48553289f6aSNate Lawson if ((Gbl_ExceptionCount[ASL_ERROR] == 0) || (Gbl_IgnoreErrors)) 48653289f6aSNate Lawson { 4875ef50723SJung-uk Kim if (Gbl_Files[ASL_FILE_AML_OUTPUT].Handle) 4885ef50723SJung-uk Kim { 48953289f6aSNate Lawson FlPrintFile (FileId, 490f8146b88SJung-uk Kim "%-14s %s - %u bytes, %u named objects, " 491f8146b88SJung-uk Kim "%u executable opcodes\n", 4923f0275a0SJung-uk Kim "AML Output:", 493f8146b88SJung-uk Kim Gbl_Files[ASL_FILE_AML_OUTPUT].Filename, 494f8146b88SJung-uk Kim FlGetFileSize (ASL_FILE_AML_OUTPUT), 49553289f6aSNate Lawson TotalNamedObjects, TotalExecutableOpcodes); 49653289f6aSNate Lawson } 497a88e22b7SJung-uk Kim } 4985ef50723SJung-uk Kim } 49953289f6aSNate Lawson 5003f0275a0SJung-uk Kim /* Display summary of any optional files */ 5013f0275a0SJung-uk Kim 5023f0275a0SJung-uk Kim for (i = ASL_FILE_SOURCE_OUTPUT; i <= ASL_MAX_FILE_TYPE; i++) 5033f0275a0SJung-uk Kim { 5043f0275a0SJung-uk Kim if (!Gbl_Files[i].Filename || !Gbl_Files[i].Handle) 5053f0275a0SJung-uk Kim { 5063f0275a0SJung-uk Kim continue; 5073f0275a0SJung-uk Kim } 5083f0275a0SJung-uk Kim 5093f0275a0SJung-uk Kim /* .SRC is a temp file unless specifically requested */ 5103f0275a0SJung-uk Kim 5113f0275a0SJung-uk Kim if ((i == ASL_FILE_SOURCE_OUTPUT) && (!Gbl_SourceOutputFlag)) 5123f0275a0SJung-uk Kim { 5133f0275a0SJung-uk Kim continue; 5143f0275a0SJung-uk Kim } 5153f0275a0SJung-uk Kim 5165ef50723SJung-uk Kim /* .PRE is the preprocessor intermediate file */ 5174c52cad2SJung-uk Kim 5185ef50723SJung-uk Kim if ((i == ASL_FILE_PREPROCESSOR) && (!Gbl_KeepPreprocessorTempFile)) 5194c52cad2SJung-uk Kim { 5204c52cad2SJung-uk Kim continue; 5214c52cad2SJung-uk Kim } 5224c52cad2SJung-uk Kim 5233f0275a0SJung-uk Kim FlPrintFile (FileId, "%14s %s - %u bytes\n", 524042ff955SJung-uk Kim Gbl_Files[i].ShortDescription, 5253f0275a0SJung-uk Kim Gbl_Files[i].Filename, FlGetFileSize (i)); 5263f0275a0SJung-uk Kim } 5273f0275a0SJung-uk Kim 52853289f6aSNate Lawson /* Error summary */ 52953289f6aSNate Lawson 53053289f6aSNate Lawson FlPrintFile (FileId, 5313f0275a0SJung-uk Kim "\nCompilation complete. %u Errors, %u Warnings, %u Remarks", 53253289f6aSNate Lawson Gbl_ExceptionCount[ASL_ERROR], 5331a39cfb0SJung-uk Kim Gbl_ExceptionCount[ASL_WARNING] + 5341a39cfb0SJung-uk Kim Gbl_ExceptionCount[ASL_WARNING2] + 5351a39cfb0SJung-uk Kim Gbl_ExceptionCount[ASL_WARNING3], 536a88e22b7SJung-uk Kim Gbl_ExceptionCount[ASL_REMARK]); 537a88e22b7SJung-uk Kim 538a88e22b7SJung-uk Kim if (Gbl_FileType != ASL_INPUT_TYPE_ASCII_DATA) 539a88e22b7SJung-uk Kim { 5407cf3e94aSJung-uk Kim FlPrintFile (FileId, ", %u Optimizations", 5417cf3e94aSJung-uk Kim Gbl_ExceptionCount[ASL_OPTIMIZATION]); 5427cf3e94aSJung-uk Kim 5437cf3e94aSJung-uk Kim if (TotalFolds) 5447cf3e94aSJung-uk Kim { 5457cf3e94aSJung-uk Kim FlPrintFile (FileId, ", %u Constants Folded", TotalFolds); 5467cf3e94aSJung-uk Kim } 547a88e22b7SJung-uk Kim } 548a88e22b7SJung-uk Kim 549a88e22b7SJung-uk Kim FlPrintFile (FileId, "\n"); 55053289f6aSNate Lawson } 55153289f6aSNate Lawson 55253289f6aSNate Lawson 55353289f6aSNate Lawson /******************************************************************************* 55453289f6aSNate Lawson * 555f38b0f21SJung-uk Kim * FUNCTION: UtCheckIntegerRange 55653289f6aSNate Lawson * 55753289f6aSNate Lawson * PARAMETERS: Op - Integer parse node 55853289f6aSNate Lawson * LowValue - Smallest allowed value 55953289f6aSNate Lawson * HighValue - Largest allowed value 56053289f6aSNate Lawson * 56153289f6aSNate Lawson * RETURN: Op if OK, otherwise NULL 56253289f6aSNate Lawson * 56353289f6aSNate Lawson * DESCRIPTION: Check integer for an allowable range 56453289f6aSNate Lawson * 56553289f6aSNate Lawson ******************************************************************************/ 56653289f6aSNate Lawson 56753289f6aSNate Lawson ACPI_PARSE_OBJECT * 56853289f6aSNate Lawson UtCheckIntegerRange ( 56953289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 57053289f6aSNate Lawson UINT32 LowValue, 57153289f6aSNate Lawson UINT32 HighValue) 57253289f6aSNate Lawson { 57353289f6aSNate Lawson 57453289f6aSNate Lawson if (!Op) 57553289f6aSNate Lawson { 5768ef1a331SJung-uk Kim return (NULL); 57753289f6aSNate Lawson } 57853289f6aSNate Lawson 5791df130f1SJung-uk Kim if ((Op->Asl.Value.Integer < LowValue) || 5801df130f1SJung-uk Kim (Op->Asl.Value.Integer > HighValue)) 58153289f6aSNate Lawson { 5821df130f1SJung-uk Kim sprintf (MsgBuffer, "0x%X, allowable: 0x%X-0x%X", 5831df130f1SJung-uk Kim (UINT32) Op->Asl.Value.Integer, LowValue, HighValue); 5841df130f1SJung-uk Kim 5851df130f1SJung-uk Kim AslError (ASL_ERROR, ASL_MSG_RANGE, Op, MsgBuffer); 5861df130f1SJung-uk Kim return (NULL); 58753289f6aSNate Lawson } 58853289f6aSNate Lawson 5891df130f1SJung-uk Kim return (Op); 59053289f6aSNate Lawson } 59153289f6aSNate Lawson 59253289f6aSNate Lawson 59353289f6aSNate Lawson /******************************************************************************* 59453289f6aSNate Lawson * 59553289f6aSNate Lawson * FUNCTION: UtInternalizeName 59653289f6aSNate Lawson * 59753289f6aSNate Lawson * PARAMETERS: ExternalName - Name to convert 59853289f6aSNate Lawson * ConvertedName - Where the converted name is returned 59953289f6aSNate Lawson * 60053289f6aSNate Lawson * RETURN: Status 60153289f6aSNate Lawson * 60253289f6aSNate Lawson * DESCRIPTION: Convert an external (ASL) name to an internal (AML) name 60353289f6aSNate Lawson * 60453289f6aSNate Lawson ******************************************************************************/ 60553289f6aSNate Lawson 60653289f6aSNate Lawson ACPI_STATUS 60753289f6aSNate Lawson UtInternalizeName ( 60853289f6aSNate Lawson char *ExternalName, 60953289f6aSNate Lawson char **ConvertedName) 61053289f6aSNate Lawson { 61153289f6aSNate Lawson ACPI_NAMESTRING_INFO Info; 61253289f6aSNate Lawson ACPI_STATUS Status; 61353289f6aSNate Lawson 61453289f6aSNate Lawson 61553289f6aSNate Lawson if (!ExternalName) 61653289f6aSNate Lawson { 61753289f6aSNate Lawson return (AE_OK); 61853289f6aSNate Lawson } 61953289f6aSNate Lawson 62053289f6aSNate Lawson /* Get the length of the new internal name */ 62153289f6aSNate Lawson 62253289f6aSNate Lawson Info.ExternalName = ExternalName; 62353289f6aSNate Lawson AcpiNsGetInternalNameLength (&Info); 62453289f6aSNate Lawson 62553289f6aSNate Lawson /* We need a segment to store the internal name */ 62653289f6aSNate Lawson 627*67d9aa44SJung-uk Kim Info.InternalName = UtLocalCacheCalloc (Info.Length); 62853289f6aSNate Lawson 62953289f6aSNate Lawson /* Build the name */ 63053289f6aSNate Lawson 63153289f6aSNate Lawson Status = AcpiNsBuildInternalName (&Info); 63253289f6aSNate Lawson if (ACPI_FAILURE (Status)) 63353289f6aSNate Lawson { 63453289f6aSNate Lawson return (Status); 63553289f6aSNate Lawson } 63653289f6aSNate Lawson 63753289f6aSNate Lawson *ConvertedName = Info.InternalName; 63853289f6aSNate Lawson return (AE_OK); 63953289f6aSNate Lawson } 64053289f6aSNate Lawson 64153289f6aSNate Lawson 64253289f6aSNate Lawson /******************************************************************************* 64353289f6aSNate Lawson * 64453289f6aSNate Lawson * FUNCTION: UtPadNameWithUnderscores 64553289f6aSNate Lawson * 64653289f6aSNate Lawson * PARAMETERS: NameSeg - Input nameseg 64753289f6aSNate Lawson * PaddedNameSeg - Output padded nameseg 64853289f6aSNate Lawson * 64953289f6aSNate Lawson * RETURN: Padded nameseg. 65053289f6aSNate Lawson * 65153289f6aSNate Lawson * DESCRIPTION: Pads a NameSeg with underscores if necessary to form a full 65253289f6aSNate Lawson * ACPI_NAME. 65353289f6aSNate Lawson * 65453289f6aSNate Lawson ******************************************************************************/ 65553289f6aSNate Lawson 656fba7fc7eSJung-uk Kim static void 65753289f6aSNate Lawson UtPadNameWithUnderscores ( 65853289f6aSNate Lawson char *NameSeg, 65953289f6aSNate Lawson char *PaddedNameSeg) 66053289f6aSNate Lawson { 66153289f6aSNate Lawson UINT32 i; 66253289f6aSNate Lawson 66353289f6aSNate Lawson 66453289f6aSNate Lawson for (i = 0; (i < ACPI_NAME_SIZE); i++) 66553289f6aSNate Lawson { 66653289f6aSNate Lawson if (*NameSeg) 66753289f6aSNate Lawson { 66853289f6aSNate Lawson *PaddedNameSeg = *NameSeg; 66953289f6aSNate Lawson NameSeg++; 67053289f6aSNate Lawson } 67153289f6aSNate Lawson else 67253289f6aSNate Lawson { 67353289f6aSNate Lawson *PaddedNameSeg = '_'; 67453289f6aSNate Lawson } 675f8146b88SJung-uk Kim 67653289f6aSNate Lawson PaddedNameSeg++; 67753289f6aSNate Lawson } 67853289f6aSNate Lawson } 67953289f6aSNate Lawson 68053289f6aSNate Lawson 68153289f6aSNate Lawson /******************************************************************************* 68253289f6aSNate Lawson * 68353289f6aSNate Lawson * FUNCTION: UtAttachNameseg 68453289f6aSNate Lawson * 68553289f6aSNate Lawson * PARAMETERS: Op - Parent parse node 68653289f6aSNate Lawson * Name - Full ExternalName 68753289f6aSNate Lawson * 688fba7fc7eSJung-uk Kim * RETURN: None; Sets the NameSeg field in parent node 68953289f6aSNate Lawson * 69053289f6aSNate Lawson * DESCRIPTION: Extract the last nameseg of the ExternalName and store it 69153289f6aSNate Lawson * in the NameSeg field of the Op. 69253289f6aSNate Lawson * 69353289f6aSNate Lawson ******************************************************************************/ 69453289f6aSNate Lawson 695fba7fc7eSJung-uk Kim static void 69653289f6aSNate Lawson UtAttachNameseg ( 69753289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 69853289f6aSNate Lawson char *Name) 69953289f6aSNate Lawson { 70053289f6aSNate Lawson char *NameSeg; 70153289f6aSNate Lawson char PaddedNameSeg[4]; 70253289f6aSNate Lawson 70353289f6aSNate Lawson 70453289f6aSNate Lawson if (!Name) 70553289f6aSNate Lawson { 70653289f6aSNate Lawson return; 70753289f6aSNate Lawson } 70853289f6aSNate Lawson 70953289f6aSNate Lawson /* Look for the last dot in the namepath */ 71053289f6aSNate Lawson 71153289f6aSNate Lawson NameSeg = strrchr (Name, '.'); 71253289f6aSNate Lawson if (NameSeg) 71353289f6aSNate Lawson { 71453289f6aSNate Lawson /* Found last dot, we have also found the final nameseg */ 71553289f6aSNate Lawson 71653289f6aSNate Lawson NameSeg++; 71753289f6aSNate Lawson UtPadNameWithUnderscores (NameSeg, PaddedNameSeg); 71853289f6aSNate Lawson } 71953289f6aSNate Lawson else 72053289f6aSNate Lawson { 72153289f6aSNate Lawson /* No dots in the namepath, there is only a single nameseg. */ 72253289f6aSNate Lawson /* Handle prefixes */ 72353289f6aSNate Lawson 724efcc2a30SJung-uk Kim while (ACPI_IS_ROOT_PREFIX (*Name) || 725efcc2a30SJung-uk Kim ACPI_IS_PARENT_PREFIX (*Name)) 72653289f6aSNate Lawson { 72753289f6aSNate Lawson Name++; 72853289f6aSNate Lawson } 72953289f6aSNate Lawson 7308ef1a331SJung-uk Kim /* Remaining string should be one single nameseg */ 73153289f6aSNate Lawson 73253289f6aSNate Lawson UtPadNameWithUnderscores (Name, PaddedNameSeg); 73353289f6aSNate Lawson } 73453289f6aSNate Lawson 7358ef1a331SJung-uk Kim ACPI_MOVE_NAME (Op->Asl.NameSeg, PaddedNameSeg); 73653289f6aSNate Lawson } 73753289f6aSNate Lawson 73853289f6aSNate Lawson 73953289f6aSNate Lawson /******************************************************************************* 74053289f6aSNate Lawson * 74153289f6aSNate Lawson * FUNCTION: UtAttachNamepathToOwner 74253289f6aSNate Lawson * 74353289f6aSNate Lawson * PARAMETERS: Op - Parent parse node 74453289f6aSNate Lawson * NameOp - Node that contains the name 74553289f6aSNate Lawson * 74653289f6aSNate Lawson * RETURN: Sets the ExternalName and Namepath in the parent node 74753289f6aSNate Lawson * 74853289f6aSNate Lawson * DESCRIPTION: Store the name in two forms in the parent node: The original 74953289f6aSNate Lawson * (external) name, and the internalized name that is used within 75053289f6aSNate Lawson * the ACPI namespace manager. 75153289f6aSNate Lawson * 75253289f6aSNate Lawson ******************************************************************************/ 75353289f6aSNate Lawson 75453289f6aSNate Lawson void 75553289f6aSNate Lawson UtAttachNamepathToOwner ( 75653289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 75753289f6aSNate Lawson ACPI_PARSE_OBJECT *NameOp) 75853289f6aSNate Lawson { 75953289f6aSNate Lawson ACPI_STATUS Status; 76053289f6aSNate Lawson 76153289f6aSNate Lawson 76253289f6aSNate Lawson /* Full external path */ 76353289f6aSNate Lawson 76453289f6aSNate Lawson Op->Asl.ExternalName = NameOp->Asl.Value.String; 76553289f6aSNate Lawson 766fba7fc7eSJung-uk Kim /* Save the NameOp for possible error reporting later */ 767fba7fc7eSJung-uk Kim 768fba7fc7eSJung-uk Kim Op->Asl.ParentMethod = (void *) NameOp; 769fba7fc7eSJung-uk Kim 77053289f6aSNate Lawson /* Last nameseg of the path */ 77153289f6aSNate Lawson 77253289f6aSNate Lawson UtAttachNameseg (Op, Op->Asl.ExternalName); 77353289f6aSNate Lawson 77453289f6aSNate Lawson /* Create internalized path */ 77553289f6aSNate Lawson 77653289f6aSNate Lawson Status = UtInternalizeName (NameOp->Asl.Value.String, &Op->Asl.Namepath); 77753289f6aSNate Lawson if (ACPI_FAILURE (Status)) 77853289f6aSNate Lawson { 77953289f6aSNate Lawson /* TBD: abort on no memory */ 78053289f6aSNate Lawson } 78153289f6aSNate Lawson } 78253289f6aSNate Lawson 78353289f6aSNate Lawson 78453289f6aSNate Lawson /******************************************************************************* 78553289f6aSNate Lawson * 78653289f6aSNate Lawson * FUNCTION: UtDoConstant 78753289f6aSNate Lawson * 7882f6a1a81SJung-uk Kim * PARAMETERS: String - Hex/Decimal/Octal 78953289f6aSNate Lawson * 79053289f6aSNate Lawson * RETURN: Converted Integer 79153289f6aSNate Lawson * 7922f6a1a81SJung-uk Kim * DESCRIPTION: Convert a string to an integer, with overflow/error checking. 79353289f6aSNate Lawson * 79453289f6aSNate Lawson ******************************************************************************/ 79553289f6aSNate Lawson 7969a179dd8SJung-uk Kim UINT64 79753289f6aSNate Lawson UtDoConstant ( 79853289f6aSNate Lawson char *String) 79953289f6aSNate Lawson { 80053289f6aSNate Lawson ACPI_STATUS Status; 8012f6a1a81SJung-uk Kim UINT64 ConvertedInteger; 80253289f6aSNate Lawson char ErrBuf[64]; 80353289f6aSNate Lawson 80453289f6aSNate Lawson 8052f6a1a81SJung-uk Kim Status = AcpiUtStrtoul64 (String, &ConvertedInteger); 80653289f6aSNate Lawson if (ACPI_FAILURE (Status)) 80753289f6aSNate Lawson { 8082f6a1a81SJung-uk Kim sprintf (ErrBuf, "While creating 64-bit constant: %s\n", 809fba7fc7eSJung-uk Kim AcpiFormatException (Status)); 8102f6a1a81SJung-uk Kim 8112f6a1a81SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_SYNTAX, Gbl_CurrentLineNumber, 8122f6a1a81SJung-uk Kim Gbl_LogicalLineNumber, Gbl_CurrentLineOffset, 8132f6a1a81SJung-uk Kim Gbl_CurrentColumn, Gbl_Files[ASL_FILE_INPUT].Filename, ErrBuf); 81453289f6aSNate Lawson } 81553289f6aSNate Lawson 8162f6a1a81SJung-uk Kim return (ConvertedInteger); 81753289f6aSNate Lawson } 818