acnamesp.h revision 217365
1270631Sjfv/******************************************************************************
2270631Sjfv *
3270631Sjfv * Name: acnamesp.h - Namespace subcomponent prototypes and defines
4270631Sjfv *
5270631Sjfv *****************************************************************************/
6270631Sjfv
7270631Sjfv/*
8270631Sjfv * Copyright (C) 2000 - 2011, Intel Corp.
9270631Sjfv * All rights reserved.
10270631Sjfv *
11270631Sjfv * Redistribution and use in source and binary forms, with or without
12270631Sjfv * modification, are permitted provided that the following conditions
13270631Sjfv * are met:
14270631Sjfv * 1. Redistributions of source code must retain the above copyright
15270631Sjfv *    notice, this list of conditions, and the following disclaimer,
16270631Sjfv *    without modification.
17270631Sjfv * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18270631Sjfv *    substantially similar to the "NO WARRANTY" disclaimer below
19270631Sjfv *    ("Disclaimer") and any redistribution must be conditioned upon
20270631Sjfv *    including a substantially similar Disclaimer requirement for further
21270631Sjfv *    binary redistribution.
22270631Sjfv * 3. Neither the names of the above-listed copyright holders nor the names
23270631Sjfv *    of any contributors may be used to endorse or promote products derived
24270631Sjfv *    from this software without specific prior written permission.
25270631Sjfv *
26270631Sjfv * Alternatively, this software may be distributed under the terms of the
27270631Sjfv * GNU General Public License ("GPL") version 2 as published by the Free
28270631Sjfv * Software Foundation.
29270631Sjfv *
30270631Sjfv * NO WARRANTY
31270631Sjfv * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32270631Sjfv * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33270631Sjfv * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34270631Sjfv * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35270631Sjfv * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36270631Sjfv * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37270631Sjfv * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38270631Sjfv * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39270631Sjfv * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40270631Sjfv * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41270631Sjfv * POSSIBILITY OF SUCH DAMAGES.
42270631Sjfv */
43270631Sjfv
44270631Sjfv#ifndef __ACNAMESP_H__
45270631Sjfv#define __ACNAMESP_H__
46270631Sjfv
47270631Sjfv
48270631Sjfv/* To search the entire name space, pass this as SearchBase */
49270631Sjfv
50270919Sjfv#define ACPI_NS_ALL                 ((ACPI_HANDLE)0)
51270631Sjfv
52270631Sjfv/*
53270919Sjfv * Elements of AcpiNsProperties are bit significant
54270631Sjfv * and should be one-to-one with values of ACPI_OBJECT_TYPE
55270631Sjfv */
56270631Sjfv#define ACPI_NS_NORMAL              0
57270631Sjfv#define ACPI_NS_NEWSCOPE            1   /* a definition of this type opens a name scope */
58270631Sjfv#define ACPI_NS_LOCAL               2   /* suppress search of enclosing scopes */
59270631Sjfv
60270631Sjfv/* Flags for AcpiNsLookup, AcpiNsSearchAndEnter */
61270631Sjfv
62270631Sjfv#define ACPI_NS_NO_UPSEARCH         0
63270631Sjfv#define ACPI_NS_SEARCH_PARENT       0x01
64270631Sjfv#define ACPI_NS_DONT_OPEN_SCOPE     0x02
65270631Sjfv#define ACPI_NS_NO_PEER_SEARCH      0x04
66270631Sjfv#define ACPI_NS_ERROR_IF_FOUND      0x08
67270631Sjfv#define ACPI_NS_PREFIX_IS_SCOPE     0x10
68270631Sjfv#define ACPI_NS_EXTERNAL            0x20
69270631Sjfv#define ACPI_NS_TEMPORARY           0x40
70270631Sjfv
71270631Sjfv/* Flags for AcpiNsWalkNamespace */
72270631Sjfv
73270631Sjfv#define ACPI_NS_WALK_NO_UNLOCK      0
74270631Sjfv#define ACPI_NS_WALK_UNLOCK         0x01
75270631Sjfv#define ACPI_NS_WALK_TEMP_NODES     0x02
76270631Sjfv
77270631Sjfv/* Object is not a package element */
78270631Sjfv
79270631Sjfv#define ACPI_NOT_PACKAGE_ELEMENT    ACPI_UINT32_MAX
80270631Sjfv
81270631Sjfv/* Always emit warning message, not dependent on node flags */
82270631Sjfv
83270631Sjfv#define ACPI_WARN_ALWAYS            0
84270631Sjfv
85270631Sjfv
86270631Sjfv/*
87270631Sjfv * nsinit - Namespace initialization
88270631Sjfv */
89270631SjfvACPI_STATUS
90270631SjfvAcpiNsInitializeObjects (
91270631Sjfv    void);
92270631Sjfv
93270631SjfvACPI_STATUS
94270631SjfvAcpiNsInitializeDevices (
95270631Sjfv    void);
96270631Sjfv
97270631Sjfv
98270631Sjfv/*
99270631Sjfv * nsload -  Namespace loading
100270631Sjfv */
101270631SjfvACPI_STATUS
102270631SjfvAcpiNsLoadNamespace (
103270631Sjfv    void);
104270631Sjfv
105270631SjfvACPI_STATUS
106270631SjfvAcpiNsLoadTable (
107270631Sjfv    UINT32                  TableIndex,
108270631Sjfv    ACPI_NAMESPACE_NODE     *Node);
109270631Sjfv
110270631Sjfv
111270631Sjfv/*
112270631Sjfv * nswalk - walk the namespace
113270631Sjfv */
114270631SjfvACPI_STATUS
115270631SjfvAcpiNsWalkNamespace (
116270631Sjfv    ACPI_OBJECT_TYPE        Type,
117270631Sjfv    ACPI_HANDLE             StartObject,
118270631Sjfv    UINT32                  MaxDepth,
119270631Sjfv    UINT32                  Flags,
120270631Sjfv    ACPI_WALK_CALLBACK      PreOrderVisit,
121270631Sjfv    ACPI_WALK_CALLBACK      PostOrderVisit,
122270631Sjfv    void                    *Context,
123270631Sjfv    void                    **ReturnValue);
124270631Sjfv
125270631SjfvACPI_NAMESPACE_NODE *
126270631SjfvAcpiNsGetNextNode (
127270631Sjfv    ACPI_NAMESPACE_NODE     *Parent,
128270631Sjfv    ACPI_NAMESPACE_NODE     *Child);
129270631Sjfv
130270631SjfvACPI_NAMESPACE_NODE *
131270631SjfvAcpiNsGetNextNodeTyped (
132270631Sjfv    ACPI_OBJECT_TYPE        Type,
133270631Sjfv    ACPI_NAMESPACE_NODE     *Parent,
134270631Sjfv    ACPI_NAMESPACE_NODE     *Child);
135270631Sjfv
136270631Sjfv/*
137270631Sjfv * nsparse - table parsing
138270631Sjfv */
139270631SjfvACPI_STATUS
140270631SjfvAcpiNsParseTable (
141270631Sjfv    UINT32                  TableIndex,
142270631Sjfv    ACPI_NAMESPACE_NODE     *StartNode);
143270631Sjfv
144270631SjfvACPI_STATUS
145270631SjfvAcpiNsOneCompleteParse (
146270631Sjfv    UINT32                  PassNumber,
147270631Sjfv    UINT32                  TableIndex,
148270631Sjfv    ACPI_NAMESPACE_NODE     *StartNode);
149270631Sjfv
150270631Sjfv
151270631Sjfv/*
152270631Sjfv * nsaccess - Top-level namespace access
153270631Sjfv */
154270631SjfvACPI_STATUS
155270631SjfvAcpiNsRootInitialize (
156270631Sjfv    void);
157270631Sjfv
158270631SjfvACPI_STATUS
159270631SjfvAcpiNsLookup (
160270631Sjfv    ACPI_GENERIC_STATE      *ScopeInfo,
161270631Sjfv    char                    *Name,
162270631Sjfv    ACPI_OBJECT_TYPE        Type,
163270631Sjfv    ACPI_INTERPRETER_MODE   InterpreterMode,
164270631Sjfv    UINT32                  Flags,
165274367Sjfv    ACPI_WALK_STATE         *WalkState,
166274367Sjfv    ACPI_NAMESPACE_NODE     **RetNode);
167274367Sjfv
168270631Sjfv
169270631Sjfv/*
170270631Sjfv * nsalloc - Named object allocation/deallocation
171270631Sjfv */
172270631SjfvACPI_NAMESPACE_NODE *
173270631SjfvAcpiNsCreateNode (
174270631Sjfv    UINT32                  Name);
175270631Sjfv
176270631Sjfvvoid
177270631SjfvAcpiNsDeleteNode (
178270631Sjfv    ACPI_NAMESPACE_NODE     *Node);
179270631Sjfv
180270631Sjfvvoid
181270631SjfvAcpiNsRemoveNode (
182270631Sjfv    ACPI_NAMESPACE_NODE     *Node);
183270631Sjfv
184270631Sjfvvoid
185270631SjfvAcpiNsDeleteNamespaceSubtree (
186270631Sjfv    ACPI_NAMESPACE_NODE     *ParentHandle);
187270631Sjfv
188270631Sjfvvoid
189270631SjfvAcpiNsDeleteNamespaceByOwner (
190270631Sjfv    ACPI_OWNER_ID           OwnerId);
191270631Sjfv
192270631Sjfvvoid
193270631SjfvAcpiNsDetachObject (
194270631Sjfv    ACPI_NAMESPACE_NODE     *Node);
195270631Sjfv
196270631Sjfvvoid
197270631SjfvAcpiNsDeleteChildren (
198270631Sjfv    ACPI_NAMESPACE_NODE     *Parent);
199274367Sjfv
200270631Sjfvint
201270631SjfvAcpiNsCompareNames (
202270631Sjfv    char                    *Name1,
203270631Sjfv    char                    *Name2);
204270631Sjfv
205270631Sjfv
206270631Sjfv/*
207270631Sjfv * nsdump - Namespace dump/print utilities
208270631Sjfv */
209270631Sjfvvoid
210270631SjfvAcpiNsDumpTables (
211270631Sjfv    ACPI_HANDLE             SearchBase,
212270631Sjfv    UINT32                  MaxDepth);
213274367Sjfv
214270631Sjfvvoid
215270631SjfvAcpiNsDumpEntry (
216270631Sjfv    ACPI_HANDLE             Handle,
217270631Sjfv    UINT32                  DebugLevel);
218270631Sjfv
219270631Sjfvvoid
220270631SjfvAcpiNsDumpPathname (
221270631Sjfv    ACPI_HANDLE             Handle,
222270631Sjfv    char                    *Msg,
223270631Sjfv    UINT32                  Level,
224270631Sjfv    UINT32                  Component);
225270631Sjfv
226270631Sjfvvoid
227270631SjfvAcpiNsPrintPathname (
228270631Sjfv    UINT32                  NumSegments,
229270631Sjfv    char                    *Pathname);
230270631Sjfv
231270631SjfvACPI_STATUS
232270631SjfvAcpiNsDumpOneObject (
233270631Sjfv    ACPI_HANDLE             ObjHandle,
234270631Sjfv    UINT32                  Level,
235270631Sjfv    void                    *Context,
236270631Sjfv    void                    **ReturnValue);
237270631Sjfv
238270631Sjfvvoid
239270631SjfvAcpiNsDumpObjects (
240270631Sjfv    ACPI_OBJECT_TYPE        Type,
241270631Sjfv    UINT8                   DisplayType,
242270631Sjfv    UINT32                  MaxDepth,
243270631Sjfv    ACPI_OWNER_ID           OwnerId,
244270631Sjfv    ACPI_HANDLE             StartHandle);
245270631Sjfv
246270631Sjfv
247270631Sjfv/*
248270631Sjfv * nseval - Namespace evaluation functions
249270631Sjfv */
250270631SjfvACPI_STATUS
251270631SjfvAcpiNsEvaluate (
252270631Sjfv    ACPI_EVALUATE_INFO      *Info);
253270631Sjfv
254270631Sjfvvoid
255270631SjfvAcpiNsExecModuleCodeList (
256270631Sjfv    void);
257270631Sjfv
258270631Sjfv
259270631Sjfv/*
260270631Sjfv * nspredef - Support for predefined/reserved names
261270631Sjfv */
262270631SjfvACPI_STATUS
263270631SjfvAcpiNsCheckPredefinedNames (
264270631Sjfv    ACPI_NAMESPACE_NODE     *Node,
265270631Sjfv    UINT32                  UserParamCount,
266270631Sjfv    ACPI_STATUS             ReturnStatus,
267270631Sjfv    ACPI_OPERAND_OBJECT     **ReturnObject);
268270631Sjfv
269274367Sjfvconst ACPI_PREDEFINED_INFO *
270274367SjfvAcpiNsCheckForPredefinedName (
271274367Sjfv    ACPI_NAMESPACE_NODE     *Node);
272274367Sjfv
273274367Sjfvvoid
274274367SjfvAcpiNsCheckParameterCount (
275274367Sjfv    char                        *Pathname,
276274367Sjfv    ACPI_NAMESPACE_NODE         *Node,
277274367Sjfv    UINT32                      UserParamCount,
278274367Sjfv    const ACPI_PREDEFINED_INFO  *Info);
279274367Sjfv
280274367Sjfv
281274367Sjfv/*
282274367Sjfv * nsnames - Name and Scope manipulation
283274367Sjfv */
284274367SjfvUINT32
285274367SjfvAcpiNsOpensScope (
286274367Sjfv    ACPI_OBJECT_TYPE        Type);
287274367Sjfv
288274367SjfvACPI_STATUS
289274367SjfvAcpiNsBuildExternalPath (
290274367Sjfv    ACPI_NAMESPACE_NODE     *Node,
291274367Sjfv    ACPI_SIZE               Size,
292274367Sjfv    char                    *NameBuffer);
293274367Sjfv
294274367Sjfvchar *
295274367SjfvAcpiNsGetExternalPathname (
296274367Sjfv    ACPI_NAMESPACE_NODE     *Node);
297270631Sjfv
298270631Sjfvchar *
299270631SjfvAcpiNsNameOfCurrentScope (
300270631Sjfv    ACPI_WALK_STATE         *WalkState);
301270631Sjfv
302270631SjfvACPI_STATUS
303270631SjfvAcpiNsHandleToPathname (
304270631Sjfv    ACPI_HANDLE             TargetHandle,
305270631Sjfv    ACPI_BUFFER             *Buffer);
306270631Sjfv
307270631SjfvBOOLEAN
308270631SjfvAcpiNsPatternMatch (
309270631Sjfv    ACPI_NAMESPACE_NODE     *ObjNode,
310270631Sjfv    char                    *SearchFor);
311270631Sjfv
312270631SjfvACPI_STATUS
313270631SjfvAcpiNsGetNode (
314270631Sjfv    ACPI_NAMESPACE_NODE     *PrefixNode,
315270631Sjfv    const char              *ExternalPathname,
316270631Sjfv    UINT32                  Flags,
317270631Sjfv    ACPI_NAMESPACE_NODE     **OutNode);
318270631Sjfv
319270631SjfvACPI_SIZE
320270631SjfvAcpiNsGetPathnameLength (
321270631Sjfv    ACPI_NAMESPACE_NODE     *Node);
322270631Sjfv
323270631Sjfv
324270631Sjfv/*
325270631Sjfv * nsobject - Object management for namespace nodes
326270631Sjfv */
327270631SjfvACPI_STATUS
328270631SjfvAcpiNsAttachObject (
329270631Sjfv    ACPI_NAMESPACE_NODE     *Node,
330270631Sjfv    ACPI_OPERAND_OBJECT     *Object,
331270631Sjfv    ACPI_OBJECT_TYPE        Type);
332270631Sjfv
333270631SjfvACPI_OPERAND_OBJECT *
334270631SjfvAcpiNsGetAttachedObject (
335270631Sjfv    ACPI_NAMESPACE_NODE     *Node);
336270631Sjfv
337270631SjfvACPI_OPERAND_OBJECT *
338270631SjfvAcpiNsGetSecondaryObject (
339270631Sjfv    ACPI_OPERAND_OBJECT     *ObjDesc);
340270631Sjfv
341270631SjfvACPI_STATUS
342270631SjfvAcpiNsAttachData (
343270631Sjfv    ACPI_NAMESPACE_NODE     *Node,
344270631Sjfv    ACPI_OBJECT_HANDLER     Handler,
345270631Sjfv    void                    *Data);
346270631Sjfv
347270631SjfvACPI_STATUS
348270631SjfvAcpiNsDetachData (
349270631Sjfv    ACPI_NAMESPACE_NODE     *Node,
350270631Sjfv    ACPI_OBJECT_HANDLER     Handler);
351270631Sjfv
352270631SjfvACPI_STATUS
353270631SjfvAcpiNsGetAttachedData (
354270631Sjfv    ACPI_NAMESPACE_NODE     *Node,
355270631Sjfv    ACPI_OBJECT_HANDLER     Handler,
356270631Sjfv    void                    **Data);
357270631Sjfv
358270631Sjfv
359270631Sjfv/*
360270631Sjfv * nsrepair - General return object repair for all
361270631Sjfv * predefined methods/objects
362270631Sjfv */
363270631SjfvACPI_STATUS
364270631SjfvAcpiNsRepairObject (
365270631Sjfv    ACPI_PREDEFINED_DATA    *Data,
366270631Sjfv    UINT32                  ExpectedBtypes,
367270631Sjfv    UINT32                  PackageIndex,
368270631Sjfv    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
369270631Sjfv
370270631SjfvACPI_STATUS
371270631SjfvAcpiNsRepairPackageList (
372270631Sjfv    ACPI_PREDEFINED_DATA    *Data,
373270631Sjfv    ACPI_OPERAND_OBJECT     **ObjDescPtr);
374270631Sjfv
375270631SjfvACPI_STATUS
376270631SjfvAcpiNsRepairNullElement (
377270631Sjfv    ACPI_PREDEFINED_DATA    *Data,
378270631Sjfv    UINT32                  ExpectedBtypes,
379270631Sjfv    UINT32                  PackageIndex,
380270631Sjfv    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
381270631Sjfv
382270631Sjfvvoid
383270631SjfvAcpiNsRemoveNullElements (
384270631Sjfv    ACPI_PREDEFINED_DATA    *Data,
385270631Sjfv    UINT8                   PackageType,
386270631Sjfv    ACPI_OPERAND_OBJECT     *ObjDesc);
387270631Sjfv
388270631Sjfv
389270631Sjfv/*
390270631Sjfv * nsrepair2 - Return object repair for specific
391270631Sjfv * predefined methods/objects
392270631Sjfv */
393270631SjfvACPI_STATUS
394270631SjfvAcpiNsComplexRepairs (
395270631Sjfv    ACPI_PREDEFINED_DATA    *Data,
396270631Sjfv    ACPI_NAMESPACE_NODE     *Node,
397270631Sjfv    ACPI_STATUS             ValidateStatus,
398270631Sjfv    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
399270631Sjfv
400270631Sjfv
401270631Sjfv/*
402270631Sjfv * nssearch - Namespace searching and entry
403270631Sjfv */
404270631SjfvACPI_STATUS
405270631SjfvAcpiNsSearchAndEnter (
406270631Sjfv    UINT32                  EntryName,
407270631Sjfv    ACPI_WALK_STATE         *WalkState,
408270631Sjfv    ACPI_NAMESPACE_NODE     *Node,
409270631Sjfv    ACPI_INTERPRETER_MODE   InterpreterMode,
410270631Sjfv    ACPI_OBJECT_TYPE        Type,
411270631Sjfv    UINT32                  Flags,
412270631Sjfv    ACPI_NAMESPACE_NODE     **RetNode);
413270631Sjfv
414270631SjfvACPI_STATUS
415270631SjfvAcpiNsSearchOneScope (
416270631Sjfv    UINT32                  EntryName,
417270631Sjfv    ACPI_NAMESPACE_NODE     *Node,
418270631Sjfv    ACPI_OBJECT_TYPE        Type,
419270631Sjfv    ACPI_NAMESPACE_NODE     **RetNode);
420270631Sjfv
421270631Sjfvvoid
422270631SjfvAcpiNsInstallNode (
423270631Sjfv    ACPI_WALK_STATE         *WalkState,
424270631Sjfv    ACPI_NAMESPACE_NODE     *ParentNode,
425270631Sjfv    ACPI_NAMESPACE_NODE     *Node,
426270631Sjfv    ACPI_OBJECT_TYPE        Type);
427270631Sjfv
428270631Sjfv
429270631Sjfv/*
430270631Sjfv * nsutils - Utility functions
431270631Sjfv */
432270631SjfvBOOLEAN
433270631SjfvAcpiNsValidRootPrefix (
434270631Sjfv    char                    Prefix);
435270631Sjfv
436270631SjfvACPI_OBJECT_TYPE
437270631SjfvAcpiNsGetType (
438270631Sjfv    ACPI_NAMESPACE_NODE     *Node);
439270631Sjfv
440270631SjfvUINT32
441270631SjfvAcpiNsLocal (
442270631Sjfv    ACPI_OBJECT_TYPE        Type);
443270631Sjfv
444270631Sjfvvoid
445270631SjfvAcpiNsPrintNodePathname (
446270631Sjfv    ACPI_NAMESPACE_NODE     *Node,
447270631Sjfv    const char              *Msg);
448270631Sjfv
449270631SjfvACPI_STATUS
450270631SjfvAcpiNsBuildInternalName (
451270631Sjfv    ACPI_NAMESTRING_INFO    *Info);
452270631Sjfv
453270631Sjfvvoid
454270631SjfvAcpiNsGetInternalNameLength (
455270631Sjfv    ACPI_NAMESTRING_INFO    *Info);
456270631Sjfv
457270631SjfvACPI_STATUS
458270631SjfvAcpiNsInternalizeName (
459270631Sjfv    const char              *DottedName,
460270631Sjfv    char                    **ConvertedName);
461270631Sjfv
462270631SjfvACPI_STATUS
463270631SjfvAcpiNsExternalizeName (
464270631Sjfv    UINT32                  InternalNameLength,
465270631Sjfv    const char              *InternalName,
466270631Sjfv    UINT32                  *ConvertedNameLength,
467270631Sjfv    char                    **ConvertedName);
468270631Sjfv
469270631SjfvACPI_NAMESPACE_NODE *
470270631SjfvAcpiNsValidateHandle (
471270631Sjfv    ACPI_HANDLE             Handle);
472270631Sjfv
473270631Sjfvvoid
474270631SjfvAcpiNsTerminate (
475270631Sjfv    void);
476270631Sjfv
477270631Sjfv#endif /* __ACNAMESP_H__ */
478270631Sjfv