Skip to content

Commit

Permalink
ACPICA: AML Parser: Add debug option to dump parse trees
Browse files Browse the repository at this point in the history
Debug level 0x00800000 will dump the current parse tree
just before it is deleted.

Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Erik Schmauss <erik.schmauss@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Bob Moore authored and Rafael J. Wysocki committed Jun 6, 2018
1 parent 1387cdd commit fb30b29
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 4 deletions.
34 changes: 31 additions & 3 deletions drivers/acpi/acpica/pswalk.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,22 +25,48 @@ ACPI_MODULE_NAME("pswalk")
* DESCRIPTION: Delete a portion of or an entire parse tree.
*
******************************************************************************/
#include "amlcode.h"
void acpi_ps_delete_parse_tree(union acpi_parse_object *subtree_root)
{
union acpi_parse_object *op = subtree_root;
union acpi_parse_object *next = NULL;
union acpi_parse_object *parent = NULL;
u32 level = 0;

ACPI_FUNCTION_TRACE_PTR(ps_delete_parse_tree, subtree_root);

ACPI_DEBUG_PRINT((ACPI_DB_PARSE_TREES, " root %p\n", subtree_root));

/* Visit all nodes in the subtree */

while (op) {

/* Check if we are not ascending */

if (op != parent) {

/* This is the descending case */

if (ACPI_IS_DEBUG_ENABLED
(ACPI_LV_PARSE_TREES, _COMPONENT)) {

/* This debug option will print the entire parse tree */

acpi_os_printf(" %*.s%s %p", (level * 4),
" ",
acpi_ps_get_opcode_name(op->
common.
aml_opcode),
op);

if (op->named.aml_opcode == AML_INT_NAMEPATH_OP) {
acpi_os_printf(" %4.4s",
op->common.value.string);
}
if (op->named.aml_opcode == AML_STRING_OP) {
acpi_os_printf(" %s",
op->common.value.string);
}
acpi_os_printf("\n");
}

/* Look for an argument or child of the current op */

next = acpi_ps_get_arg(op, 0);
Expand All @@ -49,6 +75,7 @@ void acpi_ps_delete_parse_tree(union acpi_parse_object *subtree_root)
/* Still going downward in tree (Op is not completed yet) */

op = next;
level++;
continue;
}
}
Expand All @@ -69,6 +96,7 @@ void acpi_ps_delete_parse_tree(union acpi_parse_object *subtree_root)
if (next) {
op = next;
} else {
level--;
op = parent;
}
}
Expand Down
4 changes: 3 additions & 1 deletion include/acpi/acoutput.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@
#define ACPI_LV_ALLOCATIONS 0x00100000
#define ACPI_LV_FUNCTIONS 0x00200000
#define ACPI_LV_OPTIMIZATIONS 0x00400000
#define ACPI_LV_VERBOSITY2 0x00700000 | ACPI_LV_VERBOSITY1
#define ACPI_LV_PARSE_TREES 0x00800000
#define ACPI_LV_VERBOSITY2 0x00F00000 | ACPI_LV_VERBOSITY1
#define ACPI_LV_ALL ACPI_LV_VERBOSITY2

/* Trace verbosity level 3 [Threading, I/O, and Interrupts] */
Expand Down Expand Up @@ -131,6 +132,7 @@
#define ACPI_DB_TABLES ACPI_DEBUG_LEVEL (ACPI_LV_TABLES)
#define ACPI_DB_FUNCTIONS ACPI_DEBUG_LEVEL (ACPI_LV_FUNCTIONS)
#define ACPI_DB_OPTIMIZATIONS ACPI_DEBUG_LEVEL (ACPI_LV_OPTIMIZATIONS)
#define ACPI_DB_PARSE_TREES ACPI_DEBUG_LEVEL (ACPI_LV_PARSE_TREES)
#define ACPI_DB_VALUES ACPI_DEBUG_LEVEL (ACPI_LV_VALUES)
#define ACPI_DB_OBJECTS ACPI_DEBUG_LEVEL (ACPI_LV_OBJECTS)
#define ACPI_DB_ALLOCATIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALLOCATIONS)
Expand Down

0 comments on commit fb30b29

Please sign in to comment.