📄 nsdump.c
字号:
return (AE_OK); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(R%d)", obj_desc->common.reference_count)); switch (type) { case ACPI_TYPE_METHOD: /* Name is a Method and its AML offset/length are set */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " M:%p-%X\n", obj_desc->method.aml_start, obj_desc->method.aml_length)); break; case ACPI_TYPE_INTEGER: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " N:%X%X\n", HIDWORD(obj_desc->integer.value), LODWORD(obj_desc->integer.value))); break; case ACPI_TYPE_STRING: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " S:%p-%X\n", obj_desc->string.pointer, obj_desc->string.length)); break; case ACPI_TYPE_BUFFER: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " B:%p-%X\n", obj_desc->buffer.pointer, obj_desc->buffer.length)); break; default: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n")); break; } break; } /* If debug turned off, done */ if (!(acpi_dbg_level & ACPI_LV_VALUES)) { return (AE_OK); } /* If there is an attached object, display it */ obj_desc = this_node->object; /* Dump attached objects */ while (obj_desc) { obj_type = INTERNAL_TYPE_INVALID; /* Decode the type of attached object and dump the contents */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Attached Object %p: ", obj_desc)); if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to Node)\n")); bytes_to_dump = sizeof (acpi_namespace_node); } else if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_INTERNAL)) { obj_type = obj_desc->common.type; if (obj_type > INTERNAL_TYPE_MAX) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to ACPI Object type %X [UNKNOWN])\n", obj_type)); bytes_to_dump = 32; } else { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to ACPI Object type %2.2X [%s])\n", obj_type, acpi_ut_get_type_name (obj_type))); bytes_to_dump = sizeof (acpi_operand_object); } } else { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(String or Buffer - not descriptor)\n")); bytes_to_dump = 16; } DUMP_BUFFER (obj_desc, bytes_to_dump); /* If value is NOT an internal object, we are done */ if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { goto cleanup; } /* * Valid object, get the pointer to next level, if any */ switch (obj_type) { case ACPI_TYPE_STRING: obj_desc = (acpi_operand_object *) obj_desc->string.pointer; break; case ACPI_TYPE_BUFFER: obj_desc = (acpi_operand_object *) obj_desc->buffer.pointer; break; case ACPI_TYPE_BUFFER_FIELD: obj_desc = (acpi_operand_object *) obj_desc->buffer_field.buffer_obj; break; case ACPI_TYPE_PACKAGE: obj_desc = (acpi_operand_object *) obj_desc->package.elements; break; case ACPI_TYPE_METHOD: obj_desc = (acpi_operand_object *) obj_desc->method.aml_start; break; case INTERNAL_TYPE_REGION_FIELD: obj_desc = (acpi_operand_object *) obj_desc->field.region_obj; break; case INTERNAL_TYPE_BANK_FIELD: obj_desc = (acpi_operand_object *) obj_desc->bank_field.region_obj; break; case INTERNAL_TYPE_INDEX_FIELD: obj_desc = (acpi_operand_object *) obj_desc->index_field.index_obj; break; default: goto cleanup; } obj_type = INTERNAL_TYPE_INVALID; /* Terminate loop after next pass */ }cleanup: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n")); return (AE_OK);}/******************************************************************************* * * FUNCTION: Acpi_ns_dump_objects * * PARAMETERS: Type - Object type to be dumped * Max_depth - Maximum depth of dump. Use ACPI_UINT32_MAX * for an effectively unlimited depth. * Owner_id - Dump only objects owned by this ID. Use * ACPI_UINT32_MAX to match all owners. * Start_handle - Where in namespace to start/end search * * DESCRIPTION: Dump typed objects within the loaded namespace. * Uses Acpi_ns_walk_namespace in conjunction with Acpi_ns_dump_one_object. * ******************************************************************************/voidacpi_ns_dump_objects ( acpi_object_type8 type, u8 display_type, u32 max_depth, u32 owner_id, acpi_handle start_handle){ acpi_walk_info info; FUNCTION_ENTRY (); info.debug_level = ACPI_LV_TABLES; info.owner_id = owner_id; info.display_type = display_type; acpi_ns_walk_namespace (type, start_handle, max_depth, NS_WALK_NO_UNLOCK, acpi_ns_dump_one_object, (void *) &info, NULL);}#ifndef _ACPI_ASL_COMPILER/******************************************************************************* * * FUNCTION: Acpi_ns_dump_one_device * * PARAMETERS: Handle - Node to be dumped * Level - Nesting level of the handle * Context - Passed into Walk_namespace * * DESCRIPTION: Dump a single Node that represents a device * This procedure is a User_function called by Acpi_ns_walk_namespace. * ******************************************************************************/acpi_statusacpi_ns_dump_one_device ( acpi_handle obj_handle, u32 level, void *context, void **return_value){ acpi_device_info info; acpi_status status; u32 i; PROC_NAME ("Ns_dump_one_device"); status = acpi_ns_dump_one_object (obj_handle, level, context, return_value); status = acpi_get_object_info (obj_handle, &info); if (ACPI_SUCCESS (status)) { for (i = 0; i < level; i++) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ")); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " HID: %s, ADR: %8.8X%8.8X, Status: %x\n", info.hardware_id, HIDWORD(info.address), LODWORD(info.address), info.current_status)); } return (status);}/******************************************************************************* * * FUNCTION: Acpi_ns_dump_root_devices * * PARAMETERS: None * * DESCRIPTION: Dump all objects of type "device" * ******************************************************************************/voidacpi_ns_dump_root_devices (void){ acpi_handle sys_bus_handle; PROC_NAME ("Ns_dump_root_devices"); /* Only dump the table if tracing is enabled */ if (!(ACPI_LV_TABLES & acpi_dbg_level)) { return; } acpi_get_handle (0, NS_SYSTEM_BUS, &sys_bus_handle); ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Display of all devices in the namespace:\n")); acpi_ns_walk_namespace (ACPI_TYPE_DEVICE, sys_bus_handle, ACPI_UINT32_MAX, NS_WALK_NO_UNLOCK, acpi_ns_dump_one_device, NULL, NULL);}#endif/******************************************************************************* * * FUNCTION: Acpi_ns_dump_tables * * PARAMETERS: Search_base - Root of subtree to be dumped, or * NS_ALL to dump the entire namespace * Max_depth - Maximum depth of dump. Use INT_MAX * for an effectively unlimited depth. * * DESCRIPTION: Dump the name space, or a portion of it. * ******************************************************************************/voidacpi_ns_dump_tables ( acpi_handle search_base, u32 max_depth){ acpi_handle search_handle = search_base; FUNCTION_TRACE ("Ns_dump_tables"); if (!acpi_gbl_root_node) { /* * If the name space has not been initialized, * there is nothing to dump. */ ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "name space not initialized!\n")); return_VOID; } if (NS_ALL == search_base) { /* entire namespace */ search_handle = acpi_gbl_root_node; ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n")); } acpi_ns_dump_objects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, max_depth, ACPI_UINT32_MAX, search_handle); return_VOID;}/******************************************************************************* * * FUNCTION: Acpi_ns_dump_entry * * PARAMETERS: Handle - Node to be dumped * Debug_level - Output level * * DESCRIPTION: Dump a single Node * ******************************************************************************/voidacpi_ns_dump_entry ( acpi_handle handle, u32 debug_level){ acpi_walk_info info; FUNCTION_ENTRY (); info.debug_level = debug_level; info.owner_id = ACPI_UINT32_MAX; acpi_ns_dump_one_object (handle, 1, &info, NULL);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -