1e2f7a777SLen Brown /****************************************************************************** 2e2f7a777SLen Brown * 3e2f7a777SLen Brown * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures 4e2f7a777SLen Brown * 5e2f7a777SLen Brown *****************************************************************************/ 6e2f7a777SLen Brown 7e2f7a777SLen Brown /* 8c8100dc4SBob Moore * Copyright (C) 2000 - 2016, Intel Corp. 9e2f7a777SLen Brown * All rights reserved. 10e2f7a777SLen Brown * 11e2f7a777SLen Brown * Redistribution and use in source and binary forms, with or without 12e2f7a777SLen Brown * modification, are permitted provided that the following conditions 13e2f7a777SLen Brown * are met: 14e2f7a777SLen Brown * 1. Redistributions of source code must retain the above copyright 15e2f7a777SLen Brown * notice, this list of conditions, and the following disclaimer, 16e2f7a777SLen Brown * without modification. 17e2f7a777SLen Brown * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18e2f7a777SLen Brown * substantially similar to the "NO WARRANTY" disclaimer below 19e2f7a777SLen Brown * ("Disclaimer") and any redistribution must be conditioned upon 20e2f7a777SLen Brown * including a substantially similar Disclaimer requirement for further 21e2f7a777SLen Brown * binary redistribution. 22e2f7a777SLen Brown * 3. Neither the names of the above-listed copyright holders nor the names 23e2f7a777SLen Brown * of any contributors may be used to endorse or promote products derived 24e2f7a777SLen Brown * from this software without specific prior written permission. 25e2f7a777SLen Brown * 26e2f7a777SLen Brown * Alternatively, this software may be distributed under the terms of the 27e2f7a777SLen Brown * GNU General Public License ("GPL") version 2 as published by the Free 28e2f7a777SLen Brown * Software Foundation. 29e2f7a777SLen Brown * 30e2f7a777SLen Brown * NO WARRANTY 31e2f7a777SLen Brown * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32e2f7a777SLen Brown * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33e2f7a777SLen Brown * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34e2f7a777SLen Brown * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35e2f7a777SLen Brown * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36e2f7a777SLen Brown * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37e2f7a777SLen Brown * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38e2f7a777SLen Brown * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39e2f7a777SLen Brown * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40e2f7a777SLen Brown * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41e2f7a777SLen Brown * POSSIBILITY OF SUCH DAMAGES. 42e2f7a777SLen Brown */ 43e2f7a777SLen Brown 44e2f7a777SLen Brown #ifndef _ACUTILS_H 45e2f7a777SLen Brown #define _ACUTILS_H 46e2f7a777SLen Brown 47e2f7a777SLen Brown extern const u8 acpi_gbl_resource_aml_sizes[]; 48e0fe0a8dSLin Ming extern const u8 acpi_gbl_resource_aml_serial_bus_sizes[]; 49e2f7a777SLen Brown 50e2f7a777SLen Brown /* Strings used by the disassembler and debugger resource dump routines */ 51e2f7a777SLen Brown 523334861bSLv Zheng #if defined(ACPI_DEBUG_OUTPUT) || defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER) 53e2f7a777SLen Brown 54e2f7a777SLen Brown extern const char *acpi_gbl_bm_decode[]; 55e2f7a777SLen Brown extern const char *acpi_gbl_config_decode[]; 56e2f7a777SLen Brown extern const char *acpi_gbl_consume_decode[]; 57e2f7a777SLen Brown extern const char *acpi_gbl_dec_decode[]; 58e2f7a777SLen Brown extern const char *acpi_gbl_he_decode[]; 59e2f7a777SLen Brown extern const char *acpi_gbl_io_decode[]; 60e2f7a777SLen Brown extern const char *acpi_gbl_ll_decode[]; 61e2f7a777SLen Brown extern const char *acpi_gbl_max_decode[]; 62e2f7a777SLen Brown extern const char *acpi_gbl_mem_decode[]; 63e2f7a777SLen Brown extern const char *acpi_gbl_min_decode[]; 64e2f7a777SLen Brown extern const char *acpi_gbl_mtp_decode[]; 65e2f7a777SLen Brown extern const char *acpi_gbl_rng_decode[]; 66e2f7a777SLen Brown extern const char *acpi_gbl_rw_decode[]; 67e2f7a777SLen Brown extern const char *acpi_gbl_shr_decode[]; 68e2f7a777SLen Brown extern const char *acpi_gbl_siz_decode[]; 69e2f7a777SLen Brown extern const char *acpi_gbl_trs_decode[]; 70e2f7a777SLen Brown extern const char *acpi_gbl_ttp_decode[]; 71e2f7a777SLen Brown extern const char *acpi_gbl_typ_decode[]; 726d33b6beSLv Zheng extern const char *acpi_gbl_ppc_decode[]; 736d33b6beSLv Zheng extern const char *acpi_gbl_ior_decode[]; 746d33b6beSLv Zheng extern const char *acpi_gbl_dts_decode[]; 756d33b6beSLv Zheng extern const char *acpi_gbl_ct_decode[]; 766d33b6beSLv Zheng extern const char *acpi_gbl_sbt_decode[]; 776d33b6beSLv Zheng extern const char *acpi_gbl_am_decode[]; 786d33b6beSLv Zheng extern const char *acpi_gbl_sm_decode[]; 796d33b6beSLv Zheng extern const char *acpi_gbl_wm_decode[]; 806d33b6beSLv Zheng extern const char *acpi_gbl_cph_decode[]; 816d33b6beSLv Zheng extern const char *acpi_gbl_cpo_decode[]; 826d33b6beSLv Zheng extern const char *acpi_gbl_dp_decode[]; 836d33b6beSLv Zheng extern const char *acpi_gbl_ed_decode[]; 846d33b6beSLv Zheng extern const char *acpi_gbl_bpb_decode[]; 856d33b6beSLv Zheng extern const char *acpi_gbl_sb_decode[]; 866d33b6beSLv Zheng extern const char *acpi_gbl_fc_decode[]; 876d33b6beSLv Zheng extern const char *acpi_gbl_pt_decode[]; 88e2f7a777SLen Brown #endif 89e2f7a777SLen Brown 90b6872ff9SBob Moore /* 91b6872ff9SBob Moore * For the iASL compiler case, the output is redirected to stderr so that 92b6872ff9SBob Moore * any of the various ACPI errors and warnings do not appear in the output 93b6872ff9SBob Moore * files, for either the compiler or disassembler portions of the tool. 94b6872ff9SBob Moore */ 95b6872ff9SBob Moore #ifdef ACPI_ASL_COMPILER 96b6872ff9SBob Moore 97b6872ff9SBob Moore #include <stdio.h> 98b6872ff9SBob Moore 99b6872ff9SBob Moore #define ACPI_MSG_REDIRECT_BEGIN \ 100b6872ff9SBob Moore FILE *output_file = acpi_gbl_output_file; \ 101b6872ff9SBob Moore acpi_os_redirect_output (stderr); 102b6872ff9SBob Moore 103b6872ff9SBob Moore #define ACPI_MSG_REDIRECT_END \ 104b6872ff9SBob Moore acpi_os_redirect_output (output_file); 105b6872ff9SBob Moore 106b6872ff9SBob Moore #else 107b6872ff9SBob Moore /* 108b6872ff9SBob Moore * non-iASL case - no redirection, nothing to do 109b6872ff9SBob Moore */ 110b6872ff9SBob Moore #define ACPI_MSG_REDIRECT_BEGIN 111b6872ff9SBob Moore #define ACPI_MSG_REDIRECT_END 112b6872ff9SBob Moore #endif 113b6872ff9SBob Moore 114b6872ff9SBob Moore /* 115b6872ff9SBob Moore * Common error message prefixes 116b6872ff9SBob Moore */ 117*b5c0875aSLv Zheng #ifndef ACPI_MSG_ERROR 118b6872ff9SBob Moore #define ACPI_MSG_ERROR "ACPI Error: " 119*b5c0875aSLv Zheng #endif 120*b5c0875aSLv Zheng #ifndef ACPI_MSG_EXCEPTION 121b6872ff9SBob Moore #define ACPI_MSG_EXCEPTION "ACPI Exception: " 122*b5c0875aSLv Zheng #endif 123*b5c0875aSLv Zheng #ifndef ACPI_MSG_WARNING 124b6872ff9SBob Moore #define ACPI_MSG_WARNING "ACPI Warning: " 125*b5c0875aSLv Zheng #endif 126*b5c0875aSLv Zheng #ifndef ACPI_MSG_INFO 127b6872ff9SBob Moore #define ACPI_MSG_INFO "ACPI: " 128*b5c0875aSLv Zheng #endif 129b6872ff9SBob Moore 130*b5c0875aSLv Zheng #ifndef ACPI_MSG_BIOS_ERROR 131b6872ff9SBob Moore #define ACPI_MSG_BIOS_ERROR "ACPI BIOS Error (bug): " 132*b5c0875aSLv Zheng #endif 133*b5c0875aSLv Zheng #ifndef ACPI_MSG_BIOS_WARNING 134b6872ff9SBob Moore #define ACPI_MSG_BIOS_WARNING "ACPI BIOS Warning (bug): " 135*b5c0875aSLv Zheng #endif 136b6872ff9SBob Moore 137b6872ff9SBob Moore /* 138b6872ff9SBob Moore * Common message suffix 139b6872ff9SBob Moore */ 140b6872ff9SBob Moore #define ACPI_MSG_SUFFIX \ 141b6872ff9SBob Moore acpi_os_printf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, module_name, line_number) 142b6872ff9SBob Moore 143e2f7a777SLen Brown /* Types for Resource descriptor entries */ 144e2f7a777SLen Brown 145e2f7a777SLen Brown #define ACPI_INVALID_RESOURCE 0 146e2f7a777SLen Brown #define ACPI_FIXED_LENGTH 1 147e2f7a777SLen Brown #define ACPI_VARIABLE_LENGTH 2 148e2f7a777SLen Brown #define ACPI_SMALL_VARIABLE_LENGTH 3 149e2f7a777SLen Brown 150e2f7a777SLen Brown typedef 151e2f7a777SLen Brown acpi_status (*acpi_walk_aml_callback) (u8 *aml, 152e2f7a777SLen Brown u32 length, 153e2f7a777SLen Brown u32 offset, 154e2f7a777SLen Brown u8 resource_index, void **context); 155e2f7a777SLen Brown 156e2f7a777SLen Brown typedef 157e2f7a777SLen Brown acpi_status (*acpi_pkg_callback) (u8 object_type, 158e2f7a777SLen Brown union acpi_operand_object * source_object, 159e2f7a777SLen Brown union acpi_generic_state * state, 160e2f7a777SLen Brown void *context); 161e2f7a777SLen Brown 162e2f7a777SLen Brown struct acpi_pkg_info { 163e2f7a777SLen Brown u8 *free_space; 164e2f7a777SLen Brown acpi_size length; 165e2f7a777SLen Brown u32 object_space; 166e2f7a777SLen Brown u32 num_packages; 167e2f7a777SLen Brown }; 168e2f7a777SLen Brown 16960f3deb5SBob Moore /* Object reference counts */ 17060f3deb5SBob Moore 171e2f7a777SLen Brown #define REF_INCREMENT (u16) 0 172e2f7a777SLen Brown #define REF_DECREMENT (u16) 1 173e2f7a777SLen Brown 174e2f7a777SLen Brown /* acpi_ut_dump_buffer */ 175e2f7a777SLen Brown 176e2f7a777SLen Brown #define DB_BYTE_DISPLAY 1 177e2f7a777SLen Brown #define DB_WORD_DISPLAY 2 178e2f7a777SLen Brown #define DB_DWORD_DISPLAY 4 179e2f7a777SLen Brown #define DB_QWORD_DISPLAY 8 180e2f7a777SLen Brown 181e2f7a777SLen Brown /* 1826a0df32cSBob Moore * utascii - ASCII utilities 1836a0df32cSBob Moore */ 1846a0df32cSBob Moore u8 acpi_ut_valid_nameseg(char *signature); 1856a0df32cSBob Moore 1866a0df32cSBob Moore u8 acpi_ut_valid_name_char(char character, u32 position); 1876a0df32cSBob Moore 1886a0df32cSBob Moore void acpi_ut_check_and_repair_ascii(u8 *name, char *repaired_name, u32 count); 1896a0df32cSBob Moore 1906a0df32cSBob Moore /* 19127629196SBob Moore * utnonansi - Non-ANSI C library functions 19227629196SBob Moore */ 19327629196SBob Moore void acpi_ut_strupr(char *src_string); 19427629196SBob Moore 19527629196SBob Moore void acpi_ut_strlwr(char *src_string); 19627629196SBob Moore 19727629196SBob Moore int acpi_ut_stricmp(char *string1, char *string2); 19827629196SBob Moore 1993a05be75SBob Moore acpi_status 2003a05be75SBob Moore acpi_ut_strtoul64(char *string, 2013a05be75SBob Moore u32 base, u32 max_integer_byte_width, u64 *ret_integer); 2023a05be75SBob Moore 2033a05be75SBob Moore /* Values for max_integer_byte_width above */ 2043a05be75SBob Moore 2053a05be75SBob Moore #define ACPI_MAX32_BYTE_WIDTH 4 2063a05be75SBob Moore #define ACPI_MAX64_BYTE_WIDTH 8 20727629196SBob Moore 20827629196SBob Moore /* 209e2f7a777SLen Brown * utglobal - Global data structures and procedures 210e2f7a777SLen Brown */ 211e2f7a777SLen Brown acpi_status acpi_ut_init_globals(void); 212e2f7a777SLen Brown 213e2f7a777SLen Brown #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 214e2f7a777SLen Brown 215c118abc5SLABBE Corentin const char *acpi_ut_get_mutex_name(u32 mutex_id); 216e2f7a777SLen Brown 21706a63e33SBob Moore const char *acpi_ut_get_notify_name(u32 notify_value, acpi_object_type type); 218e2f7a777SLen Brown #endif 219e2f7a777SLen Brown 220c118abc5SLABBE Corentin const char *acpi_ut_get_type_name(acpi_object_type type); 221e2f7a777SLen Brown 222c118abc5SLABBE Corentin const char *acpi_ut_get_node_name(void *object); 223e2f7a777SLen Brown 224c118abc5SLABBE Corentin const char *acpi_ut_get_descriptor_name(void *object); 225e2f7a777SLen Brown 226e2f7a777SLen Brown const char *acpi_ut_get_reference_name(union acpi_operand_object *object); 227e2f7a777SLen Brown 228c118abc5SLABBE Corentin const char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc); 229e2f7a777SLen Brown 230c118abc5SLABBE Corentin const char *acpi_ut_get_region_name(u8 space_id); 231e2f7a777SLen Brown 232c118abc5SLABBE Corentin const char *acpi_ut_get_event_name(u32 event_id); 233e2f7a777SLen Brown 2345df7e6cbSBob Moore char acpi_ut_hex_to_ascii_char(u64 integer, u32 position); 235e2f7a777SLen Brown 23673bbca04SBob Moore u8 acpi_ut_ascii_char_to_hex(int hex_char); 23773bbca04SBob Moore 238e2f7a777SLen Brown u8 acpi_ut_valid_object_type(acpi_object_type type); 239e2f7a777SLen Brown 240e2f7a777SLen Brown /* 241e2f7a777SLen Brown * utinit - miscellaneous initialization and shutdown 242e2f7a777SLen Brown */ 243e2f7a777SLen Brown acpi_status acpi_ut_hardware_initialize(void); 244e2f7a777SLen Brown 245e2f7a777SLen Brown void acpi_ut_subsystem_shutdown(void); 246e2f7a777SLen Brown 247e2f7a777SLen Brown /* 248e2f7a777SLen Brown * utcopy - Object construction and conversion interfaces 249e2f7a777SLen Brown */ 250e2f7a777SLen Brown acpi_status 251e2f7a777SLen Brown acpi_ut_build_simple_object(union acpi_operand_object *obj, 252e2f7a777SLen Brown union acpi_object *user_obj, 253e2f7a777SLen Brown u8 *data_space, u32 *buffer_space_used); 254e2f7a777SLen Brown 255e2f7a777SLen Brown acpi_status 256e2f7a777SLen Brown acpi_ut_build_package_object(union acpi_operand_object *obj, 257e2f7a777SLen Brown u8 *buffer, u32 *space_used); 258e2f7a777SLen Brown 259e2f7a777SLen Brown acpi_status 260e2f7a777SLen Brown acpi_ut_copy_iobject_to_eobject(union acpi_operand_object *obj, 261e2f7a777SLen Brown struct acpi_buffer *ret_buffer); 262e2f7a777SLen Brown 263e2f7a777SLen Brown acpi_status 264e2f7a777SLen Brown acpi_ut_copy_eobject_to_iobject(union acpi_object *obj, 265e2f7a777SLen Brown union acpi_operand_object **internal_obj); 266e2f7a777SLen Brown 267e2f7a777SLen Brown acpi_status 268e2f7a777SLen Brown acpi_ut_copy_isimple_to_isimple(union acpi_operand_object *source_obj, 269e2f7a777SLen Brown union acpi_operand_object *dest_obj); 270e2f7a777SLen Brown 271e2f7a777SLen Brown acpi_status 272e2f7a777SLen Brown acpi_ut_copy_iobject_to_iobject(union acpi_operand_object *source_desc, 273e2f7a777SLen Brown union acpi_operand_object **dest_desc, 274e2f7a777SLen Brown struct acpi_walk_state *walk_state); 275e2f7a777SLen Brown 276e2f7a777SLen Brown /* 277e2f7a777SLen Brown * utcreate - Object creation 278e2f7a777SLen Brown */ 279e2f7a777SLen Brown acpi_status 280e2f7a777SLen Brown acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action); 281e2f7a777SLen Brown 282e2f7a777SLen Brown /* 283e2f7a777SLen Brown * utdebug - Debug interfaces 284e2f7a777SLen Brown */ 285e2f7a777SLen Brown void acpi_ut_init_stack_ptr_trace(void); 286e2f7a777SLen Brown 287e2f7a777SLen Brown void acpi_ut_track_stack_ptr(void); 288e2f7a777SLen Brown 289e2f7a777SLen Brown void 290e2f7a777SLen Brown acpi_ut_trace(u32 line_number, 291e2f7a777SLen Brown const char *function_name, 292e2f7a777SLen Brown const char *module_name, u32 component_id); 293e2f7a777SLen Brown 294e2f7a777SLen Brown void 295e2f7a777SLen Brown acpi_ut_trace_ptr(u32 line_number, 296e2f7a777SLen Brown const char *function_name, 2970dfaaa3dSBob Moore const char *module_name, 2980dfaaa3dSBob Moore u32 component_id, const void *pointer); 299e2f7a777SLen Brown 300e2f7a777SLen Brown void 301e2f7a777SLen Brown acpi_ut_trace_u32(u32 line_number, 302e2f7a777SLen Brown const char *function_name, 303e2f7a777SLen Brown const char *module_name, u32 component_id, u32 integer); 304e2f7a777SLen Brown 305e2f7a777SLen Brown void 306e2f7a777SLen Brown acpi_ut_trace_str(u32 line_number, 307e2f7a777SLen Brown const char *function_name, 3080dfaaa3dSBob Moore const char *module_name, 3090dfaaa3dSBob Moore u32 component_id, const char *string); 310e2f7a777SLen Brown 311e2f7a777SLen Brown void 312e2f7a777SLen Brown acpi_ut_exit(u32 line_number, 313e2f7a777SLen Brown const char *function_name, 314e2f7a777SLen Brown const char *module_name, u32 component_id); 315e2f7a777SLen Brown 316e2f7a777SLen Brown void 317e2f7a777SLen Brown acpi_ut_status_exit(u32 line_number, 318e2f7a777SLen Brown const char *function_name, 319e2f7a777SLen Brown const char *module_name, 320e2f7a777SLen Brown u32 component_id, acpi_status status); 321e2f7a777SLen Brown 322e2f7a777SLen Brown void 323e2f7a777SLen Brown acpi_ut_value_exit(u32 line_number, 324e2f7a777SLen Brown const char *function_name, 3255df7e6cbSBob Moore const char *module_name, u32 component_id, u64 value); 326e2f7a777SLen Brown 327e2f7a777SLen Brown void 328e2f7a777SLen Brown acpi_ut_ptr_exit(u32 line_number, 329e2f7a777SLen Brown const char *function_name, 330e2f7a777SLen Brown const char *module_name, u32 component_id, u8 *ptr); 331e2f7a777SLen Brown 33297171c6bSBob Moore void 3334857a94dSJung-uk Kim acpi_ut_str_exit(u32 line_number, 3344857a94dSJung-uk Kim const char *function_name, 3354857a94dSJung-uk Kim const char *module_name, u32 component_id, const char *string); 3364857a94dSJung-uk Kim 3374857a94dSJung-uk Kim void 33897171c6bSBob Moore acpi_ut_debug_dump_buffer(u8 *buffer, u32 count, u32 display, u32 component_id); 339e2f7a777SLen Brown 34097171c6bSBob Moore void acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 offset); 341e2f7a777SLen Brown 342846d6ef4SLv Zheng #ifdef ACPI_APPLICATION 343846d6ef4SLv Zheng void 344846d6ef4SLv Zheng acpi_ut_dump_buffer_to_file(ACPI_FILE file, 345846d6ef4SLv Zheng u8 *buffer, 346846d6ef4SLv Zheng u32 count, u32 display, u32 base_offset); 347846d6ef4SLv Zheng #endif 348846d6ef4SLv Zheng 349e2f7a777SLen Brown void acpi_ut_report_error(char *module_name, u32 line_number); 350e2f7a777SLen Brown 351e2f7a777SLen Brown void acpi_ut_report_info(char *module_name, u32 line_number); 352e2f7a777SLen Brown 353e2f7a777SLen Brown void acpi_ut_report_warning(char *module_name, u32 line_number); 354e2f7a777SLen Brown 355e2f7a777SLen Brown /* 356e2f7a777SLen Brown * utdelete - Object deletion and reference counts 357e2f7a777SLen Brown */ 358e2f7a777SLen Brown void acpi_ut_add_reference(union acpi_operand_object *object); 359e2f7a777SLen Brown 360e2f7a777SLen Brown void acpi_ut_remove_reference(union acpi_operand_object *object); 361e2f7a777SLen Brown 362e2f7a777SLen Brown void acpi_ut_delete_internal_package_object(union acpi_operand_object *object); 363e2f7a777SLen Brown 364e2f7a777SLen Brown void acpi_ut_delete_internal_simple_object(union acpi_operand_object *object); 365e2f7a777SLen Brown 366e2f7a777SLen Brown void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list); 367e2f7a777SLen Brown 368e2f7a777SLen Brown /* 369e2f7a777SLen Brown * uteval - object evaluation 370e2f7a777SLen Brown */ 371e2f7a777SLen Brown acpi_status 372e2f7a777SLen Brown acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node, 3730dfaaa3dSBob Moore const char *path, 374e2f7a777SLen Brown u32 expected_return_btypes, 375e2f7a777SLen Brown union acpi_operand_object **return_desc); 376e2f7a777SLen Brown 377e2f7a777SLen Brown acpi_status 3780dfaaa3dSBob Moore acpi_ut_evaluate_numeric_object(const char *object_name, 379e2f7a777SLen Brown struct acpi_namespace_node *device_node, 3805df7e6cbSBob Moore u64 *value); 381e2f7a777SLen Brown 382e2f7a777SLen Brown acpi_status 38315b8dd53SBob Moore acpi_ut_execute_STA(struct acpi_namespace_node *device_node, u32 *status_flags); 38415b8dd53SBob Moore 38515b8dd53SBob Moore acpi_status 38615b8dd53SBob Moore acpi_ut_execute_power_methods(struct acpi_namespace_node *device_node, 38715b8dd53SBob Moore const char **method_names, 38815b8dd53SBob Moore u8 method_count, u8 *out_values); 38915b8dd53SBob Moore 39015b8dd53SBob Moore /* 39115b8dd53SBob Moore * utids - device ID support 39215b8dd53SBob Moore */ 39315b8dd53SBob Moore acpi_status 394e2f7a777SLen Brown acpi_ut_execute_HID(struct acpi_namespace_node *device_node, 39578e25fefSLv Zheng struct acpi_pnp_device_id ** return_id); 396e2f7a777SLen Brown 397e2f7a777SLen Brown acpi_status 398e2f7a777SLen Brown acpi_ut_execute_UID(struct acpi_namespace_node *device_node, 39978e25fefSLv Zheng struct acpi_pnp_device_id ** return_id); 400e2f7a777SLen Brown 401e2f7a777SLen Brown acpi_status 40215b8dd53SBob Moore acpi_ut_execute_CID(struct acpi_namespace_node *device_node, 40378e25fefSLv Zheng struct acpi_pnp_device_id_list ** return_cid_list); 404e2f7a777SLen Brown 405f65358e5SSuravee Suthikulpanit acpi_status 406f65358e5SSuravee Suthikulpanit acpi_ut_execute_CLS(struct acpi_namespace_node *device_node, 407f65358e5SSuravee Suthikulpanit struct acpi_pnp_device_id **return_id); 408f65358e5SSuravee Suthikulpanit 409e2f7a777SLen Brown /* 4108a335a23SBob Moore * utlock - reader/writer locks 4118a335a23SBob Moore */ 4128a335a23SBob Moore acpi_status acpi_ut_create_rw_lock(struct acpi_rw_lock *lock); 4138a335a23SBob Moore 4148a335a23SBob Moore void acpi_ut_delete_rw_lock(struct acpi_rw_lock *lock); 4158a335a23SBob Moore 4168a335a23SBob Moore acpi_status acpi_ut_acquire_read_lock(struct acpi_rw_lock *lock); 4178a335a23SBob Moore 4188a335a23SBob Moore acpi_status acpi_ut_release_read_lock(struct acpi_rw_lock *lock); 4198a335a23SBob Moore 4208a335a23SBob Moore acpi_status acpi_ut_acquire_write_lock(struct acpi_rw_lock *lock); 4218a335a23SBob Moore 4228a335a23SBob Moore void acpi_ut_release_write_lock(struct acpi_rw_lock *lock); 4238a335a23SBob Moore 4248a335a23SBob Moore /* 425e2f7a777SLen Brown * utobject - internal object create/delete/cache routines 426e2f7a777SLen Brown */ 427e2f7a777SLen Brown union acpi_operand_object *acpi_ut_create_internal_object_dbg(const char 428e2f7a777SLen Brown *module_name, 429e2f7a777SLen Brown u32 line_number, 430e2f7a777SLen Brown u32 component_id, 431e2f7a777SLen Brown acpi_object_type 432e2f7a777SLen Brown type); 433e2f7a777SLen Brown 434e2f7a777SLen Brown void *acpi_ut_allocate_object_desc_dbg(const char *module_name, 435e2f7a777SLen Brown u32 line_number, u32 component_id); 436e2f7a777SLen Brown 437e2f7a777SLen Brown #define acpi_ut_create_internal_object(t) acpi_ut_create_internal_object_dbg (_acpi_module_name,__LINE__,_COMPONENT,t) 438e2f7a777SLen Brown #define acpi_ut_allocate_object_desc() acpi_ut_allocate_object_desc_dbg (_acpi_module_name,__LINE__,_COMPONENT) 439e2f7a777SLen Brown 440e2f7a777SLen Brown void acpi_ut_delete_object_desc(union acpi_operand_object *object); 441e2f7a777SLen Brown 442e2f7a777SLen Brown u8 acpi_ut_valid_internal_object(void *object); 443e2f7a777SLen Brown 444e2f7a777SLen Brown union acpi_operand_object *acpi_ut_create_package_object(u32 count); 445e2f7a777SLen Brown 446502f7efaSBob Moore union acpi_operand_object *acpi_ut_create_integer_object(u64 value); 447502f7efaSBob Moore 448e2f7a777SLen Brown union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size); 449e2f7a777SLen Brown 450e2f7a777SLen Brown union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size); 451e2f7a777SLen Brown 452e2f7a777SLen Brown acpi_status 453e2f7a777SLen Brown acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size *obj_length); 454e2f7a777SLen Brown 455e2f7a777SLen Brown /* 456b0ed7a91SLin Ming * utosi - Support for the _OSI predefined control method 457b0ed7a91SLin Ming */ 458b0ed7a91SLin Ming acpi_status acpi_ut_initialize_interfaces(void); 459b0ed7a91SLin Ming 460388a9902SJung-uk Kim acpi_status acpi_ut_interface_terminate(void); 461b0ed7a91SLin Ming 462b0ed7a91SLin Ming acpi_status acpi_ut_install_interface(acpi_string interface_name); 463b0ed7a91SLin Ming 464b0ed7a91SLin Ming acpi_status acpi_ut_remove_interface(acpi_string interface_name); 465b0ed7a91SLin Ming 4662cf9f5bcSLv Zheng acpi_status acpi_ut_update_interfaces(u8 action); 4672cf9f5bcSLv Zheng 468b0ed7a91SLin Ming struct acpi_interface_info *acpi_ut_get_interface(acpi_string interface_name); 469b0ed7a91SLin Ming 470b0ed7a91SLin Ming acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state); 471b0ed7a91SLin Ming 472b0ed7a91SLin Ming /* 473c34c82bcSBob Moore * utpredef - support for predefined names 474c34c82bcSBob Moore */ 475c34c82bcSBob Moore const union acpi_predefined_info *acpi_ut_get_next_predefined_method(const union 476c34c82bcSBob Moore acpi_predefined_info 477c34c82bcSBob Moore *this_name); 478c34c82bcSBob Moore 479c34c82bcSBob Moore const union acpi_predefined_info *acpi_ut_match_predefined_method(char *name); 480c34c82bcSBob Moore 4816306bf88SLv Zheng void acpi_ut_get_expected_return_types(char *buffer, u32 expected_btypes); 4826306bf88SLv Zheng 4836306bf88SLv Zheng #if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP) 484c34c82bcSBob Moore const union acpi_predefined_info *acpi_ut_match_resource_name(char *name); 485c34c82bcSBob Moore 486c34c82bcSBob Moore void 487c34c82bcSBob Moore acpi_ut_display_predefined_method(char *buffer, 488c34c82bcSBob Moore const union acpi_predefined_info *this_name, 489c34c82bcSBob Moore u8 multi_line); 490c34c82bcSBob Moore 491c34c82bcSBob Moore u32 acpi_ut_get_resource_bit_width(char *buffer, u16 types); 4926306bf88SLv Zheng #endif 493c34c82bcSBob Moore 494c34c82bcSBob Moore /* 495e2f7a777SLen Brown * utstate - Generic state creation/cache routines 496e2f7a777SLen Brown */ 497e2f7a777SLen Brown void 498e2f7a777SLen Brown acpi_ut_push_generic_state(union acpi_generic_state **list_head, 499e2f7a777SLen Brown union acpi_generic_state *state); 500e2f7a777SLen Brown 501e2f7a777SLen Brown union acpi_generic_state *acpi_ut_pop_generic_state(union acpi_generic_state 502e2f7a777SLen Brown **list_head); 503e2f7a777SLen Brown 504e2f7a777SLen Brown union acpi_generic_state *acpi_ut_create_generic_state(void); 505e2f7a777SLen Brown 506e2f7a777SLen Brown struct acpi_thread_state *acpi_ut_create_thread_state(void); 507e2f7a777SLen Brown 508e2f7a777SLen Brown union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_object 509e2f7a777SLen Brown *object, u16 action); 510e2f7a777SLen Brown 511e2f7a777SLen Brown union acpi_generic_state *acpi_ut_create_pkg_state(void *internal_object, 512e2f7a777SLen Brown void *external_object, 513e2f7a777SLen Brown u16 index); 514e2f7a777SLen Brown 515e2f7a777SLen Brown acpi_status 516e2f7a777SLen Brown acpi_ut_create_update_state_and_push(union acpi_operand_object *object, 517e2f7a777SLen Brown u16 action, 518e2f7a777SLen Brown union acpi_generic_state **state_list); 519e2f7a777SLen Brown 520e2f7a777SLen Brown union acpi_generic_state *acpi_ut_create_control_state(void); 521e2f7a777SLen Brown 522e2f7a777SLen Brown void acpi_ut_delete_generic_state(union acpi_generic_state *state); 523e2f7a777SLen Brown 524e2f7a777SLen Brown /* 525e2f7a777SLen Brown * utmath 526e2f7a777SLen Brown */ 527e2f7a777SLen Brown acpi_status 5285df7e6cbSBob Moore acpi_ut_divide(u64 in_dividend, 5295df7e6cbSBob Moore u64 in_divisor, u64 *out_quotient, u64 *out_remainder); 530e2f7a777SLen Brown 531e2f7a777SLen Brown acpi_status 5325df7e6cbSBob Moore acpi_ut_short_divide(u64 in_dividend, 5335df7e6cbSBob Moore u32 divisor, u64 *out_quotient, u32 *out_remainder); 534e2f7a777SLen Brown 535e2f7a777SLen Brown /* 536e2f7a777SLen Brown * utmisc 537e2f7a777SLen Brown */ 538ae1b4769SBob Moore const struct acpi_exception_info *acpi_ut_validate_exception(acpi_status 539ae1b4769SBob Moore status); 540e2f7a777SLen Brown 54115b8dd53SBob Moore u8 acpi_ut_is_pci_root_bridge(char *id); 54215b8dd53SBob Moore 54317dd4dcfSBob Moore #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_NAMES_APP) 544e2f7a777SLen Brown u8 acpi_ut_is_aml_table(struct acpi_table_header *table); 5456306bf88SLv Zheng #endif 546e2f7a777SLen Brown 547e2f7a777SLen Brown acpi_status 548e2f7a777SLen Brown acpi_ut_walk_package_tree(union acpi_operand_object *source_object, 549e2f7a777SLen Brown void *target_object, 550e2f7a777SLen Brown acpi_pkg_callback walk_callback, void *context); 551e2f7a777SLen Brown 552e2f7a777SLen Brown /* Values for Base above (16=Hex, 10=Decimal) */ 553e2f7a777SLen Brown 554e2f7a777SLen Brown #define ACPI_ANY_BASE 0 555e2f7a777SLen Brown 556e2f7a777SLen Brown u32 acpi_ut_dword_byte_swap(u32 value); 557e2f7a777SLen Brown 558e2f7a777SLen Brown void acpi_ut_set_integer_width(u8 revision); 559e2f7a777SLen Brown 560e2f7a777SLen Brown #ifdef ACPI_DEBUG_OUTPUT 561e2f7a777SLen Brown void 562e2f7a777SLen Brown acpi_ut_display_init_pathname(u8 type, 563e2f7a777SLen Brown struct acpi_namespace_node *obj_handle, 5640dfaaa3dSBob Moore const char *path); 565e2f7a777SLen Brown #endif 566e2f7a777SLen Brown 567e2f7a777SLen Brown /* 56842f8fb75SBob Moore * utownerid - Support for Table/Method Owner IDs 56942f8fb75SBob Moore */ 57042f8fb75SBob Moore acpi_status acpi_ut_allocate_owner_id(acpi_owner_id *owner_id); 57142f8fb75SBob Moore 57242f8fb75SBob Moore void acpi_ut_release_owner_id(acpi_owner_id *owner_id); 57342f8fb75SBob Moore 57442f8fb75SBob Moore /* 575e2f7a777SLen Brown * utresrc 576e2f7a777SLen Brown */ 577e2f7a777SLen Brown acpi_status 578886308ecSBob Moore acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state, 579886308ecSBob Moore u8 *aml, 580e2f7a777SLen Brown acpi_size aml_length, 581e2f7a777SLen Brown acpi_walk_aml_callback user_function, 582e2f7a777SLen Brown void **context); 583e2f7a777SLen Brown 584886308ecSBob Moore acpi_status 585886308ecSBob Moore acpi_ut_validate_resource(struct acpi_walk_state *walk_state, 586886308ecSBob Moore void *aml, u8 *return_index); 587e2f7a777SLen Brown 588e2f7a777SLen Brown u32 acpi_ut_get_descriptor_length(void *aml); 589e2f7a777SLen Brown 590e2f7a777SLen Brown u16 acpi_ut_get_resource_length(void *aml); 591e2f7a777SLen Brown 592e2f7a777SLen Brown u8 acpi_ut_get_resource_header_length(void *aml); 593e2f7a777SLen Brown 594e2f7a777SLen Brown u8 acpi_ut_get_resource_type(void *aml); 595e2f7a777SLen Brown 596e2f7a777SLen Brown acpi_status 5976d33b6beSLv Zheng acpi_ut_get_resource_end_tag(union acpi_operand_object *obj_desc, u8 **end_tag); 598e2f7a777SLen Brown 599e2f7a777SLen Brown /* 60042f8fb75SBob Moore * utstring - String and character utilities 60142f8fb75SBob Moore */ 6020fb3adf8SBob Moore void acpi_ut_print_string(char *string, u16 max_length); 60342f8fb75SBob Moore 6046306bf88SLv Zheng #if defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP 60542f8fb75SBob Moore void ut_convert_backslashes(char *pathname); 6066306bf88SLv Zheng #endif 60742f8fb75SBob Moore 60842f8fb75SBob Moore void acpi_ut_repair_name(char *name); 60942f8fb75SBob Moore 61073424473SBob Moore #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) 61173424473SBob Moore u8 acpi_ut_safe_strcpy(char *dest, acpi_size dest_size, char *source); 61273424473SBob Moore 61373424473SBob Moore u8 acpi_ut_safe_strcat(char *dest, acpi_size dest_size, char *source); 61473424473SBob Moore 61573424473SBob Moore u8 61673424473SBob Moore acpi_ut_safe_strncat(char *dest, 61773424473SBob Moore acpi_size dest_size, 61873424473SBob Moore char *source, acpi_size max_transfer_length); 61973424473SBob Moore #endif 62073424473SBob Moore 62142f8fb75SBob Moore /* 622e2f7a777SLen Brown * utmutex - mutex support 623e2f7a777SLen Brown */ 624e2f7a777SLen Brown acpi_status acpi_ut_mutex_initialize(void); 625e2f7a777SLen Brown 626e2f7a777SLen Brown void acpi_ut_mutex_terminate(void); 627e2f7a777SLen Brown 628e2f7a777SLen Brown acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id); 629e2f7a777SLen Brown 630e2f7a777SLen Brown acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id); 631e2f7a777SLen Brown 632e2f7a777SLen Brown /* 633e2f7a777SLen Brown * utalloc - memory allocation and object caching 634e2f7a777SLen Brown */ 635e2f7a777SLen Brown acpi_status acpi_ut_create_caches(void); 636e2f7a777SLen Brown 637e2f7a777SLen Brown acpi_status acpi_ut_delete_caches(void); 638e2f7a777SLen Brown 639e2f7a777SLen Brown acpi_status acpi_ut_validate_buffer(struct acpi_buffer *buffer); 640e2f7a777SLen Brown 641e2f7a777SLen Brown acpi_status 642e2f7a777SLen Brown acpi_ut_initialize_buffer(struct acpi_buffer *buffer, 643e2f7a777SLen Brown acpi_size required_length); 644e2f7a777SLen Brown 645e2f7a777SLen Brown #ifdef ACPI_DBG_TRACK_ALLOCATIONS 646e2f7a777SLen Brown void *acpi_ut_allocate_and_track(acpi_size size, 647e2f7a777SLen Brown u32 component, const char *module, u32 line); 648e2f7a777SLen Brown 649e2f7a777SLen Brown void *acpi_ut_allocate_zeroed_and_track(acpi_size size, 650e2f7a777SLen Brown u32 component, 651e2f7a777SLen Brown const char *module, u32 line); 652e2f7a777SLen Brown 653e2f7a777SLen Brown void 654e2f7a777SLen Brown acpi_ut_free_and_track(void *address, 655e2f7a777SLen Brown u32 component, const char *module, u32 line); 656e2f7a777SLen Brown 657e2f7a777SLen Brown void acpi_ut_dump_allocation_info(void); 658e2f7a777SLen Brown 659e2f7a777SLen Brown void acpi_ut_dump_allocations(u32 component, const char *module); 660e2f7a777SLen Brown 661e2f7a777SLen Brown acpi_status 6620dfaaa3dSBob Moore acpi_ut_create_list(const char *list_name, 663e2f7a777SLen Brown u16 object_size, struct acpi_memory_list **return_cache); 664e2f7a777SLen Brown 665cc84e262SBob Moore #endif /* ACPI_DBG_TRACK_ALLOCATIONS */ 666cc84e262SBob Moore 667cc84e262SBob Moore /* 668f654c0feSLin Ming * utaddress - address range check 669f654c0feSLin Ming */ 670f654c0feSLin Ming acpi_status 671f654c0feSLin Ming acpi_ut_add_address_range(acpi_adr_space_type space_id, 672f654c0feSLin Ming acpi_physical_address address, 673f654c0feSLin Ming u32 length, struct acpi_namespace_node *region_node); 674f654c0feSLin Ming 675f654c0feSLin Ming void 676f654c0feSLin Ming acpi_ut_remove_address_range(acpi_adr_space_type space_id, 677f654c0feSLin Ming struct acpi_namespace_node *region_node); 678f654c0feSLin Ming 679f654c0feSLin Ming u32 680f654c0feSLin Ming acpi_ut_check_address_range(acpi_adr_space_type space_id, 681f654c0feSLin Ming acpi_physical_address address, u32 length, u8 warn); 682f654c0feSLin Ming 683f654c0feSLin Ming void acpi_ut_delete_address_lists(void); 684f654c0feSLin Ming 685f654c0feSLin Ming /* 686cc84e262SBob Moore * utxferror - various error/warning output functions 687cc84e262SBob Moore */ 688cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE 689cc84e262SBob Moore acpi_ut_predefined_warning(const char *module_name, 690cc84e262SBob Moore u32 line_number, 691cc84e262SBob Moore char *pathname, 692cc84e262SBob Moore u8 node_flags, const char *format, ...); 693cc84e262SBob Moore 694cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE 695cc84e262SBob Moore acpi_ut_predefined_info(const char *module_name, 696cc84e262SBob Moore u32 line_number, 697cc84e262SBob Moore char *pathname, u8 node_flags, const char *format, ...); 698cc84e262SBob Moore 699e1405ca5SBob Moore void ACPI_INTERNAL_VAR_XFACE 700e1405ca5SBob Moore acpi_ut_predefined_bios_error(const char *module_name, 701e1405ca5SBob Moore u32 line_number, 702e1405ca5SBob Moore char *pathname, 703e1405ca5SBob Moore u8 node_flags, const char *format, ...); 704e1405ca5SBob Moore 705cc84e262SBob Moore void 706cc84e262SBob Moore acpi_ut_namespace_error(const char *module_name, 707cc84e262SBob Moore u32 line_number, 708cc84e262SBob Moore const char *internal_name, acpi_status lookup_status); 709cc84e262SBob Moore 710cc84e262SBob Moore void 711cc84e262SBob Moore acpi_ut_method_error(const char *module_name, 712cc84e262SBob Moore u32 line_number, 713cc84e262SBob Moore const char *message, 714cc84e262SBob Moore struct acpi_namespace_node *node, 715cc84e262SBob Moore const char *path, acpi_status lookup_status); 716e2f7a777SLen Brown 717b944b29cSBob Moore /* 718b944b29cSBob Moore * Utility functions for ACPI names and IDs 719b944b29cSBob Moore */ 720b944b29cSBob Moore const struct ah_predefined_name *acpi_ah_match_predefined_name(char *nameseg); 721b944b29cSBob Moore 722e2b9035fSLv Zheng const struct ah_device_id *acpi_ah_match_hardware_id(char *hid); 723b944b29cSBob Moore 72473bbca04SBob Moore const char *acpi_ah_match_uuid(u8 *data); 72573bbca04SBob Moore 72680a648c1SLv Zheng /* 72780a648c1SLv Zheng * utprint - printf/vprintf output functions 72880a648c1SLv Zheng */ 72980a648c1SLv Zheng const char *acpi_ut_scan_number(const char *string, u64 *number_ptr); 73080a648c1SLv Zheng 73180a648c1SLv Zheng const char *acpi_ut_print_number(char *string, u64 number); 73280a648c1SLv Zheng 73380a648c1SLv Zheng int 73480a648c1SLv Zheng acpi_ut_vsnprintf(char *string, 73580a648c1SLv Zheng acpi_size size, const char *format, va_list args); 73680a648c1SLv Zheng 73780a648c1SLv Zheng int acpi_ut_snprintf(char *string, acpi_size size, const char *format, ...); 73880a648c1SLv Zheng 73980a648c1SLv Zheng #ifdef ACPI_APPLICATION 74080a648c1SLv Zheng int acpi_ut_file_vprintf(ACPI_FILE file, const char *format, va_list args); 74180a648c1SLv Zheng 74280a648c1SLv Zheng int acpi_ut_file_printf(ACPI_FILE file, const char *format, ...); 74380a648c1SLv Zheng #endif 74480a648c1SLv Zheng 74573bbca04SBob Moore /* 74673bbca04SBob Moore * utuuid -- UUID support functions 74773bbca04SBob Moore */ 7486306bf88SLv Zheng #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_HELP_APP) 74973bbca04SBob Moore void acpi_ut_convert_string_to_uuid(char *in_string, u8 *uuid_buffer); 7506306bf88SLv Zheng #endif 75173bbca04SBob Moore 752e2f7a777SLen Brown #endif /* _ACUTILS_H */ 753