xref: /freebsd/sys/contrib/dev/acpica/compiler/aslstartup.c (revision ab6f3bf9cb8ad195aecd9165d8d4b1a93aed3c8d)
1a9f12690SJung-uk Kim 
2a9f12690SJung-uk Kim /******************************************************************************
3a9f12690SJung-uk Kim  *
4a9f12690SJung-uk Kim  * Module Name: aslstartup - Compiler startup routines, called from main
5a9f12690SJung-uk Kim  *
6a9f12690SJung-uk Kim  *****************************************************************************/
7a9f12690SJung-uk Kim 
8a9f12690SJung-uk Kim /******************************************************************************
9a9f12690SJung-uk Kim  *
10a9f12690SJung-uk Kim  * 1. Copyright Notice
11a9f12690SJung-uk Kim  *
12a9f12690SJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
13a9f12690SJung-uk Kim  * All rights reserved.
14a9f12690SJung-uk Kim  *
15a9f12690SJung-uk Kim  * 2. License
16a9f12690SJung-uk Kim  *
17a9f12690SJung-uk Kim  * 2.1. This is your license from Intel Corp. under its intellectual property
18a9f12690SJung-uk Kim  * rights.  You may have additional license terms from the party that provided
19a9f12690SJung-uk Kim  * you this software, covering your right to use that party's intellectual
20a9f12690SJung-uk Kim  * property rights.
21a9f12690SJung-uk Kim  *
22a9f12690SJung-uk Kim  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
23a9f12690SJung-uk Kim  * copy of the source code appearing in this file ("Covered Code") an
24a9f12690SJung-uk Kim  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
25a9f12690SJung-uk Kim  * base code distributed originally by Intel ("Original Intel Code") to copy,
26a9f12690SJung-uk Kim  * make derivatives, distribute, use and display any portion of the Covered
27a9f12690SJung-uk Kim  * Code in any form, with the right to sublicense such rights; and
28a9f12690SJung-uk Kim  *
29a9f12690SJung-uk Kim  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
30a9f12690SJung-uk Kim  * license (with the right to sublicense), under only those claims of Intel
31a9f12690SJung-uk Kim  * patents that are infringed by the Original Intel Code, to make, use, sell,
32a9f12690SJung-uk Kim  * offer to sell, and import the Covered Code and derivative works thereof
33a9f12690SJung-uk Kim  * solely to the minimum extent necessary to exercise the above copyright
34a9f12690SJung-uk Kim  * license, and in no event shall the patent license extend to any additions
35a9f12690SJung-uk Kim  * to or modifications of the Original Intel Code.  No other license or right
36a9f12690SJung-uk Kim  * is granted directly or by implication, estoppel or otherwise;
37a9f12690SJung-uk Kim  *
38a9f12690SJung-uk Kim  * The above copyright and patent license is granted only if the following
39a9f12690SJung-uk Kim  * conditions are met:
40a9f12690SJung-uk Kim  *
41a9f12690SJung-uk Kim  * 3. Conditions
42a9f12690SJung-uk Kim  *
43a9f12690SJung-uk Kim  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
44a9f12690SJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
45a9f12690SJung-uk Kim  * Code or modification with rights to further distribute source must include
46a9f12690SJung-uk Kim  * the above Copyright Notice, the above License, this list of Conditions,
47a9f12690SJung-uk Kim  * and the following Disclaimer and Export Compliance provision.  In addition,
48a9f12690SJung-uk Kim  * Licensee must cause all Covered Code to which Licensee contributes to
49a9f12690SJung-uk Kim  * contain a file documenting the changes Licensee made to create that Covered
50a9f12690SJung-uk Kim  * Code and the date of any change.  Licensee must include in that file the
51a9f12690SJung-uk Kim  * documentation of any changes made by any predecessor Licensee.  Licensee
52a9f12690SJung-uk Kim  * must include a prominent statement that the modification is derived,
53a9f12690SJung-uk Kim  * directly or indirectly, from Original Intel Code.
54a9f12690SJung-uk Kim  *
55a9f12690SJung-uk Kim  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
56a9f12690SJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
57a9f12690SJung-uk Kim  * Code or modification without rights to further distribute source must
58a9f12690SJung-uk Kim  * include the following Disclaimer and Export Compliance provision in the
59a9f12690SJung-uk Kim  * documentation and/or other materials provided with distribution.  In
60a9f12690SJung-uk Kim  * addition, Licensee may not authorize further sublicense of source of any
61a9f12690SJung-uk Kim  * portion of the Covered Code, and must include terms to the effect that the
62a9f12690SJung-uk Kim  * license from Licensee to its licensee is limited to the intellectual
63a9f12690SJung-uk Kim  * property embodied in the software Licensee provides to its licensee, and
64a9f12690SJung-uk Kim  * not to intellectual property embodied in modifications its licensee may
65a9f12690SJung-uk Kim  * make.
66a9f12690SJung-uk Kim  *
67a9f12690SJung-uk Kim  * 3.3. Redistribution of Executable. Redistribution in executable form of any
68a9f12690SJung-uk Kim  * substantial portion of the Covered Code or modification must reproduce the
69a9f12690SJung-uk Kim  * above Copyright Notice, and the following Disclaimer and Export Compliance
70a9f12690SJung-uk Kim  * provision in the documentation and/or other materials provided with the
71a9f12690SJung-uk Kim  * distribution.
72a9f12690SJung-uk Kim  *
73a9f12690SJung-uk Kim  * 3.4. Intel retains all right, title, and interest in and to the Original
74a9f12690SJung-uk Kim  * Intel Code.
75a9f12690SJung-uk Kim  *
76a9f12690SJung-uk Kim  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
77a9f12690SJung-uk Kim  * Intel shall be used in advertising or otherwise to promote the sale, use or
78a9f12690SJung-uk Kim  * other dealings in products derived from or relating to the Covered Code
79a9f12690SJung-uk Kim  * without prior written authorization from Intel.
80a9f12690SJung-uk Kim  *
81a9f12690SJung-uk Kim  * 4. Disclaimer and Export Compliance
82a9f12690SJung-uk Kim  *
83a9f12690SJung-uk Kim  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
84a9f12690SJung-uk Kim  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
85a9f12690SJung-uk Kim  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
86a9f12690SJung-uk Kim  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
87a9f12690SJung-uk Kim  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
88a9f12690SJung-uk Kim  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
89a9f12690SJung-uk Kim  * PARTICULAR PURPOSE.
90a9f12690SJung-uk Kim  *
91a9f12690SJung-uk Kim  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
92a9f12690SJung-uk Kim  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
93a9f12690SJung-uk Kim  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
94a9f12690SJung-uk Kim  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
95a9f12690SJung-uk Kim  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
96a9f12690SJung-uk Kim  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
97a9f12690SJung-uk Kim  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
98a9f12690SJung-uk Kim  * LIMITED REMEDY.
99a9f12690SJung-uk Kim  *
100a9f12690SJung-uk Kim  * 4.3. Licensee shall not export, either directly or indirectly, any of this
101a9f12690SJung-uk Kim  * software or system incorporating such software without first obtaining any
102a9f12690SJung-uk Kim  * required license or other approval from the U. S. Department of Commerce or
103a9f12690SJung-uk Kim  * any other agency or department of the United States Government.  In the
104a9f12690SJung-uk Kim  * event Licensee exports any such software from the United States or
105a9f12690SJung-uk Kim  * re-exports any such software from a foreign destination, Licensee shall
106a9f12690SJung-uk Kim  * ensure that the distribution and export/re-export of the software is in
107a9f12690SJung-uk Kim  * compliance with all laws, regulations, orders, or other restrictions of the
108a9f12690SJung-uk Kim  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
109a9f12690SJung-uk Kim  * any of its subsidiaries will export/re-export any technical data, process,
110a9f12690SJung-uk Kim  * software, or service, directly or indirectly, to any country for which the
111a9f12690SJung-uk Kim  * United States government or any agency thereof requires an export license,
112a9f12690SJung-uk Kim  * other governmental approval, or letter of assurance, without first obtaining
113a9f12690SJung-uk Kim  * such license, approval or letter.
114a9f12690SJung-uk Kim  *
115a9f12690SJung-uk Kim  *****************************************************************************/
116a9f12690SJung-uk Kim 
117a9f12690SJung-uk Kim 
118ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h>
119ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/actables.h>
120ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acapps.h>
121a9f12690SJung-uk Kim 
122a9f12690SJung-uk Kim #define _COMPONENT          ACPI_COMPILER
123a9f12690SJung-uk Kim         ACPI_MODULE_NAME    ("aslstartup")
124a9f12690SJung-uk Kim 
125a9f12690SJung-uk Kim 
126a9f12690SJung-uk Kim #define ASL_MAX_FILES   256
127a9f12690SJung-uk Kim char                    *FileList[ASL_MAX_FILES];
128a9f12690SJung-uk Kim int                     FileCount;
129a9f12690SJung-uk Kim BOOLEAN                 AslToFile = TRUE;
130a9f12690SJung-uk Kim 
131a9f12690SJung-uk Kim 
132a9f12690SJung-uk Kim /* Local prototypes */
133a9f12690SJung-uk Kim 
134a9f12690SJung-uk Kim static void
135a9f12690SJung-uk Kim AslInitializeGlobals (
136a9f12690SJung-uk Kim     void);
137a9f12690SJung-uk Kim 
138a9f12690SJung-uk Kim static char **
139a9f12690SJung-uk Kim AsDoWildcard (
140a9f12690SJung-uk Kim     char                    *DirectoryPathname,
141a9f12690SJung-uk Kim     char                    *FileSpecifier);
142a9f12690SJung-uk Kim 
143a9f12690SJung-uk Kim 
144a9f12690SJung-uk Kim /*******************************************************************************
145a9f12690SJung-uk Kim  *
146a9f12690SJung-uk Kim  * FUNCTION:    AslInitializeGlobals
147a9f12690SJung-uk Kim  *
148a9f12690SJung-uk Kim  * PARAMETERS:  None
149a9f12690SJung-uk Kim  *
150a9f12690SJung-uk Kim  * RETURN:      None
151a9f12690SJung-uk Kim  *
152a9f12690SJung-uk Kim  * DESCRIPTION: Re-initialize globals needed to restart the compiler. This
153a9f12690SJung-uk Kim  *              allows multiple files to be disassembled and/or compiled.
154a9f12690SJung-uk Kim  *
155a9f12690SJung-uk Kim  ******************************************************************************/
156a9f12690SJung-uk Kim 
157a9f12690SJung-uk Kim static void
158a9f12690SJung-uk Kim AslInitializeGlobals (
159a9f12690SJung-uk Kim     void)
160a9f12690SJung-uk Kim {
161a9f12690SJung-uk Kim     UINT32                  i;
162a9f12690SJung-uk Kim 
163a9f12690SJung-uk Kim 
164a9f12690SJung-uk Kim     /* Init compiler globals */
165a9f12690SJung-uk Kim 
166a9f12690SJung-uk Kim     Gbl_CurrentColumn = 0;
167a9f12690SJung-uk Kim     Gbl_CurrentLineNumber = 1;
168a9f12690SJung-uk Kim     Gbl_LogicalLineNumber = 1;
169a9f12690SJung-uk Kim     Gbl_CurrentLineOffset = 0;
170a9f12690SJung-uk Kim     Gbl_LineBufPtr = Gbl_CurrentLineBuffer;
171a9f12690SJung-uk Kim 
172a9f12690SJung-uk Kim     Gbl_ErrorLog = NULL;
173a9f12690SJung-uk Kim     Gbl_NextError = NULL;
174a9f12690SJung-uk Kim 
175a9f12690SJung-uk Kim     AslGbl_NextEvent = 0;
176a9f12690SJung-uk Kim     for (i = 0; i < ASL_NUM_REPORT_LEVELS; i++)
177a9f12690SJung-uk Kim     {
178a9f12690SJung-uk Kim         Gbl_ExceptionCount[i] = 0;
179a9f12690SJung-uk Kim     }
180a9f12690SJung-uk Kim 
181a9f12690SJung-uk Kim     Gbl_Files[ASL_FILE_AML_OUTPUT].Filename = NULL;
182a9f12690SJung-uk Kim }
183a9f12690SJung-uk Kim 
184a9f12690SJung-uk Kim 
185a9f12690SJung-uk Kim /******************************************************************************
186a9f12690SJung-uk Kim  *
187a9f12690SJung-uk Kim  * FUNCTION:    AsDoWildcard
188a9f12690SJung-uk Kim  *
189a9f12690SJung-uk Kim  * PARAMETERS:  None
190a9f12690SJung-uk Kim  *
191a9f12690SJung-uk Kim  * RETURN:      None
192a9f12690SJung-uk Kim  *
193a9f12690SJung-uk Kim  * DESCRIPTION: Process files via wildcards. This function is for the Windows
194a9f12690SJung-uk Kim  *              case only.
195a9f12690SJung-uk Kim  *
196a9f12690SJung-uk Kim  ******************************************************************************/
197a9f12690SJung-uk Kim 
198a9f12690SJung-uk Kim static char **
199a9f12690SJung-uk Kim AsDoWildcard (
200a9f12690SJung-uk Kim     char                    *DirectoryPathname,
201a9f12690SJung-uk Kim     char                    *FileSpecifier)
202a9f12690SJung-uk Kim {
203a9f12690SJung-uk Kim #ifdef WIN32
204a9f12690SJung-uk Kim     void                    *DirInfo;
205a9f12690SJung-uk Kim     char                    *Filename;
206a9f12690SJung-uk Kim 
207a9f12690SJung-uk Kim 
208a9f12690SJung-uk Kim     FileCount = 0;
209a9f12690SJung-uk Kim 
210a9f12690SJung-uk Kim     /* Open parent directory */
211a9f12690SJung-uk Kim 
212a9f12690SJung-uk Kim     DirInfo = AcpiOsOpenDirectory (DirectoryPathname, FileSpecifier, REQUEST_FILE_ONLY);
213a9f12690SJung-uk Kim     if (!DirInfo)
214a9f12690SJung-uk Kim     {
215a9f12690SJung-uk Kim         /* Either the directory of file does not exist */
216a9f12690SJung-uk Kim 
217a9f12690SJung-uk Kim         Gbl_Files[ASL_FILE_INPUT].Filename = FileSpecifier;
218a9f12690SJung-uk Kim         FlFileError (ASL_FILE_INPUT, ASL_MSG_OPEN);
219a9f12690SJung-uk Kim         AslAbort ();
220a9f12690SJung-uk Kim     }
221a9f12690SJung-uk Kim 
222a9f12690SJung-uk Kim     /* Process each file that matches the wildcard specification */
223a9f12690SJung-uk Kim 
224a9f12690SJung-uk Kim     while ((Filename = AcpiOsGetNextFilename (DirInfo)))
225a9f12690SJung-uk Kim     {
226a9f12690SJung-uk Kim         /* Add the filename to the file list */
227a9f12690SJung-uk Kim 
228a9f12690SJung-uk Kim         FileList[FileCount] = AcpiOsAllocate (strlen (Filename) + 1);
229a9f12690SJung-uk Kim         strcpy (FileList[FileCount], Filename);
230a9f12690SJung-uk Kim         FileCount++;
231a9f12690SJung-uk Kim 
232a9f12690SJung-uk Kim         if (FileCount >= ASL_MAX_FILES)
233a9f12690SJung-uk Kim         {
234a9f12690SJung-uk Kim             printf ("Max files reached\n");
235a9f12690SJung-uk Kim             FileList[0] = NULL;
236a9f12690SJung-uk Kim             return (FileList);
237a9f12690SJung-uk Kim         }
238a9f12690SJung-uk Kim     }
239a9f12690SJung-uk Kim 
240a9f12690SJung-uk Kim     /* Cleanup */
241a9f12690SJung-uk Kim 
242a9f12690SJung-uk Kim     AcpiOsCloseDirectory (DirInfo);
243a9f12690SJung-uk Kim     FileList[FileCount] = NULL;
244a9f12690SJung-uk Kim     return (FileList);
245a9f12690SJung-uk Kim 
246a9f12690SJung-uk Kim #else
247a9f12690SJung-uk Kim     /*
248a9f12690SJung-uk Kim      * Linux/Unix cases - Wildcards are expanded by the shell automatically.
249a9f12690SJung-uk Kim      * Just return the filename in a null terminated list
250a9f12690SJung-uk Kim      */
251a9f12690SJung-uk Kim     FileList[0] = AcpiOsAllocate (strlen (FileSpecifier) + 1);
252a9f12690SJung-uk Kim     strcpy (FileList[0], FileSpecifier);
253a9f12690SJung-uk Kim     FileList[1] = NULL;
254a9f12690SJung-uk Kim 
255a9f12690SJung-uk Kim     return (FileList);
256a9f12690SJung-uk Kim #endif
257a9f12690SJung-uk Kim }
258a9f12690SJung-uk Kim 
259a9f12690SJung-uk Kim 
260a9f12690SJung-uk Kim /*******************************************************************************
261a9f12690SJung-uk Kim  *
262a9f12690SJung-uk Kim  * FUNCTION:    AslDoOneFile
263a9f12690SJung-uk Kim  *
264a9f12690SJung-uk Kim  * PARAMETERS:  Filename        - Name of the file
265a9f12690SJung-uk Kim  *
266a9f12690SJung-uk Kim  * RETURN:      Status
267a9f12690SJung-uk Kim  *
268a9f12690SJung-uk Kim  * DESCRIPTION: Process a single file - either disassemble, compile, or both
269a9f12690SJung-uk Kim  *
270a9f12690SJung-uk Kim  ******************************************************************************/
271a9f12690SJung-uk Kim 
272a9f12690SJung-uk Kim ACPI_STATUS
273a9f12690SJung-uk Kim AslDoOneFile (
274a9f12690SJung-uk Kim     char                    *Filename)
275a9f12690SJung-uk Kim {
276a9f12690SJung-uk Kim     ACPI_STATUS             Status;
277a9f12690SJung-uk Kim 
278a9f12690SJung-uk Kim 
279a9f12690SJung-uk Kim     Gbl_Files[ASL_FILE_INPUT].Filename = Filename;
280a9f12690SJung-uk Kim 
281a9f12690SJung-uk Kim     /* Re-initialize "some" compiler globals */
282a9f12690SJung-uk Kim 
283a9f12690SJung-uk Kim     AslInitializeGlobals ();
284a9f12690SJung-uk Kim 
285a9f12690SJung-uk Kim     /*
286a9f12690SJung-uk Kim      * AML Disassembly (Optional)
287a9f12690SJung-uk Kim      */
288a9f12690SJung-uk Kim     if (Gbl_DisasmFlag || Gbl_GetAllTables)
289a9f12690SJung-uk Kim     {
290a9f12690SJung-uk Kim         /* ACPI CA subsystem initialization */
291a9f12690SJung-uk Kim 
292a9f12690SJung-uk Kim         Status = AdInitialize ();
293a9f12690SJung-uk Kim         if (ACPI_FAILURE (Status))
294a9f12690SJung-uk Kim         {
295a9f12690SJung-uk Kim             return (Status);
296a9f12690SJung-uk Kim         }
297a9f12690SJung-uk Kim 
298a9f12690SJung-uk Kim         Status = AcpiAllocateRootTable (4);
299a9f12690SJung-uk Kim         if (ACPI_FAILURE (Status))
300a9f12690SJung-uk Kim         {
301a9f12690SJung-uk Kim             AcpiOsPrintf ("Could not initialize ACPI Table Manager, %s\n",
302a9f12690SJung-uk Kim                 AcpiFormatException (Status));
303a9f12690SJung-uk Kim             return (Status);
304a9f12690SJung-uk Kim         }
305a9f12690SJung-uk Kim 
306a9f12690SJung-uk Kim         /* This is where the disassembly happens */
307a9f12690SJung-uk Kim 
308a9f12690SJung-uk Kim         AcpiGbl_DbOpt_disasm = TRUE;
309a9f12690SJung-uk Kim         Status = AdAmlDisassemble (AslToFile,
310a9f12690SJung-uk Kim                     Gbl_Files[ASL_FILE_INPUT].Filename,
311a9f12690SJung-uk Kim                     Gbl_OutputFilenamePrefix,
312a9f12690SJung-uk Kim                     &Gbl_Files[ASL_FILE_INPUT].Filename,
313a9f12690SJung-uk Kim                     Gbl_GetAllTables);
314a9f12690SJung-uk Kim         if (ACPI_FAILURE (Status))
315a9f12690SJung-uk Kim         {
316a9f12690SJung-uk Kim             return (Status);
317a9f12690SJung-uk Kim         }
318a9f12690SJung-uk Kim 
319a9f12690SJung-uk Kim         /* Shutdown compiler and ACPICA subsystem */
320a9f12690SJung-uk Kim 
321a9f12690SJung-uk Kim         AeClearErrorLog ();
322a9f12690SJung-uk Kim         AcpiTerminate ();
323a9f12690SJung-uk Kim 
324a9f12690SJung-uk Kim         /*
325a9f12690SJung-uk Kim          * Gbl_Files[ASL_FILE_INPUT].Filename was replaced with the
326a9f12690SJung-uk Kim          * .DSL disassembly file, which can now be compiled if requested
327a9f12690SJung-uk Kim          */
328a9f12690SJung-uk Kim         if (Gbl_DoCompile)
329a9f12690SJung-uk Kim         {
330a9f12690SJung-uk Kim             AcpiOsPrintf ("\nCompiling \"%s\"\n",
331a9f12690SJung-uk Kim                 Gbl_Files[ASL_FILE_INPUT].Filename);
332a9f12690SJung-uk Kim         }
333a9f12690SJung-uk Kim     }
334a9f12690SJung-uk Kim 
335a9f12690SJung-uk Kim     /*
336a9f12690SJung-uk Kim      * ASL Compilation (Optional)
337a9f12690SJung-uk Kim      */
338a9f12690SJung-uk Kim     if (Gbl_DoCompile)
339a9f12690SJung-uk Kim     {
340a9f12690SJung-uk Kim         /*
341a9f12690SJung-uk Kim          * If -p not specified, we will use the input filename as the
342a9f12690SJung-uk Kim          * output filename prefix
343a9f12690SJung-uk Kim          */
344a9f12690SJung-uk Kim         if (Gbl_UseDefaultAmlFilename)
345a9f12690SJung-uk Kim         {
346a9f12690SJung-uk Kim             Gbl_OutputFilenamePrefix = Gbl_Files[ASL_FILE_INPUT].Filename;
347a9f12690SJung-uk Kim         }
348a9f12690SJung-uk Kim 
349a9f12690SJung-uk Kim         /* ACPI CA subsystem initialization (Must be re-initialized) */
350a9f12690SJung-uk Kim 
351a9f12690SJung-uk Kim         Status = AdInitialize ();
352a9f12690SJung-uk Kim         if (ACPI_FAILURE (Status))
353a9f12690SJung-uk Kim         {
354a9f12690SJung-uk Kim             return (Status);
355a9f12690SJung-uk Kim         }
356a9f12690SJung-uk Kim 
357a9f12690SJung-uk Kim         Status = CmDoCompile ();
358a9f12690SJung-uk Kim         AcpiTerminate ();
359a9f12690SJung-uk Kim 
360a9f12690SJung-uk Kim         /*
361a9f12690SJung-uk Kim          * Return non-zero exit code if there have been errors, unless the
362a9f12690SJung-uk Kim          * global ignore error flag has been set
363a9f12690SJung-uk Kim          */
364a9f12690SJung-uk Kim         if ((Gbl_ExceptionCount[ASL_ERROR] > 0) && (!Gbl_IgnoreErrors))
365a9f12690SJung-uk Kim         {
366a9f12690SJung-uk Kim             return (AE_ERROR);
367a9f12690SJung-uk Kim         }
368a9f12690SJung-uk Kim 
369a9f12690SJung-uk Kim         AeClearErrorLog ();
370a9f12690SJung-uk Kim     }
371a9f12690SJung-uk Kim 
372a9f12690SJung-uk Kim     return (AE_OK);
373a9f12690SJung-uk Kim }
374a9f12690SJung-uk Kim 
375a9f12690SJung-uk Kim 
376a9f12690SJung-uk Kim /*******************************************************************************
377a9f12690SJung-uk Kim  *
378a9f12690SJung-uk Kim  * FUNCTION:    AslDoOnePathname
379a9f12690SJung-uk Kim  *
380a9f12690SJung-uk Kim  * PARAMETERS:  Pathname            - Full pathname, possibly with wildcards
381a9f12690SJung-uk Kim  *
382a9f12690SJung-uk Kim  * RETURN:      Status
383a9f12690SJung-uk Kim  *
384a9f12690SJung-uk Kim  * DESCRIPTION: Process one pathname, possible terminated with a wildcard
385a9f12690SJung-uk Kim  *              specification. If a wildcard, it is expanded and the multiple
386a9f12690SJung-uk Kim  *              files are processed.
387a9f12690SJung-uk Kim  *
388a9f12690SJung-uk Kim  ******************************************************************************/
389a9f12690SJung-uk Kim 
390a9f12690SJung-uk Kim ACPI_STATUS
391a9f12690SJung-uk Kim AslDoOnePathname (
392a9f12690SJung-uk Kim     char                    *Pathname)
393a9f12690SJung-uk Kim {
394a9f12690SJung-uk Kim     ACPI_STATUS             Status;
395a9f12690SJung-uk Kim     char                    **FileList;
396a9f12690SJung-uk Kim     char                    *Filename;
397a9f12690SJung-uk Kim     char                    *FullPathname;
398a9f12690SJung-uk Kim 
399a9f12690SJung-uk Kim 
400a9f12690SJung-uk Kim     /* Split incoming path into a directory/filename combo */
401a9f12690SJung-uk Kim 
402a9f12690SJung-uk Kim     Status = FlSplitInputPathname (Pathname, &Gbl_DirectoryPath, &Filename);
403a9f12690SJung-uk Kim     if (ACPI_FAILURE (Status))
404a9f12690SJung-uk Kim     {
405a9f12690SJung-uk Kim         return (Status);
406a9f12690SJung-uk Kim     }
407a9f12690SJung-uk Kim 
408a9f12690SJung-uk Kim     /* Expand possible wildcard into a file list (Windows/DOS only) */
409a9f12690SJung-uk Kim 
410a9f12690SJung-uk Kim     FileList = AsDoWildcard (Gbl_DirectoryPath, Filename);
411a9f12690SJung-uk Kim     while (*FileList)
412a9f12690SJung-uk Kim     {
413a9f12690SJung-uk Kim         FullPathname = ACPI_ALLOCATE (
414a9f12690SJung-uk Kim             strlen (Gbl_DirectoryPath) + strlen (*FileList) + 1);
415a9f12690SJung-uk Kim 
416a9f12690SJung-uk Kim         /* Construct a full path to the file */
417a9f12690SJung-uk Kim 
418a9f12690SJung-uk Kim         strcpy (FullPathname, Gbl_DirectoryPath);
419a9f12690SJung-uk Kim         strcat (FullPathname, *FileList);
420a9f12690SJung-uk Kim 
421a9f12690SJung-uk Kim         /*
422a9f12690SJung-uk Kim          * If -p not specified, we will use the input filename as the
423a9f12690SJung-uk Kim          * output filename prefix
424a9f12690SJung-uk Kim          */
425a9f12690SJung-uk Kim         if (Gbl_UseDefaultAmlFilename)
426a9f12690SJung-uk Kim         {
427a9f12690SJung-uk Kim             Gbl_OutputFilenamePrefix = FullPathname;
428a9f12690SJung-uk Kim         }
429a9f12690SJung-uk Kim 
430a9f12690SJung-uk Kim         Status = AslDoOneFile (FullPathname);
431a9f12690SJung-uk Kim         if (ACPI_FAILURE (Status))
432a9f12690SJung-uk Kim         {
433a9f12690SJung-uk Kim             return (Status);
434a9f12690SJung-uk Kim         }
435a9f12690SJung-uk Kim 
436a9f12690SJung-uk Kim         ACPI_FREE (FullPathname);
437a9f12690SJung-uk Kim         ACPI_FREE (*FileList);
438a9f12690SJung-uk Kim         *FileList = NULL;
439a9f12690SJung-uk Kim         FileList++;
440a9f12690SJung-uk Kim     }
441a9f12690SJung-uk Kim 
442a9f12690SJung-uk Kim     ACPI_FREE (Gbl_DirectoryPath);
443a9f12690SJung-uk Kim     ACPI_FREE (Filename);
444a9f12690SJung-uk Kim     return (AE_OK);
445a9f12690SJung-uk Kim }
446a9f12690SJung-uk Kim 
447