195857638SErik Schmauss /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 2e2f7a777SLen Brown /****************************************************************************** 3e2f7a777SLen Brown * 4e2f7a777SLen Brown * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures 5e2f7a777SLen Brown * 6612c2932SBob Moore * Copyright (C) 2000 - 2023, Intel Corp. 7e2f7a777SLen Brown * 895857638SErik Schmauss *****************************************************************************/ 9e2f7a777SLen Brown 10e2f7a777SLen Brown #ifndef _ACUTILS_H 11e2f7a777SLen Brown #define _ACUTILS_H 12e2f7a777SLen Brown 13e2f7a777SLen Brown extern const u8 acpi_gbl_resource_aml_sizes[]; 14e0fe0a8dSLin Ming extern const u8 acpi_gbl_resource_aml_serial_bus_sizes[]; 15e2f7a777SLen Brown 16e2f7a777SLen Brown /* Strings used by the disassembler and debugger resource dump routines */ 17e2f7a777SLen Brown 183334861bSLv Zheng #if defined(ACPI_DEBUG_OUTPUT) || defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER) 19e2f7a777SLen Brown 20e2f7a777SLen Brown extern const char *acpi_gbl_bm_decode[]; 21e2f7a777SLen Brown extern const char *acpi_gbl_config_decode[]; 22e2f7a777SLen Brown extern const char *acpi_gbl_consume_decode[]; 23e2f7a777SLen Brown extern const char *acpi_gbl_dec_decode[]; 24e2f7a777SLen Brown extern const char *acpi_gbl_he_decode[]; 25e2f7a777SLen Brown extern const char *acpi_gbl_io_decode[]; 26e2f7a777SLen Brown extern const char *acpi_gbl_ll_decode[]; 27e2f7a777SLen Brown extern const char *acpi_gbl_max_decode[]; 28e2f7a777SLen Brown extern const char *acpi_gbl_mem_decode[]; 29e2f7a777SLen Brown extern const char *acpi_gbl_min_decode[]; 30e2f7a777SLen Brown extern const char *acpi_gbl_mtp_decode[]; 31a2befbb2SBob Moore extern const char *acpi_gbl_phy_decode[]; 32e2f7a777SLen Brown extern const char *acpi_gbl_rng_decode[]; 33e2f7a777SLen Brown extern const char *acpi_gbl_rw_decode[]; 34e2f7a777SLen Brown extern const char *acpi_gbl_shr_decode[]; 35e2f7a777SLen Brown extern const char *acpi_gbl_siz_decode[]; 36e2f7a777SLen Brown extern const char *acpi_gbl_trs_decode[]; 37e2f7a777SLen Brown extern const char *acpi_gbl_ttp_decode[]; 38e2f7a777SLen Brown extern const char *acpi_gbl_typ_decode[]; 396d33b6beSLv Zheng extern const char *acpi_gbl_ppc_decode[]; 406d33b6beSLv Zheng extern const char *acpi_gbl_ior_decode[]; 416d33b6beSLv Zheng extern const char *acpi_gbl_dts_decode[]; 426d33b6beSLv Zheng extern const char *acpi_gbl_ct_decode[]; 436d33b6beSLv Zheng extern const char *acpi_gbl_sbt_decode[]; 446d33b6beSLv Zheng extern const char *acpi_gbl_am_decode[]; 456d33b6beSLv Zheng extern const char *acpi_gbl_sm_decode[]; 466d33b6beSLv Zheng extern const char *acpi_gbl_wm_decode[]; 476d33b6beSLv Zheng extern const char *acpi_gbl_cph_decode[]; 486d33b6beSLv Zheng extern const char *acpi_gbl_cpo_decode[]; 496d33b6beSLv Zheng extern const char *acpi_gbl_dp_decode[]; 506d33b6beSLv Zheng extern const char *acpi_gbl_ed_decode[]; 516d33b6beSLv Zheng extern const char *acpi_gbl_bpb_decode[]; 526d33b6beSLv Zheng extern const char *acpi_gbl_sb_decode[]; 536d33b6beSLv Zheng extern const char *acpi_gbl_fc_decode[]; 546d33b6beSLv Zheng extern const char *acpi_gbl_pt_decode[]; 5597028ce6SMika Westerberg extern const char *acpi_gbl_ptyp_decode[]; 56*520d4a0eSNiyas Sait extern const char *acpi_gbl_clock_input_mode[]; 57*520d4a0eSNiyas Sait extern const char *acpi_gbl_clock_input_scale[]; 58e2f7a777SLen Brown #endif 59e2f7a777SLen Brown 60b6872ff9SBob Moore /* 61b6872ff9SBob Moore * For the iASL compiler case, the output is redirected to stderr so that 62b6872ff9SBob Moore * any of the various ACPI errors and warnings do not appear in the output 63b6872ff9SBob Moore * files, for either the compiler or disassembler portions of the tool. 64b6872ff9SBob Moore */ 65b6872ff9SBob Moore #ifdef ACPI_ASL_COMPILER 66b6872ff9SBob Moore 67b6872ff9SBob Moore #include <stdio.h> 68b6872ff9SBob Moore 69b6872ff9SBob Moore #define ACPI_MSG_REDIRECT_BEGIN \ 70b6872ff9SBob Moore FILE *output_file = acpi_gbl_output_file; \ 71b6872ff9SBob Moore acpi_os_redirect_output (stderr); 72b6872ff9SBob Moore 73b6872ff9SBob Moore #define ACPI_MSG_REDIRECT_END \ 74b6872ff9SBob Moore acpi_os_redirect_output (output_file); 75b6872ff9SBob Moore 76b6872ff9SBob Moore #else 77b6872ff9SBob Moore /* 78b6872ff9SBob Moore * non-iASL case - no redirection, nothing to do 79b6872ff9SBob Moore */ 80b6872ff9SBob Moore #define ACPI_MSG_REDIRECT_BEGIN 81b6872ff9SBob Moore #define ACPI_MSG_REDIRECT_END 82b6872ff9SBob Moore #endif 83b6872ff9SBob Moore 84b6872ff9SBob Moore /* 85b6872ff9SBob Moore * Common error message prefixes 86b6872ff9SBob Moore */ 87b5c0875aSLv Zheng #ifndef ACPI_MSG_ERROR 88b6872ff9SBob Moore #define ACPI_MSG_ERROR "ACPI Error: " 89b5c0875aSLv Zheng #endif 90b5c0875aSLv Zheng #ifndef ACPI_MSG_WARNING 91b6872ff9SBob Moore #define ACPI_MSG_WARNING "ACPI Warning: " 92b5c0875aSLv Zheng #endif 93b5c0875aSLv Zheng #ifndef ACPI_MSG_INFO 94b6872ff9SBob Moore #define ACPI_MSG_INFO "ACPI: " 95b5c0875aSLv Zheng #endif 96b6872ff9SBob Moore 97b5c0875aSLv Zheng #ifndef ACPI_MSG_BIOS_ERROR 9816ccf829SBob Moore #define ACPI_MSG_BIOS_ERROR "Firmware Error (ACPI): " 99b5c0875aSLv Zheng #endif 100b5c0875aSLv Zheng #ifndef ACPI_MSG_BIOS_WARNING 10116ccf829SBob Moore #define ACPI_MSG_BIOS_WARNING "Firmware Warning (ACPI): " 102b5c0875aSLv Zheng #endif 103b6872ff9SBob Moore 104b6872ff9SBob Moore /* 105b6872ff9SBob Moore * Common message suffix 106b6872ff9SBob Moore */ 107b6872ff9SBob Moore #define ACPI_MSG_SUFFIX \ 108b6872ff9SBob Moore acpi_os_printf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, module_name, line_number) 109b6872ff9SBob Moore 110fe97d287SBob Moore /* Flags to indicate implicit or explicit string-to-integer conversion */ 111fe97d287SBob Moore 112fe97d287SBob Moore #define ACPI_IMPLICIT_CONVERSION TRUE 113fe97d287SBob Moore #define ACPI_NO_IMPLICIT_CONVERSION FALSE 114fe97d287SBob Moore 115e2f7a777SLen Brown /* Types for Resource descriptor entries */ 116e2f7a777SLen Brown 117e2f7a777SLen Brown #define ACPI_INVALID_RESOURCE 0 118e2f7a777SLen Brown #define ACPI_FIXED_LENGTH 1 119e2f7a777SLen Brown #define ACPI_VARIABLE_LENGTH 2 120e2f7a777SLen Brown #define ACPI_SMALL_VARIABLE_LENGTH 3 121e2f7a777SLen Brown 122e2f7a777SLen Brown typedef 123e2f7a777SLen Brown acpi_status (*acpi_walk_aml_callback) (u8 *aml, 124e2f7a777SLen Brown u32 length, 125e2f7a777SLen Brown u32 offset, 126e2f7a777SLen Brown u8 resource_index, void **context); 127e2f7a777SLen Brown 128e2f7a777SLen Brown typedef 129e2f7a777SLen Brown acpi_status (*acpi_pkg_callback) (u8 object_type, 130e2f7a777SLen Brown union acpi_operand_object * source_object, 131e2f7a777SLen Brown union acpi_generic_state * state, 132e2f7a777SLen Brown void *context); 133e2f7a777SLen Brown 134e2f7a777SLen Brown struct acpi_pkg_info { 135e2f7a777SLen Brown u8 *free_space; 136e2f7a777SLen Brown acpi_size length; 137e2f7a777SLen Brown u32 object_space; 138e2f7a777SLen Brown u32 num_packages; 139e2f7a777SLen Brown }; 140e2f7a777SLen Brown 14160f3deb5SBob Moore /* Object reference counts */ 14260f3deb5SBob Moore 143e2f7a777SLen Brown #define REF_INCREMENT (u16) 0 144e2f7a777SLen Brown #define REF_DECREMENT (u16) 1 145e2f7a777SLen Brown 146e2f7a777SLen Brown /* acpi_ut_dump_buffer */ 147e2f7a777SLen Brown 148efcf9456SErik Schmauss #define DB_BYTE_DISPLAY 0x01 149efcf9456SErik Schmauss #define DB_WORD_DISPLAY 0x02 150efcf9456SErik Schmauss #define DB_DWORD_DISPLAY 0x04 151efcf9456SErik Schmauss #define DB_QWORD_DISPLAY 0x08 152efcf9456SErik Schmauss #define DB_DISPLAY_DATA_ONLY 0x10 153e2f7a777SLen Brown 154e2f7a777SLen Brown /* 1556a0df32cSBob Moore * utascii - ASCII utilities 1566a0df32cSBob Moore */ 1576a0df32cSBob Moore u8 acpi_ut_valid_nameseg(char *signature); 1586a0df32cSBob Moore 1596a0df32cSBob Moore u8 acpi_ut_valid_name_char(char character, u32 position); 1606a0df32cSBob Moore 1616a0df32cSBob Moore void acpi_ut_check_and_repair_ascii(u8 *name, char *repaired_name, u32 count); 1626a0df32cSBob Moore 1636a0df32cSBob Moore /* 16451aad1a6SBob Moore * utcksum - Checksum utilities 16551aad1a6SBob Moore */ 16651aad1a6SBob Moore u8 acpi_ut_generate_checksum(void *table, u32 length, u8 original_checksum); 16751aad1a6SBob Moore 16851aad1a6SBob Moore u8 acpi_ut_checksum(u8 *buffer, u32 length); 16951aad1a6SBob Moore 17051aad1a6SBob Moore acpi_status 17151aad1a6SBob Moore acpi_ut_verify_cdat_checksum(struct acpi_table_cdat *cdat_table, u32 length); 17251aad1a6SBob Moore 17351aad1a6SBob Moore acpi_status 17451aad1a6SBob Moore acpi_ut_verify_checksum(struct acpi_table_header *table, u32 length); 17551aad1a6SBob Moore 17651aad1a6SBob Moore /* 17727629196SBob Moore * utnonansi - Non-ANSI C library functions 17827629196SBob Moore */ 17927629196SBob Moore void acpi_ut_strupr(char *src_string); 18027629196SBob Moore 18127629196SBob Moore void acpi_ut_strlwr(char *src_string); 18227629196SBob Moore 18327629196SBob Moore int acpi_ut_stricmp(char *string1, char *string2); 18427629196SBob Moore 185fe97d287SBob Moore /* 186fe97d287SBob Moore * utstrsuppt - string-to-integer conversion support functions 187fe97d287SBob Moore */ 188fe97d287SBob Moore acpi_status acpi_ut_convert_octal_string(char *string, u64 *return_value); 189fe97d287SBob Moore 190fe97d287SBob Moore acpi_status acpi_ut_convert_decimal_string(char *string, u64 *return_value_ptr); 191fe97d287SBob Moore 192fe97d287SBob Moore acpi_status acpi_ut_convert_hex_string(char *string, u64 *return_value_ptr); 193fe97d287SBob Moore 194c2e56e54SBob Moore char acpi_ut_remove_whitespace(char **string); 195c2e56e54SBob Moore 196fe97d287SBob Moore char acpi_ut_remove_leading_zeros(char **string); 197fe97d287SBob Moore 198fe97d287SBob Moore u8 acpi_ut_detect_hex_prefix(char **string); 199fe97d287SBob Moore 200089b2becSErik Schmauss void acpi_ut_remove_hex_prefix(char **string); 201089b2becSErik Schmauss 202fe97d287SBob Moore u8 acpi_ut_detect_octal_prefix(char **string); 2033a05be75SBob Moore 2045ebd2eaaSBob Moore /* 205fe97d287SBob Moore * utstrtoul64 - string-to-integer conversion functions 2065ebd2eaaSBob Moore */ 207fe97d287SBob Moore acpi_status acpi_ut_strtoul64(char *string, u64 *ret_integer); 208fe97d287SBob Moore 209fe97d287SBob Moore u64 acpi_ut_explicit_strtoul64(char *string); 210fe97d287SBob Moore 211fe97d287SBob Moore u64 acpi_ut_implicit_strtoul64(char *string); 21227629196SBob Moore 21327629196SBob Moore /* 214e2f7a777SLen Brown * utglobal - Global data structures and procedures 215e2f7a777SLen Brown */ 216e2f7a777SLen Brown acpi_status acpi_ut_init_globals(void); 217e2f7a777SLen Brown 218c118abc5SLABBE Corentin const char *acpi_ut_get_mutex_name(u32 mutex_id); 219e2f7a777SLen Brown 2203e1dc644SBob Moore #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 2213e1dc644SBob Moore 22206a63e33SBob Moore const char *acpi_ut_get_notify_name(u32 notify_value, acpi_object_type type); 223e2f7a777SLen Brown #endif 224e2f7a777SLen Brown 225c118abc5SLABBE Corentin const char *acpi_ut_get_type_name(acpi_object_type type); 226e2f7a777SLen Brown 227c118abc5SLABBE Corentin const char *acpi_ut_get_node_name(void *object); 228e2f7a777SLen Brown 229c118abc5SLABBE Corentin const char *acpi_ut_get_descriptor_name(void *object); 230e2f7a777SLen Brown 231e2f7a777SLen Brown const char *acpi_ut_get_reference_name(union acpi_operand_object *object); 232e2f7a777SLen Brown 233c118abc5SLABBE Corentin const char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc); 234e2f7a777SLen Brown 235c118abc5SLABBE Corentin const char *acpi_ut_get_region_name(u8 space_id); 236e2f7a777SLen Brown 237c118abc5SLABBE Corentin const char *acpi_ut_get_event_name(u32 event_id); 238e2f7a777SLen Brown 2395a6e7ec3SBob Moore const char *acpi_ut_get_argument_type_name(u32 arg_type); 2405a6e7ec3SBob Moore 2415df7e6cbSBob Moore char acpi_ut_hex_to_ascii_char(u64 integer, u32 position); 242e2f7a777SLen Brown 2435ebd2eaaSBob Moore acpi_status acpi_ut_ascii_to_hex_byte(char *two_ascii_chars, u8 *return_byte); 2445ebd2eaaSBob Moore 24573bbca04SBob Moore u8 acpi_ut_ascii_char_to_hex(int hex_char); 24673bbca04SBob Moore 247e2f7a777SLen Brown u8 acpi_ut_valid_object_type(acpi_object_type type); 248e2f7a777SLen Brown 249e2f7a777SLen Brown /* 250e2f7a777SLen Brown * utinit - miscellaneous initialization and shutdown 251e2f7a777SLen Brown */ 252e2f7a777SLen Brown acpi_status acpi_ut_hardware_initialize(void); 253e2f7a777SLen Brown 254e2f7a777SLen Brown void acpi_ut_subsystem_shutdown(void); 255e2f7a777SLen Brown 256e2f7a777SLen Brown /* 257e2f7a777SLen Brown * utcopy - Object construction and conversion interfaces 258e2f7a777SLen Brown */ 259e2f7a777SLen Brown acpi_status 260e2f7a777SLen Brown acpi_ut_build_simple_object(union acpi_operand_object *obj, 261e2f7a777SLen Brown union acpi_object *user_obj, 262e2f7a777SLen Brown u8 *data_space, u32 *buffer_space_used); 263e2f7a777SLen Brown 264e2f7a777SLen Brown acpi_status 265e2f7a777SLen Brown acpi_ut_build_package_object(union acpi_operand_object *obj, 266e2f7a777SLen Brown u8 *buffer, u32 *space_used); 267e2f7a777SLen Brown 268e2f7a777SLen Brown acpi_status 269e2f7a777SLen Brown acpi_ut_copy_iobject_to_eobject(union acpi_operand_object *obj, 270e2f7a777SLen Brown struct acpi_buffer *ret_buffer); 271e2f7a777SLen Brown 272e2f7a777SLen Brown acpi_status 273e2f7a777SLen Brown acpi_ut_copy_eobject_to_iobject(union acpi_object *obj, 274e2f7a777SLen Brown union acpi_operand_object **internal_obj); 275e2f7a777SLen Brown 276e2f7a777SLen Brown acpi_status 277e2f7a777SLen Brown acpi_ut_copy_isimple_to_isimple(union acpi_operand_object *source_obj, 278e2f7a777SLen Brown union acpi_operand_object *dest_obj); 279e2f7a777SLen Brown 280e2f7a777SLen Brown acpi_status 281e2f7a777SLen Brown acpi_ut_copy_iobject_to_iobject(union acpi_operand_object *source_desc, 282e2f7a777SLen Brown union acpi_operand_object **dest_desc, 283e2f7a777SLen Brown struct acpi_walk_state *walk_state); 284e2f7a777SLen Brown 285e2f7a777SLen Brown /* 286e2f7a777SLen Brown * utcreate - Object creation 287e2f7a777SLen Brown */ 288e2f7a777SLen Brown acpi_status 289e2f7a777SLen Brown acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action); 290e2f7a777SLen Brown 291e2f7a777SLen Brown /* 292e2f7a777SLen Brown * utdebug - Debug interfaces 293e2f7a777SLen Brown */ 294e2f7a777SLen Brown void acpi_ut_init_stack_ptr_trace(void); 295e2f7a777SLen Brown 296e2f7a777SLen Brown void acpi_ut_track_stack_ptr(void); 297e2f7a777SLen Brown 298e2f7a777SLen Brown void 299e2f7a777SLen Brown acpi_ut_trace(u32 line_number, 300e2f7a777SLen Brown const char *function_name, 301e2f7a777SLen Brown const char *module_name, u32 component_id); 302e2f7a777SLen Brown 303e2f7a777SLen Brown void 304e2f7a777SLen Brown acpi_ut_trace_ptr(u32 line_number, 305e2f7a777SLen Brown const char *function_name, 3060dfaaa3dSBob Moore const char *module_name, 3070dfaaa3dSBob Moore u32 component_id, const void *pointer); 308e2f7a777SLen Brown 309e2f7a777SLen Brown void 310e2f7a777SLen Brown acpi_ut_trace_u32(u32 line_number, 311e2f7a777SLen Brown const char *function_name, 312e2f7a777SLen Brown const char *module_name, u32 component_id, u32 integer); 313e2f7a777SLen Brown 314e2f7a777SLen Brown void 315e2f7a777SLen Brown acpi_ut_trace_str(u32 line_number, 316e2f7a777SLen Brown const char *function_name, 3170dfaaa3dSBob Moore const char *module_name, 3180dfaaa3dSBob Moore u32 component_id, const char *string); 319e2f7a777SLen Brown 320e2f7a777SLen Brown void 321e2f7a777SLen Brown acpi_ut_exit(u32 line_number, 322e2f7a777SLen Brown const char *function_name, 323e2f7a777SLen Brown const char *module_name, u32 component_id); 324e2f7a777SLen Brown 325e2f7a777SLen Brown void 326e2f7a777SLen Brown acpi_ut_status_exit(u32 line_number, 327e2f7a777SLen Brown const char *function_name, 328e2f7a777SLen Brown const char *module_name, 329e2f7a777SLen Brown u32 component_id, acpi_status status); 330e2f7a777SLen Brown 331e2f7a777SLen Brown void 332e2f7a777SLen Brown acpi_ut_value_exit(u32 line_number, 333e2f7a777SLen Brown const char *function_name, 3345df7e6cbSBob Moore const char *module_name, u32 component_id, u64 value); 335e2f7a777SLen Brown 336e2f7a777SLen Brown void 337e2f7a777SLen Brown acpi_ut_ptr_exit(u32 line_number, 338e2f7a777SLen Brown const char *function_name, 339e2f7a777SLen Brown const char *module_name, u32 component_id, u8 *ptr); 340e2f7a777SLen Brown 34197171c6bSBob Moore void 3424857a94dSJung-uk Kim acpi_ut_str_exit(u32 line_number, 3434857a94dSJung-uk Kim const char *function_name, 3444857a94dSJung-uk Kim const char *module_name, u32 component_id, const char *string); 3454857a94dSJung-uk Kim 3464857a94dSJung-uk Kim void 34797171c6bSBob Moore acpi_ut_debug_dump_buffer(u8 *buffer, u32 count, u32 display, u32 component_id); 348e2f7a777SLen Brown 34997171c6bSBob Moore void acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 offset); 350e2f7a777SLen Brown 351846d6ef4SLv Zheng #ifdef ACPI_APPLICATION 352846d6ef4SLv Zheng void 353846d6ef4SLv Zheng acpi_ut_dump_buffer_to_file(ACPI_FILE file, 354846d6ef4SLv Zheng u8 *buffer, 355846d6ef4SLv Zheng u32 count, u32 display, u32 base_offset); 356846d6ef4SLv Zheng #endif 357846d6ef4SLv Zheng 358e2f7a777SLen Brown void acpi_ut_report_error(char *module_name, u32 line_number); 359e2f7a777SLen Brown 360e2f7a777SLen Brown void acpi_ut_report_info(char *module_name, u32 line_number); 361e2f7a777SLen Brown 362e2f7a777SLen Brown void acpi_ut_report_warning(char *module_name, u32 line_number); 363e2f7a777SLen Brown 364e2f7a777SLen Brown /* 365e2f7a777SLen Brown * utdelete - Object deletion and reference counts 366e2f7a777SLen Brown */ 367e2f7a777SLen Brown void acpi_ut_add_reference(union acpi_operand_object *object); 368e2f7a777SLen Brown 369e2f7a777SLen Brown void acpi_ut_remove_reference(union acpi_operand_object *object); 370e2f7a777SLen Brown 371e2f7a777SLen Brown void acpi_ut_delete_internal_package_object(union acpi_operand_object *object); 372e2f7a777SLen Brown 373e2f7a777SLen Brown void acpi_ut_delete_internal_simple_object(union acpi_operand_object *object); 374e2f7a777SLen Brown 375e2f7a777SLen Brown void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list); 376e2f7a777SLen Brown 377e2f7a777SLen Brown /* 378e2f7a777SLen Brown * uteval - object evaluation 379e2f7a777SLen Brown */ 380e2f7a777SLen Brown acpi_status 381e2f7a777SLen Brown acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node, 3820dfaaa3dSBob Moore const char *path, 383e2f7a777SLen Brown u32 expected_return_btypes, 384e2f7a777SLen Brown union acpi_operand_object **return_desc); 385e2f7a777SLen Brown 386e2f7a777SLen Brown acpi_status 3870dfaaa3dSBob Moore acpi_ut_evaluate_numeric_object(const char *object_name, 388e2f7a777SLen Brown struct acpi_namespace_node *device_node, 3895df7e6cbSBob Moore u64 *value); 390e2f7a777SLen Brown 391e2f7a777SLen Brown acpi_status 39215b8dd53SBob Moore acpi_ut_execute_STA(struct acpi_namespace_node *device_node, u32 *status_flags); 39315b8dd53SBob Moore 39415b8dd53SBob Moore acpi_status 39515b8dd53SBob Moore acpi_ut_execute_power_methods(struct acpi_namespace_node *device_node, 39615b8dd53SBob Moore const char **method_names, 39715b8dd53SBob Moore u8 method_count, u8 *out_values); 39815b8dd53SBob Moore 39915b8dd53SBob Moore /* 40015b8dd53SBob Moore * utids - device ID support 40115b8dd53SBob Moore */ 40215b8dd53SBob Moore acpi_status 403e2f7a777SLen Brown acpi_ut_execute_HID(struct acpi_namespace_node *device_node, 40478e25fefSLv Zheng struct acpi_pnp_device_id ** return_id); 405e2f7a777SLen Brown 406e2f7a777SLen Brown acpi_status 407e2f7a777SLen Brown acpi_ut_execute_UID(struct acpi_namespace_node *device_node, 40878e25fefSLv Zheng struct acpi_pnp_device_id ** return_id); 409e2f7a777SLen Brown 410e2f7a777SLen Brown acpi_status 41115b8dd53SBob Moore acpi_ut_execute_CID(struct acpi_namespace_node *device_node, 41278e25fefSLv Zheng struct acpi_pnp_device_id_list ** return_cid_list); 413e2f7a777SLen Brown 414f65358e5SSuravee Suthikulpanit acpi_status 415f65358e5SSuravee Suthikulpanit acpi_ut_execute_CLS(struct acpi_namespace_node *device_node, 416f65358e5SSuravee Suthikulpanit struct acpi_pnp_device_id **return_id); 417f65358e5SSuravee Suthikulpanit 418e2f7a777SLen Brown /* 4198a335a23SBob Moore * utlock - reader/writer locks 4208a335a23SBob Moore */ 4218a335a23SBob Moore acpi_status acpi_ut_create_rw_lock(struct acpi_rw_lock *lock); 4228a335a23SBob Moore 4238a335a23SBob Moore void acpi_ut_delete_rw_lock(struct acpi_rw_lock *lock); 4248a335a23SBob Moore 4258a335a23SBob Moore acpi_status acpi_ut_acquire_read_lock(struct acpi_rw_lock *lock); 4268a335a23SBob Moore 4278a335a23SBob Moore acpi_status acpi_ut_release_read_lock(struct acpi_rw_lock *lock); 4288a335a23SBob Moore 4298a335a23SBob Moore acpi_status acpi_ut_acquire_write_lock(struct acpi_rw_lock *lock); 4308a335a23SBob Moore 4318a335a23SBob Moore void acpi_ut_release_write_lock(struct acpi_rw_lock *lock); 4328a335a23SBob Moore 4338a335a23SBob Moore /* 434e2f7a777SLen Brown * utobject - internal object create/delete/cache routines 435e2f7a777SLen Brown */ 436e2f7a777SLen Brown union acpi_operand_object *acpi_ut_create_internal_object_dbg(const char 437e2f7a777SLen Brown *module_name, 438e2f7a777SLen Brown u32 line_number, 439e2f7a777SLen Brown u32 component_id, 440e2f7a777SLen Brown acpi_object_type 441e2f7a777SLen Brown type); 442e2f7a777SLen Brown 443e2f7a777SLen Brown void *acpi_ut_allocate_object_desc_dbg(const char *module_name, 444e2f7a777SLen Brown u32 line_number, u32 component_id); 445e2f7a777SLen Brown 446e2f7a777SLen Brown #define acpi_ut_create_internal_object(t) acpi_ut_create_internal_object_dbg (_acpi_module_name,__LINE__,_COMPONENT,t) 447e2f7a777SLen Brown #define acpi_ut_allocate_object_desc() acpi_ut_allocate_object_desc_dbg (_acpi_module_name,__LINE__,_COMPONENT) 448e2f7a777SLen Brown 449e2f7a777SLen Brown void acpi_ut_delete_object_desc(union acpi_operand_object *object); 450e2f7a777SLen Brown 451e2f7a777SLen Brown u8 acpi_ut_valid_internal_object(void *object); 452e2f7a777SLen Brown 453e2f7a777SLen Brown union acpi_operand_object *acpi_ut_create_package_object(u32 count); 454e2f7a777SLen Brown 455502f7efaSBob Moore union acpi_operand_object *acpi_ut_create_integer_object(u64 value); 456502f7efaSBob Moore 457e2f7a777SLen Brown union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size); 458e2f7a777SLen Brown 459e2f7a777SLen Brown union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size); 460e2f7a777SLen Brown 461e2f7a777SLen Brown acpi_status 462e2f7a777SLen Brown acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size *obj_length); 463e2f7a777SLen Brown 464e2f7a777SLen Brown /* 465b0ed7a91SLin Ming * utosi - Support for the _OSI predefined control method 466b0ed7a91SLin Ming */ 467b0ed7a91SLin Ming acpi_status acpi_ut_initialize_interfaces(void); 468b0ed7a91SLin Ming 469388a9902SJung-uk Kim acpi_status acpi_ut_interface_terminate(void); 470b0ed7a91SLin Ming 471b0ed7a91SLin Ming acpi_status acpi_ut_install_interface(acpi_string interface_name); 472b0ed7a91SLin Ming 473b0ed7a91SLin Ming acpi_status acpi_ut_remove_interface(acpi_string interface_name); 474b0ed7a91SLin Ming 4752cf9f5bcSLv Zheng acpi_status acpi_ut_update_interfaces(u8 action); 4762cf9f5bcSLv Zheng 477b0ed7a91SLin Ming struct acpi_interface_info *acpi_ut_get_interface(acpi_string interface_name); 478b0ed7a91SLin Ming 479b0ed7a91SLin Ming acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state); 480b0ed7a91SLin Ming 481b0ed7a91SLin Ming /* 482c34c82bcSBob Moore * utpredef - support for predefined names 483c34c82bcSBob Moore */ 484c34c82bcSBob Moore const union acpi_predefined_info *acpi_ut_get_next_predefined_method(const union 485c34c82bcSBob Moore acpi_predefined_info 486c34c82bcSBob Moore *this_name); 487c34c82bcSBob Moore 488c34c82bcSBob Moore const union acpi_predefined_info *acpi_ut_match_predefined_method(char *name); 489c34c82bcSBob Moore 4906306bf88SLv Zheng void acpi_ut_get_expected_return_types(char *buffer, u32 expected_btypes); 4916306bf88SLv Zheng 4926306bf88SLv Zheng #if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP) 493c34c82bcSBob Moore const union acpi_predefined_info *acpi_ut_match_resource_name(char *name); 494c34c82bcSBob Moore 495c34c82bcSBob Moore void 496c34c82bcSBob Moore acpi_ut_display_predefined_method(char *buffer, 497c34c82bcSBob Moore const union acpi_predefined_info *this_name, 498c34c82bcSBob Moore u8 multi_line); 499c34c82bcSBob Moore 500c34c82bcSBob Moore u32 acpi_ut_get_resource_bit_width(char *buffer, u16 types); 5016306bf88SLv Zheng #endif 502c34c82bcSBob Moore 503c34c82bcSBob Moore /* 504e2f7a777SLen Brown * utstate - Generic state creation/cache routines 505e2f7a777SLen Brown */ 506e2f7a777SLen Brown void 507e2f7a777SLen Brown acpi_ut_push_generic_state(union acpi_generic_state **list_head, 508e2f7a777SLen Brown union acpi_generic_state *state); 509e2f7a777SLen Brown 510e2f7a777SLen Brown union acpi_generic_state *acpi_ut_pop_generic_state(union acpi_generic_state 511e2f7a777SLen Brown **list_head); 512e2f7a777SLen Brown 513e2f7a777SLen Brown union acpi_generic_state *acpi_ut_create_generic_state(void); 514e2f7a777SLen Brown 515e2f7a777SLen Brown struct acpi_thread_state *acpi_ut_create_thread_state(void); 516e2f7a777SLen Brown 517e2f7a777SLen Brown union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_object 518e2f7a777SLen Brown *object, u16 action); 519e2f7a777SLen Brown 520e2f7a777SLen Brown union acpi_generic_state *acpi_ut_create_pkg_state(void *internal_object, 521e2f7a777SLen Brown void *external_object, 522a62a7117SBob Moore u32 index); 523e2f7a777SLen Brown 524e2f7a777SLen Brown acpi_status 525e2f7a777SLen Brown acpi_ut_create_update_state_and_push(union acpi_operand_object *object, 526e2f7a777SLen Brown u16 action, 527e2f7a777SLen Brown union acpi_generic_state **state_list); 528e2f7a777SLen Brown 529e2f7a777SLen Brown union acpi_generic_state *acpi_ut_create_control_state(void); 530e2f7a777SLen Brown 531e2f7a777SLen Brown void acpi_ut_delete_generic_state(union acpi_generic_state *state); 532e2f7a777SLen Brown 533e2f7a777SLen Brown /* 534e2f7a777SLen Brown * utmath 535e2f7a777SLen Brown */ 536e2f7a777SLen Brown acpi_status 5375df7e6cbSBob Moore acpi_ut_divide(u64 in_dividend, 5385df7e6cbSBob Moore u64 in_divisor, u64 *out_quotient, u64 *out_remainder); 539e2f7a777SLen Brown 540e2f7a777SLen Brown acpi_status 5415df7e6cbSBob Moore acpi_ut_short_divide(u64 in_dividend, 5425df7e6cbSBob Moore u32 divisor, u64 *out_quotient, u32 *out_remainder); 543e2f7a777SLen Brown 54465082bfcSLv Zheng acpi_status 54565082bfcSLv Zheng acpi_ut_short_multiply(u64 in_multiplicand, u32 multiplier, u64 *outproduct); 54665082bfcSLv Zheng 54765082bfcSLv Zheng acpi_status acpi_ut_short_shift_left(u64 operand, u32 count, u64 *out_result); 54865082bfcSLv Zheng 54965082bfcSLv Zheng acpi_status acpi_ut_short_shift_right(u64 operand, u32 count, u64 *out_result); 55065082bfcSLv Zheng 551e2f7a777SLen Brown /* 552e2f7a777SLen Brown * utmisc 553e2f7a777SLen Brown */ 554ae1b4769SBob Moore const struct acpi_exception_info *acpi_ut_validate_exception(acpi_status 555ae1b4769SBob Moore status); 556e2f7a777SLen Brown 55715b8dd53SBob Moore u8 acpi_ut_is_pci_root_bridge(char *id); 55815b8dd53SBob Moore 55917dd4dcfSBob Moore #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_NAMES_APP) 560e2f7a777SLen Brown u8 acpi_ut_is_aml_table(struct acpi_table_header *table); 5616306bf88SLv Zheng #endif 562e2f7a777SLen Brown 563e2f7a777SLen Brown acpi_status 564e2f7a777SLen Brown acpi_ut_walk_package_tree(union acpi_operand_object *source_object, 565e2f7a777SLen Brown void *target_object, 566e2f7a777SLen Brown acpi_pkg_callback walk_callback, void *context); 567e2f7a777SLen Brown 568e2f7a777SLen Brown /* Values for Base above (16=Hex, 10=Decimal) */ 569e2f7a777SLen Brown 570e2f7a777SLen Brown #define ACPI_ANY_BASE 0 571e2f7a777SLen Brown 572e2f7a777SLen Brown u32 acpi_ut_dword_byte_swap(u32 value); 573e2f7a777SLen Brown 574e2f7a777SLen Brown void acpi_ut_set_integer_width(u8 revision); 575e2f7a777SLen Brown 576e2f7a777SLen Brown #ifdef ACPI_DEBUG_OUTPUT 577e2f7a777SLen Brown void 578e2f7a777SLen Brown acpi_ut_display_init_pathname(u8 type, 579e2f7a777SLen Brown struct acpi_namespace_node *obj_handle, 5800dfaaa3dSBob Moore const char *path); 581e2f7a777SLen Brown #endif 582e2f7a777SLen Brown 583e2f7a777SLen Brown /* 58442f8fb75SBob Moore * utownerid - Support for Table/Method Owner IDs 58542f8fb75SBob Moore */ 58642f8fb75SBob Moore acpi_status acpi_ut_allocate_owner_id(acpi_owner_id *owner_id); 58742f8fb75SBob Moore 58842f8fb75SBob Moore void acpi_ut_release_owner_id(acpi_owner_id *owner_id); 58942f8fb75SBob Moore 59042f8fb75SBob Moore /* 591e2f7a777SLen Brown * utresrc 592e2f7a777SLen Brown */ 593e2f7a777SLen Brown acpi_status 594886308ecSBob Moore acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state, 595886308ecSBob Moore u8 *aml, 596e2f7a777SLen Brown acpi_size aml_length, 597e2f7a777SLen Brown acpi_walk_aml_callback user_function, 598e2f7a777SLen Brown void **context); 599e2f7a777SLen Brown 600886308ecSBob Moore acpi_status 601886308ecSBob Moore acpi_ut_validate_resource(struct acpi_walk_state *walk_state, 602886308ecSBob Moore void *aml, u8 *return_index); 603e2f7a777SLen Brown 604e2f7a777SLen Brown u32 acpi_ut_get_descriptor_length(void *aml); 605e2f7a777SLen Brown 606e2f7a777SLen Brown u16 acpi_ut_get_resource_length(void *aml); 607e2f7a777SLen Brown 608e2f7a777SLen Brown u8 acpi_ut_get_resource_header_length(void *aml); 609e2f7a777SLen Brown 610e2f7a777SLen Brown u8 acpi_ut_get_resource_type(void *aml); 611e2f7a777SLen Brown 612e2f7a777SLen Brown acpi_status 6136d33b6beSLv Zheng acpi_ut_get_resource_end_tag(union acpi_operand_object *obj_desc, u8 **end_tag); 614e2f7a777SLen Brown 615e2f7a777SLen Brown /* 61642f8fb75SBob Moore * utstring - String and character utilities 61742f8fb75SBob Moore */ 6180fb3adf8SBob Moore void acpi_ut_print_string(char *string, u16 max_length); 61942f8fb75SBob Moore 6206306bf88SLv Zheng #if defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP 62142f8fb75SBob Moore void ut_convert_backslashes(char *pathname); 6226306bf88SLv Zheng #endif 62342f8fb75SBob Moore 62442f8fb75SBob Moore void acpi_ut_repair_name(char *name); 62542f8fb75SBob Moore 626ee68d477SBob Moore #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT) 62773424473SBob Moore u8 acpi_ut_safe_strcpy(char *dest, acpi_size dest_size, char *source); 62873424473SBob Moore 629ee68d477SBob Moore void acpi_ut_safe_strncpy(char *dest, char *source, acpi_size dest_size); 630ee68d477SBob Moore 63173424473SBob Moore u8 acpi_ut_safe_strcat(char *dest, acpi_size dest_size, char *source); 63273424473SBob Moore 63373424473SBob Moore u8 63473424473SBob Moore acpi_ut_safe_strncat(char *dest, 63573424473SBob Moore acpi_size dest_size, 63673424473SBob Moore char *source, acpi_size max_transfer_length); 63773424473SBob Moore #endif 63873424473SBob Moore 63942f8fb75SBob Moore /* 640e2f7a777SLen Brown * utmutex - mutex support 641e2f7a777SLen Brown */ 642e2f7a777SLen Brown acpi_status acpi_ut_mutex_initialize(void); 643e2f7a777SLen Brown 644e2f7a777SLen Brown void acpi_ut_mutex_terminate(void); 645e2f7a777SLen Brown 646e2f7a777SLen Brown acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id); 647e2f7a777SLen Brown 648e2f7a777SLen Brown acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id); 649e2f7a777SLen Brown 650e2f7a777SLen Brown /* 651e2f7a777SLen Brown * utalloc - memory allocation and object caching 652e2f7a777SLen Brown */ 653e2f7a777SLen Brown acpi_status acpi_ut_create_caches(void); 654e2f7a777SLen Brown 655e2f7a777SLen Brown acpi_status acpi_ut_delete_caches(void); 656e2f7a777SLen Brown 657e2f7a777SLen Brown acpi_status acpi_ut_validate_buffer(struct acpi_buffer *buffer); 658e2f7a777SLen Brown 659e2f7a777SLen Brown acpi_status 660e2f7a777SLen Brown acpi_ut_initialize_buffer(struct acpi_buffer *buffer, 661e2f7a777SLen Brown acpi_size required_length); 662e2f7a777SLen Brown 663e2f7a777SLen Brown #ifdef ACPI_DBG_TRACK_ALLOCATIONS 664e2f7a777SLen Brown void *acpi_ut_allocate_and_track(acpi_size size, 665e2f7a777SLen Brown u32 component, const char *module, u32 line); 666e2f7a777SLen Brown 667e2f7a777SLen Brown void *acpi_ut_allocate_zeroed_and_track(acpi_size size, 668e2f7a777SLen Brown u32 component, 669e2f7a777SLen Brown const char *module, u32 line); 670e2f7a777SLen Brown 671e2f7a777SLen Brown void 672e2f7a777SLen Brown acpi_ut_free_and_track(void *address, 673e2f7a777SLen Brown u32 component, const char *module, u32 line); 674e2f7a777SLen Brown 675e2f7a777SLen Brown void acpi_ut_dump_allocation_info(void); 676e2f7a777SLen Brown 677e2f7a777SLen Brown void acpi_ut_dump_allocations(u32 component, const char *module); 678e2f7a777SLen Brown 679e2f7a777SLen Brown acpi_status 6800dfaaa3dSBob Moore acpi_ut_create_list(const char *list_name, 681e2f7a777SLen Brown u16 object_size, struct acpi_memory_list **return_cache); 682e2f7a777SLen Brown 683cc84e262SBob Moore #endif /* ACPI_DBG_TRACK_ALLOCATIONS */ 684cc84e262SBob Moore 685cc84e262SBob Moore /* 686f654c0feSLin Ming * utaddress - address range check 687f654c0feSLin Ming */ 688f654c0feSLin Ming acpi_status 689f654c0feSLin Ming acpi_ut_add_address_range(acpi_adr_space_type space_id, 690f654c0feSLin Ming acpi_physical_address address, 691f654c0feSLin Ming u32 length, struct acpi_namespace_node *region_node); 692f654c0feSLin Ming 693f654c0feSLin Ming void 694f654c0feSLin Ming acpi_ut_remove_address_range(acpi_adr_space_type space_id, 695f654c0feSLin Ming struct acpi_namespace_node *region_node); 696f654c0feSLin Ming 697f654c0feSLin Ming u32 698f654c0feSLin Ming acpi_ut_check_address_range(acpi_adr_space_type space_id, 699f654c0feSLin Ming acpi_physical_address address, u32 length, u8 warn); 700f654c0feSLin Ming 701f654c0feSLin Ming void acpi_ut_delete_address_lists(void); 702f654c0feSLin Ming 703f654c0feSLin Ming /* 704cc84e262SBob Moore * utxferror - various error/warning output functions 705cc84e262SBob Moore */ 70636056d0cSBob Moore ACPI_PRINTF_LIKE(5) 707cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE 708cc84e262SBob Moore acpi_ut_predefined_warning(const char *module_name, 709cc84e262SBob Moore u32 line_number, 710cc84e262SBob Moore char *pathname, 71167a72420SBob Moore u16 node_flags, const char *format, ...); 712cc84e262SBob Moore 71336056d0cSBob Moore ACPI_PRINTF_LIKE(5) 714cc84e262SBob Moore void ACPI_INTERNAL_VAR_XFACE 715cc84e262SBob Moore acpi_ut_predefined_info(const char *module_name, 716cc84e262SBob Moore u32 line_number, 71767a72420SBob Moore char *pathname, 71867a72420SBob Moore u16 node_flags, const char *format, ...); 719cc84e262SBob Moore 72036056d0cSBob Moore ACPI_PRINTF_LIKE(5) 721e1405ca5SBob Moore void ACPI_INTERNAL_VAR_XFACE 722e1405ca5SBob Moore acpi_ut_predefined_bios_error(const char *module_name, 723e1405ca5SBob Moore u32 line_number, 724e1405ca5SBob Moore char *pathname, 72567a72420SBob Moore u16 node_flags, const char *format, ...); 726e1405ca5SBob Moore 727cc84e262SBob Moore void 72816ccf829SBob Moore acpi_ut_prefixed_namespace_error(const char *module_name, 729cc84e262SBob Moore u32 line_number, 73016ccf829SBob Moore union acpi_generic_state *prefix_scope, 73116ccf829SBob Moore const char *internal_name, 73216ccf829SBob Moore acpi_status lookup_status); 733cc84e262SBob Moore 734cc84e262SBob Moore void 735cc84e262SBob Moore acpi_ut_method_error(const char *module_name, 736cc84e262SBob Moore u32 line_number, 737cc84e262SBob Moore const char *message, 738cc84e262SBob Moore struct acpi_namespace_node *node, 739cc84e262SBob Moore const char *path, acpi_status lookup_status); 740e2f7a777SLen Brown 741b944b29cSBob Moore /* 742b944b29cSBob Moore * Utility functions for ACPI names and IDs 743b944b29cSBob Moore */ 744b944b29cSBob Moore const struct ah_predefined_name *acpi_ah_match_predefined_name(char *nameseg); 745b944b29cSBob Moore 746e2b9035fSLv Zheng const struct ah_device_id *acpi_ah_match_hardware_id(char *hid); 747b944b29cSBob Moore 74873bbca04SBob Moore const char *acpi_ah_match_uuid(u8 *data); 74973bbca04SBob Moore 75080a648c1SLv Zheng /* 75173bbca04SBob Moore * utuuid -- UUID support functions 75273bbca04SBob Moore */ 7536306bf88SLv Zheng #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_HELP_APP) 75473bbca04SBob Moore void acpi_ut_convert_string_to_uuid(char *in_string, u8 *uuid_buffer); 75504da290dSErik Kaneda 75604da290dSErik Kaneda acpi_status acpi_ut_convert_uuid_to_string(char *uuid_buffer, char *out_string); 7576306bf88SLv Zheng #endif 75873bbca04SBob Moore 759e2f7a777SLen Brown #endif /* _ACUTILS_H */ 760