xref: /freebsd/sys/contrib/dev/acpica/common/adisasm.c (revision ec3fc72f94b64840ffc88b4c376437ca7ee43fda)
159db4265SNate Lawson /******************************************************************************
259db4265SNate Lawson  *
359db4265SNate Lawson  * Module Name: adisasm - Application-level disassembler routines
459db4265SNate Lawson  *
559db4265SNate Lawson  *****************************************************************************/
659db4265SNate Lawson 
7d244b227SJung-uk Kim /*
8*ec3fc72fSJung-uk Kim  * Copyright (C) 2000 - 2012, Intel Corp.
959db4265SNate Lawson  * All rights reserved.
1059db4265SNate Lawson  *
11d244b227SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
12d244b227SJung-uk Kim  * modification, are permitted provided that the following conditions
13d244b227SJung-uk Kim  * are met:
14d244b227SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
15d244b227SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
16d244b227SJung-uk Kim  *    without modification.
17d244b227SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18d244b227SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
19d244b227SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
20d244b227SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
21d244b227SJung-uk Kim  *    binary redistribution.
22d244b227SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
23d244b227SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
24d244b227SJung-uk Kim  *    from this software without specific prior written permission.
2559db4265SNate Lawson  *
26d244b227SJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
27d244b227SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
28d244b227SJung-uk Kim  * Software Foundation.
2959db4265SNate Lawson  *
30d244b227SJung-uk Kim  * NO WARRANTY
31d244b227SJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32d244b227SJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33d244b227SJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34d244b227SJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35d244b227SJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36d244b227SJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37d244b227SJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38d244b227SJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39d244b227SJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40d244b227SJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41d244b227SJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
42d244b227SJung-uk Kim  */
4359db4265SNate Lawson 
4459db4265SNate Lawson 
45ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acpi.h>
46ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/accommon.h>
47ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acparser.h>
48ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/amlcode.h>
49ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acdebug.h>
50ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acdisasm.h>
51ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acdispat.h>
52ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acnamesp.h>
53ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/actables.h>
54ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acapps.h>
5559db4265SNate Lawson 
5659db4265SNate Lawson #include <stdio.h>
5759db4265SNate Lawson #include <time.h>
5859db4265SNate Lawson 
5959db4265SNate Lawson 
6059db4265SNate Lawson #define _COMPONENT          ACPI_TOOLS
6159db4265SNate Lawson         ACPI_MODULE_NAME    ("adisasm")
6259db4265SNate Lawson 
63f556842eSJung-uk Kim 
641a39cfb0SJung-uk Kim extern int                  AslCompilerdebug;
65f556842eSJung-uk Kim 
6659db4265SNate Lawson 
671a39cfb0SJung-uk Kim ACPI_STATUS
681a39cfb0SJung-uk Kim LsDisplayNamespace (
691a39cfb0SJung-uk Kim     void);
7059db4265SNate Lawson 
711a39cfb0SJung-uk Kim void
72f556842eSJung-uk Kim LsSetupNsList (
73f556842eSJung-uk Kim     void                    *Handle);
741a39cfb0SJung-uk Kim 
751a39cfb0SJung-uk Kim 
761a39cfb0SJung-uk Kim /* Local prototypes */
771a39cfb0SJung-uk Kim 
7842fecd12SJung-uk Kim static void
791a39cfb0SJung-uk Kim AdCreateTableHeader (
801a39cfb0SJung-uk Kim     char                    *Filename,
811a39cfb0SJung-uk Kim     ACPI_TABLE_HEADER       *Table);
821a39cfb0SJung-uk Kim 
8342fecd12SJung-uk Kim static ACPI_STATUS
84a9f12690SJung-uk Kim AdDeferredParse (
85a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
86a9f12690SJung-uk Kim     UINT8                   *Aml,
87a9f12690SJung-uk Kim     UINT32                  AmlLength);
88a9f12690SJung-uk Kim 
8942fecd12SJung-uk Kim static ACPI_STATUS
90a9f12690SJung-uk Kim AdParseDeferredOps (
91a9f12690SJung-uk Kim     ACPI_PARSE_OBJECT       *Root);
92a9f12690SJung-uk Kim 
931a39cfb0SJung-uk Kim 
941a39cfb0SJung-uk Kim /* Stubs for ASL compiler */
9559db4265SNate Lawson 
96fba7fc7eSJung-uk Kim #ifndef ACPI_ASL_COMPILER
9759db4265SNate Lawson BOOLEAN
9859db4265SNate Lawson AcpiDsIsResultUsed (
9959db4265SNate Lawson     ACPI_PARSE_OBJECT       *Op,
10059db4265SNate Lawson     ACPI_WALK_STATE         *WalkState)
10159db4265SNate Lawson {
10259db4265SNate Lawson     return TRUE;
10359db4265SNate Lawson }
1041a39cfb0SJung-uk Kim 
1051a39cfb0SJung-uk Kim ACPI_STATUS
1061a39cfb0SJung-uk Kim AcpiDsMethodError (
1071a39cfb0SJung-uk Kim     ACPI_STATUS             Status,
1081a39cfb0SJung-uk Kim     ACPI_WALK_STATE         *WalkState)
1091a39cfb0SJung-uk Kim {
1101a39cfb0SJung-uk Kim     return (Status);
1111a39cfb0SJung-uk Kim }
11259db4265SNate Lawson #endif
11359db4265SNate Lawson 
11459db4265SNate Lawson ACPI_STATUS
1151a39cfb0SJung-uk Kim AcpiNsLoadTable (
116a9f12690SJung-uk Kim     UINT32                  TableIndex,
1171a39cfb0SJung-uk Kim     ACPI_NAMESPACE_NODE     *Node)
1181a39cfb0SJung-uk Kim {
1191a39cfb0SJung-uk Kim     return (AE_NOT_IMPLEMENTED);
1201a39cfb0SJung-uk Kim }
1211a39cfb0SJung-uk Kim 
1221a39cfb0SJung-uk Kim ACPI_STATUS
12359db4265SNate Lawson AcpiDsRestartControlMethod (
12459db4265SNate Lawson     ACPI_WALK_STATE         *WalkState,
12559db4265SNate Lawson     ACPI_OPERAND_OBJECT     *ReturnDesc)
12659db4265SNate Lawson {
12759db4265SNate Lawson     return (AE_OK);
12859db4265SNate Lawson }
12959db4265SNate Lawson 
130fba7fc7eSJung-uk Kim void
13159db4265SNate Lawson AcpiDsTerminateControlMethod (
1321a39cfb0SJung-uk Kim     ACPI_OPERAND_OBJECT     *MethodDesc,
13359db4265SNate Lawson     ACPI_WALK_STATE         *WalkState)
13459db4265SNate Lawson {
135fba7fc7eSJung-uk Kim     return;
13659db4265SNate Lawson }
13759db4265SNate Lawson 
13859db4265SNate Lawson ACPI_STATUS
13959db4265SNate Lawson AcpiDsCallControlMethod (
14059db4265SNate Lawson     ACPI_THREAD_STATE       *Thread,
14159db4265SNate Lawson     ACPI_WALK_STATE         *WalkState,
14259db4265SNate Lawson     ACPI_PARSE_OBJECT       *Op)
14359db4265SNate Lawson {
14459db4265SNate Lawson     return (AE_OK);
14559db4265SNate Lawson }
14659db4265SNate Lawson 
14759db4265SNate Lawson ACPI_STATUS
14859db4265SNate Lawson AcpiDsMethodDataInitArgs (
14959db4265SNate Lawson     ACPI_OPERAND_OBJECT     **Params,
15059db4265SNate Lawson     UINT32                  MaxParamCount,
15159db4265SNate Lawson     ACPI_WALK_STATE         *WalkState)
15259db4265SNate Lawson {
15359db4265SNate Lawson     return (AE_OK);
15459db4265SNate Lawson }
15559db4265SNate Lawson 
15659db4265SNate Lawson 
157f556842eSJung-uk Kim static ACPI_TABLE_DESC      LocalTables[1];
158f556842eSJung-uk Kim static ACPI_PARSE_OBJECT    *AcpiGbl_ParseOpRoot;
15959db4265SNate Lawson 
16059db4265SNate Lawson 
16159db4265SNate Lawson /*******************************************************************************
16259db4265SNate Lawson  *
16359db4265SNate Lawson  * FUNCTION:    AdInitialize
16459db4265SNate Lawson  *
165f556842eSJung-uk Kim  * PARAMETERS:  None
16659db4265SNate Lawson  *
16759db4265SNate Lawson  * RETURN:      Status
16859db4265SNate Lawson  *
169f556842eSJung-uk Kim  * DESCRIPTION: ACPICA and local initialization
17059db4265SNate Lawson  *
17159db4265SNate Lawson  ******************************************************************************/
17259db4265SNate Lawson 
17359db4265SNate Lawson ACPI_STATUS
17459db4265SNate Lawson AdInitialize (
17559db4265SNate Lawson     void)
17659db4265SNate Lawson {
17759db4265SNate Lawson     ACPI_STATUS             Status;
17859db4265SNate Lawson 
17959db4265SNate Lawson 
18059db4265SNate Lawson     /* ACPI CA subsystem initialization */
18159db4265SNate Lawson 
1821a39cfb0SJung-uk Kim     Status = AcpiOsInitialize ();
183a9f12690SJung-uk Kim     if (ACPI_FAILURE (Status))
184a9f12690SJung-uk Kim     {
185a9f12690SJung-uk Kim         return (Status);
186a9f12690SJung-uk Kim     }
187a9f12690SJung-uk Kim 
188a9f12690SJung-uk Kim     Status = AcpiUtInitGlobals ();
189a9f12690SJung-uk Kim     if (ACPI_FAILURE (Status))
190a9f12690SJung-uk Kim     {
191a9f12690SJung-uk Kim         return (Status);
192a9f12690SJung-uk Kim     }
1931a39cfb0SJung-uk Kim 
19459db4265SNate Lawson     Status = AcpiUtMutexInitialize ();
19559db4265SNate Lawson     if (ACPI_FAILURE (Status))
19659db4265SNate Lawson     {
197a9f12690SJung-uk Kim         return (Status);
19859db4265SNate Lawson     }
19959db4265SNate Lawson 
20059db4265SNate Lawson     Status = AcpiNsRootInitialize ();
2011a39cfb0SJung-uk Kim     if (ACPI_FAILURE (Status))
2021a39cfb0SJung-uk Kim     {
203a9f12690SJung-uk Kim         return (Status);
2041a39cfb0SJung-uk Kim     }
2051a39cfb0SJung-uk Kim 
2061a39cfb0SJung-uk Kim     /* Setup the Table Manager (cheat - there is no RSDT) */
2071a39cfb0SJung-uk Kim 
2083f5e024cSJung-uk Kim     AcpiGbl_RootTableList.MaxTableCount = 1;
2093f5e024cSJung-uk Kim     AcpiGbl_RootTableList.CurrentTableCount = 0;
2101a39cfb0SJung-uk Kim     AcpiGbl_RootTableList.Tables = LocalTables;
2111a39cfb0SJung-uk Kim 
212a9f12690SJung-uk Kim     return (Status);
21359db4265SNate Lawson }
21459db4265SNate Lawson 
21559db4265SNate Lawson 
21659db4265SNate Lawson /******************************************************************************
21759db4265SNate Lawson  *
21859db4265SNate Lawson  * FUNCTION:    AdAmlDisassemble
21959db4265SNate Lawson  *
220fba7fc7eSJung-uk Kim  * PARAMETERS:  Filename            - AML input filename
221fba7fc7eSJung-uk Kim  *              OutToFile           - TRUE if output should go to a file
222fba7fc7eSJung-uk Kim  *              Prefix              - Path prefix for output
223fba7fc7eSJung-uk Kim  *              OutFilename         - where the filename is returned
224fba7fc7eSJung-uk Kim  *              GetAllTables        - TRUE if all tables are desired
22559db4265SNate Lawson  *
22659db4265SNate Lawson  * RETURN:      Status
22759db4265SNate Lawson  *
22859db4265SNate Lawson  * DESCRIPTION: Disassemble an entire ACPI table
22959db4265SNate Lawson  *
23059db4265SNate Lawson  *****************************************************************************/
23159db4265SNate Lawson 
23259db4265SNate Lawson ACPI_STATUS
23359db4265SNate Lawson AdAmlDisassemble (
23459db4265SNate Lawson     BOOLEAN                 OutToFile,
23559db4265SNate Lawson     char                    *Filename,
23659db4265SNate Lawson     char                    *Prefix,
23759db4265SNate Lawson     char                    **OutFilename,
23859db4265SNate Lawson     BOOLEAN                 GetAllTables)
23959db4265SNate Lawson {
24059db4265SNate Lawson     ACPI_STATUS             Status;
24159db4265SNate Lawson     char                    *DisasmFilename = NULL;
242a9f12690SJung-uk Kim     char                    *ExternalFilename;
243709fac06SJung-uk Kim     ACPI_EXTERNAL_FILE      *ExternalFileList = AcpiGbl_ExternalFileList;
24459db4265SNate Lawson     FILE                    *File = NULL;
245a9f12690SJung-uk Kim     ACPI_TABLE_HEADER       *Table = NULL;
2461a39cfb0SJung-uk Kim     ACPI_TABLE_HEADER       *ExternalTable;
247a9f12690SJung-uk Kim     ACPI_OWNER_ID           OwnerId;
24859db4265SNate Lawson 
24959db4265SNate Lawson 
25059db4265SNate Lawson     /*
251f556842eSJung-uk Kim      * Input: AML code from either a file or via GetTables (memory or
252f556842eSJung-uk Kim      * registry)
25359db4265SNate Lawson      */
25459db4265SNate Lawson     if (Filename)
25559db4265SNate Lawson     {
25659db4265SNate Lawson         Status = AcpiDbGetTableFromFile (Filename, &Table);
25759db4265SNate Lawson         if (ACPI_FAILURE (Status))
25859db4265SNate Lawson         {
25959db4265SNate Lawson             return Status;
26059db4265SNate Lawson         }
2611a39cfb0SJung-uk Kim 
262a9f12690SJung-uk Kim         /*
263a9f12690SJung-uk Kim          * External filenames separated by commas
264a9f12690SJung-uk Kim          * Example: iasl -e file1,file2,file3 -d xxx.aml
265a9f12690SJung-uk Kim          */
266709fac06SJung-uk Kim         while (ExternalFileList)
2671a39cfb0SJung-uk Kim         {
268709fac06SJung-uk Kim             ExternalFilename = ExternalFileList->Path;
269709fac06SJung-uk Kim             if (!ACPI_STRCMP (ExternalFilename, Filename))
270709fac06SJung-uk Kim             {
271709fac06SJung-uk Kim                 /* Next external file */
272a9f12690SJung-uk Kim 
273709fac06SJung-uk Kim                 ExternalFileList = ExternalFileList->Next;
274709fac06SJung-uk Kim 
275709fac06SJung-uk Kim                 continue;
276709fac06SJung-uk Kim             }
277709fac06SJung-uk Kim 
278a9f12690SJung-uk Kim             Status = AcpiDbGetTableFromFile (ExternalFilename, &ExternalTable);
2791a39cfb0SJung-uk Kim             if (ACPI_FAILURE (Status))
2801a39cfb0SJung-uk Kim             {
2811a39cfb0SJung-uk Kim                 return Status;
2821a39cfb0SJung-uk Kim             }
283a9f12690SJung-uk Kim 
284a9f12690SJung-uk Kim             /* Load external table for symbol resolution */
285a9f12690SJung-uk Kim 
286a9f12690SJung-uk Kim             if (ExternalTable)
287a9f12690SJung-uk Kim             {
288a9f12690SJung-uk Kim                 Status = AdParseTable (ExternalTable, &OwnerId, TRUE, TRUE);
289a9f12690SJung-uk Kim                 if (ACPI_FAILURE (Status))
290a9f12690SJung-uk Kim                 {
291a9f12690SJung-uk Kim                     AcpiOsPrintf ("Could not parse external ACPI tables, %s\n",
292a9f12690SJung-uk Kim                         AcpiFormatException (Status));
293a9f12690SJung-uk Kim                     return Status;
294a9f12690SJung-uk Kim                 }
295a9f12690SJung-uk Kim 
296a9f12690SJung-uk Kim                 /*
297a9f12690SJung-uk Kim                  * Load namespace from names created within control methods
298a9f12690SJung-uk Kim                  * Set owner id of nodes in external table
299a9f12690SJung-uk Kim                  */
300a9f12690SJung-uk Kim                 AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot,
301a9f12690SJung-uk Kim                     AcpiGbl_RootNode, OwnerId);
302a9f12690SJung-uk Kim                 AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
303a9f12690SJung-uk Kim             }
304a9f12690SJung-uk Kim 
305709fac06SJung-uk Kim             /* Next external file */
306a9f12690SJung-uk Kim 
307709fac06SJung-uk Kim             ExternalFileList = ExternalFileList->Next;
308a9f12690SJung-uk Kim         }
309a9f12690SJung-uk Kim 
310a9f12690SJung-uk Kim         /* Clear external list generated by Scope in external tables */
311a9f12690SJung-uk Kim 
312709fac06SJung-uk Kim         if (AcpiGbl_ExternalFileList)
313709fac06SJung-uk Kim         {
314f556842eSJung-uk Kim             AcpiDmClearExternalList ();
3151a39cfb0SJung-uk Kim         }
31659db4265SNate Lawson     }
31759db4265SNate Lawson     else
31859db4265SNate Lawson     {
31959db4265SNate Lawson         Status = AdGetLocalTables (Filename, GetAllTables);
32059db4265SNate Lawson         if (ACPI_FAILURE (Status))
32159db4265SNate Lawson         {
32259db4265SNate Lawson             AcpiOsPrintf ("Could not get ACPI tables, %s\n",
32359db4265SNate Lawson                 AcpiFormatException (Status));
32459db4265SNate Lawson             return Status;
32559db4265SNate Lawson         }
32659db4265SNate Lawson 
32759db4265SNate Lawson         if (!AcpiGbl_DbOpt_disasm)
32859db4265SNate Lawson         {
32959db4265SNate Lawson             return AE_OK;
33059db4265SNate Lawson         }
33159db4265SNate Lawson 
3321a39cfb0SJung-uk Kim         /* Obtained the local tables, just disassemble the DSDT */
33359db4265SNate Lawson 
3341a39cfb0SJung-uk Kim         Status = AcpiGetTable (ACPI_SIG_DSDT, 0, &Table);
3351a39cfb0SJung-uk Kim         if (ACPI_FAILURE (Status))
3361a39cfb0SJung-uk Kim         {
3371a39cfb0SJung-uk Kim             AcpiOsPrintf ("Could not get DSDT, %s\n",
3381a39cfb0SJung-uk Kim                 AcpiFormatException (Status));
3391a39cfb0SJung-uk Kim             return Status;
3401a39cfb0SJung-uk Kim         }
3411a39cfb0SJung-uk Kim 
34259db4265SNate Lawson         AcpiOsPrintf ("\nDisassembly of DSDT\n");
3431a39cfb0SJung-uk Kim         Prefix = AdGenerateFilename ("dsdt", Table->OemTableId);
34459db4265SNate Lawson     }
34559db4265SNate Lawson 
34659db4265SNate Lawson     /*
347f556842eSJung-uk Kim      * Output:  ASL code. Redirect to a file if requested
34859db4265SNate Lawson      */
34959db4265SNate Lawson     if (OutToFile)
35059db4265SNate Lawson     {
35159db4265SNate Lawson         /* Create/Open a disassembly output file */
35259db4265SNate Lawson 
35359db4265SNate Lawson         DisasmFilename = FlGenerateFilename (Prefix, FILE_SUFFIX_DISASSEMBLY);
35459db4265SNate Lawson         if (!OutFilename)
35559db4265SNate Lawson         {
35659db4265SNate Lawson             fprintf (stderr, "Could not generate output filename\n");
357e50beb51SNate Lawson             Status = AE_ERROR;
358e50beb51SNate Lawson             goto Cleanup;
35959db4265SNate Lawson         }
36059db4265SNate Lawson 
36159db4265SNate Lawson         File = fopen (DisasmFilename, "w+");
36259db4265SNate Lawson         if (!File)
36359db4265SNate Lawson         {
3641a39cfb0SJung-uk Kim             fprintf (stderr, "Could not open output file %s\n", DisasmFilename);
365e50beb51SNate Lawson             Status = AE_ERROR;
366e50beb51SNate Lawson             goto Cleanup;
36759db4265SNate Lawson         }
36859db4265SNate Lawson 
36959db4265SNate Lawson         AcpiOsRedirectOutput (File);
37059db4265SNate Lawson     }
37159db4265SNate Lawson 
37259db4265SNate Lawson     *OutFilename = DisasmFilename;
37359db4265SNate Lawson 
3741a39cfb0SJung-uk Kim     if (!AcpiUtIsAmlTable (Table))
3751a39cfb0SJung-uk Kim     {
3761a39cfb0SJung-uk Kim         AdDisassemblerHeader (Filename);
3771a39cfb0SJung-uk Kim         AcpiOsPrintf (" * ACPI Data Table [%4.4s]\n *\n",
3781a39cfb0SJung-uk Kim             Table->Signature);
379*ec3fc72fSJung-uk Kim         AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength]  "
380*ec3fc72fSJung-uk Kim             "FieldName : FieldValue\n */\n\n");
3811a39cfb0SJung-uk Kim 
3821a39cfb0SJung-uk Kim         AcpiDmDumpDataTable (Table);
3831a39cfb0SJung-uk Kim         fprintf (stderr, "Acpi Data Table [%4.4s] decoded, written to \"%s\"\n",
3841a39cfb0SJung-uk Kim             Table->Signature, DisasmFilename);
3851a39cfb0SJung-uk Kim     }
3861a39cfb0SJung-uk Kim     else
3871a39cfb0SJung-uk Kim     {
38859db4265SNate Lawson         /* Always parse the tables, only option is what to display */
38959db4265SNate Lawson 
390a9f12690SJung-uk Kim         Status = AdParseTable (Table, &OwnerId, TRUE, FALSE);
39159db4265SNate Lawson         if (ACPI_FAILURE (Status))
39259db4265SNate Lawson         {
39359db4265SNate Lawson             AcpiOsPrintf ("Could not parse ACPI tables, %s\n",
39459db4265SNate Lawson                 AcpiFormatException (Status));
39559db4265SNate Lawson             goto Cleanup;
39659db4265SNate Lawson         }
39759db4265SNate Lawson 
3981a39cfb0SJung-uk Kim         if (AslCompilerdebug)
3991a39cfb0SJung-uk Kim         {
4001a39cfb0SJung-uk Kim             AcpiOsPrintf ("/**** Before second load\n");
4011a39cfb0SJung-uk Kim 
4021a39cfb0SJung-uk Kim             LsSetupNsList (File);
4031a39cfb0SJung-uk Kim             LsDisplayNamespace ();
4041a39cfb0SJung-uk Kim             AcpiOsPrintf ("*****/\n");
4051a39cfb0SJung-uk Kim         }
4061a39cfb0SJung-uk Kim 
407*ec3fc72fSJung-uk Kim         /* Load namespace from names created within control methods */
408*ec3fc72fSJung-uk Kim 
409*ec3fc72fSJung-uk Kim         AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot,
410*ec3fc72fSJung-uk Kim             AcpiGbl_RootNode, OwnerId);
4111a39cfb0SJung-uk Kim 
4121a39cfb0SJung-uk Kim         /*
413*ec3fc72fSJung-uk Kim          * Cross reference the namespace here, in order to
414*ec3fc72fSJung-uk Kim          * generate External() statements
4151a39cfb0SJung-uk Kim          */
416*ec3fc72fSJung-uk Kim         AcpiDmCrossReferenceNamespace (AcpiGbl_ParseOpRoot,
417*ec3fc72fSJung-uk Kim             AcpiGbl_RootNode, OwnerId);
4181a39cfb0SJung-uk Kim 
4191a39cfb0SJung-uk Kim         if (AslCompilerdebug)
4201a39cfb0SJung-uk Kim         {
4211a39cfb0SJung-uk Kim             AcpiDmDumpTree (AcpiGbl_ParseOpRoot);
4221a39cfb0SJung-uk Kim         }
4231a39cfb0SJung-uk Kim 
4241a39cfb0SJung-uk Kim         /* Find possible calls to external control methods */
4251a39cfb0SJung-uk Kim 
4261a39cfb0SJung-uk Kim         AcpiDmFindOrphanMethods (AcpiGbl_ParseOpRoot);
4271a39cfb0SJung-uk Kim 
4281a39cfb0SJung-uk Kim         /*
429*ec3fc72fSJung-uk Kim          * If we found any external control methods, we must reparse
430*ec3fc72fSJung-uk Kim          * the entire tree with the new information (namely, the
431*ec3fc72fSJung-uk Kim          * number of arguments per method)
4321a39cfb0SJung-uk Kim          */
433f556842eSJung-uk Kim         if (AcpiDmGetExternalMethodCount ())
4341a39cfb0SJung-uk Kim         {
4351a39cfb0SJung-uk Kim             fprintf (stderr,
436*ec3fc72fSJung-uk Kim                 "\nFound %u external control methods, "
437*ec3fc72fSJung-uk Kim                 "reparsing with new information\n",
438f556842eSJung-uk Kim                 AcpiDmGetExternalMethodCount ());
4391a39cfb0SJung-uk Kim 
440*ec3fc72fSJung-uk Kim             /* Reparse, rebuild namespace. no need to xref namespace */
441*ec3fc72fSJung-uk Kim 
4421a39cfb0SJung-uk Kim             AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
4431a39cfb0SJung-uk Kim             AcpiNsDeleteNamespaceSubtree (AcpiGbl_RootNode);
4441a39cfb0SJung-uk Kim 
4451a39cfb0SJung-uk Kim             AcpiGbl_RootNode                    = NULL;
4461a39cfb0SJung-uk Kim             AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
4471a39cfb0SJung-uk Kim             AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
4481a39cfb0SJung-uk Kim             AcpiGbl_RootNodeStruct.Type         = ACPI_TYPE_DEVICE;
449a88e22b7SJung-uk Kim             AcpiGbl_RootNodeStruct.Parent       = NULL;
4501a39cfb0SJung-uk Kim             AcpiGbl_RootNodeStruct.Child        = NULL;
4511a39cfb0SJung-uk Kim             AcpiGbl_RootNodeStruct.Peer         = NULL;
4521a39cfb0SJung-uk Kim             AcpiGbl_RootNodeStruct.Object       = NULL;
453a88e22b7SJung-uk Kim             AcpiGbl_RootNodeStruct.Flags        = 0;
4541a39cfb0SJung-uk Kim 
4551a39cfb0SJung-uk Kim             Status = AcpiNsRootInitialize ();
456f556842eSJung-uk Kim             AcpiDmAddExternalsToNamespace ();
4571a39cfb0SJung-uk Kim 
458*ec3fc72fSJung-uk Kim             /* Parse the table again. No need to reload it, however */
459a9f12690SJung-uk Kim 
460a9f12690SJung-uk Kim             Status = AdParseTable (Table, NULL, FALSE, FALSE);
4611a39cfb0SJung-uk Kim             if (ACPI_FAILURE (Status))
4621a39cfb0SJung-uk Kim             {
4631a39cfb0SJung-uk Kim                 AcpiOsPrintf ("Could not parse ACPI tables, %s\n",
4641a39cfb0SJung-uk Kim                     AcpiFormatException (Status));
4651a39cfb0SJung-uk Kim                 goto Cleanup;
4661a39cfb0SJung-uk Kim             }
4671a39cfb0SJung-uk Kim 
4681a39cfb0SJung-uk Kim             if (AslCompilerdebug)
4691a39cfb0SJung-uk Kim             {
470a9f12690SJung-uk Kim                 AcpiOsPrintf ("/**** After second load and resource conversion\n");
471a9f12690SJung-uk Kim                 LsSetupNsList (File);
472a9f12690SJung-uk Kim                 LsDisplayNamespace ();
473a9f12690SJung-uk Kim                 AcpiOsPrintf ("*****/\n");
474a9f12690SJung-uk Kim 
4751a39cfb0SJung-uk Kim                 AcpiDmDumpTree (AcpiGbl_ParseOpRoot);
4761a39cfb0SJung-uk Kim             }
4771a39cfb0SJung-uk Kim         }
478e0ef747bSNate Lawson 
479*ec3fc72fSJung-uk Kim         /*
480*ec3fc72fSJung-uk Kim          * Now that the namespace is finalized, we can perform namespace
481*ec3fc72fSJung-uk Kim          * transforms.
482*ec3fc72fSJung-uk Kim          *
483*ec3fc72fSJung-uk Kim          * 1) Convert fixed-offset references to resource descriptors
484*ec3fc72fSJung-uk Kim          *    to symbolic references (Note: modifies namespace)
485*ec3fc72fSJung-uk Kim          */
486*ec3fc72fSJung-uk Kim         AcpiDmConvertResourceIndexes (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode);
487*ec3fc72fSJung-uk Kim 
48859db4265SNate Lawson         /* Optional displays */
48959db4265SNate Lawson 
49059db4265SNate Lawson         if (AcpiGbl_DbOpt_disasm)
49159db4265SNate Lawson         {
49259db4265SNate Lawson             AdDisplayTables (Filename, Table);
4931a39cfb0SJung-uk Kim             fprintf (stderr,
4941a39cfb0SJung-uk Kim                 "Disassembly completed, written to \"%s\"\n",
4951a39cfb0SJung-uk Kim                 DisasmFilename);
4961a39cfb0SJung-uk Kim         }
49759db4265SNate Lawson     }
49859db4265SNate Lawson 
49959db4265SNate Lawson Cleanup:
500a9f12690SJung-uk Kim 
501a9f12690SJung-uk Kim     if (Table && !AcpiUtIsAmlTable (Table))
502a9f12690SJung-uk Kim     {
503a9f12690SJung-uk Kim         ACPI_FREE (Table);
504a9f12690SJung-uk Kim     }
505a9f12690SJung-uk Kim 
506a9f12690SJung-uk Kim     if (DisasmFilename)
507a9f12690SJung-uk Kim     {
508a9f12690SJung-uk Kim         ACPI_FREE (DisasmFilename);
509a9f12690SJung-uk Kim     }
510a9f12690SJung-uk Kim 
5111a39cfb0SJung-uk Kim     if (OutToFile && File)
51259db4265SNate Lawson     {
513*ec3fc72fSJung-uk Kim         if (AslCompilerdebug) /* Display final namespace, with transforms */
514*ec3fc72fSJung-uk Kim         {
5151a39cfb0SJung-uk Kim             LsSetupNsList (File);
5161a39cfb0SJung-uk Kim             LsDisplayNamespace ();
517*ec3fc72fSJung-uk Kim         }
518*ec3fc72fSJung-uk Kim 
51959db4265SNate Lawson         fclose (File);
52059db4265SNate Lawson         AcpiOsRedirectOutput (stdout);
52159db4265SNate Lawson     }
52259db4265SNate Lawson 
5231a39cfb0SJung-uk Kim     AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
524a9f12690SJung-uk Kim     AcpiGbl_ParseOpRoot = NULL;
525a9f12690SJung-uk Kim     return (Status);
52659db4265SNate Lawson }
52759db4265SNate Lawson 
52859db4265SNate Lawson 
52959db4265SNate Lawson /******************************************************************************
53059db4265SNate Lawson  *
5311a39cfb0SJung-uk Kim  * FUNCTION:    AdDisassemblerHeader
5321a39cfb0SJung-uk Kim  *
5331a39cfb0SJung-uk Kim  * PARAMETERS:  Filename            - Input file for the table
5341a39cfb0SJung-uk Kim  *
5351a39cfb0SJung-uk Kim  * RETURN:      None
5361a39cfb0SJung-uk Kim  *
5371a39cfb0SJung-uk Kim  * DESCRIPTION: Create the disassembler header, including ACPI CA signon with
5381a39cfb0SJung-uk Kim  *              current time and date.
5391a39cfb0SJung-uk Kim  *
5401a39cfb0SJung-uk Kim  *****************************************************************************/
5411a39cfb0SJung-uk Kim 
5421a39cfb0SJung-uk Kim void
5431a39cfb0SJung-uk Kim AdDisassemblerHeader (
5441a39cfb0SJung-uk Kim     char                    *Filename)
5451a39cfb0SJung-uk Kim {
5461a39cfb0SJung-uk Kim     time_t                  Timer;
5471a39cfb0SJung-uk Kim 
5481a39cfb0SJung-uk Kim     time (&Timer);
5491a39cfb0SJung-uk Kim 
5501a39cfb0SJung-uk Kim     /* Header and input table info */
5511a39cfb0SJung-uk Kim 
5523c1812acSJung-uk Kim     AcpiOsPrintf ("/*\n");
5533c1812acSJung-uk Kim     AcpiOsPrintf (ACPI_COMMON_HEADER ("AML Disassembler", " * "));
5541a39cfb0SJung-uk Kim 
5553c1812acSJung-uk Kim     AcpiOsPrintf (" * Disassembly of %s, %s", Filename, ctime (&Timer));
5561a39cfb0SJung-uk Kim     AcpiOsPrintf (" *\n");
5571a39cfb0SJung-uk Kim }
5581a39cfb0SJung-uk Kim 
5591a39cfb0SJung-uk Kim 
5601a39cfb0SJung-uk Kim /******************************************************************************
5611a39cfb0SJung-uk Kim  *
56259db4265SNate Lawson  * FUNCTION:    AdCreateTableHeader
56359db4265SNate Lawson  *
56459db4265SNate Lawson  * PARAMETERS:  Filename            - Input file for the table
56559db4265SNate Lawson  *              Table               - Pointer to the raw table
56659db4265SNate Lawson  *
56759db4265SNate Lawson  * RETURN:      None
56859db4265SNate Lawson  *
56959db4265SNate Lawson  * DESCRIPTION: Create the ASL table header, including ACPI CA signon with
57059db4265SNate Lawson  *              current time and date.
57159db4265SNate Lawson  *
57259db4265SNate Lawson  *****************************************************************************/
57359db4265SNate Lawson 
57442fecd12SJung-uk Kim static void
57559db4265SNate Lawson AdCreateTableHeader (
57659db4265SNate Lawson     char                    *Filename,
57759db4265SNate Lawson     ACPI_TABLE_HEADER       *Table)
57859db4265SNate Lawson {
5791a39cfb0SJung-uk Kim     char                    *NewFilename;
580a9f12690SJung-uk Kim     UINT8                   Checksum;
58159db4265SNate Lawson 
58259db4265SNate Lawson 
583a9f12690SJung-uk Kim     /*
584a9f12690SJung-uk Kim      * Print file header and dump original table header
585a9f12690SJung-uk Kim      */
5861a39cfb0SJung-uk Kim     AdDisassemblerHeader (Filename);
58759db4265SNate Lawson 
588a88e22b7SJung-uk Kim     AcpiOsPrintf (" * Original Table Header:\n");
5891a39cfb0SJung-uk Kim     AcpiOsPrintf (" *     Signature        \"%4.4s\"\n",    Table->Signature);
5901a39cfb0SJung-uk Kim     AcpiOsPrintf (" *     Length           0x%8.8X (%u)\n", Table->Length, Table->Length);
591a9f12690SJung-uk Kim 
592a9f12690SJung-uk Kim     /* Print and validate the revision */
593a9f12690SJung-uk Kim 
594a9f12690SJung-uk Kim     AcpiOsPrintf (" *     Revision         0x%2.2X",      Table->Revision);
595a9f12690SJung-uk Kim 
596a9f12690SJung-uk Kim     switch (Table->Revision)
597a9f12690SJung-uk Kim     {
598a9f12690SJung-uk Kim     case 0:
599a9f12690SJung-uk Kim         AcpiOsPrintf (" **** Invalid Revision");
600a9f12690SJung-uk Kim         break;
601a9f12690SJung-uk Kim 
602a9f12690SJung-uk Kim     case 1:
603a9f12690SJung-uk Kim         /* Revision of DSDT controls the ACPI integer width */
604a9f12690SJung-uk Kim 
605a9f12690SJung-uk Kim         if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_DSDT))
606a9f12690SJung-uk Kim         {
607d244b227SJung-uk Kim             AcpiOsPrintf (" **** 32-bit table (V1), no 64-bit math support");
608a9f12690SJung-uk Kim         }
609a9f12690SJung-uk Kim         break;
610a9f12690SJung-uk Kim 
611a9f12690SJung-uk Kim     default:
612a9f12690SJung-uk Kim         break;
613a9f12690SJung-uk Kim     }
614a9f12690SJung-uk Kim     AcpiOsPrintf ("\n");
615a9f12690SJung-uk Kim 
616a9f12690SJung-uk Kim     /* Print and validate the table checksum */
617a9f12690SJung-uk Kim 
618a9f12690SJung-uk Kim     AcpiOsPrintf (" *     Checksum         0x%2.2X",        Table->Checksum);
619a9f12690SJung-uk Kim 
620a9f12690SJung-uk Kim     Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), Table->Length);
621a9f12690SJung-uk Kim     if (Checksum)
622a9f12690SJung-uk Kim     {
623a9f12690SJung-uk Kim         AcpiOsPrintf (" **** Incorrect checksum, should be 0x%2.2X",
624a9f12690SJung-uk Kim             (UINT8) (Table->Checksum - Checksum));
625a9f12690SJung-uk Kim     }
626a9f12690SJung-uk Kim     AcpiOsPrintf ("\n");
627a9f12690SJung-uk Kim 
6281a39cfb0SJung-uk Kim     AcpiOsPrintf (" *     OEM ID           \"%.6s\"\n",     Table->OemId);
6291a39cfb0SJung-uk Kim     AcpiOsPrintf (" *     OEM Table ID     \"%.8s\"\n",     Table->OemTableId);
6301a39cfb0SJung-uk Kim     AcpiOsPrintf (" *     OEM Revision     0x%8.8X (%u)\n", Table->OemRevision, Table->OemRevision);
631a9f12690SJung-uk Kim     AcpiOsPrintf (" *     Compiler ID      \"%.4s\"\n",     Table->AslCompilerId);
632a9f12690SJung-uk Kim     AcpiOsPrintf (" *     Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision);
633a88e22b7SJung-uk Kim     AcpiOsPrintf (" */\n\n");
6341a39cfb0SJung-uk Kim 
6351a39cfb0SJung-uk Kim     /* Create AML output filename based on input filename */
6361a39cfb0SJung-uk Kim 
6371a39cfb0SJung-uk Kim     if (Filename)
6381a39cfb0SJung-uk Kim     {
6391a39cfb0SJung-uk Kim         NewFilename = FlGenerateFilename (Filename, "aml");
6401a39cfb0SJung-uk Kim     }
6411a39cfb0SJung-uk Kim     else
6421a39cfb0SJung-uk Kim     {
6431a39cfb0SJung-uk Kim         NewFilename = ACPI_ALLOCATE_ZEROED (9);
6441a39cfb0SJung-uk Kim         strncat (NewFilename, Table->Signature, 4);
6451a39cfb0SJung-uk Kim         strcat (NewFilename, ".aml");
6461a39cfb0SJung-uk Kim     }
6471a39cfb0SJung-uk Kim 
6481a39cfb0SJung-uk Kim     /* Open the ASL definition block */
64959db4265SNate Lawson 
65059db4265SNate Lawson     AcpiOsPrintf (
651a88e22b7SJung-uk Kim         "DefinitionBlock (\"%s\", \"%4.4s\", %hu, \"%.6s\", \"%.8s\", 0x%8.8X)\n",
6521a39cfb0SJung-uk Kim         NewFilename, Table->Signature, Table->Revision,
65359db4265SNate Lawson         Table->OemId, Table->OemTableId, Table->OemRevision);
654a9f12690SJung-uk Kim 
655a9f12690SJung-uk Kim     ACPI_FREE (NewFilename);
65659db4265SNate Lawson }
65759db4265SNate Lawson 
65859db4265SNate Lawson 
65959db4265SNate Lawson /******************************************************************************
66059db4265SNate Lawson  *
66159db4265SNate Lawson  * FUNCTION:    AdDisplayTables
66259db4265SNate Lawson  *
66359db4265SNate Lawson  * PARAMETERS:  Filename            - Input file for the table
664fba7fc7eSJung-uk Kim  *              Table               - Pointer to the raw table
66559db4265SNate Lawson  *
66659db4265SNate Lawson  * RETURN:      Status
66759db4265SNate Lawson  *
66859db4265SNate Lawson  * DESCRIPTION: Display (disassemble) loaded tables and dump raw tables
66959db4265SNate Lawson  *
67059db4265SNate Lawson  *****************************************************************************/
67159db4265SNate Lawson 
67259db4265SNate Lawson ACPI_STATUS
67359db4265SNate Lawson AdDisplayTables (
67459db4265SNate Lawson     char                    *Filename,
67559db4265SNate Lawson     ACPI_TABLE_HEADER       *Table)
67659db4265SNate Lawson {
67759db4265SNate Lawson 
67859db4265SNate Lawson 
6791a39cfb0SJung-uk Kim     if (!AcpiGbl_ParseOpRoot)
68059db4265SNate Lawson     {
68159db4265SNate Lawson         return AE_NOT_EXIST;
68259db4265SNate Lawson     }
68359db4265SNate Lawson 
68459db4265SNate Lawson     if (!AcpiGbl_DbOpt_verbose)
68559db4265SNate Lawson     {
68659db4265SNate Lawson         AdCreateTableHeader (Filename, Table);
68759db4265SNate Lawson     }
68859db4265SNate Lawson 
6891a39cfb0SJung-uk Kim     AcpiDmDisassemble (NULL, AcpiGbl_ParseOpRoot, ACPI_UINT32_MAX);
69059db4265SNate Lawson 
69159db4265SNate Lawson     if (AcpiGbl_DbOpt_verbose)
69259db4265SNate Lawson     {
69359db4265SNate Lawson         AcpiOsPrintf ("\n\nTable Header:\n");
69459db4265SNate Lawson         AcpiUtDumpBuffer ((UINT8 *) Table, sizeof (ACPI_TABLE_HEADER),
69559db4265SNate Lawson             DB_BYTE_DISPLAY, ACPI_UINT32_MAX);
69659db4265SNate Lawson 
69759db4265SNate Lawson         AcpiOsPrintf ("Table Body (Length 0x%X)\n", Table->Length);
69859db4265SNate Lawson         AcpiUtDumpBuffer (((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER)), Table->Length,
69959db4265SNate Lawson             DB_BYTE_DISPLAY, ACPI_UINT32_MAX);
70059db4265SNate Lawson     }
70159db4265SNate Lawson 
70259db4265SNate Lawson     return AE_OK;
70359db4265SNate Lawson }
70459db4265SNate Lawson 
70559db4265SNate Lawson 
70659db4265SNate Lawson /******************************************************************************
70759db4265SNate Lawson  *
70859db4265SNate Lawson  * FUNCTION:    AdDeferredParse
70959db4265SNate Lawson  *
71059db4265SNate Lawson  * PARAMETERS:  Op                  - Root Op of the deferred opcode
71159db4265SNate Lawson  *              Aml                 - Pointer to the raw AML
71259db4265SNate Lawson  *              AmlLength           - Length of the AML
71359db4265SNate Lawson  *
71459db4265SNate Lawson  * RETURN:      Status
71559db4265SNate Lawson  *
71659db4265SNate Lawson  * DESCRIPTION: Parse one deferred opcode
71759db4265SNate Lawson  *              (Methods, operation regions, etc.)
71859db4265SNate Lawson  *
71959db4265SNate Lawson  *****************************************************************************/
72059db4265SNate Lawson 
72142fecd12SJung-uk Kim static ACPI_STATUS
72259db4265SNate Lawson AdDeferredParse (
72359db4265SNate Lawson     ACPI_PARSE_OBJECT       *Op,
72459db4265SNate Lawson     UINT8                   *Aml,
72559db4265SNate Lawson     UINT32                  AmlLength)
72659db4265SNate Lawson {
72759db4265SNate Lawson     ACPI_WALK_STATE         *WalkState;
72859db4265SNate Lawson     ACPI_STATUS             Status;
72959db4265SNate Lawson     ACPI_PARSE_OBJECT       *SearchOp;
73059db4265SNate Lawson     ACPI_PARSE_OBJECT       *StartOp;
73159db4265SNate Lawson     UINT32                  BaseAmlOffset;
73259db4265SNate Lawson     ACPI_PARSE_OBJECT       *ExtraOp;
73359db4265SNate Lawson 
73459db4265SNate Lawson 
7351a39cfb0SJung-uk Kim     ACPI_FUNCTION_TRACE (AdDeferredParse);
73659db4265SNate Lawson 
73759db4265SNate Lawson 
73859db4265SNate Lawson     fprintf (stderr, ".");
73959db4265SNate Lawson 
74059db4265SNate Lawson     if (!Aml || !AmlLength)
74159db4265SNate Lawson     {
74259db4265SNate Lawson         return_ACPI_STATUS (AE_OK);
74359db4265SNate Lawson     }
74459db4265SNate Lawson 
74559db4265SNate Lawson     ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Parsing %s [%4.4s]\n",
74659db4265SNate Lawson         Op->Common.AmlOpName, (char *) &Op->Named.Name));
74759db4265SNate Lawson 
74859db4265SNate Lawson     WalkState = AcpiDsCreateWalkState (0, Op, NULL, NULL);
74959db4265SNate Lawson     if (!WalkState)
75059db4265SNate Lawson     {
75159db4265SNate Lawson         return_ACPI_STATUS (AE_NO_MEMORY);
75259db4265SNate Lawson     }
75359db4265SNate Lawson 
75459db4265SNate Lawson     Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, Aml,
7551a39cfb0SJung-uk Kim                     AmlLength, NULL, ACPI_IMODE_LOAD_PASS1);
75659db4265SNate Lawson     if (ACPI_FAILURE (Status))
75759db4265SNate Lawson     {
75859db4265SNate Lawson         return_ACPI_STATUS (Status);
75959db4265SNate Lawson     }
76059db4265SNate Lawson 
76159db4265SNate Lawson     /* Parse the method */
76259db4265SNate Lawson 
76359db4265SNate Lawson     WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE;
764fba7fc7eSJung-uk Kim     WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE;
76559db4265SNate Lawson     Status = AcpiPsParseAml (WalkState);
76659db4265SNate Lawson 
76759db4265SNate Lawson     /*
76859db4265SNate Lawson      * We need to update all of the Aml offsets, since the parser thought
76959db4265SNate Lawson      * that the method began at offset zero.  In reality, it began somewhere
77059db4265SNate Lawson      * within the ACPI table, at the BaseAmlOffset.  Walk the entire tree that
77159db4265SNate Lawson      * was just created and update the AmlOffset in each Op
77259db4265SNate Lawson      */
77359db4265SNate Lawson     BaseAmlOffset = (Op->Common.Value.Arg)->Common.AmlOffset + 1;
77459db4265SNate Lawson     StartOp = (Op->Common.Value.Arg)->Common.Next;
77559db4265SNate Lawson     SearchOp = StartOp;
77659db4265SNate Lawson 
77759db4265SNate Lawson     /* Walk the parse tree */
77859db4265SNate Lawson 
77959db4265SNate Lawson     while (SearchOp)
78059db4265SNate Lawson     {
78159db4265SNate Lawson         SearchOp->Common.AmlOffset += BaseAmlOffset;
78259db4265SNate Lawson         SearchOp = AcpiPsGetDepthNext (StartOp, SearchOp);
78359db4265SNate Lawson     }
78459db4265SNate Lawson 
78559db4265SNate Lawson     /*
78659db4265SNate Lawson      * Link the newly parsed subtree into the main parse tree
78759db4265SNate Lawson      */
78859db4265SNate Lawson     switch (Op->Common.AmlOpcode)
78959db4265SNate Lawson     {
79059db4265SNate Lawson     case AML_BUFFER_OP:
79159db4265SNate Lawson     case AML_PACKAGE_OP:
79259db4265SNate Lawson     case AML_VAR_PACKAGE_OP:
79359db4265SNate Lawson 
79459db4265SNate Lawson         switch (Op->Common.AmlOpcode)
79559db4265SNate Lawson         {
79659db4265SNate Lawson         case AML_PACKAGE_OP:
79759db4265SNate Lawson             ExtraOp = Op->Common.Value.Arg;
79859db4265SNate Lawson             ExtraOp = ExtraOp->Common.Next;
79959db4265SNate Lawson             Op->Common.Value.Arg = ExtraOp->Common.Value.Arg;
80059db4265SNate Lawson             break;
80159db4265SNate Lawson 
802fba7fc7eSJung-uk Kim         case AML_VAR_PACKAGE_OP:
80359db4265SNate Lawson         case AML_BUFFER_OP:
80459db4265SNate Lawson         default:
80559db4265SNate Lawson             ExtraOp = Op->Common.Value.Arg;
80659db4265SNate Lawson             Op->Common.Value.Arg = ExtraOp->Common.Value.Arg;
80759db4265SNate Lawson             break;
80859db4265SNate Lawson         }
80959db4265SNate Lawson 
81059db4265SNate Lawson         /* Must point all parents to the main tree */
81159db4265SNate Lawson 
81259db4265SNate Lawson         StartOp = Op;
81359db4265SNate Lawson         SearchOp = StartOp;
81459db4265SNate Lawson         while (SearchOp)
81559db4265SNate Lawson         {
81659db4265SNate Lawson             if (SearchOp->Common.Parent == ExtraOp)
81759db4265SNate Lawson             {
81859db4265SNate Lawson                 SearchOp->Common.Parent = Op;
81959db4265SNate Lawson             }
82059db4265SNate Lawson             SearchOp = AcpiPsGetDepthNext (StartOp, SearchOp);
82159db4265SNate Lawson         }
82259db4265SNate Lawson         break;
82359db4265SNate Lawson 
82459db4265SNate Lawson     default:
82559db4265SNate Lawson         break;
82659db4265SNate Lawson     }
82759db4265SNate Lawson 
82859db4265SNate Lawson     return_ACPI_STATUS (AE_OK);
82959db4265SNate Lawson }
83059db4265SNate Lawson 
83159db4265SNate Lawson 
83259db4265SNate Lawson /******************************************************************************
83359db4265SNate Lawson  *
83459db4265SNate Lawson  * FUNCTION:    AdParseDeferredOps
83559db4265SNate Lawson  *
83659db4265SNate Lawson  * PARAMETERS:  Root                - Root of the parse tree
83759db4265SNate Lawson  *
83859db4265SNate Lawson  * RETURN:      Status
83959db4265SNate Lawson  *
84059db4265SNate Lawson  * DESCRIPTION: Parse the deferred opcodes (Methods, regions, etc.)
84159db4265SNate Lawson  *
84259db4265SNate Lawson  *****************************************************************************/
84359db4265SNate Lawson 
84442fecd12SJung-uk Kim static ACPI_STATUS
84559db4265SNate Lawson AdParseDeferredOps (
84659db4265SNate Lawson     ACPI_PARSE_OBJECT       *Root)
84759db4265SNate Lawson {
84859db4265SNate Lawson     ACPI_PARSE_OBJECT       *Op = Root;
84959db4265SNate Lawson     ACPI_STATUS             Status = AE_OK;
85059db4265SNate Lawson     const ACPI_OPCODE_INFO  *OpInfo;
85159db4265SNate Lawson 
85259db4265SNate Lawson 
8531a39cfb0SJung-uk Kim     ACPI_FUNCTION_NAME (AdParseDeferredOps);
85459db4265SNate Lawson     fprintf (stderr, "Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)\n");
85559db4265SNate Lawson 
85659db4265SNate Lawson     while (Op)
85759db4265SNate Lawson     {
85859db4265SNate Lawson         OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
85959db4265SNate Lawson         if (!(OpInfo->Flags & AML_DEFER))
86059db4265SNate Lawson         {
86159db4265SNate Lawson             Op = AcpiPsGetDepthNext (Root, Op);
86259db4265SNate Lawson             continue;
86359db4265SNate Lawson         }
86459db4265SNate Lawson 
86559db4265SNate Lawson         switch (Op->Common.AmlOpcode)
86659db4265SNate Lawson         {
86759db4265SNate Lawson         case AML_METHOD_OP:
86859db4265SNate Lawson         case AML_BUFFER_OP:
86959db4265SNate Lawson         case AML_PACKAGE_OP:
87059db4265SNate Lawson         case AML_VAR_PACKAGE_OP:
87159db4265SNate Lawson 
87259db4265SNate Lawson             Status = AdDeferredParse (Op, Op->Named.Data, Op->Named.Length);
87359db4265SNate Lawson             if (ACPI_FAILURE (Status))
87459db4265SNate Lawson             {
87559db4265SNate Lawson                 return_ACPI_STATUS (Status);
87659db4265SNate Lawson             }
87759db4265SNate Lawson             break;
87859db4265SNate Lawson 
87959db4265SNate Lawson         case AML_REGION_OP:
8803f0275a0SJung-uk Kim         case AML_DATA_REGION_OP:
88159db4265SNate Lawson         case AML_CREATE_QWORD_FIELD_OP:
88259db4265SNate Lawson         case AML_CREATE_DWORD_FIELD_OP:
88359db4265SNate Lawson         case AML_CREATE_WORD_FIELD_OP:
88459db4265SNate Lawson         case AML_CREATE_BYTE_FIELD_OP:
88559db4265SNate Lawson         case AML_CREATE_BIT_FIELD_OP:
88659db4265SNate Lawson         case AML_CREATE_FIELD_OP:
887a9f12690SJung-uk Kim         case AML_BANK_FIELD_OP:
88859db4265SNate Lawson 
88959db4265SNate Lawson             /* Nothing to do in these cases */
89059db4265SNate Lawson 
89159db4265SNate Lawson             break;
89259db4265SNate Lawson 
89359db4265SNate Lawson         default:
8941a39cfb0SJung-uk Kim             ACPI_ERROR ((AE_INFO, "Unhandled deferred opcode [%s]",
89559db4265SNate Lawson                 Op->Common.AmlOpName));
89659db4265SNate Lawson             break;
89759db4265SNate Lawson         }
89859db4265SNate Lawson 
89959db4265SNate Lawson         Op = AcpiPsGetDepthNext (Root, Op);
90059db4265SNate Lawson     }
90159db4265SNate Lawson 
90259db4265SNate Lawson     fprintf (stderr, "\n");
90359db4265SNate Lawson     return Status;
90459db4265SNate Lawson }
90559db4265SNate Lawson 
90659db4265SNate Lawson 
90759db4265SNate Lawson /******************************************************************************
90859db4265SNate Lawson  *
90959db4265SNate Lawson  * FUNCTION:    AdGetLocalTables
91059db4265SNate Lawson  *
911fba7fc7eSJung-uk Kim  * PARAMETERS:  Filename            - Not used
912fba7fc7eSJung-uk Kim  *              GetAllTables        - TRUE if all tables are desired
91359db4265SNate Lawson  *
914fba7fc7eSJung-uk Kim  * RETURN:      Status
91559db4265SNate Lawson  *
91659db4265SNate Lawson  * DESCRIPTION: Get the ACPI tables from either memory or a file
91759db4265SNate Lawson  *
91859db4265SNate Lawson  *****************************************************************************/
91959db4265SNate Lawson 
92059db4265SNate Lawson ACPI_STATUS
92159db4265SNate Lawson AdGetLocalTables (
92259db4265SNate Lawson     char                    *Filename,
92359db4265SNate Lawson     BOOLEAN                 GetAllTables)
92459db4265SNate Lawson {
92559db4265SNate Lawson     ACPI_STATUS             Status;
92659db4265SNate Lawson     ACPI_TABLE_HEADER       TableHeader;
92759db4265SNate Lawson     ACPI_TABLE_HEADER       *NewTable;
92859db4265SNate Lawson     UINT32                  NumTables;
92959db4265SNate Lawson     UINT32                  PointerSize;
930a9f12690SJung-uk Kim     UINT32                  TableIndex;
93159db4265SNate Lawson 
93259db4265SNate Lawson 
93359db4265SNate Lawson     if (GetAllTables)
93459db4265SNate Lawson     {
9351a39cfb0SJung-uk Kim         ACPI_MOVE_32_TO_32 (TableHeader.Signature, ACPI_SIG_RSDT);
93659db4265SNate Lawson         AcpiOsTableOverride (&TableHeader, &NewTable);
937e50beb51SNate Lawson         if (!NewTable)
938e50beb51SNate Lawson         {
939e50beb51SNate Lawson             fprintf (stderr, "Could not obtain RSDT\n");
940e50beb51SNate Lawson             return AE_NO_ACPI_TABLES;
941e50beb51SNate Lawson         }
942a9f12690SJung-uk Kim         else
943a9f12690SJung-uk Kim         {
944a9f12690SJung-uk Kim             AdWriteTable (NewTable, NewTable->Length,
945a9f12690SJung-uk Kim                 ACPI_SIG_RSDT, NewTable->OemTableId);
946a9f12690SJung-uk Kim         }
94759db4265SNate Lawson 
9481a39cfb0SJung-uk Kim         if (ACPI_COMPARE_NAME (NewTable->Signature, ACPI_SIG_RSDT))
94959db4265SNate Lawson         {
95059db4265SNate Lawson             PointerSize = sizeof (UINT32);
95159db4265SNate Lawson         }
95259db4265SNate Lawson         else
95359db4265SNate Lawson         {
95459db4265SNate Lawson             PointerSize = sizeof (UINT64);
95559db4265SNate Lawson         }
95659db4265SNate Lawson 
95759db4265SNate Lawson         /*
95859db4265SNate Lawson          * Determine the number of tables pointed to by the RSDT/XSDT.
95959db4265SNate Lawson          * This is defined by the ACPI Specification to be the number of
96059db4265SNate Lawson          * pointers contained within the RSDT/XSDT.  The size of the pointers
96159db4265SNate Lawson          * is architecture-dependent.
96259db4265SNate Lawson          */
96359db4265SNate Lawson         NumTables = (NewTable->Length - sizeof (ACPI_TABLE_HEADER)) / PointerSize;
964a88e22b7SJung-uk Kim         AcpiOsPrintf ("There are %u tables defined in the %4.4s\n\n",
96559db4265SNate Lawson             NumTables, NewTable->Signature);
96659db4265SNate Lawson 
96759db4265SNate Lawson         /* Get the FADT */
96859db4265SNate Lawson 
9691a39cfb0SJung-uk Kim         ACPI_MOVE_32_TO_32 (TableHeader.Signature, ACPI_SIG_FADT);
97059db4265SNate Lawson         AcpiOsTableOverride (&TableHeader, &NewTable);
97159db4265SNate Lawson         if (NewTable)
97259db4265SNate Lawson         {
97359db4265SNate Lawson             AdWriteTable (NewTable, NewTable->Length,
9741a39cfb0SJung-uk Kim                 ACPI_SIG_FADT, NewTable->OemTableId);
97559db4265SNate Lawson         }
97659db4265SNate Lawson         AcpiOsPrintf ("\n");
97759db4265SNate Lawson 
9781a39cfb0SJung-uk Kim         /* Don't bother with FACS, it is usually all zeros */
97959db4265SNate Lawson     }
98059db4265SNate Lawson 
98159db4265SNate Lawson     /* Always get the DSDT */
98259db4265SNate Lawson 
9831a39cfb0SJung-uk Kim     ACPI_MOVE_32_TO_32 (TableHeader.Signature, ACPI_SIG_DSDT);
98459db4265SNate Lawson     AcpiOsTableOverride (&TableHeader, &NewTable);
98559db4265SNate Lawson     if (NewTable)
98659db4265SNate Lawson     {
9871a39cfb0SJung-uk Kim         AdWriteTable (NewTable, NewTable->Length,
9881a39cfb0SJung-uk Kim             ACPI_SIG_DSDT, NewTable->OemTableId);
9891a39cfb0SJung-uk Kim 
9901a39cfb0SJung-uk Kim         /* Store DSDT in the Table Manager */
9911a39cfb0SJung-uk Kim 
9921a39cfb0SJung-uk Kim         Status = AcpiTbStoreTable (0, NewTable, NewTable->Length,
9931a39cfb0SJung-uk Kim                     0, &TableIndex);
994f556842eSJung-uk Kim         if (ACPI_FAILURE (Status))
995f556842eSJung-uk Kim         {
996f556842eSJung-uk Kim             fprintf (stderr, "Could not store DSDT\n");
997f556842eSJung-uk Kim             return AE_NO_ACPI_TABLES;
998f556842eSJung-uk Kim         }
99959db4265SNate Lawson     }
100059db4265SNate Lawson     else
100159db4265SNate Lawson     {
100259db4265SNate Lawson         fprintf (stderr, "Could not obtain DSDT\n");
1003e50beb51SNate Lawson         return AE_NO_ACPI_TABLES;
100459db4265SNate Lawson     }
100559db4265SNate Lawson 
10061a39cfb0SJung-uk Kim #if 0
10071a39cfb0SJung-uk Kim     /* TBD: Future implementation */
10081a39cfb0SJung-uk Kim 
100959db4265SNate Lawson     AcpiOsPrintf ("\n");
101059db4265SNate Lawson 
101159db4265SNate Lawson     /* Get all SSDTs */
101259db4265SNate Lawson 
10131a39cfb0SJung-uk Kim     ACPI_MOVE_32_TO_32 (TableHeader.Signature, ACPI_SIG_SSDT);
10141a39cfb0SJung-uk Kim     do
101559db4265SNate Lawson     {
10161a39cfb0SJung-uk Kim         NewTable = NULL;
101759db4265SNate Lawson         Status = AcpiOsTableOverride (&TableHeader, &NewTable);
10181a39cfb0SJung-uk Kim 
10191a39cfb0SJung-uk Kim     } while (NewTable);
10201a39cfb0SJung-uk Kim #endif
102159db4265SNate Lawson 
102259db4265SNate Lawson     return AE_OK;
102359db4265SNate Lawson }
102459db4265SNate Lawson 
10251a39cfb0SJung-uk Kim 
102659db4265SNate Lawson /******************************************************************************
102759db4265SNate Lawson  *
102859db4265SNate Lawson  * FUNCTION:    AdParseTable
102959db4265SNate Lawson  *
1030fba7fc7eSJung-uk Kim  * PARAMETERS:  Table               - Pointer to the raw table
1031a9f12690SJung-uk Kim  *              OwnerId             - Returned OwnerId of the table
1032a9f12690SJung-uk Kim  *              LoadTable           - If add table to the global table list
1033a9f12690SJung-uk Kim  *              External            - If this is an external table
103459db4265SNate Lawson  *
103559db4265SNate Lawson  * RETURN:      Status
103659db4265SNate Lawson  *
103759db4265SNate Lawson  * DESCRIPTION: Parse the DSDT.
103859db4265SNate Lawson  *
103959db4265SNate Lawson  *****************************************************************************/
104059db4265SNate Lawson 
104159db4265SNate Lawson ACPI_STATUS
104259db4265SNate Lawson AdParseTable (
1043a9f12690SJung-uk Kim     ACPI_TABLE_HEADER       *Table,
1044a9f12690SJung-uk Kim     ACPI_OWNER_ID           *OwnerId,
1045a9f12690SJung-uk Kim     BOOLEAN                 LoadTable,
1046a9f12690SJung-uk Kim     BOOLEAN                 External)
104759db4265SNate Lawson {
104859db4265SNate Lawson     ACPI_STATUS             Status = AE_OK;
104959db4265SNate Lawson     ACPI_WALK_STATE         *WalkState;
105059db4265SNate Lawson     UINT8                   *AmlStart;
105159db4265SNate Lawson     UINT32                  AmlLength;
1052a9f12690SJung-uk Kim     UINT32                  TableIndex;
105359db4265SNate Lawson 
105459db4265SNate Lawson 
105559db4265SNate Lawson     if (!Table)
105659db4265SNate Lawson     {
105759db4265SNate Lawson         return AE_NOT_EXIST;
105859db4265SNate Lawson     }
105959db4265SNate Lawson 
106059db4265SNate Lawson     /* Pass 1:  Parse everything except control method bodies */
106159db4265SNate Lawson 
106259db4265SNate Lawson     fprintf (stderr, "Pass 1 parse of [%4.4s]\n", (char *) Table->Signature);
106359db4265SNate Lawson 
106459db4265SNate Lawson     AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
106559db4265SNate Lawson     AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER));
106659db4265SNate Lawson 
106759db4265SNate Lawson     /* Create the root object */
106859db4265SNate Lawson 
10691a39cfb0SJung-uk Kim     AcpiGbl_ParseOpRoot = AcpiPsCreateScopeOp ();
10701a39cfb0SJung-uk Kim     if (!AcpiGbl_ParseOpRoot)
107159db4265SNate Lawson     {
107259db4265SNate Lawson         return AE_NO_MEMORY;
107359db4265SNate Lawson     }
107459db4265SNate Lawson 
107559db4265SNate Lawson     /* Create and initialize a new walk state */
107659db4265SNate Lawson 
107759db4265SNate Lawson     WalkState = AcpiDsCreateWalkState (0,
10781a39cfb0SJung-uk Kim                         AcpiGbl_ParseOpRoot, NULL, NULL);
107959db4265SNate Lawson     if (!WalkState)
108059db4265SNate Lawson     {
108159db4265SNate Lawson         return (AE_NO_MEMORY);
108259db4265SNate Lawson     }
108359db4265SNate Lawson 
10841a39cfb0SJung-uk Kim     Status = AcpiDsInitAmlWalk (WalkState, AcpiGbl_ParseOpRoot,
10851a39cfb0SJung-uk Kim                 NULL, AmlStart, AmlLength, NULL, ACPI_IMODE_LOAD_PASS1);
108659db4265SNate Lawson     if (ACPI_FAILURE (Status))
108759db4265SNate Lawson     {
108859db4265SNate Lawson         return (Status);
108959db4265SNate Lawson     }
109059db4265SNate Lawson 
109159db4265SNate Lawson     WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE;
1092fba7fc7eSJung-uk Kim     WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE;
109359db4265SNate Lawson 
109459db4265SNate Lawson     Status = AcpiPsParseAml (WalkState);
109559db4265SNate Lawson     if (ACPI_FAILURE (Status))
109659db4265SNate Lawson     {
109759db4265SNate Lawson         return Status;
109859db4265SNate Lawson     }
109959db4265SNate Lawson 
1100a9f12690SJung-uk Kim     /* If LoadTable is FALSE, we are parsing the last loaded table */
1101a9f12690SJung-uk Kim 
11023f5e024cSJung-uk Kim     TableIndex = AcpiGbl_RootTableList.CurrentTableCount - 1;
1103a9f12690SJung-uk Kim 
110459db4265SNate Lawson     /* Pass 2 */
110559db4265SNate Lawson 
1106a9f12690SJung-uk Kim     if (LoadTable)
1107a9f12690SJung-uk Kim     {
1108a9f12690SJung-uk Kim         Status = AcpiTbStoreTable ((ACPI_PHYSICAL_ADDRESS) Table, Table,
11091a39cfb0SJung-uk Kim                     Table->Length, ACPI_TABLE_ORIGIN_ALLOCATED, &TableIndex);
11101a39cfb0SJung-uk Kim         if (ACPI_FAILURE (Status))
11111a39cfb0SJung-uk Kim         {
11121a39cfb0SJung-uk Kim             return Status;
11131a39cfb0SJung-uk Kim         }
1114a9f12690SJung-uk Kim         Status = AcpiTbAllocateOwnerId (TableIndex);
1115a9f12690SJung-uk Kim         if (ACPI_FAILURE (Status))
1116a9f12690SJung-uk Kim         {
1117a9f12690SJung-uk Kim             return Status;
1118a9f12690SJung-uk Kim         }
1119a9f12690SJung-uk Kim         if (OwnerId)
1120a9f12690SJung-uk Kim         {
1121a9f12690SJung-uk Kim             Status = AcpiTbGetOwnerId (TableIndex, OwnerId);
1122a9f12690SJung-uk Kim             if (ACPI_FAILURE (Status))
1123a9f12690SJung-uk Kim             {
1124a9f12690SJung-uk Kim                 return Status;
1125a9f12690SJung-uk Kim             }
1126a9f12690SJung-uk Kim         }
1127a9f12690SJung-uk Kim     }
112859db4265SNate Lawson 
11291a39cfb0SJung-uk Kim     fprintf (stderr, "Pass 2 parse of [%4.4s]\n", (char *) Table->Signature);
11301a39cfb0SJung-uk Kim 
1131a9f12690SJung-uk Kim     Status = AcpiNsOneCompleteParse (ACPI_IMODE_LOAD_PASS2, TableIndex, NULL);
113259db4265SNate Lawson     if (ACPI_FAILURE (Status))
113359db4265SNate Lawson     {
113459db4265SNate Lawson         return (Status);
113559db4265SNate Lawson     }
113659db4265SNate Lawson 
1137a9f12690SJung-uk Kim     /* No need to parse control methods of external table */
1138a9f12690SJung-uk Kim 
1139a9f12690SJung-uk Kim     if (External)
1140a9f12690SJung-uk Kim     {
1141a9f12690SJung-uk Kim         return AE_OK;
1142a9f12690SJung-uk Kim     }
1143a9f12690SJung-uk Kim 
114459db4265SNate Lawson     /* Pass 3: Parse control methods and link their parse trees into the main parse tree */
114559db4265SNate Lawson 
11461a39cfb0SJung-uk Kim     Status = AdParseDeferredOps (AcpiGbl_ParseOpRoot);
11471a39cfb0SJung-uk Kim 
11481a39cfb0SJung-uk Kim     /* Process Resource Templates */
11491a39cfb0SJung-uk Kim 
11501a39cfb0SJung-uk Kim     AcpiDmFindResources (AcpiGbl_ParseOpRoot);
115159db4265SNate Lawson 
115259db4265SNate Lawson     fprintf (stderr, "Parsing completed\n");
115359db4265SNate Lawson     return AE_OK;
115459db4265SNate Lawson }
115559db4265SNate Lawson 
115659db4265SNate Lawson 
1157