// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 /****************************************************************************** * * Module Name: nsdump - table dumping routines for debug * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #include <acpi/acpi.h> #include "accommon.h" #include "acnamesp.h" #include <acpi/acoutput.h> #define _COMPONENT … ACPI_MODULE_NAME("nsdump") /* Local prototypes */ #ifdef ACPI_OBSOLETE_FUNCTIONS void acpi_ns_dump_root_devices(void); static acpi_status acpi_ns_dump_one_device(acpi_handle obj_handle, u32 level, void *context, void **return_value); #endif #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) static acpi_status acpi_ns_dump_one_object_path(acpi_handle obj_handle, u32 level, void *context, void **return_value); static acpi_status acpi_ns_get_max_depth(acpi_handle obj_handle, u32 level, void *context, void **return_value); /******************************************************************************* * * FUNCTION: acpi_ns_print_pathname * * PARAMETERS: num_segments - Number of ACPI name segments * pathname - The compressed (internal) path * * RETURN: None * * DESCRIPTION: Print an object's full namespace pathname * ******************************************************************************/ void acpi_ns_print_pathname(u32 num_segments, const char *pathname) { … } #ifdef ACPI_OBSOLETE_FUNCTIONS /* Not used at this time, perhaps later */ /******************************************************************************* * * FUNCTION: acpi_ns_dump_pathname * * PARAMETERS: handle - Object * msg - Prefix message * level - Desired debug level * component - Caller's component ID * * RETURN: None * * DESCRIPTION: Print an object's full namespace pathname * Manages allocation/freeing of a pathname buffer * ******************************************************************************/ void acpi_ns_dump_pathname(acpi_handle handle, const char *msg, u32 level, u32 component) { ACPI_FUNCTION_TRACE(ns_dump_pathname); /* Do this only if the requested debug level and component are enabled */ if (!ACPI_IS_DEBUG_ENABLED(level, component)) { return_VOID; } /* Convert handle to a full pathname and print it (with supplied message) */ acpi_ns_print_node_pathname(handle, msg); acpi_os_printf("\n"); return_VOID; } #endif /******************************************************************************* * * FUNCTION: acpi_ns_dump_one_object * * PARAMETERS: obj_handle - Node to be dumped * level - Nesting level of the handle * context - Passed into walk_namespace * return_value - Not used * * RETURN: Status * * DESCRIPTION: Dump a single Node * This procedure is a user_function called by acpi_ns_walk_namespace. * ******************************************************************************/ acpi_status acpi_ns_dump_one_object(acpi_handle obj_handle, u32 level, void *context, void **return_value) { … } /******************************************************************************* * * FUNCTION: acpi_ns_dump_objects * * PARAMETERS: type - Object type to be dumped * display_type - 0 or ACPI_DISPLAY_SUMMARY * 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 * * RETURN: None * * DESCRIPTION: Dump typed objects within the loaded namespace. Uses * acpi_ns_walk_namespace in conjunction with acpi_ns_dump_one_object. * ******************************************************************************/ void acpi_ns_dump_objects(acpi_object_type type, u8 display_type, u32 max_depth, acpi_owner_id owner_id, acpi_handle start_handle) { … } /******************************************************************************* * * FUNCTION: acpi_ns_dump_one_object_path, acpi_ns_get_max_depth * * PARAMETERS: obj_handle - Node to be dumped * level - Nesting level of the handle * context - Passed into walk_namespace * return_value - Not used * * RETURN: Status * * DESCRIPTION: Dump the full pathname to a namespace object. acp_ns_get_max_depth * computes the maximum nesting depth in the namespace tree, in * order to simplify formatting in acpi_ns_dump_one_object_path. * These procedures are user_functions called by acpi_ns_walk_namespace. * ******************************************************************************/ static acpi_status acpi_ns_dump_one_object_path(acpi_handle obj_handle, u32 level, void *context, void **return_value) { … } static acpi_status acpi_ns_get_max_depth(acpi_handle obj_handle, u32 level, void *context, void **return_value) { … } /******************************************************************************* * * FUNCTION: acpi_ns_dump_object_paths * * PARAMETERS: type - Object type to be dumped * display_type - 0 or ACPI_DISPLAY_SUMMARY * 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 * * RETURN: None * * DESCRIPTION: Dump full object pathnames within the loaded namespace. Uses * acpi_ns_walk_namespace in conjunction with acpi_ns_dump_one_object_path. * ******************************************************************************/ void acpi_ns_dump_object_paths(acpi_object_type type, u8 display_type, u32 max_depth, acpi_owner_id owner_id, acpi_handle start_handle) { … } /******************************************************************************* * * FUNCTION: acpi_ns_dump_entry * * PARAMETERS: handle - Node to be dumped * debug_level - Output level * * RETURN: None * * DESCRIPTION: Dump a single Node * ******************************************************************************/ void acpi_ns_dump_entry(acpi_handle handle, u32 debug_level) { … } #ifdef ACPI_ASL_COMPILER /******************************************************************************* * * 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. * * RETURN: None * * DESCRIPTION: Dump the name space, or a portion of it. * ******************************************************************************/ void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth) { acpi_handle search_handle = search_base; ACPI_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, "namespace not initialized!\n")); return_VOID; } if (ACPI_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_OWNER_ID_MAX, search_handle); return_VOID; } #endif #endif