static void acpi_db_decode_node(struct acpi_namespace_node *node) { acpi_os_printf("<Node> Name %4.4s", acpi_ut_get_node_name(node)); if (node->flags & ANOBJ_METHOD_ARG) { acpi_os_printf(" [Method Arg]"); } if (node->flags & ANOBJ_METHOD_LOCAL) { acpi_os_printf(" [Method Local]"); } switch (node->type) { /* These types have no attached object */ case ACPI_TYPE_DEVICE: acpi_os_printf(" Device"); break; case ACPI_TYPE_THERMAL: acpi_os_printf(" Thermal Zone"); break; default: acpi_db_decode_internal_object(acpi_ns_get_attached_object (node)); break; } }
void acpi_db_display_internal_object(union acpi_operand_object *obj_desc, struct acpi_walk_state *walk_state) { u8 type; acpi_os_printf("%p ", obj_desc); if (!obj_desc) { acpi_os_printf("<Null Object>\n"); return; } /* Decode the object type */ switch (ACPI_GET_DESCRIPTOR_TYPE(obj_desc)) { case ACPI_DESC_TYPE_PARSER: acpi_os_printf("<Parser> "); break; case ACPI_DESC_TYPE_NAMED: acpi_db_decode_node((struct acpi_namespace_node *)obj_desc); break; case ACPI_DESC_TYPE_OPERAND: type = obj_desc->common.type; if (type > ACPI_TYPE_LOCAL_MAX) { acpi_os_printf(" Type %X [Invalid Type]", (u32)type); return; } /* Decode the ACPI object type */ switch (obj_desc->common.type) { case ACPI_TYPE_LOCAL_REFERENCE: acpi_os_printf("[%s] ", acpi_ut_get_reference_name(obj_desc)); /* Decode the refererence */ switch (obj_desc->reference.class) { case ACPI_REFCLASS_LOCAL: acpi_os_printf("%X ", obj_desc->reference.value); if (walk_state) { obj_desc = walk_state->local_variables [obj_desc->reference.value].object; acpi_os_printf("%p", obj_desc); acpi_db_decode_internal_object (obj_desc); } break; case ACPI_REFCLASS_ARG: acpi_os_printf("%X ", obj_desc->reference.value); if (walk_state) { obj_desc = walk_state->arguments [obj_desc->reference.value].object; acpi_os_printf("%p", obj_desc); acpi_db_decode_internal_object (obj_desc); } break; case ACPI_REFCLASS_INDEX: switch (obj_desc->reference.target_type) { case ACPI_TYPE_BUFFER_FIELD: acpi_os_printf("%p", obj_desc->reference. object); acpi_db_decode_internal_object (obj_desc->reference.object); break; case ACPI_TYPE_PACKAGE: acpi_os_printf("%p", obj_desc->reference. where); if (!obj_desc->reference.where) { acpi_os_printf (" Uninitialized WHERE pointer"); } else { acpi_db_decode_internal_object(* (obj_desc-> reference. where)); } break; default: acpi_os_printf ("Unknown index target type"); break; } break; case ACPI_REFCLASS_REFOF: if (!obj_desc->reference.object) { acpi_os_printf ("Uninitialized reference subobject pointer"); break; } /* Reference can be to a Node or an Operand object */ switch (ACPI_GET_DESCRIPTOR_TYPE (obj_desc->reference.object)) { case ACPI_DESC_TYPE_NAMED: acpi_db_decode_node(obj_desc->reference. object); break; case ACPI_DESC_TYPE_OPERAND: acpi_db_decode_internal_object (obj_desc->reference.object); break; default: break; } break; case ACPI_REFCLASS_NAME: acpi_db_decode_node(obj_desc->reference.node); break; case ACPI_REFCLASS_DEBUG: case ACPI_REFCLASS_TABLE: acpi_os_printf("\n"); break; default: /* Unknown reference class */ acpi_os_printf("%2.2X\n", obj_desc->reference.class); break; } break; default: acpi_os_printf("<Obj> "); acpi_db_decode_internal_object(obj_desc); break; } break; default: acpi_os_printf("<Not a valid ACPI Object Descriptor> [%s]", acpi_ut_get_descriptor_name(obj_desc)); break; } acpi_os_printf("\n"); }
void acpi_db_display_opcode ( acpi_walk_state *walk_state, acpi_parse_object *op) { u8 *byte_data; u32 byte_count; u32 i; const acpi_opcode_info *op_info = NULL; u32 name; if (!op) { acpi_os_printf ("<NULL OP PTR>"); } /* op and arguments */ switch (op->opcode) { case AML_BYTE_OP: if (acpi_gbl_db_opt_verbose) { acpi_os_printf ("(u8) 0x%2.2X", op->value.integer8); } else { acpi_os_printf ("0x%2.2X", op->value.integer8); } break; case AML_WORD_OP: if (acpi_gbl_db_opt_verbose) { acpi_os_printf ("(u16) 0x%4.4X", op->value.integer16); } else { acpi_os_printf ("0x%4.4X", op->value.integer16); } break; case AML_DWORD_OP: if (acpi_gbl_db_opt_verbose) { acpi_os_printf ("(u32) 0x%8.8X", op->value.integer32); } else { acpi_os_printf ("0x%8.8X", op->value.integer32); } break; case AML_QWORD_OP: if (acpi_gbl_db_opt_verbose) { acpi_os_printf ("(u64) 0x%8.8X%8.8X", op->value.integer64.hi, op->value.integer64.lo); } else { acpi_os_printf ("0x%8.8X%8.8X", op->value.integer64.hi, op->value.integer64.lo); } break; case AML_STRING_OP: if (op->value.string) { acpi_os_printf ("\"%s\"", op->value.string); } else { acpi_os_printf ("<\"NULL STRING PTR\">"); } break; case AML_INT_STATICSTRING_OP: if (op->value.string) { acpi_os_printf ("\"%s\"", op->value.string); } else { acpi_os_printf ("\"<NULL STATIC STRING PTR>\""); } break; case AML_INT_NAMEPATH_OP: acpi_db_display_namestring (op->value.name); break; case AML_INT_NAMEDFIELD_OP: acpi_os_printf ("Named_field (Length 0x%8.8X) ", op->value.integer32); break; case AML_INT_RESERVEDFIELD_OP: acpi_os_printf ("Reserved_field (Length 0x%8.8X) ", op->value.integer32); break; case AML_INT_ACCESSFIELD_OP: acpi_os_printf ("Access_field (Length 0x%8.8X) ", op->value.integer32); break; case AML_INT_BYTELIST_OP: if (acpi_gbl_db_opt_verbose) { acpi_os_printf ("Byte_list (Length 0x%8.8X) ", op->value.integer32); } else { acpi_os_printf ("0x%2.2X", op->value.integer32); byte_count = op->value.integer32; byte_data = ((acpi_parse2_object *) op)->data; for (i = 0; i < byte_count; i++) { acpi_os_printf (", 0x%2.2X", byte_data[i]); } } break; default: /* Just get the opcode name and print it */ op_info = acpi_ps_get_opcode_info (op->opcode); acpi_os_printf ("%s", op_info->name); #ifndef PARSER_ONLY if ((op->opcode == AML_INT_RETURN_VALUE_OP) && (walk_state->results) && (walk_state->results->results.num_results)) { acpi_db_decode_internal_object (walk_state->results->results.obj_desc [walk_state->results->results.num_results-1]); } #endif break; } if (!op_info) { /* If there is another element in the list, add a comma */ if (op->next) { acpi_os_printf (","); } } /* * If this is a named opcode, print the associated name value */ op_info = acpi_ps_get_opcode_info (op->opcode); if (op && (op_info->flags & AML_NAMED)) { name = acpi_ps_get_name (op); acpi_os_printf (" %4.4s", &name); if (acpi_gbl_db_opt_verbose) { acpi_os_printf (" (Path \\"); acpi_db_display_path (op); acpi_os_printf (")"); } } }