summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/compiler/aslstartup.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/compiler/aslstartup.c')
-rw-r--r--sys/contrib/dev/acpica/compiler/aslstartup.c97
1 files changed, 49 insertions, 48 deletions
diff --git a/sys/contrib/dev/acpica/compiler/aslstartup.c b/sys/contrib/dev/acpica/compiler/aslstartup.c
index 85e2f88..cd3bb94 100644
--- a/sys/contrib/dev/acpica/compiler/aslstartup.c
+++ b/sys/contrib/dev/acpica/compiler/aslstartup.c
@@ -5,7 +5,7 @@
*****************************************************************************/
/*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -144,62 +144,63 @@ AslDetectSourceFileType (
ASL_FILE_INFO *Info)
{
char *FileChar;
- UINT8 Type;
+ UINT8 Type = ASL_INPUT_TYPE_ASCII_DATA; /* default */
ACPI_STATUS Status;
- /* Check for a valid binary ACPI table */
+ /* Check for 100% ASCII source file (comments are ignored) */
- Status = FlCheckForAcpiTable (Info->Handle);
+ Status = FlIsFileAsciiSource (Info->Filename, FALSE);
if (ACPI_SUCCESS (Status))
{
- Type = ASL_INPUT_TYPE_ACPI_TABLE;
- goto Cleanup;
- }
+ /*
+ * File contains ASCII source code. Determine if this is an ASL
+ * file or an ACPI data table file.
+ */
+ while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, Info->Handle))
+ {
+ /* Uppercase the buffer for caseless compare */
- /* Check for 100% ASCII source file (comments are ignored) */
+ FileChar = Gbl_CurrentLineBuffer;
+ while (*FileChar)
+ {
+ *FileChar = (char) toupper ((int) *FileChar);
+ FileChar++;
+ }
- Status = FlCheckForAscii (Info->Filename, TRUE);
- if (ACPI_FAILURE (Status))
- {
- printf ("Invalid characters in input file - %s\n", Info->Filename);
+ /* Presence of "DefinitionBlock" indicates actual ASL code */
- if (!Gbl_IgnoreErrors)
- {
- Type = ASL_INPUT_TYPE_BINARY;
- goto Cleanup;
+ if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK"))
+ {
+ /* Appears to be an ASL file */
+
+ Type = ASL_INPUT_TYPE_ASCII_ASL;
+ goto Cleanup;
+ }
}
- }
- /*
- * File is ASCII. Determine if this is an ASL file or an ACPI data
- * table file.
- */
- while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, Info->Handle))
- {
- /* Uppercase the buffer for caseless compare */
+ /* Appears to be an ASCII data table source file */
- FileChar = Gbl_CurrentLineBuffer;
- while (*FileChar)
- {
- *FileChar = (char) toupper ((int) *FileChar);
- FileChar++;
- }
+ Type = ASL_INPUT_TYPE_ASCII_DATA;
+ goto Cleanup;
+ }
- /* Presence of "DefinitionBlock" indicates actual ASL code */
+ /* We have some sort of binary table, check for valid ACPI table */
- if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK"))
- {
- /* Appears to be an ASL file */
+ fseek (Info->Handle, 0, SEEK_SET);
- Type = ASL_INPUT_TYPE_ASCII_ASL;
- goto Cleanup;
- }
+ Status = AcValidateTableHeader (Info->Handle, 0);
+ if (ACPI_SUCCESS (Status))
+ {
+ fprintf (stderr,
+ "Binary file appears to be a valid ACPI table, disassembling\n");
+
+ Type = ASL_INPUT_TYPE_BINARY_ACPI_TABLE;
+ goto Cleanup;
}
- /* Not an ASL source file, default to a data table source file */
+ Type = ASL_INPUT_TYPE_BINARY;
- Type = ASL_INPUT_TYPE_ASCII_DATA;
Cleanup:
@@ -246,9 +247,14 @@ AslDoDisassembly (
return (Status);
}
+ /* Handle additional output files for disassembler */
+
+ Gbl_FileType = ASL_INPUT_TYPE_BINARY_ACPI_TABLE;
+ Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix);
+
/* This is where the disassembly happens */
- AcpiGbl_DbOpt_Disasm = TRUE;
+ AcpiGbl_DmOpt_Disasm = TRUE;
Status = AdAmlDisassemble (AslToFile,
Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_OutputFilenamePrefix,
&Gbl_Files[ASL_FILE_INPUT].Filename);
@@ -261,13 +267,6 @@ AslDoDisassembly (
AcpiDmUnresolvedWarning (0);
-#if 0
- /* TBD: Handle additional output files for disassembler */
-
- Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix);
- NsDisplayNamespace ();
-#endif
-
/* Shutdown compiler and ACPICA subsystem */
AeClearErrorLog ();
@@ -359,6 +358,8 @@ AslDoOneFile (
return (AE_ERROR);
}
+ Gbl_OriginalInputFileSize = FlGetFileSize (ASL_FILE_INPUT);
+
/* Determine input file type */
Gbl_FileType = AslDetectSourceFileType (&Gbl_Files[ASL_FILE_INPUT]);
@@ -454,7 +455,7 @@ AslDoOneFile (
/*
* Binary ACPI table was auto-detected, disassemble it
*/
- case ASL_INPUT_TYPE_ACPI_TABLE:
+ case ASL_INPUT_TYPE_BINARY_ACPI_TABLE:
/* We have what appears to be an ACPI table, disassemble it */
OpenPOWER on IntegriCloud