linux/drivers/acpi/acpica/acnamesp.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
   2/******************************************************************************
   3 *
   4 * Name: acnamesp.h - Namespace subcomponent prototypes and defines
   5 *
   6 * Copyright (C) 2000 - 2019, Intel Corp.
   7 *
   8 *****************************************************************************/
   9
  10#ifndef __ACNAMESP_H__
  11#define __ACNAMESP_H__
  12
  13/* To search the entire name space, pass this as search_base */
  14
  15#define ACPI_NS_ALL                 ((acpi_handle)0)
  16
  17/*
  18 * Elements of acpi_ns_properties are bit significant
  19 * and should be one-to-one with values of acpi_object_type
  20 */
  21#define ACPI_NS_NORMAL              0
  22#define ACPI_NS_NEWSCOPE            1   /* a definition of this type opens a name scope */
  23#define ACPI_NS_LOCAL               2   /* suppress search of enclosing scopes */
  24
  25/* Flags for acpi_ns_lookup, acpi_ns_search_and_enter */
  26
  27#define ACPI_NS_NO_UPSEARCH         0
  28#define ACPI_NS_SEARCH_PARENT       0x0001
  29#define ACPI_NS_DONT_OPEN_SCOPE     0x0002
  30#define ACPI_NS_NO_PEER_SEARCH      0x0004
  31#define ACPI_NS_ERROR_IF_FOUND      0x0008
  32#define ACPI_NS_PREFIX_IS_SCOPE     0x0010
  33#define ACPI_NS_EXTERNAL            0x0020
  34#define ACPI_NS_TEMPORARY           0x0040
  35#define ACPI_NS_OVERRIDE_IF_FOUND   0x0080
  36#define ACPI_NS_EARLY_INIT          0x0100
  37#define ACPI_NS_PREFIX_MUST_EXIST   0x0200
  38
  39/* Flags for acpi_ns_walk_namespace */
  40
  41#define ACPI_NS_WALK_NO_UNLOCK      0
  42#define ACPI_NS_WALK_UNLOCK         0x01
  43#define ACPI_NS_WALK_TEMP_NODES     0x02
  44
  45/* Object is not a package element */
  46
  47#define ACPI_NOT_PACKAGE_ELEMENT    ACPI_UINT32_MAX
  48#define ACPI_ALL_PACKAGE_ELEMENTS   (ACPI_UINT32_MAX-1)
  49
  50/* Always emit warning message, not dependent on node flags */
  51
  52#define ACPI_WARN_ALWAYS            0
  53
  54/*
  55 * nsinit - Namespace initialization
  56 */
  57acpi_status acpi_ns_initialize_objects(void);
  58
  59acpi_status acpi_ns_initialize_devices(u32 flags);
  60
  61acpi_status
  62acpi_ns_init_one_package(acpi_handle obj_handle,
  63                         u32 level, void *context, void **return_value);
  64
  65/*
  66 * nsload -  Namespace loading
  67 */
  68acpi_status acpi_ns_load_namespace(void);
  69
  70acpi_status
  71acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node);
  72
  73/*
  74 * nswalk - walk the namespace
  75 */
  76acpi_status
  77acpi_ns_walk_namespace(acpi_object_type type,
  78                       acpi_handle start_object,
  79                       u32 max_depth,
  80                       u32 flags,
  81                       acpi_walk_callback descending_callback,
  82                       acpi_walk_callback ascending_callback,
  83                       void *context, void **return_value);
  84
  85struct acpi_namespace_node *acpi_ns_get_next_node(struct acpi_namespace_node
  86                                                  *parent,
  87                                                  struct acpi_namespace_node
  88                                                  *child);
  89
  90struct acpi_namespace_node *acpi_ns_get_next_node_typed(acpi_object_type type,
  91                                                        struct
  92                                                        acpi_namespace_node
  93                                                        *parent,
  94                                                        struct
  95                                                        acpi_namespace_node
  96                                                        *child);
  97
  98/*
  99 * nsparse - table parsing
 100 */
 101acpi_status
 102acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node);
 103
 104acpi_status
 105acpi_ns_execute_table(u32 table_index, struct acpi_namespace_node *start_node);
 106
 107acpi_status
 108acpi_ns_one_complete_parse(u32 pass_number,
 109                           u32 table_index,
 110                           struct acpi_namespace_node *start_node);
 111
 112/*
 113 * nsaccess - Top-level namespace access
 114 */
 115acpi_status acpi_ns_root_initialize(void);
 116
 117acpi_status
 118acpi_ns_lookup(union acpi_generic_state *scope_info,
 119               char *name,
 120               acpi_object_type type,
 121               acpi_interpreter_mode interpreter_mode,
 122               u32 flags,
 123               struct acpi_walk_state *walk_state,
 124               struct acpi_namespace_node **ret_node);
 125
 126/*
 127 * nsalloc - Named object allocation/deallocation
 128 */
 129struct acpi_namespace_node *acpi_ns_create_node(u32 name);
 130
 131void acpi_ns_delete_node(struct acpi_namespace_node *node);
 132
 133void acpi_ns_remove_node(struct acpi_namespace_node *node);
 134
 135void
 136acpi_ns_delete_namespace_subtree(struct acpi_namespace_node *parent_handle);
 137
 138void acpi_ns_delete_namespace_by_owner(acpi_owner_id owner_id);
 139
 140void acpi_ns_detach_object(struct acpi_namespace_node *node);
 141
 142void acpi_ns_delete_children(struct acpi_namespace_node *parent);
 143
 144int acpi_ns_compare_names(char *name1, char *name2);
 145
 146/*
 147 * nsconvert - Dynamic object conversion routines
 148 */
 149acpi_status
 150acpi_ns_convert_to_integer(union acpi_operand_object *original_object,
 151                           union acpi_operand_object **return_object);
 152
 153acpi_status
 154acpi_ns_convert_to_string(union acpi_operand_object *original_object,
 155                          union acpi_operand_object **return_object);
 156
 157acpi_status
 158acpi_ns_convert_to_buffer(union acpi_operand_object *original_object,
 159                          union acpi_operand_object **return_object);
 160
 161acpi_status
 162acpi_ns_convert_to_unicode(struct acpi_namespace_node *scope,
 163                           union acpi_operand_object *original_object,
 164                           union acpi_operand_object **return_object);
 165
 166acpi_status
 167acpi_ns_convert_to_resource(struct acpi_namespace_node *scope,
 168                            union acpi_operand_object *original_object,
 169                            union acpi_operand_object **return_object);
 170
 171acpi_status
 172acpi_ns_convert_to_reference(struct acpi_namespace_node *scope,
 173                             union acpi_operand_object *original_object,
 174                             union acpi_operand_object **return_object);
 175
 176/*
 177 * nsdump - Namespace dump/print utilities
 178 */
 179void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth);
 180
 181void acpi_ns_dump_entry(acpi_handle handle, u32 debug_level);
 182
 183void
 184acpi_ns_dump_pathname(acpi_handle handle,
 185                      const char *msg, u32 level, u32 component);
 186
 187void acpi_ns_print_pathname(u32 num_segments, const char *pathname);
 188
 189acpi_status
 190acpi_ns_dump_one_object(acpi_handle obj_handle,
 191                        u32 level, void *context, void **return_value);
 192
 193void
 194acpi_ns_dump_objects(acpi_object_type type,
 195                     u8 display_type,
 196                     u32 max_depth,
 197                     acpi_owner_id owner_id, acpi_handle start_handle);
 198
 199void
 200acpi_ns_dump_object_paths(acpi_object_type type,
 201                          u8 display_type,
 202                          u32 max_depth,
 203                          acpi_owner_id owner_id, acpi_handle start_handle);
 204
 205/*
 206 * nseval - Namespace evaluation functions
 207 */
 208acpi_status acpi_ns_evaluate(struct acpi_evaluate_info *info);
 209
 210void acpi_ns_exec_module_code_list(void);
 211
 212/*
 213 * nsarguments - Argument count/type checking for predefined/reserved names
 214 */
 215void
 216acpi_ns_check_argument_count(char *pathname,
 217                             struct acpi_namespace_node *node,
 218                             u32 user_param_count,
 219                             const union acpi_predefined_info *info);
 220
 221void
 222acpi_ns_check_acpi_compliance(char *pathname,
 223                              struct acpi_namespace_node *node,
 224                              const union acpi_predefined_info *predefined);
 225
 226void acpi_ns_check_argument_types(struct acpi_evaluate_info *info);
 227
 228/*
 229 * nspredef - Return value checking for predefined/reserved names
 230 */
 231acpi_status
 232acpi_ns_check_return_value(struct acpi_namespace_node *node,
 233                           struct acpi_evaluate_info *info,
 234                           u32 user_param_count,
 235                           acpi_status return_status,
 236                           union acpi_operand_object **return_object);
 237
 238acpi_status
 239acpi_ns_check_object_type(struct acpi_evaluate_info *info,
 240                          union acpi_operand_object **return_object_ptr,
 241                          u32 expected_btypes, u32 package_index);
 242
 243/*
 244 * nsprepkg - Validation of predefined name packages
 245 */
 246acpi_status
 247acpi_ns_check_package(struct acpi_evaluate_info *info,
 248                      union acpi_operand_object **return_object_ptr);
 249
 250/*
 251 * nsnames - Name and Scope manipulation
 252 */
 253u32 acpi_ns_opens_scope(acpi_object_type type);
 254
 255char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node);
 256
 257u32
 258acpi_ns_build_normalized_path(struct acpi_namespace_node *node,
 259                              char *full_path, u32 path_size, u8 no_trailing);
 260
 261char *acpi_ns_get_normalized_pathname(struct acpi_namespace_node *node,
 262                                      u8 no_trailing);
 263
 264char *acpi_ns_build_prefixed_pathname(union acpi_generic_state *prefix_scope,
 265                                      const char *internal_path);
 266
 267char *acpi_ns_name_of_current_scope(struct acpi_walk_state *walk_state);
 268
 269acpi_status
 270acpi_ns_handle_to_name(acpi_handle target_handle, struct acpi_buffer *buffer);
 271
 272acpi_status
 273acpi_ns_handle_to_pathname(acpi_handle target_handle,
 274                           struct acpi_buffer *buffer, u8 no_trailing);
 275
 276u8
 277acpi_ns_pattern_match(struct acpi_namespace_node *obj_node, char *search_for);
 278
 279acpi_status
 280acpi_ns_get_node_unlocked(struct acpi_namespace_node *prefix_node,
 281                          const char *external_pathname,
 282                          u32 flags, struct acpi_namespace_node **out_node);
 283
 284acpi_status
 285acpi_ns_get_node(struct acpi_namespace_node *prefix_node,
 286                 const char *external_pathname,
 287                 u32 flags, struct acpi_namespace_node **out_node);
 288
 289acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node);
 290
 291/*
 292 * nsobject - Object management for namespace nodes
 293 */
 294acpi_status
 295acpi_ns_attach_object(struct acpi_namespace_node *node,
 296                      union acpi_operand_object *object, acpi_object_type type);
 297
 298union acpi_operand_object *acpi_ns_get_attached_object(struct
 299                                                       acpi_namespace_node
 300                                                       *node);
 301
 302union acpi_operand_object *acpi_ns_get_secondary_object(union
 303                                                        acpi_operand_object
 304                                                        *obj_desc);
 305
 306acpi_status
 307acpi_ns_attach_data(struct acpi_namespace_node *node,
 308                    acpi_object_handler handler, void *data);
 309
 310acpi_status
 311acpi_ns_detach_data(struct acpi_namespace_node *node,
 312                    acpi_object_handler handler);
 313
 314acpi_status
 315acpi_ns_get_attached_data(struct acpi_namespace_node *node,
 316                          acpi_object_handler handler, void **data);
 317
 318/*
 319 * nsrepair - General return object repair for all
 320 * predefined methods/objects
 321 */
 322acpi_status
 323acpi_ns_simple_repair(struct acpi_evaluate_info *info,
 324                      u32 expected_btypes,
 325                      u32 package_index,
 326                      union acpi_operand_object **return_object_ptr);
 327
 328acpi_status
 329acpi_ns_wrap_with_package(struct acpi_evaluate_info *info,
 330                          union acpi_operand_object *original_object,
 331                          union acpi_operand_object **obj_desc_ptr);
 332
 333acpi_status
 334acpi_ns_repair_null_element(struct acpi_evaluate_info *info,
 335                            u32 expected_btypes,
 336                            u32 package_index,
 337                            union acpi_operand_object **return_object_ptr);
 338
 339void
 340acpi_ns_remove_null_elements(struct acpi_evaluate_info *info,
 341                             u8 package_type,
 342                             union acpi_operand_object *obj_desc);
 343
 344/*
 345 * nsrepair2 - Return object repair for specific
 346 * predefined methods/objects
 347 */
 348acpi_status
 349acpi_ns_complex_repairs(struct acpi_evaluate_info *info,
 350                        struct acpi_namespace_node *node,
 351                        acpi_status validate_status,
 352                        union acpi_operand_object **return_object_ptr);
 353
 354/*
 355 * nssearch - Namespace searching and entry
 356 */
 357acpi_status
 358acpi_ns_search_and_enter(u32 entry_name,
 359                         struct acpi_walk_state *walk_state,
 360                         struct acpi_namespace_node *node,
 361                         acpi_interpreter_mode interpreter_mode,
 362                         acpi_object_type type,
 363                         u32 flags, struct acpi_namespace_node **ret_node);
 364
 365acpi_status
 366acpi_ns_search_one_scope(u32 entry_name,
 367                         struct acpi_namespace_node *node,
 368                         acpi_object_type type,
 369                         struct acpi_namespace_node **ret_node);
 370
 371void
 372acpi_ns_install_node(struct acpi_walk_state *walk_state,
 373                     struct acpi_namespace_node *parent_node,
 374                     struct acpi_namespace_node *node, acpi_object_type type);
 375
 376/*
 377 * nsutils - Utility functions
 378 */
 379acpi_object_type acpi_ns_get_type(struct acpi_namespace_node *node);
 380
 381u32 acpi_ns_local(acpi_object_type type);
 382
 383void
 384acpi_ns_print_node_pathname(struct acpi_namespace_node *node, const char *msg);
 385
 386acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info);
 387
 388void acpi_ns_get_internal_name_length(struct acpi_namestring_info *info);
 389
 390acpi_status
 391acpi_ns_internalize_name(const char *dotted_name, char **converted_name);
 392
 393acpi_status
 394acpi_ns_externalize_name(u32 internal_name_length,
 395                         const char *internal_name,
 396                         u32 * converted_name_length, char **converted_name);
 397
 398struct acpi_namespace_node *acpi_ns_validate_handle(acpi_handle handle);
 399
 400void acpi_ns_terminate(void);
 401
 402#endif                          /* __ACNAMESP_H__ */
 403