xref: /freebsd/sys/contrib/dev/acpica/include/acnamesp.h (revision 8a166cafe0965f6bd72cd3d2f5372704f05cb5e8)
1 /******************************************************************************
2  *
3  * Name: acnamesp.h - Namespace subcomponent prototypes and defines
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2013, Intel Corp.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions, and the following disclaimer,
16  *    without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  *    substantially similar to the "NO WARRANTY" disclaimer below
19  *    ("Disclaimer") and any redistribution must be conditioned upon
20  *    including a substantially similar Disclaimer requirement for further
21  *    binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  *    of any contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43 
44 #ifndef __ACNAMESP_H__
45 #define __ACNAMESP_H__
46 
47 
48 /* To search the entire name space, pass this as SearchBase */
49 
50 #define ACPI_NS_ALL                 ((ACPI_HANDLE)0)
51 
52 /*
53  * Elements of AcpiNsProperties are bit significant
54  * and should be one-to-one with values of ACPI_OBJECT_TYPE
55  */
56 #define ACPI_NS_NORMAL              0
57 #define ACPI_NS_NEWSCOPE            1   /* a definition of this type opens a name scope */
58 #define ACPI_NS_LOCAL               2   /* suppress search of enclosing scopes */
59 
60 /* Flags for AcpiNsLookup, AcpiNsSearchAndEnter */
61 
62 #define ACPI_NS_NO_UPSEARCH         0
63 #define ACPI_NS_SEARCH_PARENT       0x01
64 #define ACPI_NS_DONT_OPEN_SCOPE     0x02
65 #define ACPI_NS_NO_PEER_SEARCH      0x04
66 #define ACPI_NS_ERROR_IF_FOUND      0x08
67 #define ACPI_NS_PREFIX_IS_SCOPE     0x10
68 #define ACPI_NS_EXTERNAL            0x20
69 #define ACPI_NS_TEMPORARY           0x40
70 
71 /* Flags for AcpiNsWalkNamespace */
72 
73 #define ACPI_NS_WALK_NO_UNLOCK      0
74 #define ACPI_NS_WALK_UNLOCK         0x01
75 #define ACPI_NS_WALK_TEMP_NODES     0x02
76 
77 /* Object is not a package element */
78 
79 #define ACPI_NOT_PACKAGE_ELEMENT    ACPI_UINT32_MAX
80 
81 /* Always emit warning message, not dependent on node flags */
82 
83 #define ACPI_WARN_ALWAYS            0
84 
85 
86 /*
87  * nsinit - Namespace initialization
88  */
89 ACPI_STATUS
90 AcpiNsInitializeObjects (
91     void);
92 
93 ACPI_STATUS
94 AcpiNsInitializeDevices (
95     void);
96 
97 
98 /*
99  * nsload -  Namespace loading
100  */
101 ACPI_STATUS
102 AcpiNsLoadNamespace (
103     void);
104 
105 ACPI_STATUS
106 AcpiNsLoadTable (
107     UINT32                  TableIndex,
108     ACPI_NAMESPACE_NODE     *Node);
109 
110 
111 /*
112  * nswalk - walk the namespace
113  */
114 ACPI_STATUS
115 AcpiNsWalkNamespace (
116     ACPI_OBJECT_TYPE        Type,
117     ACPI_HANDLE             StartObject,
118     UINT32                  MaxDepth,
119     UINT32                  Flags,
120     ACPI_WALK_CALLBACK      PreOrderVisit,
121     ACPI_WALK_CALLBACK      PostOrderVisit,
122     void                    *Context,
123     void                    **ReturnValue);
124 
125 ACPI_NAMESPACE_NODE *
126 AcpiNsGetNextNode (
127     ACPI_NAMESPACE_NODE     *Parent,
128     ACPI_NAMESPACE_NODE     *Child);
129 
130 ACPI_NAMESPACE_NODE *
131 AcpiNsGetNextNodeTyped (
132     ACPI_OBJECT_TYPE        Type,
133     ACPI_NAMESPACE_NODE     *Parent,
134     ACPI_NAMESPACE_NODE     *Child);
135 
136 /*
137  * nsparse - table parsing
138  */
139 ACPI_STATUS
140 AcpiNsParseTable (
141     UINT32                  TableIndex,
142     ACPI_NAMESPACE_NODE     *StartNode);
143 
144 ACPI_STATUS
145 AcpiNsOneCompleteParse (
146     UINT32                  PassNumber,
147     UINT32                  TableIndex,
148     ACPI_NAMESPACE_NODE     *StartNode);
149 
150 
151 /*
152  * nsaccess - Top-level namespace access
153  */
154 ACPI_STATUS
155 AcpiNsRootInitialize (
156     void);
157 
158 ACPI_STATUS
159 AcpiNsLookup (
160     ACPI_GENERIC_STATE      *ScopeInfo,
161     char                    *Name,
162     ACPI_OBJECT_TYPE        Type,
163     ACPI_INTERPRETER_MODE   InterpreterMode,
164     UINT32                  Flags,
165     ACPI_WALK_STATE         *WalkState,
166     ACPI_NAMESPACE_NODE     **RetNode);
167 
168 
169 /*
170  * nsalloc - Named object allocation/deallocation
171  */
172 ACPI_NAMESPACE_NODE *
173 AcpiNsCreateNode (
174     UINT32                  Name);
175 
176 void
177 AcpiNsDeleteNode (
178     ACPI_NAMESPACE_NODE     *Node);
179 
180 void
181 AcpiNsRemoveNode (
182     ACPI_NAMESPACE_NODE     *Node);
183 
184 void
185 AcpiNsDeleteNamespaceSubtree (
186     ACPI_NAMESPACE_NODE     *ParentHandle);
187 
188 void
189 AcpiNsDeleteNamespaceByOwner (
190     ACPI_OWNER_ID           OwnerId);
191 
192 void
193 AcpiNsDetachObject (
194     ACPI_NAMESPACE_NODE     *Node);
195 
196 void
197 AcpiNsDeleteChildren (
198     ACPI_NAMESPACE_NODE     *Parent);
199 
200 int
201 AcpiNsCompareNames (
202     char                    *Name1,
203     char                    *Name2);
204 
205 
206 /*
207  * nsdump - Namespace dump/print utilities
208  */
209 void
210 AcpiNsDumpTables (
211     ACPI_HANDLE             SearchBase,
212     UINT32                  MaxDepth);
213 
214 void
215 AcpiNsDumpEntry (
216     ACPI_HANDLE             Handle,
217     UINT32                  DebugLevel);
218 
219 void
220 AcpiNsDumpPathname (
221     ACPI_HANDLE             Handle,
222     char                    *Msg,
223     UINT32                  Level,
224     UINT32                  Component);
225 
226 void
227 AcpiNsPrintPathname (
228     UINT32                  NumSegments,
229     char                    *Pathname);
230 
231 ACPI_STATUS
232 AcpiNsDumpOneObject (
233     ACPI_HANDLE             ObjHandle,
234     UINT32                  Level,
235     void                    *Context,
236     void                    **ReturnValue);
237 
238 void
239 AcpiNsDumpObjects (
240     ACPI_OBJECT_TYPE        Type,
241     UINT8                   DisplayType,
242     UINT32                  MaxDepth,
243     ACPI_OWNER_ID           OwnerId,
244     ACPI_HANDLE             StartHandle);
245 
246 
247 /*
248  * nseval - Namespace evaluation functions
249  */
250 ACPI_STATUS
251 AcpiNsEvaluate (
252     ACPI_EVALUATE_INFO      *Info);
253 
254 void
255 AcpiNsExecModuleCodeList (
256     void);
257 
258 
259 /*
260  * nspredef - Support for predefined/reserved names
261  */
262 ACPI_STATUS
263 AcpiNsCheckPredefinedNames (
264     ACPI_NAMESPACE_NODE     *Node,
265     UINT32                  UserParamCount,
266     ACPI_STATUS             ReturnStatus,
267     ACPI_OPERAND_OBJECT     **ReturnObject);
268 
269 const ACPI_PREDEFINED_INFO *
270 AcpiNsCheckForPredefinedName (
271     ACPI_NAMESPACE_NODE     *Node);
272 
273 void
274 AcpiNsCheckParameterCount (
275     char                        *Pathname,
276     ACPI_NAMESPACE_NODE         *Node,
277     UINT32                      UserParamCount,
278     const ACPI_PREDEFINED_INFO  *Info);
279 
280 ACPI_STATUS
281 AcpiNsCheckObjectType (
282     ACPI_PREDEFINED_DATA        *Data,
283     ACPI_OPERAND_OBJECT         **ReturnObjectPtr,
284     UINT32                      ExpectedBtypes,
285     UINT32                      PackageIndex);
286 
287 
288 /*
289  * nsprepkg - Validation of predefined name packages
290  */
291 ACPI_STATUS
292 AcpiNsCheckPackage (
293     ACPI_PREDEFINED_DATA        *Data,
294     ACPI_OPERAND_OBJECT         **ReturnObjectPtr);
295 
296 
297 /*
298  * nsnames - Name and Scope manipulation
299  */
300 UINT32
301 AcpiNsOpensScope (
302     ACPI_OBJECT_TYPE        Type);
303 
304 ACPI_STATUS
305 AcpiNsBuildExternalPath (
306     ACPI_NAMESPACE_NODE     *Node,
307     ACPI_SIZE               Size,
308     char                    *NameBuffer);
309 
310 char *
311 AcpiNsGetExternalPathname (
312     ACPI_NAMESPACE_NODE     *Node);
313 
314 char *
315 AcpiNsNameOfCurrentScope (
316     ACPI_WALK_STATE         *WalkState);
317 
318 ACPI_STATUS
319 AcpiNsHandleToPathname (
320     ACPI_HANDLE             TargetHandle,
321     ACPI_BUFFER             *Buffer);
322 
323 BOOLEAN
324 AcpiNsPatternMatch (
325     ACPI_NAMESPACE_NODE     *ObjNode,
326     char                    *SearchFor);
327 
328 ACPI_STATUS
329 AcpiNsGetNode (
330     ACPI_NAMESPACE_NODE     *PrefixNode,
331     const char              *ExternalPathname,
332     UINT32                  Flags,
333     ACPI_NAMESPACE_NODE     **OutNode);
334 
335 ACPI_SIZE
336 AcpiNsGetPathnameLength (
337     ACPI_NAMESPACE_NODE     *Node);
338 
339 
340 /*
341  * nsobject - Object management for namespace nodes
342  */
343 ACPI_STATUS
344 AcpiNsAttachObject (
345     ACPI_NAMESPACE_NODE     *Node,
346     ACPI_OPERAND_OBJECT     *Object,
347     ACPI_OBJECT_TYPE        Type);
348 
349 ACPI_OPERAND_OBJECT *
350 AcpiNsGetAttachedObject (
351     ACPI_NAMESPACE_NODE     *Node);
352 
353 ACPI_OPERAND_OBJECT *
354 AcpiNsGetSecondaryObject (
355     ACPI_OPERAND_OBJECT     *ObjDesc);
356 
357 ACPI_STATUS
358 AcpiNsAttachData (
359     ACPI_NAMESPACE_NODE     *Node,
360     ACPI_OBJECT_HANDLER     Handler,
361     void                    *Data);
362 
363 ACPI_STATUS
364 AcpiNsDetachData (
365     ACPI_NAMESPACE_NODE     *Node,
366     ACPI_OBJECT_HANDLER     Handler);
367 
368 ACPI_STATUS
369 AcpiNsGetAttachedData (
370     ACPI_NAMESPACE_NODE     *Node,
371     ACPI_OBJECT_HANDLER     Handler,
372     void                    **Data);
373 
374 
375 /*
376  * nsrepair - General return object repair for all
377  * predefined methods/objects
378  */
379 ACPI_STATUS
380 AcpiNsRepairObject (
381     ACPI_PREDEFINED_DATA    *Data,
382     UINT32                  ExpectedBtypes,
383     UINT32                  PackageIndex,
384     ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
385 
386 ACPI_STATUS
387 AcpiNsWrapWithPackage (
388     ACPI_PREDEFINED_DATA    *Data,
389     ACPI_OPERAND_OBJECT     *OriginalObject,
390     ACPI_OPERAND_OBJECT     **ObjDescPtr);
391 
392 ACPI_STATUS
393 AcpiNsRepairNullElement (
394     ACPI_PREDEFINED_DATA    *Data,
395     UINT32                  ExpectedBtypes,
396     UINT32                  PackageIndex,
397     ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
398 
399 void
400 AcpiNsRemoveNullElements (
401     ACPI_PREDEFINED_DATA    *Data,
402     UINT8                   PackageType,
403     ACPI_OPERAND_OBJECT     *ObjDesc);
404 
405 
406 /*
407  * nsrepair2 - Return object repair for specific
408  * predefined methods/objects
409  */
410 ACPI_STATUS
411 AcpiNsComplexRepairs (
412     ACPI_PREDEFINED_DATA    *Data,
413     ACPI_NAMESPACE_NODE     *Node,
414     ACPI_STATUS             ValidateStatus,
415     ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
416 
417 
418 /*
419  * nssearch - Namespace searching and entry
420  */
421 ACPI_STATUS
422 AcpiNsSearchAndEnter (
423     UINT32                  EntryName,
424     ACPI_WALK_STATE         *WalkState,
425     ACPI_NAMESPACE_NODE     *Node,
426     ACPI_INTERPRETER_MODE   InterpreterMode,
427     ACPI_OBJECT_TYPE        Type,
428     UINT32                  Flags,
429     ACPI_NAMESPACE_NODE     **RetNode);
430 
431 ACPI_STATUS
432 AcpiNsSearchOneScope (
433     UINT32                  EntryName,
434     ACPI_NAMESPACE_NODE     *Node,
435     ACPI_OBJECT_TYPE        Type,
436     ACPI_NAMESPACE_NODE     **RetNode);
437 
438 void
439 AcpiNsInstallNode (
440     ACPI_WALK_STATE         *WalkState,
441     ACPI_NAMESPACE_NODE     *ParentNode,
442     ACPI_NAMESPACE_NODE     *Node,
443     ACPI_OBJECT_TYPE        Type);
444 
445 
446 /*
447  * nsutils - Utility functions
448  */
449 ACPI_OBJECT_TYPE
450 AcpiNsGetType (
451     ACPI_NAMESPACE_NODE     *Node);
452 
453 UINT32
454 AcpiNsLocal (
455     ACPI_OBJECT_TYPE        Type);
456 
457 void
458 AcpiNsPrintNodePathname (
459     ACPI_NAMESPACE_NODE     *Node,
460     const char              *Msg);
461 
462 ACPI_STATUS
463 AcpiNsBuildInternalName (
464     ACPI_NAMESTRING_INFO    *Info);
465 
466 void
467 AcpiNsGetInternalNameLength (
468     ACPI_NAMESTRING_INFO    *Info);
469 
470 ACPI_STATUS
471 AcpiNsInternalizeName (
472     const char              *DottedName,
473     char                    **ConvertedName);
474 
475 ACPI_STATUS
476 AcpiNsExternalizeName (
477     UINT32                  InternalNameLength,
478     const char              *InternalName,
479     UINT32                  *ConvertedNameLength,
480     char                    **ConvertedName);
481 
482 ACPI_NAMESPACE_NODE *
483 AcpiNsValidateHandle (
484     ACPI_HANDLE             Handle);
485 
486 void
487 AcpiNsTerminate (
488     void);
489 
490 #endif /* __ACNAMESP_H__ */
491