acnamesp.h revision 233555
1/******************************************************************************
2 *
3 * Name: acnamesp.h - Namespace subcomponent prototypes and defines
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2012, 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 * nsdump - Namespace dump/print utilities
208 */
209void
210AcpiNsDumpTables (
211    ACPI_HANDLE             SearchBase,
212    UINT32                  MaxDepth);
213
214void
215AcpiNsDumpEntry (
216    ACPI_HANDLE             Handle,
217    UINT32                  DebugLevel);
218
219void
220AcpiNsDumpPathname (
221    ACPI_HANDLE             Handle,
222    char                    *Msg,
223    UINT32                  Level,
224    UINT32                  Component);
225
226void
227AcpiNsPrintPathname (
228    UINT32                  NumSegments,
229    char                    *Pathname);
230
231ACPI_STATUS
232AcpiNsDumpOneObject (
233    ACPI_HANDLE             ObjHandle,
234    UINT32                  Level,
235    void                    *Context,
236    void                    **ReturnValue);
237
238void
239AcpiNsDumpObjects (
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 */
250ACPI_STATUS
251AcpiNsEvaluate (
252    ACPI_EVALUATE_INFO      *Info);
253
254void
255AcpiNsExecModuleCodeList (
256    void);
257
258
259/*
260 * nspredef - Support for predefined/reserved names
261 */
262ACPI_STATUS
263AcpiNsCheckPredefinedNames (
264    ACPI_NAMESPACE_NODE     *Node,
265    UINT32                  UserParamCount,
266    ACPI_STATUS             ReturnStatus,
267    ACPI_OPERAND_OBJECT     **ReturnObject);
268
269const ACPI_PREDEFINED_INFO *
270AcpiNsCheckForPredefinedName (
271    ACPI_NAMESPACE_NODE     *Node);
272
273void
274AcpiNsCheckParameterCount (
275    char                        *Pathname,
276    ACPI_NAMESPACE_NODE         *Node,
277    UINT32                      UserParamCount,
278    const ACPI_PREDEFINED_INFO  *Info);
279
280
281/*
282 * nsnames - Name and Scope manipulation
283 */
284UINT32
285AcpiNsOpensScope (
286    ACPI_OBJECT_TYPE        Type);
287
288ACPI_STATUS
289AcpiNsBuildExternalPath (
290    ACPI_NAMESPACE_NODE     *Node,
291    ACPI_SIZE               Size,
292    char                    *NameBuffer);
293
294char *
295AcpiNsGetExternalPathname (
296    ACPI_NAMESPACE_NODE     *Node);
297
298char *
299AcpiNsNameOfCurrentScope (
300    ACPI_WALK_STATE         *WalkState);
301
302ACPI_STATUS
303AcpiNsHandleToPathname (
304    ACPI_HANDLE             TargetHandle,
305    ACPI_BUFFER             *Buffer);
306
307BOOLEAN
308AcpiNsPatternMatch (
309    ACPI_NAMESPACE_NODE     *ObjNode,
310    char                    *SearchFor);
311
312ACPI_STATUS
313AcpiNsGetNode (
314    ACPI_NAMESPACE_NODE     *PrefixNode,
315    const char              *ExternalPathname,
316    UINT32                  Flags,
317    ACPI_NAMESPACE_NODE     **OutNode);
318
319ACPI_SIZE
320AcpiNsGetPathnameLength (
321    ACPI_NAMESPACE_NODE     *Node);
322
323
324/*
325 * nsobject - Object management for namespace nodes
326 */
327ACPI_STATUS
328AcpiNsAttachObject (
329    ACPI_NAMESPACE_NODE     *Node,
330    ACPI_OPERAND_OBJECT     *Object,
331    ACPI_OBJECT_TYPE        Type);
332
333ACPI_OPERAND_OBJECT *
334AcpiNsGetAttachedObject (
335    ACPI_NAMESPACE_NODE     *Node);
336
337ACPI_OPERAND_OBJECT *
338AcpiNsGetSecondaryObject (
339    ACPI_OPERAND_OBJECT     *ObjDesc);
340
341ACPI_STATUS
342AcpiNsAttachData (
343    ACPI_NAMESPACE_NODE     *Node,
344    ACPI_OBJECT_HANDLER     Handler,
345    void                    *Data);
346
347ACPI_STATUS
348AcpiNsDetachData (
349    ACPI_NAMESPACE_NODE     *Node,
350    ACPI_OBJECT_HANDLER     Handler);
351
352ACPI_STATUS
353AcpiNsGetAttachedData (
354    ACPI_NAMESPACE_NODE     *Node,
355    ACPI_OBJECT_HANDLER     Handler,
356    void                    **Data);
357
358
359/*
360 * nsrepair - General return object repair for all
361 * predefined methods/objects
362 */
363ACPI_STATUS
364AcpiNsRepairObject (
365    ACPI_PREDEFINED_DATA    *Data,
366    UINT32                  ExpectedBtypes,
367    UINT32                  PackageIndex,
368    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
369
370ACPI_STATUS
371AcpiNsRepairPackageList (
372    ACPI_PREDEFINED_DATA    *Data,
373    ACPI_OPERAND_OBJECT     **ObjDescPtr);
374
375ACPI_STATUS
376AcpiNsRepairNullElement (
377    ACPI_PREDEFINED_DATA    *Data,
378    UINT32                  ExpectedBtypes,
379    UINT32                  PackageIndex,
380    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
381
382void
383AcpiNsRemoveNullElements (
384    ACPI_PREDEFINED_DATA    *Data,
385    UINT8                   PackageType,
386    ACPI_OPERAND_OBJECT     *ObjDesc);
387
388
389/*
390 * nsrepair2 - Return object repair for specific
391 * predefined methods/objects
392 */
393ACPI_STATUS
394AcpiNsComplexRepairs (
395    ACPI_PREDEFINED_DATA    *Data,
396    ACPI_NAMESPACE_NODE     *Node,
397    ACPI_STATUS             ValidateStatus,
398    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
399
400
401/*
402 * nssearch - Namespace searching and entry
403 */
404ACPI_STATUS
405AcpiNsSearchAndEnter (
406    UINT32                  EntryName,
407    ACPI_WALK_STATE         *WalkState,
408    ACPI_NAMESPACE_NODE     *Node,
409    ACPI_INTERPRETER_MODE   InterpreterMode,
410    ACPI_OBJECT_TYPE        Type,
411    UINT32                  Flags,
412    ACPI_NAMESPACE_NODE     **RetNode);
413
414ACPI_STATUS
415AcpiNsSearchOneScope (
416    UINT32                  EntryName,
417    ACPI_NAMESPACE_NODE     *Node,
418    ACPI_OBJECT_TYPE        Type,
419    ACPI_NAMESPACE_NODE     **RetNode);
420
421void
422AcpiNsInstallNode (
423    ACPI_WALK_STATE         *WalkState,
424    ACPI_NAMESPACE_NODE     *ParentNode,
425    ACPI_NAMESPACE_NODE     *Node,
426    ACPI_OBJECT_TYPE        Type);
427
428
429/*
430 * nsutils - Utility functions
431 */
432BOOLEAN
433AcpiNsValidRootPrefix (
434    char                    Prefix);
435
436ACPI_OBJECT_TYPE
437AcpiNsGetType (
438    ACPI_NAMESPACE_NODE     *Node);
439
440UINT32
441AcpiNsLocal (
442    ACPI_OBJECT_TYPE        Type);
443
444void
445AcpiNsPrintNodePathname (
446    ACPI_NAMESPACE_NODE     *Node,
447    const char              *Msg);
448
449ACPI_STATUS
450AcpiNsBuildInternalName (
451    ACPI_NAMESTRING_INFO    *Info);
452
453void
454AcpiNsGetInternalNameLength (
455    ACPI_NAMESTRING_INFO    *Info);
456
457ACPI_STATUS
458AcpiNsInternalizeName (
459    const char              *DottedName,
460    char                    **ConvertedName);
461
462ACPI_STATUS
463AcpiNsExternalizeName (
464    UINT32                  InternalNameLength,
465    const char              *InternalName,
466    UINT32                  *ConvertedNameLength,
467    char                    **ConvertedName);
468
469ACPI_NAMESPACE_NODE *
470AcpiNsValidateHandle (
471    ACPI_HANDLE             Handle);
472
473void
474AcpiNsTerminate (
475    void);
476
477#endif /* __ACNAMESP_H__ */
478