aboutsummaryrefslogblamecommitdiffstats
path: root/include/acpi/acinterp.h
blob: 5c7172477a0f5d356ef9ce86bbf991e4c391b392 (plain) (tree)
















































                                                                                        

                               





























                                                         


                                                             





                                                      
































                                                                 
 
  
                                
   
           


                                                       
           


                                                       
           



                                                                
 
 

                                 





                                                      








































































                                                             

















                                                       

















                                                     
  
                                               
   










                                                           
 

                                      








































                                                   
                                           
   



















                                                     
                                            
   
















                                                     











                                                     
   


                                                     
 

                                                       




                                                     









                                                       


                                                     


                                     
           
                                               





                                                     













                                                         
                         







                                                
                               
 
  
                                   
   





                                                          


                                 





                                                     







                                                             
 
  
                                  
   













                                                          
                                          
   








                                                      


                       


















                                                      
 

                                          


















                                                   












                                                     








































































                                                         
/******************************************************************************
 *
 * Name: acinterp.h - Interpreter subcomponent prototypes and defines
 *
 *****************************************************************************/

/*
 * 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 __ACINTERP_H__
#define __ACINTERP_H__


#define ACPI_WALK_OPERANDS       (&(walk_state->operands [walk_state->num_operands -1]))


/*
 * exconvrt - object conversion
 */
acpi_status
acpi_ex_convert_to_integer (
	union acpi_operand_object       *obj_desc,
	union acpi_operand_object       **result_desc,
	u32                             flags);

acpi_status
acpi_ex_convert_to_buffer (
	union acpi_operand_object       *obj_desc,
	union acpi_operand_object       **result_desc);

acpi_status
acpi_ex_convert_to_string (
	union acpi_operand_object       *obj_desc,
	union acpi_operand_object       **result_desc,
	u32                             type);

/* Types for ->String conversion */

#define ACPI_EXPLICIT_BYTE_COPY         0x00000000
#define ACPI_EXPLICIT_CONVERT_HEX       0x00000001
#define ACPI_IMPLICIT_CONVERT_HEX       0x00000002
#define ACPI_EXPLICIT_CONVERT_DECIMAL   0x00000003

acpi_status
acpi_ex_convert_to_target_type (
	acpi_object_type                destination_type,
	union acpi_operand_object       *source_desc,
	union acpi_operand_object       **result_desc,
	struct acpi_walk_state          *walk_state);


/*
 * exfield - ACPI AML (p-code) execution - field manipulation
 */
acpi_status
acpi_ex_common_buffer_setup (
	union acpi_operand_object       *obj_desc,
	u32                             buffer_length,
	u32                             *datum_count);

acpi_status
acpi_ex_write_with_update_rule (
	union acpi_operand_object       *obj_desc,
	acpi_integer                    mask,
	acpi_integer                    field_value,
	u32                             field_datum_byte_offset);

void
acpi_ex_get_buffer_datum(
	acpi_integer                    *datum,
	void                            *buffer,
	u32                             buffer_length,
	u32                             byte_granularity,
	u32                             buffer_offset);

void
acpi_ex_set_buffer_datum (
	acpi_integer                    merged_datum,
	void                            *buffer,
	u32                             buffer_length,
	u32                             byte_granularity,
	u32                             buffer_offset);

acpi_status
acpi_ex_read_data_from_field (
	struct acpi_walk_state          *walk_state,
	union acpi_operand_object       *obj_desc,
	union acpi_operand_object       **ret_buffer_desc);

acpi_status
acpi_ex_write_data_to_field (
	union acpi_operand_object       *source_desc,
	union acpi_operand_object       *obj_desc,
	union acpi_operand_object       **result_desc);


/*
 * exfldio - low level field I/O
 */
acpi_status
acpi_ex_extract_from_field (
	union acpi_operand_object       *obj_desc,
	void                            *buffer,
	u32                             buffer_length);

acpi_status
acpi_ex_insert_into_field (
	union acpi_operand_object       *obj_desc,
	void                            *buffer,
	u32                             buffer_length);

acpi_status
acpi_ex_access_region (
	union acpi_operand_object       *obj_desc,
	u32                             field_datum_byte_offset,
	acpi_integer                    *value,
	u32                             read_write);


/*
 * exmisc - misc support routines
 */
acpi_status
acpi_ex_get_object_reference (
	union acpi_operand_object       *obj_desc,
	union acpi_operand_object       **return_desc,
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_concat_template (
	union acpi_operand_object       *obj_desc,
	union acpi_operand_object       *obj_desc2,
	union acpi_operand_object       **actual_return_desc,
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_do_concatenate (
	union acpi_operand_object       *obj_desc,
	union acpi_operand_object       *obj_desc2,
	union acpi_operand_object       **actual_return_desc,
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_do_logical_numeric_op (
	u16                             opcode,
	acpi_integer                    integer0,
	acpi_integer                    integer1,
	u8                              *logical_result);

acpi_status
acpi_ex_do_logical_op (
	u16                             opcode,
	union acpi_operand_object       *operand0,
	union acpi_operand_object       *operand1,
	u8                              *logical_result);

acpi_integer
acpi_ex_do_math_op (
	u16                             opcode,
	acpi_integer                    operand0,
	acpi_integer                    operand1);

acpi_status
acpi_ex_create_mutex (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_create_processor (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_create_power_resource (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_create_region (
	u8                              *aml_start,
	u32                             aml_length,
	u8                              region_space,
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_create_table_region (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_create_event (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_create_alias (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_create_method (
	u8                              *aml_start,
	u32                             aml_length,
	struct acpi_walk_state          *walk_state);


/*
 * exconfig - dynamic table load/unload
 */
acpi_status
acpi_ex_load_op (
	union acpi_operand_object       *obj_desc,
	union acpi_operand_object       *target,
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_load_table_op (
	struct acpi_walk_state          *walk_state,
	union acpi_operand_object       **return_desc);

acpi_status
acpi_ex_unload_table (
	union acpi_operand_object       *ddb_handle);


/*
 * exmutex - mutex support
 */
acpi_status
acpi_ex_acquire_mutex (
	union acpi_operand_object       *time_desc,
	union acpi_operand_object       *obj_desc,
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_release_mutex (
	union acpi_operand_object       *obj_desc,
	struct acpi_walk_state          *walk_state);

void
acpi_ex_release_all_mutexes (
	struct acpi_thread_state        *thread);

void
acpi_ex_unlink_mutex (
	union acpi_operand_object       *obj_desc);


/*
 * exprep - ACPI AML execution - prep utilities
 */
acpi_status
acpi_ex_prep_common_field_object (
	union acpi_operand_object       *obj_desc,
	u8                              field_flags,
	u8                              field_attribute,
	u32                             field_bit_position,
	u32                             field_bit_length);

acpi_status
acpi_ex_prep_field_value (
	struct acpi_create_field_info   *info);


/*
 * exsystem - Interface to OS services
 */
acpi_status
acpi_ex_system_do_notify_op (
	union acpi_operand_object       *value,
	union acpi_operand_object       *obj_desc);

acpi_status
acpi_ex_system_do_suspend(
	acpi_integer                    time);

acpi_status
acpi_ex_system_do_stall (
	u32                             time);

acpi_status
acpi_ex_system_acquire_mutex(
	union acpi_operand_object       *time,
	union acpi_operand_object       *obj_desc);

acpi_status
acpi_ex_system_release_mutex(
	union acpi_operand_object       *obj_desc);

acpi_status
acpi_ex_system_signal_event(
	union acpi_operand_object       *obj_desc);

acpi_status
acpi_ex_system_wait_event(
	union acpi_operand_object       *time,
	union acpi_operand_object       *obj_desc);

acpi_status
acpi_ex_system_reset_event(
	union acpi_operand_object       *obj_desc);

acpi_status
acpi_ex_system_wait_semaphore (
	acpi_handle                     semaphore,
	u16                             timeout);


/*
 * exoparg1 - ACPI AML execution, 1 operand
 */
acpi_status
acpi_ex_opcode_0A_0T_1R (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_opcode_1A_0T_0R (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_opcode_1A_0T_1R (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_opcode_1A_1T_1R (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_opcode_1A_1T_0R (
	struct acpi_walk_state          *walk_state);

/*
 * exoparg2 - ACPI AML execution, 2 operands
 */
acpi_status
acpi_ex_opcode_2A_0T_0R (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_opcode_2A_0T_1R (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_opcode_2A_1T_1R (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_opcode_2A_2T_1R (
	struct acpi_walk_state          *walk_state);


/*
 * exoparg3 - ACPI AML execution, 3 operands
 */
acpi_status
acpi_ex_opcode_3A_0T_0R (
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_opcode_3A_1T_1R (
	struct acpi_walk_state          *walk_state);


/*
 * exoparg6 - ACPI AML execution, 6 operands
 */
acpi_status
acpi_ex_opcode_6A_0T_1R (
	struct acpi_walk_state          *walk_state);


/*
 * exresolv - Object resolution and get value functions
 */
acpi_status
acpi_ex_resolve_to_value (
	union acpi_operand_object       **stack_ptr,
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_resolve_multiple (
	struct acpi_walk_state          *walk_state,
	union acpi_operand_object       *operand,
	acpi_object_type                *return_type,
	union acpi_operand_object       **return_desc);


/*
 * exresnte - resolve namespace node
 */
acpi_status
acpi_ex_resolve_node_to_value (
	struct acpi_namespace_node      **stack_ptr,
	struct acpi_walk_state          *walk_state);


/*
 * exresop - resolve operand to value
 */
acpi_status
acpi_ex_resolve_operands (
	u16                             opcode,
	union acpi_operand_object       **stack_ptr,
	struct acpi_walk_state          *walk_state);


/*
 * exdump - Interpreter debug output routines
 */
void
acpi_ex_dump_operand (
	union acpi_operand_object       *obj_desc,
	u32                             depth);

void
acpi_ex_dump_operands (
	union acpi_operand_object       **operands,
	acpi_interpreter_mode           interpreter_mode,
	char                            *ident,
	u32                             num_levels,
	char                            *note,
	char                            *module_name,
	u32                             line_number);

#ifdef	ACPI_FUTURE_USAGE
void
acpi_ex_dump_object_descriptor (
	union acpi_operand_object       *object,
	u32                             flags);

void
acpi_ex_dump_node (
	struct acpi_namespace_node      *node,
	u32                             flags);
#endif	/* ACPI_FUTURE_USAGE */


/*
 * exnames - AML namestring support
 */
acpi_status
acpi_ex_get_name_string (
	acpi_object_type                data_type,
	u8                              *in_aml_address,
	char                            **out_name_string,
	u32                             *out_name_length);


/*
 * exstore - Object store support
 */
acpi_status
acpi_ex_store (
	union acpi_operand_object       *val_desc,
	union acpi_operand_object       *dest_desc,
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_store_object_to_node (
	union acpi_operand_object       *source_desc,
	struct acpi_namespace_node      *node,
	struct acpi_walk_state          *walk_state,
	u8                              implicit_conversion);

#define ACPI_IMPLICIT_CONVERSION        TRUE
#define ACPI_NO_IMPLICIT_CONVERSION     FALSE


/*
 * exstoren - resolve/store object
 */
acpi_status
acpi_ex_resolve_object (
	union acpi_operand_object       **source_desc_ptr,
	acpi_object_type                target_type,
	struct acpi_walk_state          *walk_state);

acpi_status
acpi_ex_store_object_to_object (
	union acpi_operand_object       *source_desc,
	union acpi_operand_object       *dest_desc,
	union acpi_operand_object       **new_desc,
	struct acpi_walk_state          *walk_state);


/*
 * exstorob - store object - buffer/string
 */
acpi_status
acpi_ex_store_buffer_to_buffer (
	union acpi_operand_object       *source_desc,
	union acpi_operand_object       *target_desc);

acpi_status
acpi_ex_store_string_to_string (
	union acpi_operand_object       *source_desc,
	union acpi_operand_object       *target_desc);


/*
 * excopy - object copy
 */
acpi_status
acpi_ex_copy_integer_to_index_field (
	union acpi_operand_object       *source_desc,
	union acpi_operand_object       *target_desc);

acpi_status
acpi_ex_copy_integer_to_bank_field (
	union acpi_operand_object       *source_desc,
	union acpi_operand_object       *target_desc);

acpi_status
acpi_ex_copy_data_to_named_field (
	union acpi_operand_object       *source_desc,
	struct acpi_namespace_node      *node);

acpi_status
acpi_ex_copy_integer_to_buffer_field (
	union acpi_operand_object       *source_desc,
	union acpi_operand_object       *target_desc);


/*
 * exutils - interpreter/scanner utilities
 */
acpi_status
acpi_ex_enter_interpreter (
	void);

void
acpi_ex_exit_interpreter (
	void);

void
acpi_ex_truncate_for32bit_table (
	union acpi_operand_object       *obj_desc);

u8
acpi_ex_acquire_global_lock (
	u32                             rule);

void
acpi_ex_release_global_lock (
	u8                              locked);

void
acpi_ex_eisa_id_to_string (
	u32                             numeric_id,
	char                            *out_string);

void
acpi_ex_unsigned_integer_to_string (
	acpi_integer                    value,
	char                            *out_string);


/*
 * exregion - default op_region handlers
 */
acpi_status
acpi_ex_system_memory_space_handler (
	u32                             function,
	acpi_physical_address           address,
	u32                             bit_width,
	acpi_integer                    *value,
	void                            *handler_context,
	void                            *region_context);

acpi_status
acpi_ex_system_io_space_handler (
	u32                             function,
	acpi_physical_address           address,
	u32                             bit_width,
	acpi_integer                    *value,
	void                            *handler_context,
	void                            *region_context);

acpi_status
acpi_ex_pci_config_space_handler (
	u32                             function,
	acpi_physical_address           address,
	u32                             bit_width,
	acpi_integer                    *value,
	void                            *handler_context,
	void                            *region_context);

acpi_status
acpi_ex_cmos_space_handler (
	u32                             function,
	acpi_physical_address           address,
	u32                             bit_width,
	acpi_integer                    *value,
	void                            *handler_context,
	void                            *region_context);

acpi_status
acpi_ex_pci_bar_space_handler (
	u32                             function,
	acpi_physical_address           address,
	u32                             bit_width,
	acpi_integer                    *value,
	void                            *handler_context,
	void                            *region_context);

acpi_status
acpi_ex_embedded_controller_space_handler (
	u32                             function,
	acpi_physical_address           address,
	u32                             bit_width,
	acpi_integer                    *value,
	void                            *handler_context,
	void                            *region_context);

acpi_status
acpi_ex_sm_bus_space_handler (
	u32                             function,
	acpi_physical_address           address,
	u32                             bit_width,
	acpi_integer                    *value,
	void                            *handler_context,
	void                            *region_context);


acpi_status
acpi_ex_data_table_space_handler (
	u32                             function,
	acpi_physical_address           address,
	u32                             bit_width,
	acpi_integer                    *value,
	void                            *handler_context,
	void                            *region_context);

#endif /* __INTERP_H__ */