diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2013-06-26 19:01:10 +0000 |
---|---|---|
committer | Jung-uk Kim <jkim@FreeBSD.org> | 2013-06-26 19:01:10 +0000 |
commit | 94c37fb2483cc09856a30e74879a69f2ccfe22f0 (patch) | |
tree | 274ff6113dbdc6cbbbf50dc30d0527fb9cb0fc55 /source/tools/acpidump | |
parent | b7f987c19dad2c6d33c64e7f96a9b4deca9e2650 (diff) |
Notes
Diffstat (limited to 'source/tools/acpidump')
-rw-r--r-- | source/tools/acpidump/acpidump.h | 12 | ||||
-rw-r--r-- | source/tools/acpidump/apdump.c | 25 | ||||
-rw-r--r-- | source/tools/acpidump/apmain.c | 24 |
3 files changed, 40 insertions, 21 deletions
diff --git a/source/tools/acpidump/acpidump.h b/source/tools/acpidump/acpidump.h index c76ec87880dbe..44fd7d3a9fbb4 100644 --- a/source/tools/acpidump/acpidump.h +++ b/source/tools/acpidump/acpidump.h @@ -98,6 +98,14 @@ typedef struct ap_dump_action #define AP_MAX_ACPI_FILES 256 /* Prevent infinite loops */ +/* Minimum FADT sizes for various table addresses */ + +#define MIN_FADT_FOR_DSDT (ACPI_FADT_OFFSET (Dsdt) + sizeof (UINT32)) +#define MIN_FADT_FOR_FACS (ACPI_FADT_OFFSET (Facs) + sizeof (UINT32)) +#define MIN_FADT_FOR_XDSDT (ACPI_FADT_OFFSET (XDsdt) + sizeof (UINT64)) +#define MIN_FADT_FOR_XFACS (ACPI_FADT_OFFSET (XFacs) + sizeof (UINT64)) + + /* * apdump - Table get/dump routines */ @@ -117,6 +125,10 @@ int ApDumpAllTables ( void); +BOOLEAN +ApIsValidHeader ( + ACPI_TABLE_HEADER *Table); + /* * apfiles - File I/O utilities diff --git a/source/tools/acpidump/apdump.c b/source/tools/acpidump/apdump.c index c229ba5c99c54..5000e4db7f87f 100644 --- a/source/tools/acpidump/apdump.c +++ b/source/tools/acpidump/apdump.c @@ -46,10 +46,6 @@ /* Local prototypes */ -static BOOLEAN -ApIsValidHeader ( - ACPI_TABLE_HEADER *Table); - static int ApDumpTableBuffer ( ACPI_TABLE_HEADER *Table, @@ -68,7 +64,7 @@ ApDumpTableBuffer ( * ******************************************************************************/ -static BOOLEAN +BOOLEAN ApIsValidHeader ( ACPI_TABLE_HEADER *Table) { @@ -77,7 +73,7 @@ ApIsValidHeader ( if (!AcpiUtValidAcpiName (Table->Signature)) { - fprintf (stderr, "Table signature (0x%X) is invalid\n", + fprintf (stderr, "Table signature (0x%8.8X) is invalid\n", *(UINT32 *) Table->Signature); return (FALSE); } @@ -86,7 +82,7 @@ ApIsValidHeader ( if (Table->Length <= sizeof (ACPI_TABLE_HEADER)) { - fprintf (stderr, "Table length (0x%X) is invalid\n", + fprintf (stderr, "Table length (0x%8.8X) is invalid\n", Table->Length); return (FALSE); } @@ -295,10 +291,10 @@ ApDumpTableByName ( ACPI_STATUS Status; - if (strlen (Signature) > ACPI_NAME_SIZE) + if (strlen (Signature) != ACPI_NAME_SIZE) { fprintf (stderr, - "Invalid table signature [%s]: too long (4 chars max)\n", + "Invalid table signature [%s]: must be exactly 4 characters\n", Signature); return (-1); } @@ -308,6 +304,17 @@ ApDumpTableByName ( strcpy (LocalSignature, Signature); AcpiUtStrupr (LocalSignature); + /* To be friendly, handle tables whose signatures do not match the name */ + + if (ACPI_COMPARE_NAME (LocalSignature, "FADT")) + { + strcpy (LocalSignature, ACPI_SIG_FADT); + } + else if (ACPI_COMPARE_NAME (LocalSignature, "MADT")) + { + strcpy (LocalSignature, ACPI_SIG_MADT); + } + /* Dump all instances of this signature (to handle multiple SSDTs) */ for (Instance = 0; Instance < AP_MAX_ACPI_FILES; Instance++) diff --git a/source/tools/acpidump/apmain.c b/source/tools/acpidump/apmain.c index 9ee4f4667fa50..4c90cb7dcc85b 100644 --- a/source/tools/acpidump/apmain.c +++ b/source/tools/acpidump/apmain.c @@ -92,7 +92,7 @@ UINT32 CurrentAction = 0; #define AP_UTILITY_NAME "ACPI Binary Table Dump Utility" -#define AP_SUPPORTED_OPTIONS "?a:bf:hn:o:rsv" +#define AP_SUPPORTED_OPTIONS "?a:bf:hn:o:svz" /****************************************************************************** @@ -113,15 +113,15 @@ ApDisplayUsage ( ACPI_OPTION ("-b", "Dump tables to binary files"); ACPI_OPTION ("-h -?", "This help message"); ACPI_OPTION ("-o <File>", "Redirect output to file"); - ACPI_OPTION ("-r", "Revision (version)"); ACPI_OPTION ("-s", "Print table summaries only"); - ACPI_OPTION ("-v", "Verbose mode"); + ACPI_OPTION ("-v", "Version of this utility"); + ACPI_OPTION ("-z", "Verbose mode"); printf ("\nTable Options:\n"); - ACPI_OPTION ("-a <Address>", "Get table via physical address"); - ACPI_OPTION ("-f <BinaryFile>", "Get table via binary file"); - ACPI_OPTION ("-n <Signature>", "Get table via name/signature"); + ACPI_OPTION ("-a <Address>", "Get table via a physical address"); + ACPI_OPTION ("-f <BinaryFile>", "Get table via a binary file"); + ACPI_OPTION ("-n <Signature>", "Get table via a name/signature"); printf ( "\n" @@ -210,17 +210,17 @@ ApDoOptions ( } continue; - case 'r': /* Revision/version */ - - printf (ACPI_COMMON_SIGNON (AP_UTILITY_NAME)); - exit (0); - case 's': /* Print table summaries only */ Gbl_SummaryMode = TRUE; continue; - case 'v': /* Verbose mode */ + case 'v': /* Revision/version */ + + printf (ACPI_COMMON_SIGNON (AP_UTILITY_NAME)); + exit (0); + + case 'z': /* Verbose mode */ Gbl_VerboseMode = TRUE; fprintf (stderr, ACPI_COMMON_SIGNON (AP_UTILITY_NAME)); |