xref: /illumos-gate/usr/src/uts/intel/sys/acpi/acutils.h (revision 66582b606a8194f7f3ba5b3a3a6dca5b0d346361)
1 /******************************************************************************
2  *
3  * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
4  *
5  *****************************************************************************/
6 
7 /******************************************************************************
8  *
9  * 1. Copyright Notice
10  *
11  * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp.
12  * All rights reserved.
13  *
14  * 2. License
15  *
16  * 2.1. This is your license from Intel Corp. under its intellectual property
17  * rights. You may have additional license terms from the party that provided
18  * you this software, covering your right to use that party's intellectual
19  * property rights.
20  *
21  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22  * copy of the source code appearing in this file ("Covered Code") an
23  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24  * base code distributed originally by Intel ("Original Intel Code") to copy,
25  * make derivatives, distribute, use and display any portion of the Covered
26  * Code in any form, with the right to sublicense such rights; and
27  *
28  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29  * license (with the right to sublicense), under only those claims of Intel
30  * patents that are infringed by the Original Intel Code, to make, use, sell,
31  * offer to sell, and import the Covered Code and derivative works thereof
32  * solely to the minimum extent necessary to exercise the above copyright
33  * license, and in no event shall the patent license extend to any additions
34  * to or modifications of the Original Intel Code. No other license or right
35  * is granted directly or by implication, estoppel or otherwise;
36  *
37  * The above copyright and patent license is granted only if the following
38  * conditions are met:
39  *
40  * 3. Conditions
41  *
42  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43  * Redistribution of source code of any substantial portion of the Covered
44  * Code or modification with rights to further distribute source must include
45  * the above Copyright Notice, the above License, this list of Conditions,
46  * and the following Disclaimer and Export Compliance provision. In addition,
47  * Licensee must cause all Covered Code to which Licensee contributes to
48  * contain a file documenting the changes Licensee made to create that Covered
49  * Code and the date of any change. Licensee must include in that file the
50  * documentation of any changes made by any predecessor Licensee. Licensee
51  * must include a prominent statement that the modification is derived,
52  * directly or indirectly, from Original Intel Code.
53  *
54  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55  * Redistribution of source code of any substantial portion of the Covered
56  * Code or modification without rights to further distribute source must
57  * include the following Disclaimer and Export Compliance provision in the
58  * documentation and/or other materials provided with distribution. In
59  * addition, Licensee may not authorize further sublicense of source of any
60  * portion of the Covered Code, and must include terms to the effect that the
61  * license from Licensee to its licensee is limited to the intellectual
62  * property embodied in the software Licensee provides to its licensee, and
63  * not to intellectual property embodied in modifications its licensee may
64  * make.
65  *
66  * 3.3. Redistribution of Executable. Redistribution in executable form of any
67  * substantial portion of the Covered Code or modification must reproduce the
68  * above Copyright Notice, and the following Disclaimer and Export Compliance
69  * provision in the documentation and/or other materials provided with the
70  * distribution.
71  *
72  * 3.4. Intel retains all right, title, and interest in and to the Original
73  * Intel Code.
74  *
75  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76  * Intel shall be used in advertising or otherwise to promote the sale, use or
77  * other dealings in products derived from or relating to the Covered Code
78  * without prior written authorization from Intel.
79  *
80  * 4. Disclaimer and Export Compliance
81  *
82  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88  * PARTICULAR PURPOSE.
89  *
90  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97  * LIMITED REMEDY.
98  *
99  * 4.3. Licensee shall not export, either directly or indirectly, any of this
100  * software or system incorporating such software without first obtaining any
101  * required license or other approval from the U. S. Department of Commerce or
102  * any other agency or department of the United States Government. In the
103  * event Licensee exports any such software from the United States or
104  * re-exports any such software from a foreign destination, Licensee shall
105  * ensure that the distribution and export/re-export of the software is in
106  * compliance with all laws, regulations, orders, or other restrictions of the
107  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108  * any of its subsidiaries will export/re-export any technical data, process,
109  * software, or service, directly or indirectly, to any country for which the
110  * United States government or any agency thereof requires an export license,
111  * other governmental approval, or letter of assurance, without first obtaining
112  * such license, approval or letter.
113  *
114  *****************************************************************************
115  *
116  * Alternatively, you may choose to be licensed under the terms of the
117  * following license:
118  *
119  * Redistribution and use in source and binary forms, with or without
120  * modification, are permitted provided that the following conditions
121  * are met:
122  * 1. Redistributions of source code must retain the above copyright
123  *    notice, this list of conditions, and the following disclaimer,
124  *    without modification.
125  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126  *    substantially similar to the "NO WARRANTY" disclaimer below
127  *    ("Disclaimer") and any redistribution must be conditioned upon
128  *    including a substantially similar Disclaimer requirement for further
129  *    binary redistribution.
130  * 3. Neither the names of the above-listed copyright holders nor the names
131  *    of any contributors may be used to endorse or promote products derived
132  *    from this software without specific prior written permission.
133  *
134  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145  *
146  * Alternatively, you may choose to be licensed under the terms of the
147  * GNU General Public License ("GPL") version 2 as published by the Free
148  * Software Foundation.
149  *
150  *****************************************************************************/
151 
152 #ifndef _ACUTILS_H
153 #define _ACUTILS_H
154 
155 
156 extern const UINT8                      AcpiGbl_ResourceAmlSizes[];
157 extern const UINT8                      AcpiGbl_ResourceAmlSerialBusSizes[];
158 
159 /* Strings used by the disassembler and debugger resource dump routines */
160 
161 #if defined(ACPI_DEBUG_OUTPUT) || defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
162 
163 extern const char                       *AcpiGbl_BmDecode[];
164 extern const char                       *AcpiGbl_ConfigDecode[];
165 extern const char                       *AcpiGbl_ConsumeDecode[];
166 extern const char                       *AcpiGbl_DecDecode[];
167 extern const char                       *AcpiGbl_HeDecode[];
168 extern const char                       *AcpiGbl_IoDecode[];
169 extern const char                       *AcpiGbl_LlDecode[];
170 extern const char                       *AcpiGbl_MaxDecode[];
171 extern const char                       *AcpiGbl_MemDecode[];
172 extern const char                       *AcpiGbl_MinDecode[];
173 extern const char                       *AcpiGbl_MtpDecode[];
174 extern const char                       *AcpiGbl_RngDecode[];
175 extern const char                       *AcpiGbl_RwDecode[];
176 extern const char                       *AcpiGbl_ShrDecode[];
177 extern const char                       *AcpiGbl_SizDecode[];
178 extern const char                       *AcpiGbl_TrsDecode[];
179 extern const char                       *AcpiGbl_TtpDecode[];
180 extern const char                       *AcpiGbl_TypDecode[];
181 extern const char                       *AcpiGbl_PpcDecode[];
182 extern const char                       *AcpiGbl_IorDecode[];
183 extern const char                       *AcpiGbl_DtsDecode[];
184 extern const char                       *AcpiGbl_CtDecode[];
185 extern const char                       *AcpiGbl_SbtDecode[];
186 extern const char                       *AcpiGbl_AmDecode[];
187 extern const char                       *AcpiGbl_SmDecode[];
188 extern const char                       *AcpiGbl_WmDecode[];
189 extern const char                       *AcpiGbl_CphDecode[];
190 extern const char                       *AcpiGbl_CpoDecode[];
191 extern const char                       *AcpiGbl_DpDecode[];
192 extern const char                       *AcpiGbl_EdDecode[];
193 extern const char                       *AcpiGbl_BpbDecode[];
194 extern const char                       *AcpiGbl_SbDecode[];
195 extern const char                       *AcpiGbl_FcDecode[];
196 extern const char                       *AcpiGbl_PtDecode[];
197 extern const char                       *AcpiGbl_PtypDecode[];
198 #endif
199 
200 /*
201  * For the iASL compiler case, the output is redirected to stderr so that
202  * any of the various ACPI errors and warnings do not appear in the output
203  * files, for either the compiler or disassembler portions of the tool.
204  */
205 #ifdef ACPI_ASL_COMPILER
206 
207 #include <stdio.h>
208 
209 #define ACPI_MSG_REDIRECT_BEGIN \
210     FILE                    *OutputFile = AcpiGbl_OutputFile; \
211     AcpiOsRedirectOutput (stderr);
212 
213 #define ACPI_MSG_REDIRECT_END \
214     AcpiOsRedirectOutput (OutputFile);
215 
216 #else
217 /*
218  * non-iASL case - no redirection, nothing to do
219  */
220 #define ACPI_MSG_REDIRECT_BEGIN
221 #define ACPI_MSG_REDIRECT_END
222 #endif
223 
224 /*
225  * Common error message prefixes
226  */
227 #ifndef ACPI_MSG_ERROR
228 #define ACPI_MSG_ERROR          "ACPI Error: "
229 #endif
230 #ifndef ACPI_MSG_WARNING
231 #define ACPI_MSG_WARNING        "ACPI Warning: "
232 #endif
233 #ifndef ACPI_MSG_INFO
234 #define ACPI_MSG_INFO           "ACPI: "
235 #endif
236 
237 #ifndef ACPI_MSG_BIOS_ERROR
238 #define ACPI_MSG_BIOS_ERROR     "Firmware Error (ACPI): "
239 #endif
240 #ifndef ACPI_MSG_BIOS_WARNING
241 #define ACPI_MSG_BIOS_WARNING   "Firmware Warning (ACPI): "
242 #endif
243 
244 /*
245  * Common message suffix
246  */
247 #define ACPI_MSG_SUFFIX \
248     AcpiOsPrintf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, ModuleName, LineNumber)
249 
250 /* Flags to indicate implicit or explicit string-to-integer conversion */
251 
252 #define ACPI_IMPLICIT_CONVERSION        TRUE
253 #define ACPI_NO_IMPLICIT_CONVERSION     FALSE
254 
255 /* Types for Resource descriptor entries */
256 
257 #define ACPI_INVALID_RESOURCE           0
258 #define ACPI_FIXED_LENGTH               1
259 #define ACPI_VARIABLE_LENGTH            2
260 #define ACPI_SMALL_VARIABLE_LENGTH      3
261 
262 typedef
263 ACPI_STATUS (*ACPI_WALK_AML_CALLBACK) (
264     UINT8                   *Aml,
265     UINT32                  Length,
266     UINT32                  Offset,
267     UINT8                   ResourceIndex,
268     void                    **Context);
269 
270 typedef
271 ACPI_STATUS (*ACPI_PKG_CALLBACK) (
272     UINT8                   ObjectType,
273     ACPI_OPERAND_OBJECT     *SourceObject,
274     ACPI_GENERIC_STATE      *State,
275     void                    *Context);
276 
277 typedef struct acpi_pkg_info
278 {
279     UINT8                   *FreeSpace;
280     ACPI_SIZE               Length;
281     UINT32                  ObjectSpace;
282     UINT32                  NumPackages;
283 
284 } ACPI_PKG_INFO;
285 
286 /* Object reference counts */
287 
288 #define REF_INCREMENT       (UINT16) 0
289 #define REF_DECREMENT       (UINT16) 1
290 
291 /* AcpiUtDumpBuffer */
292 
293 #define DB_BYTE_DISPLAY     1
294 #define DB_WORD_DISPLAY     2
295 #define DB_DWORD_DISPLAY    4
296 #define DB_QWORD_DISPLAY    8
297 
298 
299 /*
300  * utascii - ASCII utilities
301  */
302 BOOLEAN
303 AcpiUtValidNameseg (
304     char                    *Signature);
305 
306 BOOLEAN
307 AcpiUtValidNameChar (
308     char                    Character,
309     UINT32                  Position);
310 
311 void
312 AcpiUtCheckAndRepairAscii (
313     UINT8                   *Name,
314     char                    *RepairedName,
315     UINT32                  Count);
316 
317 
318 /*
319  * utnonansi - Non-ANSI C library functions
320  */
321 void
322 AcpiUtStrupr (
323     char                    *SrcString);
324 
325 void
326 AcpiUtStrlwr (
327     char                    *SrcString);
328 
329 int
330 AcpiUtStricmp (
331     char                    *String1,
332     char                    *String2);
333 
334 
335 /*
336  * utstrsuppt - string-to-integer conversion support functions
337  */
338 ACPI_STATUS
339 AcpiUtConvertOctalString (
340     char                    *String,
341     UINT64                  *ReturnValue);
342 
343 ACPI_STATUS
344 AcpiUtConvertDecimalString (
345     char                    *String,
346     UINT64                  *ReturnValuePtr);
347 
348 ACPI_STATUS
349 AcpiUtConvertHexString (
350     char                    *String,
351     UINT64                  *ReturnValuePtr);
352 
353 char
354 AcpiUtRemoveWhitespace (
355     char                    **String);
356 
357 char
358 AcpiUtRemoveLeadingZeros (
359     char                    **String);
360 
361 BOOLEAN
362 AcpiUtDetectHexPrefix (
363     char                    **String);
364 
365 BOOLEAN
366 AcpiUtDetectOctalPrefix (
367     char                    **String);
368 
369 
370 /*
371  * utstrtoul64 - string-to-integer conversion functions
372  */
373 ACPI_STATUS
374 AcpiUtStrtoul64 (
375     char                    *String,
376     UINT64                  *RetInteger);
377 
378 UINT64
379 AcpiUtExplicitStrtoul64 (
380     char                    *String);
381 
382 UINT64
383 AcpiUtImplicitStrtoul64 (
384     char                    *String);
385 
386 
387 /*
388  * utglobal - Global data structures and procedures
389  */
390 ACPI_STATUS
391 AcpiUtInitGlobals (
392     void);
393 
394 const char *
395 AcpiUtGetMutexName (
396     UINT32                  MutexId);
397 
398 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
399 
400 const char *
401 AcpiUtGetNotifyName (
402     UINT32                  NotifyValue,
403     ACPI_OBJECT_TYPE        Type);
404 #endif
405 
406 const char *
407 AcpiUtGetTypeName (
408     ACPI_OBJECT_TYPE        Type);
409 
410 const char *
411 AcpiUtGetNodeName (
412     void                    *Object);
413 
414 const char *
415 AcpiUtGetDescriptorName (
416     void                    *Object);
417 
418 const char *
419 AcpiUtGetReferenceName (
420     ACPI_OPERAND_OBJECT     *Object);
421 
422 const char *
423 AcpiUtGetObjectTypeName (
424     ACPI_OPERAND_OBJECT     *ObjDesc);
425 
426 const char *
427 AcpiUtGetRegionName (
428     UINT8                   SpaceId);
429 
430 const char *
431 AcpiUtGetEventName (
432     UINT32                  EventId);
433 
434 const char *
435 AcpiUtGetArgumentTypeName (
436     UINT32                  ArgType);
437 
438 char
439 AcpiUtHexToAsciiChar (
440     UINT64                  Integer,
441     UINT32                  Position);
442 
443 ACPI_STATUS
444 AcpiUtAsciiToHexByte (
445     char                    *TwoAsciiChars,
446     UINT8                   *ReturnByte);
447 
448 UINT8
449 AcpiUtAsciiCharToHex (
450     int                     HexChar);
451 
452 BOOLEAN
453 AcpiUtValidObjectType (
454     ACPI_OBJECT_TYPE        Type);
455 
456 
457 /*
458  * utinit - miscellaneous initialization and shutdown
459  */
460 ACPI_STATUS
461 AcpiUtHardwareInitialize (
462     void);
463 
464 void
465 AcpiUtSubsystemShutdown (
466     void);
467 
468 
469 /*
470  * utcopy - Object construction and conversion interfaces
471  */
472 ACPI_STATUS
473 AcpiUtBuildSimpleObject(
474     ACPI_OPERAND_OBJECT     *Obj,
475     ACPI_OBJECT             *UserObj,
476     UINT8                   *DataSpace,
477     UINT32                  *BufferSpaceUsed);
478 
479 ACPI_STATUS
480 AcpiUtBuildPackageObject (
481     ACPI_OPERAND_OBJECT     *Obj,
482     UINT8                   *Buffer,
483     UINT32                  *SpaceUsed);
484 
485 ACPI_STATUS
486 AcpiUtCopyIobjectToEobject (
487     ACPI_OPERAND_OBJECT     *Obj,
488     ACPI_BUFFER             *RetBuffer);
489 
490 ACPI_STATUS
491 AcpiUtCopyEobjectToIobject (
492     ACPI_OBJECT             *Obj,
493     ACPI_OPERAND_OBJECT     **InternalObj);
494 
495 ACPI_STATUS
496 AcpiUtCopyISimpleToIsimple (
497     ACPI_OPERAND_OBJECT     *SourceObj,
498     ACPI_OPERAND_OBJECT     *DestObj);
499 
500 ACPI_STATUS
501 AcpiUtCopyIobjectToIobject (
502     ACPI_OPERAND_OBJECT     *SourceDesc,
503     ACPI_OPERAND_OBJECT     **DestDesc,
504     ACPI_WALK_STATE         *WalkState);
505 
506 
507 /*
508  * utcreate - Object creation
509  */
510 ACPI_STATUS
511 AcpiUtUpdateObjectReference (
512     ACPI_OPERAND_OBJECT     *Object,
513     UINT16                  Action);
514 
515 
516 /*
517  * utdebug - Debug interfaces
518  */
519 void
520 AcpiUtInitStackPtrTrace (
521     void);
522 
523 void
524 AcpiUtTrackStackPtr (
525     void);
526 
527 void
528 AcpiUtTrace (
529     UINT32                  LineNumber,
530     const char              *FunctionName,
531     const char              *ModuleName,
532     UINT32                  ComponentId);
533 
534 void
535 AcpiUtTracePtr (
536     UINT32                  LineNumber,
537     const char              *FunctionName,
538     const char              *ModuleName,
539     UINT32                  ComponentId,
540     const void              *Pointer);
541 
542 void
543 AcpiUtTraceU32 (
544     UINT32                  LineNumber,
545     const char              *FunctionName,
546     const char              *ModuleName,
547     UINT32                  ComponentId,
548     UINT32                  Integer);
549 
550 void
551 AcpiUtTraceStr (
552     UINT32                  LineNumber,
553     const char              *FunctionName,
554     const char              *ModuleName,
555     UINT32                  ComponentId,
556     const char              *String);
557 
558 void
559 AcpiUtExit (
560     UINT32                  LineNumber,
561     const char              *FunctionName,
562     const char              *ModuleName,
563     UINT32                  ComponentId);
564 
565 void
566 AcpiUtStatusExit (
567     UINT32                  LineNumber,
568     const char              *FunctionName,
569     const char              *ModuleName,
570     UINT32                  ComponentId,
571     ACPI_STATUS             Status);
572 
573 void
574 AcpiUtValueExit (
575     UINT32                  LineNumber,
576     const char              *FunctionName,
577     const char              *ModuleName,
578     UINT32                  ComponentId,
579     UINT64                  Value);
580 
581 void
582 AcpiUtPtrExit (
583     UINT32                  LineNumber,
584     const char              *FunctionName,
585     const char              *ModuleName,
586     UINT32                  ComponentId,
587     UINT8                   *Ptr);
588 
589 void
590 AcpiUtStrExit (
591     UINT32                  LineNumber,
592     const char              *FunctionName,
593     const char              *ModuleName,
594     UINT32                  ComponentId,
595     const char              *String);
596 
597 void
598 AcpiUtDebugDumpBuffer (
599     UINT8                   *Buffer,
600     UINT32                  Count,
601     UINT32                  Display,
602     UINT32                  ComponentId);
603 
604 void
605 AcpiUtDumpBuffer (
606     UINT8                   *Buffer,
607     UINT32                  Count,
608     UINT32                  Display,
609     UINT32                  Offset);
610 
611 #ifdef ACPI_APPLICATION
612 void
613 AcpiUtDumpBufferToFile (
614     ACPI_FILE               File,
615     UINT8                   *Buffer,
616     UINT32                  Count,
617     UINT32                  Display,
618     UINT32                  BaseOffset);
619 #endif
620 
621 void
622 AcpiUtReportError (
623     char                    *ModuleName,
624     UINT32                  LineNumber);
625 
626 void
627 AcpiUtReportInfo (
628     char                    *ModuleName,
629     UINT32                  LineNumber);
630 
631 void
632 AcpiUtReportWarning (
633     char                    *ModuleName,
634     UINT32                  LineNumber);
635 
636 
637 /*
638  * utdelete - Object deletion and reference counts
639  */
640 void
641 AcpiUtAddReference (
642     ACPI_OPERAND_OBJECT     *Object);
643 
644 void
645 AcpiUtRemoveReference (
646     ACPI_OPERAND_OBJECT     *Object);
647 
648 void
649 AcpiUtDeleteInternalPackageObject (
650     ACPI_OPERAND_OBJECT     *Object);
651 
652 void
653 AcpiUtDeleteInternalSimpleObject (
654     ACPI_OPERAND_OBJECT     *Object);
655 
656 void
657 AcpiUtDeleteInternalObjectList (
658     ACPI_OPERAND_OBJECT     **ObjList);
659 
660 
661 /*
662  * uteval - object evaluation
663  */
664 ACPI_STATUS
665 AcpiUtEvaluateObject (
666     ACPI_NAMESPACE_NODE     *PrefixNode,
667     const char              *Path,
668     UINT32                  ExpectedReturnBtypes,
669     ACPI_OPERAND_OBJECT     **ReturnDesc);
670 
671 ACPI_STATUS
672 AcpiUtEvaluateNumericObject (
673     const char              *ObjectName,
674     ACPI_NAMESPACE_NODE     *DeviceNode,
675     UINT64                  *Value);
676 
677 ACPI_STATUS
678 AcpiUtExecute_STA (
679     ACPI_NAMESPACE_NODE     *DeviceNode,
680     UINT32                  *StatusFlags);
681 
682 ACPI_STATUS
683 AcpiUtExecutePowerMethods (
684     ACPI_NAMESPACE_NODE     *DeviceNode,
685     const char              **MethodNames,
686     UINT8                   MethodCount,
687     UINT8                   *OutValues);
688 
689 
690 /*
691  * utids - device ID support
692  */
693 ACPI_STATUS
694 AcpiUtExecute_HID (
695     ACPI_NAMESPACE_NODE     *DeviceNode,
696     ACPI_PNP_DEVICE_ID      **ReturnId);
697 
698 ACPI_STATUS
699 AcpiUtExecute_UID (
700     ACPI_NAMESPACE_NODE     *DeviceNode,
701     ACPI_PNP_DEVICE_ID      **ReturnId);
702 
703 ACPI_STATUS
704 AcpiUtExecute_CID (
705     ACPI_NAMESPACE_NODE     *DeviceNode,
706     ACPI_PNP_DEVICE_ID_LIST **ReturnCidList);
707 
708 ACPI_STATUS
709 AcpiUtExecute_CLS (
710     ACPI_NAMESPACE_NODE     *DeviceNode,
711     ACPI_PNP_DEVICE_ID      **ReturnId);
712 
713 
714 /*
715  * utlock - reader/writer locks
716  */
717 ACPI_STATUS
718 AcpiUtCreateRwLock (
719     ACPI_RW_LOCK            *Lock);
720 
721 void
722 AcpiUtDeleteRwLock (
723     ACPI_RW_LOCK            *Lock);
724 
725 ACPI_STATUS
726 AcpiUtAcquireReadLock (
727     ACPI_RW_LOCK            *Lock);
728 
729 ACPI_STATUS
730 AcpiUtReleaseReadLock (
731     ACPI_RW_LOCK            *Lock);
732 
733 ACPI_STATUS
734 AcpiUtAcquireWriteLock (
735     ACPI_RW_LOCK            *Lock);
736 
737 void
738 AcpiUtReleaseWriteLock (
739     ACPI_RW_LOCK            *Lock);
740 
741 
742 /*
743  * utobject - internal object create/delete/cache routines
744  */
745 ACPI_OPERAND_OBJECT  *
746 AcpiUtCreateInternalObjectDbg (
747     const char              *ModuleName,
748     UINT32                  LineNumber,
749     UINT32                  ComponentId,
750     ACPI_OBJECT_TYPE        Type);
751 
752 void *
753 AcpiUtAllocateObjectDescDbg (
754     const char              *ModuleName,
755     UINT32                  LineNumber,
756     UINT32                  ComponentId);
757 
758 #define AcpiUtCreateInternalObject(t)   AcpiUtCreateInternalObjectDbg (_AcpiModuleName,__LINE__,_COMPONENT,t)
759 #define AcpiUtAllocateObjectDesc()      AcpiUtAllocateObjectDescDbg (_AcpiModuleName,__LINE__,_COMPONENT)
760 
761 void
762 AcpiUtDeleteObjectDesc (
763     ACPI_OPERAND_OBJECT     *Object);
764 
765 BOOLEAN
766 AcpiUtValidInternalObject (
767     void                    *Object);
768 
769 ACPI_OPERAND_OBJECT *
770 AcpiUtCreatePackageObject (
771     UINT32                  Count);
772 
773 ACPI_OPERAND_OBJECT *
774 AcpiUtCreateIntegerObject (
775     UINT64                  Value);
776 
777 ACPI_OPERAND_OBJECT *
778 AcpiUtCreateBufferObject (
779     ACPI_SIZE               BufferSize);
780 
781 ACPI_OPERAND_OBJECT *
782 AcpiUtCreateStringObject (
783     ACPI_SIZE               StringSize);
784 
785 ACPI_STATUS
786 AcpiUtGetObjectSize(
787     ACPI_OPERAND_OBJECT     *Obj,
788     ACPI_SIZE               *ObjLength);
789 
790 
791 /*
792  * utosi - Support for the _OSI predefined control method
793  */
794 ACPI_STATUS
795 AcpiUtInitializeInterfaces (
796     void);
797 
798 ACPI_STATUS
799 AcpiUtInterfaceTerminate (
800     void);
801 
802 ACPI_STATUS
803 AcpiUtInstallInterface (
804     ACPI_STRING             InterfaceName);
805 
806 ACPI_STATUS
807 AcpiUtRemoveInterface (
808     ACPI_STRING             InterfaceName);
809 
810 ACPI_STATUS
811 AcpiUtUpdateInterfaces (
812     UINT8                   Action);
813 
814 ACPI_INTERFACE_INFO *
815 AcpiUtGetInterface (
816     ACPI_STRING             InterfaceName);
817 
818 ACPI_STATUS
819 AcpiUtOsiImplementation (
820     ACPI_WALK_STATE         *WalkState);
821 
822 
823 /*
824  * utpredef - support for predefined names
825  */
826 const ACPI_PREDEFINED_INFO *
827 AcpiUtGetNextPredefinedMethod (
828     const ACPI_PREDEFINED_INFO  *ThisName);
829 
830 const ACPI_PREDEFINED_INFO *
831 AcpiUtMatchPredefinedMethod (
832     char                        *Name);
833 
834 void
835 AcpiUtGetExpectedReturnTypes (
836     char                    *Buffer,
837     UINT32                  ExpectedBtypes);
838 
839 #if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP)
840 const ACPI_PREDEFINED_INFO *
841 AcpiUtMatchResourceName (
842     char                        *Name);
843 
844 void
845 AcpiUtDisplayPredefinedMethod (
846     char                        *Buffer,
847     const ACPI_PREDEFINED_INFO  *ThisName,
848     BOOLEAN                     MultiLine);
849 
850 UINT32
851 AcpiUtGetResourceBitWidth (
852     char                    *Buffer,
853     UINT16                  Types);
854 #endif
855 
856 
857 /*
858  * utstate - Generic state creation/cache routines
859  */
860 void
861 AcpiUtPushGenericState (
862     ACPI_GENERIC_STATE      **ListHead,
863     ACPI_GENERIC_STATE      *State);
864 
865 ACPI_GENERIC_STATE *
866 AcpiUtPopGenericState (
867     ACPI_GENERIC_STATE      **ListHead);
868 
869 
870 ACPI_GENERIC_STATE *
871 AcpiUtCreateGenericState (
872     void);
873 
874 ACPI_THREAD_STATE *
875 AcpiUtCreateThreadState (
876     void);
877 
878 ACPI_GENERIC_STATE *
879 AcpiUtCreateUpdateState (
880     ACPI_OPERAND_OBJECT     *Object,
881     UINT16                  Action);
882 
883 ACPI_GENERIC_STATE *
884 AcpiUtCreatePkgState (
885     void                    *InternalObject,
886     void                    *ExternalObject,
887     UINT32                  Index);
888 
889 ACPI_STATUS
890 AcpiUtCreateUpdateStateAndPush (
891     ACPI_OPERAND_OBJECT     *Object,
892     UINT16                  Action,
893     ACPI_GENERIC_STATE      **StateList);
894 
895 ACPI_GENERIC_STATE *
896 AcpiUtCreateControlState (
897     void);
898 
899 void
900 AcpiUtDeleteGenericState (
901     ACPI_GENERIC_STATE      *State);
902 
903 
904 /*
905  * utmath
906  */
907 ACPI_STATUS
908 AcpiUtDivide (
909     UINT64                  InDividend,
910     UINT64                  InDivisor,
911     UINT64                  *OutQuotient,
912     UINT64                  *OutRemainder);
913 
914 ACPI_STATUS
915 AcpiUtShortDivide (
916     UINT64                  InDividend,
917     UINT32                  Divisor,
918     UINT64                  *OutQuotient,
919     UINT32                  *OutRemainder);
920 
921 ACPI_STATUS
922 AcpiUtShortMultiply (
923     UINT64                  InMultiplicand,
924     UINT32                  Multiplier,
925     UINT64                  *Outproduct);
926 
927 ACPI_STATUS
928 AcpiUtShortShiftLeft (
929     UINT64                  Operand,
930     UINT32                  Count,
931     UINT64                  *OutResult);
932 
933 ACPI_STATUS
934 AcpiUtShortShiftRight (
935     UINT64                  Operand,
936     UINT32                  Count,
937     UINT64                  *OutResult);
938 
939 
940 /*
941  * utmisc
942  */
943 const ACPI_EXCEPTION_INFO *
944 AcpiUtValidateException (
945     ACPI_STATUS             Status);
946 
947 BOOLEAN
948 AcpiUtIsPciRootBridge (
949     char                    *Id);
950 
951 #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_NAMES_APP)
952 BOOLEAN
953 AcpiUtIsAmlTable (
954     ACPI_TABLE_HEADER       *Table);
955 #endif
956 
957 ACPI_STATUS
958 AcpiUtWalkPackageTree (
959     ACPI_OPERAND_OBJECT     *SourceObject,
960     void                    *TargetObject,
961     ACPI_PKG_CALLBACK       WalkCallback,
962     void                    *Context);
963 
964 /* Values for Base above (16=Hex, 10=Decimal) */
965 
966 #define ACPI_ANY_BASE        0
967 
968 
969 UINT32
970 AcpiUtDwordByteSwap (
971     UINT32                  Value);
972 
973 void
974 AcpiUtSetIntegerWidth (
975     UINT8                   Revision);
976 
977 #ifdef ACPI_DEBUG_OUTPUT
978 void
979 AcpiUtDisplayInitPathname (
980     UINT8                   Type,
981     ACPI_NAMESPACE_NODE     *ObjHandle,
982     const char              *Path);
983 #endif
984 
985 
986 /*
987  * utownerid - Support for Table/Method Owner IDs
988  */
989 ACPI_STATUS
990 AcpiUtAllocateOwnerId (
991     ACPI_OWNER_ID           *OwnerId);
992 
993 void
994 AcpiUtReleaseOwnerId (
995     ACPI_OWNER_ID           *OwnerId);
996 
997 
998 /*
999  * utresrc
1000  */
1001 ACPI_STATUS
1002 AcpiUtWalkAmlResources (
1003     ACPI_WALK_STATE         *WalkState,
1004     UINT8                   *Aml,
1005     ACPI_SIZE               AmlLength,
1006     ACPI_WALK_AML_CALLBACK  UserFunction,
1007     void                    **Context);
1008 
1009 ACPI_STATUS
1010 AcpiUtValidateResource (
1011     ACPI_WALK_STATE         *WalkState,
1012     void                    *Aml,
1013     UINT8                   *ReturnIndex);
1014 
1015 UINT32
1016 AcpiUtGetDescriptorLength (
1017     void                    *Aml);
1018 
1019 UINT16
1020 AcpiUtGetResourceLength (
1021     void                    *Aml);
1022 
1023 UINT8
1024 AcpiUtGetResourceHeaderLength (
1025     void                    *Aml);
1026 
1027 UINT8
1028 AcpiUtGetResourceType (
1029     void                    *Aml);
1030 
1031 ACPI_STATUS
1032 AcpiUtGetResourceEndTag (
1033     ACPI_OPERAND_OBJECT     *ObjDesc,
1034     UINT8                   **EndTag);
1035 
1036 
1037 /*
1038  * utstring - String and character utilities
1039  */
1040 void
1041 AcpiUtPrintString (
1042     char                    *String,
1043     UINT16                  MaxLength);
1044 
1045 #if defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP
1046 void
1047 UtConvertBackslashes (
1048     char                    *Pathname);
1049 #endif
1050 
1051 void
1052 AcpiUtRepairName (
1053     char                    *Name);
1054 
1055 #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT)
1056 BOOLEAN
1057 AcpiUtSafeStrcpy (
1058     char                    *Dest,
1059     ACPI_SIZE               DestSize,
1060     char                    *Source);
1061 
1062 void
1063 AcpiUtSafeStrncpy (
1064     char                    *Dest,
1065     char                    *Source,
1066     ACPI_SIZE               DestSize);
1067 
1068 BOOLEAN
1069 AcpiUtSafeStrcat (
1070     char                    *Dest,
1071     ACPI_SIZE               DestSize,
1072     char                    *Source);
1073 
1074 BOOLEAN
1075 AcpiUtSafeStrncat (
1076     char                    *Dest,
1077     ACPI_SIZE               DestSize,
1078     char                    *Source,
1079     ACPI_SIZE               MaxTransferLength);
1080 #endif
1081 
1082 
1083 /*
1084  * utmutex - mutex support
1085  */
1086 ACPI_STATUS
1087 AcpiUtMutexInitialize (
1088     void);
1089 
1090 void
1091 AcpiUtMutexTerminate (
1092     void);
1093 
1094 ACPI_STATUS
1095 AcpiUtAcquireMutex (
1096     ACPI_MUTEX_HANDLE       MutexId);
1097 
1098 ACPI_STATUS
1099 AcpiUtReleaseMutex (
1100     ACPI_MUTEX_HANDLE       MutexId);
1101 
1102 
1103 /*
1104  * utalloc - memory allocation and object caching
1105  */
1106 ACPI_STATUS
1107 AcpiUtCreateCaches (
1108     void);
1109 
1110 ACPI_STATUS
1111 AcpiUtDeleteCaches (
1112     void);
1113 
1114 ACPI_STATUS
1115 AcpiUtValidateBuffer (
1116     ACPI_BUFFER             *Buffer);
1117 
1118 ACPI_STATUS
1119 AcpiUtInitializeBuffer (
1120     ACPI_BUFFER             *Buffer,
1121     ACPI_SIZE               RequiredLength);
1122 
1123 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
1124 void *
1125 AcpiUtAllocateAndTrack (
1126     ACPI_SIZE               Size,
1127     UINT32                  Component,
1128     const char              *Module,
1129     UINT32                  Line);
1130 
1131 void *
1132 AcpiUtAllocateZeroedAndTrack (
1133     ACPI_SIZE               Size,
1134     UINT32                  Component,
1135     const char              *Module,
1136     UINT32                  Line);
1137 
1138 void
1139 AcpiUtFreeAndTrack (
1140     void                    *Address,
1141     UINT32                  Component,
1142     const char              *Module,
1143     UINT32                  Line);
1144 
1145 void
1146 AcpiUtDumpAllocationInfo (
1147     void);
1148 
1149 void
1150 AcpiUtDumpAllocations (
1151     UINT32                  Component,
1152     const char              *Module);
1153 
1154 ACPI_STATUS
1155 AcpiUtCreateList (
1156     const char              *ListName,
1157     UINT16                  ObjectSize,
1158     ACPI_MEMORY_LIST        **ReturnCache);
1159 
1160 #endif /* ACPI_DBG_TRACK_ALLOCATIONS */
1161 
1162 
1163 /*
1164  * utaddress - address range check
1165  */
1166 ACPI_STATUS
1167 AcpiUtAddAddressRange (
1168     ACPI_ADR_SPACE_TYPE     SpaceId,
1169     ACPI_PHYSICAL_ADDRESS   Address,
1170     UINT32                  Length,
1171     ACPI_NAMESPACE_NODE     *RegionNode);
1172 
1173 void
1174 AcpiUtRemoveAddressRange (
1175     ACPI_ADR_SPACE_TYPE     SpaceId,
1176     ACPI_NAMESPACE_NODE     *RegionNode);
1177 
1178 UINT32
1179 AcpiUtCheckAddressRange (
1180     ACPI_ADR_SPACE_TYPE     SpaceId,
1181     ACPI_PHYSICAL_ADDRESS   Address,
1182     UINT32                  Length,
1183     BOOLEAN                 Warn);
1184 
1185 void
1186 AcpiUtDeleteAddressLists (
1187     void);
1188 
1189 
1190 /*
1191  * utxferror - various error/warning output functions
1192  */
1193 void ACPI_INTERNAL_VAR_XFACE
1194 AcpiUtPredefinedWarning (
1195     const char              *ModuleName,
1196     UINT32                  LineNumber,
1197     char                    *Pathname,
1198     UINT8                   NodeFlags,
1199     const char              *Format,
1200     ...);
1201 
1202 void ACPI_INTERNAL_VAR_XFACE
1203 AcpiUtPredefinedInfo (
1204     const char              *ModuleName,
1205     UINT32                  LineNumber,
1206     char                    *Pathname,
1207     UINT8                   NodeFlags,
1208     const char              *Format,
1209     ...);
1210 
1211 void ACPI_INTERNAL_VAR_XFACE
1212 AcpiUtPredefinedBiosError (
1213     const char              *ModuleName,
1214     UINT32                  LineNumber,
1215     char                    *Pathname,
1216     UINT8                   NodeFlags,
1217     const char              *Format,
1218     ...);
1219 
1220 void
1221 AcpiUtPrefixedNamespaceError (
1222     const char              *ModuleName,
1223     UINT32                  LineNumber,
1224     ACPI_GENERIC_STATE      *PrefixScope,
1225     const char              *InternalName,
1226     ACPI_STATUS             LookupStatus);
1227 
1228 void
1229 AcpiUtMethodError (
1230     const char              *ModuleName,
1231     UINT32                  LineNumber,
1232     const char              *Message,
1233     ACPI_NAMESPACE_NODE     *Node,
1234     const char              *Path,
1235     ACPI_STATUS             LookupStatus);
1236 
1237 
1238 /*
1239  * Utility functions for ACPI names and IDs
1240  */
1241 const AH_PREDEFINED_NAME *
1242 AcpiAhMatchPredefinedName (
1243     char                    *Nameseg);
1244 
1245 const AH_DEVICE_ID *
1246 AcpiAhMatchHardwareId (
1247     char                    *Hid);
1248 
1249 const char *
1250 AcpiAhMatchUuid (
1251     UINT8                   *Data);
1252 
1253 
1254 /*
1255  * utuuid -- UUID support functions
1256  */
1257 #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_HELP_APP)
1258 void
1259 AcpiUtConvertStringToUuid (
1260     char                    *InString,
1261     UINT8                   *UuidBuffer);
1262 #endif
1263 
1264 #endif /* _ACUTILS_H */
1265