167754Smsmith/******************************************************************************
267754Smsmith *
367754Smsmith * Name: acnamesp.h - Namespace subcomponent prototypes and defines
467754Smsmith *
567754Smsmith *****************************************************************************/
667754Smsmith
7217365Sjkim/*
8217365Sjkim * Copyright (C) 2000 - 2011, Intel Corp.
970243Smsmith * All rights reserved.
1067754Smsmith *
11217365Sjkim * Redistribution and use in source and binary forms, with or without
12217365Sjkim * modification, are permitted provided that the following conditions
13217365Sjkim * are met:
14217365Sjkim * 1. Redistributions of source code must retain the above copyright
15217365Sjkim *    notice, this list of conditions, and the following disclaimer,
16217365Sjkim *    without modification.
17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20217365Sjkim *    including a substantially similar Disclaimer requirement for further
21217365Sjkim *    binary redistribution.
22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23217365Sjkim *    of any contributors may be used to endorse or promote products derived
24217365Sjkim *    from this software without specific prior written permission.
2567754Smsmith *
26217365Sjkim * Alternatively, this software may be distributed under the terms of the
27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28217365Sjkim * Software Foundation.
2967754Smsmith *
30217365Sjkim * NO WARRANTY
31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
42217365Sjkim */
4367754Smsmith
4467754Smsmith#ifndef __ACNAMESP_H__
4567754Smsmith#define __ACNAMESP_H__
4667754Smsmith
4767754Smsmith
4867754Smsmith/* To search the entire name space, pass this as SearchBase */
4967754Smsmith
5091116Smsmith#define ACPI_NS_ALL                 ((ACPI_HANDLE)0)
5167754Smsmith
5267754Smsmith/*
5367754Smsmith * Elements of AcpiNsProperties are bit significant
5467754Smsmith * and should be one-to-one with values of ACPI_OBJECT_TYPE
5567754Smsmith */
5691116Smsmith#define ACPI_NS_NORMAL              0
5791116Smsmith#define ACPI_NS_NEWSCOPE            1   /* a definition of this type opens a name scope */
5891116Smsmith#define ACPI_NS_LOCAL               2   /* suppress search of enclosing scopes */
5967754Smsmith
6067754Smsmith/* Flags for AcpiNsLookup, AcpiNsSearchAndEnter */
6167754Smsmith
6291116Smsmith#define ACPI_NS_NO_UPSEARCH         0
6391116Smsmith#define ACPI_NS_SEARCH_PARENT       0x01
6491116Smsmith#define ACPI_NS_DONT_OPEN_SCOPE     0x02
6591116Smsmith#define ACPI_NS_NO_PEER_SEARCH      0x04
6691116Smsmith#define ACPI_NS_ERROR_IF_FOUND      0x08
67167802Sjkim#define ACPI_NS_PREFIX_IS_SCOPE     0x10
68167802Sjkim#define ACPI_NS_EXTERNAL            0x20
69167802Sjkim#define ACPI_NS_TEMPORARY           0x40
7067754Smsmith
71167802Sjkim/* Flags for AcpiNsWalkNamespace */
7267754Smsmith
73167802Sjkim#define ACPI_NS_WALK_NO_UNLOCK      0
74167802Sjkim#define ACPI_NS_WALK_UNLOCK         0x01
75167802Sjkim#define ACPI_NS_WALK_TEMP_NODES     0x02
7667754Smsmith
77197104Sjkim/* Object is not a package element */
78167802Sjkim
79197104Sjkim#define ACPI_NOT_PACKAGE_ELEMENT    ACPI_UINT32_MAX
80197104Sjkim
81197104Sjkim/* Always emit warning message, not dependent on node flags */
82197104Sjkim
83197104Sjkim#define ACPI_WARN_ALWAYS            0
84197104Sjkim
85197104Sjkim
86151937Sjkim/*
87151937Sjkim * nsinit - Namespace initialization
88151937Sjkim */
8967754SmsmithACPI_STATUS
9067754SmsmithAcpiNsInitializeObjects (
9167754Smsmith    void);
9267754Smsmith
9367754SmsmithACPI_STATUS
9467754SmsmithAcpiNsInitializeDevices (
9573561Smsmith    void);
9667754Smsmith
9767754Smsmith
98151937Sjkim/*
99151937Sjkim * nsload -  Namespace loading
100151937Sjkim */
10167754SmsmithACPI_STATUS
102151937SjkimAcpiNsLoadNamespace (
103151937Sjkim    void);
10467754Smsmith
10567754SmsmithACPI_STATUS
106151937SjkimAcpiNsLoadTable (
107193267Sjkim    UINT32                  TableIndex,
108151937Sjkim    ACPI_NAMESPACE_NODE     *Node);
10967754Smsmith
11067754Smsmith
111151937Sjkim/*
112151937Sjkim * nswalk - walk the namespace
113151937Sjkim */
11467754SmsmithACPI_STATUS
11567754SmsmithAcpiNsWalkNamespace (
11691116Smsmith    ACPI_OBJECT_TYPE        Type,
11767754Smsmith    ACPI_HANDLE             StartObject,
11867754Smsmith    UINT32                  MaxDepth,
119167802Sjkim    UINT32                  Flags,
120199337Sjkim    ACPI_WALK_CALLBACK      PreOrderVisit,
121199337Sjkim    ACPI_WALK_CALLBACK      PostOrderVisit,
12267754Smsmith    void                    *Context,
12367754Smsmith    void                    **ReturnValue);
12467754Smsmith
12567754SmsmithACPI_NAMESPACE_NODE *
12685756SmsmithAcpiNsGetNextNode (
127193267Sjkim    ACPI_NAMESPACE_NODE     *Parent,
128193267Sjkim    ACPI_NAMESPACE_NODE     *Child);
129193267Sjkim
130193267SjkimACPI_NAMESPACE_NODE *
131193267SjkimAcpiNsGetNextNodeTyped (
13291116Smsmith    ACPI_OBJECT_TYPE        Type,
13367754Smsmith    ACPI_NAMESPACE_NODE     *Parent,
13467754Smsmith    ACPI_NAMESPACE_NODE     *Child);
13567754Smsmith
136151937Sjkim/*
137151937Sjkim * nsparse - table parsing
138151937Sjkim */
13967754SmsmithACPI_STATUS
14067754SmsmithAcpiNsParseTable (
141193267Sjkim    UINT32                  TableIndex,
142167802Sjkim    ACPI_NAMESPACE_NODE     *StartNode);
14367754Smsmith
14467754SmsmithACPI_STATUS
145151937SjkimAcpiNsOneCompleteParse (
146193267Sjkim    UINT32                  PassNumber,
147193267Sjkim    UINT32                  TableIndex,
148193267Sjkim    ACPI_NAMESPACE_NODE     *StartNode);
14967754Smsmith
15067754Smsmith
15167754Smsmith/*
152151937Sjkim * nsaccess - Top-level namespace access
15367754Smsmith */
15467754SmsmithACPI_STATUS
15567754SmsmithAcpiNsRootInitialize (
15667754Smsmith    void);
15767754Smsmith
15867754SmsmithACPI_STATUS
15967754SmsmithAcpiNsLookup (
16067754Smsmith    ACPI_GENERIC_STATE      *ScopeInfo,
161114237Snjl    char                    *Name,
16291116Smsmith    ACPI_OBJECT_TYPE        Type,
16391116Smsmith    ACPI_INTERPRETER_MODE   InterpreterMode,
16467754Smsmith    UINT32                  Flags,
16567754Smsmith    ACPI_WALK_STATE         *WalkState,
16667754Smsmith    ACPI_NAMESPACE_NODE     **RetNode);
16767754Smsmith
16867754Smsmith
16967754Smsmith/*
170151937Sjkim * nsalloc - Named object allocation/deallocation
17167754Smsmith */
17267754SmsmithACPI_NAMESPACE_NODE *
17367754SmsmithAcpiNsCreateNode (
17484491Smsmith    UINT32                  Name);
17567754Smsmith
17667754Smsmithvoid
17767754SmsmithAcpiNsDeleteNode (
17867754Smsmith    ACPI_NAMESPACE_NODE     *Node);
17967754Smsmith
18099679Siwasakivoid
181197104SjkimAcpiNsRemoveNode (
182197104Sjkim    ACPI_NAMESPACE_NODE     *Node);
183197104Sjkim
184197104Sjkimvoid
18567754SmsmithAcpiNsDeleteNamespaceSubtree (
18667754Smsmith    ACPI_NAMESPACE_NODE     *ParentHandle);
18767754Smsmith
18867754Smsmithvoid
189151937SjkimAcpiNsDeleteNamespaceByOwner (
190151937Sjkim    ACPI_OWNER_ID           OwnerId);
191151937Sjkim
192151937Sjkimvoid
19367754SmsmithAcpiNsDetachObject (
19467754Smsmith    ACPI_NAMESPACE_NODE     *Node);
19567754Smsmith
19667754Smsmithvoid
19767754SmsmithAcpiNsDeleteChildren (
19867754Smsmith    ACPI_NAMESPACE_NODE     *Parent);
19967754Smsmith
200107325Siwasakiint
201107325SiwasakiAcpiNsCompareNames (
202107325Siwasaki    char                    *Name1,
203107325Siwasaki    char                    *Name2);
20467754Smsmith
205117521Snjl
20667754Smsmith/*
207151937Sjkim * nsdump - Namespace dump/print utilities
20867754Smsmith */
20967754Smsmithvoid
21067754SmsmithAcpiNsDumpTables (
21167754Smsmith    ACPI_HANDLE             SearchBase,
21267754Smsmith    UINT32                  MaxDepth);
21367754Smsmith
21467754Smsmithvoid
21567754SmsmithAcpiNsDumpEntry (
21667754Smsmith    ACPI_HANDLE             Handle,
21767754Smsmith    UINT32                  DebugLevel);
21867754Smsmith
219114237Snjlvoid
22067754SmsmithAcpiNsDumpPathname (
22167754Smsmith    ACPI_HANDLE             Handle,
222114237Snjl    char                    *Msg,
22367754Smsmith    UINT32                  Level,
22467754Smsmith    UINT32                  Component);
22567754Smsmith
22667754Smsmithvoid
22787031SmsmithAcpiNsPrintPathname (
22887031Smsmith    UINT32                  NumSegments,
22987031Smsmith    char                    *Pathname);
23087031Smsmith
23199679SiwasakiACPI_STATUS
23299679SiwasakiAcpiNsDumpOneObject (
23399679Siwasaki    ACPI_HANDLE             ObjHandle,
23499679Siwasaki    UINT32                  Level,
23599679Siwasaki    void                    *Context,
23699679Siwasaki    void                    **ReturnValue);
23799679Siwasaki
23867754Smsmithvoid
23967754SmsmithAcpiNsDumpObjects (
24091116Smsmith    ACPI_OBJECT_TYPE        Type,
24185756Smsmith    UINT8                   DisplayType,
24267754Smsmith    UINT32                  MaxDepth,
243151937Sjkim    ACPI_OWNER_ID           OwnerId,
24467754Smsmith    ACPI_HANDLE             StartHandle);
24567754Smsmith
24667754Smsmith
24767754Smsmith/*
248151937Sjkim * nseval - Namespace evaluation functions
24967754Smsmith */
25067754SmsmithACPI_STATUS
251167802SjkimAcpiNsEvaluate (
252167802Sjkim    ACPI_EVALUATE_INFO      *Info);
25367754Smsmith
254197104Sjkimvoid
255197104SjkimAcpiNsExecModuleCodeList (
256197104Sjkim    void);
25767754Smsmith
258197104Sjkim
25967754Smsmith/*
260193267Sjkim * nspredef - Support for predefined/reserved names
261193267Sjkim */
262193267SjkimACPI_STATUS
263193267SjkimAcpiNsCheckPredefinedNames (
264193267Sjkim    ACPI_NAMESPACE_NODE     *Node,
265193267Sjkim    UINT32                  UserParamCount,
266193267Sjkim    ACPI_STATUS             ReturnStatus,
267193267Sjkim    ACPI_OPERAND_OBJECT     **ReturnObject);
268193267Sjkim
269193267Sjkimconst ACPI_PREDEFINED_INFO *
270193267SjkimAcpiNsCheckForPredefinedName (
271193267Sjkim    ACPI_NAMESPACE_NODE     *Node);
272193267Sjkim
273193267Sjkimvoid
274193267SjkimAcpiNsCheckParameterCount (
275193267Sjkim    char                        *Pathname,
276193267Sjkim    ACPI_NAMESPACE_NODE         *Node,
277193267Sjkim    UINT32                      UserParamCount,
278193267Sjkim    const ACPI_PREDEFINED_INFO  *Info);
279193267Sjkim
280193267Sjkim
281193267Sjkim/*
282151937Sjkim * nsnames - Name and Scope manipulation
28367754Smsmith */
28467754SmsmithUINT32
28567754SmsmithAcpiNsOpensScope (
28691116Smsmith    ACPI_OBJECT_TYPE        Type);
28767754Smsmith
288193267SjkimACPI_STATUS
289167802SjkimAcpiNsBuildExternalPath (
290167802Sjkim    ACPI_NAMESPACE_NODE     *Node,
291167802Sjkim    ACPI_SIZE               Size,
292167802Sjkim    char                    *NameBuffer);
293167802Sjkim
294114237Snjlchar *
29591116SmsmithAcpiNsGetExternalPathname (
29667754Smsmith    ACPI_NAMESPACE_NODE     *Node);
29767754Smsmith
298114237Snjlchar *
29967754SmsmithAcpiNsNameOfCurrentScope (
30067754Smsmith    ACPI_WALK_STATE         *WalkState);
30167754Smsmith
30267754SmsmithACPI_STATUS
30367754SmsmithAcpiNsHandleToPathname (
30491116Smsmith    ACPI_HANDLE             TargetHandle,
30591116Smsmith    ACPI_BUFFER             *Buffer);
30667754Smsmith
30767754SmsmithBOOLEAN
30867754SmsmithAcpiNsPatternMatch (
30967754Smsmith    ACPI_NAMESPACE_NODE     *ObjNode,
310114237Snjl    char                    *SearchFor);
31167754Smsmith
31267754SmsmithACPI_STATUS
313167802SjkimAcpiNsGetNode (
314167802Sjkim    ACPI_NAMESPACE_NODE     *PrefixNode,
315193267Sjkim    const char              *ExternalPathname,
31691116Smsmith    UINT32                  Flags,
31767754Smsmith    ACPI_NAMESPACE_NODE     **OutNode);
31867754Smsmith
31991116SmsmithACPI_SIZE
32073561SmsmithAcpiNsGetPathnameLength (
32173561Smsmith    ACPI_NAMESPACE_NODE     *Node);
32273561Smsmith
32373561Smsmith
32467754Smsmith/*
325151937Sjkim * nsobject - Object management for namespace nodes
32667754Smsmith */
32767754SmsmithACPI_STATUS
32867754SmsmithAcpiNsAttachObject (
32967754Smsmith    ACPI_NAMESPACE_NODE     *Node,
33067754Smsmith    ACPI_OPERAND_OBJECT     *Object,
33191116Smsmith    ACPI_OBJECT_TYPE        Type);
33267754Smsmith
33387031SmsmithACPI_OPERAND_OBJECT *
33487031SmsmithAcpiNsGetAttachedObject (
33587031Smsmith    ACPI_NAMESPACE_NODE     *Node);
33667754Smsmith
33787031SmsmithACPI_OPERAND_OBJECT *
33887031SmsmithAcpiNsGetSecondaryObject (
33987031Smsmith    ACPI_OPERAND_OBJECT     *ObjDesc);
34087031Smsmith
34187031SmsmithACPI_STATUS
34287031SmsmithAcpiNsAttachData (
34387031Smsmith    ACPI_NAMESPACE_NODE     *Node,
34487031Smsmith    ACPI_OBJECT_HANDLER     Handler,
34587031Smsmith    void                    *Data);
34687031Smsmith
34787031SmsmithACPI_STATUS
34887031SmsmithAcpiNsDetachData (
34987031Smsmith    ACPI_NAMESPACE_NODE     *Node,
35087031Smsmith    ACPI_OBJECT_HANDLER     Handler);
35187031Smsmith
35287031SmsmithACPI_STATUS
35387031SmsmithAcpiNsGetAttachedData (
35487031Smsmith    ACPI_NAMESPACE_NODE     *Node,
35587031Smsmith    ACPI_OBJECT_HANDLER     Handler,
35687031Smsmith    void                    **Data);
35787031Smsmith
35887031Smsmith
35967754Smsmith/*
360199337Sjkim * nsrepair - General return object repair for all
361199337Sjkim * predefined methods/objects
362197104Sjkim */
363197104SjkimACPI_STATUS
364197104SjkimAcpiNsRepairObject (
365197104Sjkim    ACPI_PREDEFINED_DATA    *Data,
366197104Sjkim    UINT32                  ExpectedBtypes,
367197104Sjkim    UINT32                  PackageIndex,
368197104Sjkim    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
369197104Sjkim
370197104SjkimACPI_STATUS
371197104SjkimAcpiNsRepairPackageList (
372197104Sjkim    ACPI_PREDEFINED_DATA    *Data,
373197104Sjkim    ACPI_OPERAND_OBJECT     **ObjDescPtr);
374197104Sjkim
375202771SjkimACPI_STATUS
376202771SjkimAcpiNsRepairNullElement (
377202771Sjkim    ACPI_PREDEFINED_DATA    *Data,
378202771Sjkim    UINT32                  ExpectedBtypes,
379202771Sjkim    UINT32                  PackageIndex,
380202771Sjkim    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
381197104Sjkim
382202771Sjkimvoid
383202771SjkimAcpiNsRemoveNullElements (
384202771Sjkim    ACPI_PREDEFINED_DATA    *Data,
385202771Sjkim    UINT8                   PackageType,
386202771Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc);
387202771Sjkim
388202771Sjkim
389197104Sjkim/*
390199337Sjkim * nsrepair2 - Return object repair for specific
391199337Sjkim * predefined methods/objects
392199337Sjkim */
393199337SjkimACPI_STATUS
394199337SjkimAcpiNsComplexRepairs (
395199337Sjkim    ACPI_PREDEFINED_DATA    *Data,
396199337Sjkim    ACPI_NAMESPACE_NODE     *Node,
397199337Sjkim    ACPI_STATUS             ValidateStatus,
398199337Sjkim    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
399199337Sjkim
400199337Sjkim
401199337Sjkim/*
402151937Sjkim * nssearch - Namespace searching and entry
40367754Smsmith */
40467754SmsmithACPI_STATUS
40567754SmsmithAcpiNsSearchAndEnter (
40667754Smsmith    UINT32                  EntryName,
40767754Smsmith    ACPI_WALK_STATE         *WalkState,
40867754Smsmith    ACPI_NAMESPACE_NODE     *Node,
40991116Smsmith    ACPI_INTERPRETER_MODE   InterpreterMode,
41091116Smsmith    ACPI_OBJECT_TYPE        Type,
41167754Smsmith    UINT32                  Flags,
41267754Smsmith    ACPI_NAMESPACE_NODE     **RetNode);
41367754Smsmith
41467754SmsmithACPI_STATUS
415167802SjkimAcpiNsSearchOneScope (
41667754Smsmith    UINT32                  EntryName,
41767754Smsmith    ACPI_NAMESPACE_NODE     *Node,
41891116Smsmith    ACPI_OBJECT_TYPE        Type,
41967754Smsmith    ACPI_NAMESPACE_NODE     **RetNode);
42067754Smsmith
42167754Smsmithvoid
42267754SmsmithAcpiNsInstallNode (
42367754Smsmith    ACPI_WALK_STATE         *WalkState,
424107325Siwasaki    ACPI_NAMESPACE_NODE     *ParentNode,
425107325Siwasaki    ACPI_NAMESPACE_NODE     *Node,
42691116Smsmith    ACPI_OBJECT_TYPE        Type);
42767754Smsmith
42867754Smsmith
42967754Smsmith/*
430151937Sjkim * nsutils - Utility functions
43167754Smsmith */
43267754SmsmithBOOLEAN
43367754SmsmithAcpiNsValidRootPrefix (
434114237Snjl    char                    Prefix);
43567754Smsmith
43691116SmsmithACPI_OBJECT_TYPE
43767754SmsmithAcpiNsGetType (
43877424Smsmith    ACPI_NAMESPACE_NODE     *Node);
43967754Smsmith
44067754SmsmithUINT32
44167754SmsmithAcpiNsLocal (
44291116Smsmith    ACPI_OBJECT_TYPE        Type);
44367754Smsmith
444104470Siwasakivoid
445114237SnjlAcpiNsPrintNodePathname (
446114237Snjl    ACPI_NAMESPACE_NODE     *Node,
447193267Sjkim    const char              *Msg);
448114237Snjl
44967754SmsmithACPI_STATUS
45077424SmsmithAcpiNsBuildInternalName (
45177424Smsmith    ACPI_NAMESTRING_INFO    *Info);
45277424Smsmith
45399679Siwasakivoid
45477424SmsmithAcpiNsGetInternalNameLength (
45577424Smsmith    ACPI_NAMESTRING_INFO    *Info);
45677424Smsmith
45777424SmsmithACPI_STATUS
45867754SmsmithAcpiNsInternalizeName (
459193267Sjkim    const char              *DottedName,
460114237Snjl    char                    **ConvertedName);
46167754Smsmith
46267754SmsmithACPI_STATUS
46367754SmsmithAcpiNsExternalizeName (
46467754Smsmith    UINT32                  InternalNameLength,
465193267Sjkim    const char              *InternalName,
46667754Smsmith    UINT32                  *ConvertedNameLength,
467114237Snjl    char                    **ConvertedName);
46867754Smsmith
46967754SmsmithACPI_NAMESPACE_NODE *
470200553SjkimAcpiNsValidateHandle (
47167754Smsmith    ACPI_HANDLE             Handle);
47267754Smsmith
47367754Smsmithvoid
47467754SmsmithAcpiNsTerminate (
47567754Smsmith    void);
47667754Smsmith
47767754Smsmith#endif /* __ACNAMESP_H__ */
478