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