// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 /****************************************************************************** * * Module Name: nswalk - Functions for walking the ACPI namespace * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #include <acpi/acpi.h> #include "accommon.h" #include "acnamesp.h" #define _COMPONENT … ACPI_MODULE_NAME("nswalk") /******************************************************************************* * * FUNCTION: acpi_ns_get_next_node * * PARAMETERS: parent_node - Parent node whose children we are * getting * child_node - Previous child that was found. * The NEXT child will be returned * * RETURN: struct acpi_namespace_node - Pointer to the NEXT child or NULL if * none is found. * * DESCRIPTION: Return the next peer node within the namespace. If Handle * is valid, Scope is ignored. Otherwise, the first node * within Scope is returned. * ******************************************************************************/ struct acpi_namespace_node *acpi_ns_get_next_node(struct acpi_namespace_node *parent_node, struct acpi_namespace_node *child_node) { … } /******************************************************************************* * * FUNCTION: acpi_ns_get_next_node_typed * * PARAMETERS: type - Type of node to be searched for * parent_node - Parent node whose children we are * getting * child_node - Previous child that was found. * The NEXT child will be returned * * RETURN: struct acpi_namespace_node - Pointer to the NEXT child or NULL if * none is found. * * DESCRIPTION: Return the next peer node within the namespace. If Handle * is valid, Scope is ignored. Otherwise, the first node * within Scope is returned. * ******************************************************************************/ struct acpi_namespace_node *acpi_ns_get_next_node_typed(acpi_object_type type, struct acpi_namespace_node *parent_node, struct acpi_namespace_node *child_node) { … } /******************************************************************************* * * FUNCTION: acpi_ns_walk_namespace * * PARAMETERS: type - acpi_object_type to search for * start_node - Handle in namespace where search begins * max_depth - Depth to which search is to reach * flags - Whether to unlock the NS before invoking * the callback routine * descending_callback - Called during tree descent * when an object of "Type" is found * ascending_callback - Called during tree ascent * when an object of "Type" is found * context - Passed to user function(s) above * return_value - from the user_function if terminated * early. Otherwise, returns NULL. * RETURNS: Status * * DESCRIPTION: Performs a modified depth-first walk of the namespace tree, * starting (and ending) at the node specified by start_handle. * The callback function is called whenever a node that matches * the type parameter is found. If the callback function returns * a non-zero value, the search is terminated immediately and * this value is returned to the caller. * * The point of this procedure is to provide a generic namespace * walk routine that can be called from multiple places to * provide multiple services; the callback function(s) can be * tailored to each task, whether it is a print function, * a compare function, etc. * ******************************************************************************/ acpi_status acpi_ns_walk_namespace(acpi_object_type type, acpi_handle start_node, u32 max_depth, u32 flags, acpi_walk_callback descending_callback, acpi_walk_callback ascending_callback, void *context, void **return_value) { … }