/******************************************************************************* * * FUNCTION: acpi_ps_execute_method * * PARAMETERS: info - Method info block, contains: * node - Method Node to execute * obj_desc - Method object * parameters - List of parameters to pass to the method, * terminated by NULL. Params itself may be * NULL if no parameters are being passed. * return_object - Where to put method's return value (if * any). If NULL, no value is returned. * parameter_type - Type of Parameter list * return_object - Where to put method's return value (if * any). If NULL, no value is returned. * pass_number - Parse or execute pass * * RETURN: Status * * DESCRIPTION: Execute a control method *
******************************************************************************/
/* * Start method evaluation with an implicit return of zero. * This is done for Windows compatibility.
*/ if (acpi_gbl_enable_interpreter_slack) {
walk_state->implicit_return_obj =
acpi_ut_create_integer_object((u64) 0); if (!walk_state->implicit_return_obj) {
status = AE_NO_MEMORY;
acpi_ds_delete_walk_state(walk_state); goto cleanup;
}
}
/* Parse the AML */
status = acpi_ps_parse_aml(walk_state);
/* walk_state was deleted by parse_aml */
cleanup:
acpi_ps_delete_parse_tree(op);
/* Take away the extra reference that we gave the parameters above */
if (ACPI_FAILURE(status)) {
return_ACPI_STATUS(status);
}
/* * If the method has returned an object, signal this to the caller with * a control exception code
*/ if (info->return_object) {
ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "Method returned ObjDesc=%p\n",
info->return_object));
ACPI_DUMP_STACK_ENTRY(info->return_object);
status = AE_CTRL_RETURN_VALUE;
}
return_ACPI_STATUS(status);
}
/******************************************************************************* * * FUNCTION: acpi_ps_execute_table * * PARAMETERS: info - Method info block, contains: * node - Node to where the is entered into the * namespace * obj_desc - Pseudo method object describing the AML * code of the entire table * pass_number - Parse or execute pass * * RETURN: Status * * DESCRIPTION: Execute a table *
******************************************************************************/
if (info->obj_desc->method.info_flags & ACPI_METHOD_MODULE_LEVEL) {
walk_state->parse_flags |= ACPI_PARSE_MODULE_LEVEL;
}
/* Info->Node is the default location to load the table */
if (info->node && info->node != acpi_gbl_root_node) {
status =
acpi_ds_scope_stack_push(info->node, ACPI_TYPE_METHOD,
walk_state); if (ACPI_FAILURE(status)) { goto cleanup;
}
}
/* * Parse the AML, walk_state will be deleted by parse_aml
*/
acpi_ex_enter_interpreter();
status = acpi_ps_parse_aml(walk_state);
acpi_ex_exit_interpreter();
walk_state = NULL;
cleanup: if (walk_state) {
acpi_ds_delete_walk_state(walk_state);
} if (op) {
acpi_ps_delete_parse_tree(op);
}
return_ACPI_STATUS(status);
}
/******************************************************************************* * * FUNCTION: acpi_ps_update_parameter_list * * PARAMETERS: info - See struct acpi_evaluate_info * (Used: parameter_type and Parameters) * action - Add or Remove reference * * RETURN: Status * * DESCRIPTION: Update reference count on all method parameter objects *
******************************************************************************/
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.