Commit 2263576c authored by Lin Ming's avatar Lin Ming Committed by Len Brown

ACPICA: Add post-order callback to acpi_walk_namespace

The existing interface only has a pre-order callback. This change
adds an additional parameter for a post-order callback which will
be more useful for bus scans. ACPICA BZ 779.

Also update the external calls to acpi_walk_namespace.

http://www.acpica.org/bugzilla/show_bug.cgi?id=779Signed-off-by: default avatarLin Ming <ming.m.lin@intel.com>
Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 7d5d05d0
...@@ -390,7 +390,7 @@ sn_acpi_get_pcidev_info(struct pci_dev *dev, struct pcidev_info **pcidev_info, ...@@ -390,7 +390,7 @@ sn_acpi_get_pcidev_info(struct pci_dev *dev, struct pcidev_info **pcidev_info,
pcidev_match.handle = NULL; pcidev_match.handle = NULL;
acpi_walk_namespace(ACPI_TYPE_DEVICE, rootbus_handle, ACPI_UINT32_MAX, acpi_walk_namespace(ACPI_TYPE_DEVICE, rootbus_handle, ACPI_UINT32_MAX,
find_matching_device, &pcidev_match, NULL); find_matching_device, NULL, &pcidev_match, NULL);
if (!pcidev_match.handle) { if (!pcidev_match.handle) {
printk(KERN_ERR printk(KERN_ERR
......
...@@ -885,7 +885,7 @@ static int __init longhaul_cpu_init(struct cpufreq_policy *policy) ...@@ -885,7 +885,7 @@ static int __init longhaul_cpu_init(struct cpufreq_policy *policy)
/* Find ACPI data for processor */ /* Find ACPI data for processor */
acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, &longhaul_walk_callback, ACPI_UINT32_MAX, &longhaul_walk_callback, NULL,
NULL, (void *)&pr); NULL, (void *)&pr);
/* Check ACPI support for C3 state */ /* Check ACPI support for C3 state */
......
...@@ -537,7 +537,7 @@ static int __init acpi_memory_device_init(void) ...@@ -537,7 +537,7 @@ static int __init acpi_memory_device_init(void)
status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, ACPI_UINT32_MAX,
acpi_memory_register_notify_handler, acpi_memory_register_notify_handler, NULL,
NULL, NULL); NULL, NULL);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
...@@ -561,7 +561,7 @@ static void __exit acpi_memory_device_exit(void) ...@@ -561,7 +561,7 @@ static void __exit acpi_memory_device_exit(void)
*/ */
status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, ACPI_UINT32_MAX,
acpi_memory_deregister_notify_handler, acpi_memory_deregister_notify_handler, NULL,
NULL, NULL); NULL, NULL);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
......
...@@ -104,7 +104,8 @@ acpi_ns_walk_namespace(acpi_object_type type, ...@@ -104,7 +104,8 @@ acpi_ns_walk_namespace(acpi_object_type type,
acpi_handle start_object, acpi_handle start_object,
u32 max_depth, u32 max_depth,
u32 flags, u32 flags,
acpi_walk_callback user_function, acpi_walk_callback pre_order_visit,
acpi_walk_callback post_order_visit,
void *context, void **return_value); void *context, void **return_value);
struct acpi_namespace_node *acpi_ns_get_next_node(struct acpi_namespace_node struct acpi_namespace_node *acpi_ns_get_next_node(struct acpi_namespace_node
......
...@@ -192,7 +192,7 @@ acpi_ds_initialize_objects(u32 table_index, ...@@ -192,7 +192,7 @@ acpi_ds_initialize_objects(u32 table_index,
status = status =
acpi_ns_walk_namespace(ACPI_TYPE_ANY, start_node, ACPI_UINT32_MAX, acpi_ns_walk_namespace(ACPI_TYPE_ANY, start_node, ACPI_UINT32_MAX,
ACPI_NS_WALK_UNLOCK, acpi_ds_init_one_object, ACPI_NS_WALK_UNLOCK, acpi_ds_init_one_object,
&info, NULL); NULL, &info, NULL);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status, "During WalkNamespace")); ACPI_EXCEPTION((AE_INFO, status, "During WalkNamespace"));
} }
......
...@@ -945,8 +945,8 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device, ...@@ -945,8 +945,8 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
status = acpi_ns_walk_namespace(ACPI_TYPE_METHOD, gpe_device, status = acpi_ns_walk_namespace(ACPI_TYPE_METHOD, gpe_device,
ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK,
acpi_ev_save_method_info, gpe_block, acpi_ev_save_method_info, NULL,
NULL); gpe_block, NULL);
/* Return the new block */ /* Return the new block */
...@@ -1022,8 +1022,8 @@ acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device, ...@@ -1022,8 +1022,8 @@ acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device,
status = status =
acpi_ns_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, acpi_ns_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK, ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK,
acpi_ev_match_prw_and_gpe, &gpe_info, acpi_ev_match_prw_and_gpe, NULL,
NULL); &gpe_info, NULL);
} }
/* /*
......
...@@ -1025,8 +1025,8 @@ acpi_ev_install_space_handler(struct acpi_namespace_node * node, ...@@ -1025,8 +1025,8 @@ acpi_ev_install_space_handler(struct acpi_namespace_node * node,
*/ */
status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, node, ACPI_UINT32_MAX, status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, node, ACPI_UINT32_MAX,
ACPI_NS_WALK_UNLOCK, ACPI_NS_WALK_UNLOCK,
acpi_ev_install_handler, handler_obj, acpi_ev_install_handler, NULL,
NULL); handler_obj, NULL);
unlock_and_exit: unlock_and_exit:
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
...@@ -1062,7 +1062,7 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node, ...@@ -1062,7 +1062,7 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
*/ */
status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, node, ACPI_UINT32_MAX, status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, node, ACPI_UINT32_MAX,
ACPI_NS_WALK_UNLOCK, acpi_ev_reg_run, ACPI_NS_WALK_UNLOCK, acpi_ev_reg_run,
&space_id, NULL); NULL, &space_id, NULL);
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
......
...@@ -634,8 +634,8 @@ acpi_ns_dump_objects(acpi_object_type type, ...@@ -634,8 +634,8 @@ acpi_ns_dump_objects(acpi_object_type type,
(void)acpi_ns_walk_namespace(type, start_handle, max_depth, (void)acpi_ns_walk_namespace(type, start_handle, max_depth,
ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_NO_UNLOCK |
ACPI_NS_WALK_TEMP_NODES, ACPI_NS_WALK_TEMP_NODES,
acpi_ns_dump_one_object, (void *)&info, acpi_ns_dump_one_object, NULL,
NULL); (void *)&info, NULL);
} }
#endif /* ACPI_FUTURE_USAGE */ #endif /* ACPI_FUTURE_USAGE */
......
...@@ -131,7 +131,8 @@ void acpi_ns_dump_root_devices(void) ...@@ -131,7 +131,8 @@ void acpi_ns_dump_root_devices(void)
status = acpi_ns_walk_namespace(ACPI_TYPE_DEVICE, sys_bus_handle, status = acpi_ns_walk_namespace(ACPI_TYPE_DEVICE, sys_bus_handle,
ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK,
acpi_ns_dump_one_device, NULL, NULL); acpi_ns_dump_one_device, NULL, NULL,
NULL);
} }
#endif #endif
......
...@@ -96,7 +96,7 @@ acpi_status acpi_ns_initialize_objects(void) ...@@ -96,7 +96,7 @@ acpi_status acpi_ns_initialize_objects(void)
/* Walk entire namespace from the supplied root */ /* Walk entire namespace from the supplied root */
status = acpi_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, status = acpi_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, acpi_ns_init_one_object, ACPI_UINT32_MAX, acpi_ns_init_one_object, NULL,
&info, NULL); &info, NULL);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status, "During WalkNamespace")); ACPI_EXCEPTION((AE_INFO, status, "During WalkNamespace"));
...@@ -156,7 +156,8 @@ acpi_status acpi_ns_initialize_devices(void) ...@@ -156,7 +156,8 @@ acpi_status acpi_ns_initialize_devices(void)
status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, FALSE, ACPI_UINT32_MAX, FALSE,
acpi_ns_find_ini_methods, &info, NULL); acpi_ns_find_ini_methods, NULL, &info,
NULL);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
goto error_exit; goto error_exit;
} }
...@@ -189,7 +190,8 @@ acpi_status acpi_ns_initialize_devices(void) ...@@ -189,7 +190,8 @@ acpi_status acpi_ns_initialize_devices(void)
status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, FALSE, ACPI_UINT32_MAX, FALSE,
acpi_ns_init_one_device, &info, NULL); acpi_ns_init_one_device, NULL, &info,
NULL);
ACPI_FREE(info.evaluate_info); ACPI_FREE(info.evaluate_info);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
......
...@@ -165,24 +165,27 @@ struct acpi_namespace_node *acpi_ns_get_next_node_typed(acpi_object_type type, ...@@ -165,24 +165,27 @@ struct acpi_namespace_node *acpi_ns_get_next_node_typed(acpi_object_type type,
* max_depth - Depth to which search is to reach * max_depth - Depth to which search is to reach
* Flags - Whether to unlock the NS before invoking * Flags - Whether to unlock the NS before invoking
* the callback routine * the callback routine
* user_function - Called when an object of "Type" is found * pre_order_visit - Called during tree pre-order visit
* Context - Passed to user function * when an object of "Type" is found
* return_value - from the user_function if terminated early. * post_order_visit - Called during tree post-order visit
* Otherwise, returns NULL. * 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 * RETURNS: Status
* *
* DESCRIPTION: Performs a modified depth-first walk of the namespace tree, * DESCRIPTION: Performs a modified depth-first walk of the namespace tree,
* starting (and ending) at the node specified by start_handle. * starting (and ending) at the node specified by start_handle.
* The user_function is called whenever a node that matches * The callback function is called whenever a node that matches
* the type parameter is found. If the user function returns * the type parameter is found. If the callback function returns
* a non-zero value, the search is terminated immediately and * a non-zero value, the search is terminated immediately and
* this value is returned to the caller. * this value is returned to the caller.
* *
* The point of this procedure is to provide a generic namespace * The point of this procedure is to provide a generic namespace
* walk routine that can be called from multiple places to * walk routine that can be called from multiple places to
* provide multiple services; the User Function can be tailored * provide multiple services; the callback function(s) can be
* to each task, whether it is a print function, a compare * tailored to each task, whether it is a print function,
* function, etc. * a compare function, etc.
* *
******************************************************************************/ ******************************************************************************/
...@@ -191,7 +194,8 @@ acpi_ns_walk_namespace(acpi_object_type type, ...@@ -191,7 +194,8 @@ acpi_ns_walk_namespace(acpi_object_type type,
acpi_handle start_node, acpi_handle start_node,
u32 max_depth, u32 max_depth,
u32 flags, u32 flags,
acpi_walk_callback user_function, acpi_walk_callback pre_order_visit,
acpi_walk_callback post_order_visit,
void *context, void **return_value) void *context, void **return_value)
{ {
acpi_status status; acpi_status status;
...@@ -200,6 +204,7 @@ acpi_ns_walk_namespace(acpi_object_type type, ...@@ -200,6 +204,7 @@ acpi_ns_walk_namespace(acpi_object_type type,
struct acpi_namespace_node *parent_node; struct acpi_namespace_node *parent_node;
acpi_object_type child_type; acpi_object_type child_type;
u32 level; u32 level;
u8 node_previously_visited = FALSE;
ACPI_FUNCTION_TRACE(ns_walk_namespace); ACPI_FUNCTION_TRACE(ns_walk_namespace);
...@@ -212,7 +217,7 @@ acpi_ns_walk_namespace(acpi_object_type type, ...@@ -212,7 +217,7 @@ acpi_ns_walk_namespace(acpi_object_type type,
/* Null child means "get first node" */ /* Null child means "get first node" */
parent_node = start_node; parent_node = start_node;
child_node = NULL; child_node = acpi_ns_get_next_node(parent_node, NULL);
child_type = ACPI_TYPE_ANY; child_type = ACPI_TYPE_ANY;
level = 1; level = 1;
...@@ -221,102 +226,129 @@ acpi_ns_walk_namespace(acpi_object_type type, ...@@ -221,102 +226,129 @@ acpi_ns_walk_namespace(acpi_object_type type,
* started. When Level is zero, the loop is done because we have * started. When Level is zero, the loop is done because we have
* bubbled up to (and passed) the original parent handle (start_entry) * bubbled up to (and passed) the original parent handle (start_entry)
*/ */
while (level > 0) { while (level > 0 && child_node) {
status = AE_OK;
/* Get the next node in this scope. Null if not found */ /* Found next child, get the type if we are not searching for ANY */
status = AE_OK; if (type != ACPI_TYPE_ANY) {
child_node = acpi_ns_get_next_node(parent_node, child_node); child_type = child_node->type;
if (child_node) { }
/* Found next child, get the type if we are not searching for ANY */ /*
* Ignore all temporary namespace nodes (created during control
* method execution) unless told otherwise. These temporary nodes
* can cause a race condition because they can be deleted during
* the execution of the user function (if the namespace is
* unlocked before invocation of the user function.) Only the
* debugger namespace dump will examine the temporary nodes.
*/
if ((child_node->flags & ANOBJ_TEMPORARY) &&
!(flags & ACPI_NS_WALK_TEMP_NODES)) {
status = AE_CTRL_DEPTH;
}
if (type != ACPI_TYPE_ANY) { /* Type must match requested type */
child_type = child_node->type;
}
else if (child_type == type) {
/* /*
* Ignore all temporary namespace nodes (created during control * Found a matching node, invoke the user callback function.
* method execution) unless told otherwise. These temporary nodes * Unlock the namespace if flag is set.
* can cause a race condition because they can be deleted during
* the execution of the user function (if the namespace is
* unlocked before invocation of the user function.) Only the
* debugger namespace dump will examine the temporary nodes.
*/ */
if ((child_node->flags & ANOBJ_TEMPORARY) && if (flags & ACPI_NS_WALK_UNLOCK) {
!(flags & ACPI_NS_WALK_TEMP_NODES)) { mutex_status =
status = AE_CTRL_DEPTH; acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE(mutex_status)) {
return_ACPI_STATUS(mutex_status);
}
} }
/* Type must match requested type */ /*
* Invoke the user function, either pre-order or post-order
else if (child_type == type) { * or both.
/* */
* Found a matching node, invoke the user callback function. if (!node_previously_visited) {
* Unlock the namespace if flag is set. if (pre_order_visit) {
*/ status =
if (flags & ACPI_NS_WALK_UNLOCK) { pre_order_visit(child_node, level,
mutex_status = context,
acpi_ut_release_mutex return_value);
(ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE(mutex_status)) {
return_ACPI_STATUS
(mutex_status);
}
} }
} else {
if (post_order_visit) {
status =
post_order_visit(child_node, level,
context,
return_value);
}
}
status = if (flags & ACPI_NS_WALK_UNLOCK) {
user_function(child_node, level, context, mutex_status =
return_value); acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE(mutex_status)) {
if (flags & ACPI_NS_WALK_UNLOCK) { return_ACPI_STATUS(mutex_status);
mutex_status =
acpi_ut_acquire_mutex
(ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE(mutex_status)) {
return_ACPI_STATUS
(mutex_status);
}
} }
}
switch (status) { switch (status) {
case AE_OK: case AE_OK:
case AE_CTRL_DEPTH: case AE_CTRL_DEPTH:
/* Just keep going */ /* Just keep going */
break; break;
case AE_CTRL_TERMINATE: case AE_CTRL_TERMINATE:
/* Exit now, with OK status */ /* Exit now, with OK status */
return_ACPI_STATUS(AE_OK); return_ACPI_STATUS(AE_OK);
default: default:
/* All others are valid exceptions */ /* All others are valid exceptions */
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
}
/*
* Depth first search: Attempt to go down another level in the
* namespace if we are allowed to. Don't go any further if we have
* reached the caller specified maximum depth or if the user
* function has specified that the maximum depth has been reached.
*/
if (!node_previously_visited &&
(level < max_depth) && (status != AE_CTRL_DEPTH)) {
if (child_node->child) {
/* There is at least one child of this node, visit it */
level++;
parent_node = child_node;
child_node =
acpi_ns_get_next_node(parent_node, NULL);
continue;
} }
}
/* /* No more children, re-visit this node */
* Depth first search: Attempt to go down another level in the
* namespace if we are allowed to. Don't go any further if we have
* reached the caller specified maximum depth or if the user
* function has specified that the maximum depth has been reached.
*/
if ((level < max_depth) && (status != AE_CTRL_DEPTH)) {
if (child_node->child) {
/* There is at least one child of this node, visit it */ if (!node_previously_visited) {
node_previously_visited = TRUE;
continue;
}
level++; /* No more children, visit peers */
parent_node = child_node;
child_node = NULL; child_node = acpi_ns_get_next_node(parent_node, child_node);
} if (child_node) {
} node_previously_visited = FALSE;
} else { }
/* No peers, re-visit parent */
else {
/* /*
* No more children of this node (acpi_ns_get_next_node failed), go * No more children of this node (acpi_ns_get_next_node failed), go
* back upwards in the namespace tree to the node's parent. * back upwards in the namespace tree to the node's parent.
...@@ -324,6 +356,8 @@ acpi_ns_walk_namespace(acpi_object_type type, ...@@ -324,6 +356,8 @@ acpi_ns_walk_namespace(acpi_object_type type,
level--; level--;
child_node = parent_node; child_node = parent_node;
parent_node = acpi_ns_get_parent_node(parent_node); parent_node = acpi_ns_get_parent_node(parent_node);
node_previously_visited = TRUE;
} }
} }
......
...@@ -433,8 +433,11 @@ static void acpi_ns_resolve_references(struct acpi_evaluate_info *info) ...@@ -433,8 +433,11 @@ static void acpi_ns_resolve_references(struct acpi_evaluate_info *info)
* PARAMETERS: Type - acpi_object_type to search for * PARAMETERS: Type - acpi_object_type to search for
* start_object - Handle in namespace where search begins * start_object - Handle in namespace where search begins
* max_depth - Depth to which search is to reach * max_depth - Depth to which search is to reach
* user_function - Called when an object of "Type" is found * pre_order_visit - Called during tree pre-order visit
* Context - Passed to user function * when an object of "Type" is found
* post_order_visit - Called during tree post-order visit
* when an object of "Type" is found
* Context - Passed to user function(s) above
* return_value - Location where return value of * return_value - Location where return value of
* user_function is put if terminated early * user_function is put if terminated early
* *
...@@ -443,16 +446,16 @@ static void acpi_ns_resolve_references(struct acpi_evaluate_info *info) ...@@ -443,16 +446,16 @@ static void acpi_ns_resolve_references(struct acpi_evaluate_info *info)
* *
* DESCRIPTION: Performs a modified depth-first walk of the namespace tree, * DESCRIPTION: Performs a modified depth-first walk of the namespace tree,
* starting (and ending) at the object specified by start_handle. * starting (and ending) at the object specified by start_handle.
* The user_function is called whenever an object that matches * The callback function is called whenever an object that matches
* the type parameter is found. If the user function returns * the type parameter is found. If the callback function returns
* a non-zero value, the search is terminated immediately and this * a non-zero value, the search is terminated immediately and this
* value is returned to the caller. * value is returned to the caller.
* *
* The point of this procedure is to provide a generic namespace * The point of this procedure is to provide a generic namespace
* walk routine that can be called from multiple places to * walk routine that can be called from multiple places to
* provide multiple services; the User Function can be tailored * provide multiple services; the callback function(s) can be
* to each task, whether it is a print function, a compare * tailored to each task, whether it is a print function,
* function, etc. * a compare function, etc.
* *
******************************************************************************/ ******************************************************************************/
...@@ -460,7 +463,8 @@ acpi_status ...@@ -460,7 +463,8 @@ acpi_status
acpi_walk_namespace(acpi_object_type type, acpi_walk_namespace(acpi_object_type type,
acpi_handle start_object, acpi_handle start_object,
u32 max_depth, u32 max_depth,
acpi_walk_callback user_function, acpi_walk_callback pre_order_visit,
acpi_walk_callback post_order_visit,
void *context, void **return_value) void *context, void **return_value)
{ {
acpi_status status; acpi_status status;
...@@ -469,7 +473,8 @@ acpi_walk_namespace(acpi_object_type type, ...@@ -469,7 +473,8 @@ acpi_walk_namespace(acpi_object_type type,
/* Parameter validation */ /* Parameter validation */
if ((type > ACPI_TYPE_LOCAL_MAX) || (!max_depth) || (!user_function)) { if ((type > ACPI_TYPE_LOCAL_MAX) ||
(!max_depth) || (!pre_order_visit && !post_order_visit)) {
return_ACPI_STATUS(AE_BAD_PARAMETER); return_ACPI_STATUS(AE_BAD_PARAMETER);
} }
...@@ -501,8 +506,9 @@ acpi_walk_namespace(acpi_object_type type, ...@@ -501,8 +506,9 @@ acpi_walk_namespace(acpi_object_type type,
} }
status = acpi_ns_walk_namespace(type, start_object, max_depth, status = acpi_ns_walk_namespace(type, start_object, max_depth,
ACPI_NS_WALK_UNLOCK, user_function, ACPI_NS_WALK_UNLOCK, pre_order_visit,
context, return_value); post_order_visit, context,
return_value);
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
...@@ -681,8 +687,8 @@ acpi_get_devices(const char *HID, ...@@ -681,8 +687,8 @@ acpi_get_devices(const char *HID,
status = acpi_ns_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, status = acpi_ns_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK, ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK,
acpi_ns_get_device_callback, &info, acpi_ns_get_device_callback, NULL,
return_value); &info, return_value);
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
......
...@@ -258,7 +258,7 @@ static int __init acpi_container_init(void) ...@@ -258,7 +258,7 @@ static int __init acpi_container_init(void)
acpi_walk_namespace(ACPI_TYPE_DEVICE, acpi_walk_namespace(ACPI_TYPE_DEVICE,
ACPI_ROOT_OBJECT, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, ACPI_UINT32_MAX,
container_walk_namespace_cb, &action, NULL); container_walk_namespace_cb, NULL, &action, NULL);
return (0); return (0);
} }
...@@ -271,7 +271,7 @@ static void __exit acpi_container_exit(void) ...@@ -271,7 +271,7 @@ static void __exit acpi_container_exit(void)
acpi_walk_namespace(ACPI_TYPE_DEVICE, acpi_walk_namespace(ACPI_TYPE_DEVICE,
ACPI_ROOT_OBJECT, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, ACPI_UINT32_MAX,
container_walk_namespace_cb, &action, NULL); container_walk_namespace_cb, NULL, &action, NULL);
acpi_bus_unregister_driver(&acpi_container_driver); acpi_bus_unregister_driver(&acpi_container_driver);
......
...@@ -1030,8 +1030,8 @@ static int dock_add(acpi_handle handle) ...@@ -1030,8 +1030,8 @@ static int dock_add(acpi_handle handle)
/* Find dependent devices */ /* Find dependent devices */
acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, find_dock_devices, dock_station, ACPI_UINT32_MAX, find_dock_devices, NULL,
NULL); dock_station, NULL);
/* add the dock station as a device dependent on itself */ /* add the dock station as a device dependent on itself */
dd = alloc_dock_dependent_device(handle); dd = alloc_dock_dependent_device(handle);
...@@ -1127,11 +1127,11 @@ static int __init dock_init(void) ...@@ -1127,11 +1127,11 @@ static int __init dock_init(void)
/* look for a dock station */ /* look for a dock station */
acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, find_dock, NULL, NULL); ACPI_UINT32_MAX, find_dock, NULL, NULL, NULL);
/* look for bay */ /* look for bay */
acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, find_bay, NULL, NULL); ACPI_UINT32_MAX, find_bay, NULL, NULL, NULL);
if (!dock_station_count) { if (!dock_station_count) {
printk(KERN_INFO PREFIX "No dock devices found.\n"); printk(KERN_INFO PREFIX "No dock devices found.\n");
return 0; return 0;
......
...@@ -820,7 +820,7 @@ static int acpi_ec_add(struct acpi_device *device) ...@@ -820,7 +820,7 @@ static int acpi_ec_add(struct acpi_device *device)
/* Find and register all query methods */ /* Find and register all query methods */
acpi_walk_namespace(ACPI_TYPE_METHOD, ec->handle, 1, acpi_walk_namespace(ACPI_TYPE_METHOD, ec->handle, 1,
acpi_ec_register_query_methods, ec, NULL); acpi_ec_register_query_methods, NULL, ec, NULL);
if (!first_ec) if (!first_ec)
first_ec = ec; first_ec = ec;
......
...@@ -113,7 +113,7 @@ acpi_handle acpi_get_child(acpi_handle parent, acpi_integer address) ...@@ -113,7 +113,7 @@ acpi_handle acpi_get_child(acpi_handle parent, acpi_integer address)
if (!parent) if (!parent)
return NULL; return NULL;
acpi_walk_namespace(ACPI_TYPE_DEVICE, parent, acpi_walk_namespace(ACPI_TYPE_DEVICE, parent,
1, do_acpi_find_child, &find, NULL); 1, do_acpi_find_child, NULL, &find, NULL);
return find.handle; return find.handle;
} }
......
...@@ -219,12 +219,12 @@ walk_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv) ...@@ -219,12 +219,12 @@ walk_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv)
dbg("p2p bridge walk, pci_bus = %x\n", dev->subordinate->number); dbg("p2p bridge walk, pci_bus = %x\n", dev->subordinate->number);
status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1, status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
user_function, &child_context, NULL); user_function, NULL, &child_context, NULL);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
goto out; goto out;
status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1, status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
walk_p2p_bridge, &child_context, NULL); walk_p2p_bridge, NULL, &child_context, NULL);
out: out:
pci_dev_put(dev); pci_dev_put(dev);
return AE_OK; return AE_OK;
...@@ -277,12 +277,12 @@ walk_root_bridge(acpi_handle handle, acpi_walk_callback user_function) ...@@ -277,12 +277,12 @@ walk_root_bridge(acpi_handle handle, acpi_walk_callback user_function)
dbg("root bridge walk, pci_bus = %x\n", pci_bus->number); dbg("root bridge walk, pci_bus = %x\n", pci_bus->number);
status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1, status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
user_function, &context, NULL); user_function, NULL, &context, NULL);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
return status; return status;
status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1, status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
walk_p2p_bridge, &context, NULL); walk_p2p_bridge, NULL, &context, NULL);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
err("%s: walk_p2p_bridge failure - %d\n", __func__, status); err("%s: walk_p2p_bridge failure - %d\n", __func__, status);
......
...@@ -1102,7 +1102,7 @@ void acpi_processor_install_hotplug_notify(void) ...@@ -1102,7 +1102,7 @@ void acpi_processor_install_hotplug_notify(void)
acpi_walk_namespace(ACPI_TYPE_PROCESSOR, acpi_walk_namespace(ACPI_TYPE_PROCESSOR,
ACPI_ROOT_OBJECT, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, ACPI_UINT32_MAX,
processor_walk_namespace_cb, &action, NULL); processor_walk_namespace_cb, NULL, &action, NULL);
#endif #endif
register_hotcpu_notifier(&acpi_cpu_notifier); register_hotcpu_notifier(&acpi_cpu_notifier);
} }
...@@ -1115,7 +1115,7 @@ void acpi_processor_uninstall_hotplug_notify(void) ...@@ -1115,7 +1115,7 @@ void acpi_processor_uninstall_hotplug_notify(void)
acpi_walk_namespace(ACPI_TYPE_PROCESSOR, acpi_walk_namespace(ACPI_TYPE_PROCESSOR,
ACPI_ROOT_OBJECT, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, ACPI_UINT32_MAX,
processor_walk_namespace_cb, &action, NULL); processor_walk_namespace_cb, NULL, &action, NULL);
#endif #endif
unregister_hotcpu_notifier(&acpi_cpu_notifier); unregister_hotcpu_notifier(&acpi_cpu_notifier);
} }
......
...@@ -1332,7 +1332,7 @@ static int acpi_bus_scan(acpi_handle handle, struct acpi_bus_ops *ops, ...@@ -1332,7 +1332,7 @@ static int acpi_bus_scan(acpi_handle handle, struct acpi_bus_ops *ops,
status = acpi_bus_check_add(handle, 0, ops, &device); status = acpi_bus_check_add(handle, 0, ops, &device);
if (ACPI_SUCCESS(status)) if (ACPI_SUCCESS(status))
acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX, acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
acpi_bus_check_add, ops, &device); acpi_bus_check_add, NULL, ops, &device);
if (child) if (child)
*child = device; *child = device;
......
...@@ -101,7 +101,7 @@ long acpi_is_video_device(struct acpi_device *device) ...@@ -101,7 +101,7 @@ long acpi_is_video_device(struct acpi_device *device)
/* Only check for backlight functionality if one of the above hit. */ /* Only check for backlight functionality if one of the above hit. */
if (video_caps) if (video_caps)
acpi_walk_namespace(ACPI_TYPE_DEVICE, device->handle, acpi_walk_namespace(ACPI_TYPE_DEVICE, device->handle,
ACPI_UINT32_MAX, acpi_backlight_cap_match, ACPI_UINT32_MAX, acpi_backlight_cap_match, NULL,
&video_caps, NULL); &video_caps, NULL);
return video_caps; return video_caps;
...@@ -151,7 +151,7 @@ long acpi_video_get_capabilities(acpi_handle graphics_handle) ...@@ -151,7 +151,7 @@ long acpi_video_get_capabilities(acpi_handle graphics_handle)
if (!graphics_handle) { if (!graphics_handle) {
/* Only do the global walk through all graphics devices once */ /* Only do the global walk through all graphics devices once */
acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, find_video, ACPI_UINT32_MAX, find_video, NULL,
&caps, NULL); &caps, NULL);
/* There might be boot param flags set already... */ /* There might be boot param flags set already... */
acpi_video_support |= caps; acpi_video_support |= caps;
...@@ -173,7 +173,7 @@ long acpi_video_get_capabilities(acpi_handle graphics_handle) ...@@ -173,7 +173,7 @@ long acpi_video_get_capabilities(acpi_handle graphics_handle)
return 0; return 0;
} }
acpi_walk_namespace(ACPI_TYPE_DEVICE, graphics_handle, acpi_walk_namespace(ACPI_TYPE_DEVICE, graphics_handle,
ACPI_UINT32_MAX, find_video, ACPI_UINT32_MAX, find_video, NULL,
&caps, NULL); &caps, NULL);
} }
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "We have 0x%lX video support %s %s\n", ACPI_DEBUG_PRINT((ACPI_DB_INFO, "We have 0x%lX video support %s %s\n",
......
...@@ -899,7 +899,7 @@ static int intel_lid_present(void) ...@@ -899,7 +899,7 @@ static int intel_lid_present(void)
acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, ACPI_UINT32_MAX,
check_lid_device, &lid_present, NULL); check_lid_device, NULL, &lid_present, NULL);
return lid_present; return lid_present;
} }
......
...@@ -363,7 +363,7 @@ static int acpi_smbus_cmi_add(struct acpi_device *device) ...@@ -363,7 +363,7 @@ static int acpi_smbus_cmi_add(struct acpi_device *device)
smbus_cmi->cap_write = 0; smbus_cmi->cap_write = 0;
acpi_walk_namespace(ACPI_TYPE_METHOD, smbus_cmi->handle, 1, acpi_walk_namespace(ACPI_TYPE_METHOD, smbus_cmi->handle, 1,
acpi_smbus_cmi_query_methods, smbus_cmi, NULL); acpi_smbus_cmi_query_methods, NULL, smbus_cmi, NULL);
if (smbus_cmi->cap_info == 0) if (smbus_cmi->cap_info == 0)
goto err; goto err;
......
...@@ -471,7 +471,7 @@ int acpi_pci_detect_ejectable(acpi_handle handle) ...@@ -471,7 +471,7 @@ int acpi_pci_detect_ejectable(acpi_handle handle)
return found; return found;
acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 1, acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 1,
check_hotplug, (void *)&found, NULL); check_hotplug, NULL, (void *)&found, NULL);
return found; return found;
} }
EXPORT_SYMBOL_GPL(acpi_pci_detect_ejectable); EXPORT_SYMBOL_GPL(acpi_pci_detect_ejectable);
......
...@@ -266,7 +266,7 @@ static int detect_ejectable_slots(acpi_handle handle) ...@@ -266,7 +266,7 @@ static int detect_ejectable_slots(acpi_handle handle)
int found = acpi_pci_detect_ejectable(handle); int found = acpi_pci_detect_ejectable(handle);
if (!found) { if (!found) {
acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1, acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
is_pci_dock_device, (void *)&found, NULL); is_pci_dock_device, NULL, (void *)&found, NULL);
} }
return found; return found;
} }
...@@ -281,7 +281,7 @@ static void init_bridge_misc(struct acpiphp_bridge *bridge) ...@@ -281,7 +281,7 @@ static void init_bridge_misc(struct acpiphp_bridge *bridge)
/* register all slot objects under this bridge */ /* register all slot objects under this bridge */
status = acpi_walk_namespace(ACPI_TYPE_DEVICE, bridge->handle, (u32)1, status = acpi_walk_namespace(ACPI_TYPE_DEVICE, bridge->handle, (u32)1,
register_slot, bridge, NULL); register_slot, NULL, bridge, NULL);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
list_del(&bridge->list); list_del(&bridge->list);
return; return;
...@@ -447,7 +447,7 @@ find_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv) ...@@ -447,7 +447,7 @@ find_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv)
/* search P2P bridges under this p2p bridge */ /* search P2P bridges under this p2p bridge */
status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1, status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
find_p2p_bridge, NULL, NULL); find_p2p_bridge, NULL, NULL, NULL);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
warn("find_p2p_bridge failed (error code = 0x%x)\n", status); warn("find_p2p_bridge failed (error code = 0x%x)\n", status);
...@@ -485,7 +485,7 @@ static int add_bridge(acpi_handle handle) ...@@ -485,7 +485,7 @@ static int add_bridge(acpi_handle handle)
/* search P2P bridges under this host bridge */ /* search P2P bridges under this host bridge */
status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1, status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
find_p2p_bridge, NULL, NULL); find_p2p_bridge, NULL, NULL, NULL);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
warn("find_p2p_bridge failed (error code = 0x%x)\n", status); warn("find_p2p_bridge failed (error code = 0x%x)\n", status);
...@@ -573,7 +573,7 @@ cleanup_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv) ...@@ -573,7 +573,7 @@ cleanup_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv)
/* cleanup p2p bridges under this P2P bridge /* cleanup p2p bridges under this P2P bridge
in a depth-first manner */ in a depth-first manner */
acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1, acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
cleanup_p2p_bridge, NULL, NULL); cleanup_p2p_bridge, NULL, NULL, NULL);
bridge = acpiphp_handle_to_bridge(handle); bridge = acpiphp_handle_to_bridge(handle);
if (bridge) if (bridge)
...@@ -589,7 +589,7 @@ static void remove_bridge(acpi_handle handle) ...@@ -589,7 +589,7 @@ static void remove_bridge(acpi_handle handle)
/* cleanup p2p bridges under this host bridge /* cleanup p2p bridges under this host bridge
in a depth-first manner */ in a depth-first manner */
acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
(u32)1, cleanup_p2p_bridge, NULL, NULL); (u32)1, cleanup_p2p_bridge, NULL, NULL, NULL);
/* /*
* On root bridges with hotplug slots directly underneath (ie, * On root bridges with hotplug slots directly underneath (ie,
...@@ -778,7 +778,7 @@ static int acpiphp_configure_ioapics(acpi_handle handle) ...@@ -778,7 +778,7 @@ static int acpiphp_configure_ioapics(acpi_handle handle)
{ {
ioapic_add(handle, 0, NULL, NULL); ioapic_add(handle, 0, NULL, NULL);
acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
ACPI_UINT32_MAX, ioapic_add, NULL, NULL); ACPI_UINT32_MAX, ioapic_add, NULL, NULL, NULL);
return 0; return 0;
} }
...@@ -786,7 +786,7 @@ static int acpiphp_unconfigure_ioapics(acpi_handle handle) ...@@ -786,7 +786,7 @@ static int acpiphp_unconfigure_ioapics(acpi_handle handle)
{ {
ioapic_remove(handle, 0, NULL, NULL); ioapic_remove(handle, 0, NULL, NULL);
acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
ACPI_UINT32_MAX, ioapic_remove, NULL, NULL); ACPI_UINT32_MAX, ioapic_remove, NULL, NULL, NULL);
return 0; return 0;
} }
...@@ -1367,7 +1367,7 @@ static void handle_hotplug_event_bridge(acpi_handle handle, u32 type, void *cont ...@@ -1367,7 +1367,7 @@ static void handle_hotplug_event_bridge(acpi_handle handle, u32 type, void *cont
bridge = acpiphp_handle_to_bridge(handle); bridge = acpiphp_handle_to_bridge(handle);
if (type == ACPI_NOTIFY_BUS_CHECK) { if (type == ACPI_NOTIFY_BUS_CHECK) {
acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, ACPI_UINT32_MAX, acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, ACPI_UINT32_MAX,
count_sub_bridges, &num_sub_bridges, NULL); count_sub_bridges, NULL, &num_sub_bridges, NULL);
} }
if (!bridge && !num_sub_bridges) { if (!bridge && !num_sub_bridges) {
...@@ -1388,7 +1388,7 @@ static void handle_hotplug_event_bridge(acpi_handle handle, u32 type, void *cont ...@@ -1388,7 +1388,7 @@ static void handle_hotplug_event_bridge(acpi_handle handle, u32 type, void *cont
} }
if (num_sub_bridges) if (num_sub_bridges)
acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
ACPI_UINT32_MAX, check_sub_bridges, NULL, NULL); ACPI_UINT32_MAX, check_sub_bridges, NULL, NULL, NULL);
break; break;
case ACPI_NOTIFY_DEVICE_CHECK: case ACPI_NOTIFY_DEVICE_CHECK:
...@@ -1512,7 +1512,7 @@ int __init acpiphp_glue_init(void) ...@@ -1512,7 +1512,7 @@ int __init acpiphp_glue_init(void)
int num = 0; int num = 0;
acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, find_root_bridges, &num, NULL); ACPI_UINT32_MAX, find_root_bridges, NULL, &num, NULL);
if (num <= 0) if (num <= 0)
return -1; return -1;
......
...@@ -434,7 +434,7 @@ static int __init ibm_acpiphp_init(void) ...@@ -434,7 +434,7 @@ static int __init ibm_acpiphp_init(void)
dbg("%s\n", __func__); dbg("%s\n", __func__);
if (acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, if (acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, ibm_find_acpi_device, ACPI_UINT32_MAX, ibm_find_acpi_device, NULL,
&ibm_acpi_handle, NULL) != FOUND_APCI) { &ibm_acpi_handle, NULL) != FOUND_APCI) {
err("%s: acpi_walk_namespace failed\n", __func__); err("%s: acpi_walk_namespace failed\n", __func__);
retval = -ENODEV; retval = -ENODEV;
......
...@@ -510,7 +510,7 @@ static int __init intel_menlow_module_init(void) ...@@ -510,7 +510,7 @@ static int __init intel_menlow_module_init(void)
/* Looking for sensors in each ACPI thermal zone */ /* Looking for sensors in each ACPI thermal zone */
status = acpi_walk_namespace(ACPI_TYPE_THERMAL, ACPI_ROOT_OBJECT, status = acpi_walk_namespace(ACPI_TYPE_THERMAL, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, ACPI_UINT32_MAX,
intel_menlow_register_sensor, NULL, NULL); intel_menlow_register_sensor, NULL, NULL, NULL);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
return -ENODEV; return -ENODEV;
......
...@@ -1203,7 +1203,7 @@ static int sony_nc_add(struct acpi_device *device) ...@@ -1203,7 +1203,7 @@ static int sony_nc_add(struct acpi_device *device)
if (debug) { if (debug) {
status = acpi_walk_namespace(ACPI_TYPE_METHOD, sony_nc_acpi_handle, status = acpi_walk_namespace(ACPI_TYPE_METHOD, sony_nc_acpi_handle,
1, sony_walk_callback, NULL, NULL); 1, sony_walk_callback, NULL, NULL, NULL);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
printk(KERN_WARNING DRV_PFX "unable to walk acpi resources\n"); printk(KERN_WARNING DRV_PFX "unable to walk acpi resources\n");
result = -ENODEV; result = -ENODEV;
......
...@@ -1087,7 +1087,7 @@ static int __init tpacpi_check_std_acpi_brightness_support(void) ...@@ -1087,7 +1087,7 @@ static int __init tpacpi_check_std_acpi_brightness_support(void)
*/ */
status = acpi_walk_namespace(ACPI_TYPE_METHOD, vid_handle, 3, status = acpi_walk_namespace(ACPI_TYPE_METHOD, vid_handle, 3,
tpacpi_acpi_walk_find_bcl, NULL, tpacpi_acpi_walk_find_bcl, NULL, NULL,
&bcl_ptr); &bcl_ptr);
if (ACPI_SUCCESS(status) && bcl_levels > 2) { if (ACPI_SUCCESS(status) && bcl_levels > 2) {
......
...@@ -154,7 +154,8 @@ acpi_status ...@@ -154,7 +154,8 @@ acpi_status
acpi_walk_namespace(acpi_object_type type, acpi_walk_namespace(acpi_object_type type,
acpi_handle start_object, acpi_handle start_object,
u32 max_depth, u32 max_depth,
acpi_walk_callback user_function, acpi_walk_callback pre_order_visit,
acpi_walk_callback post_order_visit,
void *context, void **return_value); void *context, void **return_value);
acpi_status acpi_status
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment