153289f6aSNate Lawson 253289f6aSNate Lawson /****************************************************************************** 353289f6aSNate Lawson * 453289f6aSNate Lawson * Module Name: aslmain - compiler main and utilities 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 11753289f6aSNate Lawson 11853289f6aSNate Lawson #define _DECLARE_GLOBALS 11953289f6aSNate Lawson 120ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 121ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acapps.h> 122709fac06SJung-uk Kim #include <contrib/dev/acpica/include/acdisasm.h> 12353289f6aSNate Lawson 12453289f6aSNate Lawson #ifdef _DEBUG 12553289f6aSNate Lawson #include <crtdbg.h> 12653289f6aSNate Lawson #endif 12753289f6aSNate Lawson 12853289f6aSNate Lawson #define _COMPONENT ACPI_COMPILER 12953289f6aSNate Lawson ACPI_MODULE_NAME ("aslmain") 13053289f6aSNate Lawson 131fba7fc7eSJung-uk Kim /* Local prototypes */ 132fba7fc7eSJung-uk Kim 133fba7fc7eSJung-uk Kim static void 134fba7fc7eSJung-uk Kim Options ( 135fba7fc7eSJung-uk Kim void); 136fba7fc7eSJung-uk Kim 137fba7fc7eSJung-uk Kim static void 138fba7fc7eSJung-uk Kim HelpMessage ( 139fba7fc7eSJung-uk Kim void); 140fba7fc7eSJung-uk Kim 141fba7fc7eSJung-uk Kim static void 142fba7fc7eSJung-uk Kim Usage ( 143fba7fc7eSJung-uk Kim void); 144fba7fc7eSJung-uk Kim 145fba7fc7eSJung-uk Kim static void 146fba7fc7eSJung-uk Kim AslInitialize ( 147fba7fc7eSJung-uk Kim void); 148fba7fc7eSJung-uk Kim 149a9f12690SJung-uk Kim static int 150fba7fc7eSJung-uk Kim AslCommandLine ( 151fba7fc7eSJung-uk Kim int argc, 152fba7fc7eSJung-uk Kim char **argv); 153fba7fc7eSJung-uk Kim 154d6dd1baeSJung-uk Kim static int 155d6dd1baeSJung-uk Kim AslDoOptions ( 156d6dd1baeSJung-uk Kim int argc, 157d6dd1baeSJung-uk Kim char **argv, 158d6dd1baeSJung-uk Kim BOOLEAN IsResponseFile); 159d6dd1baeSJung-uk Kim 160d6dd1baeSJung-uk Kim static void 161d6dd1baeSJung-uk Kim AslMergeOptionTokens ( 162d6dd1baeSJung-uk Kim char *InBuffer, 163d6dd1baeSJung-uk Kim char *OutBuffer); 164d6dd1baeSJung-uk Kim 165d6dd1baeSJung-uk Kim static int 166d6dd1baeSJung-uk Kim AslDoResponseFile ( 167d6dd1baeSJung-uk Kim char *Filename); 168d6dd1baeSJung-uk Kim 169d6dd1baeSJung-uk Kim 170d6dd1baeSJung-uk Kim #define ASL_TOKEN_SEPARATORS " \t\n" 171a88e22b7SJung-uk Kim #define ASL_SUPPORTED_OPTIONS "@:2b:c:d^e:fgh^i^I:l^no:p:r:s:t:T:v:w:x:z" 172d6dd1baeSJung-uk Kim 17353289f6aSNate Lawson 17453289f6aSNate Lawson /******************************************************************************* 17553289f6aSNate Lawson * 17653289f6aSNate Lawson * FUNCTION: Options 17753289f6aSNate Lawson * 17853289f6aSNate Lawson * PARAMETERS: None 17953289f6aSNate Lawson * 18053289f6aSNate Lawson * RETURN: None 18153289f6aSNate Lawson * 18253289f6aSNate Lawson * DESCRIPTION: Display option help message 18353289f6aSNate Lawson * 18453289f6aSNate Lawson ******************************************************************************/ 18553289f6aSNate Lawson 186fba7fc7eSJung-uk Kim static void 18753289f6aSNate Lawson Options ( 18853289f6aSNate Lawson void) 18953289f6aSNate Lawson { 19053289f6aSNate Lawson 191d6dd1baeSJung-uk Kim printf ("Global:\n"); 192d6dd1baeSJung-uk Kim printf (" -@<file> Specify command file\n"); 193d6dd1baeSJung-uk Kim printf (" -I<dir> Specify additional include directory\n"); 194d6dd1baeSJung-uk Kim 195d6dd1baeSJung-uk Kim printf ("\nGeneral Output:\n"); 196a9f12690SJung-uk Kim printf (" -p<prefix> Specify path/filename prefix for all output files\n"); 197a9f12690SJung-uk Kim printf (" -va Disable all errors and warnings (summary only)\n"); 19853289f6aSNate Lawson printf (" -vi Less verbose errors and warnings for use with IDEs\n"); 19953289f6aSNate Lawson printf (" -vo Enable optimization comments\n"); 20053289f6aSNate Lawson printf (" -vr Disable remarks\n"); 20153289f6aSNate Lawson printf (" -vs Disable signon\n"); 2021a39cfb0SJung-uk Kim printf (" -w<1|2|3> Set warning reporting level\n"); 20353289f6aSNate Lawson 204c8466860SMark Santcroos printf ("\nAML Output Files:\n"); 20553289f6aSNate Lawson printf (" -s<a|c> Create AML in assembler or C source file (*.asm or *.c)\n"); 20653289f6aSNate Lawson printf (" -i<a|c> Create assembler or C include file (*.inc or *.h)\n"); 2073f5e024cSJung-uk Kim printf (" -t<a|c|s> Create AML in assembler, C, or ASL hex table (*.hex)\n"); 20853289f6aSNate Lawson 209c8466860SMark Santcroos printf ("\nAML Code Generation:\n"); 21053289f6aSNate Lawson printf (" -oa Disable all optimizations (compatibility mode)\n"); 21153289f6aSNate Lawson printf (" -of Disable constant folding\n"); 21253289f6aSNate Lawson printf (" -oi Disable integer optimization to Zero/One/Ones\n"); 21353289f6aSNate Lawson printf (" -on Disable named reference string optimization\n"); 2143f5e024cSJung-uk Kim printf (" -cr Disable Resource Descriptor error checking\n"); 215c8466860SMark Santcroos printf (" -r<Revision> Override table header Revision (1-255)\n"); 21653289f6aSNate Lawson 217*42fecd12SJung-uk Kim printf ("\nASL Listing Files:\n"); 21853289f6aSNate Lawson printf (" -l Create mixed listing file (ASL source and AML) (*.lst)\n"); 21953289f6aSNate Lawson printf (" -ln Create namespace file (*.nsp)\n"); 22053289f6aSNate Lawson printf (" -ls Create combined source file (expanded includes) (*.src)\n"); 22153289f6aSNate Lawson 222a88e22b7SJung-uk Kim printf ("\nACPI Data Tables:\n"); 223a88e22b7SJung-uk Kim printf (" -T <Sig> Create table template file for <Sig> (or \"ALL\")\n"); 224a88e22b7SJung-uk Kim printf (" -vt Create verbose templates (full disassembly)\n"); 225a88e22b7SJung-uk Kim 22653289f6aSNate Lawson printf ("\nAML Disassembler:\n"); 2271a39cfb0SJung-uk Kim printf (" -d [file] Disassemble or decode binary ACPI table to file (*.dsl)\n"); 228709fac06SJung-uk Kim printf (" -da [f1,f2] Disassemble multiple tables from single namespace\n"); 22953289f6aSNate Lawson printf (" -dc [file] Disassemble AML and immediately compile it\n"); 23053289f6aSNate Lawson printf (" (Obtain DSDT from current system if no input file)\n"); 231a9f12690SJung-uk Kim printf (" -e [f1,f2] Include ACPI table(s) for external symbol resolution\n"); 232fba7fc7eSJung-uk Kim printf (" -2 Emit ACPI 2.0 compatible ASL code\n"); 23353289f6aSNate Lawson printf (" -g Get ACPI tables and write to files (*.dat)\n"); 23453289f6aSNate Lawson 23553289f6aSNate Lawson printf ("\nHelp:\n"); 23653289f6aSNate Lawson printf (" -h Additional help and compiler debug options\n"); 23753289f6aSNate Lawson printf (" -hc Display operators allowed in constant expressions\n"); 23853289f6aSNate Lawson printf (" -hr Display ACPI reserved method names\n"); 239a88e22b7SJung-uk Kim printf (" -ht Display currently supported ACPI table names\n"); 24053289f6aSNate Lawson } 24153289f6aSNate Lawson 24253289f6aSNate Lawson 24353289f6aSNate Lawson /******************************************************************************* 24453289f6aSNate Lawson * 245fba7fc7eSJung-uk Kim * FUNCTION: HelpMessage 24653289f6aSNate Lawson * 24753289f6aSNate Lawson * PARAMETERS: None 24853289f6aSNate Lawson * 24953289f6aSNate Lawson * RETURN: None 25053289f6aSNate Lawson * 25153289f6aSNate Lawson * DESCRIPTION: Display help message 25253289f6aSNate Lawson * 25353289f6aSNate Lawson ******************************************************************************/ 25453289f6aSNate Lawson 255fba7fc7eSJung-uk Kim static void 25653289f6aSNate Lawson HelpMessage ( 25753289f6aSNate Lawson void) 25853289f6aSNate Lawson { 25953289f6aSNate Lawson 26053289f6aSNate Lawson printf ("AML output filename generation:\n"); 26153289f6aSNate Lawson printf (" Output filenames are generated by appending an extension to a common\n"); 26253289f6aSNate Lawson printf (" filename prefix. The filename prefix is obtained via one of the\n"); 26353289f6aSNate Lawson printf (" following methods (in priority order):\n"); 26453289f6aSNate Lawson printf (" 1) The -p option specifies the prefix\n"); 26553289f6aSNate Lawson printf (" 2) The prefix of the AMLFileName in the ASL Definition Block\n"); 26653289f6aSNate Lawson printf (" 3) The prefix of the input filename\n"); 26753289f6aSNate Lawson printf ("\n"); 26853289f6aSNate Lawson 26953289f6aSNate Lawson Options (); 27053289f6aSNate Lawson 2711a39cfb0SJung-uk Kim printf ("\nCompiler/Disassembler Debug Options:\n"); 27253289f6aSNate Lawson printf (" -b<p|t|b> Create compiler debug/trace file (*.txt)\n"); 27353289f6aSNate Lawson printf (" Types: Parse/Tree/Both\n"); 27453289f6aSNate Lawson printf (" -f Ignore errors, force creation of AML output file(s)\n"); 2753f5e024cSJung-uk Kim printf (" -n Parse only, no output generation\n"); 27653289f6aSNate Lawson printf (" -ot Display compile times\n"); 27753289f6aSNate Lawson printf (" -x<level> Set debug level for trace output\n"); 278a88e22b7SJung-uk Kim printf (" -z Do not insert new compiler ID for DataTables\n"); 27953289f6aSNate Lawson } 28053289f6aSNate Lawson 28153289f6aSNate Lawson 28253289f6aSNate Lawson /******************************************************************************* 28353289f6aSNate Lawson * 28453289f6aSNate Lawson * FUNCTION: Usage 28553289f6aSNate Lawson * 28653289f6aSNate Lawson * PARAMETERS: None 28753289f6aSNate Lawson * 28853289f6aSNate Lawson * RETURN: None 28953289f6aSNate Lawson * 29053289f6aSNate Lawson * DESCRIPTION: Display usage and option message 29153289f6aSNate Lawson * 29253289f6aSNate Lawson ******************************************************************************/ 29353289f6aSNate Lawson 294fba7fc7eSJung-uk Kim static void 29553289f6aSNate Lawson Usage ( 29653289f6aSNate Lawson void) 29753289f6aSNate Lawson { 29853289f6aSNate Lawson 299a9f12690SJung-uk Kim printf ("Usage: %s [Options] [Files]\n\n", CompilerName); 30053289f6aSNate Lawson Options (); 30153289f6aSNate Lawson } 30253289f6aSNate Lawson 30353289f6aSNate Lawson 30453289f6aSNate Lawson /******************************************************************************* 30553289f6aSNate Lawson * 30653289f6aSNate Lawson * FUNCTION: AslInitialize 30753289f6aSNate Lawson * 30853289f6aSNate Lawson * PARAMETERS: None 30953289f6aSNate Lawson * 31053289f6aSNate Lawson * RETURN: None 31153289f6aSNate Lawson * 31253289f6aSNate Lawson * DESCRIPTION: Initialize compiler globals 31353289f6aSNate Lawson * 31453289f6aSNate Lawson ******************************************************************************/ 31553289f6aSNate Lawson 316fba7fc7eSJung-uk Kim static void 317fba7fc7eSJung-uk Kim AslInitialize ( 318fba7fc7eSJung-uk Kim void) 31953289f6aSNate Lawson { 32053289f6aSNate Lawson UINT32 i; 32153289f6aSNate Lawson 32253289f6aSNate Lawson 32353289f6aSNate Lawson #ifdef _DEBUG 32453289f6aSNate Lawson _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(0)); 32553289f6aSNate Lawson #endif 32653289f6aSNate Lawson 32753289f6aSNate Lawson AcpiDbgLevel = 0; 32853289f6aSNate Lawson 32953289f6aSNate Lawson for (i = 0; i < ASL_NUM_FILES; i++) 33053289f6aSNate Lawson { 33153289f6aSNate Lawson Gbl_Files[i].Handle = NULL; 33253289f6aSNate Lawson Gbl_Files[i].Filename = NULL; 33353289f6aSNate Lawson } 33453289f6aSNate Lawson 33553289f6aSNate Lawson Gbl_Files[ASL_FILE_STDOUT].Handle = stdout; 33653289f6aSNate Lawson Gbl_Files[ASL_FILE_STDOUT].Filename = "STDOUT"; 33753289f6aSNate Lawson 33853289f6aSNate Lawson Gbl_Files[ASL_FILE_STDERR].Handle = stderr; 33953289f6aSNate Lawson Gbl_Files[ASL_FILE_STDERR].Filename = "STDERR"; 34053289f6aSNate Lawson } 34153289f6aSNate Lawson 34253289f6aSNate Lawson 34353289f6aSNate Lawson /******************************************************************************* 34453289f6aSNate Lawson * 345d6dd1baeSJung-uk Kim * FUNCTION: AslMergeOptionTokens 34653289f6aSNate Lawson * 347d6dd1baeSJung-uk Kim * PARAMETERS: InBuffer - Input containing an option string 348d6dd1baeSJung-uk Kim * OutBuffer - Merged output buffer 34953289f6aSNate Lawson * 35053289f6aSNate Lawson * RETURN: None 35153289f6aSNate Lawson * 352d6dd1baeSJung-uk Kim * DESCRIPTION: Remove all whitespace from an option string. 353d6dd1baeSJung-uk Kim * 354d6dd1baeSJung-uk Kim ******************************************************************************/ 355d6dd1baeSJung-uk Kim 356d6dd1baeSJung-uk Kim static void 357d6dd1baeSJung-uk Kim AslMergeOptionTokens ( 358d6dd1baeSJung-uk Kim char *InBuffer, 359d6dd1baeSJung-uk Kim char *OutBuffer) 360d6dd1baeSJung-uk Kim { 361d6dd1baeSJung-uk Kim char *Token; 362d6dd1baeSJung-uk Kim 363d6dd1baeSJung-uk Kim 364d6dd1baeSJung-uk Kim *OutBuffer = 0; 365d6dd1baeSJung-uk Kim 366d6dd1baeSJung-uk Kim Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS); 367d6dd1baeSJung-uk Kim while (Token) 368d6dd1baeSJung-uk Kim { 369d6dd1baeSJung-uk Kim strcat (OutBuffer, Token); 370d6dd1baeSJung-uk Kim Token = strtok (NULL, ASL_TOKEN_SEPARATORS); 371d6dd1baeSJung-uk Kim } 372d6dd1baeSJung-uk Kim } 373d6dd1baeSJung-uk Kim 374d6dd1baeSJung-uk Kim 375d6dd1baeSJung-uk Kim /******************************************************************************* 376d6dd1baeSJung-uk Kim * 377d6dd1baeSJung-uk Kim * FUNCTION: AslDoResponseFile 378d6dd1baeSJung-uk Kim * 379d6dd1baeSJung-uk Kim * PARAMETERS: Filename - Name of the response file 380d6dd1baeSJung-uk Kim * 381d6dd1baeSJung-uk Kim * RETURN: Status 382d6dd1baeSJung-uk Kim * 383d6dd1baeSJung-uk Kim * DESCRIPTION: Open a response file and process all options within. 38453289f6aSNate Lawson * 38553289f6aSNate Lawson ******************************************************************************/ 38653289f6aSNate Lawson 387a9f12690SJung-uk Kim static int 388d6dd1baeSJung-uk Kim AslDoResponseFile ( 389d6dd1baeSJung-uk Kim char *Filename) 39053289f6aSNate Lawson { 391d6dd1baeSJung-uk Kim char *argv = StringBuffer2; 392d6dd1baeSJung-uk Kim FILE *ResponseFile; 393d6dd1baeSJung-uk Kim int OptStatus = 0; 394d6dd1baeSJung-uk Kim int Opterr; 395d6dd1baeSJung-uk Kim int Optind; 396d6dd1baeSJung-uk Kim 397d6dd1baeSJung-uk Kim 398d6dd1baeSJung-uk Kim ResponseFile = fopen (Filename, "r"); 399d6dd1baeSJung-uk Kim if (!ResponseFile) 400d6dd1baeSJung-uk Kim { 401d6dd1baeSJung-uk Kim printf ("Could not open command file %s, %s\n", 402d6dd1baeSJung-uk Kim Filename, strerror (errno)); 403d6dd1baeSJung-uk Kim return -1; 404d6dd1baeSJung-uk Kim } 405d6dd1baeSJung-uk Kim 406d6dd1baeSJung-uk Kim /* Must save the current GetOpt globals */ 407d6dd1baeSJung-uk Kim 408d6dd1baeSJung-uk Kim Opterr = AcpiGbl_Opterr; 409d6dd1baeSJung-uk Kim Optind = AcpiGbl_Optind; 410d6dd1baeSJung-uk Kim 411d6dd1baeSJung-uk Kim /* 412d6dd1baeSJung-uk Kim * Process all lines in the response file. There must be one complete 413d6dd1baeSJung-uk Kim * option per line 414d6dd1baeSJung-uk Kim */ 415d6dd1baeSJung-uk Kim while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile)) 416d6dd1baeSJung-uk Kim { 417d6dd1baeSJung-uk Kim /* Compress all tokens, allowing us to use a single argv entry */ 418d6dd1baeSJung-uk Kim 419d6dd1baeSJung-uk Kim AslMergeOptionTokens (StringBuffer, StringBuffer2); 420d6dd1baeSJung-uk Kim 421d6dd1baeSJung-uk Kim /* Process the option */ 422d6dd1baeSJung-uk Kim 423d6dd1baeSJung-uk Kim AcpiGbl_Opterr = 0; 424d6dd1baeSJung-uk Kim AcpiGbl_Optind = 0; 425d6dd1baeSJung-uk Kim 426d6dd1baeSJung-uk Kim OptStatus = AslDoOptions (1, &argv, TRUE); 427d6dd1baeSJung-uk Kim if (OptStatus) 428d6dd1baeSJung-uk Kim { 429d6dd1baeSJung-uk Kim printf ("Invalid option in command file %s: %s\n", 430d6dd1baeSJung-uk Kim Filename, StringBuffer); 431d6dd1baeSJung-uk Kim break; 432d6dd1baeSJung-uk Kim } 433d6dd1baeSJung-uk Kim } 434d6dd1baeSJung-uk Kim 435d6dd1baeSJung-uk Kim /* Restore the GetOpt globals */ 436d6dd1baeSJung-uk Kim 437d6dd1baeSJung-uk Kim AcpiGbl_Opterr = Opterr; 438d6dd1baeSJung-uk Kim AcpiGbl_Optind = Optind; 439d6dd1baeSJung-uk Kim 440d6dd1baeSJung-uk Kim fclose (ResponseFile); 441d6dd1baeSJung-uk Kim return (OptStatus); 442d6dd1baeSJung-uk Kim } 443d6dd1baeSJung-uk Kim 444d6dd1baeSJung-uk Kim 445d6dd1baeSJung-uk Kim /******************************************************************************* 446d6dd1baeSJung-uk Kim * 447d6dd1baeSJung-uk Kim * FUNCTION: AslDoOptions 448d6dd1baeSJung-uk Kim * 449d6dd1baeSJung-uk Kim * PARAMETERS: argc/argv - Standard argc/argv 450d6dd1baeSJung-uk Kim * IsResponseFile - TRUE if executing a response file. 451d6dd1baeSJung-uk Kim * 452d6dd1baeSJung-uk Kim * RETURN: Status 453d6dd1baeSJung-uk Kim * 454d6dd1baeSJung-uk Kim * DESCRIPTION: Command line option processing 455d6dd1baeSJung-uk Kim * 456d6dd1baeSJung-uk Kim ******************************************************************************/ 457d6dd1baeSJung-uk Kim 458d6dd1baeSJung-uk Kim static int 459d6dd1baeSJung-uk Kim AslDoOptions ( 460d6dd1baeSJung-uk Kim int argc, 461d6dd1baeSJung-uk Kim char **argv, 462d6dd1baeSJung-uk Kim BOOLEAN IsResponseFile) 463d6dd1baeSJung-uk Kim { 464a9f12690SJung-uk Kim int j; 465*42fecd12SJung-uk Kim ACPI_STATUS Status; 46653289f6aSNate Lawson 46753289f6aSNate Lawson 46853289f6aSNate Lawson /* Get the command line options */ 46953289f6aSNate Lawson 470d6dd1baeSJung-uk Kim while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j) 47153289f6aSNate Lawson { 472d6dd1baeSJung-uk Kim case '@': /* Begin a response file */ 473d6dd1baeSJung-uk Kim 474d6dd1baeSJung-uk Kim if (IsResponseFile) 475d6dd1baeSJung-uk Kim { 476d6dd1baeSJung-uk Kim printf ("Nested command files are not supported\n"); 477d6dd1baeSJung-uk Kim return -1; 478d6dd1baeSJung-uk Kim } 479d6dd1baeSJung-uk Kim 480d6dd1baeSJung-uk Kim if (AslDoResponseFile (AcpiGbl_Optarg)) 481d6dd1baeSJung-uk Kim { 482d6dd1baeSJung-uk Kim return -1; 483d6dd1baeSJung-uk Kim } 484d6dd1baeSJung-uk Kim break; 485d6dd1baeSJung-uk Kim 486d6dd1baeSJung-uk Kim 487fba7fc7eSJung-uk Kim case '2': 488d6dd1baeSJung-uk Kim 489fba7fc7eSJung-uk Kim Gbl_Acpi2 = TRUE; 490fba7fc7eSJung-uk Kim break; 491fba7fc7eSJung-uk Kim 492fba7fc7eSJung-uk Kim 49353289f6aSNate Lawson case 'b': 49453289f6aSNate Lawson 49553289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 49653289f6aSNate Lawson { 49753289f6aSNate Lawson case 'b': 49853289f6aSNate Lawson AslCompilerdebug = 1; /* same as yydebug */ 49953289f6aSNate Lawson break; 50053289f6aSNate Lawson 50153289f6aSNate Lawson case 'p': 50253289f6aSNate Lawson AslCompilerdebug = 1; /* same as yydebug */ 50353289f6aSNate Lawson break; 50453289f6aSNate Lawson 50553289f6aSNate Lawson case 't': 50653289f6aSNate Lawson break; 50753289f6aSNate Lawson 50853289f6aSNate Lawson default: 50953289f6aSNate Lawson printf ("Unknown option: -b%s\n", AcpiGbl_Optarg); 510d6dd1baeSJung-uk Kim return (-1); 51153289f6aSNate Lawson } 51253289f6aSNate Lawson 51353289f6aSNate Lawson /* Produce debug output file */ 51453289f6aSNate Lawson 51553289f6aSNate Lawson Gbl_DebugFlag = TRUE; 51653289f6aSNate Lawson break; 51753289f6aSNate Lawson 51853289f6aSNate Lawson 51953289f6aSNate Lawson case 'c': 5203f5e024cSJung-uk Kim switch (AcpiGbl_Optarg[0]) 5213f5e024cSJung-uk Kim { 5223f5e024cSJung-uk Kim case 'r': 5233f5e024cSJung-uk Kim Gbl_NoResourceChecking = TRUE; 5243f5e024cSJung-uk Kim break; 52553289f6aSNate Lawson 5263f5e024cSJung-uk Kim default: 5273f5e024cSJung-uk Kim printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 5283f5e024cSJung-uk Kim return (-1); 5293f5e024cSJung-uk Kim } 53053289f6aSNate Lawson break; 53153289f6aSNate Lawson 53253289f6aSNate Lawson 53353289f6aSNate Lawson case 'd': 53453289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 53553289f6aSNate Lawson { 53653289f6aSNate Lawson case '^': 537a9f12690SJung-uk Kim Gbl_DoCompile = FALSE; 53853289f6aSNate Lawson break; 53953289f6aSNate Lawson 540709fac06SJung-uk Kim case 'a': 541709fac06SJung-uk Kim Gbl_DoCompile = FALSE; 542709fac06SJung-uk Kim Gbl_DisassembleAll = TRUE; 543709fac06SJung-uk Kim break; 544709fac06SJung-uk Kim 54553289f6aSNate Lawson case 'c': 54653289f6aSNate Lawson break; 54753289f6aSNate Lawson 54853289f6aSNate Lawson default: 54953289f6aSNate Lawson printf ("Unknown option: -d%s\n", AcpiGbl_Optarg); 550d6dd1baeSJung-uk Kim return (-1); 55153289f6aSNate Lawson } 55253289f6aSNate Lawson 55353289f6aSNate Lawson Gbl_DisasmFlag = TRUE; 55453289f6aSNate Lawson break; 55553289f6aSNate Lawson 55653289f6aSNate Lawson 55753289f6aSNate Lawson case 'e': 558*42fecd12SJung-uk Kim Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg); 559*42fecd12SJung-uk Kim if (ACPI_FAILURE (Status)) 560*42fecd12SJung-uk Kim { 561*42fecd12SJung-uk Kim printf ("Could not add %s to external list\n", AcpiGbl_Optarg); 562*42fecd12SJung-uk Kim return (-1); 563*42fecd12SJung-uk Kim } 56453289f6aSNate Lawson break; 56553289f6aSNate Lawson 56653289f6aSNate Lawson 56753289f6aSNate Lawson case 'f': 56853289f6aSNate Lawson 56953289f6aSNate Lawson /* Ignore errors and force creation of aml file */ 57053289f6aSNate Lawson 57153289f6aSNate Lawson Gbl_IgnoreErrors = TRUE; 57253289f6aSNate Lawson break; 57353289f6aSNate Lawson 57453289f6aSNate Lawson 57553289f6aSNate Lawson case 'g': 57653289f6aSNate Lawson 57753289f6aSNate Lawson /* Get all ACPI tables */ 57853289f6aSNate Lawson 57953289f6aSNate Lawson Gbl_GetAllTables = TRUE; 580a9f12690SJung-uk Kim Gbl_DoCompile = FALSE; 58153289f6aSNate Lawson break; 58253289f6aSNate Lawson 58353289f6aSNate Lawson 58453289f6aSNate Lawson case 'h': 58553289f6aSNate Lawson 58653289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 58753289f6aSNate Lawson { 58853289f6aSNate Lawson case '^': 58953289f6aSNate Lawson HelpMessage (); 59053289f6aSNate Lawson exit (0); 59153289f6aSNate Lawson 59253289f6aSNate Lawson case 'c': 59353289f6aSNate Lawson UtDisplayConstantOpcodes (); 59453289f6aSNate Lawson exit (0); 59553289f6aSNate Lawson 59653289f6aSNate Lawson case 'r': 59753289f6aSNate Lawson /* reserved names */ 59853289f6aSNate Lawson 599ca3cf4faSJung-uk Kim ApDisplayReservedNames (); 60053289f6aSNate Lawson exit (0); 60153289f6aSNate Lawson 602a88e22b7SJung-uk Kim case 't': 603a88e22b7SJung-uk Kim UtDisplaySupportedTables (); 604a88e22b7SJung-uk Kim exit (0); 605a88e22b7SJung-uk Kim 60653289f6aSNate Lawson default: 60753289f6aSNate Lawson printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); 608d6dd1baeSJung-uk Kim return (-1); 60953289f6aSNate Lawson } 61053289f6aSNate Lawson 61153289f6aSNate Lawson 612d6dd1baeSJung-uk Kim case 'I': /* Add an include file search directory */ 613d6dd1baeSJung-uk Kim 614d6dd1baeSJung-uk Kim FlAddIncludeDirectory (AcpiGbl_Optarg); 615d6dd1baeSJung-uk Kim break; 616d6dd1baeSJung-uk Kim 617d6dd1baeSJung-uk Kim 61853289f6aSNate Lawson case 'i': 61953289f6aSNate Lawson 62053289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 62153289f6aSNate Lawson { 62253289f6aSNate Lawson case 'a': 62353289f6aSNate Lawson 62453289f6aSNate Lawson /* Produce assembly code include file */ 62553289f6aSNate Lawson 62653289f6aSNate Lawson Gbl_AsmIncludeOutputFlag = TRUE; 62753289f6aSNate Lawson break; 62853289f6aSNate Lawson 62953289f6aSNate Lawson case 'c': 63053289f6aSNate Lawson 63153289f6aSNate Lawson /* Produce C include file */ 63253289f6aSNate Lawson 63353289f6aSNate Lawson Gbl_C_IncludeOutputFlag = TRUE; 63453289f6aSNate Lawson break; 63553289f6aSNate Lawson 63653289f6aSNate Lawson default: 63753289f6aSNate Lawson printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 638d6dd1baeSJung-uk Kim return (-1); 63953289f6aSNate Lawson } 64053289f6aSNate Lawson break; 64153289f6aSNate Lawson 64253289f6aSNate Lawson 64353289f6aSNate Lawson case 'l': 64453289f6aSNate Lawson 64553289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 64653289f6aSNate Lawson { 64753289f6aSNate Lawson case '^': 64853289f6aSNate Lawson /* Produce listing file (Mixed source/aml) */ 64953289f6aSNate Lawson 65053289f6aSNate Lawson Gbl_ListingFlag = TRUE; 65153289f6aSNate Lawson break; 65253289f6aSNate Lawson 65353289f6aSNate Lawson case 'n': 65453289f6aSNate Lawson /* Produce namespace file */ 65553289f6aSNate Lawson 65653289f6aSNate Lawson Gbl_NsOutputFlag = TRUE; 65753289f6aSNate Lawson break; 65853289f6aSNate Lawson 65953289f6aSNate Lawson case 's': 66053289f6aSNate Lawson /* Produce combined source file */ 66153289f6aSNate Lawson 66253289f6aSNate Lawson Gbl_SourceOutputFlag = TRUE; 66353289f6aSNate Lawson break; 66453289f6aSNate Lawson 66553289f6aSNate Lawson default: 66653289f6aSNate Lawson printf ("Unknown option: -l%s\n", AcpiGbl_Optarg); 667d6dd1baeSJung-uk Kim return (-1); 66853289f6aSNate Lawson } 66953289f6aSNate Lawson break; 67053289f6aSNate Lawson 67153289f6aSNate Lawson 67253289f6aSNate Lawson case 'o': 67353289f6aSNate Lawson 67453289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 67553289f6aSNate Lawson { 67653289f6aSNate Lawson case 'a': 67753289f6aSNate Lawson 67853289f6aSNate Lawson /* Disable all optimizations */ 67953289f6aSNate Lawson 68053289f6aSNate Lawson Gbl_FoldConstants = FALSE; 68153289f6aSNate Lawson Gbl_IntegerOptimizationFlag = FALSE; 68253289f6aSNate Lawson Gbl_ReferenceOptimizationFlag = FALSE; 68353289f6aSNate Lawson break; 68453289f6aSNate Lawson 68553289f6aSNate Lawson case 'f': 68653289f6aSNate Lawson 68753289f6aSNate Lawson /* Disable folding on "normal" expressions */ 68853289f6aSNate Lawson 68953289f6aSNate Lawson Gbl_FoldConstants = FALSE; 69053289f6aSNate Lawson break; 69153289f6aSNate Lawson 69253289f6aSNate Lawson case 'i': 69353289f6aSNate Lawson 69453289f6aSNate Lawson /* Disable integer optimization to constants */ 69553289f6aSNate Lawson 69653289f6aSNate Lawson Gbl_IntegerOptimizationFlag = FALSE; 69753289f6aSNate Lawson break; 69853289f6aSNate Lawson 69953289f6aSNate Lawson case 'n': 70053289f6aSNate Lawson 70153289f6aSNate Lawson /* Disable named reference optimization */ 70253289f6aSNate Lawson 70353289f6aSNate Lawson Gbl_ReferenceOptimizationFlag = FALSE; 70453289f6aSNate Lawson break; 70553289f6aSNate Lawson 70653289f6aSNate Lawson case 't': 70753289f6aSNate Lawson 70853289f6aSNate Lawson /* Display compile time(s) */ 70953289f6aSNate Lawson 71053289f6aSNate Lawson Gbl_CompileTimesFlag = TRUE; 71153289f6aSNate Lawson break; 71253289f6aSNate Lawson 71353289f6aSNate Lawson default: 71453289f6aSNate Lawson printf ("Unknown option: -c%s\n", AcpiGbl_Optarg); 715d6dd1baeSJung-uk Kim return (-1); 71653289f6aSNate Lawson } 71753289f6aSNate Lawson break; 71853289f6aSNate Lawson 71953289f6aSNate Lawson 7203f5e024cSJung-uk Kim case 'n': 7213f5e024cSJung-uk Kim 7223f5e024cSJung-uk Kim /* Parse only */ 7233f5e024cSJung-uk Kim 7243f5e024cSJung-uk Kim Gbl_ParseOnlyFlag = TRUE; 7253f5e024cSJung-uk Kim break; 7263f5e024cSJung-uk Kim 7273f5e024cSJung-uk Kim 72853289f6aSNate Lawson case 'p': 72953289f6aSNate Lawson 73053289f6aSNate Lawson /* Override default AML output filename */ 73153289f6aSNate Lawson 73253289f6aSNate Lawson Gbl_OutputFilenamePrefix = AcpiGbl_Optarg; 73353289f6aSNate Lawson Gbl_UseDefaultAmlFilename = FALSE; 73453289f6aSNate Lawson break; 73553289f6aSNate Lawson 73653289f6aSNate Lawson 73753289f6aSNate Lawson case 'r': 738c8466860SMark Santcroos Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); 73953289f6aSNate Lawson break; 74053289f6aSNate Lawson 74153289f6aSNate Lawson 74253289f6aSNate Lawson case 's': 74353289f6aSNate Lawson 74453289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 74553289f6aSNate Lawson { 74653289f6aSNate Lawson case 'a': 74753289f6aSNate Lawson 74853289f6aSNate Lawson /* Produce assembly code output file */ 74953289f6aSNate Lawson 75053289f6aSNate Lawson Gbl_AsmOutputFlag = TRUE; 75153289f6aSNate Lawson break; 75253289f6aSNate Lawson 75353289f6aSNate Lawson case 'c': 75453289f6aSNate Lawson 75553289f6aSNate Lawson /* Produce C hex output file */ 75653289f6aSNate Lawson 75753289f6aSNate Lawson Gbl_C_OutputFlag = TRUE; 75853289f6aSNate Lawson break; 75953289f6aSNate Lawson 76053289f6aSNate Lawson default: 76153289f6aSNate Lawson printf ("Unknown option: -s%s\n", AcpiGbl_Optarg); 762d6dd1baeSJung-uk Kim return (-1); 76353289f6aSNate Lawson } 76453289f6aSNate Lawson break; 76553289f6aSNate Lawson 76653289f6aSNate Lawson 76753289f6aSNate Lawson case 't': 76853289f6aSNate Lawson 76953289f6aSNate Lawson /* Produce hex table output file */ 77053289f6aSNate Lawson 77153289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 77253289f6aSNate Lawson { 77353289f6aSNate Lawson case 'a': 77453289f6aSNate Lawson Gbl_HexOutputFlag = HEX_OUTPUT_ASM; 77553289f6aSNate Lawson break; 77653289f6aSNate Lawson 77753289f6aSNate Lawson case 'c': 77853289f6aSNate Lawson Gbl_HexOutputFlag = HEX_OUTPUT_C; 77953289f6aSNate Lawson break; 78053289f6aSNate Lawson 7813f5e024cSJung-uk Kim case 's': 7823f5e024cSJung-uk Kim Gbl_HexOutputFlag = HEX_OUTPUT_ASL; 7833f5e024cSJung-uk Kim break; 7843f5e024cSJung-uk Kim 78553289f6aSNate Lawson default: 78653289f6aSNate Lawson printf ("Unknown option: -t%s\n", AcpiGbl_Optarg); 787d6dd1baeSJung-uk Kim return (-1); 78853289f6aSNate Lawson } 78953289f6aSNate Lawson break; 79053289f6aSNate Lawson 79153289f6aSNate Lawson 792a88e22b7SJung-uk Kim case 'T': 793a88e22b7SJung-uk Kim Gbl_DoTemplates = TRUE; 794a88e22b7SJung-uk Kim Gbl_TemplateSignature = AcpiGbl_Optarg; 795a88e22b7SJung-uk Kim break; 796a88e22b7SJung-uk Kim 797a88e22b7SJung-uk Kim 79853289f6aSNate Lawson case 'v': 79953289f6aSNate Lawson 80053289f6aSNate Lawson switch (AcpiGbl_Optarg[0]) 80153289f6aSNate Lawson { 802a9f12690SJung-uk Kim case 'a': 803a9f12690SJung-uk Kim /* Disable All error/warning messages */ 804a9f12690SJung-uk Kim 805a9f12690SJung-uk Kim Gbl_NoErrors = TRUE; 806a9f12690SJung-uk Kim break; 807a9f12690SJung-uk Kim 80853289f6aSNate Lawson case 'i': 80953289f6aSNate Lawson /* Less verbose error messages */ 81053289f6aSNate Lawson 81153289f6aSNate Lawson Gbl_VerboseErrors = FALSE; 81253289f6aSNate Lawson break; 81353289f6aSNate Lawson 81453289f6aSNate Lawson case 'o': 81553289f6aSNate Lawson Gbl_DisplayOptimizations = TRUE; 81653289f6aSNate Lawson break; 81753289f6aSNate Lawson 81853289f6aSNate Lawson case 'r': 81953289f6aSNate Lawson Gbl_DisplayRemarks = FALSE; 82053289f6aSNate Lawson break; 82153289f6aSNate Lawson 82253289f6aSNate Lawson case 's': 823a9f12690SJung-uk Kim Gbl_DoSignon = FALSE; 82453289f6aSNate Lawson break; 82553289f6aSNate Lawson 826a88e22b7SJung-uk Kim case 't': 827a88e22b7SJung-uk Kim Gbl_VerboseTemplates = TRUE; 828a88e22b7SJung-uk Kim break; 829a88e22b7SJung-uk Kim 83053289f6aSNate Lawson default: 83153289f6aSNate Lawson printf ("Unknown option: -v%s\n", AcpiGbl_Optarg); 832d6dd1baeSJung-uk Kim return (-1); 83353289f6aSNate Lawson } 83453289f6aSNate Lawson break; 83553289f6aSNate Lawson 83653289f6aSNate Lawson 8371a39cfb0SJung-uk Kim case 'w': /* Set warning levels */ 8381a39cfb0SJung-uk Kim 8391a39cfb0SJung-uk Kim switch (AcpiGbl_Optarg[0]) 8401a39cfb0SJung-uk Kim { 8411a39cfb0SJung-uk Kim case '1': 8421a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING; 8431a39cfb0SJung-uk Kim break; 8441a39cfb0SJung-uk Kim 8451a39cfb0SJung-uk Kim case '2': 8461a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING2; 8471a39cfb0SJung-uk Kim break; 8481a39cfb0SJung-uk Kim 8491a39cfb0SJung-uk Kim case '3': 8501a39cfb0SJung-uk Kim Gbl_WarningLevel = ASL_WARNING3; 8511a39cfb0SJung-uk Kim break; 8521a39cfb0SJung-uk Kim 8531a39cfb0SJung-uk Kim default: 8541a39cfb0SJung-uk Kim printf ("Unknown option: -w%s\n", AcpiGbl_Optarg); 855d6dd1baeSJung-uk Kim return (-1); 8561a39cfb0SJung-uk Kim } 8571a39cfb0SJung-uk Kim break; 8581a39cfb0SJung-uk Kim 8591a39cfb0SJung-uk Kim 86053289f6aSNate Lawson case 'x': 86153289f6aSNate Lawson 86253289f6aSNate Lawson AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16); 86353289f6aSNate Lawson break; 86453289f6aSNate Lawson 86553289f6aSNate Lawson 866a88e22b7SJung-uk Kim case 'z': 867a88e22b7SJung-uk Kim 868a88e22b7SJung-uk Kim Gbl_UseOriginalCompilerId = TRUE; 869a88e22b7SJung-uk Kim break; 870a88e22b7SJung-uk Kim 871a88e22b7SJung-uk Kim 87253289f6aSNate Lawson default: 87353289f6aSNate Lawson 874d6dd1baeSJung-uk Kim return (-1); 87553289f6aSNate Lawson } 87653289f6aSNate Lawson 877d6dd1baeSJung-uk Kim return (0); 878d6dd1baeSJung-uk Kim } 879d6dd1baeSJung-uk Kim 880d6dd1baeSJung-uk Kim 881d6dd1baeSJung-uk Kim /******************************************************************************* 882d6dd1baeSJung-uk Kim * 883d6dd1baeSJung-uk Kim * FUNCTION: AslCommandLine 884d6dd1baeSJung-uk Kim * 885d6dd1baeSJung-uk Kim * PARAMETERS: argc/argv 886d6dd1baeSJung-uk Kim * 887d6dd1baeSJung-uk Kim * RETURN: Last argv index 888d6dd1baeSJung-uk Kim * 889d6dd1baeSJung-uk Kim * DESCRIPTION: Command line processing 890d6dd1baeSJung-uk Kim * 891d6dd1baeSJung-uk Kim ******************************************************************************/ 892d6dd1baeSJung-uk Kim 893d6dd1baeSJung-uk Kim static int 894d6dd1baeSJung-uk Kim AslCommandLine ( 895d6dd1baeSJung-uk Kim int argc, 896d6dd1baeSJung-uk Kim char **argv) 897d6dd1baeSJung-uk Kim { 898d6dd1baeSJung-uk Kim int BadCommandLine = 0; 899*42fecd12SJung-uk Kim ACPI_STATUS Status; 900d6dd1baeSJung-uk Kim 901d6dd1baeSJung-uk Kim 902d6dd1baeSJung-uk Kim /* Minimum command line contains at least the command and an input file */ 903d6dd1baeSJung-uk Kim 904d6dd1baeSJung-uk Kim if (argc < 2) 905d6dd1baeSJung-uk Kim { 906d6dd1baeSJung-uk Kim AslCompilerSignon (ASL_FILE_STDOUT); 907d6dd1baeSJung-uk Kim Usage (); 908d6dd1baeSJung-uk Kim exit (1); 909d6dd1baeSJung-uk Kim } 910d6dd1baeSJung-uk Kim 911d6dd1baeSJung-uk Kim /* Process all command line options */ 912d6dd1baeSJung-uk Kim 913d6dd1baeSJung-uk Kim BadCommandLine = AslDoOptions (argc, argv, FALSE); 914d6dd1baeSJung-uk Kim 915a88e22b7SJung-uk Kim if (Gbl_DoTemplates) 916a88e22b7SJung-uk Kim { 917*42fecd12SJung-uk Kim Status = DtCreateTemplates (Gbl_TemplateSignature); 918*42fecd12SJung-uk Kim if (ACPI_FAILURE (Status)) 919*42fecd12SJung-uk Kim { 920*42fecd12SJung-uk Kim exit (-1); 921*42fecd12SJung-uk Kim } 922a88e22b7SJung-uk Kim exit (1); 923a88e22b7SJung-uk Kim } 924a88e22b7SJung-uk Kim 92553289f6aSNate Lawson /* Next parameter must be the input filename */ 92653289f6aSNate Lawson 927a9f12690SJung-uk Kim if (!argv[AcpiGbl_Optind] && 928fba7fc7eSJung-uk Kim !Gbl_DisasmFlag && 929fba7fc7eSJung-uk Kim !Gbl_GetAllTables) 93053289f6aSNate Lawson { 93153289f6aSNate Lawson printf ("Missing input filename\n"); 93253289f6aSNate Lawson BadCommandLine = TRUE; 93353289f6aSNate Lawson } 93453289f6aSNate Lawson 935a9f12690SJung-uk Kim if (Gbl_DoSignon) 93653289f6aSNate Lawson { 93753289f6aSNate Lawson AslCompilerSignon (ASL_FILE_STDOUT); 93853289f6aSNate Lawson } 93953289f6aSNate Lawson 94053289f6aSNate Lawson /* Abort if anything went wrong on the command line */ 94153289f6aSNate Lawson 94253289f6aSNate Lawson if (BadCommandLine) 94353289f6aSNate Lawson { 94453289f6aSNate Lawson printf ("\n"); 94553289f6aSNate Lawson Usage (); 94653289f6aSNate Lawson exit (1); 94753289f6aSNate Lawson } 94853289f6aSNate Lawson 949a9f12690SJung-uk Kim return (AcpiGbl_Optind); 95053289f6aSNate Lawson } 95153289f6aSNate Lawson 95253289f6aSNate Lawson 95353289f6aSNate Lawson /******************************************************************************* 95453289f6aSNate Lawson * 95553289f6aSNate Lawson * FUNCTION: main 95653289f6aSNate Lawson * 95753289f6aSNate Lawson * PARAMETERS: Standard argc/argv 95853289f6aSNate Lawson * 95953289f6aSNate Lawson * RETURN: Program termination code 96053289f6aSNate Lawson * 96153289f6aSNate Lawson * DESCRIPTION: C main routine for the Asl Compiler. Handle command line 962a9f12690SJung-uk Kim * options and begin the compile for each file on the command line 96353289f6aSNate Lawson * 96453289f6aSNate Lawson ******************************************************************************/ 96553289f6aSNate Lawson 96653289f6aSNate Lawson int ACPI_SYSTEM_XFACE 96753289f6aSNate Lawson main ( 96853289f6aSNate Lawson int argc, 96953289f6aSNate Lawson char **argv) 97053289f6aSNate Lawson { 97153289f6aSNate Lawson ACPI_STATUS Status; 972709fac06SJung-uk Kim int Index1; 973709fac06SJung-uk Kim int Index2; 97453289f6aSNate Lawson 97553289f6aSNate Lawson 976709fac06SJung-uk Kim AcpiGbl_ExternalFileList = NULL; 977709fac06SJung-uk Kim 978fba7fc7eSJung-uk Kim #ifdef _DEBUG 979fba7fc7eSJung-uk Kim _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF | 980fba7fc7eSJung-uk Kim _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); 981fba7fc7eSJung-uk Kim #endif 982fba7fc7eSJung-uk Kim 98353289f6aSNate Lawson /* Init and command line */ 98453289f6aSNate Lawson 98553289f6aSNate Lawson AslInitialize (); 986709fac06SJung-uk Kim Index1 = Index2 = AslCommandLine (argc, argv); 98753289f6aSNate Lawson 988a9f12690SJung-uk Kim /* Options that have no additional parameters or pathnames */ 989a9f12690SJung-uk Kim 990a9f12690SJung-uk Kim if (Gbl_GetAllTables) 991a9f12690SJung-uk Kim { 992a9f12690SJung-uk Kim Status = AslDoOneFile (NULL); 993fba7fc7eSJung-uk Kim if (ACPI_FAILURE (Status)) 994fba7fc7eSJung-uk Kim { 995a9f12690SJung-uk Kim return (-1); 996a9f12690SJung-uk Kim } 997a9f12690SJung-uk Kim return (0); 998fba7fc7eSJung-uk Kim } 99953289f6aSNate Lawson 1000709fac06SJung-uk Kim if (Gbl_DisassembleAll) 100153289f6aSNate Lawson { 1002709fac06SJung-uk Kim while (argv[Index1]) 1003709fac06SJung-uk Kim { 1004709fac06SJung-uk Kim Status = AslDoOnePathname (argv[Index1], AcpiDmAddToExternalFileList); 100553289f6aSNate Lawson if (ACPI_FAILURE (Status)) 100653289f6aSNate Lawson { 1007a9f12690SJung-uk Kim return (-1); 100853289f6aSNate Lawson } 100953289f6aSNate Lawson 1010709fac06SJung-uk Kim Index1++; 1011709fac06SJung-uk Kim } 1012709fac06SJung-uk Kim } 1013709fac06SJung-uk Kim 1014709fac06SJung-uk Kim /* Process each pathname/filename in the list, with possible wildcards */ 1015709fac06SJung-uk Kim 1016709fac06SJung-uk Kim while (argv[Index2]) 1017709fac06SJung-uk Kim { 1018709fac06SJung-uk Kim Status = AslDoOnePathname (argv[Index2], AslDoOneFile); 1019709fac06SJung-uk Kim if (ACPI_FAILURE (Status)) 1020709fac06SJung-uk Kim { 1021709fac06SJung-uk Kim return (-1); 1022709fac06SJung-uk Kim } 1023709fac06SJung-uk Kim 1024709fac06SJung-uk Kim Index2++; 1025709fac06SJung-uk Kim } 1026709fac06SJung-uk Kim 1027709fac06SJung-uk Kim if (AcpiGbl_ExternalFileList) 1028709fac06SJung-uk Kim { 1029709fac06SJung-uk Kim AcpiDmClearExternalFileList(); 103053289f6aSNate Lawson } 103153289f6aSNate Lawson 103253289f6aSNate Lawson return (0); 103353289f6aSNate Lawson } 103453289f6aSNate Lawson 103553289f6aSNate Lawson 1036