153289f6aSNate Lawson /****************************************************************************** 253289f6aSNate Lawson * 353289f6aSNate Lawson * Module Name: aslutils -- compiler utilities 453289f6aSNate Lawson * 553289f6aSNate Lawson *****************************************************************************/ 653289f6aSNate Lawson 7d244b227SJung-uk Kim /* 8*f8146b88SJung-uk Kim * Copyright (C) 2000 - 2016, Intel Corp. 953289f6aSNate Lawson * All rights reserved. 1053289f6aSNate Lawson * 11d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without 12d244b227SJung-uk Kim * modification, are permitted provided that the following conditions 13d244b227SJung-uk Kim * are met: 14d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 15d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 16d244b227SJung-uk Kim * without modification. 17d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 19d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 20d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further 21d244b227SJung-uk Kim * binary redistribution. 22d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 23d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived 24d244b227SJung-uk Kim * from this software without specific prior written permission. 2553289f6aSNate Lawson * 26d244b227SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 27d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 28d244b227SJung-uk Kim * Software Foundation. 2953289f6aSNate Lawson * 30d244b227SJung-uk Kim * NO WARRANTY 31d244b227SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32d244b227SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33d244b227SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34d244b227SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35d244b227SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36d244b227SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37d244b227SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38d244b227SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39d244b227SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40d244b227SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41d244b227SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 42d244b227SJung-uk Kim */ 4353289f6aSNate Lawson 44ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 4553289f6aSNate Lawson #include "aslcompiler.y.h" 46a88e22b7SJung-uk Kim #include <contrib/dev/acpica/include/acdisasm.h> 47ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acnamesp.h> 48ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/amlcode.h> 493c1812acSJung-uk Kim #include <contrib/dev/acpica/include/acapps.h> 50*f8146b88SJung-uk Kim #include <sys/stat.h> 51*f8146b88SJung-uk Kim 5253289f6aSNate Lawson 5353289f6aSNate Lawson #define _COMPONENT ACPI_COMPILER 5453289f6aSNate Lawson ACPI_MODULE_NAME ("aslutils") 5553289f6aSNate Lawson 563f0275a0SJung-uk Kim 57fba7fc7eSJung-uk Kim /* Local prototypes */ 5853289f6aSNate Lawson 59fba7fc7eSJung-uk Kim static void 60fba7fc7eSJung-uk Kim UtPadNameWithUnderscores ( 61fba7fc7eSJung-uk Kim char *NameSeg, 62fba7fc7eSJung-uk Kim char *PaddedNameSeg); 63fba7fc7eSJung-uk Kim 64fba7fc7eSJung-uk Kim static void 65fba7fc7eSJung-uk Kim UtAttachNameseg ( 66fba7fc7eSJung-uk Kim ACPI_PARSE_OBJECT *Op, 67fba7fc7eSJung-uk Kim char *Name); 6853289f6aSNate Lawson 6953289f6aSNate Lawson 7053289f6aSNate Lawson /******************************************************************************* 7153289f6aSNate Lawson * 72*f8146b88SJung-uk Kim * FUNCTION: UtIsBigEndianMachine 73*f8146b88SJung-uk Kim * 74*f8146b88SJung-uk Kim * PARAMETERS: None 75*f8146b88SJung-uk Kim * 76*f8146b88SJung-uk Kim * RETURN: TRUE if machine is big endian 77*f8146b88SJung-uk Kim * FALSE if machine is little endian 78*f8146b88SJung-uk Kim * 79*f8146b88SJung-uk Kim * DESCRIPTION: Detect whether machine is little endian or big endian. 80*f8146b88SJung-uk Kim * 81*f8146b88SJung-uk Kim ******************************************************************************/ 82*f8146b88SJung-uk Kim 83*f8146b88SJung-uk Kim UINT8 84*f8146b88SJung-uk Kim UtIsBigEndianMachine ( 85*f8146b88SJung-uk Kim void) 86*f8146b88SJung-uk Kim { 87*f8146b88SJung-uk Kim union { 88*f8146b88SJung-uk Kim UINT32 Integer; 89*f8146b88SJung-uk Kim UINT8 Bytes[4]; 90*f8146b88SJung-uk Kim } Overlay = {0xFF000000}; 91*f8146b88SJung-uk Kim 92*f8146b88SJung-uk Kim 93*f8146b88SJung-uk Kim return (Overlay.Bytes[0]); /* Returns 0xFF (TRUE) for big endian */ 94*f8146b88SJung-uk Kim } 95*f8146b88SJung-uk Kim 96*f8146b88SJung-uk Kim 97*f8146b88SJung-uk Kim /****************************************************************************** 98*f8146b88SJung-uk Kim * 99*f8146b88SJung-uk Kim * FUNCTION: UtQueryForOverwrite 100*f8146b88SJung-uk Kim * 101*f8146b88SJung-uk Kim * PARAMETERS: Pathname - Output filename 102*f8146b88SJung-uk Kim * 103*f8146b88SJung-uk Kim * RETURN: TRUE if file does not exist or overwrite is authorized 104*f8146b88SJung-uk Kim * 105*f8146b88SJung-uk Kim * DESCRIPTION: Query for file overwrite if it already exists. 106*f8146b88SJung-uk Kim * 107*f8146b88SJung-uk Kim ******************************************************************************/ 108*f8146b88SJung-uk Kim 109*f8146b88SJung-uk Kim BOOLEAN 110*f8146b88SJung-uk Kim UtQueryForOverwrite ( 111*f8146b88SJung-uk Kim char *Pathname) 112*f8146b88SJung-uk Kim { 113*f8146b88SJung-uk Kim struct stat StatInfo; 114*f8146b88SJung-uk Kim 115*f8146b88SJung-uk Kim 116*f8146b88SJung-uk Kim if (!stat (Pathname, &StatInfo)) 117*f8146b88SJung-uk Kim { 118*f8146b88SJung-uk Kim fprintf (stderr, "Target file \"%s\" already exists, overwrite? [y|n] ", 119*f8146b88SJung-uk Kim Pathname); 120*f8146b88SJung-uk Kim 121*f8146b88SJung-uk Kim if (getchar () != 'y') 122*f8146b88SJung-uk Kim { 123*f8146b88SJung-uk Kim return (FALSE); 124*f8146b88SJung-uk Kim } 125*f8146b88SJung-uk Kim } 126*f8146b88SJung-uk Kim 127*f8146b88SJung-uk Kim return (TRUE); 128*f8146b88SJung-uk Kim } 129*f8146b88SJung-uk Kim 130*f8146b88SJung-uk Kim 131*f8146b88SJung-uk Kim /******************************************************************************* 132*f8146b88SJung-uk Kim * 133a88e22b7SJung-uk Kim * FUNCTION: UtDisplaySupportedTables 134a88e22b7SJung-uk Kim * 135a88e22b7SJung-uk Kim * PARAMETERS: None 136a88e22b7SJung-uk Kim * 137a88e22b7SJung-uk Kim * RETURN: None 138a88e22b7SJung-uk Kim * 139a88e22b7SJung-uk Kim * DESCRIPTION: Print all supported ACPI table names. 140a88e22b7SJung-uk Kim * 141a88e22b7SJung-uk Kim ******************************************************************************/ 142a88e22b7SJung-uk Kim 143a88e22b7SJung-uk Kim void 144a88e22b7SJung-uk Kim UtDisplaySupportedTables ( 145a88e22b7SJung-uk Kim void) 146a88e22b7SJung-uk Kim { 147a371a5fdSJung-uk Kim const AH_TABLE *TableData; 1481df130f1SJung-uk Kim UINT32 i; 149a88e22b7SJung-uk Kim 150a88e22b7SJung-uk Kim 1511df130f1SJung-uk Kim printf ("\nACPI tables supported by iASL version %8.8X:\n" 1521df130f1SJung-uk Kim " (Compiler, Disassembler, Template Generator)\n\n", 1531df130f1SJung-uk Kim ACPI_CA_VERSION); 154a88e22b7SJung-uk Kim 155a371a5fdSJung-uk Kim /* All ACPI tables with the common table header */ 156a88e22b7SJung-uk Kim 157a371a5fdSJung-uk Kim printf ("\n Supported ACPI tables:\n"); 158a371a5fdSJung-uk Kim for (TableData = AcpiSupportedTables, i = 1; 159a371a5fdSJung-uk Kim TableData->Signature; TableData++, i++) 160a88e22b7SJung-uk Kim { 161a371a5fdSJung-uk Kim printf ("%8u) %s %s\n", i, 162a371a5fdSJung-uk Kim TableData->Signature, TableData->Description); 163a88e22b7SJung-uk Kim } 164a88e22b7SJung-uk Kim } 165a88e22b7SJung-uk Kim 166a88e22b7SJung-uk Kim 167a88e22b7SJung-uk Kim /******************************************************************************* 168a88e22b7SJung-uk Kim * 169f38b0f21SJung-uk Kim * FUNCTION: UtDisplayConstantOpcodes 17053289f6aSNate Lawson * 17153289f6aSNate Lawson * PARAMETERS: None 17253289f6aSNate Lawson * 17353289f6aSNate Lawson * RETURN: None 17453289f6aSNate Lawson * 17553289f6aSNate Lawson * DESCRIPTION: Print AML opcodes that can be used in constant expressions. 17653289f6aSNate Lawson * 17753289f6aSNate Lawson ******************************************************************************/ 17853289f6aSNate Lawson 17953289f6aSNate Lawson void 18053289f6aSNate Lawson UtDisplayConstantOpcodes ( 18153289f6aSNate Lawson void) 18253289f6aSNate Lawson { 18353289f6aSNate Lawson UINT32 i; 18453289f6aSNate Lawson 185fba7fc7eSJung-uk Kim 18653289f6aSNate Lawson printf ("Constant expression opcode information\n\n"); 18753289f6aSNate Lawson 18853289f6aSNate Lawson for (i = 0; i < sizeof (AcpiGbl_AmlOpInfo) / sizeof (ACPI_OPCODE_INFO); i++) 18953289f6aSNate Lawson { 19053289f6aSNate Lawson if (AcpiGbl_AmlOpInfo[i].Flags & AML_CONSTANT) 19153289f6aSNate Lawson { 19253289f6aSNate Lawson printf ("%s\n", AcpiGbl_AmlOpInfo[i].Name); 19353289f6aSNate Lawson } 19453289f6aSNate Lawson } 19553289f6aSNate Lawson } 19653289f6aSNate Lawson 19753289f6aSNate Lawson 19853289f6aSNate Lawson /******************************************************************************* 19953289f6aSNate Lawson * 20053289f6aSNate Lawson * FUNCTION: UtLocalCalloc 20153289f6aSNate Lawson * 20253289f6aSNate Lawson * PARAMETERS: Size - Bytes to be allocated 20353289f6aSNate Lawson * 20453289f6aSNate Lawson * RETURN: Pointer to the allocated memory. Guaranteed to be valid. 20553289f6aSNate Lawson * 20653289f6aSNate Lawson * DESCRIPTION: Allocate zero-initialized memory. Aborts the compile on an 20753289f6aSNate Lawson * allocation failure, on the assumption that nothing more can be 20853289f6aSNate Lawson * accomplished. 20953289f6aSNate Lawson * 21053289f6aSNate Lawson ******************************************************************************/ 21153289f6aSNate Lawson 21253289f6aSNate Lawson void * 21353289f6aSNate Lawson UtLocalCalloc ( 21453289f6aSNate Lawson UINT32 Size) 21553289f6aSNate Lawson { 21653289f6aSNate Lawson void *Allocated; 21753289f6aSNate Lawson 21853289f6aSNate Lawson 2191a39cfb0SJung-uk Kim Allocated = ACPI_ALLOCATE_ZEROED (Size); 22053289f6aSNate Lawson if (!Allocated) 22153289f6aSNate Lawson { 22253289f6aSNate Lawson AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION, 22353289f6aSNate Lawson Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 22453289f6aSNate Lawson Gbl_InputByteCount, Gbl_CurrentColumn, 22553289f6aSNate Lawson Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 226a88e22b7SJung-uk Kim 227a88e22b7SJung-uk Kim CmCleanupAndExit (); 22853289f6aSNate Lawson exit (1); 22953289f6aSNate Lawson } 23053289f6aSNate Lawson 23153289f6aSNate Lawson TotalAllocations++; 23253289f6aSNate Lawson TotalAllocated += Size; 2331a39cfb0SJung-uk Kim return (Allocated); 23453289f6aSNate Lawson } 23553289f6aSNate Lawson 23653289f6aSNate Lawson 23753289f6aSNate Lawson /******************************************************************************* 23853289f6aSNate Lawson * 23953289f6aSNate Lawson * FUNCTION: UtBeginEvent 24053289f6aSNate Lawson * 241fba7fc7eSJung-uk Kim * PARAMETERS: Name - Ascii name of this event 24253289f6aSNate Lawson * 243f38b0f21SJung-uk Kim * RETURN: Event number (integer index) 24453289f6aSNate Lawson * 24553289f6aSNate Lawson * DESCRIPTION: Saves the current time with this event 24653289f6aSNate Lawson * 24753289f6aSNate Lawson ******************************************************************************/ 24853289f6aSNate Lawson 249fba7fc7eSJung-uk Kim UINT8 25053289f6aSNate Lawson UtBeginEvent ( 25153289f6aSNate Lawson char *Name) 25253289f6aSNate Lawson { 25353289f6aSNate Lawson 254fba7fc7eSJung-uk Kim if (AslGbl_NextEvent >= ASL_NUM_EVENTS) 255fba7fc7eSJung-uk Kim { 256fba7fc7eSJung-uk Kim AcpiOsPrintf ("Ran out of compiler event structs!\n"); 257fba7fc7eSJung-uk Kim return (AslGbl_NextEvent); 258fba7fc7eSJung-uk Kim } 259fba7fc7eSJung-uk Kim 260fba7fc7eSJung-uk Kim /* Init event with current (start) time */ 261fba7fc7eSJung-uk Kim 262fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].StartTime = AcpiOsGetTimer (); 263fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].EventName = Name; 264fba7fc7eSJung-uk Kim AslGbl_Events[AslGbl_NextEvent].Valid = TRUE; 265fba7fc7eSJung-uk Kim return (AslGbl_NextEvent++); 26653289f6aSNate Lawson } 26753289f6aSNate Lawson 26853289f6aSNate Lawson 26953289f6aSNate Lawson /******************************************************************************* 27053289f6aSNate Lawson * 27153289f6aSNate Lawson * FUNCTION: UtEndEvent 27253289f6aSNate Lawson * 27353289f6aSNate Lawson * PARAMETERS: Event - Event number (integer index) 27453289f6aSNate Lawson * 27553289f6aSNate Lawson * RETURN: None 27653289f6aSNate Lawson * 27753289f6aSNate Lawson * DESCRIPTION: Saves the current time (end time) with this event 27853289f6aSNate Lawson * 27953289f6aSNate Lawson ******************************************************************************/ 28053289f6aSNate Lawson 28153289f6aSNate Lawson void 28253289f6aSNate Lawson UtEndEvent ( 283fba7fc7eSJung-uk Kim UINT8 Event) 28453289f6aSNate Lawson { 28553289f6aSNate Lawson 286fba7fc7eSJung-uk Kim if (Event >= ASL_NUM_EVENTS) 287fba7fc7eSJung-uk Kim { 288fba7fc7eSJung-uk Kim return; 289fba7fc7eSJung-uk Kim } 290fba7fc7eSJung-uk Kim 291fba7fc7eSJung-uk Kim /* Insert end time for event */ 292fba7fc7eSJung-uk Kim 293fba7fc7eSJung-uk Kim AslGbl_Events[Event].EndTime = AcpiOsGetTimer (); 29453289f6aSNate Lawson } 29553289f6aSNate Lawson 29653289f6aSNate Lawson 29753289f6aSNate Lawson /******************************************************************************* 29853289f6aSNate Lawson * 29953289f6aSNate Lawson * FUNCTION: DbgPrint 30053289f6aSNate Lawson * 301fba7fc7eSJung-uk Kim * PARAMETERS: Type - Type of output 302fba7fc7eSJung-uk Kim * Fmt - Printf format string 30353289f6aSNate Lawson * ... - variable printf list 30453289f6aSNate Lawson * 30553289f6aSNate Lawson * RETURN: None 30653289f6aSNate Lawson * 30753289f6aSNate Lawson * DESCRIPTION: Conditional print statement. Prints to stderr only if the 30853289f6aSNate Lawson * debug flag is set. 30953289f6aSNate Lawson * 31053289f6aSNate Lawson ******************************************************************************/ 31153289f6aSNate Lawson 31253289f6aSNate Lawson void 31353289f6aSNate Lawson DbgPrint ( 31453289f6aSNate Lawson UINT32 Type, 31553289f6aSNate Lawson char *Fmt, 31653289f6aSNate Lawson ...) 31753289f6aSNate Lawson { 31853289f6aSNate Lawson va_list Args; 31953289f6aSNate Lawson 32053289f6aSNate Lawson 32153289f6aSNate Lawson if (!Gbl_DebugFlag) 32253289f6aSNate Lawson { 32353289f6aSNate Lawson return; 32453289f6aSNate Lawson } 32553289f6aSNate Lawson 32653289f6aSNate Lawson if ((Type == ASL_PARSE_OUTPUT) && 32753289f6aSNate Lawson (!(AslCompilerdebug))) 32853289f6aSNate Lawson { 32953289f6aSNate Lawson return; 33053289f6aSNate Lawson } 33153289f6aSNate Lawson 3328d744e47SJung-uk Kim va_start (Args, Fmt); 33353289f6aSNate Lawson (void) vfprintf (stderr, Fmt, Args); 33453289f6aSNate Lawson va_end (Args); 33553289f6aSNate Lawson return; 33653289f6aSNate Lawson } 33753289f6aSNate Lawson 33853289f6aSNate Lawson 33953289f6aSNate Lawson /******************************************************************************* 34053289f6aSNate Lawson * 34153289f6aSNate Lawson * FUNCTION: UtSetParseOpName 34253289f6aSNate Lawson * 343f38b0f21SJung-uk Kim * PARAMETERS: Op - Parse op to be named. 34453289f6aSNate Lawson * 34553289f6aSNate Lawson * RETURN: None 34653289f6aSNate Lawson * 34753289f6aSNate Lawson * DESCRIPTION: Insert the ascii name of the parse opcode 34853289f6aSNate Lawson * 34953289f6aSNate Lawson ******************************************************************************/ 35053289f6aSNate Lawson 35153289f6aSNate Lawson void 35253289f6aSNate Lawson UtSetParseOpName ( 35353289f6aSNate Lawson ACPI_PARSE_OBJECT *Op) 35453289f6aSNate Lawson { 355fba7fc7eSJung-uk Kim 3561a39cfb0SJung-uk Kim strncpy (Op->Asl.ParseOpName, UtGetOpName (Op->Asl.ParseOpcode), 3571a39cfb0SJung-uk Kim ACPI_MAX_PARSEOP_NAME); 35853289f6aSNate Lawson } 35953289f6aSNate Lawson 36053289f6aSNate Lawson 36153289f6aSNate Lawson /******************************************************************************* 36253289f6aSNate Lawson * 36353289f6aSNate Lawson * FUNCTION: UtDisplaySummary 36453289f6aSNate Lawson * 365fba7fc7eSJung-uk Kim * PARAMETERS: FileID - ID of outpout file 36653289f6aSNate Lawson * 36753289f6aSNate Lawson * RETURN: None 36853289f6aSNate Lawson * 36953289f6aSNate Lawson * DESCRIPTION: Display compilation statistics 37053289f6aSNate Lawson * 37153289f6aSNate Lawson ******************************************************************************/ 37253289f6aSNate Lawson 37353289f6aSNate Lawson void 37453289f6aSNate Lawson UtDisplaySummary ( 37553289f6aSNate Lawson UINT32 FileId) 37653289f6aSNate Lawson { 3773f0275a0SJung-uk Kim UINT32 i; 3783f0275a0SJung-uk Kim 37953289f6aSNate Lawson 38053289f6aSNate Lawson if (FileId != ASL_FILE_STDOUT) 38153289f6aSNate Lawson { 38253289f6aSNate Lawson /* Compiler name and version number */ 38353289f6aSNate Lawson 3843f0275a0SJung-uk Kim FlPrintFile (FileId, "%s version %X%s\n\n", 3853c1812acSJung-uk Kim ASL_COMPILER_NAME, (UINT32) ACPI_CA_VERSION, ACPI_WIDTH); 38653289f6aSNate Lawson } 38753289f6aSNate Lawson 3883f0275a0SJung-uk Kim /* Summary of main input and output files */ 3893f0275a0SJung-uk Kim 390a88e22b7SJung-uk Kim if (Gbl_FileType == ASL_INPUT_TYPE_ASCII_DATA) 391a88e22b7SJung-uk Kim { 392a88e22b7SJung-uk Kim FlPrintFile (FileId, 3933f0275a0SJung-uk Kim "%-14s %s - %u lines, %u bytes, %u fields\n", 3943f0275a0SJung-uk Kim "Table Input:", 395a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_CurrentLineNumber, 396a88e22b7SJung-uk Kim Gbl_InputByteCount, Gbl_InputFieldCount); 397a88e22b7SJung-uk Kim 398a88e22b7SJung-uk Kim if ((Gbl_ExceptionCount[ASL_ERROR] == 0) || (Gbl_IgnoreErrors)) 399a88e22b7SJung-uk Kim { 400a88e22b7SJung-uk Kim FlPrintFile (FileId, 4013f0275a0SJung-uk Kim "%-14s %s - %u bytes\n", 4023f0275a0SJung-uk Kim "Binary Output:", 403a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_AML_OUTPUT].Filename, Gbl_TableLength); 404a88e22b7SJung-uk Kim } 405a88e22b7SJung-uk Kim } 406a88e22b7SJung-uk Kim else 407a88e22b7SJung-uk Kim { 40853289f6aSNate Lawson FlPrintFile (FileId, 4093f0275a0SJung-uk Kim "%-14s %s - %u lines, %u bytes, %u keywords\n", 4103f0275a0SJung-uk Kim "ASL Input:", 41153289f6aSNate Lawson Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_CurrentLineNumber, 4125ef50723SJung-uk Kim Gbl_OriginalInputFileSize, TotalKeywords); 41353289f6aSNate Lawson 41453289f6aSNate Lawson /* AML summary */ 41553289f6aSNate Lawson 41653289f6aSNate Lawson if ((Gbl_ExceptionCount[ASL_ERROR] == 0) || (Gbl_IgnoreErrors)) 41753289f6aSNate Lawson { 4185ef50723SJung-uk Kim if (Gbl_Files[ASL_FILE_AML_OUTPUT].Handle) 4195ef50723SJung-uk Kim { 42053289f6aSNate Lawson FlPrintFile (FileId, 421*f8146b88SJung-uk Kim "%-14s %s - %u bytes, %u named objects, " 422*f8146b88SJung-uk Kim "%u executable opcodes\n", 4233f0275a0SJung-uk Kim "AML Output:", 424*f8146b88SJung-uk Kim Gbl_Files[ASL_FILE_AML_OUTPUT].Filename, 425*f8146b88SJung-uk Kim FlGetFileSize (ASL_FILE_AML_OUTPUT), 42653289f6aSNate Lawson TotalNamedObjects, TotalExecutableOpcodes); 42753289f6aSNate Lawson } 428a88e22b7SJung-uk Kim } 4295ef50723SJung-uk Kim } 43053289f6aSNate Lawson 4313f0275a0SJung-uk Kim /* Display summary of any optional files */ 4323f0275a0SJung-uk Kim 4333f0275a0SJung-uk Kim for (i = ASL_FILE_SOURCE_OUTPUT; i <= ASL_MAX_FILE_TYPE; i++) 4343f0275a0SJung-uk Kim { 4353f0275a0SJung-uk Kim if (!Gbl_Files[i].Filename || !Gbl_Files[i].Handle) 4363f0275a0SJung-uk Kim { 4373f0275a0SJung-uk Kim continue; 4383f0275a0SJung-uk Kim } 4393f0275a0SJung-uk Kim 4403f0275a0SJung-uk Kim /* .SRC is a temp file unless specifically requested */ 4413f0275a0SJung-uk Kim 4423f0275a0SJung-uk Kim if ((i == ASL_FILE_SOURCE_OUTPUT) && (!Gbl_SourceOutputFlag)) 4433f0275a0SJung-uk Kim { 4443f0275a0SJung-uk Kim continue; 4453f0275a0SJung-uk Kim } 4463f0275a0SJung-uk Kim 4475ef50723SJung-uk Kim /* .PRE is the preprocessor intermediate file */ 4484c52cad2SJung-uk Kim 4495ef50723SJung-uk Kim if ((i == ASL_FILE_PREPROCESSOR) && (!Gbl_KeepPreprocessorTempFile)) 4504c52cad2SJung-uk Kim { 4514c52cad2SJung-uk Kim continue; 4524c52cad2SJung-uk Kim } 4534c52cad2SJung-uk Kim 4543f0275a0SJung-uk Kim FlPrintFile (FileId, "%14s %s - %u bytes\n", 455042ff955SJung-uk Kim Gbl_Files[i].ShortDescription, 4563f0275a0SJung-uk Kim Gbl_Files[i].Filename, FlGetFileSize (i)); 4573f0275a0SJung-uk Kim } 4583f0275a0SJung-uk Kim 45953289f6aSNate Lawson /* Error summary */ 46053289f6aSNate Lawson 46153289f6aSNate Lawson FlPrintFile (FileId, 4623f0275a0SJung-uk Kim "\nCompilation complete. %u Errors, %u Warnings, %u Remarks", 46353289f6aSNate Lawson Gbl_ExceptionCount[ASL_ERROR], 4641a39cfb0SJung-uk Kim Gbl_ExceptionCount[ASL_WARNING] + 4651a39cfb0SJung-uk Kim Gbl_ExceptionCount[ASL_WARNING2] + 4661a39cfb0SJung-uk Kim Gbl_ExceptionCount[ASL_WARNING3], 467a88e22b7SJung-uk Kim Gbl_ExceptionCount[ASL_REMARK]); 468a88e22b7SJung-uk Kim 469a88e22b7SJung-uk Kim if (Gbl_FileType != ASL_INPUT_TYPE_ASCII_DATA) 470a88e22b7SJung-uk Kim { 4717cf3e94aSJung-uk Kim FlPrintFile (FileId, ", %u Optimizations", 4727cf3e94aSJung-uk Kim Gbl_ExceptionCount[ASL_OPTIMIZATION]); 4737cf3e94aSJung-uk Kim 4747cf3e94aSJung-uk Kim if (TotalFolds) 4757cf3e94aSJung-uk Kim { 4767cf3e94aSJung-uk Kim FlPrintFile (FileId, ", %u Constants Folded", TotalFolds); 4777cf3e94aSJung-uk Kim } 478a88e22b7SJung-uk Kim } 479a88e22b7SJung-uk Kim 480a88e22b7SJung-uk Kim FlPrintFile (FileId, "\n"); 48153289f6aSNate Lawson } 48253289f6aSNate Lawson 48353289f6aSNate Lawson 48453289f6aSNate Lawson /******************************************************************************* 48553289f6aSNate Lawson * 486f38b0f21SJung-uk Kim * FUNCTION: UtCheckIntegerRange 48753289f6aSNate Lawson * 48853289f6aSNate Lawson * PARAMETERS: Op - Integer parse node 48953289f6aSNate Lawson * LowValue - Smallest allowed value 49053289f6aSNate Lawson * HighValue - Largest allowed value 49153289f6aSNate Lawson * 49253289f6aSNate Lawson * RETURN: Op if OK, otherwise NULL 49353289f6aSNate Lawson * 49453289f6aSNate Lawson * DESCRIPTION: Check integer for an allowable range 49553289f6aSNate Lawson * 49653289f6aSNate Lawson ******************************************************************************/ 49753289f6aSNate Lawson 49853289f6aSNate Lawson ACPI_PARSE_OBJECT * 49953289f6aSNate Lawson UtCheckIntegerRange ( 50053289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 50153289f6aSNate Lawson UINT32 LowValue, 50253289f6aSNate Lawson UINT32 HighValue) 50353289f6aSNate Lawson { 50453289f6aSNate Lawson 50553289f6aSNate Lawson if (!Op) 50653289f6aSNate Lawson { 5078ef1a331SJung-uk Kim return (NULL); 50853289f6aSNate Lawson } 50953289f6aSNate Lawson 5101df130f1SJung-uk Kim if ((Op->Asl.Value.Integer < LowValue) || 5111df130f1SJung-uk Kim (Op->Asl.Value.Integer > HighValue)) 51253289f6aSNate Lawson { 5131df130f1SJung-uk Kim sprintf (MsgBuffer, "0x%X, allowable: 0x%X-0x%X", 5141df130f1SJung-uk Kim (UINT32) Op->Asl.Value.Integer, LowValue, HighValue); 5151df130f1SJung-uk Kim 5161df130f1SJung-uk Kim AslError (ASL_ERROR, ASL_MSG_RANGE, Op, MsgBuffer); 5171df130f1SJung-uk Kim return (NULL); 51853289f6aSNate Lawson } 51953289f6aSNate Lawson 5201df130f1SJung-uk Kim return (Op); 52153289f6aSNate Lawson } 52253289f6aSNate Lawson 52353289f6aSNate Lawson 52453289f6aSNate Lawson /******************************************************************************* 52553289f6aSNate Lawson * 526313a0c13SJung-uk Kim * FUNCTION: UtStringCacheCalloc 52753289f6aSNate Lawson * 52853289f6aSNate Lawson * PARAMETERS: Length - Size of buffer requested 52953289f6aSNate Lawson * 53053289f6aSNate Lawson * RETURN: Pointer to the buffer. Aborts on allocation failure 53153289f6aSNate Lawson * 53253289f6aSNate Lawson * DESCRIPTION: Allocate a string buffer. Bypass the local 53353289f6aSNate Lawson * dynamic memory manager for performance reasons (This has a 53453289f6aSNate Lawson * major impact on the speed of the compiler.) 53553289f6aSNate Lawson * 53653289f6aSNate Lawson ******************************************************************************/ 53753289f6aSNate Lawson 53853289f6aSNate Lawson char * 539313a0c13SJung-uk Kim UtStringCacheCalloc ( 54053289f6aSNate Lawson UINT32 Length) 54153289f6aSNate Lawson { 54253289f6aSNate Lawson char *Buffer; 543313a0c13SJung-uk Kim ASL_CACHE_INFO *Cache; 5441c0e1b6dSJung-uk Kim UINT32 CacheSize = ASL_STRING_CACHE_SIZE; 54553289f6aSNate Lawson 54653289f6aSNate Lawson 5471c0e1b6dSJung-uk Kim if (Length > CacheSize) 548313a0c13SJung-uk Kim { 5491c0e1b6dSJung-uk Kim CacheSize = Length; 5501c0e1b6dSJung-uk Kim 5511c0e1b6dSJung-uk Kim if (Gbl_StringCacheList) 5521c0e1b6dSJung-uk Kim { 5531c0e1b6dSJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); 5541c0e1b6dSJung-uk Kim 5551c0e1b6dSJung-uk Kim /* Link new cache buffer just following head of list */ 5561c0e1b6dSJung-uk Kim 5571c0e1b6dSJung-uk Kim Cache->Next = Gbl_StringCacheList->Next; 5581c0e1b6dSJung-uk Kim Gbl_StringCacheList->Next = Cache; 5591c0e1b6dSJung-uk Kim 5601c0e1b6dSJung-uk Kim /* Leave cache management pointers alone as they pertain to head */ 5611c0e1b6dSJung-uk Kim 5621c0e1b6dSJung-uk Kim Gbl_StringCount++; 5631c0e1b6dSJung-uk Kim Gbl_StringSize += Length; 5641c0e1b6dSJung-uk Kim 5651c0e1b6dSJung-uk Kim return (Cache->Buffer); 5661c0e1b6dSJung-uk Kim } 567313a0c13SJung-uk Kim } 568313a0c13SJung-uk Kim 56953289f6aSNate Lawson if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast) 57053289f6aSNate Lawson { 571313a0c13SJung-uk Kim /* Allocate a new buffer */ 572313a0c13SJung-uk Kim 5731c0e1b6dSJung-uk Kim Cache = UtLocalCalloc (sizeof (Cache->Next) + CacheSize); 574313a0c13SJung-uk Kim 575313a0c13SJung-uk Kim /* Link new cache buffer to head of list */ 576313a0c13SJung-uk Kim 577313a0c13SJung-uk Kim Cache->Next = Gbl_StringCacheList; 578313a0c13SJung-uk Kim Gbl_StringCacheList = Cache; 579313a0c13SJung-uk Kim 580313a0c13SJung-uk Kim /* Setup cache management pointers */ 581313a0c13SJung-uk Kim 582313a0c13SJung-uk Kim Gbl_StringCacheNext = Cache->Buffer; 5831c0e1b6dSJung-uk Kim Gbl_StringCacheLast = Gbl_StringCacheNext + CacheSize; 58453289f6aSNate Lawson } 58553289f6aSNate Lawson 586313a0c13SJung-uk Kim Gbl_StringCount++; 587313a0c13SJung-uk Kim Gbl_StringSize += Length; 588313a0c13SJung-uk Kim 58953289f6aSNate Lawson Buffer = Gbl_StringCacheNext; 59053289f6aSNate Lawson Gbl_StringCacheNext += Length; 59153289f6aSNate Lawson return (Buffer); 59253289f6aSNate Lawson } 59353289f6aSNate Lawson 59453289f6aSNate Lawson 595042ff955SJung-uk Kim /****************************************************************************** 596042ff955SJung-uk Kim * 597042ff955SJung-uk Kim * FUNCTION: UtExpandLineBuffers 598042ff955SJung-uk Kim * 599042ff955SJung-uk Kim * PARAMETERS: None. Updates global line buffer pointers. 600042ff955SJung-uk Kim * 601042ff955SJung-uk Kim * RETURN: None. Reallocates the global line buffers 602042ff955SJung-uk Kim * 603042ff955SJung-uk Kim * DESCRIPTION: Called if the current line buffer becomes filled. Reallocates 604042ff955SJung-uk Kim * all global line buffers and updates Gbl_LineBufferSize. NOTE: 605042ff955SJung-uk Kim * Also used for the initial allocation of the buffers, when 606042ff955SJung-uk Kim * all of the buffer pointers are NULL. Initial allocations are 607042ff955SJung-uk Kim * of size ASL_DEFAULT_LINE_BUFFER_SIZE 608042ff955SJung-uk Kim * 609042ff955SJung-uk Kim *****************************************************************************/ 610042ff955SJung-uk Kim 611042ff955SJung-uk Kim void 612042ff955SJung-uk Kim UtExpandLineBuffers ( 613042ff955SJung-uk Kim void) 614042ff955SJung-uk Kim { 615042ff955SJung-uk Kim UINT32 NewSize; 616042ff955SJung-uk Kim 617042ff955SJung-uk Kim 618042ff955SJung-uk Kim /* Attempt to double the size of all line buffers */ 619042ff955SJung-uk Kim 620042ff955SJung-uk Kim NewSize = Gbl_LineBufferSize * 2; 621042ff955SJung-uk Kim if (Gbl_CurrentLineBuffer) 622042ff955SJung-uk Kim { 623313a0c13SJung-uk Kim DbgPrint (ASL_DEBUG_OUTPUT, 624313a0c13SJung-uk Kim "Increasing line buffer size from %u to %u\n", 625042ff955SJung-uk Kim Gbl_LineBufferSize, NewSize); 626042ff955SJung-uk Kim } 627042ff955SJung-uk Kim 628042ff955SJung-uk Kim Gbl_CurrentLineBuffer = realloc (Gbl_CurrentLineBuffer, NewSize); 629042ff955SJung-uk Kim Gbl_LineBufPtr = Gbl_CurrentLineBuffer; 630042ff955SJung-uk Kim if (!Gbl_CurrentLineBuffer) 631042ff955SJung-uk Kim { 632042ff955SJung-uk Kim goto ErrorExit; 633042ff955SJung-uk Kim } 634042ff955SJung-uk Kim 635042ff955SJung-uk Kim Gbl_MainTokenBuffer = realloc (Gbl_MainTokenBuffer, NewSize); 636042ff955SJung-uk Kim if (!Gbl_MainTokenBuffer) 637042ff955SJung-uk Kim { 638042ff955SJung-uk Kim goto ErrorExit; 639042ff955SJung-uk Kim } 640042ff955SJung-uk Kim 641042ff955SJung-uk Kim Gbl_MacroTokenBuffer = realloc (Gbl_MacroTokenBuffer, NewSize); 642042ff955SJung-uk Kim if (!Gbl_MacroTokenBuffer) 643042ff955SJung-uk Kim { 644042ff955SJung-uk Kim goto ErrorExit; 645042ff955SJung-uk Kim } 646042ff955SJung-uk Kim 647042ff955SJung-uk Kim Gbl_ExpressionTokenBuffer = realloc (Gbl_ExpressionTokenBuffer, NewSize); 648042ff955SJung-uk Kim if (!Gbl_ExpressionTokenBuffer) 649042ff955SJung-uk Kim { 650042ff955SJung-uk Kim goto ErrorExit; 651042ff955SJung-uk Kim } 652042ff955SJung-uk Kim 653042ff955SJung-uk Kim Gbl_LineBufferSize = NewSize; 654042ff955SJung-uk Kim return; 655042ff955SJung-uk Kim 656042ff955SJung-uk Kim 657042ff955SJung-uk Kim /* On error above, simply issue error messages and abort, cannot continue */ 658042ff955SJung-uk Kim 659042ff955SJung-uk Kim ErrorExit: 660042ff955SJung-uk Kim printf ("Could not increase line buffer size from %u to %u\n", 661042ff955SJung-uk Kim Gbl_LineBufferSize, Gbl_LineBufferSize * 2); 662042ff955SJung-uk Kim 663042ff955SJung-uk Kim AslError (ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, 664042ff955SJung-uk Kim NULL, NULL); 665042ff955SJung-uk Kim AslAbort (); 666042ff955SJung-uk Kim } 667042ff955SJung-uk Kim 668042ff955SJung-uk Kim 669313a0c13SJung-uk Kim /****************************************************************************** 670313a0c13SJung-uk Kim * 671313a0c13SJung-uk Kim * FUNCTION: UtFreeLineBuffers 672313a0c13SJung-uk Kim * 673313a0c13SJung-uk Kim * PARAMETERS: None 674313a0c13SJung-uk Kim * 675313a0c13SJung-uk Kim * RETURN: None 676313a0c13SJung-uk Kim * 677313a0c13SJung-uk Kim * DESCRIPTION: Free all line buffers 678313a0c13SJung-uk Kim * 679313a0c13SJung-uk Kim *****************************************************************************/ 680313a0c13SJung-uk Kim 681313a0c13SJung-uk Kim void 682313a0c13SJung-uk Kim UtFreeLineBuffers ( 683313a0c13SJung-uk Kim void) 684313a0c13SJung-uk Kim { 685313a0c13SJung-uk Kim 686313a0c13SJung-uk Kim free (Gbl_CurrentLineBuffer); 687313a0c13SJung-uk Kim free (Gbl_MainTokenBuffer); 688313a0c13SJung-uk Kim free (Gbl_MacroTokenBuffer); 689313a0c13SJung-uk Kim free (Gbl_ExpressionTokenBuffer); 690313a0c13SJung-uk Kim } 691313a0c13SJung-uk Kim 692313a0c13SJung-uk Kim 69353289f6aSNate Lawson /******************************************************************************* 69453289f6aSNate Lawson * 69553289f6aSNate Lawson * FUNCTION: UtInternalizeName 69653289f6aSNate Lawson * 69753289f6aSNate Lawson * PARAMETERS: ExternalName - Name to convert 69853289f6aSNate Lawson * ConvertedName - Where the converted name is returned 69953289f6aSNate Lawson * 70053289f6aSNate Lawson * RETURN: Status 70153289f6aSNate Lawson * 70253289f6aSNate Lawson * DESCRIPTION: Convert an external (ASL) name to an internal (AML) name 70353289f6aSNate Lawson * 70453289f6aSNate Lawson ******************************************************************************/ 70553289f6aSNate Lawson 70653289f6aSNate Lawson ACPI_STATUS 70753289f6aSNate Lawson UtInternalizeName ( 70853289f6aSNate Lawson char *ExternalName, 70953289f6aSNate Lawson char **ConvertedName) 71053289f6aSNate Lawson { 71153289f6aSNate Lawson ACPI_NAMESTRING_INFO Info; 71253289f6aSNate Lawson ACPI_STATUS Status; 71353289f6aSNate Lawson 71453289f6aSNate Lawson 71553289f6aSNate Lawson if (!ExternalName) 71653289f6aSNate Lawson { 71753289f6aSNate Lawson return (AE_OK); 71853289f6aSNate Lawson } 71953289f6aSNate Lawson 72053289f6aSNate Lawson /* Get the length of the new internal name */ 72153289f6aSNate Lawson 72253289f6aSNate Lawson Info.ExternalName = ExternalName; 72353289f6aSNate Lawson AcpiNsGetInternalNameLength (&Info); 72453289f6aSNate Lawson 72553289f6aSNate Lawson /* We need a segment to store the internal name */ 72653289f6aSNate Lawson 727313a0c13SJung-uk Kim Info.InternalName = UtStringCacheCalloc (Info.Length); 72853289f6aSNate Lawson if (!Info.InternalName) 72953289f6aSNate Lawson { 73053289f6aSNate Lawson return (AE_NO_MEMORY); 73153289f6aSNate Lawson } 73253289f6aSNate Lawson 73353289f6aSNate Lawson /* Build the name */ 73453289f6aSNate Lawson 73553289f6aSNate Lawson Status = AcpiNsBuildInternalName (&Info); 73653289f6aSNate Lawson if (ACPI_FAILURE (Status)) 73753289f6aSNate Lawson { 73853289f6aSNate Lawson return (Status); 73953289f6aSNate Lawson } 74053289f6aSNate Lawson 74153289f6aSNate Lawson *ConvertedName = Info.InternalName; 74253289f6aSNate Lawson return (AE_OK); 74353289f6aSNate Lawson } 74453289f6aSNate Lawson 74553289f6aSNate Lawson 74653289f6aSNate Lawson /******************************************************************************* 74753289f6aSNate Lawson * 74853289f6aSNate Lawson * FUNCTION: UtPadNameWithUnderscores 74953289f6aSNate Lawson * 75053289f6aSNate Lawson * PARAMETERS: NameSeg - Input nameseg 75153289f6aSNate Lawson * PaddedNameSeg - Output padded nameseg 75253289f6aSNate Lawson * 75353289f6aSNate Lawson * RETURN: Padded nameseg. 75453289f6aSNate Lawson * 75553289f6aSNate Lawson * DESCRIPTION: Pads a NameSeg with underscores if necessary to form a full 75653289f6aSNate Lawson * ACPI_NAME. 75753289f6aSNate Lawson * 75853289f6aSNate Lawson ******************************************************************************/ 75953289f6aSNate Lawson 760fba7fc7eSJung-uk Kim static void 76153289f6aSNate Lawson UtPadNameWithUnderscores ( 76253289f6aSNate Lawson char *NameSeg, 76353289f6aSNate Lawson char *PaddedNameSeg) 76453289f6aSNate Lawson { 76553289f6aSNate Lawson UINT32 i; 76653289f6aSNate Lawson 76753289f6aSNate Lawson 76853289f6aSNate Lawson for (i = 0; (i < ACPI_NAME_SIZE); i++) 76953289f6aSNate Lawson { 77053289f6aSNate Lawson if (*NameSeg) 77153289f6aSNate Lawson { 77253289f6aSNate Lawson *PaddedNameSeg = *NameSeg; 77353289f6aSNate Lawson NameSeg++; 77453289f6aSNate Lawson } 77553289f6aSNate Lawson else 77653289f6aSNate Lawson { 77753289f6aSNate Lawson *PaddedNameSeg = '_'; 77853289f6aSNate Lawson } 779*f8146b88SJung-uk Kim 78053289f6aSNate Lawson PaddedNameSeg++; 78153289f6aSNate Lawson } 78253289f6aSNate Lawson } 78353289f6aSNate Lawson 78453289f6aSNate Lawson 78553289f6aSNate Lawson /******************************************************************************* 78653289f6aSNate Lawson * 78753289f6aSNate Lawson * FUNCTION: UtAttachNameseg 78853289f6aSNate Lawson * 78953289f6aSNate Lawson * PARAMETERS: Op - Parent parse node 79053289f6aSNate Lawson * Name - Full ExternalName 79153289f6aSNate Lawson * 792fba7fc7eSJung-uk Kim * RETURN: None; Sets the NameSeg field in parent node 79353289f6aSNate Lawson * 79453289f6aSNate Lawson * DESCRIPTION: Extract the last nameseg of the ExternalName and store it 79553289f6aSNate Lawson * in the NameSeg field of the Op. 79653289f6aSNate Lawson * 79753289f6aSNate Lawson ******************************************************************************/ 79853289f6aSNate Lawson 799fba7fc7eSJung-uk Kim static void 80053289f6aSNate Lawson UtAttachNameseg ( 80153289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 80253289f6aSNate Lawson char *Name) 80353289f6aSNate Lawson { 80453289f6aSNate Lawson char *NameSeg; 80553289f6aSNate Lawson char PaddedNameSeg[4]; 80653289f6aSNate Lawson 80753289f6aSNate Lawson 80853289f6aSNate Lawson if (!Name) 80953289f6aSNate Lawson { 81053289f6aSNate Lawson return; 81153289f6aSNate Lawson } 81253289f6aSNate Lawson 81353289f6aSNate Lawson /* Look for the last dot in the namepath */ 81453289f6aSNate Lawson 81553289f6aSNate Lawson NameSeg = strrchr (Name, '.'); 81653289f6aSNate Lawson if (NameSeg) 81753289f6aSNate Lawson { 81853289f6aSNate Lawson /* Found last dot, we have also found the final nameseg */ 81953289f6aSNate Lawson 82053289f6aSNate Lawson NameSeg++; 82153289f6aSNate Lawson UtPadNameWithUnderscores (NameSeg, PaddedNameSeg); 82253289f6aSNate Lawson } 82353289f6aSNate Lawson else 82453289f6aSNate Lawson { 82553289f6aSNate Lawson /* No dots in the namepath, there is only a single nameseg. */ 82653289f6aSNate Lawson /* Handle prefixes */ 82753289f6aSNate Lawson 828efcc2a30SJung-uk Kim while (ACPI_IS_ROOT_PREFIX (*Name) || 829efcc2a30SJung-uk Kim ACPI_IS_PARENT_PREFIX (*Name)) 83053289f6aSNate Lawson { 83153289f6aSNate Lawson Name++; 83253289f6aSNate Lawson } 83353289f6aSNate Lawson 8348ef1a331SJung-uk Kim /* Remaining string should be one single nameseg */ 83553289f6aSNate Lawson 83653289f6aSNate Lawson UtPadNameWithUnderscores (Name, PaddedNameSeg); 83753289f6aSNate Lawson } 83853289f6aSNate Lawson 8398ef1a331SJung-uk Kim ACPI_MOVE_NAME (Op->Asl.NameSeg, PaddedNameSeg); 84053289f6aSNate Lawson } 84153289f6aSNate Lawson 84253289f6aSNate Lawson 84353289f6aSNate Lawson /******************************************************************************* 84453289f6aSNate Lawson * 84553289f6aSNate Lawson * FUNCTION: UtAttachNamepathToOwner 84653289f6aSNate Lawson * 84753289f6aSNate Lawson * PARAMETERS: Op - Parent parse node 84853289f6aSNate Lawson * NameOp - Node that contains the name 84953289f6aSNate Lawson * 85053289f6aSNate Lawson * RETURN: Sets the ExternalName and Namepath in the parent node 85153289f6aSNate Lawson * 85253289f6aSNate Lawson * DESCRIPTION: Store the name in two forms in the parent node: The original 85353289f6aSNate Lawson * (external) name, and the internalized name that is used within 85453289f6aSNate Lawson * the ACPI namespace manager. 85553289f6aSNate Lawson * 85653289f6aSNate Lawson ******************************************************************************/ 85753289f6aSNate Lawson 85853289f6aSNate Lawson void 85953289f6aSNate Lawson UtAttachNamepathToOwner ( 86053289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 86153289f6aSNate Lawson ACPI_PARSE_OBJECT *NameOp) 86253289f6aSNate Lawson { 86353289f6aSNate Lawson ACPI_STATUS Status; 86453289f6aSNate Lawson 86553289f6aSNate Lawson 86653289f6aSNate Lawson /* Full external path */ 86753289f6aSNate Lawson 86853289f6aSNate Lawson Op->Asl.ExternalName = NameOp->Asl.Value.String; 86953289f6aSNate Lawson 870fba7fc7eSJung-uk Kim /* Save the NameOp for possible error reporting later */ 871fba7fc7eSJung-uk Kim 872fba7fc7eSJung-uk Kim Op->Asl.ParentMethod = (void *) NameOp; 873fba7fc7eSJung-uk Kim 87453289f6aSNate Lawson /* Last nameseg of the path */ 87553289f6aSNate Lawson 87653289f6aSNate Lawson UtAttachNameseg (Op, Op->Asl.ExternalName); 87753289f6aSNate Lawson 87853289f6aSNate Lawson /* Create internalized path */ 87953289f6aSNate Lawson 88053289f6aSNate Lawson Status = UtInternalizeName (NameOp->Asl.Value.String, &Op->Asl.Namepath); 88153289f6aSNate Lawson if (ACPI_FAILURE (Status)) 88253289f6aSNate Lawson { 88353289f6aSNate Lawson /* TBD: abort on no memory */ 88453289f6aSNate Lawson } 88553289f6aSNate Lawson } 88653289f6aSNate Lawson 88753289f6aSNate Lawson 88853289f6aSNate Lawson /******************************************************************************* 88953289f6aSNate Lawson * 89053289f6aSNate Lawson * FUNCTION: UtDoConstant 89153289f6aSNate Lawson * 89253289f6aSNate Lawson * PARAMETERS: String - Hex, Octal, or Decimal string 89353289f6aSNate Lawson * 89453289f6aSNate Lawson * RETURN: Converted Integer 89553289f6aSNate Lawson * 896f38b0f21SJung-uk Kim * DESCRIPTION: Convert a string to an integer, with error checking. 89753289f6aSNate Lawson * 89853289f6aSNate Lawson ******************************************************************************/ 89953289f6aSNate Lawson 9009a179dd8SJung-uk Kim UINT64 90153289f6aSNate Lawson UtDoConstant ( 90253289f6aSNate Lawson char *String) 90353289f6aSNate Lawson { 90453289f6aSNate Lawson ACPI_STATUS Status; 9059a179dd8SJung-uk Kim UINT64 Converted; 90653289f6aSNate Lawson char ErrBuf[64]; 90753289f6aSNate Lawson 90853289f6aSNate Lawson 909*f8146b88SJung-uk Kim Status = AcpiUtStrtoul64 (String, ACPI_ANY_BASE, 910*f8146b88SJung-uk Kim ACPI_MAX64_BYTE_WIDTH, &Converted); 911*f8146b88SJung-uk Kim 91253289f6aSNate Lawson if (ACPI_FAILURE (Status)) 91353289f6aSNate Lawson { 914fba7fc7eSJung-uk Kim sprintf (ErrBuf, "%s %s\n", "Conversion error:", 915fba7fc7eSJung-uk Kim AcpiFormatException (Status)); 91653289f6aSNate Lawson AslCompilererror (ErrBuf); 91753289f6aSNate Lawson } 91853289f6aSNate Lawson 91953289f6aSNate Lawson return (Converted); 92053289f6aSNate Lawson } 92153289f6aSNate Lawson 92253289f6aSNate Lawson 923*f8146b88SJung-uk Kim #ifdef _OBSOLETE_FUNCTIONS 924*f8146b88SJung-uk Kim /* Removed 01/2016 */ 925fba7fc7eSJung-uk Kim 92653289f6aSNate Lawson /******************************************************************************* 92753289f6aSNate Lawson * 928*f8146b88SJung-uk Kim * FUNCTION: UtConvertByteToHex 92953289f6aSNate Lawson * 930*f8146b88SJung-uk Kim * PARAMETERS: RawByte - Binary data 931*f8146b88SJung-uk Kim * Buffer - Pointer to where the hex bytes will be 932*f8146b88SJung-uk Kim * stored 93353289f6aSNate Lawson * 934*f8146b88SJung-uk Kim * RETURN: Ascii hex byte is stored in Buffer. 93553289f6aSNate Lawson * 936*f8146b88SJung-uk Kim * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed 937*f8146b88SJung-uk Kim * with "0x" 93853289f6aSNate Lawson * 93953289f6aSNate Lawson ******************************************************************************/ 94053289f6aSNate Lawson 941*f8146b88SJung-uk Kim void 942*f8146b88SJung-uk Kim UtConvertByteToHex ( 943*f8146b88SJung-uk Kim UINT8 RawByte, 944*f8146b88SJung-uk Kim UINT8 *Buffer) 94553289f6aSNate Lawson { 94653289f6aSNate Lawson 947*f8146b88SJung-uk Kim Buffer[0] = '0'; 948*f8146b88SJung-uk Kim Buffer[1] = 'x'; 94953289f6aSNate Lawson 950*f8146b88SJung-uk Kim Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4); 951*f8146b88SJung-uk Kim Buffer[3] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0); 95253289f6aSNate Lawson } 95353289f6aSNate Lawson 95453289f6aSNate Lawson 955*f8146b88SJung-uk Kim /******************************************************************************* 956*f8146b88SJung-uk Kim * 957*f8146b88SJung-uk Kim * FUNCTION: UtConvertByteToAsmHex 958*f8146b88SJung-uk Kim * 959*f8146b88SJung-uk Kim * PARAMETERS: RawByte - Binary data 960*f8146b88SJung-uk Kim * Buffer - Pointer to where the hex bytes will be 961*f8146b88SJung-uk Kim * stored 962*f8146b88SJung-uk Kim * 963*f8146b88SJung-uk Kim * RETURN: Ascii hex byte is stored in Buffer. 964*f8146b88SJung-uk Kim * 965*f8146b88SJung-uk Kim * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed 966*f8146b88SJung-uk Kim * with '0', and a trailing 'h' is added. 967*f8146b88SJung-uk Kim * 968*f8146b88SJung-uk Kim ******************************************************************************/ 969fba7fc7eSJung-uk Kim 970*f8146b88SJung-uk Kim void 971*f8146b88SJung-uk Kim UtConvertByteToAsmHex ( 972*f8146b88SJung-uk Kim UINT8 RawByte, 973*f8146b88SJung-uk Kim UINT8 *Buffer) 97453289f6aSNate Lawson { 975*f8146b88SJung-uk Kim 976*f8146b88SJung-uk Kim Buffer[0] = '0'; 977*f8146b88SJung-uk Kim Buffer[1] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4); 978*f8146b88SJung-uk Kim Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0); 979*f8146b88SJung-uk Kim Buffer[3] = 'h'; 98053289f6aSNate Lawson } 981*f8146b88SJung-uk Kim #endif /* OBSOLETE_FUNCTIONS */ 982