153289f6aSNate Lawson 253289f6aSNate Lawson /****************************************************************************** 353289f6aSNate Lawson * 453289f6aSNate Lawson * Module Name: aslfiles - file I/O suppoert 553289f6aSNate Lawson * 653289f6aSNate Lawson *****************************************************************************/ 753289f6aSNate Lawson 853289f6aSNate Lawson /****************************************************************************** 953289f6aSNate Lawson * 1053289f6aSNate Lawson * 1. Copyright Notice 1153289f6aSNate Lawson * 129a179dd8SJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp. 1353289f6aSNate Lawson * All rights reserved. 1453289f6aSNate Lawson * 1553289f6aSNate Lawson * 2. License 1653289f6aSNate Lawson * 1753289f6aSNate Lawson * 2.1. This is your license from Intel Corp. under its intellectual property 1853289f6aSNate Lawson * rights. You may have additional license terms from the party that provided 1953289f6aSNate Lawson * you this software, covering your right to use that party's intellectual 2053289f6aSNate Lawson * property rights. 2153289f6aSNate Lawson * 2253289f6aSNate Lawson * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 2353289f6aSNate Lawson * copy of the source code appearing in this file ("Covered Code") an 2453289f6aSNate Lawson * irrevocable, perpetual, worldwide license under Intel's copyrights in the 2553289f6aSNate Lawson * base code distributed originally by Intel ("Original Intel Code") to copy, 2653289f6aSNate Lawson * make derivatives, distribute, use and display any portion of the Covered 2753289f6aSNate Lawson * Code in any form, with the right to sublicense such rights; and 2853289f6aSNate Lawson * 2953289f6aSNate Lawson * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 3053289f6aSNate Lawson * license (with the right to sublicense), under only those claims of Intel 3153289f6aSNate Lawson * patents that are infringed by the Original Intel Code, to make, use, sell, 3253289f6aSNate Lawson * offer to sell, and import the Covered Code and derivative works thereof 3353289f6aSNate Lawson * solely to the minimum extent necessary to exercise the above copyright 3453289f6aSNate Lawson * license, and in no event shall the patent license extend to any additions 3553289f6aSNate Lawson * to or modifications of the Original Intel Code. No other license or right 3653289f6aSNate Lawson * is granted directly or by implication, estoppel or otherwise; 3753289f6aSNate Lawson * 3853289f6aSNate Lawson * The above copyright and patent license is granted only if the following 3953289f6aSNate Lawson * conditions are met: 4053289f6aSNate Lawson * 4153289f6aSNate Lawson * 3. Conditions 4253289f6aSNate Lawson * 4353289f6aSNate Lawson * 3.1. Redistribution of Source with Rights to Further Distribute Source. 4453289f6aSNate Lawson * Redistribution of source code of any substantial portion of the Covered 4553289f6aSNate Lawson * Code or modification with rights to further distribute source must include 4653289f6aSNate Lawson * the above Copyright Notice, the above License, this list of Conditions, 4753289f6aSNate Lawson * and the following Disclaimer and Export Compliance provision. In addition, 4853289f6aSNate Lawson * Licensee must cause all Covered Code to which Licensee contributes to 4953289f6aSNate Lawson * contain a file documenting the changes Licensee made to create that Covered 5053289f6aSNate Lawson * Code and the date of any change. Licensee must include in that file the 5153289f6aSNate Lawson * documentation of any changes made by any predecessor Licensee. Licensee 5253289f6aSNate Lawson * must include a prominent statement that the modification is derived, 5353289f6aSNate Lawson * directly or indirectly, from Original Intel Code. 5453289f6aSNate Lawson * 5553289f6aSNate Lawson * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 5653289f6aSNate Lawson * Redistribution of source code of any substantial portion of the Covered 5753289f6aSNate Lawson * Code or modification without rights to further distribute source must 5853289f6aSNate Lawson * include the following Disclaimer and Export Compliance provision in the 5953289f6aSNate Lawson * documentation and/or other materials provided with distribution. In 6053289f6aSNate Lawson * addition, Licensee may not authorize further sublicense of source of any 6153289f6aSNate Lawson * portion of the Covered Code, and must include terms to the effect that the 6253289f6aSNate Lawson * license from Licensee to its licensee is limited to the intellectual 6353289f6aSNate Lawson * property embodied in the software Licensee provides to its licensee, and 6453289f6aSNate Lawson * not to intellectual property embodied in modifications its licensee may 6553289f6aSNate Lawson * make. 6653289f6aSNate Lawson * 6753289f6aSNate Lawson * 3.3. Redistribution of Executable. Redistribution in executable form of any 6853289f6aSNate Lawson * substantial portion of the Covered Code or modification must reproduce the 6953289f6aSNate Lawson * above Copyright Notice, and the following Disclaimer and Export Compliance 7053289f6aSNate Lawson * provision in the documentation and/or other materials provided with the 7153289f6aSNate Lawson * distribution. 7253289f6aSNate Lawson * 7353289f6aSNate Lawson * 3.4. Intel retains all right, title, and interest in and to the Original 7453289f6aSNate Lawson * Intel Code. 7553289f6aSNate Lawson * 7653289f6aSNate Lawson * 3.5. Neither the name Intel nor any other trademark owned or controlled by 7753289f6aSNate Lawson * Intel shall be used in advertising or otherwise to promote the sale, use or 7853289f6aSNate Lawson * other dealings in products derived from or relating to the Covered Code 7953289f6aSNate Lawson * without prior written authorization from Intel. 8053289f6aSNate Lawson * 8153289f6aSNate Lawson * 4. Disclaimer and Export Compliance 8253289f6aSNate Lawson * 8353289f6aSNate Lawson * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 8453289f6aSNate Lawson * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 8553289f6aSNate Lawson * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 8653289f6aSNate Lawson * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 8753289f6aSNate Lawson * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 8853289f6aSNate Lawson * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 8953289f6aSNate Lawson * PARTICULAR PURPOSE. 9053289f6aSNate Lawson * 9153289f6aSNate Lawson * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 9253289f6aSNate Lawson * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 9353289f6aSNate Lawson * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 9453289f6aSNate Lawson * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 9553289f6aSNate Lawson * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 9653289f6aSNate Lawson * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 9753289f6aSNate Lawson * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 9853289f6aSNate Lawson * LIMITED REMEDY. 9953289f6aSNate Lawson * 10053289f6aSNate Lawson * 4.3. Licensee shall not export, either directly or indirectly, any of this 10153289f6aSNate Lawson * software or system incorporating such software without first obtaining any 10253289f6aSNate Lawson * required license or other approval from the U. S. Department of Commerce or 10353289f6aSNate Lawson * any other agency or department of the United States Government. In the 10453289f6aSNate Lawson * event Licensee exports any such software from the United States or 10553289f6aSNate Lawson * re-exports any such software from a foreign destination, Licensee shall 10653289f6aSNate Lawson * ensure that the distribution and export/re-export of the software is in 10753289f6aSNate Lawson * compliance with all laws, regulations, orders, or other restrictions of the 10853289f6aSNate Lawson * U.S. Export Administration Regulations. Licensee agrees that neither it nor 10953289f6aSNate Lawson * any of its subsidiaries will export/re-export any technical data, process, 11053289f6aSNate Lawson * software, or service, directly or indirectly, to any country for which the 11153289f6aSNate Lawson * United States government or any agency thereof requires an export license, 11253289f6aSNate Lawson * other governmental approval, or letter of assurance, without first obtaining 11353289f6aSNate Lawson * such license, approval or letter. 11453289f6aSNate Lawson * 11553289f6aSNate Lawson *****************************************************************************/ 11653289f6aSNate Lawson 117ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 118ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acapps.h> 11953289f6aSNate Lawson 12053289f6aSNate Lawson #define _COMPONENT ACPI_COMPILER 12153289f6aSNate Lawson ACPI_MODULE_NAME ("aslfiles") 12253289f6aSNate Lawson 123fba7fc7eSJung-uk Kim /* Local prototypes */ 124fba7fc7eSJung-uk Kim 125d6dd1baeSJung-uk Kim FILE * 126d6dd1baeSJung-uk Kim FlOpenIncludeWithPrefix ( 127d6dd1baeSJung-uk Kim char *PrefixDir, 128d6dd1baeSJung-uk Kim char *Filename); 129d6dd1baeSJung-uk Kim 130fba7fc7eSJung-uk Kim 131fba7fc7eSJung-uk Kim #ifdef ACPI_OBSOLETE_FUNCTIONS 132fba7fc7eSJung-uk Kim ACPI_STATUS 133fba7fc7eSJung-uk Kim FlParseInputPathname ( 134fba7fc7eSJung-uk Kim char *InputFilename); 135fba7fc7eSJung-uk Kim #endif 136fba7fc7eSJung-uk Kim 13753289f6aSNate Lawson 13853289f6aSNate Lawson /******************************************************************************* 13953289f6aSNate Lawson * 14053289f6aSNate Lawson * FUNCTION: AslAbort 14153289f6aSNate Lawson * 14253289f6aSNate Lawson * PARAMETERS: None 14353289f6aSNate Lawson * 14453289f6aSNate Lawson * RETURN: None 14553289f6aSNate Lawson * 14653289f6aSNate Lawson * DESCRIPTION: Dump the error log and abort the compiler. Used for serious 14753289f6aSNate Lawson * I/O errors 14853289f6aSNate Lawson * 14953289f6aSNate Lawson ******************************************************************************/ 15053289f6aSNate Lawson 15153289f6aSNate Lawson void 152fba7fc7eSJung-uk Kim AslAbort ( 153fba7fc7eSJung-uk Kim void) 15453289f6aSNate Lawson { 15553289f6aSNate Lawson 15653289f6aSNate Lawson AePrintErrorLog (ASL_FILE_STDOUT); 15753289f6aSNate Lawson if (Gbl_DebugFlag) 15853289f6aSNate Lawson { 15953289f6aSNate Lawson /* Print error summary to the debug file */ 16053289f6aSNate Lawson 16153289f6aSNate Lawson AePrintErrorLog (ASL_FILE_STDERR); 16253289f6aSNate Lawson } 16353289f6aSNate Lawson 164fba7fc7eSJung-uk Kim exit (1); 16553289f6aSNate Lawson } 16653289f6aSNate Lawson 16753289f6aSNate Lawson 16853289f6aSNate Lawson /******************************************************************************* 16953289f6aSNate Lawson * 17053289f6aSNate Lawson * FUNCTION: FlFileError 17153289f6aSNate Lawson * 17253289f6aSNate Lawson * PARAMETERS: FileId - Index into file info array 17353289f6aSNate Lawson * ErrorId - Index into error message array 17453289f6aSNate Lawson * 17553289f6aSNate Lawson * RETURN: None 17653289f6aSNate Lawson * 17753289f6aSNate Lawson * DESCRIPTION: Decode errno to an error message and add the entire error 17853289f6aSNate Lawson * to the error log. 17953289f6aSNate Lawson * 18053289f6aSNate Lawson ******************************************************************************/ 18153289f6aSNate Lawson 18253289f6aSNate Lawson void 18353289f6aSNate Lawson FlFileError ( 18453289f6aSNate Lawson UINT32 FileId, 18553289f6aSNate Lawson UINT8 ErrorId) 18653289f6aSNate Lawson { 18753289f6aSNate Lawson 188fba7fc7eSJung-uk Kim sprintf (MsgBuffer, "\"%s\" (%s)", Gbl_Files[FileId].Filename, 189fba7fc7eSJung-uk Kim strerror (errno)); 19053289f6aSNate Lawson AslCommonError (ASL_ERROR, ErrorId, 0, 0, 0, 0, NULL, MsgBuffer); 19153289f6aSNate Lawson } 19253289f6aSNate Lawson 19353289f6aSNate Lawson 19453289f6aSNate Lawson /******************************************************************************* 19553289f6aSNate Lawson * 19653289f6aSNate Lawson * FUNCTION: FlOpenFile 19753289f6aSNate Lawson * 19853289f6aSNate Lawson * PARAMETERS: FileId - Index into file info array 19953289f6aSNate Lawson * Filename - file pathname to open 20053289f6aSNate Lawson * Mode - Open mode for fopen 20153289f6aSNate Lawson * 202fba7fc7eSJung-uk Kim * RETURN: None 20353289f6aSNate Lawson * 20453289f6aSNate Lawson * DESCRIPTION: Open a file. 20553289f6aSNate Lawson * NOTE: Aborts compiler on any error. 20653289f6aSNate Lawson * 20753289f6aSNate Lawson ******************************************************************************/ 20853289f6aSNate Lawson 209a88e22b7SJung-uk Kim void 21053289f6aSNate Lawson FlOpenFile ( 21153289f6aSNate Lawson UINT32 FileId, 21253289f6aSNate Lawson char *Filename, 21353289f6aSNate Lawson char *Mode) 21453289f6aSNate Lawson { 21553289f6aSNate Lawson FILE *File; 21653289f6aSNate Lawson 21753289f6aSNate Lawson 21853289f6aSNate Lawson File = fopen (Filename, Mode); 21953289f6aSNate Lawson 22053289f6aSNate Lawson Gbl_Files[FileId].Filename = Filename; 22153289f6aSNate Lawson Gbl_Files[FileId].Handle = File; 22253289f6aSNate Lawson 22353289f6aSNate Lawson if (!File) 22453289f6aSNate Lawson { 22553289f6aSNate Lawson FlFileError (FileId, ASL_MSG_OPEN); 22653289f6aSNate Lawson AslAbort (); 22753289f6aSNate Lawson } 22853289f6aSNate Lawson } 22953289f6aSNate Lawson 23053289f6aSNate Lawson 23153289f6aSNate Lawson /******************************************************************************* 23253289f6aSNate Lawson * 2333f5e024cSJung-uk Kim * FUNCTION: FlGetFileSize 2343f5e024cSJung-uk Kim * 2353f5e024cSJung-uk Kim * PARAMETERS: FileId - Index into file info array 2363f5e024cSJung-uk Kim * 2373f5e024cSJung-uk Kim * RETURN: File Size 2383f5e024cSJung-uk Kim * 2393f5e024cSJung-uk Kim * DESCRIPTION: Get current file size. Uses seek-to-EOF. File must be open. 2403f5e024cSJung-uk Kim * 2413f5e024cSJung-uk Kim ******************************************************************************/ 2423f5e024cSJung-uk Kim 2433f5e024cSJung-uk Kim UINT32 2443f5e024cSJung-uk Kim FlGetFileSize ( 2453f5e024cSJung-uk Kim UINT32 FileId) 2463f5e024cSJung-uk Kim { 2473f5e024cSJung-uk Kim FILE *fp; 2483f5e024cSJung-uk Kim UINT32 FileSize; 2493f5e024cSJung-uk Kim 2503f5e024cSJung-uk Kim 2513f5e024cSJung-uk Kim fp = Gbl_Files[FileId].Handle; 2523f5e024cSJung-uk Kim 2533f5e024cSJung-uk Kim fseek (fp, 0, SEEK_END); 2543f5e024cSJung-uk Kim FileSize = (UINT32) ftell (fp); 2553f5e024cSJung-uk Kim fseek (fp, 0, SEEK_SET); 2563f5e024cSJung-uk Kim 2573f5e024cSJung-uk Kim return (FileSize); 2583f5e024cSJung-uk Kim } 2593f5e024cSJung-uk Kim 2603f5e024cSJung-uk Kim 2613f5e024cSJung-uk Kim /******************************************************************************* 2623f5e024cSJung-uk Kim * 26353289f6aSNate Lawson * FUNCTION: FlReadFile 26453289f6aSNate Lawson * 26553289f6aSNate Lawson * PARAMETERS: FileId - Index into file info array 26653289f6aSNate Lawson * Buffer - Where to place the data 26753289f6aSNate Lawson * Length - Amount to read 26853289f6aSNate Lawson * 26953289f6aSNate Lawson * RETURN: Status. AE_ERROR indicates EOF. 27053289f6aSNate Lawson * 27153289f6aSNate Lawson * DESCRIPTION: Read data from an open file. 27253289f6aSNate Lawson * NOTE: Aborts compiler on any error. 27353289f6aSNate Lawson * 27453289f6aSNate Lawson ******************************************************************************/ 27553289f6aSNate Lawson 27653289f6aSNate Lawson ACPI_STATUS 27753289f6aSNate Lawson FlReadFile ( 27853289f6aSNate Lawson UINT32 FileId, 27953289f6aSNate Lawson void *Buffer, 28053289f6aSNate Lawson UINT32 Length) 28153289f6aSNate Lawson { 28253289f6aSNate Lawson UINT32 Actual; 28353289f6aSNate Lawson 28453289f6aSNate Lawson 28553289f6aSNate Lawson /* Read and check for error */ 28653289f6aSNate Lawson 28753289f6aSNate Lawson Actual = fread (Buffer, 1, Length, Gbl_Files[FileId].Handle); 28853289f6aSNate Lawson if (Actual != Length) 28953289f6aSNate Lawson { 29053289f6aSNate Lawson if (feof (Gbl_Files[FileId].Handle)) 29153289f6aSNate Lawson { 29253289f6aSNate Lawson /* End-of-file, just return error */ 29353289f6aSNate Lawson 29453289f6aSNate Lawson return (AE_ERROR); 29553289f6aSNate Lawson } 29653289f6aSNate Lawson 29753289f6aSNate Lawson FlFileError (FileId, ASL_MSG_READ); 29853289f6aSNate Lawson AslAbort (); 29953289f6aSNate Lawson } 30053289f6aSNate Lawson 30153289f6aSNate Lawson return (AE_OK); 30253289f6aSNate Lawson } 30353289f6aSNate Lawson 30453289f6aSNate Lawson 30553289f6aSNate Lawson /******************************************************************************* 30653289f6aSNate Lawson * 30753289f6aSNate Lawson * FUNCTION: FlWriteFile 30853289f6aSNate Lawson * 30953289f6aSNate Lawson * PARAMETERS: FileId - Index into file info array 31053289f6aSNate Lawson * Buffer - Data to write 31153289f6aSNate Lawson * Length - Amount of data to write 31253289f6aSNate Lawson * 313fba7fc7eSJung-uk Kim * RETURN: None 31453289f6aSNate Lawson * 31553289f6aSNate Lawson * DESCRIPTION: Write data to an open file. 31653289f6aSNate Lawson * NOTE: Aborts compiler on any error. 31753289f6aSNate Lawson * 31853289f6aSNate Lawson ******************************************************************************/ 31953289f6aSNate Lawson 32053289f6aSNate Lawson void 32153289f6aSNate Lawson FlWriteFile ( 32253289f6aSNate Lawson UINT32 FileId, 32353289f6aSNate Lawson void *Buffer, 32453289f6aSNate Lawson UINT32 Length) 32553289f6aSNate Lawson { 32653289f6aSNate Lawson UINT32 Actual; 32753289f6aSNate Lawson 32853289f6aSNate Lawson 32953289f6aSNate Lawson /* Write and check for error */ 33053289f6aSNate Lawson 33153289f6aSNate Lawson Actual = fwrite ((char *) Buffer, 1, Length, Gbl_Files[FileId].Handle); 33253289f6aSNate Lawson if (Actual != Length) 33353289f6aSNate Lawson { 33453289f6aSNate Lawson FlFileError (FileId, ASL_MSG_WRITE); 33553289f6aSNate Lawson AslAbort (); 33653289f6aSNate Lawson } 33753289f6aSNate Lawson } 33853289f6aSNate Lawson 33953289f6aSNate Lawson 34053289f6aSNate Lawson /******************************************************************************* 34153289f6aSNate Lawson * 34253289f6aSNate Lawson * FUNCTION: FlPrintFile 34353289f6aSNate Lawson * 34453289f6aSNate Lawson * PARAMETERS: FileId - Index into file info array 34553289f6aSNate Lawson * Format - Printf format string 34653289f6aSNate Lawson * ... - Printf arguments 34753289f6aSNate Lawson * 34853289f6aSNate Lawson * RETURN: None 34953289f6aSNate Lawson * 35053289f6aSNate Lawson * DESCRIPTION: Formatted write to an open file. 35153289f6aSNate Lawson * NOTE: Aborts compiler on any error. 35253289f6aSNate Lawson * 35353289f6aSNate Lawson ******************************************************************************/ 35453289f6aSNate Lawson 35553289f6aSNate Lawson void 35653289f6aSNate Lawson FlPrintFile ( 35753289f6aSNate Lawson UINT32 FileId, 35853289f6aSNate Lawson char *Format, 35953289f6aSNate Lawson ...) 36053289f6aSNate Lawson { 36153289f6aSNate Lawson INT32 Actual; 36253289f6aSNate Lawson va_list Args; 36353289f6aSNate Lawson 36453289f6aSNate Lawson 36553289f6aSNate Lawson va_start (Args, Format); 36653289f6aSNate Lawson 36753289f6aSNate Lawson Actual = vfprintf (Gbl_Files[FileId].Handle, Format, Args); 368a9f12690SJung-uk Kim va_end (Args); 369a9f12690SJung-uk Kim 37053289f6aSNate Lawson if (Actual == -1) 37153289f6aSNate Lawson { 37253289f6aSNate Lawson FlFileError (FileId, ASL_MSG_WRITE); 37353289f6aSNate Lawson AslAbort (); 37453289f6aSNate Lawson } 37553289f6aSNate Lawson } 37653289f6aSNate Lawson 37753289f6aSNate Lawson 37853289f6aSNate Lawson /******************************************************************************* 37953289f6aSNate Lawson * 38053289f6aSNate Lawson * FUNCTION: FlSeekFile 38153289f6aSNate Lawson * 38253289f6aSNate Lawson * PARAMETERS: FileId - Index into file info array 38353289f6aSNate Lawson * Offset - Absolute byte offset in file 38453289f6aSNate Lawson * 385fba7fc7eSJung-uk Kim * RETURN: None 38653289f6aSNate Lawson * 38753289f6aSNate Lawson * DESCRIPTION: Seek to absolute offset 38853289f6aSNate Lawson * NOTE: Aborts compiler on any error. 38953289f6aSNate Lawson * 39053289f6aSNate Lawson ******************************************************************************/ 39153289f6aSNate Lawson 39253289f6aSNate Lawson void 39353289f6aSNate Lawson FlSeekFile ( 39453289f6aSNate Lawson UINT32 FileId, 39553289f6aSNate Lawson long Offset) 39653289f6aSNate Lawson { 39753289f6aSNate Lawson int Error; 39853289f6aSNate Lawson 39953289f6aSNate Lawson 40053289f6aSNate Lawson Error = fseek (Gbl_Files[FileId].Handle, Offset, SEEK_SET); 40153289f6aSNate Lawson if (Error) 40253289f6aSNate Lawson { 40353289f6aSNate Lawson FlFileError (FileId, ASL_MSG_SEEK); 40453289f6aSNate Lawson AslAbort (); 40553289f6aSNate Lawson } 40653289f6aSNate Lawson } 40753289f6aSNate Lawson 40853289f6aSNate Lawson 40953289f6aSNate Lawson /******************************************************************************* 41053289f6aSNate Lawson * 41153289f6aSNate Lawson * FUNCTION: FlCloseFile 41253289f6aSNate Lawson * 41353289f6aSNate Lawson * PARAMETERS: FileId - Index into file info array 41453289f6aSNate Lawson * 415fba7fc7eSJung-uk Kim * RETURN: None 41653289f6aSNate Lawson * 41753289f6aSNate Lawson * DESCRIPTION: Close an open file. Aborts compiler on error 41853289f6aSNate Lawson * 41953289f6aSNate Lawson ******************************************************************************/ 42053289f6aSNate Lawson 42153289f6aSNate Lawson void 42253289f6aSNate Lawson FlCloseFile ( 42353289f6aSNate Lawson UINT32 FileId) 42453289f6aSNate Lawson { 42553289f6aSNate Lawson int Error; 42653289f6aSNate Lawson 42753289f6aSNate Lawson 42853289f6aSNate Lawson if (!Gbl_Files[FileId].Handle) 42953289f6aSNate Lawson { 43053289f6aSNate Lawson return; 43153289f6aSNate Lawson } 43253289f6aSNate Lawson 43353289f6aSNate Lawson Error = fclose (Gbl_Files[FileId].Handle); 43453289f6aSNate Lawson Gbl_Files[FileId].Handle = NULL; 43553289f6aSNate Lawson 43653289f6aSNate Lawson if (Error) 43753289f6aSNate Lawson { 43853289f6aSNate Lawson FlFileError (FileId, ASL_MSG_CLOSE); 43953289f6aSNate Lawson AslAbort (); 44053289f6aSNate Lawson } 44153289f6aSNate Lawson 44253289f6aSNate Lawson return; 44353289f6aSNate Lawson } 44453289f6aSNate Lawson 44553289f6aSNate Lawson 44653289f6aSNate Lawson /******************************************************************************* 44753289f6aSNate Lawson * 44853289f6aSNate Lawson * FUNCTION: FlSetLineNumber 44953289f6aSNate Lawson * 45053289f6aSNate Lawson * PARAMETERS: Op - Parse node for the LINE asl statement 45153289f6aSNate Lawson * 45253289f6aSNate Lawson * RETURN: None. 45353289f6aSNate Lawson * 45453289f6aSNate Lawson * DESCRIPTION: Set the current line number 45553289f6aSNate Lawson * 45653289f6aSNate Lawson ******************************************************************************/ 45753289f6aSNate Lawson 45853289f6aSNate Lawson void 45953289f6aSNate Lawson FlSetLineNumber ( 46053289f6aSNate Lawson ACPI_PARSE_OBJECT *Op) 46153289f6aSNate Lawson { 46253289f6aSNate Lawson 46353289f6aSNate Lawson Gbl_CurrentLineNumber = (UINT32) Op->Asl.Value.Integer; 46453289f6aSNate Lawson Gbl_LogicalLineNumber = (UINT32) Op->Asl.Value.Integer; 46553289f6aSNate Lawson } 46653289f6aSNate Lawson 46753289f6aSNate Lawson 46853289f6aSNate Lawson /******************************************************************************* 46953289f6aSNate Lawson * 470d6dd1baeSJung-uk Kim * FUNCTION: FlAddIncludeDirectory 471d6dd1baeSJung-uk Kim * 472d6dd1baeSJung-uk Kim * PARAMETERS: Dir - Directory pathname string 473d6dd1baeSJung-uk Kim * 474d6dd1baeSJung-uk Kim * RETURN: None 475d6dd1baeSJung-uk Kim * 476d6dd1baeSJung-uk Kim * DESCRIPTION: Add a directory the list of include prefix directories. 477d6dd1baeSJung-uk Kim * 478d6dd1baeSJung-uk Kim ******************************************************************************/ 479d6dd1baeSJung-uk Kim 480d6dd1baeSJung-uk Kim void 481d6dd1baeSJung-uk Kim FlAddIncludeDirectory ( 482d6dd1baeSJung-uk Kim char *Dir) 483d6dd1baeSJung-uk Kim { 484d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *NewDir; 485d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *NextDir; 486d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *PrevDir = NULL; 487d6dd1baeSJung-uk Kim UINT32 NeedsSeparator = 0; 488d6dd1baeSJung-uk Kim size_t DirLength; 489d6dd1baeSJung-uk Kim 490d6dd1baeSJung-uk Kim 491d6dd1baeSJung-uk Kim DirLength = strlen (Dir); 492d6dd1baeSJung-uk Kim if (!DirLength) 493d6dd1baeSJung-uk Kim { 494d6dd1baeSJung-uk Kim return; 495d6dd1baeSJung-uk Kim } 496d6dd1baeSJung-uk Kim 497d6dd1baeSJung-uk Kim /* Make sure that the pathname ends with a path separator */ 498d6dd1baeSJung-uk Kim 499d6dd1baeSJung-uk Kim if ((Dir[DirLength-1] != '/') && 500d6dd1baeSJung-uk Kim (Dir[DirLength-1] != '\\')) 501d6dd1baeSJung-uk Kim { 502d6dd1baeSJung-uk Kim NeedsSeparator = 1; 503d6dd1baeSJung-uk Kim } 504d6dd1baeSJung-uk Kim 505d6dd1baeSJung-uk Kim NewDir = ACPI_ALLOCATE_ZEROED (sizeof (ASL_INCLUDE_DIR)); 506d6dd1baeSJung-uk Kim NewDir->Dir = ACPI_ALLOCATE (DirLength + 1 + NeedsSeparator); 507d6dd1baeSJung-uk Kim strcpy (NewDir->Dir, Dir); 508d6dd1baeSJung-uk Kim if (NeedsSeparator) 509d6dd1baeSJung-uk Kim { 510d6dd1baeSJung-uk Kim strcat (NewDir->Dir, "/"); 511d6dd1baeSJung-uk Kim } 512d6dd1baeSJung-uk Kim 513d6dd1baeSJung-uk Kim /* 514d6dd1baeSJung-uk Kim * Preserve command line ordering of -I options by adding new elements 515d6dd1baeSJung-uk Kim * at the end of the list 516d6dd1baeSJung-uk Kim */ 517d6dd1baeSJung-uk Kim NextDir = Gbl_IncludeDirList; 518d6dd1baeSJung-uk Kim while (NextDir) 519d6dd1baeSJung-uk Kim { 520d6dd1baeSJung-uk Kim PrevDir = NextDir; 521d6dd1baeSJung-uk Kim NextDir = NextDir->Next; 522d6dd1baeSJung-uk Kim } 523d6dd1baeSJung-uk Kim 524d6dd1baeSJung-uk Kim if (PrevDir) 525d6dd1baeSJung-uk Kim { 526d6dd1baeSJung-uk Kim PrevDir->Next = NewDir; 527d6dd1baeSJung-uk Kim } 528d6dd1baeSJung-uk Kim else 529d6dd1baeSJung-uk Kim { 530d6dd1baeSJung-uk Kim Gbl_IncludeDirList = NewDir; 531d6dd1baeSJung-uk Kim } 532d6dd1baeSJung-uk Kim } 533d6dd1baeSJung-uk Kim 534d6dd1baeSJung-uk Kim 535d6dd1baeSJung-uk Kim /******************************************************************************* 536d6dd1baeSJung-uk Kim * 537d6dd1baeSJung-uk Kim * FUNCTION: FlOpenIncludeWithPrefix 538d6dd1baeSJung-uk Kim * 539d6dd1baeSJung-uk Kim * PARAMETERS: PrefixDir - Prefix directory pathname. Can be a zero 540d6dd1baeSJung-uk Kim * length string. 541d6dd1baeSJung-uk Kim * Filename - The include filename from the source ASL. 542d6dd1baeSJung-uk Kim * 543d6dd1baeSJung-uk Kim * RETURN: Valid file descriptor if successful. Null otherwise. 544d6dd1baeSJung-uk Kim * 545d6dd1baeSJung-uk Kim * DESCRIPTION: Open an include file and push it on the input file stack. 546d6dd1baeSJung-uk Kim * 547d6dd1baeSJung-uk Kim ******************************************************************************/ 548d6dd1baeSJung-uk Kim 549d6dd1baeSJung-uk Kim FILE * 550d6dd1baeSJung-uk Kim FlOpenIncludeWithPrefix ( 551d6dd1baeSJung-uk Kim char *PrefixDir, 552d6dd1baeSJung-uk Kim char *Filename) 553d6dd1baeSJung-uk Kim { 554d6dd1baeSJung-uk Kim FILE *IncludeFile; 555d6dd1baeSJung-uk Kim char *Pathname; 556d6dd1baeSJung-uk Kim 557d6dd1baeSJung-uk Kim 558d6dd1baeSJung-uk Kim /* Build the full pathname to the file */ 559d6dd1baeSJung-uk Kim 560d6dd1baeSJung-uk Kim Pathname = ACPI_ALLOCATE (strlen (PrefixDir) + strlen (Filename) + 1); 561d6dd1baeSJung-uk Kim 562d6dd1baeSJung-uk Kim strcpy (Pathname, PrefixDir); 563d6dd1baeSJung-uk Kim strcat (Pathname, Filename); 564d6dd1baeSJung-uk Kim 565d6dd1baeSJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, "\nAttempt to open include file: path %s\n\n", 566d6dd1baeSJung-uk Kim Pathname); 567d6dd1baeSJung-uk Kim 568d6dd1baeSJung-uk Kim /* Attempt to open the file, push if successful */ 569d6dd1baeSJung-uk Kim 570d6dd1baeSJung-uk Kim IncludeFile = fopen (Pathname, "r"); 571d6dd1baeSJung-uk Kim if (IncludeFile) 572d6dd1baeSJung-uk Kim { 573d6dd1baeSJung-uk Kim /* Push the include file on the open input file stack */ 574d6dd1baeSJung-uk Kim 575d6dd1baeSJung-uk Kim AslPushInputFileStack (IncludeFile, Pathname); 576d6dd1baeSJung-uk Kim return (IncludeFile); 577d6dd1baeSJung-uk Kim } 578d6dd1baeSJung-uk Kim 579d6dd1baeSJung-uk Kim ACPI_FREE (Pathname); 580d6dd1baeSJung-uk Kim return (NULL); 581d6dd1baeSJung-uk Kim } 582d6dd1baeSJung-uk Kim 583d6dd1baeSJung-uk Kim 584d6dd1baeSJung-uk Kim /******************************************************************************* 585d6dd1baeSJung-uk Kim * 58653289f6aSNate Lawson * FUNCTION: FlOpenIncludeFile 58753289f6aSNate Lawson * 58853289f6aSNate Lawson * PARAMETERS: Op - Parse node for the INCLUDE ASL statement 58953289f6aSNate Lawson * 59053289f6aSNate Lawson * RETURN: None. 59153289f6aSNate Lawson * 59253289f6aSNate Lawson * DESCRIPTION: Open an include file and push it on the input file stack. 59353289f6aSNate Lawson * 59453289f6aSNate Lawson ******************************************************************************/ 59553289f6aSNate Lawson 59653289f6aSNate Lawson void 59753289f6aSNate Lawson FlOpenIncludeFile ( 59853289f6aSNate Lawson ACPI_PARSE_OBJECT *Op) 59953289f6aSNate Lawson { 600d6dd1baeSJung-uk Kim FILE *IncludeFile; 601d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *NextDir; 60253289f6aSNate Lawson 60353289f6aSNate Lawson 60453289f6aSNate Lawson /* Op must be valid */ 60553289f6aSNate Lawson 60653289f6aSNate Lawson if (!Op) 60753289f6aSNate Lawson { 60853289f6aSNate Lawson AslCommonError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, 60953289f6aSNate Lawson Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 61053289f6aSNate Lawson Gbl_InputByteCount, Gbl_CurrentColumn, 61153289f6aSNate Lawson Gbl_Files[ASL_FILE_INPUT].Filename, " - Null parse node"); 61253289f6aSNate Lawson 61353289f6aSNate Lawson return; 61453289f6aSNate Lawson } 61553289f6aSNate Lawson 61653289f6aSNate Lawson /* 61753289f6aSNate Lawson * Flush out the "include ()" statement on this line, start 61853289f6aSNate Lawson * the actual include file on the next line 61953289f6aSNate Lawson */ 62053289f6aSNate Lawson ResetCurrentLineBuffer (); 62153289f6aSNate Lawson FlPrintFile (ASL_FILE_SOURCE_OUTPUT, "\n"); 62253289f6aSNate Lawson Gbl_CurrentLineOffset++; 62353289f6aSNate Lawson 62453289f6aSNate Lawson 625d6dd1baeSJung-uk Kim /* Attempt to open the include file */ 626d6dd1baeSJung-uk Kim 627d6dd1baeSJung-uk Kim /* If the file specifies an absolute path, just open it */ 628d6dd1baeSJung-uk Kim 629d6dd1baeSJung-uk Kim if ((Op->Asl.Value.String[0] == '/') || 630d6dd1baeSJung-uk Kim (Op->Asl.Value.String[0] == '\\') || 631d6dd1baeSJung-uk Kim (Op->Asl.Value.String[1] == ':')) 63253289f6aSNate Lawson { 633d6dd1baeSJung-uk Kim IncludeFile = FlOpenIncludeWithPrefix ("", Op->Asl.Value.String); 634d6dd1baeSJung-uk Kim if (!IncludeFile) 635d6dd1baeSJung-uk Kim { 636d6dd1baeSJung-uk Kim goto ErrorExit; 637d6dd1baeSJung-uk Kim } 63853289f6aSNate Lawson return; 63953289f6aSNate Lawson } 64053289f6aSNate Lawson 641d6dd1baeSJung-uk Kim /* 642d6dd1baeSJung-uk Kim * The include filename is not an absolute path. 643d6dd1baeSJung-uk Kim * 644d6dd1baeSJung-uk Kim * First, search for the file within the "local" directory -- meaning 645d6dd1baeSJung-uk Kim * the same directory that contains the source file. 646d6dd1baeSJung-uk Kim * 647d6dd1baeSJung-uk Kim * Construct the file pathname from the global directory name. 648d6dd1baeSJung-uk Kim */ 649d6dd1baeSJung-uk Kim IncludeFile = FlOpenIncludeWithPrefix (Gbl_DirectoryPath, Op->Asl.Value.String); 650d6dd1baeSJung-uk Kim if (IncludeFile) 651d6dd1baeSJung-uk Kim { 652d6dd1baeSJung-uk Kim return; 653d6dd1baeSJung-uk Kim } 65453289f6aSNate Lawson 655d6dd1baeSJung-uk Kim /* 656d6dd1baeSJung-uk Kim * Second, search for the file within the (possibly multiple) directories 657d6dd1baeSJung-uk Kim * specified by the -I option on the command line. 658d6dd1baeSJung-uk Kim */ 659d6dd1baeSJung-uk Kim NextDir = Gbl_IncludeDirList; 660d6dd1baeSJung-uk Kim while (NextDir) 661d6dd1baeSJung-uk Kim { 662d6dd1baeSJung-uk Kim IncludeFile = FlOpenIncludeWithPrefix (NextDir->Dir, Op->Asl.Value.String); 663d6dd1baeSJung-uk Kim if (IncludeFile) 664d6dd1baeSJung-uk Kim { 665d6dd1baeSJung-uk Kim return; 666d6dd1baeSJung-uk Kim } 667d6dd1baeSJung-uk Kim 668d6dd1baeSJung-uk Kim NextDir = NextDir->Next; 669d6dd1baeSJung-uk Kim } 670d6dd1baeSJung-uk Kim 671d6dd1baeSJung-uk Kim /* We could not open the include file after trying very hard */ 672d6dd1baeSJung-uk Kim 673d6dd1baeSJung-uk Kim ErrorExit: 674d6dd1baeSJung-uk Kim sprintf (MsgBuffer, "%s, %s", Op->Asl.Value.String, strerror (errno)); 675d6dd1baeSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, Op, MsgBuffer); 67653289f6aSNate Lawson } 67753289f6aSNate Lawson 67853289f6aSNate Lawson 67953289f6aSNate Lawson /******************************************************************************* 68053289f6aSNate Lawson * 681fba7fc7eSJung-uk Kim * FUNCTION: FlOpenInputFile 682fba7fc7eSJung-uk Kim * 683fba7fc7eSJung-uk Kim * PARAMETERS: InputFilename - The user-specified ASL source file to be 684fba7fc7eSJung-uk Kim * compiled 685fba7fc7eSJung-uk Kim * 686fba7fc7eSJung-uk Kim * RETURN: Status 687fba7fc7eSJung-uk Kim * 688fba7fc7eSJung-uk Kim * DESCRIPTION: Open the specified input file, and save the directory path to 689fba7fc7eSJung-uk Kim * the file so that include files can be opened in 690fba7fc7eSJung-uk Kim * the same directory. 691fba7fc7eSJung-uk Kim * 692fba7fc7eSJung-uk Kim ******************************************************************************/ 693fba7fc7eSJung-uk Kim 694fba7fc7eSJung-uk Kim ACPI_STATUS 695fba7fc7eSJung-uk Kim FlOpenInputFile ( 696fba7fc7eSJung-uk Kim char *InputFilename) 697fba7fc7eSJung-uk Kim { 698fba7fc7eSJung-uk Kim 699fba7fc7eSJung-uk Kim /* Open the input ASL file, text mode */ 700fba7fc7eSJung-uk Kim 701fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_INPUT, InputFilename, "r"); 702fba7fc7eSJung-uk Kim AslCompilerin = Gbl_Files[ASL_FILE_INPUT].Handle; 703fba7fc7eSJung-uk Kim 704fba7fc7eSJung-uk Kim return (AE_OK); 705fba7fc7eSJung-uk Kim } 706fba7fc7eSJung-uk Kim 707fba7fc7eSJung-uk Kim 708fba7fc7eSJung-uk Kim /******************************************************************************* 709fba7fc7eSJung-uk Kim * 710fba7fc7eSJung-uk Kim * FUNCTION: FlOpenAmlOutputFile 711fba7fc7eSJung-uk Kim * 712fba7fc7eSJung-uk Kim * PARAMETERS: FilenamePrefix - The user-specified ASL source file 713fba7fc7eSJung-uk Kim * 714fba7fc7eSJung-uk Kim * RETURN: Status 715fba7fc7eSJung-uk Kim * 716fba7fc7eSJung-uk Kim * DESCRIPTION: Create the output filename (*.AML) and open the file. The file 717fba7fc7eSJung-uk Kim * is created in the same directory as the parent input file. 718fba7fc7eSJung-uk Kim * 719fba7fc7eSJung-uk Kim ******************************************************************************/ 720fba7fc7eSJung-uk Kim 721fba7fc7eSJung-uk Kim ACPI_STATUS 722fba7fc7eSJung-uk Kim FlOpenAmlOutputFile ( 723fba7fc7eSJung-uk Kim char *FilenamePrefix) 724fba7fc7eSJung-uk Kim { 725fba7fc7eSJung-uk Kim char *Filename; 726fba7fc7eSJung-uk Kim 727fba7fc7eSJung-uk Kim 728fba7fc7eSJung-uk Kim /* Output filename usually comes from the ASL itself */ 729fba7fc7eSJung-uk Kim 730fba7fc7eSJung-uk Kim Filename = Gbl_Files[ASL_FILE_AML_OUTPUT].Filename; 731fba7fc7eSJung-uk Kim if (!Filename) 732fba7fc7eSJung-uk Kim { 733fba7fc7eSJung-uk Kim /* Create the output AML filename */ 734fba7fc7eSJung-uk Kim 735fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_AML_CODE); 736fba7fc7eSJung-uk Kim if (!Filename) 737fba7fc7eSJung-uk Kim { 738fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_OUTPUT_FILENAME, 739fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 740fba7fc7eSJung-uk Kim return (AE_ERROR); 741fba7fc7eSJung-uk Kim } 742fba7fc7eSJung-uk Kim } 743fba7fc7eSJung-uk Kim 744fba7fc7eSJung-uk Kim /* Open the output AML file in binary mode */ 745fba7fc7eSJung-uk Kim 746fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_AML_OUTPUT, Filename, "w+b"); 747fba7fc7eSJung-uk Kim return (AE_OK); 748fba7fc7eSJung-uk Kim } 749fba7fc7eSJung-uk Kim 750fba7fc7eSJung-uk Kim 751fba7fc7eSJung-uk Kim /******************************************************************************* 752fba7fc7eSJung-uk Kim * 753fba7fc7eSJung-uk Kim * FUNCTION: FlOpenMiscOutputFiles 754fba7fc7eSJung-uk Kim * 755fba7fc7eSJung-uk Kim * PARAMETERS: FilenamePrefix - The user-specified ASL source file 756fba7fc7eSJung-uk Kim * 757fba7fc7eSJung-uk Kim * RETURN: Status 758fba7fc7eSJung-uk Kim * 759fba7fc7eSJung-uk Kim * DESCRIPTION: Create and open the various output files needed, depending on 760fba7fc7eSJung-uk Kim * the command line options 761fba7fc7eSJung-uk Kim * 762fba7fc7eSJung-uk Kim ******************************************************************************/ 763fba7fc7eSJung-uk Kim 764fba7fc7eSJung-uk Kim ACPI_STATUS 765fba7fc7eSJung-uk Kim FlOpenMiscOutputFiles ( 766fba7fc7eSJung-uk Kim char *FilenamePrefix) 767fba7fc7eSJung-uk Kim { 768fba7fc7eSJung-uk Kim char *Filename; 769fba7fc7eSJung-uk Kim 770fba7fc7eSJung-uk Kim 771a88e22b7SJung-uk Kim /* Create/Open a hex output file if asked */ 772a88e22b7SJung-uk Kim 773a88e22b7SJung-uk Kim if (Gbl_HexOutputFlag) 774a88e22b7SJung-uk Kim { 775a88e22b7SJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_HEX_DUMP); 776a88e22b7SJung-uk Kim if (!Filename) 777a88e22b7SJung-uk Kim { 778a88e22b7SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 779a88e22b7SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 780a88e22b7SJung-uk Kim return (AE_ERROR); 781a88e22b7SJung-uk Kim } 782a88e22b7SJung-uk Kim 783a88e22b7SJung-uk Kim /* Open the hex file, text mode */ 784a88e22b7SJung-uk Kim 785a88e22b7SJung-uk Kim FlOpenFile (ASL_FILE_HEX_OUTPUT, Filename, "w+"); 786a88e22b7SJung-uk Kim 787a88e22b7SJung-uk Kim AslCompilerSignon (ASL_FILE_HEX_OUTPUT); 788a88e22b7SJung-uk Kim AslCompilerFileHeader (ASL_FILE_HEX_OUTPUT); 789a88e22b7SJung-uk Kim } 790a88e22b7SJung-uk Kim 791a88e22b7SJung-uk Kim /* Create/Open a debug output file if asked */ 792a88e22b7SJung-uk Kim 793a88e22b7SJung-uk Kim if (Gbl_DebugFlag) 794a88e22b7SJung-uk Kim { 795a88e22b7SJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_DEBUG); 796a88e22b7SJung-uk Kim if (!Filename) 797a88e22b7SJung-uk Kim { 798a88e22b7SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME, 799a88e22b7SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 800a88e22b7SJung-uk Kim return (AE_ERROR); 801a88e22b7SJung-uk Kim } 802a88e22b7SJung-uk Kim 803a88e22b7SJung-uk Kim /* Open the debug file as STDERR, text mode */ 804a88e22b7SJung-uk Kim 805a88e22b7SJung-uk Kim /* TBD: hide this behind a FlReopenFile function */ 806a88e22b7SJung-uk Kim 807a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Filename = Filename; 808a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle = 809a88e22b7SJung-uk Kim freopen (Filename, "w+t", stderr); 810a88e22b7SJung-uk Kim 811a88e22b7SJung-uk Kim AslCompilerSignon (ASL_FILE_DEBUG_OUTPUT); 812a88e22b7SJung-uk Kim AslCompilerFileHeader (ASL_FILE_DEBUG_OUTPUT); 813a88e22b7SJung-uk Kim } 814a88e22b7SJung-uk Kim 815a88e22b7SJung-uk Kim if (Gbl_FileType == ASL_INPUT_TYPE_ASCII_DATA) 816a88e22b7SJung-uk Kim { 817a88e22b7SJung-uk Kim return (AE_OK); 818a88e22b7SJung-uk Kim } 819a88e22b7SJung-uk Kim 820fba7fc7eSJung-uk Kim /* Create/Open a combined source output file */ 821fba7fc7eSJung-uk Kim 822fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_SOURCE); 823fba7fc7eSJung-uk Kim if (!Filename) 824fba7fc7eSJung-uk Kim { 825fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 826fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 827fba7fc7eSJung-uk Kim return (AE_ERROR); 828fba7fc7eSJung-uk Kim } 829fba7fc7eSJung-uk Kim 830fba7fc7eSJung-uk Kim /* 831fba7fc7eSJung-uk Kim * Open the source output file, binary mode (so that LF does not get 832fba7fc7eSJung-uk Kim * expanded to CR/LF on some systems, messing up our seek 833fba7fc7eSJung-uk Kim * calculations.) 834fba7fc7eSJung-uk Kim */ 835fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_SOURCE_OUTPUT, Filename, "w+b"); 836fba7fc7eSJung-uk Kim 837fba7fc7eSJung-uk Kim /* Create/Open a listing output file if asked */ 838fba7fc7eSJung-uk Kim 839fba7fc7eSJung-uk Kim if (Gbl_ListingFlag) 840fba7fc7eSJung-uk Kim { 841fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_LISTING); 842fba7fc7eSJung-uk Kim if (!Filename) 843fba7fc7eSJung-uk Kim { 844fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 845fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 846fba7fc7eSJung-uk Kim return (AE_ERROR); 847fba7fc7eSJung-uk Kim } 848fba7fc7eSJung-uk Kim 849fba7fc7eSJung-uk Kim /* Open the listing file, text mode */ 850fba7fc7eSJung-uk Kim 851fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_LISTING_OUTPUT, Filename, "w+"); 852fba7fc7eSJung-uk Kim 853fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_LISTING_OUTPUT); 854fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_LISTING_OUTPUT); 855fba7fc7eSJung-uk Kim } 856fba7fc7eSJung-uk Kim 857fba7fc7eSJung-uk Kim /* Create/Open a assembly code source output file if asked */ 858fba7fc7eSJung-uk Kim 859fba7fc7eSJung-uk Kim if (Gbl_AsmOutputFlag) 860fba7fc7eSJung-uk Kim { 861fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_SOURCE); 862fba7fc7eSJung-uk Kim if (!Filename) 863fba7fc7eSJung-uk Kim { 864fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 865fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 866fba7fc7eSJung-uk Kim return (AE_ERROR); 867fba7fc7eSJung-uk Kim } 868fba7fc7eSJung-uk Kim 869fba7fc7eSJung-uk Kim /* Open the assembly code source file, text mode */ 870fba7fc7eSJung-uk Kim 871fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_ASM_SOURCE_OUTPUT, Filename, "w+"); 872fba7fc7eSJung-uk Kim 873fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_ASM_SOURCE_OUTPUT); 874fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_ASM_SOURCE_OUTPUT); 875fba7fc7eSJung-uk Kim } 876fba7fc7eSJung-uk Kim 877fba7fc7eSJung-uk Kim /* Create/Open a C code source output file if asked */ 878fba7fc7eSJung-uk Kim 879fba7fc7eSJung-uk Kim if (Gbl_C_OutputFlag) 880fba7fc7eSJung-uk Kim { 881fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_SOURCE); 882fba7fc7eSJung-uk Kim if (!Filename) 883fba7fc7eSJung-uk Kim { 884fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 885fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 886fba7fc7eSJung-uk Kim return (AE_ERROR); 887fba7fc7eSJung-uk Kim } 888fba7fc7eSJung-uk Kim 889fba7fc7eSJung-uk Kim /* Open the C code source file, text mode */ 890fba7fc7eSJung-uk Kim 891fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_C_SOURCE_OUTPUT, Filename, "w+"); 892fba7fc7eSJung-uk Kim 893fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_C_SOURCE_OUTPUT, "/*\n"); 894fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_C_SOURCE_OUTPUT); 895fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_C_SOURCE_OUTPUT); 896fba7fc7eSJung-uk Kim } 897fba7fc7eSJung-uk Kim 898fba7fc7eSJung-uk Kim /* Create/Open a assembly include output file if asked */ 899fba7fc7eSJung-uk Kim 900fba7fc7eSJung-uk Kim if (Gbl_AsmIncludeOutputFlag) 901fba7fc7eSJung-uk Kim { 902fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_INCLUDE); 903fba7fc7eSJung-uk Kim if (!Filename) 904fba7fc7eSJung-uk Kim { 905fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 906fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 907fba7fc7eSJung-uk Kim return (AE_ERROR); 908fba7fc7eSJung-uk Kim } 909fba7fc7eSJung-uk Kim 910fba7fc7eSJung-uk Kim /* Open the assembly include file, text mode */ 911fba7fc7eSJung-uk Kim 912fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_ASM_INCLUDE_OUTPUT, Filename, "w+"); 913fba7fc7eSJung-uk Kim 914fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_ASM_INCLUDE_OUTPUT); 915fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_ASM_INCLUDE_OUTPUT); 916fba7fc7eSJung-uk Kim } 917fba7fc7eSJung-uk Kim 918fba7fc7eSJung-uk Kim /* Create/Open a C include output file if asked */ 919fba7fc7eSJung-uk Kim 920fba7fc7eSJung-uk Kim if (Gbl_C_IncludeOutputFlag) 921fba7fc7eSJung-uk Kim { 922fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_INCLUDE); 923fba7fc7eSJung-uk Kim if (!Filename) 924fba7fc7eSJung-uk Kim { 925fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 926fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 927fba7fc7eSJung-uk Kim return (AE_ERROR); 928fba7fc7eSJung-uk Kim } 929fba7fc7eSJung-uk Kim 930fba7fc7eSJung-uk Kim /* Open the C include file, text mode */ 931fba7fc7eSJung-uk Kim 932fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_C_INCLUDE_OUTPUT, Filename, "w+"); 933fba7fc7eSJung-uk Kim 934fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_C_INCLUDE_OUTPUT, "/*\n"); 935fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_C_INCLUDE_OUTPUT); 936fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_C_INCLUDE_OUTPUT); 937fba7fc7eSJung-uk Kim } 938fba7fc7eSJung-uk Kim 939fba7fc7eSJung-uk Kim /* Create a namespace output file if asked */ 940fba7fc7eSJung-uk Kim 941fba7fc7eSJung-uk Kim if (Gbl_NsOutputFlag) 942fba7fc7eSJung-uk Kim { 943fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_NAMESPACE); 944fba7fc7eSJung-uk Kim if (!Filename) 945fba7fc7eSJung-uk Kim { 946fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 947fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 948fba7fc7eSJung-uk Kim return (AE_ERROR); 949fba7fc7eSJung-uk Kim } 950fba7fc7eSJung-uk Kim 951fba7fc7eSJung-uk Kim /* Open the namespace file, text mode */ 952fba7fc7eSJung-uk Kim 953fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_NAMESPACE_OUTPUT, Filename, "w+"); 954fba7fc7eSJung-uk Kim 955fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_NAMESPACE_OUTPUT); 956fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_NAMESPACE_OUTPUT); 957fba7fc7eSJung-uk Kim } 958fba7fc7eSJung-uk Kim 959fba7fc7eSJung-uk Kim return (AE_OK); 960fba7fc7eSJung-uk Kim } 961fba7fc7eSJung-uk Kim 962fba7fc7eSJung-uk Kim 963fba7fc7eSJung-uk Kim #ifdef ACPI_OBSOLETE_FUNCTIONS 964fba7fc7eSJung-uk Kim /******************************************************************************* 965fba7fc7eSJung-uk Kim * 96653289f6aSNate Lawson * FUNCTION: FlParseInputPathname 96753289f6aSNate Lawson * 96853289f6aSNate Lawson * PARAMETERS: InputFilename - The user-specified ASL source file to be 96953289f6aSNate Lawson * compiled 97053289f6aSNate Lawson * 97153289f6aSNate Lawson * RETURN: Status 97253289f6aSNate Lawson * 97353289f6aSNate Lawson * DESCRIPTION: Split the input path into a directory and filename part 97453289f6aSNate Lawson * 1) Directory part used to open include files 97553289f6aSNate Lawson * 2) Filename part used to generate output filenames 97653289f6aSNate Lawson * 97753289f6aSNate Lawson ******************************************************************************/ 97853289f6aSNate Lawson 97953289f6aSNate Lawson ACPI_STATUS 98053289f6aSNate Lawson FlParseInputPathname ( 98153289f6aSNate Lawson char *InputFilename) 98253289f6aSNate Lawson { 98353289f6aSNate Lawson char *Substring; 98453289f6aSNate Lawson 98553289f6aSNate Lawson 98653289f6aSNate Lawson if (!InputFilename) 98753289f6aSNate Lawson { 98853289f6aSNate Lawson return (AE_OK); 98953289f6aSNate Lawson } 99053289f6aSNate Lawson 99153289f6aSNate Lawson /* Get the path to the input filename's directory */ 99253289f6aSNate Lawson 99353289f6aSNate Lawson Gbl_DirectoryPath = strdup (InputFilename); 99453289f6aSNate Lawson if (!Gbl_DirectoryPath) 99553289f6aSNate Lawson { 99653289f6aSNate Lawson return (AE_NO_MEMORY); 99753289f6aSNate Lawson } 99853289f6aSNate Lawson 99953289f6aSNate Lawson Substring = strrchr (Gbl_DirectoryPath, '\\'); 100053289f6aSNate Lawson if (!Substring) 100153289f6aSNate Lawson { 100253289f6aSNate Lawson Substring = strrchr (Gbl_DirectoryPath, '/'); 100353289f6aSNate Lawson if (!Substring) 100453289f6aSNate Lawson { 100553289f6aSNate Lawson Substring = strrchr (Gbl_DirectoryPath, ':'); 100653289f6aSNate Lawson } 100753289f6aSNate Lawson } 100853289f6aSNate Lawson 100953289f6aSNate Lawson if (!Substring) 101053289f6aSNate Lawson { 101153289f6aSNate Lawson Gbl_DirectoryPath[0] = 0; 101253289f6aSNate Lawson if (Gbl_UseDefaultAmlFilename) 101353289f6aSNate Lawson { 101453289f6aSNate Lawson Gbl_OutputFilenamePrefix = strdup (InputFilename); 101553289f6aSNate Lawson } 101653289f6aSNate Lawson } 101753289f6aSNate Lawson else 101853289f6aSNate Lawson { 101953289f6aSNate Lawson if (Gbl_UseDefaultAmlFilename) 102053289f6aSNate Lawson { 102153289f6aSNate Lawson Gbl_OutputFilenamePrefix = strdup (Substring + 1); 102253289f6aSNate Lawson } 102353289f6aSNate Lawson *(Substring+1) = 0; 102453289f6aSNate Lawson } 102553289f6aSNate Lawson 102653289f6aSNate Lawson return (AE_OK); 102753289f6aSNate Lawson } 1028fba7fc7eSJung-uk Kim #endif 102953289f6aSNate Lawson 103053289f6aSNate Lawson 1031