xref: /freebsd/sys/contrib/dev/acpica/compiler/asllisting.c (revision 58308fadece25ae4c12bd2f4dce3d73d9c23be43)
153289f6aSNate Lawson /******************************************************************************
253289f6aSNate Lawson  *
353289f6aSNate Lawson  * Module Name: asllisting - Listing file generation
453289f6aSNate Lawson  *
553289f6aSNate Lawson  *****************************************************************************/
653289f6aSNate Lawson 
70d84335fSJung-uk Kim /******************************************************************************
80d84335fSJung-uk Kim  *
90d84335fSJung-uk Kim  * 1. Copyright Notice
100d84335fSJung-uk Kim  *
11*58308fadSJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.
1253289f6aSNate Lawson  * All rights reserved.
1353289f6aSNate Lawson  *
140d84335fSJung-uk Kim  * 2. License
150d84335fSJung-uk Kim  *
160d84335fSJung-uk Kim  * 2.1. This is your license from Intel Corp. under its intellectual property
170d84335fSJung-uk Kim  * rights. You may have additional license terms from the party that provided
180d84335fSJung-uk Kim  * you this software, covering your right to use that party's intellectual
190d84335fSJung-uk Kim  * property rights.
200d84335fSJung-uk Kim  *
210d84335fSJung-uk Kim  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
220d84335fSJung-uk Kim  * copy of the source code appearing in this file ("Covered Code") an
230d84335fSJung-uk Kim  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
240d84335fSJung-uk Kim  * base code distributed originally by Intel ("Original Intel Code") to copy,
250d84335fSJung-uk Kim  * make derivatives, distribute, use and display any portion of the Covered
260d84335fSJung-uk Kim  * Code in any form, with the right to sublicense such rights; and
270d84335fSJung-uk Kim  *
280d84335fSJung-uk Kim  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
290d84335fSJung-uk Kim  * license (with the right to sublicense), under only those claims of Intel
300d84335fSJung-uk Kim  * patents that are infringed by the Original Intel Code, to make, use, sell,
310d84335fSJung-uk Kim  * offer to sell, and import the Covered Code and derivative works thereof
320d84335fSJung-uk Kim  * solely to the minimum extent necessary to exercise the above copyright
330d84335fSJung-uk Kim  * license, and in no event shall the patent license extend to any additions
340d84335fSJung-uk Kim  * to or modifications of the Original Intel Code. No other license or right
350d84335fSJung-uk Kim  * is granted directly or by implication, estoppel or otherwise;
360d84335fSJung-uk Kim  *
370d84335fSJung-uk Kim  * The above copyright and patent license is granted only if the following
380d84335fSJung-uk Kim  * conditions are met:
390d84335fSJung-uk Kim  *
400d84335fSJung-uk Kim  * 3. Conditions
410d84335fSJung-uk Kim  *
420d84335fSJung-uk Kim  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
430d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
440d84335fSJung-uk Kim  * Code or modification with rights to further distribute source must include
450d84335fSJung-uk Kim  * the above Copyright Notice, the above License, this list of Conditions,
460d84335fSJung-uk Kim  * and the following Disclaimer and Export Compliance provision. In addition,
470d84335fSJung-uk Kim  * Licensee must cause all Covered Code to which Licensee contributes to
480d84335fSJung-uk Kim  * contain a file documenting the changes Licensee made to create that Covered
490d84335fSJung-uk Kim  * Code and the date of any change. Licensee must include in that file the
500d84335fSJung-uk Kim  * documentation of any changes made by any predecessor Licensee. Licensee
510d84335fSJung-uk Kim  * must include a prominent statement that the modification is derived,
520d84335fSJung-uk Kim  * directly or indirectly, from Original Intel Code.
530d84335fSJung-uk Kim  *
540d84335fSJung-uk Kim  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
550d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
560d84335fSJung-uk Kim  * Code or modification without rights to further distribute source must
570d84335fSJung-uk Kim  * include the following Disclaimer and Export Compliance provision in the
580d84335fSJung-uk Kim  * documentation and/or other materials provided with distribution. In
590d84335fSJung-uk Kim  * addition, Licensee may not authorize further sublicense of source of any
600d84335fSJung-uk Kim  * portion of the Covered Code, and must include terms to the effect that the
610d84335fSJung-uk Kim  * license from Licensee to its licensee is limited to the intellectual
620d84335fSJung-uk Kim  * property embodied in the software Licensee provides to its licensee, and
630d84335fSJung-uk Kim  * not to intellectual property embodied in modifications its licensee may
640d84335fSJung-uk Kim  * make.
650d84335fSJung-uk Kim  *
660d84335fSJung-uk Kim  * 3.3. Redistribution of Executable. Redistribution in executable form of any
670d84335fSJung-uk Kim  * substantial portion of the Covered Code or modification must reproduce the
680d84335fSJung-uk Kim  * above Copyright Notice, and the following Disclaimer and Export Compliance
690d84335fSJung-uk Kim  * provision in the documentation and/or other materials provided with the
700d84335fSJung-uk Kim  * distribution.
710d84335fSJung-uk Kim  *
720d84335fSJung-uk Kim  * 3.4. Intel retains all right, title, and interest in and to the Original
730d84335fSJung-uk Kim  * Intel Code.
740d84335fSJung-uk Kim  *
750d84335fSJung-uk Kim  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
760d84335fSJung-uk Kim  * Intel shall be used in advertising or otherwise to promote the sale, use or
770d84335fSJung-uk Kim  * other dealings in products derived from or relating to the Covered Code
780d84335fSJung-uk Kim  * without prior written authorization from Intel.
790d84335fSJung-uk Kim  *
800d84335fSJung-uk Kim  * 4. Disclaimer and Export Compliance
810d84335fSJung-uk Kim  *
820d84335fSJung-uk Kim  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
830d84335fSJung-uk Kim  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
840d84335fSJung-uk Kim  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
850d84335fSJung-uk Kim  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
860d84335fSJung-uk Kim  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
870d84335fSJung-uk Kim  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
880d84335fSJung-uk Kim  * PARTICULAR PURPOSE.
890d84335fSJung-uk Kim  *
900d84335fSJung-uk Kim  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
910d84335fSJung-uk Kim  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
920d84335fSJung-uk Kim  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
930d84335fSJung-uk Kim  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
940d84335fSJung-uk Kim  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
950d84335fSJung-uk Kim  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
960d84335fSJung-uk Kim  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
970d84335fSJung-uk Kim  * LIMITED REMEDY.
980d84335fSJung-uk Kim  *
990d84335fSJung-uk Kim  * 4.3. Licensee shall not export, either directly or indirectly, any of this
1000d84335fSJung-uk Kim  * software or system incorporating such software without first obtaining any
1010d84335fSJung-uk Kim  * required license or other approval from the U. S. Department of Commerce or
1020d84335fSJung-uk Kim  * any other agency or department of the United States Government. In the
1030d84335fSJung-uk Kim  * event Licensee exports any such software from the United States or
1040d84335fSJung-uk Kim  * re-exports any such software from a foreign destination, Licensee shall
1050d84335fSJung-uk Kim  * ensure that the distribution and export/re-export of the software is in
1060d84335fSJung-uk Kim  * compliance with all laws, regulations, orders, or other restrictions of the
1070d84335fSJung-uk Kim  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
1080d84335fSJung-uk Kim  * any of its subsidiaries will export/re-export any technical data, process,
1090d84335fSJung-uk Kim  * software, or service, directly or indirectly, to any country for which the
1100d84335fSJung-uk Kim  * United States government or any agency thereof requires an export license,
1110d84335fSJung-uk Kim  * other governmental approval, or letter of assurance, without first obtaining
1120d84335fSJung-uk Kim  * such license, approval or letter.
1130d84335fSJung-uk Kim  *
1140d84335fSJung-uk Kim  *****************************************************************************
1150d84335fSJung-uk Kim  *
1160d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
1170d84335fSJung-uk Kim  * following license:
1180d84335fSJung-uk Kim  *
119d244b227SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
120d244b227SJung-uk Kim  * modification, are permitted provided that the following conditions
121d244b227SJung-uk Kim  * are met:
122d244b227SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
123d244b227SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
124d244b227SJung-uk Kim  *    without modification.
125d244b227SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126d244b227SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
127d244b227SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
128d244b227SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
129d244b227SJung-uk Kim  *    binary redistribution.
130d244b227SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
131d244b227SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
132d244b227SJung-uk Kim  *    from this software without specific prior written permission.
13353289f6aSNate Lawson  *
1340d84335fSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1350d84335fSJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1360d84335fSJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1370d84335fSJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1380d84335fSJung-uk Kim  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1390d84335fSJung-uk Kim  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
1400d84335fSJung-uk Kim  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1410d84335fSJung-uk Kim  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
1420d84335fSJung-uk Kim  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1430d84335fSJung-uk Kim  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1440d84335fSJung-uk Kim  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1450d84335fSJung-uk Kim  *
1460d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
147d244b227SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
148d244b227SJung-uk Kim  * Software Foundation.
14953289f6aSNate Lawson  *
1500d84335fSJung-uk Kim  *****************************************************************************/
15153289f6aSNate Lawson 
152ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h>
15353289f6aSNate Lawson #include "aslcompiler.y.h"
154ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/amlcode.h>
155ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acparser.h>
156ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acnamesp.h>
15753289f6aSNate Lawson 
1589c7c683cSJung-uk Kim 
15953289f6aSNate Lawson #define _COMPONENT          ACPI_COMPILER
1609c7c683cSJung-uk Kim         ACPI_MODULE_NAME    ("asllisting")
1619c7c683cSJung-uk Kim 
16253289f6aSNate Lawson 
163fba7fc7eSJung-uk Kim /* Local prototypes */
164fba7fc7eSJung-uk Kim 
165fba7fc7eSJung-uk Kim static void
1669c7c683cSJung-uk Kim LsGenerateListing (
1679c7c683cSJung-uk Kim     UINT32                  FileId);
168fba7fc7eSJung-uk Kim 
169fba7fc7eSJung-uk Kim static ACPI_STATUS
170fba7fc7eSJung-uk Kim LsAmlListingWalk (
171fba7fc7eSJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
172fba7fc7eSJung-uk Kim     UINT32                  Level,
173fba7fc7eSJung-uk Kim     void                    *Context);
174fba7fc7eSJung-uk Kim 
17542fecd12SJung-uk Kim static ACPI_STATUS
176a9f12690SJung-uk Kim LsTreeWriteWalk (
177a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
178a9f12690SJung-uk Kim     UINT32                  Level,
179a9f12690SJung-uk Kim     void                    *Context);
180a9f12690SJung-uk Kim 
1819c7c683cSJung-uk Kim static void
1829c7c683cSJung-uk Kim LsWriteNodeToListing (
1839c7c683cSJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
1849c7c683cSJung-uk Kim     UINT32                  FileId);
1859c7c683cSJung-uk Kim 
1869c7c683cSJung-uk Kim static void
1879c7c683cSJung-uk Kim LsFinishSourceListing (
1889c7c683cSJung-uk Kim     UINT32                  FileId);
189efcc2a30SJung-uk Kim 
190efcc2a30SJung-uk Kim 
191efcc2a30SJung-uk Kim /*******************************************************************************
192efcc2a30SJung-uk Kim  *
193efcc2a30SJung-uk Kim  * FUNCTION:    LsDoListings
194efcc2a30SJung-uk Kim  *
1959c7c683cSJung-uk Kim  * PARAMETERS:  None. Examines the various output file global flags.
196efcc2a30SJung-uk Kim  *
197efcc2a30SJung-uk Kim  * RETURN:      None
198efcc2a30SJung-uk Kim  *
199efcc2a30SJung-uk Kim  * DESCRIPTION: Generate all requested listing files.
200efcc2a30SJung-uk Kim  *
201efcc2a30SJung-uk Kim  ******************************************************************************/
202efcc2a30SJung-uk Kim 
203efcc2a30SJung-uk Kim void
LsDoListings(void)204efcc2a30SJung-uk Kim LsDoListings (
205efcc2a30SJung-uk Kim     void)
206efcc2a30SJung-uk Kim {
207efcc2a30SJung-uk Kim 
2086f1f1a63SJung-uk Kim     if (AslGbl_C_OutputFlag)
209efcc2a30SJung-uk Kim     {
210efcc2a30SJung-uk Kim         LsGenerateListing (ASL_FILE_C_SOURCE_OUTPUT);
211efcc2a30SJung-uk Kim     }
212efcc2a30SJung-uk Kim 
2136f1f1a63SJung-uk Kim     if (AslGbl_ListingFlag)
214efcc2a30SJung-uk Kim     {
215efcc2a30SJung-uk Kim         LsGenerateListing (ASL_FILE_LISTING_OUTPUT);
216efcc2a30SJung-uk Kim     }
217efcc2a30SJung-uk Kim 
2186f1f1a63SJung-uk Kim     if (AslGbl_AsmOutputFlag)
219efcc2a30SJung-uk Kim     {
220efcc2a30SJung-uk Kim         LsGenerateListing (ASL_FILE_ASM_SOURCE_OUTPUT);
221efcc2a30SJung-uk Kim     }
222efcc2a30SJung-uk Kim 
2236f1f1a63SJung-uk Kim     if (AslGbl_C_IncludeOutputFlag)
224efcc2a30SJung-uk Kim     {
225efcc2a30SJung-uk Kim         LsGenerateListing (ASL_FILE_C_INCLUDE_OUTPUT);
226efcc2a30SJung-uk Kim     }
227efcc2a30SJung-uk Kim 
2286f1f1a63SJung-uk Kim     if (AslGbl_AsmIncludeOutputFlag)
229efcc2a30SJung-uk Kim     {
230efcc2a30SJung-uk Kim         LsGenerateListing (ASL_FILE_ASM_INCLUDE_OUTPUT);
231efcc2a30SJung-uk Kim     }
2329c7c683cSJung-uk Kim 
2336f1f1a63SJung-uk Kim     if (AslGbl_C_OffsetTableFlag)
2349c7c683cSJung-uk Kim     {
2359c7c683cSJung-uk Kim         LsGenerateListing (ASL_FILE_C_OFFSET_OUTPUT);
2369c7c683cSJung-uk Kim     }
237efcc2a30SJung-uk Kim }
238ed17e06eSJung-uk Kim 
23953289f6aSNate Lawson 
24053289f6aSNate Lawson /*******************************************************************************
24153289f6aSNate Lawson  *
2429c7c683cSJung-uk Kim  * FUNCTION:    LsGenerateListing
2431a39cfb0SJung-uk Kim  *
2449c7c683cSJung-uk Kim  * PARAMETERS:  FileId      - ID of listing file
2451a39cfb0SJung-uk Kim  *
246efcc2a30SJung-uk Kim  * RETURN:      None
2471a39cfb0SJung-uk Kim  *
2489c7c683cSJung-uk Kim  * DESCRIPTION: Generate a listing file. This can be one of the several types
2499c7c683cSJung-uk Kim  *              of "listings" supported.
25053289f6aSNate Lawson  *
25153289f6aSNate Lawson  ******************************************************************************/
25253289f6aSNate Lawson 
253fba7fc7eSJung-uk Kim static void
LsGenerateListing(UINT32 FileId)2549c7c683cSJung-uk Kim LsGenerateListing (
2559c7c683cSJung-uk Kim     UINT32                  FileId)
25653289f6aSNate Lawson {
25744b0f624SJung-uk Kim     UINT32                  WalkMode = ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_DB_SEPARATELY;
25853289f6aSNate Lawson 
2599c7c683cSJung-uk Kim     /* Start at the beginning of both the source and AML files */
26053289f6aSNate Lawson 
2619c7c683cSJung-uk Kim     FlSeekFile (ASL_FILE_SOURCE_OUTPUT, 0);
2629c7c683cSJung-uk Kim     FlSeekFile (ASL_FILE_AML_OUTPUT, 0);
2636f1f1a63SJung-uk Kim     AslGbl_SourceLine = 0;
2646f1f1a63SJung-uk Kim     AslGbl_CurrentHexColumn = 0;
2656f1f1a63SJung-uk Kim     LsPushNode (AslGbl_Files[ASL_FILE_INPUT].Filename);
26653289f6aSNate Lawson 
2679c7c683cSJung-uk Kim     if (FileId == ASL_FILE_C_OFFSET_OUTPUT)
2689c7c683cSJung-uk Kim     {
2696f1f1a63SJung-uk Kim         AslGbl_CurrentAmlOffset = 0;
270a9d8d09cSJung-uk Kim 
2719c7c683cSJung-uk Kim         /* Offset table file has a special header and footer */
2729c7c683cSJung-uk Kim 
2739c7c683cSJung-uk Kim         LsDoOffsetTableHeader (FileId);
2749c7c683cSJung-uk Kim 
27544b0f624SJung-uk Kim         TrWalkParseTree (AslGbl_CurrentDB, WalkMode,
276f8146b88SJung-uk Kim             LsAmlOffsetWalk, NULL, (void *) ACPI_TO_POINTER (FileId));
2779c7c683cSJung-uk Kim         LsDoOffsetTableFooter (FileId);
2789c7c683cSJung-uk Kim         return;
27953289f6aSNate Lawson     }
28053289f6aSNate Lawson 
2819c7c683cSJung-uk Kim     /* Process all parse nodes */
28253289f6aSNate Lawson 
28344b0f624SJung-uk Kim     TrWalkParseTree (AslGbl_CurrentDB, WalkMode,
284f8146b88SJung-uk Kim         LsAmlListingWalk, NULL, (void *) ACPI_TO_POINTER (FileId));
28553289f6aSNate Lawson 
2869c7c683cSJung-uk Kim     /* Final processing */
28753289f6aSNate Lawson 
2889c7c683cSJung-uk Kim     LsFinishSourceListing (FileId);
28953289f6aSNate Lawson }
29053289f6aSNate Lawson 
29153289f6aSNate Lawson 
29253289f6aSNate Lawson /*******************************************************************************
29353289f6aSNate Lawson  *
29453289f6aSNate Lawson  * FUNCTION:    LsAmlListingWalk
29553289f6aSNate Lawson  *
29653289f6aSNate Lawson  * PARAMETERS:  ASL_WALK_CALLBACK
29753289f6aSNate Lawson  *
29853289f6aSNate Lawson  * RETURN:      Status
29953289f6aSNate Lawson  *
30053289f6aSNate Lawson  * DESCRIPTION: Process one node during a listing file generation.
30153289f6aSNate Lawson  *
30253289f6aSNate Lawson  ******************************************************************************/
30353289f6aSNate Lawson 
304fba7fc7eSJung-uk Kim static ACPI_STATUS
LsAmlListingWalk(ACPI_PARSE_OBJECT * Op,UINT32 Level,void * Context)30553289f6aSNate Lawson LsAmlListingWalk (
30653289f6aSNate Lawson     ACPI_PARSE_OBJECT       *Op,
30753289f6aSNate Lawson     UINT32                  Level,
30853289f6aSNate Lawson     void                    *Context)
30953289f6aSNate Lawson {
31053289f6aSNate Lawson     UINT8                   FileByte;
31153289f6aSNate Lawson     UINT32                  i;
3121a39cfb0SJung-uk Kim     UINT32                  FileId = (UINT32) ACPI_TO_INTEGER (Context);
31353289f6aSNate Lawson 
31453289f6aSNate Lawson 
31553289f6aSNate Lawson     LsWriteNodeToListing (Op, FileId);
31653289f6aSNate Lawson 
3175f9b24faSJung-uk Kim     if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DATA)
3181a39cfb0SJung-uk Kim     {
3191a39cfb0SJung-uk Kim         /* Buffer is a resource template, don't dump the data all at once */
3201a39cfb0SJung-uk Kim 
3211a39cfb0SJung-uk Kim         return (AE_OK);
3221a39cfb0SJung-uk Kim     }
3231a39cfb0SJung-uk Kim 
324f8146b88SJung-uk Kim     if ((FileId == ASL_FILE_ASM_INCLUDE_OUTPUT) ||
325f8146b88SJung-uk Kim         (FileId == ASL_FILE_C_INCLUDE_OUTPUT))
326f8146b88SJung-uk Kim     {
327f8146b88SJung-uk Kim         return (AE_OK);
328f8146b88SJung-uk Kim     }
329f8146b88SJung-uk Kim 
33053289f6aSNate Lawson     /* Write the hex bytes to the listing file(s) (if requested) */
33153289f6aSNate Lawson 
33253289f6aSNate Lawson     for (i = 0; i < Op->Asl.FinalAmlLength; i++)
33353289f6aSNate Lawson     {
33453289f6aSNate Lawson         if (ACPI_FAILURE (FlReadFile (ASL_FILE_AML_OUTPUT, &FileByte, 1)))
33553289f6aSNate Lawson         {
33653289f6aSNate Lawson             FlFileError (ASL_FILE_AML_OUTPUT, ASL_MSG_READ);
33753289f6aSNate Lawson             AslAbort ();
33853289f6aSNate Lawson         }
339f8146b88SJung-uk Kim 
34053289f6aSNate Lawson         LsWriteListingHexBytes (&FileByte, 1, FileId);
34153289f6aSNate Lawson     }
34253289f6aSNate Lawson 
34353289f6aSNate Lawson     return (AE_OK);
34453289f6aSNate Lawson }
34553289f6aSNate Lawson 
34653289f6aSNate Lawson 
34753289f6aSNate Lawson /*******************************************************************************
34853289f6aSNate Lawson  *
3499c7c683cSJung-uk Kim  * FUNCTION:    LsDumpParseTree, LsTreeWriteWalk
35053289f6aSNate Lawson  *
35153289f6aSNate Lawson  * PARAMETERS:  None
35253289f6aSNate Lawson  *
3539c7c683cSJung-uk Kim  * RETURN:      None
35453289f6aSNate Lawson  *
3559c7c683cSJung-uk Kim  * DESCRIPTION: Dump entire parse tree, for compiler debug only
35653289f6aSNate Lawson  *
35753289f6aSNate Lawson  ******************************************************************************/
35853289f6aSNate Lawson 
3599c7c683cSJung-uk Kim void
LsDumpParseTree(void)3609c7c683cSJung-uk Kim LsDumpParseTree (
361fba7fc7eSJung-uk Kim     void)
36253289f6aSNate Lawson {
36353289f6aSNate Lawson 
3646f1f1a63SJung-uk Kim     if (!AslGbl_DebugFlag)
36553289f6aSNate Lawson     {
36653289f6aSNate Lawson         return;
36753289f6aSNate Lawson     }
36853289f6aSNate Lawson 
3699c7c683cSJung-uk Kim     DbgPrint (ASL_TREE_OUTPUT, "\nOriginal parse tree from parser:\n\n");
370f8146b88SJung-uk Kim     DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_HEADER1);
371f8146b88SJung-uk Kim 
3726f1f1a63SJung-uk Kim     TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD,
3739c7c683cSJung-uk Kim         LsTreeWriteWalk, NULL, NULL);
374f8146b88SJung-uk Kim 
375f8146b88SJung-uk Kim     DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_HEADER1);
37653289f6aSNate Lawson }
37753289f6aSNate Lawson 
37853289f6aSNate Lawson 
3799c7c683cSJung-uk Kim static ACPI_STATUS
LsTreeWriteWalk(ACPI_PARSE_OBJECT * Op,UINT32 Level,void * Context)3809c7c683cSJung-uk Kim LsTreeWriteWalk (
3819c7c683cSJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
3829c7c683cSJung-uk Kim     UINT32                  Level,
3839c7c683cSJung-uk Kim     void                    *Context)
38453289f6aSNate Lawson {
38553289f6aSNate Lawson 
386f8146b88SJung-uk Kim     /* Dump ParseOp name and possible value */
387f8146b88SJung-uk Kim 
388f8146b88SJung-uk Kim     switch (Op->Asl.ParseOpcode)
389f8146b88SJung-uk Kim     {
390f8146b88SJung-uk Kim         case PARSEOP_NAMESEG:
391f8146b88SJung-uk Kim         case PARSEOP_NAMESTRING:
392f8146b88SJung-uk Kim         case PARSEOP_METHODCALL:
393f8146b88SJung-uk Kim         case PARSEOP_STRING_LITERAL:
394f8146b88SJung-uk Kim 
395f8146b88SJung-uk Kim         UtDumpStringOp (Op, Level);
396f8146b88SJung-uk Kim         break;
397f8146b88SJung-uk Kim 
398f8146b88SJung-uk Kim     case PARSEOP_BYTECONST:
399f8146b88SJung-uk Kim 
400f8146b88SJung-uk Kim         UtDumpIntegerOp (Op, Level, 2);
401f8146b88SJung-uk Kim         break;
402f8146b88SJung-uk Kim 
403f8146b88SJung-uk Kim     case PARSEOP_WORDCONST:
404f8146b88SJung-uk Kim     case PARSEOP_PACKAGE_LENGTH:
405f8146b88SJung-uk Kim 
406f8146b88SJung-uk Kim         UtDumpIntegerOp (Op, Level, 4);
407f8146b88SJung-uk Kim         break;
408f8146b88SJung-uk Kim 
409f8146b88SJung-uk Kim     case PARSEOP_DWORDCONST:
410f8146b88SJung-uk Kim     case PARSEOP_EISAID:
411f8146b88SJung-uk Kim 
412f8146b88SJung-uk Kim         UtDumpIntegerOp (Op, Level, 8);
413f8146b88SJung-uk Kim         break;
414f8146b88SJung-uk Kim 
415f8146b88SJung-uk Kim     case PARSEOP_QWORDCONST:
416f8146b88SJung-uk Kim     case PARSEOP_INTEGER:
417f8146b88SJung-uk Kim     case PARSEOP_ONE:
418f8146b88SJung-uk Kim     case PARSEOP_ZERO:
419f8146b88SJung-uk Kim     case PARSEOP_ONES:
420f8146b88SJung-uk Kim 
421f8146b88SJung-uk Kim         UtDumpIntegerOp (Op, Level, 16);
422f8146b88SJung-uk Kim         break;
423f8146b88SJung-uk Kim 
424f8146b88SJung-uk Kim     case PARSEOP_INCLUDE:
42553289f6aSNate Lawson 
4269c7c683cSJung-uk Kim         DbgPrint (ASL_TREE_OUTPUT,
427f8146b88SJung-uk Kim             "Open: %s\n", Op->Asl.Value.String);
428f8146b88SJung-uk Kim         return (AE_OK);
429a9d8d09cSJung-uk Kim 
430f8146b88SJung-uk Kim     case PARSEOP_INCLUDE_END:
43153289f6aSNate Lawson 
432f8146b88SJung-uk Kim         DbgPrint (ASL_TREE_OUTPUT,
433f8146b88SJung-uk Kim             "Close: %s\n", Op->Asl.Filename);
434f8146b88SJung-uk Kim         return (AE_OK);
435f8146b88SJung-uk Kim 
436f8146b88SJung-uk Kim     default:
437f8146b88SJung-uk Kim 
438f8146b88SJung-uk Kim         UtDumpBasicOp (Op, Level);
439f8146b88SJung-uk Kim         break;
440f8146b88SJung-uk Kim     }
441f8146b88SJung-uk Kim 
442f8146b88SJung-uk Kim     /* Dump the remaining data */
443f8146b88SJung-uk Kim 
444f8146b88SJung-uk Kim     DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_DEBUG1,
445f8146b88SJung-uk Kim         Op->Asl.ParseOpcode, Op->Asl.CompileFlags,
446f8146b88SJung-uk Kim         Op->Asl.LineNumber, Op->Asl.EndLine,
447f8146b88SJung-uk Kim         Op->Asl.LogicalLineNumber, Op->Asl.EndLogicalLine);
448f8146b88SJung-uk Kim 
4495f9b24faSJung-uk Kim     TrPrintOpFlags (Op->Asl.CompileFlags, ASL_TREE_OUTPUT);
4507cf3e94aSJung-uk Kim     DbgPrint (ASL_TREE_OUTPUT, "\n");
4519c7c683cSJung-uk Kim     return (AE_OK);
45253289f6aSNate Lawson }
45353289f6aSNate Lawson 
45453289f6aSNate Lawson 
45553289f6aSNate Lawson /*******************************************************************************
45653289f6aSNate Lawson  *
45753289f6aSNate Lawson  * FUNCTION:    LsWriteNodeToListing
45853289f6aSNate Lawson  *
45953289f6aSNate Lawson  * PARAMETERS:  Op              - Parse node to write to the listing file.
46053289f6aSNate Lawson  *              FileId          - ID of current listing file
46153289f6aSNate Lawson  *
46253289f6aSNate Lawson  * RETURN:      None.
46353289f6aSNate Lawson  *
46453289f6aSNate Lawson  * DESCRIPTION: Write "a node" to the listing file. This means to
46553289f6aSNate Lawson  *              1) Write out all of the source text associated with the node
46653289f6aSNate Lawson  *              2) Write out all of the AML bytes associated with the node
46753289f6aSNate Lawson  *              3) Write any compiler exceptions associated with the node
46853289f6aSNate Lawson  *
46953289f6aSNate Lawson  ******************************************************************************/
47053289f6aSNate Lawson 
471fba7fc7eSJung-uk Kim static void
LsWriteNodeToListing(ACPI_PARSE_OBJECT * Op,UINT32 FileId)47253289f6aSNate Lawson LsWriteNodeToListing (
47353289f6aSNate Lawson     ACPI_PARSE_OBJECT       *Op,
47453289f6aSNate Lawson     UINT32                  FileId)
47553289f6aSNate Lawson {
47653289f6aSNate Lawson     const ACPI_OPCODE_INFO  *OpInfo;
47753289f6aSNate Lawson     UINT32                  OpClass;
47853289f6aSNate Lawson     char                    *Pathname;
47953289f6aSNate Lawson     UINT32                  Length;
48053289f6aSNate Lawson     UINT32                  i;
48153289f6aSNate Lawson 
48253289f6aSNate Lawson 
48353289f6aSNate Lawson     OpInfo  = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
48453289f6aSNate Lawson     OpClass = OpInfo->Class;
48553289f6aSNate Lawson 
486fba7fc7eSJung-uk Kim     /* TBD: clean this up with a single flag that says:
487fba7fc7eSJung-uk Kim      * I start a named output block
488fba7fc7eSJung-uk Kim      */
48953289f6aSNate Lawson     if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
49053289f6aSNate Lawson     {
49153289f6aSNate Lawson         switch (Op->Asl.ParseOpcode)
49253289f6aSNate Lawson         {
493f8146b88SJung-uk Kim         case PARSEOP_DEFINITION_BLOCK:
49453289f6aSNate Lawson         case PARSEOP_METHODCALL:
49553289f6aSNate Lawson         case PARSEOP_INCLUDE:
49653289f6aSNate Lawson         case PARSEOP_INCLUDE_END:
49753289f6aSNate Lawson         case PARSEOP_DEFAULT_ARG:
49853289f6aSNate Lawson 
49953289f6aSNate Lawson             break;
50053289f6aSNate Lawson 
50153289f6aSNate Lawson         default:
502a9d8d09cSJung-uk Kim 
50353289f6aSNate Lawson             switch (OpClass)
50453289f6aSNate Lawson             {
50553289f6aSNate Lawson             case AML_CLASS_NAMED_OBJECT:
506a9d8d09cSJung-uk Kim 
50753289f6aSNate Lawson                 switch (Op->Asl.AmlOpcode)
50853289f6aSNate Lawson                 {
50953289f6aSNate Lawson                 case AML_SCOPE_OP:
51053289f6aSNate Lawson                 case AML_ALIAS_OP:
511a9d8d09cSJung-uk Kim 
51253289f6aSNate Lawson                     break;
51353289f6aSNate Lawson 
51453289f6aSNate Lawson                 default:
515a9d8d09cSJung-uk Kim 
51653289f6aSNate Lawson                     if (Op->Asl.ExternalName)
51753289f6aSNate Lawson                     {
51853289f6aSNate Lawson                         LsFlushListingBuffer (FileId);
51953289f6aSNate Lawson                         FlPrintFile (FileId, "    };\n");
52053289f6aSNate Lawson                     }
52153289f6aSNate Lawson                     break;
52253289f6aSNate Lawson                 }
52353289f6aSNate Lawson                 break;
52453289f6aSNate Lawson 
52553289f6aSNate Lawson             default:
526a9d8d09cSJung-uk Kim 
52753289f6aSNate Lawson                 /* Don't care about other objects */
528a9d8d09cSJung-uk Kim 
52953289f6aSNate Lawson                 break;
53053289f6aSNate Lawson             }
53153289f6aSNate Lawson             break;
53253289f6aSNate Lawson         }
53353289f6aSNate Lawson     }
53453289f6aSNate Lawson 
53553289f6aSNate Lawson     /* These cases do not have a corresponding AML opcode */
53653289f6aSNate Lawson 
53753289f6aSNate Lawson     switch (Op->Asl.ParseOpcode)
53853289f6aSNate Lawson     {
539f8146b88SJung-uk Kim     case PARSEOP_DEFINITION_BLOCK:
54053289f6aSNate Lawson 
541f8146b88SJung-uk Kim         /* Always start a definition block at AML offset zero */
542f8146b88SJung-uk Kim 
5436f1f1a63SJung-uk Kim         AslGbl_CurrentAmlOffset = 0;
54453289f6aSNate Lawson         LsWriteSourceLines (Op->Asl.EndLine, Op->Asl.EndLogicalLine, FileId);
54553289f6aSNate Lawson 
54653289f6aSNate Lawson         /* Use the table Signature and TableId to build a unique name */
54753289f6aSNate Lawson 
548f8146b88SJung-uk Kim         switch (FileId)
54953289f6aSNate Lawson         {
550f8146b88SJung-uk Kim         case ASL_FILE_ASM_SOURCE_OUTPUT:
551f8146b88SJung-uk Kim 
552fba7fc7eSJung-uk Kim             FlPrintFile (FileId,
553fba7fc7eSJung-uk Kim                 "%s_%s_Header \\\n",
5546f1f1a63SJung-uk Kim                 AslGbl_TableSignature, AslGbl_TableId);
555f8146b88SJung-uk Kim             break;
556f8146b88SJung-uk Kim 
557f8146b88SJung-uk Kim         case ASL_FILE_C_SOURCE_OUTPUT:
558f8146b88SJung-uk Kim 
559fba7fc7eSJung-uk Kim             FlPrintFile (FileId,
560fba7fc7eSJung-uk Kim                 "    unsigned char    %s_%s_Header [] =\n    {\n",
5616f1f1a63SJung-uk Kim                 AslGbl_TableSignature, AslGbl_TableId);
562f8146b88SJung-uk Kim             break;
563f8146b88SJung-uk Kim 
564f8146b88SJung-uk Kim         case ASL_FILE_ASM_INCLUDE_OUTPUT:
565f8146b88SJung-uk Kim 
566fba7fc7eSJung-uk Kim             FlPrintFile (FileId,
567fba7fc7eSJung-uk Kim                 "extrn %s_%s_Header : byte\n",
5686f1f1a63SJung-uk Kim                 AslGbl_TableSignature, AslGbl_TableId);
569f8146b88SJung-uk Kim             break;
570f8146b88SJung-uk Kim 
571f8146b88SJung-uk Kim         case ASL_FILE_C_INCLUDE_OUTPUT:
572f8146b88SJung-uk Kim 
573fba7fc7eSJung-uk Kim             FlPrintFile (FileId,
574fba7fc7eSJung-uk Kim                 "extern unsigned char    %s_%s_Header [];\n",
5756f1f1a63SJung-uk Kim                 AslGbl_TableSignature, AslGbl_TableId);
576f8146b88SJung-uk Kim             break;
577f8146b88SJung-uk Kim 
578f8146b88SJung-uk Kim         default:
579f8146b88SJung-uk Kim             break;
58053289f6aSNate Lawson         }
581f8146b88SJung-uk Kim 
58253289f6aSNate Lawson         return;
58353289f6aSNate Lawson 
58453289f6aSNate Lawson 
58553289f6aSNate Lawson     case PARSEOP_METHODCALL:
58653289f6aSNate Lawson 
587fba7fc7eSJung-uk Kim         LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
588fba7fc7eSJung-uk Kim             FileId);
58953289f6aSNate Lawson         return;
59053289f6aSNate Lawson 
59153289f6aSNate Lawson 
59253289f6aSNate Lawson     case PARSEOP_INCLUDE:
59353289f6aSNate Lawson 
594fba7fc7eSJung-uk Kim         /* Flush everything up to and including the include source line */
59553289f6aSNate Lawson 
596fba7fc7eSJung-uk Kim         LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
597fba7fc7eSJung-uk Kim             FileId);
598fba7fc7eSJung-uk Kim 
599fba7fc7eSJung-uk Kim         /* Create a new listing node and push it */
600fba7fc7eSJung-uk Kim 
601f8146b88SJung-uk Kim         LsPushNode (Op->Asl.Value.String);
60253289f6aSNate Lawson         return;
60353289f6aSNate Lawson 
60453289f6aSNate Lawson 
60553289f6aSNate Lawson     case PARSEOP_INCLUDE_END:
60653289f6aSNate Lawson 
607fba7fc7eSJung-uk Kim         /* Flush out the rest of the include file */
60853289f6aSNate Lawson 
609fba7fc7eSJung-uk Kim         LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
610fba7fc7eSJung-uk Kim             FileId);
611fba7fc7eSJung-uk Kim 
612fba7fc7eSJung-uk Kim         /* Pop off this listing node and go back to the parent file */
613fba7fc7eSJung-uk Kim 
614fba7fc7eSJung-uk Kim         (void) LsPopNode ();
61553289f6aSNate Lawson         return;
61653289f6aSNate Lawson 
61753289f6aSNate Lawson 
61853289f6aSNate Lawson     case PARSEOP_DEFAULT_ARG:
6191a39cfb0SJung-uk Kim 
6205f9b24faSJung-uk Kim         if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC)
6211a39cfb0SJung-uk Kim         {
6221a39cfb0SJung-uk Kim             LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.EndLogicalLine,
6231a39cfb0SJung-uk Kim                 FileId);
6241a39cfb0SJung-uk Kim         }
62553289f6aSNate Lawson         return;
62653289f6aSNate Lawson 
62753289f6aSNate Lawson 
62853289f6aSNate Lawson     default:
629a9d8d09cSJung-uk Kim 
63053289f6aSNate Lawson         /* All other opcodes have an AML opcode */
631a9d8d09cSJung-uk Kim 
63253289f6aSNate Lawson         break;
63353289f6aSNate Lawson     }
63453289f6aSNate Lawson 
63553289f6aSNate Lawson     /*
63653289f6aSNate Lawson      * Otherwise, we look at the AML opcode because we can
63753289f6aSNate Lawson      * switch on the opcode type, getting an entire class
63853289f6aSNate Lawson      * at once
63953289f6aSNate Lawson      */
64053289f6aSNate Lawson     switch (OpClass)
64153289f6aSNate Lawson     {
64253289f6aSNate Lawson     case AML_CLASS_ARGUMENT:       /* argument type only */
64353289f6aSNate Lawson     case AML_CLASS_INTERNAL:
64453289f6aSNate Lawson 
64553289f6aSNate Lawson         break;
64653289f6aSNate Lawson 
64753289f6aSNate Lawson     case AML_CLASS_NAMED_OBJECT:
64853289f6aSNate Lawson 
64953289f6aSNate Lawson         switch (Op->Asl.AmlOpcode)
65053289f6aSNate Lawson         {
65153289f6aSNate Lawson         case AML_FIELD_OP:
65253289f6aSNate Lawson         case AML_INDEX_FIELD_OP:
65353289f6aSNate Lawson         case AML_BANK_FIELD_OP:
654fba7fc7eSJung-uk Kim             /*
655fba7fc7eSJung-uk Kim              * For fields, we want to dump all the AML after the
656fba7fc7eSJung-uk Kim              * entire definition
657fba7fc7eSJung-uk Kim              */
658fba7fc7eSJung-uk Kim             LsWriteSourceLines (Op->Asl.EndLine, Op->Asl.EndLogicalLine,
659fba7fc7eSJung-uk Kim                 FileId);
66053289f6aSNate Lawson             break;
66153289f6aSNate Lawson 
6621a39cfb0SJung-uk Kim         case AML_NAME_OP:
6631a39cfb0SJung-uk Kim 
6645f9b24faSJung-uk Kim             if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC)
6651a39cfb0SJung-uk Kim             {
6661a39cfb0SJung-uk Kim                 LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
6671a39cfb0SJung-uk Kim                     FileId);
6681a39cfb0SJung-uk Kim             }
6691a39cfb0SJung-uk Kim             else
6701a39cfb0SJung-uk Kim             {
6711a39cfb0SJung-uk Kim                 /*
6721a39cfb0SJung-uk Kim                  * For fields, we want to dump all the AML after the
6731a39cfb0SJung-uk Kim                  * entire definition
6741a39cfb0SJung-uk Kim                  */
6751a39cfb0SJung-uk Kim                 LsWriteSourceLines (Op->Asl.EndLine, Op->Asl.EndLogicalLine,
6761a39cfb0SJung-uk Kim                     FileId);
6771a39cfb0SJung-uk Kim             }
6781a39cfb0SJung-uk Kim             break;
6791a39cfb0SJung-uk Kim 
68053289f6aSNate Lawson         default:
681a9d8d09cSJung-uk Kim 
682fba7fc7eSJung-uk Kim             LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
683fba7fc7eSJung-uk Kim                 FileId);
68453289f6aSNate Lawson             break;
68553289f6aSNate Lawson         }
68653289f6aSNate Lawson 
68753289f6aSNate Lawson         switch (Op->Asl.AmlOpcode)
68853289f6aSNate Lawson         {
68953289f6aSNate Lawson         case AML_SCOPE_OP:
69053289f6aSNate Lawson         case AML_ALIAS_OP:
69153289f6aSNate Lawson 
69253289f6aSNate Lawson             /* These opcodes do not declare a new object, ignore them */
69353289f6aSNate Lawson 
69453289f6aSNate Lawson             break;
69553289f6aSNate Lawson 
69653289f6aSNate Lawson         default:
69753289f6aSNate Lawson 
69853289f6aSNate Lawson             /* All other named object opcodes come here */
69953289f6aSNate Lawson 
70053289f6aSNate Lawson             switch (FileId)
70153289f6aSNate Lawson             {
70253289f6aSNate Lawson             case ASL_FILE_ASM_SOURCE_OUTPUT:
70353289f6aSNate Lawson             case ASL_FILE_C_SOURCE_OUTPUT:
70453289f6aSNate Lawson             case ASL_FILE_ASM_INCLUDE_OUTPUT:
70553289f6aSNate Lawson             case ASL_FILE_C_INCLUDE_OUTPUT:
70653289f6aSNate Lawson                 /*
70753289f6aSNate Lawson                  * For named objects, we will create a valid symbol so that the
70853289f6aSNate Lawson                  * AML code can be referenced from C or ASM
70953289f6aSNate Lawson                  */
71053289f6aSNate Lawson                 if (Op->Asl.ExternalName)
71153289f6aSNate Lawson                 {
71253289f6aSNate Lawson                     /* Get the full pathname associated with this node */
71353289f6aSNate Lawson 
71453289f6aSNate Lawson                     Pathname = AcpiNsGetExternalPathname (Op->Asl.Node);
71553289f6aSNate Lawson                     Length = strlen (Pathname);
71653289f6aSNate Lawson                     if (Length >= 4)
71753289f6aSNate Lawson                     {
71853289f6aSNate Lawson                         /* Convert all dots in the path to underscores */
71953289f6aSNate Lawson 
72053289f6aSNate Lawson                         for (i = 0; i < Length; i++)
72153289f6aSNate Lawson                         {
72253289f6aSNate Lawson                             if (Pathname[i] == '.')
72353289f6aSNate Lawson                             {
72453289f6aSNate Lawson                                 Pathname[i] = '_';
72553289f6aSNate Lawson                             }
72653289f6aSNate Lawson                         }
72753289f6aSNate Lawson 
72853289f6aSNate Lawson                         /* Create the appropriate symbol in the output file */
72953289f6aSNate Lawson 
730f8146b88SJung-uk Kim                         switch (FileId)
73153289f6aSNate Lawson                         {
732f8146b88SJung-uk Kim                         case ASL_FILE_ASM_SOURCE_OUTPUT:
733f8146b88SJung-uk Kim 
734fba7fc7eSJung-uk Kim                             FlPrintFile (FileId,
735fba7fc7eSJung-uk Kim                                 "%s_%s_%s  \\\n",
7366f1f1a63SJung-uk Kim                                 AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]);
737f8146b88SJung-uk Kim                             break;
738f8146b88SJung-uk Kim 
739f8146b88SJung-uk Kim                         case ASL_FILE_C_SOURCE_OUTPUT:
740f8146b88SJung-uk Kim 
741fba7fc7eSJung-uk Kim                             FlPrintFile (FileId,
742fba7fc7eSJung-uk Kim                                 "    unsigned char    %s_%s_%s [] =\n    {\n",
7436f1f1a63SJung-uk Kim                                 AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]);
744f8146b88SJung-uk Kim                             break;
745f8146b88SJung-uk Kim 
746f8146b88SJung-uk Kim                         case ASL_FILE_ASM_INCLUDE_OUTPUT:
747f8146b88SJung-uk Kim 
748fba7fc7eSJung-uk Kim                             FlPrintFile (FileId,
749fba7fc7eSJung-uk Kim                                 "extrn %s_%s_%s : byte\n",
7506f1f1a63SJung-uk Kim                                 AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]);
751f8146b88SJung-uk Kim                             break;
752f8146b88SJung-uk Kim 
753f8146b88SJung-uk Kim                         case ASL_FILE_C_INCLUDE_OUTPUT:
754f8146b88SJung-uk Kim 
755fba7fc7eSJung-uk Kim                             FlPrintFile (FileId,
756fba7fc7eSJung-uk Kim                                 "extern unsigned char    %s_%s_%s [];\n",
7576f1f1a63SJung-uk Kim                                 AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]);
758f8146b88SJung-uk Kim                             break;
759f8146b88SJung-uk Kim 
760f8146b88SJung-uk Kim                         default:
761f8146b88SJung-uk Kim                             break;
76253289f6aSNate Lawson                         }
76353289f6aSNate Lawson                     }
764f8146b88SJung-uk Kim 
7651a39cfb0SJung-uk Kim                     ACPI_FREE (Pathname);
76653289f6aSNate Lawson                 }
76753289f6aSNate Lawson                 break;
76853289f6aSNate Lawson 
76953289f6aSNate Lawson             default:
770a9d8d09cSJung-uk Kim 
77153289f6aSNate Lawson                 /* Nothing to do for listing file */
772a9d8d09cSJung-uk Kim 
77353289f6aSNate Lawson                 break;
77453289f6aSNate Lawson             }
77553289f6aSNate Lawson         }
77653289f6aSNate Lawson         break;
77753289f6aSNate Lawson 
77853289f6aSNate Lawson     case AML_CLASS_EXECUTE:
77953289f6aSNate Lawson     case AML_CLASS_CREATE:
78053289f6aSNate Lawson     default:
78153289f6aSNate Lawson 
7821a39cfb0SJung-uk Kim         if ((Op->Asl.ParseOpcode == PARSEOP_BUFFER) &&
7835f9b24faSJung-uk Kim             (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC))
7841a39cfb0SJung-uk Kim         {
7851a39cfb0SJung-uk Kim             return;
7861a39cfb0SJung-uk Kim         }
7871a39cfb0SJung-uk Kim 
788fba7fc7eSJung-uk Kim         LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
789fba7fc7eSJung-uk Kim             FileId);
79053289f6aSNate Lawson         break;
79153289f6aSNate Lawson 
79253289f6aSNate Lawson     case AML_CLASS_UNKNOWN:
793a9d8d09cSJung-uk Kim 
79453289f6aSNate Lawson         break;
79553289f6aSNate Lawson     }
79653289f6aSNate Lawson }
7979c7c683cSJung-uk Kim 
7989c7c683cSJung-uk Kim 
7999c7c683cSJung-uk Kim /*******************************************************************************
8009c7c683cSJung-uk Kim  *
8019c7c683cSJung-uk Kim  * FUNCTION:    LsFinishSourceListing
8029c7c683cSJung-uk Kim  *
8039c7c683cSJung-uk Kim  * PARAMETERS:  FileId          - ID of current listing file.
8049c7c683cSJung-uk Kim  *
8059c7c683cSJung-uk Kim  * RETURN:      None
8069c7c683cSJung-uk Kim  *
8079c7c683cSJung-uk Kim  * DESCRIPTION: Cleanup routine for the listing file. Flush the hex AML
8089c7c683cSJung-uk Kim  *              listing buffer, and flush out any remaining lines in the
8099c7c683cSJung-uk Kim  *              source input file.
8109c7c683cSJung-uk Kim  *
8119c7c683cSJung-uk Kim  ******************************************************************************/
8129c7c683cSJung-uk Kim 
8139c7c683cSJung-uk Kim static void
LsFinishSourceListing(UINT32 FileId)8149c7c683cSJung-uk Kim LsFinishSourceListing (
8159c7c683cSJung-uk Kim     UINT32                  FileId)
8169c7c683cSJung-uk Kim {
8179c7c683cSJung-uk Kim 
8189c7c683cSJung-uk Kim     if ((FileId == ASL_FILE_ASM_INCLUDE_OUTPUT) ||
8199c7c683cSJung-uk Kim         (FileId == ASL_FILE_C_INCLUDE_OUTPUT))
8209c7c683cSJung-uk Kim     {
8219c7c683cSJung-uk Kim         return;
8229c7c683cSJung-uk Kim     }
8239c7c683cSJung-uk Kim 
8249c7c683cSJung-uk Kim     LsFlushListingBuffer (FileId);
8256f1f1a63SJung-uk Kim     AslGbl_CurrentAmlOffset = 0;
8269c7c683cSJung-uk Kim 
8279c7c683cSJung-uk Kim     /* Flush any remaining text in the source file */
8289c7c683cSJung-uk Kim 
8299c7c683cSJung-uk Kim     if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
8309c7c683cSJung-uk Kim     {
8319c7c683cSJung-uk Kim         FlPrintFile (FileId, "    /*\n");
8329c7c683cSJung-uk Kim     }
8339c7c683cSJung-uk Kim 
8349c7c683cSJung-uk Kim     while (LsWriteOneSourceLine (FileId))
8359c7c683cSJung-uk Kim     { ; }
8369c7c683cSJung-uk Kim 
8379c7c683cSJung-uk Kim     if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
8389c7c683cSJung-uk Kim     {
8399c7c683cSJung-uk Kim         FlPrintFile (FileId, "\n     */\n    };\n");
8409c7c683cSJung-uk Kim     }
8419c7c683cSJung-uk Kim 
8429c7c683cSJung-uk Kim     FlPrintFile (FileId, "\n");
8439c7c683cSJung-uk Kim 
8449c7c683cSJung-uk Kim     if (FileId == ASL_FILE_LISTING_OUTPUT)
8459c7c683cSJung-uk Kim     {
8469c7c683cSJung-uk Kim         /* Print a summary of the compile exceptions */
8479c7c683cSJung-uk Kim 
8489c7c683cSJung-uk Kim         FlPrintFile (FileId, "\n\nSummary of errors and warnings\n\n");
8499c7c683cSJung-uk Kim         AePrintErrorLog (FileId);
8509c7c683cSJung-uk Kim         FlPrintFile (FileId, "\n");
85144b0f624SJung-uk Kim         UtDisplayOneSummary (FileId, TRUE);
8529c7c683cSJung-uk Kim         FlPrintFile (FileId, "\n");
8539c7c683cSJung-uk Kim     }
8549c7c683cSJung-uk Kim }
855