summaryrefslogtreecommitdiff
path: root/source/tools/acpidump
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2013-06-26 19:01:10 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2013-06-26 19:01:10 +0000
commit94c37fb2483cc09856a30e74879a69f2ccfe22f0 (patch)
tree274ff6113dbdc6cbbbf50dc30d0527fb9cb0fc55 /source/tools/acpidump
parentb7f987c19dad2c6d33c64e7f96a9b4deca9e2650 (diff)
Notes
Diffstat (limited to 'source/tools/acpidump')
-rw-r--r--source/tools/acpidump/acpidump.h12
-rw-r--r--source/tools/acpidump/apdump.c25
-rw-r--r--source/tools/acpidump/apmain.c24
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));