Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F115647903
D47082.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D47082.diff
View Options
diff --git a/usr.sbin/acpi/acpidump/acpi.c b/usr.sbin/acpi/acpidump/acpi.c
--- a/usr.sbin/acpi/acpidump/acpi.c
+++ b/usr.sbin/acpi/acpidump/acpi.c
@@ -87,7 +87,7 @@
static void acpi_print_dsdt(ACPI_TABLE_HEADER *dsdp);
static ACPI_TABLE_HEADER *acpi_map_sdt(vm_offset_t pa);
static void acpi_print_rsd_ptr(ACPI_TABLE_RSDP *rp);
-static void acpi_handle_rsdt(ACPI_TABLE_HEADER *rsdp);
+static void acpi_handle_rsdt(ACPI_TABLE_HEADER *rsdp, const char *elm);
static void acpi_walk_subtables(ACPI_TABLE_HEADER *table, void *first,
void (*action)(ACPI_SUBTABLE_HEADER *));
static void acpi_walk_nfit(ACPI_TABLE_HEADER *table, void *first,
@@ -275,7 +275,7 @@
if (addr != 0) {
facs = (ACPI_TABLE_FACS *)acpi_map_sdt(addr);
- if (memcmp(facs->Signature, ACPI_SIG_FACS, 4) != 0 ||
+ if (memcmp(facs->Signature, ACPI_SIG_FACS, ACPI_NAMESEG_SIZE) != 0 ||
facs->Length < 64)
errx(1, "FACS is corrupt");
acpi_print_facs(facs);
@@ -2589,7 +2589,7 @@
}
static void
-acpi_handle_rsdt(ACPI_TABLE_HEADER *rsdp)
+acpi_handle_rsdt(ACPI_TABLE_HEADER *rsdp, const char *tbl)
{
ACPI_TABLE_HEADER *sdp;
ACPI_TABLE_RSDT *rsdt;
@@ -2597,7 +2597,14 @@
vm_offset_t addr;
int entries, i;
- acpi_print_rsdt(rsdp);
+ if (tbl == NULL) {
+ acpi_print_rsdt(rsdp);
+ } else {
+ if (memcmp(tbl, rsdp->Signature, ACPI_NAMESEG_SIZE) == 0) {
+ acpi_print_rsdt(rsdp);
+ return;
+ }
+ }
rsdt = (ACPI_TABLE_RSDT *)rsdp;
xsdt = (ACPI_TABLE_XSDT *)rsdp;
entries = (rsdp->Length - sizeof(ACPI_TABLE_HEADER)) / addr_size;
@@ -2614,6 +2621,8 @@
sdp->Signature);
continue;
}
+ if (tbl != NULL && memcmp(sdp->Signature, tbl, ACPI_NAMESEG_SIZE) != 0)
+ continue;
acpi_report_sdp(sdp);
}
}
@@ -2802,9 +2811,9 @@
}
void
-sdt_print_all(ACPI_TABLE_HEADER *rsdp)
+sdt_print_all(ACPI_TABLE_HEADER *rsdp, const char *tbl)
{
- acpi_handle_rsdt(rsdp);
+ acpi_handle_rsdt(rsdp, tbl);
}
/* Fetch a table matching the given signature via the RSDT. */
diff --git a/usr.sbin/acpi/acpidump/acpidump.h b/usr.sbin/acpi/acpidump/acpidump.h
--- a/usr.sbin/acpi/acpidump/acpidump.h
+++ b/usr.sbin/acpi/acpidump/acpidump.h
@@ -140,7 +140,7 @@
void dsdt_save_file(char *, ACPI_TABLE_HEADER *, ACPI_TABLE_HEADER *);
/* Print out as many fixed tables as possible, given the RSD PTR */
-void sdt_print_all(ACPI_TABLE_HEADER *);
+void sdt_print_all(ACPI_TABLE_HEADER *, const char *);
/* Disassemble the AML in the DSDT */
void aml_disassemble(ACPI_TABLE_HEADER *, ACPI_TABLE_HEADER *);
diff --git a/usr.sbin/acpi/acpidump/acpidump.8 b/usr.sbin/acpi/acpidump/acpidump.8
--- a/usr.sbin/acpi/acpidump/acpidump.8
+++ b/usr.sbin/acpi/acpidump/acpidump.8
@@ -40,6 +40,7 @@
.Op Fl h
.Op Fl o Ar dsdt_output
.Op Fl t
+.Op Fl T Ar table_name
.Op Fl v
.Sh DESCRIPTION
The
@@ -175,6 +176,9 @@
and print the results to stdout.
.It Fl t
Dump the contents of the various fixed tables listed above.
+.It Fl T ar table_name
+Dump the contents of the specific table.
+All ACPI tables are exactly 4 characters long.
.It Fl h
Displays usage and exit.
.It Fl s
diff --git a/usr.sbin/acpi/acpidump/acpidump.c b/usr.sbin/acpi/acpidump/acpidump.c
--- a/usr.sbin/acpi/acpidump/acpidump.c
+++ b/usr.sbin/acpi/acpidump/acpidump.c
@@ -45,7 +45,7 @@
{
fprintf(stderr, "usage: %s [-d] [-t] [-h] [-v] [-f dsdt_input] "
- "[-o dsdt_output]\n", progname);
+ "[-o dsdt_output] [-T table_name]\n", progname);
fprintf(stderr, "To send ASL:\n\t%s -dt | gzip -c9 > foo.asl.gz\n",
progname);
exit(1);
@@ -58,6 +58,7 @@
int c;
char *progname;
char *dsdt_input_file, *dsdt_output_file;
+ char *tbl = NULL;
dsdt_input_file = dsdt_output_file = NULL;
progname = argv[0];
@@ -65,11 +66,18 @@
if (argc < 2)
usage(progname);
- while ((c = getopt(argc, argv, "dhtvsf:o:")) != -1) {
+ while ((c = getopt(argc, argv, "df:ho:tT:vs")) != -1) {
switch (c) {
case 'd':
dflag = 1;
break;
+ case 'T':
+ tbl = optarg;
+ if (strlen(tbl) != 4) {
+ warnx("Illegal table name %s", tbl);
+ usage(progname);
+ }
+ break;
case 't':
tflag = 1;
break;
@@ -113,10 +121,10 @@
}
/* Display misc. SDT tables (only available when using /dev/mem) */
- if (tflag) {
+ if (tflag || tbl != NULL) {
if (vflag)
warnx("printing various SDT tables");
- sdt_print_all(rsdt);
+ sdt_print_all(rsdt, tbl);
}
/* Translate RSDT to DSDT pointer */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Apr 27, 12:57 PM (17 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17817887
Default Alt Text
D47082.diff (4 KB)
Attached To
Mode
D47082: acpidump: Add -T TBLN to print a specific ACPI fixed table
Attached
Detach File
Event Timeline
Log In to Comment