summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/common
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/common')
-rw-r--r--sys/contrib/dev/acpica/common/adisasm.c66
-rw-r--r--sys/contrib/dev/acpica/common/dmextern.c89
2 files changed, 126 insertions, 29 deletions
diff --git a/sys/contrib/dev/acpica/common/adisasm.c b/sys/contrib/dev/acpica/common/adisasm.c
index c7ace4b..da754a0 100644
--- a/sys/contrib/dev/acpica/common/adisasm.c
+++ b/sys/contrib/dev/acpica/common/adisasm.c
@@ -134,7 +134,6 @@
extern int AslCompilerdebug;
-extern char *Gbl_ExternalFilename;
ACPI_STATUS
@@ -313,6 +312,7 @@ AdAmlDisassemble (
ACPI_STATUS Status;
char *DisasmFilename = NULL;
char *ExternalFilename;
+ ACPI_EXTERNAL_FILE *ExternalFileList = AcpiGbl_ExternalFileList;
FILE *File = NULL;
ACPI_TABLE_HEADER *Table = NULL;
ACPI_TABLE_HEADER *ExternalTable;
@@ -335,46 +335,54 @@ AdAmlDisassemble (
* External filenames separated by commas
* Example: iasl -e file1,file2,file3 -d xxx.aml
*/
- if (Gbl_ExternalFilename)
+ while (ExternalFileList)
{
- ExternalFilename = strtok (Gbl_ExternalFilename, ",");
+ ExternalFilename = ExternalFileList->Path;
+ if (!ACPI_STRCMP (ExternalFilename, Filename))
+ {
+ /* Next external file */
+
+ ExternalFileList = ExternalFileList->Next;
- while (ExternalFilename)
+ continue;
+ }
+
+ Status = AcpiDbGetTableFromFile (ExternalFilename, &ExternalTable);
+ if (ACPI_FAILURE (Status))
{
- Status = AcpiDbGetTableFromFile (ExternalFilename, &ExternalTable);
+ return Status;
+ }
+
+ /* Load external table for symbol resolution */
+
+ if (ExternalTable)
+ {
+ Status = AdParseTable (ExternalTable, &OwnerId, TRUE, TRUE);
if (ACPI_FAILURE (Status))
{
+ AcpiOsPrintf ("Could not parse external ACPI tables, %s\n",
+ AcpiFormatException (Status));
return Status;
}
- /* Load external table for symbol resolution */
-
- if (ExternalTable)
- {
- Status = AdParseTable (ExternalTable, &OwnerId, TRUE, TRUE);
- if (ACPI_FAILURE (Status))
- {
- AcpiOsPrintf ("Could not parse external ACPI tables, %s\n",
- AcpiFormatException (Status));
- return Status;
- }
-
- /*
- * Load namespace from names created within control methods
- * Set owner id of nodes in external table
- */
- AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot,
- AcpiGbl_RootNode, OwnerId);
- AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
- }
+ /*
+ * Load namespace from names created within control methods
+ * Set owner id of nodes in external table
+ */
+ AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot,
+ AcpiGbl_RootNode, OwnerId);
+ AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
+ }
- /* Next external file name */
+ /* Next external file */
- ExternalFilename = strtok (NULL, ",");
- }
+ ExternalFileList = ExternalFileList->Next;
+ }
- /* Clear external list generated by Scope in external tables */
+ /* Clear external list generated by Scope in external tables */
+ if (AcpiGbl_ExternalFileList)
+ {
AcpiDmClearExternalList ();
}
}
diff --git a/sys/contrib/dev/acpica/common/dmextern.c b/sys/contrib/dev/acpica/common/dmextern.c
index 7479910..a78fa3f 100644
--- a/sys/contrib/dev/acpica/common/dmextern.c
+++ b/sys/contrib/dev/acpica/common/dmextern.c
@@ -312,6 +312,95 @@ Cleanup:
/*******************************************************************************
*
+ * FUNCTION: AcpiDmAddToExternalFileList
+ *
+ * PARAMETERS: PathList - Single path or list separated by comma
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Add external files to global list
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+AcpiDmAddToExternalFileList (
+ char *PathList)
+{
+ ACPI_EXTERNAL_FILE *ExternalFile;
+ char *Path;
+ char *TmpPath;
+
+
+ if (!PathList)
+ {
+ return (AE_OK);
+ }
+
+ Path = strtok (PathList, ",");
+
+ while (Path)
+ {
+ TmpPath = ACPI_ALLOCATE_ZEROED (ACPI_STRLEN (Path) + 1);
+ if (!TmpPath)
+ {
+ return (AE_NO_MEMORY);
+ }
+
+ ACPI_STRCPY (TmpPath, Path);
+
+ ExternalFile = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EXTERNAL_FILE));
+ if (!ExternalFile)
+ {
+ ACPI_FREE (TmpPath);
+ return (AE_NO_MEMORY);
+ }
+
+ ExternalFile->Path = TmpPath;
+
+ if (AcpiGbl_ExternalFileList)
+ {
+ ExternalFile->Next = AcpiGbl_ExternalFileList;
+ }
+
+ AcpiGbl_ExternalFileList = ExternalFile;
+ Path = strtok (NULL, ",");
+ }
+
+ return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmClearExternalFileList
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Clear the external file list
+ *
+ ******************************************************************************/
+
+void
+AcpiDmClearExternalFileList (
+ void)
+{
+ ACPI_EXTERNAL_FILE *NextExternal;
+
+
+ while (AcpiGbl_ExternalFileList)
+ {
+ NextExternal = AcpiGbl_ExternalFileList->Next;
+ ACPI_FREE (AcpiGbl_ExternalFileList->Path);
+ ACPI_FREE (AcpiGbl_ExternalFileList);
+ AcpiGbl_ExternalFileList = NextExternal;
+ }
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiDmAddToExternalList
*
* PARAMETERS: Op - Current parser Op
OpenPOWER on IntegriCloud