1 820c5b08SSascha Wildner /******************************************************************************
2 820c5b08SSascha Wildner *
3 820c5b08SSascha Wildner * Module Name: dmtables - disassembler ACPI table support
4 820c5b08SSascha Wildner *
5 820c5b08SSascha Wildner *****************************************************************************/
6 820c5b08SSascha Wildner
7 b4315fc7SSascha Wildner /******************************************************************************
8 b4315fc7SSascha Wildner *
9 b4315fc7SSascha Wildner * 1. Copyright Notice
10 b4315fc7SSascha Wildner *
11 *383048acSSascha Wildner * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
12 820c5b08SSascha Wildner * All rights reserved.
13 820c5b08SSascha Wildner *
14 b4315fc7SSascha Wildner * 2. License
15 b4315fc7SSascha Wildner *
16 b4315fc7SSascha Wildner * 2.1. This is your license from Intel Corp. under its intellectual property
17 b4315fc7SSascha Wildner * rights. You may have additional license terms from the party that provided
18 b4315fc7SSascha Wildner * you this software, covering your right to use that party's intellectual
19 b4315fc7SSascha Wildner * property rights.
20 b4315fc7SSascha Wildner *
21 b4315fc7SSascha Wildner * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22 b4315fc7SSascha Wildner * copy of the source code appearing in this file ("Covered Code") an
23 b4315fc7SSascha Wildner * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24 b4315fc7SSascha Wildner * base code distributed originally by Intel ("Original Intel Code") to copy,
25 b4315fc7SSascha Wildner * make derivatives, distribute, use and display any portion of the Covered
26 b4315fc7SSascha Wildner * Code in any form, with the right to sublicense such rights; and
27 b4315fc7SSascha Wildner *
28 b4315fc7SSascha Wildner * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29 b4315fc7SSascha Wildner * license (with the right to sublicense), under only those claims of Intel
30 b4315fc7SSascha Wildner * patents that are infringed by the Original Intel Code, to make, use, sell,
31 b4315fc7SSascha Wildner * offer to sell, and import the Covered Code and derivative works thereof
32 b4315fc7SSascha Wildner * solely to the minimum extent necessary to exercise the above copyright
33 b4315fc7SSascha Wildner * license, and in no event shall the patent license extend to any additions
34 b4315fc7SSascha Wildner * to or modifications of the Original Intel Code. No other license or right
35 b4315fc7SSascha Wildner * is granted directly or by implication, estoppel or otherwise;
36 b4315fc7SSascha Wildner *
37 b4315fc7SSascha Wildner * The above copyright and patent license is granted only if the following
38 b4315fc7SSascha Wildner * conditions are met:
39 b4315fc7SSascha Wildner *
40 b4315fc7SSascha Wildner * 3. Conditions
41 b4315fc7SSascha Wildner *
42 b4315fc7SSascha Wildner * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43 b4315fc7SSascha Wildner * Redistribution of source code of any substantial portion of the Covered
44 b4315fc7SSascha Wildner * Code or modification with rights to further distribute source must include
45 b4315fc7SSascha Wildner * the above Copyright Notice, the above License, this list of Conditions,
46 b4315fc7SSascha Wildner * and the following Disclaimer and Export Compliance provision. In addition,
47 b4315fc7SSascha Wildner * Licensee must cause all Covered Code to which Licensee contributes to
48 b4315fc7SSascha Wildner * contain a file documenting the changes Licensee made to create that Covered
49 b4315fc7SSascha Wildner * Code and the date of any change. Licensee must include in that file the
50 b4315fc7SSascha Wildner * documentation of any changes made by any predecessor Licensee. Licensee
51 b4315fc7SSascha Wildner * must include a prominent statement that the modification is derived,
52 b4315fc7SSascha Wildner * directly or indirectly, from Original Intel Code.
53 b4315fc7SSascha Wildner *
54 b4315fc7SSascha Wildner * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55 b4315fc7SSascha Wildner * Redistribution of source code of any substantial portion of the Covered
56 b4315fc7SSascha Wildner * Code or modification without rights to further distribute source must
57 b4315fc7SSascha Wildner * include the following Disclaimer and Export Compliance provision in the
58 b4315fc7SSascha Wildner * documentation and/or other materials provided with distribution. In
59 b4315fc7SSascha Wildner * addition, Licensee may not authorize further sublicense of source of any
60 b4315fc7SSascha Wildner * portion of the Covered Code, and must include terms to the effect that the
61 b4315fc7SSascha Wildner * license from Licensee to its licensee is limited to the intellectual
62 b4315fc7SSascha Wildner * property embodied in the software Licensee provides to its licensee, and
63 b4315fc7SSascha Wildner * not to intellectual property embodied in modifications its licensee may
64 b4315fc7SSascha Wildner * make.
65 b4315fc7SSascha Wildner *
66 b4315fc7SSascha Wildner * 3.3. Redistribution of Executable. Redistribution in executable form of any
67 b4315fc7SSascha Wildner * substantial portion of the Covered Code or modification must reproduce the
68 b4315fc7SSascha Wildner * above Copyright Notice, and the following Disclaimer and Export Compliance
69 b4315fc7SSascha Wildner * provision in the documentation and/or other materials provided with the
70 b4315fc7SSascha Wildner * distribution.
71 b4315fc7SSascha Wildner *
72 b4315fc7SSascha Wildner * 3.4. Intel retains all right, title, and interest in and to the Original
73 b4315fc7SSascha Wildner * Intel Code.
74 b4315fc7SSascha Wildner *
75 b4315fc7SSascha Wildner * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76 b4315fc7SSascha Wildner * Intel shall be used in advertising or otherwise to promote the sale, use or
77 b4315fc7SSascha Wildner * other dealings in products derived from or relating to the Covered Code
78 b4315fc7SSascha Wildner * without prior written authorization from Intel.
79 b4315fc7SSascha Wildner *
80 b4315fc7SSascha Wildner * 4. Disclaimer and Export Compliance
81 b4315fc7SSascha Wildner *
82 b4315fc7SSascha Wildner * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83 b4315fc7SSascha Wildner * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84 b4315fc7SSascha Wildner * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85 b4315fc7SSascha Wildner * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86 b4315fc7SSascha Wildner * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87 b4315fc7SSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88 b4315fc7SSascha Wildner * PARTICULAR PURPOSE.
89 b4315fc7SSascha Wildner *
90 b4315fc7SSascha Wildner * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91 b4315fc7SSascha Wildner * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92 b4315fc7SSascha Wildner * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93 b4315fc7SSascha Wildner * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94 b4315fc7SSascha Wildner * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95 b4315fc7SSascha Wildner * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96 b4315fc7SSascha Wildner * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97 b4315fc7SSascha Wildner * LIMITED REMEDY.
98 b4315fc7SSascha Wildner *
99 b4315fc7SSascha Wildner * 4.3. Licensee shall not export, either directly or indirectly, any of this
100 b4315fc7SSascha Wildner * software or system incorporating such software without first obtaining any
101 b4315fc7SSascha Wildner * required license or other approval from the U. S. Department of Commerce or
102 b4315fc7SSascha Wildner * any other agency or department of the United States Government. In the
103 b4315fc7SSascha Wildner * event Licensee exports any such software from the United States or
104 b4315fc7SSascha Wildner * re-exports any such software from a foreign destination, Licensee shall
105 b4315fc7SSascha Wildner * ensure that the distribution and export/re-export of the software is in
106 b4315fc7SSascha Wildner * compliance with all laws, regulations, orders, or other restrictions of the
107 b4315fc7SSascha Wildner * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108 b4315fc7SSascha Wildner * any of its subsidiaries will export/re-export any technical data, process,
109 b4315fc7SSascha Wildner * software, or service, directly or indirectly, to any country for which the
110 b4315fc7SSascha Wildner * United States government or any agency thereof requires an export license,
111 b4315fc7SSascha Wildner * other governmental approval, or letter of assurance, without first obtaining
112 b4315fc7SSascha Wildner * such license, approval or letter.
113 b4315fc7SSascha Wildner *
114 b4315fc7SSascha Wildner *****************************************************************************
115 b4315fc7SSascha Wildner *
116 b4315fc7SSascha Wildner * Alternatively, you may choose to be licensed under the terms of the
117 b4315fc7SSascha Wildner * following license:
118 b4315fc7SSascha Wildner *
119 820c5b08SSascha Wildner * Redistribution and use in source and binary forms, with or without
120 820c5b08SSascha Wildner * modification, are permitted provided that the following conditions
121 820c5b08SSascha Wildner * are met:
122 820c5b08SSascha Wildner * 1. Redistributions of source code must retain the above copyright
123 820c5b08SSascha Wildner * notice, this list of conditions, and the following disclaimer,
124 820c5b08SSascha Wildner * without modification.
125 820c5b08SSascha Wildner * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126 820c5b08SSascha Wildner * substantially similar to the "NO WARRANTY" disclaimer below
127 820c5b08SSascha Wildner * ("Disclaimer") and any redistribution must be conditioned upon
128 820c5b08SSascha Wildner * including a substantially similar Disclaimer requirement for further
129 820c5b08SSascha Wildner * binary redistribution.
130 820c5b08SSascha Wildner * 3. Neither the names of the above-listed copyright holders nor the names
131 820c5b08SSascha Wildner * of any contributors may be used to endorse or promote products derived
132 820c5b08SSascha Wildner * from this software without specific prior written permission.
133 820c5b08SSascha Wildner *
134 b4315fc7SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135 b4315fc7SSascha Wildner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136 b4315fc7SSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137 b4315fc7SSascha Wildner * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138 b4315fc7SSascha Wildner * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139 b4315fc7SSascha Wildner * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140 b4315fc7SSascha Wildner * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141 b4315fc7SSascha Wildner * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142 b4315fc7SSascha Wildner * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143 b4315fc7SSascha Wildner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144 b4315fc7SSascha Wildner * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145 b4315fc7SSascha Wildner *
146 b4315fc7SSascha Wildner * Alternatively, you may choose to be licensed under the terms of the
147 820c5b08SSascha Wildner * GNU General Public License ("GPL") version 2 as published by the Free
148 820c5b08SSascha Wildner * Software Foundation.
149 820c5b08SSascha Wildner *
150 b4315fc7SSascha Wildner *****************************************************************************/
151 820c5b08SSascha Wildner
152 820c5b08SSascha Wildner #include "aslcompiler.h"
153 820c5b08SSascha Wildner #include "acdispat.h"
154 820c5b08SSascha Wildner #include "acnamesp.h"
155 820c5b08SSascha Wildner #include "actables.h"
156 820c5b08SSascha Wildner #include "acparser.h"
157 277350a0SSascha Wildner #include "acapps.h"
158 d638c6eeSSascha Wildner #include "acmacros.h"
159 d638c6eeSSascha Wildner #include "acconvert.h"
160 820c5b08SSascha Wildner
161 820c5b08SSascha Wildner
162 820c5b08SSascha Wildner #define _COMPONENT ACPI_TOOLS
163 820c5b08SSascha Wildner ACPI_MODULE_NAME ("dmtables")
164 820c5b08SSascha Wildner
165 820c5b08SSascha Wildner
166 820c5b08SSascha Wildner /* Local prototypes */
167 820c5b08SSascha Wildner
168 820c5b08SSascha Wildner static void
169 820c5b08SSascha Wildner AdCreateTableHeader (
170 820c5b08SSascha Wildner char *Filename,
171 820c5b08SSascha Wildner ACPI_TABLE_HEADER *Table);
172 820c5b08SSascha Wildner
173 820c5b08SSascha Wildner static ACPI_STATUS
174 820c5b08SSascha Wildner AdStoreTable (
175 820c5b08SSascha Wildner ACPI_TABLE_HEADER *Table,
176 820c5b08SSascha Wildner UINT32 *TableIndex);
177 820c5b08SSascha Wildner
178 820c5b08SSascha Wildner
179 820c5b08SSascha Wildner extern ACPI_TABLE_DESC LocalTables[1];
180 820c5b08SSascha Wildner extern ACPI_PARSE_OBJECT *AcpiGbl_ParseOpRoot;
181 820c5b08SSascha Wildner
182 820c5b08SSascha Wildner
183 820c5b08SSascha Wildner /******************************************************************************
184 820c5b08SSascha Wildner *
185 820c5b08SSascha Wildner * FUNCTION: AdDisassemblerHeader
186 820c5b08SSascha Wildner *
187 820c5b08SSascha Wildner * PARAMETERS: Filename - Input file for the table
188 820c5b08SSascha Wildner * TableType - Either AML or DataTable
189 820c5b08SSascha Wildner *
190 820c5b08SSascha Wildner * RETURN: None
191 820c5b08SSascha Wildner *
192 820c5b08SSascha Wildner * DESCRIPTION: Create the disassembler header, including ACPICA signon with
193 820c5b08SSascha Wildner * current time and date.
194 820c5b08SSascha Wildner *
195 820c5b08SSascha Wildner *****************************************************************************/
196 820c5b08SSascha Wildner
197 820c5b08SSascha Wildner void
AdDisassemblerHeader(char * Filename,UINT8 TableType)198 820c5b08SSascha Wildner AdDisassemblerHeader (
199 820c5b08SSascha Wildner char *Filename,
200 820c5b08SSascha Wildner UINT8 TableType)
201 820c5b08SSascha Wildner {
202 820c5b08SSascha Wildner time_t Timer;
203 820c5b08SSascha Wildner
204 820c5b08SSascha Wildner
205 820c5b08SSascha Wildner time (&Timer);
206 820c5b08SSascha Wildner
207 820c5b08SSascha Wildner /* Header and input table info */
208 820c5b08SSascha Wildner
209 820c5b08SSascha Wildner AcpiOsPrintf ("/*\n");
210 820c5b08SSascha Wildner AcpiOsPrintf (ACPI_COMMON_HEADER (AML_DISASSEMBLER_NAME, " * "));
211 820c5b08SSascha Wildner
212 820c5b08SSascha Wildner if (TableType == ACPI_IS_AML_TABLE)
213 820c5b08SSascha Wildner {
214 820c5b08SSascha Wildner if (AcpiGbl_CstyleDisassembly)
215 820c5b08SSascha Wildner {
216 820c5b08SSascha Wildner AcpiOsPrintf (
217 820c5b08SSascha Wildner " * Disassembling to symbolic ASL+ operators\n"
218 820c5b08SSascha Wildner " *\n");
219 820c5b08SSascha Wildner }
220 820c5b08SSascha Wildner else
221 820c5b08SSascha Wildner {
222 820c5b08SSascha Wildner AcpiOsPrintf (
223 820c5b08SSascha Wildner " * Disassembling to non-symbolic legacy ASL operators\n"
224 820c5b08SSascha Wildner " *\n");
225 820c5b08SSascha Wildner }
226 820c5b08SSascha Wildner }
227 820c5b08SSascha Wildner
228 820c5b08SSascha Wildner AcpiOsPrintf (" * Disassembly of %s, %s", Filename, ctime (&Timer));
229 820c5b08SSascha Wildner AcpiOsPrintf (" *\n");
230 820c5b08SSascha Wildner }
231 820c5b08SSascha Wildner
232 820c5b08SSascha Wildner
233 820c5b08SSascha Wildner /******************************************************************************
234 820c5b08SSascha Wildner *
235 820c5b08SSascha Wildner * FUNCTION: AdCreateTableHeader
236 820c5b08SSascha Wildner *
237 820c5b08SSascha Wildner * PARAMETERS: Filename - Input file for the table
238 820c5b08SSascha Wildner * Table - Pointer to the raw table
239 820c5b08SSascha Wildner *
240 820c5b08SSascha Wildner * RETURN: None
241 820c5b08SSascha Wildner *
242 820c5b08SSascha Wildner * DESCRIPTION: Create the ASL table header, including ACPICA signon with
243 820c5b08SSascha Wildner * current time and date.
244 820c5b08SSascha Wildner *
245 820c5b08SSascha Wildner *****************************************************************************/
246 820c5b08SSascha Wildner
247 820c5b08SSascha Wildner static void
AdCreateTableHeader(char * Filename,ACPI_TABLE_HEADER * Table)248 820c5b08SSascha Wildner AdCreateTableHeader (
249 820c5b08SSascha Wildner char *Filename,
250 820c5b08SSascha Wildner ACPI_TABLE_HEADER *Table)
251 820c5b08SSascha Wildner {
252 820c5b08SSascha Wildner UINT8 Checksum;
253 820c5b08SSascha Wildner
254 820c5b08SSascha Wildner
255 7c9678bcSSascha Wildner /* Reset globals for External statements */
256 7c9678bcSSascha Wildner
257 7c9678bcSSascha Wildner AcpiGbl_NumExternalMethods = 0;
258 7c9678bcSSascha Wildner AcpiGbl_ResolvedExternalMethods = 0;
259 7c9678bcSSascha Wildner
260 820c5b08SSascha Wildner /*
261 820c5b08SSascha Wildner * Print file header and dump original table header
262 820c5b08SSascha Wildner */
263 820c5b08SSascha Wildner AdDisassemblerHeader (Filename, ACPI_IS_AML_TABLE);
264 820c5b08SSascha Wildner
265 820c5b08SSascha Wildner AcpiOsPrintf (" * Original Table Header:\n");
266 820c5b08SSascha Wildner AcpiOsPrintf (" * Signature \"%4.4s\"\n", Table->Signature);
267 820c5b08SSascha Wildner AcpiOsPrintf (" * Length 0x%8.8X (%u)\n", Table->Length, Table->Length);
268 820c5b08SSascha Wildner
269 820c5b08SSascha Wildner /* Print and validate the revision */
270 820c5b08SSascha Wildner
271 820c5b08SSascha Wildner AcpiOsPrintf (" * Revision 0x%2.2X", Table->Revision);
272 820c5b08SSascha Wildner
273 820c5b08SSascha Wildner switch (Table->Revision)
274 820c5b08SSascha Wildner {
275 820c5b08SSascha Wildner case 0:
276 820c5b08SSascha Wildner
277 820c5b08SSascha Wildner AcpiOsPrintf (" **** Invalid Revision");
278 820c5b08SSascha Wildner break;
279 820c5b08SSascha Wildner
280 820c5b08SSascha Wildner case 1:
281 820c5b08SSascha Wildner
282 820c5b08SSascha Wildner /* Revision of DSDT controls the ACPI integer width */
283 820c5b08SSascha Wildner
284 c1776041SSascha Wildner if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_DSDT))
285 820c5b08SSascha Wildner {
286 820c5b08SSascha Wildner AcpiOsPrintf (" **** 32-bit table (V1), no 64-bit math support");
287 820c5b08SSascha Wildner }
288 820c5b08SSascha Wildner break;
289 820c5b08SSascha Wildner
290 820c5b08SSascha Wildner default:
291 820c5b08SSascha Wildner
292 820c5b08SSascha Wildner break;
293 820c5b08SSascha Wildner }
294 820c5b08SSascha Wildner
295 820c5b08SSascha Wildner /* Print and validate the table checksum */
296 820c5b08SSascha Wildner
297 2ffe9f16SSascha Wildner AcpiOsPrintf ("\n * Checksum 0x%2.2X", Table->Checksum);
298 820c5b08SSascha Wildner
299 820c5b08SSascha Wildner Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), Table->Length);
300 820c5b08SSascha Wildner if (Checksum)
301 820c5b08SSascha Wildner {
302 820c5b08SSascha Wildner AcpiOsPrintf (" **** Incorrect checksum, should be 0x%2.2X",
303 820c5b08SSascha Wildner (UINT8) (Table->Checksum - Checksum));
304 820c5b08SSascha Wildner }
305 820c5b08SSascha Wildner
306 820c5b08SSascha Wildner AcpiOsPrintf ("\n");
307 820c5b08SSascha Wildner AcpiOsPrintf (" * OEM ID \"%.6s\"\n", Table->OemId);
308 820c5b08SSascha Wildner AcpiOsPrintf (" * OEM Table ID \"%.8s\"\n", Table->OemTableId);
309 820c5b08SSascha Wildner AcpiOsPrintf (" * OEM Revision 0x%8.8X (%u)\n", Table->OemRevision, Table->OemRevision);
310 820c5b08SSascha Wildner AcpiOsPrintf (" * Compiler ID \"%.4s\"\n", Table->AslCompilerId);
311 820c5b08SSascha Wildner AcpiOsPrintf (" * Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision);
312 820c5b08SSascha Wildner AcpiOsPrintf (" */\n");
313 820c5b08SSascha Wildner
314 2ffe9f16SSascha Wildner /*
315 d638c6eeSSascha Wildner * Print comments that come before this definition block.
316 d638c6eeSSascha Wildner */
317 7bcb6cafSSascha Wildner if (AcpiGbl_CaptureComments)
318 d638c6eeSSascha Wildner {
319 d638c6eeSSascha Wildner ASL_CV_PRINT_ONE_COMMENT(AcpiGbl_ParseOpRoot,AML_COMMENT_STANDARD, NULL, 0);
320 d638c6eeSSascha Wildner }
321 d638c6eeSSascha Wildner
322 d638c6eeSSascha Wildner /*
323 2ffe9f16SSascha Wildner * Open the ASL definition block.
324 2ffe9f16SSascha Wildner *
325 2ffe9f16SSascha Wildner * Note: the AMLFilename string is left zero-length in order to just let
326 2ffe9f16SSascha Wildner * the compiler create it when the disassembled file is compiled. This
327 2ffe9f16SSascha Wildner * makes it easier to rename the disassembled ASL file if needed.
328 2ffe9f16SSascha Wildner */
329 820c5b08SSascha Wildner AcpiOsPrintf (
330 e5412f1eSSascha Wildner "DefinitionBlock (\"\", \"%4.4s\", %u, \"%.6s\", \"%.8s\", 0x%8.8X)\n",
331 2ffe9f16SSascha Wildner Table->Signature, Table->Revision,
332 820c5b08SSascha Wildner Table->OemId, Table->OemTableId, Table->OemRevision);
333 820c5b08SSascha Wildner }
334 820c5b08SSascha Wildner
335 820c5b08SSascha Wildner
336 820c5b08SSascha Wildner /******************************************************************************
337 820c5b08SSascha Wildner *
338 820c5b08SSascha Wildner * FUNCTION: AdDisplayTables
339 820c5b08SSascha Wildner *
340 820c5b08SSascha Wildner * PARAMETERS: Filename - Input file for the table
341 820c5b08SSascha Wildner * Table - Pointer to the raw table
342 820c5b08SSascha Wildner *
343 820c5b08SSascha Wildner * RETURN: Status
344 820c5b08SSascha Wildner *
345 820c5b08SSascha Wildner * DESCRIPTION: Display (disassemble) loaded tables and dump raw tables
346 820c5b08SSascha Wildner *
347 820c5b08SSascha Wildner *****************************************************************************/
348 820c5b08SSascha Wildner
349 820c5b08SSascha Wildner ACPI_STATUS
AdDisplayTables(char * Filename,ACPI_TABLE_HEADER * Table)350 820c5b08SSascha Wildner AdDisplayTables (
351 820c5b08SSascha Wildner char *Filename,
352 820c5b08SSascha Wildner ACPI_TABLE_HEADER *Table)
353 820c5b08SSascha Wildner {
354 820c5b08SSascha Wildner
355 820c5b08SSascha Wildner
356 820c5b08SSascha Wildner if (!AcpiGbl_ParseOpRoot)
357 820c5b08SSascha Wildner {
358 820c5b08SSascha Wildner return (AE_NOT_EXIST);
359 820c5b08SSascha Wildner }
360 820c5b08SSascha Wildner
361 820c5b08SSascha Wildner if (!AcpiGbl_DmOpt_Listing)
362 820c5b08SSascha Wildner {
363 820c5b08SSascha Wildner AdCreateTableHeader (Filename, Table);
364 820c5b08SSascha Wildner }
365 820c5b08SSascha Wildner
366 820c5b08SSascha Wildner AcpiDmDisassemble (NULL, AcpiGbl_ParseOpRoot, ACPI_UINT32_MAX);
367 820c5b08SSascha Wildner MpEmitMappingInfo ();
368 820c5b08SSascha Wildner
369 820c5b08SSascha Wildner if (AcpiGbl_DmOpt_Listing)
370 820c5b08SSascha Wildner {
371 820c5b08SSascha Wildner AcpiOsPrintf ("\n\nTable Header:\n");
372 820c5b08SSascha Wildner AcpiUtDebugDumpBuffer ((UINT8 *) Table, sizeof (ACPI_TABLE_HEADER),
373 820c5b08SSascha Wildner DB_BYTE_DISPLAY, ACPI_UINT32_MAX);
374 820c5b08SSascha Wildner
375 820c5b08SSascha Wildner AcpiOsPrintf ("Table Body (Length 0x%X)\n", Table->Length);
376 820c5b08SSascha Wildner AcpiUtDebugDumpBuffer (((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER)),
377 820c5b08SSascha Wildner Table->Length, DB_BYTE_DISPLAY, ACPI_UINT32_MAX);
378 820c5b08SSascha Wildner }
379 820c5b08SSascha Wildner
380 820c5b08SSascha Wildner return (AE_OK);
381 820c5b08SSascha Wildner }
382 820c5b08SSascha Wildner
383 820c5b08SSascha Wildner
384 820c5b08SSascha Wildner /*******************************************************************************
385 820c5b08SSascha Wildner *
386 820c5b08SSascha Wildner * FUNCTION: AdStoreTable
387 820c5b08SSascha Wildner *
388 820c5b08SSascha Wildner * PARAMETERS: Table - Table header
389 820c5b08SSascha Wildner * TableIndex - Where the table index is returned
390 820c5b08SSascha Wildner *
391 820c5b08SSascha Wildner * RETURN: Status and table index.
392 820c5b08SSascha Wildner *
393 820c5b08SSascha Wildner * DESCRIPTION: Add an ACPI table to the global table list
394 820c5b08SSascha Wildner *
395 820c5b08SSascha Wildner ******************************************************************************/
396 820c5b08SSascha Wildner
397 820c5b08SSascha Wildner static ACPI_STATUS
AdStoreTable(ACPI_TABLE_HEADER * Table,UINT32 * TableIndex)398 820c5b08SSascha Wildner AdStoreTable (
399 820c5b08SSascha Wildner ACPI_TABLE_HEADER *Table,
400 820c5b08SSascha Wildner UINT32 *TableIndex)
401 820c5b08SSascha Wildner {
402 820c5b08SSascha Wildner ACPI_STATUS Status;
403 820c5b08SSascha Wildner ACPI_TABLE_DESC *TableDesc;
404 820c5b08SSascha Wildner
405 820c5b08SSascha Wildner
406 820c5b08SSascha Wildner Status = AcpiTbGetNextTableDescriptor (TableIndex, &TableDesc);
407 820c5b08SSascha Wildner if (ACPI_FAILURE (Status))
408 820c5b08SSascha Wildner {
409 820c5b08SSascha Wildner return (Status);
410 820c5b08SSascha Wildner }
411 820c5b08SSascha Wildner
412 820c5b08SSascha Wildner /* Initialize added table */
413 820c5b08SSascha Wildner
414 820c5b08SSascha Wildner AcpiTbInitTableDescriptor (TableDesc, ACPI_PTR_TO_PHYSADDR (Table),
415 820c5b08SSascha Wildner ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, Table);
416 820c5b08SSascha Wildner Status = AcpiTbValidateTable (TableDesc);
417 820c5b08SSascha Wildner return (Status);
418 820c5b08SSascha Wildner }
419 820c5b08SSascha Wildner
420 820c5b08SSascha Wildner
421 820c5b08SSascha Wildner /******************************************************************************
422 820c5b08SSascha Wildner *
423 820c5b08SSascha Wildner * FUNCTION: AdGetLocalTables
424 820c5b08SSascha Wildner *
425 820c5b08SSascha Wildner * PARAMETERS: None
426 820c5b08SSascha Wildner *
427 820c5b08SSascha Wildner * RETURN: Status
428 820c5b08SSascha Wildner *
429 820c5b08SSascha Wildner * DESCRIPTION: Get the ACPI tables from either memory or a file
430 820c5b08SSascha Wildner *
431 820c5b08SSascha Wildner *****************************************************************************/
432 820c5b08SSascha Wildner
433 820c5b08SSascha Wildner ACPI_STATUS
AdGetLocalTables(void)434 820c5b08SSascha Wildner AdGetLocalTables (
435 820c5b08SSascha Wildner void)
436 820c5b08SSascha Wildner {
437 820c5b08SSascha Wildner ACPI_STATUS Status;
438 820c5b08SSascha Wildner ACPI_TABLE_HEADER TableHeader;
439 820c5b08SSascha Wildner ACPI_TABLE_HEADER *NewTable;
440 820c5b08SSascha Wildner UINT32 TableIndex;
441 820c5b08SSascha Wildner
442 820c5b08SSascha Wildner
443 820c5b08SSascha Wildner /* Get the DSDT via table override */
444 820c5b08SSascha Wildner
445 820c5b08SSascha Wildner ACPI_MOVE_32_TO_32 (TableHeader.Signature, ACPI_SIG_DSDT);
446 e5412f1eSSascha Wildner Status = AcpiOsTableOverride (&TableHeader, &NewTable);
447 e5412f1eSSascha Wildner if (ACPI_FAILURE (Status) || !NewTable)
448 820c5b08SSascha Wildner {
449 820c5b08SSascha Wildner fprintf (stderr, "Could not obtain DSDT\n");
450 820c5b08SSascha Wildner return (AE_NO_ACPI_TABLES);
451 820c5b08SSascha Wildner }
452 820c5b08SSascha Wildner
453 820c5b08SSascha Wildner AdWriteTable (NewTable, NewTable->Length,
454 820c5b08SSascha Wildner ACPI_SIG_DSDT, NewTable->OemTableId);
455 820c5b08SSascha Wildner
456 820c5b08SSascha Wildner /* Store DSDT in the Table Manager */
457 820c5b08SSascha Wildner
458 820c5b08SSascha Wildner Status = AdStoreTable (NewTable, &TableIndex);
459 820c5b08SSascha Wildner if (ACPI_FAILURE (Status))
460 820c5b08SSascha Wildner {
461 820c5b08SSascha Wildner fprintf (stderr, "Could not store DSDT\n");
462 820c5b08SSascha Wildner return (AE_NO_ACPI_TABLES);
463 820c5b08SSascha Wildner }
464 820c5b08SSascha Wildner
465 820c5b08SSascha Wildner return (AE_OK);
466 820c5b08SSascha Wildner }
467 820c5b08SSascha Wildner
468 820c5b08SSascha Wildner
469 820c5b08SSascha Wildner /******************************************************************************
470 820c5b08SSascha Wildner *
471 820c5b08SSascha Wildner * FUNCTION: AdParseTable
472 820c5b08SSascha Wildner *
473 820c5b08SSascha Wildner * PARAMETERS: Table - Pointer to the raw table
474 820c5b08SSascha Wildner * OwnerId - Returned OwnerId of the table
475 820c5b08SSascha Wildner * LoadTable - If add table to the global table list
476 820c5b08SSascha Wildner * External - If this is an external table
477 820c5b08SSascha Wildner *
478 820c5b08SSascha Wildner * RETURN: Status
479 820c5b08SSascha Wildner *
480 820c5b08SSascha Wildner * DESCRIPTION: Parse an ACPI AML table
481 820c5b08SSascha Wildner *
482 820c5b08SSascha Wildner *****************************************************************************/
483 820c5b08SSascha Wildner
484 820c5b08SSascha Wildner ACPI_STATUS
AdParseTable(ACPI_TABLE_HEADER * Table,ACPI_OWNER_ID * OwnerId,BOOLEAN LoadTable,BOOLEAN External)485 820c5b08SSascha Wildner AdParseTable (
486 820c5b08SSascha Wildner ACPI_TABLE_HEADER *Table,
487 820c5b08SSascha Wildner ACPI_OWNER_ID *OwnerId,
488 820c5b08SSascha Wildner BOOLEAN LoadTable,
489 820c5b08SSascha Wildner BOOLEAN External)
490 820c5b08SSascha Wildner {
491 820c5b08SSascha Wildner ACPI_STATUS Status = AE_OK;
492 820c5b08SSascha Wildner ACPI_WALK_STATE *WalkState;
493 820c5b08SSascha Wildner UINT8 *AmlStart;
494 820c5b08SSascha Wildner UINT32 AmlLength;
495 820c5b08SSascha Wildner UINT32 TableIndex;
496 820c5b08SSascha Wildner
497 820c5b08SSascha Wildner
498 820c5b08SSascha Wildner if (!Table)
499 820c5b08SSascha Wildner {
500 820c5b08SSascha Wildner return (AE_NOT_EXIST);
501 820c5b08SSascha Wildner }
502 820c5b08SSascha Wildner
503 820c5b08SSascha Wildner /* Pass 1: Parse everything except control method bodies */
504 820c5b08SSascha Wildner
505 820c5b08SSascha Wildner fprintf (stderr, "Pass 1 parse of [%4.4s]\n", (char *) Table->Signature);
506 820c5b08SSascha Wildner
507 820c5b08SSascha Wildner AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
508 820c5b08SSascha Wildner AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER));
509 820c5b08SSascha Wildner
510 e5412f1eSSascha Wildner AcpiUtSetIntegerWidth (Table->Revision);
511 e5412f1eSSascha Wildner
512 820c5b08SSascha Wildner /* Create the root object */
513 820c5b08SSascha Wildner
514 820c5b08SSascha Wildner AcpiGbl_ParseOpRoot = AcpiPsCreateScopeOp (AmlStart);
515 820c5b08SSascha Wildner if (!AcpiGbl_ParseOpRoot)
516 820c5b08SSascha Wildner {
517 820c5b08SSascha Wildner return (AE_NO_MEMORY);
518 820c5b08SSascha Wildner }
519 820c5b08SSascha Wildner
520 d638c6eeSSascha Wildner #ifdef ACPI_ASL_COMPILER
521 7bcb6cafSSascha Wildner if (AcpiGbl_CaptureComments)
522 d638c6eeSSascha Wildner {
523 d638c6eeSSascha Wildner AcpiGbl_ParseOpRoot->Common.CvFilename = AcpiGbl_FileTreeRoot->Filename;
524 d638c6eeSSascha Wildner }
525 d638c6eeSSascha Wildner else
526 d638c6eeSSascha Wildner {
527 d638c6eeSSascha Wildner AcpiGbl_ParseOpRoot->Common.CvFilename = NULL;
528 d638c6eeSSascha Wildner }
529 d638c6eeSSascha Wildner #endif
530 d638c6eeSSascha Wildner
531 820c5b08SSascha Wildner /* Create and initialize a new walk state */
532 820c5b08SSascha Wildner
533 820c5b08SSascha Wildner WalkState = AcpiDsCreateWalkState (0, AcpiGbl_ParseOpRoot, NULL, NULL);
534 820c5b08SSascha Wildner if (!WalkState)
535 820c5b08SSascha Wildner {
536 820c5b08SSascha Wildner return (AE_NO_MEMORY);
537 820c5b08SSascha Wildner }
538 820c5b08SSascha Wildner
539 820c5b08SSascha Wildner Status = AcpiDsInitAmlWalk (WalkState, AcpiGbl_ParseOpRoot,
540 820c5b08SSascha Wildner NULL, AmlStart, AmlLength, NULL, ACPI_IMODE_LOAD_PASS1);
541 820c5b08SSascha Wildner if (ACPI_FAILURE (Status))
542 820c5b08SSascha Wildner {
543 820c5b08SSascha Wildner return (Status);
544 820c5b08SSascha Wildner }
545 820c5b08SSascha Wildner
546 820c5b08SSascha Wildner WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE;
547 820c5b08SSascha Wildner
548 820c5b08SSascha Wildner Status = AcpiPsParseAml (WalkState);
549 820c5b08SSascha Wildner if (ACPI_FAILURE (Status))
550 820c5b08SSascha Wildner {
551 820c5b08SSascha Wildner return (Status);
552 820c5b08SSascha Wildner }
553 820c5b08SSascha Wildner
554 820c5b08SSascha Wildner /* If LoadTable is FALSE, we are parsing the last loaded table */
555 820c5b08SSascha Wildner
556 820c5b08SSascha Wildner TableIndex = AcpiGbl_RootTableList.CurrentTableCount - 1;
557 820c5b08SSascha Wildner
558 820c5b08SSascha Wildner /* Pass 2 */
559 820c5b08SSascha Wildner
560 820c5b08SSascha Wildner if (LoadTable)
561 820c5b08SSascha Wildner {
562 820c5b08SSascha Wildner Status = AdStoreTable (Table, &TableIndex);
563 820c5b08SSascha Wildner if (ACPI_FAILURE (Status))
564 820c5b08SSascha Wildner {
565 820c5b08SSascha Wildner return (Status);
566 820c5b08SSascha Wildner }
567 820c5b08SSascha Wildner Status = AcpiTbAllocateOwnerId (TableIndex);
568 820c5b08SSascha Wildner if (ACPI_FAILURE (Status))
569 820c5b08SSascha Wildner {
570 820c5b08SSascha Wildner return (Status);
571 820c5b08SSascha Wildner }
572 820c5b08SSascha Wildner if (OwnerId)
573 820c5b08SSascha Wildner {
574 820c5b08SSascha Wildner Status = AcpiTbGetOwnerId (TableIndex, OwnerId);
575 820c5b08SSascha Wildner if (ACPI_FAILURE (Status))
576 820c5b08SSascha Wildner {
577 820c5b08SSascha Wildner return (Status);
578 820c5b08SSascha Wildner }
579 820c5b08SSascha Wildner }
580 820c5b08SSascha Wildner }
581 820c5b08SSascha Wildner
582 820c5b08SSascha Wildner fprintf (stderr, "Pass 2 parse of [%4.4s]\n", (char *) Table->Signature);
583 820c5b08SSascha Wildner
584 820c5b08SSascha Wildner Status = AcpiNsOneCompleteParse (ACPI_IMODE_LOAD_PASS2, TableIndex, NULL);
585 820c5b08SSascha Wildner if (ACPI_FAILURE (Status))
586 820c5b08SSascha Wildner {
587 820c5b08SSascha Wildner return (Status);
588 820c5b08SSascha Wildner }
589 820c5b08SSascha Wildner
590 820c5b08SSascha Wildner /* No need to parse control methods of external table */
591 820c5b08SSascha Wildner
592 820c5b08SSascha Wildner if (External)
593 820c5b08SSascha Wildner {
594 820c5b08SSascha Wildner return (AE_OK);
595 820c5b08SSascha Wildner }
596 820c5b08SSascha Wildner
597 820c5b08SSascha Wildner /*
598 820c5b08SSascha Wildner * Pass 3: Parse control methods and link their parse trees
599 820c5b08SSascha Wildner * into the main parse tree
600 820c5b08SSascha Wildner */
601 820c5b08SSascha Wildner fprintf (stderr,
602 820c5b08SSascha Wildner "Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)\n");
603 820c5b08SSascha Wildner
604 e5412f1eSSascha Wildner (void) AcpiDmParseDeferredOps (AcpiGbl_ParseOpRoot);
605 820c5b08SSascha Wildner fprintf (stderr, "\n");
606 820c5b08SSascha Wildner
607 820c5b08SSascha Wildner /* Process Resource Templates */
608 820c5b08SSascha Wildner
609 820c5b08SSascha Wildner AcpiDmFindResources (AcpiGbl_ParseOpRoot);
610 820c5b08SSascha Wildner
611 820c5b08SSascha Wildner fprintf (stderr, "Parsing completed\n");
612 820c5b08SSascha Wildner return (AE_OK);
613 820c5b08SSascha Wildner }
614