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 - 2020, 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
 210/*
 211 * nsarguments - Argument count/type checking for predefined/reserved names
 212 */
 213void
 214acpi_ns_check_argument_count(char *pathname,
 215                             struct acpi_namespace_node *node,
 216                             u32 user_param_count,
 217                             const union acpi_predefined_info *info);
 218
 219void
 220acpi_ns_check_acpi_compliance(char *pathname,
 221                              struct acpi_namespace_node *node,
 222                              const union acpi_predefined_info *predefined);
 223
 224void acpi_ns_check_argument_types(struct acpi_evaluate_info *info);
 225
 226/*
 227 * nspredef - Return value checking for predefined/reserved names
 228 */
 229acpi_status
 230acpi_ns_check_return_value(struct acpi_namespace_node *node,
 231                           struct acpi_evaluate_info *info,
 232                           u32 user_param_count,
 233                           acpi_status return_status,
 234                           union acpi_operand_object **return_object);
 235
 236acpi_status
 237acpi_ns_check_object_type(struct acpi_evaluate_info *info,
 238                          union acpi_operand_object **return_object_ptr,
 239                          u32 expected_btypes, u32 package_index);
 240
 241/*
 242 * nsprepkg - Validation of predefined name packages
 243 */
 244acpi_status
 245acpi_ns_check_package(struct acpi_evaluate_info *info,
 246                      union acpi_operand_object **return_object_ptr);
 247
 248/*
 249 * nsnames - Name and Scope manipulation
 250 */
 251u32 acpi_ns_opens_scope(acpi_object_type type);
 252
 253char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node);
 254
 255u32
 256acpi_ns_build_normalized_path(struct acpi_namespace_node *node,
 257                              char *full_path, u32 path_size, u8 no_trailing);
 258
 259char *acpi_ns_get_normalized_pathname(struct acpi_namespace_node *node,
 260                                      u8 no_trailing);
 261
 262char *acpi_ns_build_prefixed_pathname(union acpi_generic_state *prefix_scope,
 263                                      const char *internal_path);
 264
 265char *acpi_ns_name_of_current_scope(struct acpi_walk_state *walk_state);
 266
 267acpi_status
 268acpi_ns_handle_to_name(acpi_handle target_handle, struct acpi_buffer *buffer);
 269
 270acpi_status
 271acpi_ns_handle_to_pathname(acpi_handle target_handle,
 272                           struct acpi_buffer *buffer, u8 no_trailing);
 273
 274u8
 275acpi_ns_pattern_match(struct acpi_namespace_node *obj_node, char *search_for);
 276
 277acpi_status
 278acpi_ns_get_node_unlocked(struct acpi_namespace_node *prefix_node,
 279                          const char *external_pathname,
 280                          u32 flags, struct acpi_namespace_node **out_node);
 281
 282acpi_status
 283acpi_ns_get_node(struct acpi_namespace_node *prefix_node,
 284                 const char *external_pathname,
 285                 u32 flags, struct acpi_namespace_node **out_node);
 286
 287acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node);
 288
 289/*
 290 * nsobject - Object management for namespace nodes
 291 */
 292acpi_status
 293acpi_ns_attach_object(struct acpi_namespace_node *node,
 294                      union acpi_operand_object *object, acpi_object_type type);
 295
 296union acpi_operand_object *acpi_ns_get_attached_object(struct
 297                                                       acpi_namespace_node
 298                                                       *node);
 299
 300union acpi_operand_object *acpi_ns_get_secondary_object(union
 301                                                        acpi_operand_object
 302                                                        *obj_desc);
 303
 304acpi_status
 305acpi_ns_attach_data(struct acpi_namespace_node *node,
 306                    acpi_object_handler handler, void *data);
 307
 308acpi_status
 309acpi_ns_detach_data(struct acpi_namespace_node *node,
 310                    acpi_object_handler handler);
 311
 312acpi_status
 313acpi_ns_get_attached_data(struct acpi_namespace_node *node,
 314                          acpi_object_handler handler, void **data);
 315
 316/*
 317 * nsrepair - General return object repair for all
 318 * predefined methods/objects
 319 */
 320acpi_status
 321acpi_ns_simple_repair(struct acpi_evaluate_info *info,
 322                      u32 expected_btypes,
 323                      u32 package_index,
 324                      union acpi_operand_object **return_object_ptr);
 325
 326acpi_status
 327acpi_ns_wrap_with_package(struct acpi_evaluate_info *info,
 328                          union acpi_operand_object *original_object,
 329                          union acpi_operand_object **obj_desc_ptr);
 330
 331acpi_status
 332acpi_ns_repair_null_element(struct acpi_evaluate_info *info,
 333                            u32 expected_btypes,
 334                            u32 package_index,
 335                            union acpi_operand_object **return_object_ptr);
 336
 337void
 338acpi_ns_remove_null_elements(struct acpi_evaluate_info *info,
 339                             u8 package_type,
 340                             union acpi_operand_object *obj_desc);
 341
 342/*
 343 * nsrepair2 - Return object repair for specific
 344 * predefined methods/objects
 345 */
 346acpi_status
 347acpi_ns_complex_repairs(struct acpi_evaluate_info *info,
 348                        struct acpi_namespace_node *node,
 349                        acpi_status validate_status,
 350                        union acpi_operand_object **return_object_ptr);
 351
 352/*
 353 * nssearch - Namespace searching and entry
 354 */
 355acpi_status
 356acpi_ns_search_and_enter(u32 entry_name,
 357                         struct acpi_walk_state *walk_state,
 358                         struct acpi_namespace_node *node,
 359                         acpi_interpreter_mode interpreter_mode,
 360                         acpi_object_type type,
 361                         u32 flags, struct acpi_namespace_node **ret_node);
 362
 363acpi_status
 364acpi_ns_search_one_scope(u32 entry_name,
 365                         struct acpi_namespace_node *node,
 366                         acpi_object_type type,
 367                         struct acpi_namespace_node **ret_node);
 368
 369void
 370acpi_ns_install_node(struct acpi_walk_state *walk_state,
 371                     struct acpi_namespace_node *parent_node,
 372                     struct acpi_namespace_node *node, acpi_object_type type);
 373
 374/*
 375 * nsutils - Utility functions
 376 */
 377acpi_object_type acpi_ns_get_type(struct acpi_namespace_node *node);
 378
 379u32 acpi_ns_local(acpi_object_type type);
 380
 381void
 382acpi_ns_print_node_pathname(struct acpi_namespace_node *node, const char *msg);
 383
 384acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info);
 385
 386void acpi_ns_get_internal_name_length(struct acpi_namestring_info *info);
 387
 388acpi_status
 389acpi_ns_internalize_name(const char *dotted_name, char **converted_name);
 390
 391acpi_status
 392acpi_ns_externalize_name(u32 internal_name_length,
 393                         const char *internal_name,
 394                         u32 * converted_name_length, char **converted_name);
 395
 396struct acpi_namespace_node *acpi_ns_validate_handle(acpi_handle handle);
 397
 398void acpi_ns_terminate(void);
 399
 400#endif                          /* __ACNAMESP_H__ */
 401