533 lines
14 KiB
C
533 lines
14 KiB
C
|
/******************************************************************************
|
||
|
*
|
||
|
* Name: acdispat.h - dispatcher (parser to interpreter interface)
|
||
|
*
|
||
|
*****************************************************************************/
|
||
|
|
||
|
/*
|
||
|
* Copyright (C) 2000 - 2005, R. Byron Moore
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions
|
||
|
* are met:
|
||
|
* 1. Redistributions of source code must retain the above copyright
|
||
|
* notice, this list of conditions, and the following disclaimer,
|
||
|
* without modification.
|
||
|
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
||
|
* substantially similar to the "NO WARRANTY" disclaimer below
|
||
|
* ("Disclaimer") and any redistribution must be conditioned upon
|
||
|
* including a substantially similar Disclaimer requirement for further
|
||
|
* binary redistribution.
|
||
|
* 3. Neither the names of the above-listed copyright holders nor the names
|
||
|
* of any contributors may be used to endorse or promote products derived
|
||
|
* from this software without specific prior written permission.
|
||
|
*
|
||
|
* Alternatively, this software may be distributed under the terms of the
|
||
|
* GNU General Public License ("GPL") version 2 as published by the Free
|
||
|
* Software Foundation.
|
||
|
*
|
||
|
* NO WARRANTY
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
|
||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||
|
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
* POSSIBILITY OF SUCH DAMAGES.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef _ACDISPAT_H_
|
||
|
#define _ACDISPAT_H_
|
||
|
|
||
|
|
||
|
#define NAMEOF_LOCAL_NTE "__L0"
|
||
|
#define NAMEOF_ARG_NTE "__A0"
|
||
|
|
||
|
|
||
|
/* Common interfaces */
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_obj_stack_push (
|
||
|
void *object,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_obj_stack_pop (
|
||
|
u32 pop_count,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
#ifdef ACPI_FUTURE_USAGE
|
||
|
void *
|
||
|
acpi_ds_obj_stack_get_value (
|
||
|
u32 index,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
#endif
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_obj_stack_pop_object (
|
||
|
union acpi_operand_object **object,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
|
||
|
/* dsopcode - support for late evaluation */
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_execute_arguments (
|
||
|
struct acpi_namespace_node *node,
|
||
|
struct acpi_namespace_node *scope_node,
|
||
|
u32 aml_length,
|
||
|
u8 *aml_start);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_get_buffer_field_arguments (
|
||
|
union acpi_operand_object *obj_desc);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_get_region_arguments (
|
||
|
union acpi_operand_object *rgn_desc);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_get_buffer_arguments (
|
||
|
union acpi_operand_object *obj_desc);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_get_package_arguments (
|
||
|
union acpi_operand_object *obj_desc);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_init_buffer_field (
|
||
|
u16 aml_opcode,
|
||
|
union acpi_operand_object *obj_desc,
|
||
|
union acpi_operand_object *buffer_desc,
|
||
|
union acpi_operand_object *offset_desc,
|
||
|
union acpi_operand_object *length_desc,
|
||
|
union acpi_operand_object *result_desc);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_eval_buffer_field_operands (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *op);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_eval_region_operands (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *op);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_eval_data_object_operands (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *op,
|
||
|
union acpi_operand_object *obj_desc);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_initialize_region (
|
||
|
acpi_handle obj_handle);
|
||
|
|
||
|
|
||
|
/* dsctrl - Parser/Interpreter interface, control stack routines */
|
||
|
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_exec_begin_control_op (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *op);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_exec_end_control_op (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *op);
|
||
|
|
||
|
|
||
|
/* dsexec - Parser/Interpreter interface, method execution callbacks */
|
||
|
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_get_predicate_value (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_operand_object *result_obj);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_exec_begin_op (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object **out_op);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_exec_end_op (
|
||
|
struct acpi_walk_state *state);
|
||
|
|
||
|
|
||
|
/* dsfield - Parser/Interpreter interface for AML fields */
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_get_field_names (
|
||
|
struct acpi_create_field_info *info,
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *arg);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_create_field (
|
||
|
union acpi_parse_object *op,
|
||
|
struct acpi_namespace_node *region_node,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_create_bank_field (
|
||
|
union acpi_parse_object *op,
|
||
|
struct acpi_namespace_node *region_node,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_create_index_field (
|
||
|
union acpi_parse_object *op,
|
||
|
struct acpi_namespace_node *region_node,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_create_buffer_field (
|
||
|
union acpi_parse_object *op,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_init_field_objects (
|
||
|
union acpi_parse_object *op,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
|
||
|
/* dsload - Parser/Interpreter interface, namespace load callbacks */
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_load1_begin_op (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object **out_op);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_load1_end_op (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_load2_begin_op (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object **out_op);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_load2_end_op (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_init_callbacks (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
u32 pass_number);
|
||
|
|
||
|
|
||
|
/* dsmthdat - method data (locals/args) */
|
||
|
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_store_object_to_local (
|
||
|
u16 opcode,
|
||
|
u32 index,
|
||
|
union acpi_operand_object *src_desc,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_method_data_get_entry (
|
||
|
u16 opcode,
|
||
|
u32 index,
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_operand_object ***node);
|
||
|
|
||
|
void
|
||
|
acpi_ds_method_data_delete_all (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
u8
|
||
|
acpi_ds_is_method_value (
|
||
|
union acpi_operand_object *obj_desc);
|
||
|
|
||
|
#ifdef ACPI_FUTURE_USAGE
|
||
|
acpi_object_type
|
||
|
acpi_ds_method_data_get_type (
|
||
|
u16 opcode,
|
||
|
u32 index,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
#endif
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_method_data_get_value (
|
||
|
u16 opcode,
|
||
|
u32 index,
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_operand_object **dest_desc);
|
||
|
|
||
|
void
|
||
|
acpi_ds_method_data_delete_value (
|
||
|
u16 opcode,
|
||
|
u32 index,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_method_data_init_args (
|
||
|
union acpi_operand_object **params,
|
||
|
u32 max_param_count,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_method_data_get_node (
|
||
|
u16 opcode,
|
||
|
u32 index,
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
struct acpi_namespace_node **node);
|
||
|
|
||
|
void
|
||
|
acpi_ds_method_data_init (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_method_data_set_value (
|
||
|
u16 opcode,
|
||
|
u32 index,
|
||
|
union acpi_operand_object *object,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
|
||
|
/* dsmethod - Parser/Interpreter interface - control method parsing */
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_parse_method (
|
||
|
acpi_handle obj_handle);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_call_control_method (
|
||
|
struct acpi_thread_state *thread,
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *op);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_restart_control_method (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_operand_object *return_desc);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_terminate_control_method (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_begin_method_execution (
|
||
|
struct acpi_namespace_node *method_node,
|
||
|
union acpi_operand_object *obj_desc,
|
||
|
struct acpi_namespace_node *calling_method_node);
|
||
|
|
||
|
|
||
|
/* dsobj - Parser/Interpreter interface - object initialization and conversion */
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_init_one_object (
|
||
|
acpi_handle obj_handle,
|
||
|
u32 level,
|
||
|
void *context,
|
||
|
void **return_value);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_initialize_objects (
|
||
|
struct acpi_table_desc *table_desc,
|
||
|
struct acpi_namespace_node *start_node);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_build_internal_buffer_obj (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *op,
|
||
|
u32 buffer_length,
|
||
|
union acpi_operand_object **obj_desc_ptr);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_build_internal_package_obj (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *op,
|
||
|
u32 package_length,
|
||
|
union acpi_operand_object **obj_desc);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_build_internal_object (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *op,
|
||
|
union acpi_operand_object **obj_desc_ptr);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_init_object_from_op (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *op,
|
||
|
u16 opcode,
|
||
|
union acpi_operand_object **obj_desc);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_create_node (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
struct acpi_namespace_node *node,
|
||
|
union acpi_parse_object *op);
|
||
|
|
||
|
|
||
|
/* dsutils - Parser/Interpreter interface utility routines */
|
||
|
|
||
|
void
|
||
|
acpi_ds_clear_implicit_return (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
u8
|
||
|
acpi_ds_do_implicit_return (
|
||
|
union acpi_operand_object *return_desc,
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
u8 add_reference);
|
||
|
|
||
|
u8
|
||
|
acpi_ds_is_result_used (
|
||
|
union acpi_parse_object *op,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
void
|
||
|
acpi_ds_delete_result_if_not_used (
|
||
|
union acpi_parse_object *op,
|
||
|
union acpi_operand_object *result_obj,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_create_operand (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *arg,
|
||
|
u32 args_remaining);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_create_operands (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *first_arg);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_resolve_operands (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
void
|
||
|
acpi_ds_clear_operands (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* dswscope - Scope Stack manipulation
|
||
|
*/
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_scope_stack_push (
|
||
|
struct acpi_namespace_node *node,
|
||
|
acpi_object_type type,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_scope_stack_pop (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
void
|
||
|
acpi_ds_scope_stack_clear (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
|
||
|
/* dswstate - parser WALK_STATE management routines */
|
||
|
|
||
|
struct acpi_walk_state *
|
||
|
acpi_ds_create_walk_state (
|
||
|
acpi_owner_id owner_id,
|
||
|
union acpi_parse_object *origin,
|
||
|
union acpi_operand_object *mth_desc,
|
||
|
struct acpi_thread_state *thread);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_init_aml_walk (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
union acpi_parse_object *op,
|
||
|
struct acpi_namespace_node *method_node,
|
||
|
u8 *aml_start,
|
||
|
u32 aml_length,
|
||
|
struct acpi_parameter_info *info,
|
||
|
u32 pass_number);
|
||
|
|
||
|
#ifdef ACPI_FUTURE_USAGE
|
||
|
acpi_status
|
||
|
acpi_ds_obj_stack_delete_all (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
#endif
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_obj_stack_pop_and_delete (
|
||
|
u32 pop_count,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
void
|
||
|
acpi_ds_delete_walk_state (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
struct acpi_walk_state *
|
||
|
acpi_ds_pop_walk_state (
|
||
|
struct acpi_thread_state *thread);
|
||
|
|
||
|
void
|
||
|
acpi_ds_push_walk_state (
|
||
|
struct acpi_walk_state *walk_state,
|
||
|
struct acpi_thread_state *thread);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_result_stack_pop (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_result_stack_push (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_result_stack_clear (
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
struct acpi_walk_state *
|
||
|
acpi_ds_get_current_walk_state (
|
||
|
struct acpi_thread_state *thread);
|
||
|
|
||
|
#ifdef ACPI_ENABLE_OBJECT_CACHE
|
||
|
void
|
||
|
acpi_ds_delete_walk_state_cache (
|
||
|
void);
|
||
|
#endif
|
||
|
|
||
|
#ifdef ACPI_FUTURE_USAGE
|
||
|
acpi_status
|
||
|
acpi_ds_result_insert (
|
||
|
void *object,
|
||
|
u32 index,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_result_remove (
|
||
|
union acpi_operand_object **object,
|
||
|
u32 index,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
#endif
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_result_pop (
|
||
|
union acpi_operand_object **object,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_result_push (
|
||
|
union acpi_operand_object *object,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
acpi_status
|
||
|
acpi_ds_result_pop_from_bottom (
|
||
|
union acpi_operand_object **object,
|
||
|
struct acpi_walk_state *walk_state);
|
||
|
|
||
|
#endif /* _ACDISPAT_H_ */
|