ACPI_STATUS AslDoOneFile ( char *Filename) { ACPI_STATUS Status; /* Re-initialize "some" compiler/preprocessor globals */ AslInitializeGlobals (); PrInitializeGlobals (); /* * Extract the directory path. This path is used for possible include * files and the optional AML filename embedded in the input file * DefinitionBlock declaration. */ Status = FlSplitInputPathname (Filename, &AslGbl_DirectoryPath, NULL); if (ACPI_FAILURE (Status)) { return (Status); } /* Take a copy of the input filename, convert any backslashes */ AslGbl_Files[ASL_FILE_INPUT].Filename = UtLocalCacheCalloc (strlen (Filename) + 1); strcpy (AslGbl_Files[ASL_FILE_INPUT].Filename, Filename); UtConvertBackslashes (AslGbl_Files[ASL_FILE_INPUT].Filename); /* * AML Disassembly (Optional) */ if (AcpiGbl_DisasmFlag) { Status = AslDoDisassembly (); if (Status != AE_CTRL_CONTINUE) { return (Status); } } /* * Open the input file. Here, this should be an ASCII source file, * either an ASL file or a Data Table file */ Status = FlOpenInputFile (AslGbl_Files[ASL_FILE_INPUT].Filename); if (ACPI_FAILURE (Status)) { AePrintErrorLog (ASL_FILE_STDERR); return (AE_ERROR); } AslGbl_OriginalInputFileSize = FlGetFileSize (ASL_FILE_INPUT); /* Determine input file type */ AslGbl_FileType = AslDetectSourceFileType (&AslGbl_Files[ASL_FILE_INPUT]); if (AslGbl_FileType == ASL_INPUT_TYPE_BINARY) { return (AE_ERROR); } /* * If -p not specified, we will use the input filename as the * output filename prefix */ if (AslGbl_UseDefaultAmlFilename) { AslGbl_OutputFilenamePrefix = AslGbl_Files[ASL_FILE_INPUT].Filename; } /* Open the optional output files (listings, etc.) */ Status = FlOpenMiscOutputFiles (AslGbl_OutputFilenamePrefix); if (ACPI_FAILURE (Status)) { AePrintErrorLog (ASL_FILE_STDERR); return (AE_ERROR); } /* * Compilation of ASL source versus DataTable source uses different * compiler subsystems */ switch (AslGbl_FileType) { /* * Data Table Compilation */ case ASL_INPUT_TYPE_ASCII_DATA: Status = DtDoCompile (); if (ACPI_FAILURE (Status)) { return (Status); } if (AslGbl_Signature) { AslGbl_Signature = NULL; } /* Check if any errors occurred during compile */ Status = AslCheckForErrorExit (); if (ACPI_FAILURE (Status)) { return (Status); } /* Cleanup (for next source file) and exit */ AeClearErrorLog (); PrTerminatePreprocessor (); return (Status); /* * ASL Compilation */ case ASL_INPUT_TYPE_ASCII_ASL: /* ACPICA subsystem initialization */ Status = AdInitialize (); if (ACPI_FAILURE (Status)) { return (Status); } (void) CmDoCompile (); (void) AcpiTerminate (); /* Check if any errors occurred during compile */ Status = AslCheckForErrorExit (); if (ACPI_FAILURE (Status)) { return (Status); } /* Cleanup (for next source file) and exit */ AeClearErrorLog (); PrTerminatePreprocessor (); /* ASL-to-ASL+ conversion - Perform immediate disassembly */ if (AslGbl_DoAslConversion) { /* * New input file is the output AML file from above. * New output is from the input ASL file from above. */ AslGbl_OutputFilenamePrefix = AslGbl_Files[ASL_FILE_INPUT].Filename; CvDbgPrint ("OUTPUTFILENAME: %s\n", AslGbl_OutputFilenamePrefix); AslGbl_Files[ASL_FILE_INPUT].Filename = AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename; AcpiGbl_DisasmFlag = TRUE; fprintf (stderr, "\n"); AslDoDisassembly (); /* delete the AML file. This AML file should never be utilized by AML interpreters. */ FlDeleteFile (ASL_FILE_AML_OUTPUT); } return (AE_OK); /* * Binary ACPI table was auto-detected, disassemble it */ case ASL_INPUT_TYPE_BINARY_ACPI_TABLE: /* We have what appears to be an ACPI table, disassemble it */ FlCloseFile (ASL_FILE_INPUT); AslGbl_DoCompile = FALSE; AcpiGbl_DisasmFlag = TRUE; Status = AslDoDisassembly (); return (Status); /* Unknown binary table */ case ASL_INPUT_TYPE_BINARY: AePrintErrorLog (ASL_FILE_STDERR); return (AE_ERROR); default: printf ("Unknown file type %X\n", AslGbl_FileType); return (AE_ERROR); } }
ACPI_STATUS AslDoOneFile ( char *Filename) { ACPI_STATUS Status; /* Re-initialize "some" compiler/preprocessor globals */ AslInitializeGlobals (); PrInitializeGlobals (); /* * Extract the directory path. This path is used for possible include * files and the optional AML filename embedded in the input file * DefinitionBlock declaration. */ Status = FlSplitInputPathname (Filename, &Gbl_DirectoryPath, NULL); if (ACPI_FAILURE (Status)) { return (Status); } Gbl_Files[ASL_FILE_INPUT].Filename = Filename; UtConvertBackslashes (Filename); /* * AML Disassembly (Optional) */ if (Gbl_DisasmFlag) { Status = AslDoDisassembly (); if (Status != AE_CTRL_CONTINUE) { return (Status); } } /* * Open the input file. Here, this should be an ASCII source file, * either an ASL file or a Data Table file */ Status = FlOpenInputFile (Gbl_Files[ASL_FILE_INPUT].Filename); if (ACPI_FAILURE (Status)) { AePrintErrorLog (ASL_FILE_STDERR); return (AE_ERROR); } /* Determine input file type */ Gbl_FileType = AslDetectSourceFileType (&Gbl_Files[ASL_FILE_INPUT]); if (Gbl_FileType == ASL_INPUT_TYPE_BINARY) { return (AE_ERROR); } /* * If -p not specified, we will use the input filename as the * output filename prefix */ if (Gbl_UseDefaultAmlFilename) { Gbl_OutputFilenamePrefix = Gbl_Files[ASL_FILE_INPUT].Filename; } /* Open the optional output files (listings, etc.) */ Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix); if (ACPI_FAILURE (Status)) { AePrintErrorLog (ASL_FILE_STDERR); return (AE_ERROR); } /* * Compilation of ASL source versus DataTable source uses different * compiler subsystems */ switch (Gbl_FileType) { /* * Data Table Compilation */ case ASL_INPUT_TYPE_ASCII_DATA: Status = DtDoCompile (); if (ACPI_FAILURE (Status)) { return (Status); } if (Gbl_Signature) { ACPI_FREE (Gbl_Signature); Gbl_Signature = NULL; } /* Check if any errors occurred during compile */ Status = AslCheckForErrorExit (); if (ACPI_FAILURE (Status)) { return (Status); } /* Cleanup (for next source file) and exit */ AeClearErrorLog (); PrTerminatePreprocessor (); return (Status); /* * ASL Compilation */ case ASL_INPUT_TYPE_ASCII_ASL: /* ACPICA subsystem initialization */ Status = AdInitialize (); if (ACPI_FAILURE (Status)) { return (Status); } (void) CmDoCompile (); (void) AcpiTerminate (); /* Check if any errors occurred during compile */ Status = AslCheckForErrorExit (); if (ACPI_FAILURE (Status)) { return (Status); } /* Cleanup (for next source file) and exit */ AeClearErrorLog (); PrTerminatePreprocessor (); return (AE_OK); /* * Binary ACPI table was auto-detected, disassemble it */ case ASL_INPUT_TYPE_ACPI_TABLE: /* We have what appears to be an ACPI table, disassemble it */ FlCloseFile (ASL_FILE_INPUT); Gbl_DoCompile = FALSE; Gbl_DisasmFlag = TRUE; Status = AslDoDisassembly (); return (Status); /* Unknown binary table */ case ASL_INPUT_TYPE_BINARY: AePrintErrorLog (ASL_FILE_STDERR); return (AE_ERROR); default: printf ("Unknown file type %X\n", Gbl_FileType); return (AE_ERROR); } }