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 - 2023, 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 | */ |
57 | acpi_status acpi_ns_initialize_objects(void); |
58 | |
59 | acpi_status acpi_ns_initialize_devices(u32 flags); |
60 | |
61 | acpi_status |
62 | acpi_ns_init_one_package(acpi_handle obj_handle, |
63 | u32 level, void *context, void **return_value); |
64 | |
65 | /* |
66 | * nsload - Namespace loading |
67 | */ |
68 | acpi_status acpi_ns_load_namespace(void); |
69 | |
70 | acpi_status |
71 | acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node); |
72 | |
73 | /* |
74 | * nswalk - walk the namespace |
75 | */ |
76 | acpi_status |
77 | acpi_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 | |
85 | struct acpi_namespace_node *acpi_ns_get_next_node(struct acpi_namespace_node |
86 | *parent, |
87 | struct acpi_namespace_node |
88 | *child); |
89 | |
90 | struct 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 | */ |
101 | acpi_status |
102 | acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node); |
103 | |
104 | acpi_status |
105 | acpi_ns_execute_table(u32 table_index, struct acpi_namespace_node *start_node); |
106 | |
107 | acpi_status |
108 | acpi_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 | */ |
115 | acpi_status acpi_ns_root_initialize(void); |
116 | |
117 | acpi_status |
118 | acpi_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 | */ |
129 | struct acpi_namespace_node *acpi_ns_create_node(u32 name); |
130 | |
131 | void acpi_ns_delete_node(struct acpi_namespace_node *node); |
132 | |
133 | void acpi_ns_remove_node(struct acpi_namespace_node *node); |
134 | |
135 | void |
136 | acpi_ns_delete_namespace_subtree(struct acpi_namespace_node *parent_handle); |
137 | |
138 | void acpi_ns_delete_namespace_by_owner(acpi_owner_id owner_id); |
139 | |
140 | void acpi_ns_detach_object(struct acpi_namespace_node *node); |
141 | |
142 | void acpi_ns_delete_children(struct acpi_namespace_node *parent); |
143 | |
144 | int acpi_ns_compare_names(char *name1, char *name2); |
145 | |
146 | /* |
147 | * nsconvert - Dynamic object conversion routines |
148 | */ |
149 | acpi_status |
150 | acpi_ns_convert_to_integer(union acpi_operand_object *original_object, |
151 | union acpi_operand_object **return_object); |
152 | |
153 | acpi_status |
154 | acpi_ns_convert_to_string(union acpi_operand_object *original_object, |
155 | union acpi_operand_object **return_object); |
156 | |
157 | acpi_status |
158 | acpi_ns_convert_to_buffer(union acpi_operand_object *original_object, |
159 | union acpi_operand_object **return_object); |
160 | |
161 | acpi_status |
162 | acpi_ns_convert_to_unicode(struct acpi_namespace_node *scope, |
163 | union acpi_operand_object *original_object, |
164 | union acpi_operand_object **return_object); |
165 | |
166 | acpi_status |
167 | acpi_ns_convert_to_resource(struct acpi_namespace_node *scope, |
168 | union acpi_operand_object *original_object, |
169 | union acpi_operand_object **return_object); |
170 | |
171 | acpi_status |
172 | acpi_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 | */ |
179 | void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth); |
180 | |
181 | void acpi_ns_dump_entry(acpi_handle handle, u32 debug_level); |
182 | |
183 | void |
184 | acpi_ns_dump_pathname(acpi_handle handle, |
185 | const char *msg, u32 level, u32 component); |
186 | |
187 | void acpi_ns_print_pathname(u32 num_segments, const char *pathname); |
188 | |
189 | acpi_status |
190 | acpi_ns_dump_one_object(acpi_handle obj_handle, |
191 | u32 level, void *context, void **return_value); |
192 | |
193 | void |
194 | acpi_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 | |
199 | void |
200 | acpi_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 | */ |
208 | acpi_status acpi_ns_evaluate(struct acpi_evaluate_info *info); |
209 | |
210 | /* |
211 | * nsarguments - Argument count/type checking for predefined/reserved names |
212 | */ |
213 | void |
214 | acpi_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 | |
219 | void |
220 | acpi_ns_check_acpi_compliance(char *pathname, |
221 | struct acpi_namespace_node *node, |
222 | const union acpi_predefined_info *predefined); |
223 | |
224 | void acpi_ns_check_argument_types(struct acpi_evaluate_info *info); |
225 | |
226 | /* |
227 | * nspredef - Return value checking for predefined/reserved names |
228 | */ |
229 | acpi_status |
230 | acpi_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 | |
236 | acpi_status |
237 | acpi_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 | */ |
244 | acpi_status |
245 | acpi_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 | */ |
251 | u32 acpi_ns_opens_scope(acpi_object_type type); |
252 | |
253 | char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node); |
254 | |
255 | u32 |
256 | acpi_ns_build_normalized_path(struct acpi_namespace_node *node, |
257 | char *full_path, u32 path_size, u8 no_trailing); |
258 | |
259 | void acpi_ns_normalize_pathname(char *original_path); |
260 | |
261 | char *acpi_ns_get_normalized_pathname(struct acpi_namespace_node *node, |
262 | u8 no_trailing); |
263 | |
264 | char *acpi_ns_build_prefixed_pathname(union acpi_generic_state *prefix_scope, |
265 | const char *internal_path); |
266 | |
267 | char *acpi_ns_name_of_current_scope(struct acpi_walk_state *walk_state); |
268 | |
269 | acpi_status |
270 | acpi_ns_handle_to_name(acpi_handle target_handle, struct acpi_buffer *buffer); |
271 | |
272 | acpi_status |
273 | acpi_ns_handle_to_pathname(acpi_handle target_handle, |
274 | struct acpi_buffer *buffer, u8 no_trailing); |
275 | |
276 | u8 |
277 | acpi_ns_pattern_match(struct acpi_namespace_node *obj_node, char *search_for); |
278 | |
279 | acpi_status |
280 | acpi_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 | |
284 | acpi_status |
285 | acpi_ns_get_node(struct acpi_namespace_node *prefix_node, |
286 | const char *external_pathname, |
287 | u32 flags, struct acpi_namespace_node **out_node); |
288 | |
289 | acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node); |
290 | |
291 | /* |
292 | * nsobject - Object management for namespace nodes |
293 | */ |
294 | acpi_status |
295 | acpi_ns_attach_object(struct acpi_namespace_node *node, |
296 | union acpi_operand_object *object, acpi_object_type type); |
297 | |
298 | union acpi_operand_object *acpi_ns_get_attached_object(struct |
299 | acpi_namespace_node |
300 | *node); |
301 | |
302 | union acpi_operand_object *acpi_ns_get_secondary_object(union |
303 | acpi_operand_object |
304 | *obj_desc); |
305 | |
306 | acpi_status |
307 | acpi_ns_attach_data(struct acpi_namespace_node *node, |
308 | acpi_object_handler handler, void *data); |
309 | |
310 | acpi_status |
311 | acpi_ns_detach_data(struct acpi_namespace_node *node, |
312 | acpi_object_handler handler); |
313 | |
314 | acpi_status |
315 | acpi_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 | */ |
322 | acpi_status |
323 | acpi_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 | |
328 | acpi_status |
329 | acpi_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 | |
333 | acpi_status |
334 | acpi_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 | |
339 | void |
340 | acpi_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 | */ |
348 | acpi_status |
349 | acpi_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 | */ |
357 | acpi_status |
358 | acpi_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 | |
365 | acpi_status |
366 | acpi_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 | |
371 | void |
372 | acpi_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 | */ |
379 | acpi_object_type acpi_ns_get_type(struct acpi_namespace_node *node); |
380 | |
381 | u32 acpi_ns_local(acpi_object_type type); |
382 | |
383 | void |
384 | acpi_ns_print_node_pathname(struct acpi_namespace_node *node, const char *msg); |
385 | |
386 | acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info); |
387 | |
388 | void acpi_ns_get_internal_name_length(struct acpi_namestring_info *info); |
389 | |
390 | acpi_status |
391 | acpi_ns_internalize_name(const char *dotted_name, char **converted_name); |
392 | |
393 | acpi_status |
394 | acpi_ns_externalize_name(u32 internal_name_length, |
395 | const char *internal_name, |
396 | u32 * converted_name_length, char **converted_name); |
397 | |
398 | struct acpi_namespace_node *acpi_ns_validate_handle(acpi_handle handle); |
399 | |
400 | void acpi_ns_terminate(void); |
401 | |
402 | #endif /* __ACNAMESP_H__ */ |
403 | |