summaryrefslogtreecommitdiff
path: root/source/tools/acpibin/abcompare.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/tools/acpibin/abcompare.c')
-rw-r--r--source/tools/acpibin/abcompare.c361
1 files changed, 84 insertions, 277 deletions
diff --git a/source/tools/acpibin/abcompare.c b/source/tools/acpibin/abcompare.c
index 6bf5f9638cd81..d843400ffb959 100644
--- a/source/tools/acpibin/abcompare.c
+++ b/source/tools/acpibin/abcompare.c
@@ -42,10 +42,9 @@
*/
#include "acpibin.h"
+#include "acapps.h"
-FILE *File1;
-FILE *File2;
ACPI_TABLE_HEADER Header1;
ACPI_TABLE_HEADER Header2;
@@ -69,10 +68,6 @@ AbGetFile (
char *Filename,
UINT32 *FileSize);
-static UINT32
-AbGetFileSize (
- FILE *File);
-
static void
AbPrintHeaderInfo (
ACPI_TABLE_HEADER *Header);
@@ -87,68 +82,6 @@ AeLocalGetRootPointer (
void);
-/*******************************************************************************
- *
- * FUNCTION: UtHexCharToValue
- *
- * PARAMETERS: HexChar - Hex character in Ascii
- *
- * RETURN: The binary value of the hex character
- *
- * DESCRIPTION: Perform ascii-to-hex translation
- *
- ******************************************************************************/
-
-static UINT8
-UtHexCharToValue (
- int HexChar,
- UINT8 *OutBinary)
-{
-
- if (HexChar >= 0x30 && HexChar <= 0x39)
- {
- *OutBinary = (UINT8) (HexChar - 0x30);
- return (1);
- }
-
- else if (HexChar >= 0x41 && HexChar <= 0x46)
- {
- *OutBinary = (UINT8) (HexChar - 0x37);
- return (1);
- }
-
- else if (HexChar >= 0x61 && HexChar <= 0x66)
- {
- *OutBinary = (UINT8) (HexChar - 0x57);
- return (1);
- }
- return (0);
-}
-
-static UINT8
-AbHexByteToBinary (
- char *HexString,
- char *OutBinary)
-{
- UINT8 Local1;
- UINT8 Local2;
-
-
- if (!UtHexCharToValue (HexString[0], &Local1))
- {
- return (0);
- }
- if (!UtHexCharToValue (HexString[1], &Local2))
- {
- return (0);
- }
-
- *OutBinary = (UINT8) ((Local1 << 4) | Local2);
- return (2);
-
-}
-
-
/******************************************************************************
*
* FUNCTION: AbValidateHeader
@@ -190,23 +123,24 @@ AcpiTbSumTable (
void *Buffer,
UINT32 Length)
{
- const UINT8 *limit;
- const UINT8 *rover;
- UINT8 sum = 0;
+ const UINT8 *Limit;
+ const UINT8 *Rover;
+ UINT8 Sum = 0;
if (Buffer && Length)
{
/* Buffer and Length are valid */
- limit = (UINT8 *) Buffer + Length;
+ Limit = (UINT8 *) Buffer + Length;
- for (rover = Buffer; rover < limit; rover++)
+ for (Rover = Buffer; Rover < Limit; Rover++)
{
- sum = (UINT8) (sum + *rover);
+ Sum = (UINT8) (Sum + *Rover);
}
}
- return (sum);
+
+ return (Sum);
}
@@ -233,10 +167,10 @@ AbPrintHeaderInfo (
printf ("Length : %8.8X\n", Header->Length);
printf ("Revision : %2.2X\n", Header->Revision);
printf ("Checksum : %2.2X\n", Header->Checksum);
- printf ("OEM ID : %6.6s\n", Header->OemId);
- printf ("OEM Table ID : %8.8s\n", Header->OemTableId);
+ printf ("OEM ID : %.6s\n", Header->OemId);
+ printf ("OEM Table ID : %.8s\n", Header->OemTableId);
printf ("OEM Revision : %8.8X\n", Header->OemRevision);
- printf ("ASL Compiler ID : %4.4s\n", Header->AslCompilerId);
+ printf ("ASL Compiler ID : %.4s\n", Header->AslCompilerId);
printf ("Compiler Revision : %8.8X\n", Header->AslCompilerRevision);
printf ("\n");
}
@@ -253,10 +187,10 @@ AbPrintHeadersInfo (
printf ("Length %8.8X : %8.8X\n", Header->Length, Header2->Length);
printf ("Revision %8.2X : %2.2X\n", Header->Revision, Header2->Revision);
printf ("Checksum %8.2X : %2.2X\n", Header->Checksum, Header2->Checksum);
- printf ("OEM ID %8.6s : %6.6s\n", Header->OemId, Header2->OemId);
- printf ("OEM Table ID %8.8s : %8.8s\n", Header->OemTableId, Header2->OemTableId);
+ printf ("OEM ID %8.6s : %.6s\n", Header->OemId, Header2->OemId);
+ printf ("OEM Table ID %8.8s : %.8s\n", Header->OemTableId, Header2->OemTableId);
printf ("OEM Revision %8.8X : %8.8X\n", Header->OemRevision, Header2->OemRevision);
- printf ("ASL Compiler ID %8.4s : %4.4s\n", Header->AslCompilerId, Header2->AslCompilerId);
+ printf ("ASL Compiler ID %8.4s : %.4s\n", Header->AslCompilerId, Header2->AslCompilerId);
printf ("Compiler Revision %8.8X : %8.8X\n", Header->AslCompilerRevision, Header2->AslCompilerRevision);
printf ("\n");
}
@@ -272,22 +206,25 @@ AbPrintHeadersInfo (
void
AbDisplayHeader (
- char *File1Path)
+ char *FilePath)
{
UINT32 Actual;
+ FILE *File;
- File1 = fopen (File1Path, "rb");
- if (!File1)
+ File = fopen (FilePath, "rb");
+ if (!File)
{
- printf ("Could not open file %s\n", File1Path);
+ printf ("Could not open file %s\n", FilePath);
return;
}
- Actual = fread (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File1);
+ Actual = fread (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File);
+ fclose (File);
+
if (Actual != sizeof (ACPI_TABLE_HEADER))
{
- printf ("File %s does not contain an ACPI table header\n", File1Path);
+ printf ("File %s does not contain a valid ACPI table header\n", FilePath);
return;
}
@@ -310,30 +247,31 @@ AbDisplayHeader (
void
AbComputeChecksum (
- char *File1Path)
+ char *FilePath)
{
UINT32 Actual;
ACPI_TABLE_HEADER *Table;
UINT8 Checksum;
+ FILE *File;
- File1 = fopen (File1Path, "rb");
- if (!File1)
+ File = fopen (FilePath, "rb");
+ if (!File)
{
- printf ("Could not open file %s\n", File1Path);
+ printf ("Could not open file %s\n", FilePath);
return;
}
- Actual = fread (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File1);
+ Actual = fread (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File);
if (Actual < sizeof (ACPI_TABLE_HEADER))
{
- printf ("File %s does not contain an ACPI table header\n", File1Path);
- return;
+ printf ("File %s does not contain a valid ACPI table header\n", FilePath);
+ goto Exit1;
}
if (!AbValidateHeader (&Header1))
{
- return;
+ goto Exit1;
}
if (!Gbl_TerseMode)
@@ -346,18 +284,18 @@ AbComputeChecksum (
Table = AcpiOsAllocate (Header1.Length);
if (!Table)
{
- printf ("could not allocate\n");
- return;
+ printf ("Could not allocate buffer for table\n");
+ goto Exit1;
}
/* Read the entire table, including header */
- fseek (File1, 0, SEEK_SET);
- Actual = fread (Table, 1, Header1.Length, File1);
+ fseek (File, 0, SEEK_SET);
+ Actual = fread (Table, 1, Header1.Length, File);
if (Actual != Header1.Length)
{
- printf ("could not read table, length %u\n", Header1.Length);
- return;
+ printf ("Could not read table, length %u\n", Header1.Length);
+ goto Exit2;
}
/* Compute the checksum for the table */
@@ -369,32 +307,41 @@ AbComputeChecksum (
if (Header1.Checksum == Checksum)
{
- printf ("Checksum ok in AML file, not updating\n");
- return;
+ printf ("Checksum OK in AML file, not updating\n");
+ goto Exit2;
}
/* Open the target file for writing, to update checksum */
- fclose (File1);
- File1 = fopen (File1Path, "r+b");
- if (!File1)
+ fclose (File);
+ File = fopen (FilePath, "r+b");
+ if (!File)
{
- printf ("Could not open file %s for writing\n", File1Path);
- return;
+ printf ("Could not open file %s for writing\n", FilePath);
+ goto Exit2;
}
/* Set the checksum, write the new header */
Header1.Checksum = Checksum;
- Actual = fwrite (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File1);
+ Actual = fwrite (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File);
if (Actual != sizeof (ACPI_TABLE_HEADER))
{
printf ("Could not write updated table header\n");
- return;
+ goto Exit2;
}
printf ("Wrote new checksum\n");
+
+Exit2:
+ AcpiOsFree (Table);
+
+Exit1:
+ if (File)
+ {
+ fclose (File);
+ }
return;
}
@@ -419,6 +366,9 @@ AbCompareAmlFiles (
UINT8 Char2;
UINT8 Mismatches = 0;
BOOLEAN HeaderMismatch = FALSE;
+ FILE *File1;
+ FILE *File2;
+ int Status = -1;
File1 = fopen (File1Path, "rb");
@@ -432,7 +382,7 @@ AbCompareAmlFiles (
if (!File2)
{
printf ("Could not open file %s\n", File2Path);
- return (-1);
+ goto Exit1;
}
/* Read the ACPI header from each file */
@@ -441,20 +391,20 @@ AbCompareAmlFiles (
if (Actual1 != sizeof (ACPI_TABLE_HEADER))
{
printf ("File %s does not contain an ACPI table header\n", File1Path);
- return (-1);
+ goto Exit2;
}
Actual2 = fread (&Header2, 1, sizeof (ACPI_TABLE_HEADER), File2);
if (Actual2 != sizeof (ACPI_TABLE_HEADER))
{
printf ("File %s does not contain an ACPI table header\n", File2Path);
- return (-1);
+ goto Exit2;
}
if ((!AbValidateHeader (&Header1)) ||
(!AbValidateHeader (&Header2)))
{
- return (-1);
+ goto Exit2;
}
/* Table signatures must match */
@@ -462,7 +412,7 @@ AbCompareAmlFiles (
if (*((UINT32 *) Header1.Signature) != *((UINT32 *) Header2.Signature))
{
printf ("Table signatures do not match\n");
- return (-1);
+ goto Exit2;
}
if (!Gbl_TerseMode)
@@ -494,7 +444,7 @@ AbCompareAmlFiles (
if (Mismatches > 100)
{
printf ("100 Mismatches: Too many mismatches\n");
- return (-1);
+ goto Exit2;
}
}
@@ -526,43 +476,14 @@ AbCompareAmlFiles (
}
printf ("%u Mismatches found\n", Mismatches);
- return (0);
-}
+ Status = 0;
+Exit2:
+ fclose (File2);
-/******************************************************************************
- *
- * FUNCTION: AbGetFileSize
- *
- * DESCRIPTION: Get the size of an open file
- *
- ******************************************************************************/
-
-static UINT32
-AbGetFileSize (
- FILE *File)
-{
- UINT32 FileSize;
- long Offset;
-
-
- Offset = ftell (File);
-
- if (fseek (File, 0, SEEK_END))
- {
- return (0);
- }
-
- FileSize = (UINT32) ftell (File);
-
- /* Restore file pointer */
-
- if (fseek (File, Offset, SEEK_SET))
- {
- return (0);
- }
-
- return (FileSize);
+Exit1:
+ fclose (File1);
+ return (Status);
}
@@ -596,8 +517,8 @@ AbGetFile (
/* Need file size to allocate a buffer */
- Size = AbGetFileSize (File);
- if (!Size)
+ Size = CmGetFileSize (File);
+ if (Size == ACPI_UINT32_MAX)
{
printf ("Could not get file size (seek) for %s\n", Filename);
goto ErrorExit;
@@ -647,6 +568,7 @@ AbDumpAmlFile (
char *FileBuffer;
FILE *FileOutHandle;
UINT32 FileSize = 0;
+ int Status = -1;
/* Get the entire AML file, validate header */
@@ -664,12 +586,12 @@ AbDumpAmlFile (
if (!FileOutHandle)
{
printf ("Could not open file %s\n", File2Path);
- return (-1);
+ goto Exit1;
}
if (!AbValidateHeader ((ACPI_TABLE_HEADER *) FileBuffer))
{
- return (-1);
+ goto Exit2;
}
/* Convert binary AML to text, using common dump buffer routine */
@@ -684,133 +606,18 @@ AbDumpAmlFile (
/* Summary for the output file */
- FileSize = AbGetFileSize (FileOutHandle);
+ FileSize = CmGetFileSize (FileOutHandle);
printf ("Output file: %s contains %u (0x%X) bytes\n\n",
File2Path, FileSize, FileSize);
- return (0);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: AbExtractAmlFile
- *
- * DESCRIPTION: Extract a binary AML file from a text file (as produced by the
- * DumpAmlFile procedure or the "acpidump" table utility.
- *
- ******************************************************************************/
-
-int
-AbExtractAmlFile (
- char *TableSig,
- char *File1Path,
- char *File2Path)
-{
- char *Table;
- char Value;
- UINT32 i;
- FILE *FileHandle;
- FILE *FileOutHandle;
- UINT32 Count = 0;
- int Scanned;
-
-
- /* Open in/out files. input is in text mode, output is in binary mode */
-
- FileHandle = fopen (File1Path, "rt");
- if (!FileHandle)
- {
- printf ("Could not open file %s\n", File1Path);
- return (-1);
- }
-
- FileOutHandle = fopen (File2Path, "w+b");
- if (!FileOutHandle)
- {
- printf ("Could not open file %s\n", File2Path);
- return (-1);
- }
-
- /* Force input table sig to uppercase */
-
- AcpiUtStrupr (TableSig);
-
-
- /* TBD: examine input for ASCII */
-
-
- /* We have an ascii file, grab one line at a time */
-
- while (fgets (Buffer, BUFFER_SIZE, FileHandle))
- {
- /* The 4-char ACPI signature appears at the beginning of a line */
+ Status = 0;
- if (ACPI_COMPARE_NAME (Buffer, TableSig))
- {
- printf ("Found table [%4.4s]\n", TableSig);
-
- /*
- * Eat all lines in the table, of the form:
- * <offset>: <16 bytes of hex data, separated by spaces> <ASCII representation> <newline>
- *
- * Example:
- *
- * 02C0: 5F 53 42 5F 4C 4E 4B 44 00 12 13 04 0C FF FF 08 _SB_LNKD........
- *
- */
- while (fgets (Buffer, BUFFER_SIZE, FileHandle))
- {
- /* Get past the offset, terminated by a colon */
-
- Table = strchr (Buffer, ':');
- if (!Table)
- {
- /* No colon, all done */
- goto Exit;
- }
-
- Table += 2; /* Eat the colon + space */
-
- for (i = 0; i < 16; i++)
- {
- Scanned = AbHexByteToBinary (Table, &Value);
- if (!Scanned)
- {
- goto Exit;
- }
-
- Table += 3; /* Go past this hex byte and space */
-
- /* Write the converted (binary) byte */
-
- if (fwrite (&Value, 1, 1, FileOutHandle) != 1)
- {
- printf ("Error writing byte %u to output file: %s\n",
- Count, File2Path);
- goto Exit;
- }
- Count++;
- }
- }
-
- /* No more lines, EOF, all done */
-
- goto Exit;
- }
- }
-
- /* Searched entire file, no match to table signature */
-
- printf ("Could not match table signature\n");
- fclose (FileHandle);
- return (-1);
-
-Exit:
- printf ("%u (0x%X) bytes written to %s\n", Count, Count, File2Path);
- fclose (FileHandle);
+Exit2:
fclose (FileOutHandle);
- return (0);
+
+Exit1:
+ free (FileBuffer);
+ return (Status);
}