acnamesp.h revision 246849
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 */
89ACPI_STATUS
90AcpiNsInitializeObjects (
91    void);
92
93ACPI_STATUS
94AcpiNsInitializeDevices (
95    void);
96
97
98/*
99 * nsload -  Namespace loading
100 */
101ACPI_STATUS
102AcpiNsLoadNamespace (
103    void);
104
105ACPI_STATUS
106AcpiNsLoadTable (
107    UINT32                  TableIndex,
108    ACPI_NAMESPACE_NODE     *Node);
109
110
111/*
112 * nswalk - walk the namespace
113 */
114ACPI_STATUS
115AcpiNsWalkNamespace (
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
125ACPI_NAMESPACE_NODE *
126AcpiNsGetNextNode (
127    ACPI_NAMESPACE_NODE     *Parent,
128    ACPI_NAMESPACE_NODE     *Child);
129
130ACPI_NAMESPACE_NODE *
131AcpiNsGetNextNodeTyped (
132    ACPI_OBJECT_TYPE        Type,
133    ACPI_NAMESPACE_NODE     *Parent,
134    ACPI_NAMESPACE_NODE     *Child);
135
136/*
137 * nsparse - table parsing
138 */
139ACPI_STATUS
140AcpiNsParseTable (
141    UINT32                  TableIndex,
142    ACPI_NAMESPACE_NODE     *StartNode);
143
144ACPI_STATUS
145AcpiNsOneCompleteParse (
146    UINT32                  PassNumber,
147    UINT32                  TableIndex,
148    ACPI_NAMESPACE_NODE     *StartNode);
149
150
151/*
152 * nsaccess - Top-level namespace access
153 */
154ACPI_STATUS
155AcpiNsRootInitialize (
156    void);
157
158ACPI_STATUS
159AcpiNsLookup (
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 */
172ACPI_NAMESPACE_NODE *
173AcpiNsCreateNode (
174    UINT32                  Name);
175
176void
177AcpiNsDeleteNode (
178    ACPI_NAMESPACE_NODE     *Node);
179
180void
181AcpiNsRemoveNode (
182    ACPI_NAMESPACE_NODE     *Node);
183
184void
185AcpiNsDeleteNamespaceSubtree (
186    ACPI_NAMESPACE_NODE     *ParentHandle);
187
188void
189AcpiNsDeleteNamespaceByOwner (
190    ACPI_OWNER_ID           OwnerId);
191
192void
193AcpiNsDetachObject (
194    ACPI_NAMESPACE_NODE     *Node);
195
196void
197AcpiNsDeleteChildren (
198    ACPI_NAMESPACE_NODE     *Parent);
199
200int
201AcpiNsCompareNames (
202    char                    *Name1,
203    char                    *Name2);
204
205
206/*
207 * nsconvert - Dynamic object conversion routines
208 */
209ACPI_STATUS
210AcpiNsConvertToInteger (
211    ACPI_OPERAND_OBJECT     *OriginalObject,
212    ACPI_OPERAND_OBJECT     **ReturnObject);
213
214ACPI_STATUS
215AcpiNsConvertToString (
216    ACPI_OPERAND_OBJECT     *OriginalObject,
217    ACPI_OPERAND_OBJECT     **ReturnObject);
218
219ACPI_STATUS
220AcpiNsConvertToBuffer (
221    ACPI_OPERAND_OBJECT     *OriginalObject,
222    ACPI_OPERAND_OBJECT     **ReturnObject);
223
224ACPI_STATUS
225AcpiNsConvertToUnicode (
226    ACPI_OPERAND_OBJECT     *OriginalObject,
227    ACPI_OPERAND_OBJECT     **ReturnObject);
228
229ACPI_STATUS
230AcpiNsConvertToResource (
231    ACPI_OPERAND_OBJECT     *OriginalObject,
232    ACPI_OPERAND_OBJECT     **ReturnObject);
233
234
235/*
236 * nsdump - Namespace dump/print utilities
237 */
238void
239AcpiNsDumpTables (
240    ACPI_HANDLE             SearchBase,
241    UINT32                  MaxDepth);
242
243void
244AcpiNsDumpEntry (
245    ACPI_HANDLE             Handle,
246    UINT32                  DebugLevel);
247
248void
249AcpiNsDumpPathname (
250    ACPI_HANDLE             Handle,
251    char                    *Msg,
252    UINT32                  Level,
253    UINT32                  Component);
254
255void
256AcpiNsPrintPathname (
257    UINT32                  NumSegments,
258    char                    *Pathname);
259
260ACPI_STATUS
261AcpiNsDumpOneObject (
262    ACPI_HANDLE             ObjHandle,
263    UINT32                  Level,
264    void                    *Context,
265    void                    **ReturnValue);
266
267void
268AcpiNsDumpObjects (
269    ACPI_OBJECT_TYPE        Type,
270    UINT8                   DisplayType,
271    UINT32                  MaxDepth,
272    ACPI_OWNER_ID           OwnerId,
273    ACPI_HANDLE             StartHandle);
274
275
276/*
277 * nseval - Namespace evaluation functions
278 */
279ACPI_STATUS
280AcpiNsEvaluate (
281    ACPI_EVALUATE_INFO      *Info);
282
283void
284AcpiNsExecModuleCodeList (
285    void);
286
287
288/*
289 * nspredef - Support for predefined/reserved names
290 */
291ACPI_STATUS
292AcpiNsCheckPredefinedNames (
293    ACPI_NAMESPACE_NODE     *Node,
294    UINT32                  UserParamCount,
295    ACPI_STATUS             ReturnStatus,
296    ACPI_OPERAND_OBJECT     **ReturnObject);
297
298const ACPI_PREDEFINED_INFO *
299AcpiNsCheckForPredefinedName (
300    ACPI_NAMESPACE_NODE     *Node);
301
302void
303AcpiNsCheckParameterCount (
304    char                        *Pathname,
305    ACPI_NAMESPACE_NODE         *Node,
306    UINT32                      UserParamCount,
307    const ACPI_PREDEFINED_INFO  *Info);
308
309ACPI_STATUS
310AcpiNsCheckObjectType (
311    ACPI_PREDEFINED_DATA        *Data,
312    ACPI_OPERAND_OBJECT         **ReturnObjectPtr,
313    UINT32                      ExpectedBtypes,
314    UINT32                      PackageIndex);
315
316
317/*
318 * nsprepkg - Validation of predefined name packages
319 */
320ACPI_STATUS
321AcpiNsCheckPackage (
322    ACPI_PREDEFINED_DATA        *Data,
323    ACPI_OPERAND_OBJECT         **ReturnObjectPtr);
324
325
326/*
327 * nsnames - Name and Scope manipulation
328 */
329UINT32
330AcpiNsOpensScope (
331    ACPI_OBJECT_TYPE        Type);
332
333ACPI_STATUS
334AcpiNsBuildExternalPath (
335    ACPI_NAMESPACE_NODE     *Node,
336    ACPI_SIZE               Size,
337    char                    *NameBuffer);
338
339char *
340AcpiNsGetExternalPathname (
341    ACPI_NAMESPACE_NODE     *Node);
342
343char *
344AcpiNsNameOfCurrentScope (
345    ACPI_WALK_STATE         *WalkState);
346
347ACPI_STATUS
348AcpiNsHandleToPathname (
349    ACPI_HANDLE             TargetHandle,
350    ACPI_BUFFER             *Buffer);
351
352BOOLEAN
353AcpiNsPatternMatch (
354    ACPI_NAMESPACE_NODE     *ObjNode,
355    char                    *SearchFor);
356
357ACPI_STATUS
358AcpiNsGetNode (
359    ACPI_NAMESPACE_NODE     *PrefixNode,
360    const char              *ExternalPathname,
361    UINT32                  Flags,
362    ACPI_NAMESPACE_NODE     **OutNode);
363
364ACPI_SIZE
365AcpiNsGetPathnameLength (
366    ACPI_NAMESPACE_NODE     *Node);
367
368
369/*
370 * nsobject - Object management for namespace nodes
371 */
372ACPI_STATUS
373AcpiNsAttachObject (
374    ACPI_NAMESPACE_NODE     *Node,
375    ACPI_OPERAND_OBJECT     *Object,
376    ACPI_OBJECT_TYPE        Type);
377
378ACPI_OPERAND_OBJECT *
379AcpiNsGetAttachedObject (
380    ACPI_NAMESPACE_NODE     *Node);
381
382ACPI_OPERAND_OBJECT *
383AcpiNsGetSecondaryObject (
384    ACPI_OPERAND_OBJECT     *ObjDesc);
385
386ACPI_STATUS
387AcpiNsAttachData (
388    ACPI_NAMESPACE_NODE     *Node,
389    ACPI_OBJECT_HANDLER     Handler,
390    void                    *Data);
391
392ACPI_STATUS
393AcpiNsDetachData (
394    ACPI_NAMESPACE_NODE     *Node,
395    ACPI_OBJECT_HANDLER     Handler);
396
397ACPI_STATUS
398AcpiNsGetAttachedData (
399    ACPI_NAMESPACE_NODE     *Node,
400    ACPI_OBJECT_HANDLER     Handler,
401    void                    **Data);
402
403
404/*
405 * nsrepair - General return object repair for all
406 * predefined methods/objects
407 */
408ACPI_STATUS
409AcpiNsSimpleRepair (
410    ACPI_PREDEFINED_DATA    *Data,
411    UINT32                  ExpectedBtypes,
412    UINT32                  PackageIndex,
413    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
414
415ACPI_STATUS
416AcpiNsWrapWithPackage (
417    ACPI_PREDEFINED_DATA    *Data,
418    ACPI_OPERAND_OBJECT     *OriginalObject,
419    ACPI_OPERAND_OBJECT     **ObjDescPtr);
420
421ACPI_STATUS
422AcpiNsRepairNullElement (
423    ACPI_PREDEFINED_DATA    *Data,
424    UINT32                  ExpectedBtypes,
425    UINT32                  PackageIndex,
426    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
427
428void
429AcpiNsRemoveNullElements (
430    ACPI_PREDEFINED_DATA    *Data,
431    UINT8                   PackageType,
432    ACPI_OPERAND_OBJECT     *ObjDesc);
433
434
435/*
436 * nsrepair2 - Return object repair for specific
437 * predefined methods/objects
438 */
439ACPI_STATUS
440AcpiNsComplexRepairs (
441    ACPI_PREDEFINED_DATA    *Data,
442    ACPI_NAMESPACE_NODE     *Node,
443    ACPI_STATUS             ValidateStatus,
444    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
445
446
447/*
448 * nssearch - Namespace searching and entry
449 */
450ACPI_STATUS
451AcpiNsSearchAndEnter (
452    UINT32                  EntryName,
453    ACPI_WALK_STATE         *WalkState,
454    ACPI_NAMESPACE_NODE     *Node,
455    ACPI_INTERPRETER_MODE   InterpreterMode,
456    ACPI_OBJECT_TYPE        Type,
457    UINT32                  Flags,
458    ACPI_NAMESPACE_NODE     **RetNode);
459
460ACPI_STATUS
461AcpiNsSearchOneScope (
462    UINT32                  EntryName,
463    ACPI_NAMESPACE_NODE     *Node,
464    ACPI_OBJECT_TYPE        Type,
465    ACPI_NAMESPACE_NODE     **RetNode);
466
467void
468AcpiNsInstallNode (
469    ACPI_WALK_STATE         *WalkState,
470    ACPI_NAMESPACE_NODE     *ParentNode,
471    ACPI_NAMESPACE_NODE     *Node,
472    ACPI_OBJECT_TYPE        Type);
473
474
475/*
476 * nsutils - Utility functions
477 */
478ACPI_OBJECT_TYPE
479AcpiNsGetType (
480    ACPI_NAMESPACE_NODE     *Node);
481
482UINT32
483AcpiNsLocal (
484    ACPI_OBJECT_TYPE        Type);
485
486void
487AcpiNsPrintNodePathname (
488    ACPI_NAMESPACE_NODE     *Node,
489    const char              *Msg);
490
491ACPI_STATUS
492AcpiNsBuildInternalName (
493    ACPI_NAMESTRING_INFO    *Info);
494
495void
496AcpiNsGetInternalNameLength (
497    ACPI_NAMESTRING_INFO    *Info);
498
499ACPI_STATUS
500AcpiNsInternalizeName (
501    const char              *DottedName,
502    char                    **ConvertedName);
503
504ACPI_STATUS
505AcpiNsExternalizeName (
506    UINT32                  InternalNameLength,
507    const char              *InternalName,
508    UINT32                  *ConvertedNameLength,
509    char                    **ConvertedName);
510
511ACPI_NAMESPACE_NODE *
512AcpiNsValidateHandle (
513    ACPI_HANDLE             Handle);
514
515void
516AcpiNsTerminate (
517    void);
518
519#endif /* __ACNAMESP_H__ */
520