acpi_status
acpi_ns_evaluate_relative (
- struct acpi_namespace_node *handle,
char *pathname,
- union acpi_operand_object **params,
- union acpi_operand_object **return_object)
+ struct acpi_parameter_info *info)
{
acpi_status status;
- struct acpi_namespace_node *prefix_node;
struct acpi_namespace_node *node = NULL;
union acpi_generic_state *scope_info;
char *internal_path = NULL;
/*
* Must have a valid object handle
*/
- if (!handle) {
+ if (!info || !info->node) {
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
goto cleanup;
}
- prefix_node = acpi_ns_map_handle_to_node (handle);
- if (!prefix_node) {
+ info->node = acpi_ns_map_handle_to_node (info->node);
+ if (!info->node) {
(void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
status = AE_BAD_PARAMETER;
goto cleanup;
/* Lookup the name in the namespace */
- scope_info->scope.node = prefix_node;
+ scope_info->scope.node = info->node;
status = acpi_ns_lookup (scope_info, internal_path, ACPI_TYPE_ANY,
ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH, NULL,
&node);
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n",
pathname, node, acpi_ns_get_attached_object (node)));
- status = acpi_ns_evaluate_by_handle (node, params, return_object);
+ info->node = node;
+ status = acpi_ns_evaluate_by_handle (info);
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "*** Completed eval of object %s ***\n",
pathname));
* FUNCTION: acpi_ns_evaluate_by_name
*
* PARAMETERS: Pathname - Fully qualified pathname to the object
+ * Info - Contains:
* return_object - Where to put method's return value (if
* any). If NULL, no value is returned.
* Params - List of parameters to pass to the method,
acpi_status
acpi_ns_evaluate_by_name (
char *pathname,
- union acpi_operand_object **params,
- union acpi_operand_object **return_object)
+ struct acpi_parameter_info *info)
{
acpi_status status;
- struct acpi_namespace_node *node = NULL;
char *internal_path = NULL;
status = acpi_ns_lookup (NULL, internal_path, ACPI_TYPE_ANY,
ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH, NULL,
- &node);
+ &info->node);
(void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
* to evaluate it.
*/
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n",
- pathname, node, acpi_ns_get_attached_object (node)));
+ pathname, info->node, acpi_ns_get_attached_object (info->node)));
- status = acpi_ns_evaluate_by_handle (node, params, return_object);
+ status = acpi_ns_evaluate_by_handle (info);
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "*** Completed eval of object %s ***\n",
pathname));
* Params - List of parameters to pass to the method,
* terminated by NULL. Params itself may be
* NULL if no parameters are being passed.
+ * param_type - Type of Parameter list
* return_object - Where to put method's return value (if
* any). If NULL, no value is returned.
*
acpi_status
acpi_ns_evaluate_by_handle (
- struct acpi_namespace_node *handle,
- union acpi_operand_object **params,
- union acpi_operand_object **return_object)
+ struct acpi_parameter_info *info)
{
- struct acpi_namespace_node *node;
acpi_status status;
- union acpi_operand_object *local_return_object;
ACPI_FUNCTION_TRACE ("ns_evaluate_by_handle");
/* Parameter Validation */
- if (!handle) {
+ if (!info) {
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
- if (return_object) {
- /* Initialize the return value to an invalid object */
+ /* Initialize the return value to an invalid object */
- *return_object = NULL;
- }
+ info->return_object = NULL;
/* Get the prefix handle and Node */
return_ACPI_STATUS (status);
}
- node = acpi_ns_map_handle_to_node (handle);
- if (!node) {
+ info->node = acpi_ns_map_handle_to_node (info->node);
+ if (!info->node) {
(void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
* so that proper scoping context will be established
* before execution.
*/
- if (acpi_ns_get_type (node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) {
- node = ACPI_CAST_PTR (struct acpi_namespace_node, node->object);
+ if (acpi_ns_get_type (info->node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) {
+ info->node = ACPI_CAST_PTR (struct acpi_namespace_node, info->node->object);
}
/*
* In both cases, the namespace is unlocked by the
* acpi_ns* procedure
*/
- if (acpi_ns_get_type (node) == ACPI_TYPE_METHOD) {
+ if (acpi_ns_get_type (info->node) == ACPI_TYPE_METHOD) {
/*
* Case 1) We have an actual control method to execute
*/
- status = acpi_ns_execute_control_method (node, params,
- &local_return_object);
+ status = acpi_ns_execute_control_method (info);
}
else {
/*
* Case 2) Object is NOT a method, just return its
* current value
*/
- status = acpi_ns_get_object_value (node, &local_return_object);
+ status = acpi_ns_get_object_value (info);
}
/*
* be dealt with
*/
if (status == AE_CTRL_RETURN_VALUE) {
- /*
- * If the Method returned a value and the caller
- * provided a place to store a returned value, Copy
- * the returned value to the object descriptor provided
- * by the caller.
- */
- if (return_object) {
- /*
- * Valid return object, copy the pointer to
- * the returned object
- */
- *return_object = local_return_object;
- }
-
/* Map AE_CTRL_RETURN_VALUE to AE_OK, we are done with it */
status = AE_OK;
acpi_status
acpi_ns_execute_control_method (
- struct acpi_namespace_node *method_node,
- union acpi_operand_object **params,
- union acpi_operand_object **return_obj_desc)
+ struct acpi_parameter_info *info)
{
acpi_status status;
union acpi_operand_object *obj_desc;
/* Verify that there is a method associated with this object */
- obj_desc = acpi_ns_get_attached_object (method_node);
+ obj_desc = acpi_ns_get_attached_object (info->node);
if (!obj_desc) {
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No attached method object\n"));
return_ACPI_STATUS (AE_NULL_OBJECT);
}
- ACPI_DUMP_PATHNAME (method_node, "Execute Method:",
+ ACPI_DUMP_PATHNAME (info->node, "Execute Method:",
ACPI_LV_INFO, _COMPONENT);
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Method at AML address %p Length %X\n",
return_ACPI_STATUS (status);
}
- status = acpi_psx_execute (method_node, params, return_obj_desc);
+ status = acpi_psx_execute (info);
acpi_ex_exit_interpreter ();
return_ACPI_STATUS (status);
acpi_status
acpi_ns_get_object_value (
- struct acpi_namespace_node *node,
- union acpi_operand_object **return_obj_desc)
+ struct acpi_parameter_info *info)
{
acpi_status status = AE_OK;
- struct acpi_namespace_node *resolved_node = node;
+ struct acpi_namespace_node *resolved_node = info->node;
ACPI_FUNCTION_TRACE ("ns_get_object_value");
if (ACPI_SUCCESS (status)) {
status = AE_CTRL_RETURN_VALUE;
- *return_obj_desc = ACPI_CAST_PTR (union acpi_operand_object, resolved_node);
+ info->return_object = ACPI_CAST_PTR (union acpi_operand_object, resolved_node);
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Returning object %p [%s]\n",
- *return_obj_desc, acpi_ut_get_object_type_name (*return_obj_desc)));
+ info->return_object, acpi_ut_get_object_type_name (info->return_object)));
}
}