void AcpiDmEmitExternals ( void) { ACPI_EXTERNAL_LIST *NextExternal; if (!AcpiGbl_ExternalList) { return; } /* * Determine the number of control methods in the external list, and * also how many of those externals were resolved via the namespace. */ NextExternal = AcpiGbl_ExternalList; while (NextExternal) { if (NextExternal->Type == ACPI_TYPE_METHOD) { AcpiGbl_NumExternalMethods++; if (NextExternal->Resolved) { AcpiGbl_ResolvedExternalMethods++; } } NextExternal = NextExternal->Next; } /* Check if any control methods were unresolved */ AcpiDmUnresolvedWarning (1); /* Emit any unresolved method externals in a single text block */ NextExternal = AcpiGbl_ExternalList; while (NextExternal) { if ((NextExternal->Type == ACPI_TYPE_METHOD) && (!NextExternal->Resolved)) { AcpiOsPrintf (" External (%s%s", NextExternal->Path, AcpiDmGetObjectTypeName (NextExternal->Type)); AcpiOsPrintf ( ") // Warning: Unresolved Method, " "guessing %u arguments (may be incorrect, see warning above)\n", NextExternal->Value); NextExternal->Emitted = TRUE; } NextExternal = NextExternal->Next; } AcpiOsPrintf ("\n"); /* Emit externals that were imported from a file */ if (Gbl_ExternalRefFilename) { AcpiOsPrintf ( " /*\n * External declarations that were imported from\n" " * the reference file [%s]\n */\n", Gbl_ExternalRefFilename); NextExternal = AcpiGbl_ExternalList; while (NextExternal) { if (!NextExternal->Emitted && (NextExternal->Flags & ACPI_FROM_REFERENCE_FILE)) { AcpiOsPrintf (" External (%s%s", NextExternal->Path, AcpiDmGetObjectTypeName (NextExternal->Type)); if (NextExternal->Type == ACPI_TYPE_METHOD) { AcpiOsPrintf (") // %u Arguments\n", NextExternal->Value); } else { AcpiOsPrintf (")\n"); } NextExternal->Emitted = TRUE; } NextExternal = NextExternal->Next; } AcpiOsPrintf ("\n"); } /* * Walk the list of externals found during the AML parsing */ while (AcpiGbl_ExternalList) { if (!AcpiGbl_ExternalList->Emitted) { AcpiOsPrintf (" External (%s%s", AcpiGbl_ExternalList->Path, AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type)); /* For methods, add a comment with the number of arguments */ if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD) { AcpiOsPrintf (") // %u Arguments\n", AcpiGbl_ExternalList->Value); } else { AcpiOsPrintf (")\n"); } } /* Free this external info block and move on to next external */ NextExternal = AcpiGbl_ExternalList->Next; if (AcpiGbl_ExternalList->Flags & ACPI_IPATH_ALLOCATED) { ACPI_FREE (AcpiGbl_ExternalList->InternalPath); } ACPI_FREE (AcpiGbl_ExternalList->Path); ACPI_FREE (AcpiGbl_ExternalList); AcpiGbl_ExternalList = NextExternal; } AcpiOsPrintf ("\n"); }
static ACPI_STATUS AslDoDisassembly ( void) { ACPI_STATUS Status; /* ACPICA subsystem initialization */ Status = AdInitialize (); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiAllocateRootTable (4); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not initialize ACPI Table Manager, %s\n", AcpiFormatException (Status)); return (Status); } /* Handle additional output files for disassembler */ AslGbl_FileType = ASL_INPUT_TYPE_BINARY_ACPI_TABLE; Status = FlOpenMiscOutputFiles (AslGbl_OutputFilenamePrefix); /* This is where the disassembly happens */ AcpiGbl_DmOpt_Disasm = TRUE; Status = AdAmlDisassemble (AslToFile, AslGbl_Files[ASL_FILE_INPUT].Filename, AslGbl_OutputFilenamePrefix, &AslGbl_Files[ASL_FILE_INPUT].Filename); if (ACPI_FAILURE (Status)) { return (Status); } /* Check if any control methods were unresolved */ AcpiDmUnresolvedWarning (0); /* Shutdown compiler and ACPICA subsystem */ AeClearErrorLog (); (void) AcpiTerminate (); /* * AslGbl_Files[ASL_FILE_INPUT].Filename was replaced with the * .DSL disassembly file, which can now be compiled if requested */ if (AslGbl_DoCompile) { AcpiOsPrintf ("\nCompiling \"%s\"\n", AslGbl_Files[ASL_FILE_INPUT].Filename); return (AE_CTRL_CONTINUE); } /* No need to free the filename string */ AslGbl_Files[ASL_FILE_INPUT].Filename = NULL; UtDeleteLocalCaches (); return (AE_OK); }
void AcpiDmEmitExternals ( void) { ACPI_EXTERNAL_LIST *NextExternal; if (!AcpiGbl_ExternalList) { return; } /* * Determine the number of control methods in the external list, and * also how many of those externals were resolved via the namespace. */ NextExternal = AcpiGbl_ExternalList; while (NextExternal) { if (NextExternal->Type == ACPI_TYPE_METHOD) { AcpiGbl_NumExternalMethods++; if (NextExternal->Flags & ACPI_EXT_RESOLVED_REFERENCE) { AcpiGbl_ResolvedExternalMethods++; } } NextExternal = NextExternal->Next; } /* Check if any control methods were unresolved */ AcpiDmUnresolvedWarning (1); if (Gbl_ExternalRefFilename) { AcpiOsPrintf ( " /*\n * External declarations were imported from\n" " * a reference file -- %s\n */\n\n", Gbl_ExternalRefFilename); } /* * Walk and emit the list of externals found during the AML parsing */ while (AcpiGbl_ExternalList) { if (!(AcpiGbl_ExternalList->Flags & ACPI_EXT_EXTERNAL_EMITTED)) { //REVIEW_REHABMAN: not really used anymore, but original intent of flag AcpiGbl_ExternalList->Flags |= ACPI_EXT_EXTERNAL_EMITTED; AcpiOsPrintf (" External (%s%s)", AcpiGbl_ExternalList->Path, AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type)); /* Check for "unresolved" references */ if (!(AcpiGbl_ExternalList->Flags & ACPI_EXT_RESOLVED_REFERENCE)) { if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD) { AcpiOsPrintf (" // Warning: Unknown method, " "guessing %u arguments", AcpiGbl_ExternalList->Value); } else { AcpiOsPrintf (" // Warning: Unknown object"); } } /* Check for external from a external references file */ else if (AcpiGbl_ExternalList->Flags & ACPI_EXT_ORIGIN_FROM_FILE) { if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD) { AcpiOsPrintf (" // Imported: %u Arguments", AcpiGbl_ExternalList->Value); } else { AcpiOsPrintf (" // Imported"); } } /* This is the normal external case */ else { /* For methods, add a comment with the number of arguments */ if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD) { AcpiOsPrintf (" // %u Arguments", AcpiGbl_ExternalList->Value); if (AcpiGbl_ExternalList->Flags & ACPI_EXT_ORIGIN_FROM_OPCODE) AcpiOsPrintf(" (from opcode)"); } else { if (AcpiGbl_ExternalList->Flags & ACPI_EXT_ORIGIN_FROM_OPCODE) AcpiOsPrintf(" // (from opcode)"); } } AcpiOsPrintf ("\n"); } /* Free this external info block and move on to next external */ NextExternal = AcpiGbl_ExternalList->Next; if (AcpiGbl_ExternalList->Flags & ACPI_EXT_INTERNAL_PATH_ALLOCATED) { ACPI_FREE (AcpiGbl_ExternalList->InternalPath); } ACPI_FREE (AcpiGbl_ExternalList->Path); ACPI_FREE (AcpiGbl_ExternalList); AcpiGbl_ExternalList = NextExternal; } AcpiOsPrintf ("\n"); }
void AcpiDmEmitExternals ( void) { ACPI_EXTERNAL_LIST *NextExternal; if (!AcpiGbl_ExternalList) { return; } /* * Determine the number of control methods in the external list, and * also how many of those externals were resolved via the namespace. */ NextExternal = AcpiGbl_ExternalList; while (NextExternal) { if (NextExternal->Type == ACPI_TYPE_METHOD) { AcpiGbl_NumExternalMethods++; if (NextExternal->Resolved) { AcpiGbl_ResolvedExternalMethods++; } } NextExternal = NextExternal->Next; } /* Check if any control methods were unresolved */ AcpiDmUnresolvedWarning (1); /* * Walk the list of externals (unresolved references) * found during the AML parsing */ while (AcpiGbl_ExternalList) { AcpiOsPrintf (" External (%s%s", AcpiGbl_ExternalList->Path, AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type)); if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD) { if (AcpiGbl_ExternalList->Resolved) { AcpiOsPrintf (") // %u Arguments\n", AcpiGbl_ExternalList->Value); } else { AcpiOsPrintf (") // Warning: unresolved Method, " "assuming %u arguments (may be incorrect, see warning above)\n", AcpiGbl_ExternalList->Value); } } else { AcpiOsPrintf (")\n"); } /* Free this external info block and move on to next external */ NextExternal = AcpiGbl_ExternalList->Next; if (AcpiGbl_ExternalList->Flags & ACPI_IPATH_ALLOCATED) { ACPI_FREE (AcpiGbl_ExternalList->InternalPath); } ACPI_FREE (AcpiGbl_ExternalList->Path); ACPI_FREE (AcpiGbl_ExternalList); AcpiGbl_ExternalList = NextExternal; } AcpiOsPrintf ("\n"); }
static ACPI_STATUS AslDoDisassembly ( void) { ACPI_STATUS Status; /* ACPICA subsystem initialization */ Status = AdInitialize (); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiAllocateRootTable (4); if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not initialize ACPI Table Manager, %s\n", AcpiFormatException (Status)); return (Status); } /* This is where the disassembly happens */ AcpiGbl_DbOpt_disasm = TRUE; Status = AdAmlDisassemble (AslToFile, Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_OutputFilenamePrefix, &Gbl_Files[ASL_FILE_INPUT].Filename); if (ACPI_FAILURE (Status)) { return (Status); } /* Check if any control methods were unresolved */ AcpiDmUnresolvedWarning (0); #if 0 /* TBD: Handle additional output files for disassembler */ Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix); NsDisplayNamespace (); #endif /* Shutdown compiler and ACPICA subsystem */ AeClearErrorLog (); (void) AcpiTerminate (); /* * Gbl_Files[ASL_FILE_INPUT].Filename was replaced with the * .DSL disassembly file, which can now be compiled if requested */ if (Gbl_DoCompile) { AcpiOsPrintf ("\nCompiling \"%s\"\n", Gbl_Files[ASL_FILE_INPUT].Filename); return (AE_CTRL_CONTINUE); } ACPI_FREE (Gbl_Files[ASL_FILE_INPUT].Filename); Gbl_Files[ASL_FILE_INPUT].Filename = NULL; return (AE_OK); }