static int ApDumpTableBuffer ( ACPI_TABLE_HEADER *Table, UINT32 Instance, ACPI_PHYSICAL_ADDRESS Address) { UINT32 TableLength; TableLength = ApGetTableLength (Table); /* Print only the header if requested */ if (Gbl_SummaryMode) { AcpiTbPrintTableHeader (Address, Table); return (0); } /* Dump to binary file if requested */ if (Gbl_BinaryMode) { return (ApWriteToBinaryFile (Table, Instance)); } /* * Dump the table with header for use with acpixtract utility. * Note: simplest to just always emit a 64-bit address. AcpiXtract * utility can handle this. */ AcpiUtFilePrintf (Gbl_OutputFile, "%4.4s @ 0x%8.8X%8.8X\n", Table->Signature, ACPI_FORMAT_UINT64 (Address)); AcpiUtDumpBufferToFile (Gbl_OutputFile, ACPI_CAST_PTR (UINT8, Table), TableLength, DB_BYTE_DISPLAY, 0); AcpiUtFilePrintf (Gbl_OutputFile, "\n"); return (0); }
void AcpiUtDumpBufferToFile ( ACPI_FILE File, UINT8 *Buffer, UINT32 Count, UINT32 Display, UINT32 BaseOffset) { UINT32 i = 0; UINT32 j; UINT32 Temp32; UINT8 BufChar; if (!Buffer) { AcpiUtFilePrintf (File, "Null Buffer Pointer in DumpBuffer!\n"); return; } if ((Count < 4) || (Count & 0x01)) { Display = DB_BYTE_DISPLAY; } /* Nasty little dump buffer routine! */ while (i < Count) { /* Print current offset */ AcpiUtFilePrintf (File, "%6.4X: ", (BaseOffset + i)); /* Print 16 hex chars */ for (j = 0; j < 16;) { if (i + j >= Count) { /* Dump fill spaces */ AcpiUtFilePrintf (File, "%*s", ((Display * 2) + 1), " "); j += Display; continue; } switch (Display) { case DB_BYTE_DISPLAY: default: /* Default is BYTE display */ AcpiUtFilePrintf (File, "%02X ", Buffer[(ACPI_SIZE) i + j]); break; case DB_WORD_DISPLAY: ACPI_MOVE_16_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); AcpiUtFilePrintf (File, "%04X ", Temp32); break; case DB_DWORD_DISPLAY: ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); AcpiUtFilePrintf (File, "%08X ", Temp32); break; case DB_QWORD_DISPLAY: ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); AcpiUtFilePrintf (File, "%08X", Temp32); ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j + 4]); AcpiUtFilePrintf (File, "%08X ", Temp32); break; } j += Display; } /* * Print the ASCII equivalent characters but watch out for the bad * unprintable ones (printable chars are 0x20 through 0x7E) */ AcpiUtFilePrintf (File, " "); for (j = 0; j < 16; j++) { if (i + j >= Count) { AcpiUtFilePrintf (File, "\n"); return; } BufChar = Buffer[(ACPI_SIZE) i + j]; if (ACPI_IS_PRINT (BufChar)) { AcpiUtFilePrintf (File, "%c", BufChar); } else { AcpiUtFilePrintf (File, "."); } } /* Done with that line. */ AcpiUtFilePrintf (File, "\n"); i += 16; } return; }