2005-04-17 02:20:36 +04:00
/******************************************************************************
*
* 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"
2005-04-19 06:49:35 +04:00
/*
* dsopcode - support for late evaluation
*/
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_get_buffer_field_arguments ( union acpi_operand_object * obj_desc ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_get_region_arguments ( union acpi_operand_object * rgn_desc ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_get_buffer_arguments ( union acpi_operand_object * obj_desc ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_get_package_arguments ( union acpi_operand_object * obj_desc ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_eval_buffer_field_operands ( struct acpi_walk_state * walk_state ,
union acpi_parse_object * op ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_eval_region_operands ( struct acpi_walk_state * walk_state ,
union acpi_parse_object * op ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_eval_data_object_operands ( struct acpi_walk_state * walk_state ,
union acpi_parse_object * op ,
union acpi_operand_object * obj_desc ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_initialize_region ( acpi_handle obj_handle ) ;
2005-04-17 02:20:36 +04:00
2005-04-19 06:49:35 +04:00
/*
* dsctrl - Parser / Interpreter interface , control stack routines
*/
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_exec_begin_control_op ( struct acpi_walk_state * walk_state ,
union acpi_parse_object * op ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_exec_end_control_op ( struct acpi_walk_state * walk_state ,
union acpi_parse_object * op ) ;
2005-04-17 02:20:36 +04:00
2005-04-19 06:49:35 +04:00
/*
* dsexec - Parser / Interpreter interface , method execution callbacks
*/
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_get_predicate_value ( struct acpi_walk_state * walk_state ,
union acpi_operand_object * result_obj ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_exec_begin_op ( struct acpi_walk_state * walk_state ,
union acpi_parse_object * * out_op ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_exec_end_op ( struct acpi_walk_state * state ) ;
2005-04-17 02:20:36 +04:00
2005-04-19 06:49:35 +04:00
/*
* dsfield - Parser / Interpreter interface for AML fields
*/
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_create_field ( union acpi_parse_object * op ,
struct acpi_namespace_node * region_node ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_create_bank_field ( union acpi_parse_object * op ,
struct acpi_namespace_node * region_node ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_create_index_field ( union acpi_parse_object * op ,
struct acpi_namespace_node * region_node ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_create_buffer_field ( union acpi_parse_object * op ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_init_field_objects ( union acpi_parse_object * op ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-04-19 06:49:35 +04:00
/*
* dsload - Parser / Interpreter interface , namespace load callbacks
*/
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_load1_begin_op ( struct acpi_walk_state * walk_state ,
union acpi_parse_object * * out_op ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_load1_end_op ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_load2_begin_op ( struct acpi_walk_state * walk_state ,
union acpi_parse_object * * out_op ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_load2_end_op ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_init_callbacks ( struct acpi_walk_state * walk_state , u32 pass_number ) ;
2005-04-17 02:20:36 +04:00
2005-04-19 06:49:35 +04:00
/*
* dsmthdat - method data ( locals / args )
*/
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_store_object_to_local ( u16 opcode ,
u32 index ,
union acpi_operand_object * src_desc ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_method_data_get_entry ( u16 opcode ,
u32 index ,
struct acpi_walk_state * walk_state ,
union acpi_operand_object * * * node ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
void acpi_ds_method_data_delete_all ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
u8 acpi_ds_is_method_value ( union acpi_operand_object * obj_desc ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_method_data_get_value ( u16 opcode ,
u32 index ,
struct acpi_walk_state * walk_state ,
union acpi_operand_object * * dest_desc ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_method_data_init_args ( union acpi_operand_object * * params ,
u32 max_param_count ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_method_data_get_node ( u16 opcode ,
u32 index ,
struct acpi_walk_state * walk_state ,
struct acpi_namespace_node * * node ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
void acpi_ds_method_data_init ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-04-19 06:49:35 +04:00
/*
* dsmethod - Parser / Interpreter interface - control method parsing
*/
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_parse_method ( struct acpi_namespace_node * node ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_call_control_method ( struct acpi_thread_state * thread ,
struct acpi_walk_state * walk_state ,
union acpi_parse_object * op ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_restart_control_method ( struct acpi_walk_state * walk_state ,
union acpi_operand_object * return_desc ) ;
2005-04-17 02:20:36 +04:00
2005-09-03 01:24:17 +04:00
void acpi_ds_terminate_control_method ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_begin_method_execution ( struct acpi_namespace_node * method_node ,
union acpi_operand_object * obj_desc ,
struct acpi_namespace_node * calling_method_node ) ;
2005-04-17 02:20:36 +04:00
2005-04-19 06:49:35 +04:00
/*
* dsinit
*/
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_initialize_objects ( struct acpi_table_desc * table_desc ,
struct acpi_namespace_node * start_node ) ;
2005-04-19 06:49:35 +04:00
/*
* dsobject - Parser / Interpreter interface - object initialization and conversion
*/
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
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 ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
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 ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
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 ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_create_node ( struct acpi_walk_state * walk_state ,
struct acpi_namespace_node * node ,
union acpi_parse_object * op ) ;
2005-04-17 02:20:36 +04:00
2005-04-19 06:49:35 +04:00
/*
* dsutils - Parser / Interpreter interface utility routines
*/
2005-08-05 08:44:28 +04:00
void acpi_ds_clear_implicit_return ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
u8
2005-08-05 08:44:28 +04:00
acpi_ds_do_implicit_return ( union acpi_operand_object * return_desc ,
struct acpi_walk_state * walk_state ,
u8 add_reference ) ;
2005-04-17 02:20:36 +04:00
u8
2005-08-05 08:44:28 +04:00
acpi_ds_is_result_used ( union acpi_parse_object * op ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
void
2005-08-05 08:44:28 +04:00
acpi_ds_delete_result_if_not_used ( union acpi_parse_object * op ,
union acpi_operand_object * result_obj ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_create_operand ( struct acpi_walk_state * walk_state ,
union acpi_parse_object * arg , u32 args_remaining ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_create_operands ( struct acpi_walk_state * walk_state ,
union acpi_parse_object * first_arg ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_resolve_operands ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
void acpi_ds_clear_operands ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
/*
* dswscope - Scope Stack manipulation
*/
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_scope_stack_push ( struct acpi_namespace_node * node ,
acpi_object_type type ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_scope_stack_pop ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
void acpi_ds_scope_stack_clear ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-04-19 06:49:35 +04:00
/*
* dswstate - parser WALK_STATE management routines
*/
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_obj_stack_push ( void * object , struct acpi_walk_state * walk_state ) ;
2005-04-19 06:49:35 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_obj_stack_pop ( u32 pop_count , struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
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 ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
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 , u8 pass_number ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_obj_stack_pop_and_delete ( u32 pop_count ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
void acpi_ds_delete_walk_state ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
struct acpi_walk_state * acpi_ds_pop_walk_state ( struct acpi_thread_state
* thread ) ;
2005-04-17 02:20:36 +04:00
void
2005-08-05 08:44:28 +04:00
acpi_ds_push_walk_state ( struct acpi_walk_state * walk_state ,
struct acpi_thread_state * thread ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_result_stack_pop ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_result_stack_push ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
acpi_status acpi_ds_result_stack_clear ( struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
struct acpi_walk_state * acpi_ds_get_current_walk_state ( struct acpi_thread_state
* thread ) ;
2005-04-17 02:20:36 +04:00
# ifdef ACPI_FUTURE_USAGE
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_result_remove ( union acpi_operand_object * * object ,
u32 index , struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
# endif
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_result_pop ( union acpi_operand_object * * object ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_result_push ( union acpi_operand_object * object ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
acpi_status
2005-08-05 08:44:28 +04:00
acpi_ds_result_pop_from_bottom ( union acpi_operand_object * * object ,
struct acpi_walk_state * walk_state ) ;
2005-04-17 02:20:36 +04:00
2005-08-05 08:44:28 +04:00
# endif /* _ACDISPAT_H_ */