1/******************************************************************************
2 *
3 * Name: acnamesp.h - Namespace subcomponent prototypes and defines
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2016, 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#define ACPI_NS_OVERRIDE_IF_FOUND 0x80
71
72/* Flags for AcpiNsWalkNamespace */
73
74#define ACPI_NS_WALK_NO_UNLOCK 0
75#define ACPI_NS_WALK_UNLOCK 0x01
76#define ACPI_NS_WALK_TEMP_NODES 0x02
77
78/* Object is not a package element */
79
80#define ACPI_NOT_PACKAGE_ELEMENT ACPI_UINT32_MAX
81#define ACPI_ALL_PACKAGE_ELEMENTS (ACPI_UINT32_MAX-1)
82
83/* Always emit warning message, not dependent on node flags */
84
85#define ACPI_WARN_ALWAYS 0
86
87
88/*
89 * nsinit - Namespace initialization
90 */
91ACPI_STATUS
92AcpiNsInitializeObjects (
93 void);
94
95ACPI_STATUS
96AcpiNsInitializeDevices (
97 UINT32 Flags);
98
99
100/*
101 * nsload - Namespace loading
102 */
103ACPI_STATUS
104AcpiNsLoadNamespace (
105 void);
106
107ACPI_STATUS
108AcpiNsLoadTable (
109 UINT32 TableIndex,
110 ACPI_NAMESPACE_NODE *Node);
111
112
113/*
114 * nswalk - walk the namespace
115 */
116ACPI_STATUS
117AcpiNsWalkNamespace (
118 ACPI_OBJECT_TYPE Type,
119 ACPI_HANDLE StartObject,
120 UINT32 MaxDepth,
121 UINT32 Flags,
122 ACPI_WALK_CALLBACK DescendingCallback,
123 ACPI_WALK_CALLBACK AscendingCallback,
124 void *Context,
125 void **ReturnValue);
126
127ACPI_NAMESPACE_NODE *
128AcpiNsGetNextNode (
129 ACPI_NAMESPACE_NODE *Parent,
130 ACPI_NAMESPACE_NODE *Child);
131
132ACPI_NAMESPACE_NODE *
133AcpiNsGetNextNodeTyped (
134 ACPI_OBJECT_TYPE Type,
135 ACPI_NAMESPACE_NODE *Parent,
136 ACPI_NAMESPACE_NODE *Child);
137
138/*
139 * nsparse - table parsing
140 */
141ACPI_STATUS
142AcpiNsParseTable (
143 UINT32 TableIndex,
144 ACPI_NAMESPACE_NODE *StartNode);
145
146ACPI_STATUS
147AcpiNsExecuteTable (
148 UINT32 TableIndex,
149 ACPI_NAMESPACE_NODE *StartNode);
150
151ACPI_STATUS
152AcpiNsOneCompleteParse (
153 UINT32 PassNumber,
154 UINT32 TableIndex,
155 ACPI_NAMESPACE_NODE *StartNode);
156
157
158/*
159 * nsaccess - Top-level namespace access
160 */
161ACPI_STATUS
162AcpiNsRootInitialize (
163 void);
164
165ACPI_STATUS
166AcpiNsLookup (
167 ACPI_GENERIC_STATE *ScopeInfo,
168 char *Name,
169 ACPI_OBJECT_TYPE Type,
170 ACPI_INTERPRETER_MODE InterpreterMode,
171 UINT32 Flags,
172 ACPI_WALK_STATE *WalkState,
173 ACPI_NAMESPACE_NODE **RetNode);
174
175
176/*
177 * nsalloc - Named object allocation/deallocation
178 */
179ACPI_NAMESPACE_NODE *
180AcpiNsCreateNode (
181 UINT32 Name);
182
183void
184AcpiNsDeleteNode (
185 ACPI_NAMESPACE_NODE *Node);
186
187void
188AcpiNsRemoveNode (
189 ACPI_NAMESPACE_NODE *Node);
190
191void
192AcpiNsDeleteNamespaceSubtree (
193 ACPI_NAMESPACE_NODE *ParentHandle);
194
195void
196AcpiNsDeleteNamespaceByOwner (
197 ACPI_OWNER_ID OwnerId);
198
199void
200AcpiNsDetachObject (
201 ACPI_NAMESPACE_NODE *Node);
202
203void
204AcpiNsDeleteChildren (
205 ACPI_NAMESPACE_NODE *Parent);
206
207int
208AcpiNsCompareNames (
209 char *Name1,
210 char *Name2);
211
212
213/*
214 * nsconvert - Dynamic object conversion routines
215 */
216ACPI_STATUS
217AcpiNsConvertToInteger (
218 ACPI_OPERAND_OBJECT *OriginalObject,
219 ACPI_OPERAND_OBJECT **ReturnObject);
220
221ACPI_STATUS
222AcpiNsConvertToString (
223 ACPI_OPERAND_OBJECT *OriginalObject,
224 ACPI_OPERAND_OBJECT **ReturnObject);
225
226ACPI_STATUS
227AcpiNsConvertToBuffer (
228 ACPI_OPERAND_OBJECT *OriginalObject,
229 ACPI_OPERAND_OBJECT **ReturnObject);
230
231ACPI_STATUS
232AcpiNsConvertToUnicode (
233 ACPI_NAMESPACE_NODE *Scope,
234 ACPI_OPERAND_OBJECT *OriginalObject,
235 ACPI_OPERAND_OBJECT **ReturnObject);
236
237ACPI_STATUS
238AcpiNsConvertToResource (
239 ACPI_NAMESPACE_NODE *Scope,
240 ACPI_OPERAND_OBJECT *OriginalObject,
241 ACPI_OPERAND_OBJECT **ReturnObject);
242
243ACPI_STATUS
244AcpiNsConvertToReference (
245 ACPI_NAMESPACE_NODE *Scope,
246 ACPI_OPERAND_OBJECT *OriginalObject,
247 ACPI_OPERAND_OBJECT **ReturnObject);
248
249
250/*
251 * nsdump - Namespace dump/print utilities
252 */
253void
254AcpiNsDumpTables (
255 ACPI_HANDLE SearchBase,
256 UINT32 MaxDepth);
257
258void
259AcpiNsDumpEntry (
260 ACPI_HANDLE Handle,
261 UINT32 DebugLevel);
262
263void
264AcpiNsDumpPathname (
265 ACPI_HANDLE Handle,
266 const char *Msg,
267 UINT32 Level,
268 UINT32 Component);
269
270void
271AcpiNsPrintPathname (
272 UINT32 NumSegments,
273 const char *Pathname);
274
275ACPI_STATUS
276AcpiNsDumpOneObject (
277 ACPI_HANDLE ObjHandle,
278 UINT32 Level,
279 void *Context,
280 void **ReturnValue);
281
282void
283AcpiNsDumpObjects (
284 ACPI_OBJECT_TYPE Type,
285 UINT8 DisplayType,
286 UINT32 MaxDepth,
287 ACPI_OWNER_ID OwnerId,
288 ACPI_HANDLE StartHandle);
289
290void
291AcpiNsDumpObjectPaths (
292 ACPI_OBJECT_TYPE Type,
293 UINT8 DisplayType,
294 UINT32 MaxDepth,
295 ACPI_OWNER_ID OwnerId,
296 ACPI_HANDLE StartHandle);
297
298
299/*
300 * nseval - Namespace evaluation functions
301 */
302ACPI_STATUS
303AcpiNsEvaluate (
304 ACPI_EVALUATE_INFO *Info);
305
306void
307AcpiNsExecModuleCodeList (
308 void);
309
310
311/*
312 * nsarguments - Argument count/type checking for predefined/reserved names
313 */
314void
315AcpiNsCheckArgumentCount (
316 char *Pathname,
317 ACPI_NAMESPACE_NODE *Node,
318 UINT32 UserParamCount,
319 const ACPI_PREDEFINED_INFO *Info);
320
321void
322AcpiNsCheckAcpiCompliance (
323 char *Pathname,
324 ACPI_NAMESPACE_NODE *Node,
325 const ACPI_PREDEFINED_INFO *Predefined);
326
327void
328AcpiNsCheckArgumentTypes (
329 ACPI_EVALUATE_INFO *Info);
330
331
332/*
333 * nspredef - Return value checking for predefined/reserved names
334 */
335ACPI_STATUS
336AcpiNsCheckReturnValue (
337 ACPI_NAMESPACE_NODE *Node,
338 ACPI_EVALUATE_INFO *Info,
339 UINT32 UserParamCount,
340 ACPI_STATUS ReturnStatus,
341 ACPI_OPERAND_OBJECT **ReturnObject);
342
343ACPI_STATUS
344AcpiNsCheckObjectType (
345 ACPI_EVALUATE_INFO *Info,
346 ACPI_OPERAND_OBJECT **ReturnObjectPtr,
347 UINT32 ExpectedBtypes,
348 UINT32 PackageIndex);
349
350
351/*
352 * nsprepkg - Validation of predefined name packages
353 */
354ACPI_STATUS
355AcpiNsCheckPackage (
356 ACPI_EVALUATE_INFO *Info,
357 ACPI_OPERAND_OBJECT **ReturnObjectPtr);
358
359
360/*
361 * nsnames - Name and Scope manipulation
362 */
363UINT32
364AcpiNsOpensScope (
365 ACPI_OBJECT_TYPE Type);
366
367char *
368AcpiNsGetExternalPathname (
369 ACPI_NAMESPACE_NODE *Node);
370
371UINT32
372AcpiNsBuildNormalizedPath (
373 ACPI_NAMESPACE_NODE *Node,
374 char *FullPath,
375 UINT32 PathSize,
376 BOOLEAN NoTrailing);
377
378char *
379AcpiNsGetNormalizedPathname (
380 ACPI_NAMESPACE_NODE *Node,
381 BOOLEAN NoTrailing);
382
383char *
384AcpiNsNameOfCurrentScope (
385 ACPI_WALK_STATE *WalkState);
386
387ACPI_STATUS
388AcpiNsHandleToPathname (
389 ACPI_HANDLE TargetHandle,
390 ACPI_BUFFER *Buffer,
391 BOOLEAN NoTrailing);
392
393BOOLEAN
394AcpiNsPatternMatch (
395 ACPI_NAMESPACE_NODE *ObjNode,
396 char *SearchFor);
397
398ACPI_STATUS
399AcpiNsGetNodeUnlocked (
400 ACPI_NAMESPACE_NODE *PrefixNode,
401 const char *ExternalPathname,
402 UINT32 Flags,
403 ACPI_NAMESPACE_NODE **OutNode);
404
405ACPI_STATUS
406AcpiNsGetNode (
407 ACPI_NAMESPACE_NODE *PrefixNode,
408 const char *ExternalPathname,
409 UINT32 Flags,
410 ACPI_NAMESPACE_NODE **OutNode);
411
412ACPI_SIZE
413AcpiNsGetPathnameLength (
414 ACPI_NAMESPACE_NODE *Node);
415
416
417/*
418 * nsobject - Object management for namespace nodes
419 */
420ACPI_STATUS
421AcpiNsAttachObject (
422 ACPI_NAMESPACE_NODE *Node,
423 ACPI_OPERAND_OBJECT *Object,
424 ACPI_OBJECT_TYPE Type);
425
426ACPI_OPERAND_OBJECT *
427AcpiNsGetAttachedObject (
428 ACPI_NAMESPACE_NODE *Node);
429
430ACPI_OPERAND_OBJECT *
431AcpiNsGetSecondaryObject (
432 ACPI_OPERAND_OBJECT *ObjDesc);
433
434ACPI_STATUS
435AcpiNsAttachData (
436 ACPI_NAMESPACE_NODE *Node,
437 ACPI_OBJECT_HANDLER Handler,
438 void *Data);
439
440ACPI_STATUS
441AcpiNsDetachData (
442 ACPI_NAMESPACE_NODE *Node,
443 ACPI_OBJECT_HANDLER Handler);
444
445ACPI_STATUS
446AcpiNsGetAttachedData (
447 ACPI_NAMESPACE_NODE *Node,
448 ACPI_OBJECT_HANDLER Handler,
449 void **Data);
450
451
452/*
453 * nsrepair - General return object repair for all
454 * predefined methods/objects
455 */
456ACPI_STATUS
457AcpiNsSimpleRepair (
458 ACPI_EVALUATE_INFO *Info,
459 UINT32 ExpectedBtypes,
460 UINT32 PackageIndex,
461 ACPI_OPERAND_OBJECT **ReturnObjectPtr);
462
463ACPI_STATUS
464AcpiNsWrapWithPackage (
465 ACPI_EVALUATE_INFO *Info,
466 ACPI_OPERAND_OBJECT *OriginalObject,
467 ACPI_OPERAND_OBJECT **ObjDescPtr);
468
469ACPI_STATUS
470AcpiNsRepairNullElement (
471 ACPI_EVALUATE_INFO *Info,
472 UINT32 ExpectedBtypes,
473 UINT32 PackageIndex,
474 ACPI_OPERAND_OBJECT **ReturnObjectPtr);
475
476void
477AcpiNsRemoveNullElements (
478 ACPI_EVALUATE_INFO *Info,
479 UINT8 PackageType,
480 ACPI_OPERAND_OBJECT *ObjDesc);
481
482
483/*
484 * nsrepair2 - Return object repair for specific
485 * predefined methods/objects
486 */
487ACPI_STATUS
488AcpiNsComplexRepairs (
489 ACPI_EVALUATE_INFO *Info,
490 ACPI_NAMESPACE_NODE *Node,
491 ACPI_STATUS ValidateStatus,
492 ACPI_OPERAND_OBJECT **ReturnObjectPtr);
493
494
495/*
496 * nssearch - Namespace searching and entry
497 */
498ACPI_STATUS
499AcpiNsSearchAndEnter (
500 UINT32 EntryName,
501 ACPI_WALK_STATE *WalkState,
502 ACPI_NAMESPACE_NODE *Node,
503 ACPI_INTERPRETER_MODE InterpreterMode,
504 ACPI_OBJECT_TYPE Type,
505 UINT32 Flags,
506 ACPI_NAMESPACE_NODE **RetNode);
507
508ACPI_STATUS
509AcpiNsSearchOneScope (
510 UINT32 EntryName,
511 ACPI_NAMESPACE_NODE *Node,
512 ACPI_OBJECT_TYPE Type,
513 ACPI_NAMESPACE_NODE **RetNode);
514
515void
516AcpiNsInstallNode (
517 ACPI_WALK_STATE *WalkState,
518 ACPI_NAMESPACE_NODE *ParentNode,
519 ACPI_NAMESPACE_NODE *Node,
520 ACPI_OBJECT_TYPE Type);
521
522
523/*
524 * nsutils - Utility functions
525 */
526ACPI_OBJECT_TYPE
527AcpiNsGetType (
528 ACPI_NAMESPACE_NODE *Node);
529
530UINT32
531AcpiNsLocal (
532 ACPI_OBJECT_TYPE Type);
533
534void
535AcpiNsPrintNodePathname (
536 ACPI_NAMESPACE_NODE *Node,
537 const char *Msg);
538
539ACPI_STATUS
540AcpiNsBuildInternalName (
541 ACPI_NAMESTRING_INFO *Info);
542
543void
544AcpiNsGetInternalNameLength (
545 ACPI_NAMESTRING_INFO *Info);
546
547ACPI_STATUS
548AcpiNsInternalizeName (
549 const char *DottedName,
550 char **ConvertedName);
551
552ACPI_STATUS
553AcpiNsExternalizeName (
554 UINT32 InternalNameLength,
555 const char *InternalName,
556 UINT32 *ConvertedNameLength,
557 char **ConvertedName);
558
559ACPI_NAMESPACE_NODE *
560AcpiNsValidateHandle (
561 ACPI_HANDLE Handle);
562
563void
564AcpiNsTerminate (
565 void);
566
567#endif /* __ACNAMESP_H__ */
568