10d02842fSSascha Wildner /******************************************************************************
20d02842fSSascha Wildner  *
30d02842fSSascha Wildner  * Module Name: asllisting - Listing file generation
40d02842fSSascha Wildner  *
50d02842fSSascha Wildner  *****************************************************************************/
60d02842fSSascha Wildner 
7b4315fc7SSascha Wildner /******************************************************************************
8b4315fc7SSascha Wildner  *
9b4315fc7SSascha Wildner  * 1. Copyright Notice
10b4315fc7SSascha Wildner  *
11*383048acSSascha Wildner  * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
120d02842fSSascha Wildner  * All rights reserved.
130d02842fSSascha Wildner  *
14b4315fc7SSascha Wildner  * 2. License
15b4315fc7SSascha Wildner  *
16b4315fc7SSascha Wildner  * 2.1. This is your license from Intel Corp. under its intellectual property
17b4315fc7SSascha Wildner  * rights. You may have additional license terms from the party that provided
18b4315fc7SSascha Wildner  * you this software, covering your right to use that party's intellectual
19b4315fc7SSascha Wildner  * property rights.
20b4315fc7SSascha Wildner  *
21b4315fc7SSascha Wildner  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22b4315fc7SSascha Wildner  * copy of the source code appearing in this file ("Covered Code") an
23b4315fc7SSascha Wildner  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24b4315fc7SSascha Wildner  * base code distributed originally by Intel ("Original Intel Code") to copy,
25b4315fc7SSascha Wildner  * make derivatives, distribute, use and display any portion of the Covered
26b4315fc7SSascha Wildner  * Code in any form, with the right to sublicense such rights; and
27b4315fc7SSascha Wildner  *
28b4315fc7SSascha Wildner  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29b4315fc7SSascha Wildner  * license (with the right to sublicense), under only those claims of Intel
30b4315fc7SSascha Wildner  * patents that are infringed by the Original Intel Code, to make, use, sell,
31b4315fc7SSascha Wildner  * offer to sell, and import the Covered Code and derivative works thereof
32b4315fc7SSascha Wildner  * solely to the minimum extent necessary to exercise the above copyright
33b4315fc7SSascha Wildner  * license, and in no event shall the patent license extend to any additions
34b4315fc7SSascha Wildner  * to or modifications of the Original Intel Code. No other license or right
35b4315fc7SSascha Wildner  * is granted directly or by implication, estoppel or otherwise;
36b4315fc7SSascha Wildner  *
37b4315fc7SSascha Wildner  * The above copyright and patent license is granted only if the following
38b4315fc7SSascha Wildner  * conditions are met:
39b4315fc7SSascha Wildner  *
40b4315fc7SSascha Wildner  * 3. Conditions
41b4315fc7SSascha Wildner  *
42b4315fc7SSascha Wildner  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43b4315fc7SSascha Wildner  * Redistribution of source code of any substantial portion of the Covered
44b4315fc7SSascha Wildner  * Code or modification with rights to further distribute source must include
45b4315fc7SSascha Wildner  * the above Copyright Notice, the above License, this list of Conditions,
46b4315fc7SSascha Wildner  * and the following Disclaimer and Export Compliance provision. In addition,
47b4315fc7SSascha Wildner  * Licensee must cause all Covered Code to which Licensee contributes to
48b4315fc7SSascha Wildner  * contain a file documenting the changes Licensee made to create that Covered
49b4315fc7SSascha Wildner  * Code and the date of any change. Licensee must include in that file the
50b4315fc7SSascha Wildner  * documentation of any changes made by any predecessor Licensee. Licensee
51b4315fc7SSascha Wildner  * must include a prominent statement that the modification is derived,
52b4315fc7SSascha Wildner  * directly or indirectly, from Original Intel Code.
53b4315fc7SSascha Wildner  *
54b4315fc7SSascha Wildner  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55b4315fc7SSascha Wildner  * Redistribution of source code of any substantial portion of the Covered
56b4315fc7SSascha Wildner  * Code or modification without rights to further distribute source must
57b4315fc7SSascha Wildner  * include the following Disclaimer and Export Compliance provision in the
58b4315fc7SSascha Wildner  * documentation and/or other materials provided with distribution. In
59b4315fc7SSascha Wildner  * addition, Licensee may not authorize further sublicense of source of any
60b4315fc7SSascha Wildner  * portion of the Covered Code, and must include terms to the effect that the
61b4315fc7SSascha Wildner  * license from Licensee to its licensee is limited to the intellectual
62b4315fc7SSascha Wildner  * property embodied in the software Licensee provides to its licensee, and
63b4315fc7SSascha Wildner  * not to intellectual property embodied in modifications its licensee may
64b4315fc7SSascha Wildner  * make.
65b4315fc7SSascha Wildner  *
66b4315fc7SSascha Wildner  * 3.3. Redistribution of Executable. Redistribution in executable form of any
67b4315fc7SSascha Wildner  * substantial portion of the Covered Code or modification must reproduce the
68b4315fc7SSascha Wildner  * above Copyright Notice, and the following Disclaimer and Export Compliance
69b4315fc7SSascha Wildner  * provision in the documentation and/or other materials provided with the
70b4315fc7SSascha Wildner  * distribution.
71b4315fc7SSascha Wildner  *
72b4315fc7SSascha Wildner  * 3.4. Intel retains all right, title, and interest in and to the Original
73b4315fc7SSascha Wildner  * Intel Code.
74b4315fc7SSascha Wildner  *
75b4315fc7SSascha Wildner  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76b4315fc7SSascha Wildner  * Intel shall be used in advertising or otherwise to promote the sale, use or
77b4315fc7SSascha Wildner  * other dealings in products derived from or relating to the Covered Code
78b4315fc7SSascha Wildner  * without prior written authorization from Intel.
79b4315fc7SSascha Wildner  *
80b4315fc7SSascha Wildner  * 4. Disclaimer and Export Compliance
81b4315fc7SSascha Wildner  *
82b4315fc7SSascha Wildner  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83b4315fc7SSascha Wildner  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84b4315fc7SSascha Wildner  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85b4315fc7SSascha Wildner  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86b4315fc7SSascha Wildner  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87b4315fc7SSascha Wildner  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88b4315fc7SSascha Wildner  * PARTICULAR PURPOSE.
89b4315fc7SSascha Wildner  *
90b4315fc7SSascha Wildner  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91b4315fc7SSascha Wildner  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92b4315fc7SSascha Wildner  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93b4315fc7SSascha Wildner  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94b4315fc7SSascha Wildner  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95b4315fc7SSascha Wildner  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96b4315fc7SSascha Wildner  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97b4315fc7SSascha Wildner  * LIMITED REMEDY.
98b4315fc7SSascha Wildner  *
99b4315fc7SSascha Wildner  * 4.3. Licensee shall not export, either directly or indirectly, any of this
100b4315fc7SSascha Wildner  * software or system incorporating such software without first obtaining any
101b4315fc7SSascha Wildner  * required license or other approval from the U. S. Department of Commerce or
102b4315fc7SSascha Wildner  * any other agency or department of the United States Government. In the
103b4315fc7SSascha Wildner  * event Licensee exports any such software from the United States or
104b4315fc7SSascha Wildner  * re-exports any such software from a foreign destination, Licensee shall
105b4315fc7SSascha Wildner  * ensure that the distribution and export/re-export of the software is in
106b4315fc7SSascha Wildner  * compliance with all laws, regulations, orders, or other restrictions of the
107b4315fc7SSascha Wildner  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108b4315fc7SSascha Wildner  * any of its subsidiaries will export/re-export any technical data, process,
109b4315fc7SSascha Wildner  * software, or service, directly or indirectly, to any country for which the
110b4315fc7SSascha Wildner  * United States government or any agency thereof requires an export license,
111b4315fc7SSascha Wildner  * other governmental approval, or letter of assurance, without first obtaining
112b4315fc7SSascha Wildner  * such license, approval or letter.
113b4315fc7SSascha Wildner  *
114b4315fc7SSascha Wildner  *****************************************************************************
115b4315fc7SSascha Wildner  *
116b4315fc7SSascha Wildner  * Alternatively, you may choose to be licensed under the terms of the
117b4315fc7SSascha Wildner  * following license:
118b4315fc7SSascha Wildner  *
1190d02842fSSascha Wildner  * Redistribution and use in source and binary forms, with or without
1200d02842fSSascha Wildner  * modification, are permitted provided that the following conditions
1210d02842fSSascha Wildner  * are met:
1220d02842fSSascha Wildner  * 1. Redistributions of source code must retain the above copyright
1230d02842fSSascha Wildner  *    notice, this list of conditions, and the following disclaimer,
1240d02842fSSascha Wildner  *    without modification.
1250d02842fSSascha Wildner  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1260d02842fSSascha Wildner  *    substantially similar to the "NO WARRANTY" disclaimer below
1270d02842fSSascha Wildner  *    ("Disclaimer") and any redistribution must be conditioned upon
1280d02842fSSascha Wildner  *    including a substantially similar Disclaimer requirement for further
1290d02842fSSascha Wildner  *    binary redistribution.
1300d02842fSSascha Wildner  * 3. Neither the names of the above-listed copyright holders nor the names
1310d02842fSSascha Wildner  *    of any contributors may be used to endorse or promote products derived
1320d02842fSSascha Wildner  *    from this software without specific prior written permission.
1330d02842fSSascha Wildner  *
134b4315fc7SSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135b4315fc7SSascha Wildner  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136b4315fc7SSascha Wildner  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137b4315fc7SSascha Wildner  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138b4315fc7SSascha Wildner  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139b4315fc7SSascha Wildner  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140b4315fc7SSascha Wildner  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141b4315fc7SSascha Wildner  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142b4315fc7SSascha Wildner  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143b4315fc7SSascha Wildner  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144b4315fc7SSascha Wildner  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145b4315fc7SSascha Wildner  *
146b4315fc7SSascha Wildner  * Alternatively, you may choose to be licensed under the terms of the
1470d02842fSSascha Wildner  * GNU General Public License ("GPL") version 2 as published by the Free
1480d02842fSSascha Wildner  * Software Foundation.
1490d02842fSSascha Wildner  *
150b4315fc7SSascha Wildner  *****************************************************************************/
1510d02842fSSascha Wildner 
1520d02842fSSascha Wildner #include "aslcompiler.h"
1530d02842fSSascha Wildner #include "aslcompiler.y.h"
1540d02842fSSascha Wildner #include "amlcode.h"
1550d02842fSSascha Wildner #include "acparser.h"
1560d02842fSSascha Wildner #include "acnamesp.h"
1570d02842fSSascha Wildner 
1580d02842fSSascha Wildner 
1590d02842fSSascha Wildner #define _COMPONENT          ACPI_COMPILER
1600d02842fSSascha Wildner         ACPI_MODULE_NAME    ("asllisting")
1610d02842fSSascha Wildner 
1620d02842fSSascha Wildner 
1630d02842fSSascha Wildner /* Local prototypes */
1640d02842fSSascha Wildner 
1650d02842fSSascha Wildner static void
1660d02842fSSascha Wildner LsGenerateListing (
1670d02842fSSascha Wildner     UINT32                  FileId);
1680d02842fSSascha Wildner 
1690d02842fSSascha Wildner static ACPI_STATUS
1700d02842fSSascha Wildner LsAmlListingWalk (
1710d02842fSSascha Wildner     ACPI_PARSE_OBJECT       *Op,
1720d02842fSSascha Wildner     UINT32                  Level,
1730d02842fSSascha Wildner     void                    *Context);
1740d02842fSSascha Wildner 
1750d02842fSSascha Wildner static ACPI_STATUS
1760d02842fSSascha Wildner LsTreeWriteWalk (
1770d02842fSSascha Wildner     ACPI_PARSE_OBJECT       *Op,
1780d02842fSSascha Wildner     UINT32                  Level,
1790d02842fSSascha Wildner     void                    *Context);
1800d02842fSSascha Wildner 
1810d02842fSSascha Wildner static void
1820d02842fSSascha Wildner LsWriteNodeToListing (
1830d02842fSSascha Wildner     ACPI_PARSE_OBJECT       *Op,
1840d02842fSSascha Wildner     UINT32                  FileId);
1850d02842fSSascha Wildner 
1860d02842fSSascha Wildner static void
1870d02842fSSascha Wildner LsFinishSourceListing (
1880d02842fSSascha Wildner     UINT32                  FileId);
1890d02842fSSascha Wildner 
1900d02842fSSascha Wildner 
1910d02842fSSascha Wildner /*******************************************************************************
1920d02842fSSascha Wildner  *
1930d02842fSSascha Wildner  * FUNCTION:    LsDoListings
1940d02842fSSascha Wildner  *
1950d02842fSSascha Wildner  * PARAMETERS:  None. Examines the various output file global flags.
1960d02842fSSascha Wildner  *
1970d02842fSSascha Wildner  * RETURN:      None
1980d02842fSSascha Wildner  *
1990d02842fSSascha Wildner  * DESCRIPTION: Generate all requested listing files.
2000d02842fSSascha Wildner  *
2010d02842fSSascha Wildner  ******************************************************************************/
2020d02842fSSascha Wildner 
2030d02842fSSascha Wildner void
LsDoListings(void)2040d02842fSSascha Wildner LsDoListings (
2050d02842fSSascha Wildner     void)
2060d02842fSSascha Wildner {
2070d02842fSSascha Wildner 
208806343b9SSascha Wildner     if (AslGbl_C_OutputFlag)
2090d02842fSSascha Wildner     {
2100d02842fSSascha Wildner         LsGenerateListing (ASL_FILE_C_SOURCE_OUTPUT);
2110d02842fSSascha Wildner     }
2120d02842fSSascha Wildner 
213806343b9SSascha Wildner     if (AslGbl_ListingFlag)
2140d02842fSSascha Wildner     {
2150d02842fSSascha Wildner         LsGenerateListing (ASL_FILE_LISTING_OUTPUT);
2160d02842fSSascha Wildner     }
2170d02842fSSascha Wildner 
218806343b9SSascha Wildner     if (AslGbl_AsmOutputFlag)
2190d02842fSSascha Wildner     {
2200d02842fSSascha Wildner         LsGenerateListing (ASL_FILE_ASM_SOURCE_OUTPUT);
2210d02842fSSascha Wildner     }
2220d02842fSSascha Wildner 
223806343b9SSascha Wildner     if (AslGbl_C_IncludeOutputFlag)
2240d02842fSSascha Wildner     {
2250d02842fSSascha Wildner         LsGenerateListing (ASL_FILE_C_INCLUDE_OUTPUT);
2260d02842fSSascha Wildner     }
2270d02842fSSascha Wildner 
228806343b9SSascha Wildner     if (AslGbl_AsmIncludeOutputFlag)
2290d02842fSSascha Wildner     {
2300d02842fSSascha Wildner         LsGenerateListing (ASL_FILE_ASM_INCLUDE_OUTPUT);
2310d02842fSSascha Wildner     }
2320d02842fSSascha Wildner 
233806343b9SSascha Wildner     if (AslGbl_C_OffsetTableFlag)
2340d02842fSSascha Wildner     {
2350d02842fSSascha Wildner         LsGenerateListing (ASL_FILE_C_OFFSET_OUTPUT);
2360d02842fSSascha Wildner     }
2370d02842fSSascha Wildner }
2380d02842fSSascha Wildner 
2390d02842fSSascha Wildner 
2400d02842fSSascha Wildner /*******************************************************************************
2410d02842fSSascha Wildner  *
2420d02842fSSascha Wildner  * FUNCTION:    LsGenerateListing
2430d02842fSSascha Wildner  *
2440d02842fSSascha Wildner  * PARAMETERS:  FileId      - ID of listing file
2450d02842fSSascha Wildner  *
2460d02842fSSascha Wildner  * RETURN:      None
2470d02842fSSascha Wildner  *
2480d02842fSSascha Wildner  * DESCRIPTION: Generate a listing file. This can be one of the several types
2490d02842fSSascha Wildner  *              of "listings" supported.
2500d02842fSSascha Wildner  *
2510d02842fSSascha Wildner  ******************************************************************************/
2520d02842fSSascha Wildner 
2530d02842fSSascha Wildner static void
LsGenerateListing(UINT32 FileId)2540d02842fSSascha Wildner LsGenerateListing (
2550d02842fSSascha Wildner     UINT32                  FileId)
2560d02842fSSascha Wildner {
257a4b9c0c9SSascha Wildner     UINT32                  WalkMode = ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_DB_SEPARATELY;
2580d02842fSSascha Wildner 
2590d02842fSSascha Wildner     /* Start at the beginning of both the source and AML files */
2600d02842fSSascha Wildner 
2610d02842fSSascha Wildner     FlSeekFile (ASL_FILE_SOURCE_OUTPUT, 0);
2620d02842fSSascha Wildner     FlSeekFile (ASL_FILE_AML_OUTPUT, 0);
263806343b9SSascha Wildner     AslGbl_SourceLine = 0;
264806343b9SSascha Wildner     AslGbl_CurrentHexColumn = 0;
265806343b9SSascha Wildner     LsPushNode (AslGbl_Files[ASL_FILE_INPUT].Filename);
2660d02842fSSascha Wildner 
2670d02842fSSascha Wildner     if (FileId == ASL_FILE_C_OFFSET_OUTPUT)
2680d02842fSSascha Wildner     {
269806343b9SSascha Wildner         AslGbl_CurrentAmlOffset = 0;
2700d02842fSSascha Wildner 
2710d02842fSSascha Wildner         /* Offset table file has a special header and footer */
2720d02842fSSascha Wildner 
2730d02842fSSascha Wildner         LsDoOffsetTableHeader (FileId);
2740d02842fSSascha Wildner 
275a4b9c0c9SSascha Wildner         TrWalkParseTree (AslGbl_CurrentDB, WalkMode,
2767c9678bcSSascha Wildner             LsAmlOffsetWalk, NULL, (void *) ACPI_TO_POINTER (FileId));
2770d02842fSSascha Wildner         LsDoOffsetTableFooter (FileId);
2780d02842fSSascha Wildner         return;
2790d02842fSSascha Wildner     }
2800d02842fSSascha Wildner 
2810d02842fSSascha Wildner     /* Process all parse nodes */
2820d02842fSSascha Wildner 
283a4b9c0c9SSascha Wildner     TrWalkParseTree (AslGbl_CurrentDB, WalkMode,
2847c9678bcSSascha Wildner         LsAmlListingWalk, NULL, (void *) ACPI_TO_POINTER (FileId));
2850d02842fSSascha Wildner 
2860d02842fSSascha Wildner     /* Final processing */
2870d02842fSSascha Wildner 
2880d02842fSSascha Wildner     LsFinishSourceListing (FileId);
2890d02842fSSascha Wildner }
2900d02842fSSascha Wildner 
2910d02842fSSascha Wildner 
2920d02842fSSascha Wildner /*******************************************************************************
2930d02842fSSascha Wildner  *
2940d02842fSSascha Wildner  * FUNCTION:    LsAmlListingWalk
2950d02842fSSascha Wildner  *
2960d02842fSSascha Wildner  * PARAMETERS:  ASL_WALK_CALLBACK
2970d02842fSSascha Wildner  *
2980d02842fSSascha Wildner  * RETURN:      Status
2990d02842fSSascha Wildner  *
3000d02842fSSascha Wildner  * DESCRIPTION: Process one node during a listing file generation.
3010d02842fSSascha Wildner  *
3020d02842fSSascha Wildner  ******************************************************************************/
3030d02842fSSascha Wildner 
3040d02842fSSascha Wildner static ACPI_STATUS
LsAmlListingWalk(ACPI_PARSE_OBJECT * Op,UINT32 Level,void * Context)3050d02842fSSascha Wildner LsAmlListingWalk (
3060d02842fSSascha Wildner     ACPI_PARSE_OBJECT       *Op,
3070d02842fSSascha Wildner     UINT32                  Level,
3080d02842fSSascha Wildner     void                    *Context)
3090d02842fSSascha Wildner {
3100d02842fSSascha Wildner     UINT8                   FileByte;
3110d02842fSSascha Wildner     UINT32                  i;
3120d02842fSSascha Wildner     UINT32                  FileId = (UINT32) ACPI_TO_INTEGER (Context);
3130d02842fSSascha Wildner 
3140d02842fSSascha Wildner 
3150d02842fSSascha Wildner     LsWriteNodeToListing (Op, FileId);
3160d02842fSSascha Wildner 
3171093ca81SSascha Wildner     if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DATA)
3180d02842fSSascha Wildner     {
3190d02842fSSascha Wildner         /* Buffer is a resource template, don't dump the data all at once */
3200d02842fSSascha Wildner 
3210d02842fSSascha Wildner         return (AE_OK);
3220d02842fSSascha Wildner     }
3230d02842fSSascha Wildner 
324820c5b08SSascha Wildner     if ((FileId == ASL_FILE_ASM_INCLUDE_OUTPUT) ||
325820c5b08SSascha Wildner         (FileId == ASL_FILE_C_INCLUDE_OUTPUT))
326820c5b08SSascha Wildner     {
327820c5b08SSascha Wildner         return (AE_OK);
328820c5b08SSascha Wildner     }
329820c5b08SSascha Wildner 
3300d02842fSSascha Wildner     /* Write the hex bytes to the listing file(s) (if requested) */
3310d02842fSSascha Wildner 
3320d02842fSSascha Wildner     for (i = 0; i < Op->Asl.FinalAmlLength; i++)
3330d02842fSSascha Wildner     {
3340d02842fSSascha Wildner         if (ACPI_FAILURE (FlReadFile (ASL_FILE_AML_OUTPUT, &FileByte, 1)))
3350d02842fSSascha Wildner         {
3360d02842fSSascha Wildner             FlFileError (ASL_FILE_AML_OUTPUT, ASL_MSG_READ);
3370d02842fSSascha Wildner             AslAbort ();
3380d02842fSSascha Wildner         }
339820c5b08SSascha Wildner 
3400d02842fSSascha Wildner         LsWriteListingHexBytes (&FileByte, 1, FileId);
3410d02842fSSascha Wildner     }
3420d02842fSSascha Wildner 
3430d02842fSSascha Wildner     return (AE_OK);
3440d02842fSSascha Wildner }
3450d02842fSSascha Wildner 
3460d02842fSSascha Wildner 
3470d02842fSSascha Wildner /*******************************************************************************
3480d02842fSSascha Wildner  *
3490d02842fSSascha Wildner  * FUNCTION:    LsDumpParseTree, LsTreeWriteWalk
3500d02842fSSascha Wildner  *
3510d02842fSSascha Wildner  * PARAMETERS:  None
3520d02842fSSascha Wildner  *
3530d02842fSSascha Wildner  * RETURN:      None
3540d02842fSSascha Wildner  *
3550d02842fSSascha Wildner  * DESCRIPTION: Dump entire parse tree, for compiler debug only
3560d02842fSSascha Wildner  *
3570d02842fSSascha Wildner  ******************************************************************************/
3580d02842fSSascha Wildner 
3590d02842fSSascha Wildner void
LsDumpParseTree(void)3600d02842fSSascha Wildner LsDumpParseTree (
3610d02842fSSascha Wildner     void)
3620d02842fSSascha Wildner {
3630d02842fSSascha Wildner 
364806343b9SSascha Wildner     if (!AslGbl_DebugFlag)
3650d02842fSSascha Wildner     {
3660d02842fSSascha Wildner         return;
3670d02842fSSascha Wildner     }
3680d02842fSSascha Wildner 
3690d02842fSSascha Wildner     DbgPrint (ASL_TREE_OUTPUT, "\nOriginal parse tree from parser:\n\n");
3707c9678bcSSascha Wildner     DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_HEADER1);
3717c9678bcSSascha Wildner 
372806343b9SSascha Wildner     TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD,
3730d02842fSSascha Wildner         LsTreeWriteWalk, NULL, NULL);
3747c9678bcSSascha Wildner 
3757c9678bcSSascha Wildner     DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_HEADER1);
3760d02842fSSascha Wildner }
3770d02842fSSascha Wildner 
3780d02842fSSascha Wildner 
3790d02842fSSascha Wildner static ACPI_STATUS
LsTreeWriteWalk(ACPI_PARSE_OBJECT * Op,UINT32 Level,void * Context)3800d02842fSSascha Wildner LsTreeWriteWalk (
3810d02842fSSascha Wildner     ACPI_PARSE_OBJECT       *Op,
3820d02842fSSascha Wildner     UINT32                  Level,
3830d02842fSSascha Wildner     void                    *Context)
3840d02842fSSascha Wildner {
3850d02842fSSascha Wildner 
3867c9678bcSSascha Wildner     /* Dump ParseOp name and possible value */
3870d02842fSSascha Wildner 
3887c9678bcSSascha Wildner     switch (Op->Asl.ParseOpcode)
3897c9678bcSSascha Wildner     {
3907c9678bcSSascha Wildner         case PARSEOP_NAMESEG:
3917c9678bcSSascha Wildner         case PARSEOP_NAMESTRING:
3927c9678bcSSascha Wildner         case PARSEOP_METHODCALL:
3937c9678bcSSascha Wildner         case PARSEOP_STRING_LITERAL:
3940d02842fSSascha Wildner 
3957c9678bcSSascha Wildner         UtDumpStringOp (Op, Level);
3967c9678bcSSascha Wildner         break;
3970d02842fSSascha Wildner 
3987c9678bcSSascha Wildner     case PARSEOP_BYTECONST:
3997c9678bcSSascha Wildner 
4007c9678bcSSascha Wildner         UtDumpIntegerOp (Op, Level, 2);
4017c9678bcSSascha Wildner         break;
4027c9678bcSSascha Wildner 
4037c9678bcSSascha Wildner     case PARSEOP_WORDCONST:
4047c9678bcSSascha Wildner     case PARSEOP_PACKAGE_LENGTH:
4057c9678bcSSascha Wildner 
4067c9678bcSSascha Wildner         UtDumpIntegerOp (Op, Level, 4);
4077c9678bcSSascha Wildner         break;
4087c9678bcSSascha Wildner 
4097c9678bcSSascha Wildner     case PARSEOP_DWORDCONST:
4107c9678bcSSascha Wildner     case PARSEOP_EISAID:
4117c9678bcSSascha Wildner 
4127c9678bcSSascha Wildner         UtDumpIntegerOp (Op, Level, 8);
4137c9678bcSSascha Wildner         break;
4147c9678bcSSascha Wildner 
4157c9678bcSSascha Wildner     case PARSEOP_QWORDCONST:
4167c9678bcSSascha Wildner     case PARSEOP_INTEGER:
4177c9678bcSSascha Wildner     case PARSEOP_ONE:
4187c9678bcSSascha Wildner     case PARSEOP_ZERO:
4197c9678bcSSascha Wildner     case PARSEOP_ONES:
4207c9678bcSSascha Wildner 
4217c9678bcSSascha Wildner         UtDumpIntegerOp (Op, Level, 16);
4227c9678bcSSascha Wildner         break;
4237c9678bcSSascha Wildner 
4247c9678bcSSascha Wildner     case PARSEOP_INCLUDE:
4257c9678bcSSascha Wildner 
426f5f76cf2SSascha Wildner         DbgPrint (ASL_TREE_OUTPUT,
427f5f76cf2SSascha Wildner             "Open: %s\n", Op->Asl.Value.String);
428f5f76cf2SSascha Wildner         return (AE_OK);
4297c9678bcSSascha Wildner 
4307c9678bcSSascha Wildner     case PARSEOP_INCLUDE_END:
4317c9678bcSSascha Wildner 
432f5f76cf2SSascha Wildner         DbgPrint (ASL_TREE_OUTPUT,
433f5f76cf2SSascha Wildner             "Close: %s\n", Op->Asl.Filename);
434f5f76cf2SSascha Wildner         return (AE_OK);
4357c9678bcSSascha Wildner 
4367c9678bcSSascha Wildner     default:
4377c9678bcSSascha Wildner 
4387c9678bcSSascha Wildner         UtDumpBasicOp (Op, Level);
4397c9678bcSSascha Wildner         break;
440f5f76cf2SSascha Wildner     }
441f5f76cf2SSascha Wildner 
4427c9678bcSSascha Wildner     /* Dump the remaining data */
4437c9678bcSSascha Wildner 
4447c9678bcSSascha Wildner     DbgPrint (ASL_TREE_OUTPUT, ASL_PARSE_TREE_DEBUG1,
4457c9678bcSSascha Wildner         Op->Asl.ParseOpcode, Op->Asl.CompileFlags,
4467c9678bcSSascha Wildner         Op->Asl.LineNumber, Op->Asl.EndLine,
4477c9678bcSSascha Wildner         Op->Asl.LogicalLineNumber, Op->Asl.EndLogicalLine);
4487c9678bcSSascha Wildner 
4491093ca81SSascha Wildner     TrPrintOpFlags (Op->Asl.CompileFlags, ASL_TREE_OUTPUT);
4505943f66cSSascha Wildner     DbgPrint (ASL_TREE_OUTPUT, "\n");
4510d02842fSSascha Wildner     return (AE_OK);
4520d02842fSSascha Wildner }
4530d02842fSSascha Wildner 
4540d02842fSSascha Wildner 
4550d02842fSSascha Wildner /*******************************************************************************
4560d02842fSSascha Wildner  *
4570d02842fSSascha Wildner  * FUNCTION:    LsWriteNodeToListing
4580d02842fSSascha Wildner  *
4590d02842fSSascha Wildner  * PARAMETERS:  Op              - Parse node to write to the listing file.
4600d02842fSSascha Wildner  *              FileId          - ID of current listing file
4610d02842fSSascha Wildner  *
4620d02842fSSascha Wildner  * RETURN:      None.
4630d02842fSSascha Wildner  *
4640d02842fSSascha Wildner  * DESCRIPTION: Write "a node" to the listing file. This means to
4650d02842fSSascha Wildner  *              1) Write out all of the source text associated with the node
4660d02842fSSascha Wildner  *              2) Write out all of the AML bytes associated with the node
4670d02842fSSascha Wildner  *              3) Write any compiler exceptions associated with the node
4680d02842fSSascha Wildner  *
4690d02842fSSascha Wildner  ******************************************************************************/
4700d02842fSSascha Wildner 
4710d02842fSSascha Wildner static void
LsWriteNodeToListing(ACPI_PARSE_OBJECT * Op,UINT32 FileId)4720d02842fSSascha Wildner LsWriteNodeToListing (
4730d02842fSSascha Wildner     ACPI_PARSE_OBJECT       *Op,
4740d02842fSSascha Wildner     UINT32                  FileId)
4750d02842fSSascha Wildner {
4760d02842fSSascha Wildner     const ACPI_OPCODE_INFO  *OpInfo;
4770d02842fSSascha Wildner     UINT32                  OpClass;
4780d02842fSSascha Wildner     char                    *Pathname;
4790d02842fSSascha Wildner     UINT32                  Length;
4800d02842fSSascha Wildner     UINT32                  i;
4810d02842fSSascha Wildner 
4820d02842fSSascha Wildner 
4830d02842fSSascha Wildner     OpInfo  = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
4840d02842fSSascha Wildner     OpClass = OpInfo->Class;
4850d02842fSSascha Wildner 
4860d02842fSSascha Wildner     /* TBD: clean this up with a single flag that says:
4870d02842fSSascha Wildner      * I start a named output block
4880d02842fSSascha Wildner      */
4890d02842fSSascha Wildner     if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
4900d02842fSSascha Wildner     {
4910d02842fSSascha Wildner         switch (Op->Asl.ParseOpcode)
4920d02842fSSascha Wildner         {
493820c5b08SSascha Wildner         case PARSEOP_DEFINITION_BLOCK:
4940d02842fSSascha Wildner         case PARSEOP_METHODCALL:
4950d02842fSSascha Wildner         case PARSEOP_INCLUDE:
4960d02842fSSascha Wildner         case PARSEOP_INCLUDE_END:
4970d02842fSSascha Wildner         case PARSEOP_DEFAULT_ARG:
4980d02842fSSascha Wildner 
4990d02842fSSascha Wildner             break;
5000d02842fSSascha Wildner 
5010d02842fSSascha Wildner         default:
5020d02842fSSascha Wildner 
5030d02842fSSascha Wildner             switch (OpClass)
5040d02842fSSascha Wildner             {
5050d02842fSSascha Wildner             case AML_CLASS_NAMED_OBJECT:
5060d02842fSSascha Wildner 
5070d02842fSSascha Wildner                 switch (Op->Asl.AmlOpcode)
5080d02842fSSascha Wildner                 {
5090d02842fSSascha Wildner                 case AML_SCOPE_OP:
5100d02842fSSascha Wildner                 case AML_ALIAS_OP:
5110d02842fSSascha Wildner 
5120d02842fSSascha Wildner                     break;
5130d02842fSSascha Wildner 
5140d02842fSSascha Wildner                 default:
5150d02842fSSascha Wildner 
5160d02842fSSascha Wildner                     if (Op->Asl.ExternalName)
5170d02842fSSascha Wildner                     {
5180d02842fSSascha Wildner                         LsFlushListingBuffer (FileId);
5190d02842fSSascha Wildner                         FlPrintFile (FileId, "    };\n");
5200d02842fSSascha Wildner                     }
5210d02842fSSascha Wildner                     break;
5220d02842fSSascha Wildner                 }
5230d02842fSSascha Wildner                 break;
5240d02842fSSascha Wildner 
5250d02842fSSascha Wildner             default:
5260d02842fSSascha Wildner 
5270d02842fSSascha Wildner                 /* Don't care about other objects */
5280d02842fSSascha Wildner 
5290d02842fSSascha Wildner                 break;
5300d02842fSSascha Wildner             }
5310d02842fSSascha Wildner             break;
5320d02842fSSascha Wildner         }
5330d02842fSSascha Wildner     }
5340d02842fSSascha Wildner 
5350d02842fSSascha Wildner     /* These cases do not have a corresponding AML opcode */
5360d02842fSSascha Wildner 
5370d02842fSSascha Wildner     switch (Op->Asl.ParseOpcode)
5380d02842fSSascha Wildner     {
539820c5b08SSascha Wildner     case PARSEOP_DEFINITION_BLOCK:
5400d02842fSSascha Wildner 
5417c9678bcSSascha Wildner         /* Always start a definition block at AML offset zero */
5427c9678bcSSascha Wildner 
543806343b9SSascha Wildner         AslGbl_CurrentAmlOffset = 0;
5440d02842fSSascha Wildner         LsWriteSourceLines (Op->Asl.EndLine, Op->Asl.EndLogicalLine, FileId);
5450d02842fSSascha Wildner 
5460d02842fSSascha Wildner         /* Use the table Signature and TableId to build a unique name */
5470d02842fSSascha Wildner 
548820c5b08SSascha Wildner         switch (FileId)
5490d02842fSSascha Wildner         {
550820c5b08SSascha Wildner         case ASL_FILE_ASM_SOURCE_OUTPUT:
551820c5b08SSascha Wildner 
5520d02842fSSascha Wildner             FlPrintFile (FileId,
5530d02842fSSascha Wildner                 "%s_%s_Header \\\n",
554806343b9SSascha Wildner                 AslGbl_TableSignature, AslGbl_TableId);
555820c5b08SSascha Wildner             break;
556820c5b08SSascha Wildner 
557820c5b08SSascha Wildner         case ASL_FILE_C_SOURCE_OUTPUT:
558820c5b08SSascha Wildner 
5590d02842fSSascha Wildner             FlPrintFile (FileId,
5600d02842fSSascha Wildner                 "    unsigned char    %s_%s_Header [] =\n    {\n",
561806343b9SSascha Wildner                 AslGbl_TableSignature, AslGbl_TableId);
562820c5b08SSascha Wildner             break;
563820c5b08SSascha Wildner 
564820c5b08SSascha Wildner         case ASL_FILE_ASM_INCLUDE_OUTPUT:
565820c5b08SSascha Wildner 
5660d02842fSSascha Wildner             FlPrintFile (FileId,
5670d02842fSSascha Wildner                 "extrn %s_%s_Header : byte\n",
568806343b9SSascha Wildner                 AslGbl_TableSignature, AslGbl_TableId);
569820c5b08SSascha Wildner             break;
570820c5b08SSascha Wildner 
571820c5b08SSascha Wildner         case ASL_FILE_C_INCLUDE_OUTPUT:
572820c5b08SSascha Wildner 
5730d02842fSSascha Wildner             FlPrintFile (FileId,
5740d02842fSSascha Wildner                 "extern unsigned char    %s_%s_Header [];\n",
575806343b9SSascha Wildner                 AslGbl_TableSignature, AslGbl_TableId);
576820c5b08SSascha Wildner             break;
577820c5b08SSascha Wildner 
578820c5b08SSascha Wildner         default:
579820c5b08SSascha Wildner             break;
5800d02842fSSascha Wildner         }
581820c5b08SSascha Wildner 
5820d02842fSSascha Wildner         return;
5830d02842fSSascha Wildner 
5840d02842fSSascha Wildner 
5850d02842fSSascha Wildner     case PARSEOP_METHODCALL:
5860d02842fSSascha Wildner 
5870d02842fSSascha Wildner         LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
5880d02842fSSascha Wildner             FileId);
5890d02842fSSascha Wildner         return;
5900d02842fSSascha Wildner 
5910d02842fSSascha Wildner 
5920d02842fSSascha Wildner     case PARSEOP_INCLUDE:
5930d02842fSSascha Wildner 
5940d02842fSSascha Wildner         /* Flush everything up to and including the include source line */
5950d02842fSSascha Wildner 
5960d02842fSSascha Wildner         LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
5970d02842fSSascha Wildner             FileId);
5980d02842fSSascha Wildner 
5990d02842fSSascha Wildner         /* Create a new listing node and push it */
6000d02842fSSascha Wildner 
601f5f76cf2SSascha Wildner         LsPushNode (Op->Asl.Value.String);
6020d02842fSSascha Wildner         return;
6030d02842fSSascha Wildner 
6040d02842fSSascha Wildner 
6050d02842fSSascha Wildner     case PARSEOP_INCLUDE_END:
6060d02842fSSascha Wildner 
6070d02842fSSascha Wildner         /* Flush out the rest of the include file */
6080d02842fSSascha Wildner 
6090d02842fSSascha Wildner         LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
6100d02842fSSascha Wildner             FileId);
6110d02842fSSascha Wildner 
6120d02842fSSascha Wildner         /* Pop off this listing node and go back to the parent file */
6130d02842fSSascha Wildner 
6140d02842fSSascha Wildner         (void) LsPopNode ();
6150d02842fSSascha Wildner         return;
6160d02842fSSascha Wildner 
6170d02842fSSascha Wildner 
6180d02842fSSascha Wildner     case PARSEOP_DEFAULT_ARG:
6190d02842fSSascha Wildner 
6201093ca81SSascha Wildner         if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC)
6210d02842fSSascha Wildner         {
6220d02842fSSascha Wildner             LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.EndLogicalLine,
6230d02842fSSascha Wildner                 FileId);
6240d02842fSSascha Wildner         }
6250d02842fSSascha Wildner         return;
6260d02842fSSascha Wildner 
6270d02842fSSascha Wildner 
6280d02842fSSascha Wildner     default:
6290d02842fSSascha Wildner 
6300d02842fSSascha Wildner         /* All other opcodes have an AML opcode */
6310d02842fSSascha Wildner 
6320d02842fSSascha Wildner         break;
6330d02842fSSascha Wildner     }
6340d02842fSSascha Wildner 
6350d02842fSSascha Wildner     /*
6360d02842fSSascha Wildner      * Otherwise, we look at the AML opcode because we can
6370d02842fSSascha Wildner      * switch on the opcode type, getting an entire class
6380d02842fSSascha Wildner      * at once
6390d02842fSSascha Wildner      */
6400d02842fSSascha Wildner     switch (OpClass)
6410d02842fSSascha Wildner     {
6420d02842fSSascha Wildner     case AML_CLASS_ARGUMENT:       /* argument type only */
6430d02842fSSascha Wildner     case AML_CLASS_INTERNAL:
6440d02842fSSascha Wildner 
6450d02842fSSascha Wildner         break;
6460d02842fSSascha Wildner 
6470d02842fSSascha Wildner     case AML_CLASS_NAMED_OBJECT:
6480d02842fSSascha Wildner 
6490d02842fSSascha Wildner         switch (Op->Asl.AmlOpcode)
6500d02842fSSascha Wildner         {
6510d02842fSSascha Wildner         case AML_FIELD_OP:
6520d02842fSSascha Wildner         case AML_INDEX_FIELD_OP:
6530d02842fSSascha Wildner         case AML_BANK_FIELD_OP:
6540d02842fSSascha Wildner             /*
6550d02842fSSascha Wildner              * For fields, we want to dump all the AML after the
6560d02842fSSascha Wildner              * entire definition
6570d02842fSSascha Wildner              */
6580d02842fSSascha Wildner             LsWriteSourceLines (Op->Asl.EndLine, Op->Asl.EndLogicalLine,
6590d02842fSSascha Wildner                 FileId);
6600d02842fSSascha Wildner             break;
6610d02842fSSascha Wildner 
6620d02842fSSascha Wildner         case AML_NAME_OP:
6630d02842fSSascha Wildner 
6641093ca81SSascha Wildner             if (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC)
6650d02842fSSascha Wildner             {
6660d02842fSSascha Wildner                 LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
6670d02842fSSascha Wildner                     FileId);
6680d02842fSSascha Wildner             }
6690d02842fSSascha Wildner             else
6700d02842fSSascha Wildner             {
6710d02842fSSascha Wildner                 /*
6720d02842fSSascha Wildner                  * For fields, we want to dump all the AML after the
6730d02842fSSascha Wildner                  * entire definition
6740d02842fSSascha Wildner                  */
6750d02842fSSascha Wildner                 LsWriteSourceLines (Op->Asl.EndLine, Op->Asl.EndLogicalLine,
6760d02842fSSascha Wildner                     FileId);
6770d02842fSSascha Wildner             }
6780d02842fSSascha Wildner             break;
6790d02842fSSascha Wildner 
6800d02842fSSascha Wildner         default:
6810d02842fSSascha Wildner 
6820d02842fSSascha Wildner             LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
6830d02842fSSascha Wildner                 FileId);
6840d02842fSSascha Wildner             break;
6850d02842fSSascha Wildner         }
6860d02842fSSascha Wildner 
6870d02842fSSascha Wildner         switch (Op->Asl.AmlOpcode)
6880d02842fSSascha Wildner         {
6890d02842fSSascha Wildner         case AML_SCOPE_OP:
6900d02842fSSascha Wildner         case AML_ALIAS_OP:
6910d02842fSSascha Wildner 
6920d02842fSSascha Wildner             /* These opcodes do not declare a new object, ignore them */
6930d02842fSSascha Wildner 
6940d02842fSSascha Wildner             break;
6950d02842fSSascha Wildner 
6960d02842fSSascha Wildner         default:
6970d02842fSSascha Wildner 
6980d02842fSSascha Wildner             /* All other named object opcodes come here */
6990d02842fSSascha Wildner 
7000d02842fSSascha Wildner             switch (FileId)
7010d02842fSSascha Wildner             {
7020d02842fSSascha Wildner             case ASL_FILE_ASM_SOURCE_OUTPUT:
7030d02842fSSascha Wildner             case ASL_FILE_C_SOURCE_OUTPUT:
7040d02842fSSascha Wildner             case ASL_FILE_ASM_INCLUDE_OUTPUT:
7050d02842fSSascha Wildner             case ASL_FILE_C_INCLUDE_OUTPUT:
7060d02842fSSascha Wildner                 /*
7070d02842fSSascha Wildner                  * For named objects, we will create a valid symbol so that the
7080d02842fSSascha Wildner                  * AML code can be referenced from C or ASM
7090d02842fSSascha Wildner                  */
7100d02842fSSascha Wildner                 if (Op->Asl.ExternalName)
7110d02842fSSascha Wildner                 {
7120d02842fSSascha Wildner                     /* Get the full pathname associated with this node */
7130d02842fSSascha Wildner 
7140d02842fSSascha Wildner                     Pathname = AcpiNsGetExternalPathname (Op->Asl.Node);
7150d02842fSSascha Wildner                     Length = strlen (Pathname);
7160d02842fSSascha Wildner                     if (Length >= 4)
7170d02842fSSascha Wildner                     {
7180d02842fSSascha Wildner                         /* Convert all dots in the path to underscores */
7190d02842fSSascha Wildner 
7200d02842fSSascha Wildner                         for (i = 0; i < Length; i++)
7210d02842fSSascha Wildner                         {
7220d02842fSSascha Wildner                             if (Pathname[i] == '.')
7230d02842fSSascha Wildner                             {
7240d02842fSSascha Wildner                                 Pathname[i] = '_';
7250d02842fSSascha Wildner                             }
7260d02842fSSascha Wildner                         }
7270d02842fSSascha Wildner 
7280d02842fSSascha Wildner                         /* Create the appropriate symbol in the output file */
7290d02842fSSascha Wildner 
730820c5b08SSascha Wildner                         switch (FileId)
7310d02842fSSascha Wildner                         {
732820c5b08SSascha Wildner                         case ASL_FILE_ASM_SOURCE_OUTPUT:
733820c5b08SSascha Wildner 
7340d02842fSSascha Wildner                             FlPrintFile (FileId,
7350d02842fSSascha Wildner                                 "%s_%s_%s  \\\n",
736806343b9SSascha Wildner                                 AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]);
737820c5b08SSascha Wildner                             break;
738820c5b08SSascha Wildner 
739820c5b08SSascha Wildner                         case ASL_FILE_C_SOURCE_OUTPUT:
740820c5b08SSascha Wildner 
7410d02842fSSascha Wildner                             FlPrintFile (FileId,
7420d02842fSSascha Wildner                                 "    unsigned char    %s_%s_%s [] =\n    {\n",
743806343b9SSascha Wildner                                 AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]);
744820c5b08SSascha Wildner                             break;
745820c5b08SSascha Wildner 
746820c5b08SSascha Wildner                         case ASL_FILE_ASM_INCLUDE_OUTPUT:
747820c5b08SSascha Wildner 
7480d02842fSSascha Wildner                             FlPrintFile (FileId,
7490d02842fSSascha Wildner                                 "extrn %s_%s_%s : byte\n",
750806343b9SSascha Wildner                                 AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]);
751820c5b08SSascha Wildner                             break;
752820c5b08SSascha Wildner 
753820c5b08SSascha Wildner                         case ASL_FILE_C_INCLUDE_OUTPUT:
754820c5b08SSascha Wildner 
7550d02842fSSascha Wildner                             FlPrintFile (FileId,
7560d02842fSSascha Wildner                                 "extern unsigned char    %s_%s_%s [];\n",
757806343b9SSascha Wildner                                 AslGbl_TableSignature, AslGbl_TableId, &Pathname[1]);
758820c5b08SSascha Wildner                             break;
759820c5b08SSascha Wildner 
760820c5b08SSascha Wildner                         default:
761820c5b08SSascha Wildner                             break;
7620d02842fSSascha Wildner                         }
7630d02842fSSascha Wildner                     }
764820c5b08SSascha Wildner 
7650d02842fSSascha Wildner                     ACPI_FREE (Pathname);
7660d02842fSSascha Wildner                 }
7670d02842fSSascha Wildner                 break;
7680d02842fSSascha Wildner 
7690d02842fSSascha Wildner             default:
7700d02842fSSascha Wildner 
7710d02842fSSascha Wildner                 /* Nothing to do for listing file */
7720d02842fSSascha Wildner 
7730d02842fSSascha Wildner                 break;
7740d02842fSSascha Wildner             }
7750d02842fSSascha Wildner         }
7760d02842fSSascha Wildner         break;
7770d02842fSSascha Wildner 
7780d02842fSSascha Wildner     case AML_CLASS_EXECUTE:
7790d02842fSSascha Wildner     case AML_CLASS_CREATE:
7800d02842fSSascha Wildner     default:
7810d02842fSSascha Wildner 
7820d02842fSSascha Wildner         if ((Op->Asl.ParseOpcode == PARSEOP_BUFFER) &&
7831093ca81SSascha Wildner             (Op->Asl.CompileFlags & OP_IS_RESOURCE_DESC))
7840d02842fSSascha Wildner         {
7850d02842fSSascha Wildner             return;
7860d02842fSSascha Wildner         }
7870d02842fSSascha Wildner 
7880d02842fSSascha Wildner         LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
7890d02842fSSascha Wildner             FileId);
7900d02842fSSascha Wildner         break;
7910d02842fSSascha Wildner 
7920d02842fSSascha Wildner     case AML_CLASS_UNKNOWN:
7930d02842fSSascha Wildner 
7940d02842fSSascha Wildner         break;
7950d02842fSSascha Wildner     }
7960d02842fSSascha Wildner }
7970d02842fSSascha Wildner 
7980d02842fSSascha Wildner 
7990d02842fSSascha Wildner /*******************************************************************************
8000d02842fSSascha Wildner  *
8010d02842fSSascha Wildner  * FUNCTION:    LsFinishSourceListing
8020d02842fSSascha Wildner  *
8030d02842fSSascha Wildner  * PARAMETERS:  FileId          - ID of current listing file.
8040d02842fSSascha Wildner  *
8050d02842fSSascha Wildner  * RETURN:      None
8060d02842fSSascha Wildner  *
8070d02842fSSascha Wildner  * DESCRIPTION: Cleanup routine for the listing file. Flush the hex AML
8080d02842fSSascha Wildner  *              listing buffer, and flush out any remaining lines in the
8090d02842fSSascha Wildner  *              source input file.
8100d02842fSSascha Wildner  *
8110d02842fSSascha Wildner  ******************************************************************************/
8120d02842fSSascha Wildner 
8130d02842fSSascha Wildner static void
LsFinishSourceListing(UINT32 FileId)8140d02842fSSascha Wildner LsFinishSourceListing (
8150d02842fSSascha Wildner     UINT32                  FileId)
8160d02842fSSascha Wildner {
8170d02842fSSascha Wildner 
8180d02842fSSascha Wildner     if ((FileId == ASL_FILE_ASM_INCLUDE_OUTPUT) ||
8190d02842fSSascha Wildner         (FileId == ASL_FILE_C_INCLUDE_OUTPUT))
8200d02842fSSascha Wildner     {
8210d02842fSSascha Wildner         return;
8220d02842fSSascha Wildner     }
8230d02842fSSascha Wildner 
8240d02842fSSascha Wildner     LsFlushListingBuffer (FileId);
825806343b9SSascha Wildner     AslGbl_CurrentAmlOffset = 0;
8260d02842fSSascha Wildner 
8270d02842fSSascha Wildner     /* Flush any remaining text in the source file */
8280d02842fSSascha Wildner 
8290d02842fSSascha Wildner     if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
8300d02842fSSascha Wildner     {
8310d02842fSSascha Wildner         FlPrintFile (FileId, "    /*\n");
8320d02842fSSascha Wildner     }
8330d02842fSSascha Wildner 
8340d02842fSSascha Wildner     while (LsWriteOneSourceLine (FileId))
8350d02842fSSascha Wildner     { ; }
8360d02842fSSascha Wildner 
8370d02842fSSascha Wildner     if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
8380d02842fSSascha Wildner     {
8390d02842fSSascha Wildner         FlPrintFile (FileId, "\n     */\n    };\n");
8400d02842fSSascha Wildner     }
8410d02842fSSascha Wildner 
8420d02842fSSascha Wildner     FlPrintFile (FileId, "\n");
8430d02842fSSascha Wildner 
8440d02842fSSascha Wildner     if (FileId == ASL_FILE_LISTING_OUTPUT)
8450d02842fSSascha Wildner     {
8460d02842fSSascha Wildner         /* Print a summary of the compile exceptions */
8470d02842fSSascha Wildner 
8480d02842fSSascha Wildner         FlPrintFile (FileId, "\n\nSummary of errors and warnings\n\n");
8490d02842fSSascha Wildner         AePrintErrorLog (FileId);
8500d02842fSSascha Wildner         FlPrintFile (FileId, "\n");
851a4b9c0c9SSascha Wildner         UtDisplayOneSummary (FileId, TRUE);
8520d02842fSSascha Wildner         FlPrintFile (FileId, "\n");
8530d02842fSSascha Wildner     }
8540d02842fSSascha Wildner }
855