Page MenuHomeFreeBSD

D46769.diff
No OneTemporary

D46769.diff

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
@@ -2643,6 +2643,22 @@
perror("rmdir");
}
+void
+aml_disassemble_separate(ACPI_TABLE_HEADER *rsdt, ACPI_TABLE_HEADER *dsdp)
+{
+ ACPI_TABLE_HEADER *ssdt = NULL;
+
+ aml_disassemble(NULL, dsdp);
+ if (rsdt != NULL) {
+ for (;;) {
+ ssdt = sdt_from_rsdt(rsdt, "SSDT", ssdt);
+ if (ssdt == NULL)
+ break;
+ aml_disassemble(NULL, ssdt);
+ }
+ }
+}
+
void
sdt_print_all(ACPI_TABLE_HEADER *rsdp)
{
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
@@ -144,6 +144,7 @@
/* Disassemble the AML in the DSDT */
void aml_disassemble(ACPI_TABLE_HEADER *, ACPI_TABLE_HEADER *);
+void aml_disassemble_separate(ACPI_TABLE_HEADER *, ACPI_TABLE_HEADER *);
/* Routines for accessing tables in physical memory */
ACPI_TABLE_RSDP *acpi_find_rsd_ptr(void);
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
@@ -133,13 +133,25 @@
.Nm :
.Bl -tag -width indent
.It Fl d
-Disassemble the DSDT into ASL using
+Concatenate the DSDT and the SSDT's into single image and disassemble the image into ASL using
.Xr iasl 8
and print the results to stdout.
.It Fl t
Dump the contents of the various fixed tables listed above.
.It Fl h
Displays usage and exit.
+.It Fl s
+Disassemble each of the DSDT and the SSDT's into ASL using
+.Xr iasl 8
+and print the results to stdout.
+This will avoid
+.Xr iasl 8
+error on disassembling concatenated image.
+If both
+.Fl d
+and
+.Fl s
+are specified, the last option is effective.
.It Fl v
Enable verbose messages.
.It Fl f Ar dsdt_input
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
@@ -65,7 +65,7 @@
if (argc < 2)
usage(progname);
- while ((c = getopt(argc, argv, "dhtvf:o:")) != -1) {
+ while ((c = getopt(argc, argv, "dhtvsf:o:")) != -1) {
switch (c) {
case 'd':
dflag = 1;
@@ -82,6 +82,9 @@
case 'o':
dsdt_output_file = optarg;
break;
+ case 's':
+ dflag = 2;
+ break;
case 'h':
default:
usage(progname);
@@ -136,7 +139,11 @@
if (dflag) {
if (vflag)
warnx("disassembling DSDT, iasl messages follow");
- aml_disassemble(rsdt, sdt);
+ if (dflag == 1) {
+ aml_disassemble(rsdt, sdt);
+ } else {
+ aml_disassemble_separate(rsdt, sdt);
+ }
if (vflag)
warnx("iasl processing complete");
}

File Metadata

Mime Type
text/plain
Expires
Fri, Oct 4, 2:34 AM (22 h, 9 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13508565
Default Alt Text
D46769.diff (2 KB)

Event Timeline