-/*******************************************************************************
- *
- * FUNCTION: acpi_ns_find_ini_methods
- *
- * PARAMETERS: acpi_walk_callback
- *
- * RETURN: acpi_status
- *
- * DESCRIPTION: Called during namespace walk. Finds objects named _INI under
- * device/processor/thermal objects, and marks the entire subtree
- * with a SUBTREE_HAS_INI flag. This flag is used during the
- * subsequent device initialization walk to avoid entire subtrees
- * that do not contain an _INI.
- *
- ******************************************************************************/
-
-static acpi_status
-acpi_ns_find_ini_methods(acpi_handle obj_handle,
- u32 nesting_level, void *context, void **return_value)
-{
- struct acpi_device_walk_info *info =
- ACPI_CAST_PTR(struct acpi_device_walk_info, context);
- struct acpi_namespace_node *node;
- struct acpi_namespace_node *parent_node;
-
- /* Keep count of device/processor/thermal objects */
-
- node = ACPI_CAST_PTR(struct acpi_namespace_node, obj_handle);
- if ((node->type == ACPI_TYPE_DEVICE) ||
- (node->type == ACPI_TYPE_PROCESSOR) ||
- (node->type == ACPI_TYPE_THERMAL)) {
- info->device_count++;
- return (AE_OK);
- }
-
- /* We are only looking for methods named _INI */
-
- if (!ACPI_COMPARE_NAME(node->name.ascii, METHOD_NAME__INI)) {
- return (AE_OK);
- }
-
- /*
- * The only _INI methods that we care about are those that are
- * present under Device, Processor, and Thermal objects.
- */
- parent_node = acpi_ns_get_parent_node(node);
- switch (parent_node->type) {
- case ACPI_TYPE_DEVICE:
- case ACPI_TYPE_PROCESSOR:
- case ACPI_TYPE_THERMAL:
-
- /* Mark parent and bubble up the INI present flag to the root */
-
- while (parent_node) {
- parent_node->flags |= ANOBJ_SUBTREE_HAS_INI;
- parent_node = acpi_ns_get_parent_node(parent_node);
- }
- break;
-
- default:
- break;
- }
-
- return (AE_OK);
-}
-