xref: /illumos-gate/usr/src/uts/intel/sys/acpi/acutils.h (revision 7b1019a6)
1 /******************************************************************************
2  *
3  * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
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 _ACUTILS_H
45 #define _ACUTILS_H
46 
47 
48 extern const UINT8                      AcpiGbl_ResourceAmlSizes[];
49 extern const UINT8                      AcpiGbl_ResourceAmlSerialBusSizes[];
50 
51 /* Strings used by the disassembler and debugger resource dump routines */
52 
53 #if defined(ACPI_DEBUG_OUTPUT) || defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
54 
55 extern const char                       *AcpiGbl_BmDecode[];
56 extern const char                       *AcpiGbl_ConfigDecode[];
57 extern const char                       *AcpiGbl_ConsumeDecode[];
58 extern const char                       *AcpiGbl_DecDecode[];
59 extern const char                       *AcpiGbl_HeDecode[];
60 extern const char                       *AcpiGbl_IoDecode[];
61 extern const char                       *AcpiGbl_LlDecode[];
62 extern const char                       *AcpiGbl_MaxDecode[];
63 extern const char                       *AcpiGbl_MemDecode[];
64 extern const char                       *AcpiGbl_MinDecode[];
65 extern const char                       *AcpiGbl_MtpDecode[];
66 extern const char                       *AcpiGbl_RngDecode[];
67 extern const char                       *AcpiGbl_RwDecode[];
68 extern const char                       *AcpiGbl_ShrDecode[];
69 extern const char                       *AcpiGbl_SizDecode[];
70 extern const char                       *AcpiGbl_TrsDecode[];
71 extern const char                       *AcpiGbl_TtpDecode[];
72 extern const char                       *AcpiGbl_TypDecode[];
73 extern const char                       *AcpiGbl_PpcDecode[];
74 extern const char                       *AcpiGbl_IorDecode[];
75 extern const char                       *AcpiGbl_DtsDecode[];
76 extern const char                       *AcpiGbl_CtDecode[];
77 extern const char                       *AcpiGbl_SbtDecode[];
78 extern const char                       *AcpiGbl_AmDecode[];
79 extern const char                       *AcpiGbl_SmDecode[];
80 extern const char                       *AcpiGbl_WmDecode[];
81 extern const char                       *AcpiGbl_CphDecode[];
82 extern const char                       *AcpiGbl_CpoDecode[];
83 extern const char                       *AcpiGbl_DpDecode[];
84 extern const char                       *AcpiGbl_EdDecode[];
85 extern const char                       *AcpiGbl_BpbDecode[];
86 extern const char                       *AcpiGbl_SbDecode[];
87 extern const char                       *AcpiGbl_FcDecode[];
88 extern const char                       *AcpiGbl_PtDecode[];
89 #endif
90 
91 /*
92  * For the iASL compiler case, the output is redirected to stderr so that
93  * any of the various ACPI errors and warnings do not appear in the output
94  * files, for either the compiler or disassembler portions of the tool.
95  */
96 #ifdef ACPI_ASL_COMPILER
97 
98 #include <stdio.h>
99 
100 #define ACPI_MSG_REDIRECT_BEGIN \
101     FILE                    *OutputFile = AcpiGbl_OutputFile; \
102     AcpiOsRedirectOutput (stderr);
103 
104 #define ACPI_MSG_REDIRECT_END \
105     AcpiOsRedirectOutput (OutputFile);
106 
107 #else
108 /*
109  * non-iASL case - no redirection, nothing to do
110  */
111 #define ACPI_MSG_REDIRECT_BEGIN
112 #define ACPI_MSG_REDIRECT_END
113 #endif
114 
115 /*
116  * Common error message prefixes
117  */
118 #ifndef ACPI_MSG_ERROR
119 #define ACPI_MSG_ERROR          "ACPI Error: "
120 #endif
121 #ifndef ACPI_MSG_EXCEPTION
122 #define ACPI_MSG_EXCEPTION      "ACPI Exception: "
123 #endif
124 #ifndef ACPI_MSG_WARNING
125 #define ACPI_MSG_WARNING        "ACPI Warning: "
126 #endif
127 #ifndef ACPI_MSG_INFO
128 #define ACPI_MSG_INFO           "ACPI: "
129 #endif
130 
131 #ifndef ACPI_MSG_BIOS_ERROR
132 #define ACPI_MSG_BIOS_ERROR     "ACPI BIOS Error (bug): "
133 #endif
134 #ifndef ACPI_MSG_BIOS_WARNING
135 #define ACPI_MSG_BIOS_WARNING   "ACPI BIOS Warning (bug): "
136 #endif
137 
138 /*
139  * Common message suffix
140  */
141 #define ACPI_MSG_SUFFIX \
142     AcpiOsPrintf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, ModuleName, LineNumber)
143 
144 
145 /* Types for Resource descriptor entries */
146 
147 #define ACPI_INVALID_RESOURCE           0
148 #define ACPI_FIXED_LENGTH               1
149 #define ACPI_VARIABLE_LENGTH            2
150 #define ACPI_SMALL_VARIABLE_LENGTH      3
151 
152 typedef
153 ACPI_STATUS (*ACPI_WALK_AML_CALLBACK) (
154     UINT8                   *Aml,
155     UINT32                  Length,
156     UINT32                  Offset,
157     UINT8                   ResourceIndex,
158     void                    **Context);
159 
160 typedef
161 ACPI_STATUS (*ACPI_PKG_CALLBACK) (
162     UINT8                   ObjectType,
163     ACPI_OPERAND_OBJECT     *SourceObject,
164     ACPI_GENERIC_STATE      *State,
165     void                    *Context);
166 
167 typedef struct acpi_pkg_info
168 {
169     UINT8                   *FreeSpace;
170     ACPI_SIZE               Length;
171     UINT32                  ObjectSpace;
172     UINT32                  NumPackages;
173 
174 } ACPI_PKG_INFO;
175 
176 /* Object reference counts */
177 
178 #define REF_INCREMENT       (UINT16) 0
179 #define REF_DECREMENT       (UINT16) 1
180 
181 /* AcpiUtDumpBuffer */
182 
183 #define DB_BYTE_DISPLAY     1
184 #define DB_WORD_DISPLAY     2
185 #define DB_DWORD_DISPLAY    4
186 #define DB_QWORD_DISPLAY    8
187 
188 
189 /*
190  * utascii - ASCII utilities
191  */
192 BOOLEAN
193 AcpiUtValidNameseg (
194     char                    *Signature);
195 
196 BOOLEAN
197 AcpiUtValidNameChar (
198     char                    Character,
199     UINT32                  Position);
200 
201 void
202 AcpiUtCheckAndRepairAscii (
203     UINT8                   *Name,
204     char                    *RepairedName,
205     UINT32                  Count);
206 
207 
208 /*
209  * utnonansi - Non-ANSI C library functions
210  */
211 void
212 AcpiUtStrupr (
213     char                    *SrcString);
214 
215 void
216 AcpiUtStrlwr (
217     char                    *SrcString);
218 
219 int
220 AcpiUtStricmp (
221     char                    *String1,
222     char                    *String2);
223 
224 ACPI_STATUS
225 AcpiUtStrtoul64 (
226     char                    *String,
227     UINT32                  Base,
228     UINT32                  MaxIntegerByteWidth,
229     UINT64                  *RetInteger);
230 
231 /* Values for MaxIntegerByteWidth above */
232 
233 #define ACPI_MAX32_BYTE_WIDTH       4
234 #define ACPI_MAX64_BYTE_WIDTH       8
235 
236 
237 /*
238  * utglobal - Global data structures and procedures
239  */
240 ACPI_STATUS
241 AcpiUtInitGlobals (
242     void);
243 
244 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
245 
246 const char *
247 AcpiUtGetMutexName (
248     UINT32                  MutexId);
249 
250 const char *
251 AcpiUtGetNotifyName (
252     UINT32                  NotifyValue,
253     ACPI_OBJECT_TYPE        Type);
254 #endif
255 
256 const char *
257 AcpiUtGetTypeName (
258     ACPI_OBJECT_TYPE        Type);
259 
260 const char *
261 AcpiUtGetNodeName (
262     void                    *Object);
263 
264 const char *
265 AcpiUtGetDescriptorName (
266     void                    *Object);
267 
268 const char *
269 AcpiUtGetReferenceName (
270     ACPI_OPERAND_OBJECT     *Object);
271 
272 const char *
273 AcpiUtGetObjectTypeName (
274     ACPI_OPERAND_OBJECT     *ObjDesc);
275 
276 const char *
277 AcpiUtGetRegionName (
278     UINT8                   SpaceId);
279 
280 const char *
281 AcpiUtGetEventName (
282     UINT32                  EventId);
283 
284 char
285 AcpiUtHexToAsciiChar (
286     UINT64                  Integer,
287     UINT32                  Position);
288 
289 UINT8
290 AcpiUtAsciiCharToHex (
291     int                     HexChar);
292 
293 BOOLEAN
294 AcpiUtValidObjectType (
295     ACPI_OBJECT_TYPE        Type);
296 
297 
298 /*
299  * utinit - miscellaneous initialization and shutdown
300  */
301 ACPI_STATUS
302 AcpiUtHardwareInitialize (
303     void);
304 
305 void
306 AcpiUtSubsystemShutdown (
307     void);
308 
309 
310 /*
311  * utcopy - Object construction and conversion interfaces
312  */
313 ACPI_STATUS
314 AcpiUtBuildSimpleObject(
315     ACPI_OPERAND_OBJECT     *Obj,
316     ACPI_OBJECT             *UserObj,
317     UINT8                   *DataSpace,
318     UINT32                  *BufferSpaceUsed);
319 
320 ACPI_STATUS
321 AcpiUtBuildPackageObject (
322     ACPI_OPERAND_OBJECT     *Obj,
323     UINT8                   *Buffer,
324     UINT32                  *SpaceUsed);
325 
326 ACPI_STATUS
327 AcpiUtCopyIobjectToEobject (
328     ACPI_OPERAND_OBJECT     *Obj,
329     ACPI_BUFFER             *RetBuffer);
330 
331 ACPI_STATUS
332 AcpiUtCopyEobjectToIobject (
333     ACPI_OBJECT             *Obj,
334     ACPI_OPERAND_OBJECT     **InternalObj);
335 
336 ACPI_STATUS
337 AcpiUtCopyISimpleToIsimple (
338     ACPI_OPERAND_OBJECT     *SourceObj,
339     ACPI_OPERAND_OBJECT     *DestObj);
340 
341 ACPI_STATUS
342 AcpiUtCopyIobjectToIobject (
343     ACPI_OPERAND_OBJECT     *SourceDesc,
344     ACPI_OPERAND_OBJECT     **DestDesc,
345     ACPI_WALK_STATE         *WalkState);
346 
347 
348 /*
349  * utcreate - Object creation
350  */
351 ACPI_STATUS
352 AcpiUtUpdateObjectReference (
353     ACPI_OPERAND_OBJECT     *Object,
354     UINT16                  Action);
355 
356 
357 /*
358  * utdebug - Debug interfaces
359  */
360 void
361 AcpiUtInitStackPtrTrace (
362     void);
363 
364 void
365 AcpiUtTrackStackPtr (
366     void);
367 
368 void
369 AcpiUtTrace (
370     UINT32                  LineNumber,
371     const char              *FunctionName,
372     const char              *ModuleName,
373     UINT32                  ComponentId);
374 
375 void
376 AcpiUtTracePtr (
377     UINT32                  LineNumber,
378     const char              *FunctionName,
379     const char              *ModuleName,
380     UINT32                  ComponentId,
381     const void              *Pointer);
382 
383 void
384 AcpiUtTraceU32 (
385     UINT32                  LineNumber,
386     const char              *FunctionName,
387     const char              *ModuleName,
388     UINT32                  ComponentId,
389     UINT32                  Integer);
390 
391 void
392 AcpiUtTraceStr (
393     UINT32                  LineNumber,
394     const char              *FunctionName,
395     const char              *ModuleName,
396     UINT32                  ComponentId,
397     const char              *String);
398 
399 void
400 AcpiUtExit (
401     UINT32                  LineNumber,
402     const char              *FunctionName,
403     const char              *ModuleName,
404     UINT32                  ComponentId);
405 
406 void
407 AcpiUtStatusExit (
408     UINT32                  LineNumber,
409     const char              *FunctionName,
410     const char              *ModuleName,
411     UINT32                  ComponentId,
412     ACPI_STATUS             Status);
413 
414 void
415 AcpiUtValueExit (
416     UINT32                  LineNumber,
417     const char              *FunctionName,
418     const char              *ModuleName,
419     UINT32                  ComponentId,
420     UINT64                  Value);
421 
422 void
423 AcpiUtPtrExit (
424     UINT32                  LineNumber,
425     const char              *FunctionName,
426     const char              *ModuleName,
427     UINT32                  ComponentId,
428     UINT8                   *Ptr);
429 
430 void
431 AcpiUtStrExit (
432     UINT32                  LineNumber,
433     const char              *FunctionName,
434     const char              *ModuleName,
435     UINT32                  ComponentId,
436     const char              *String);
437 
438 void
439 AcpiUtDebugDumpBuffer (
440     UINT8                   *Buffer,
441     UINT32                  Count,
442     UINT32                  Display,
443     UINT32                  ComponentId);
444 
445 void
446 AcpiUtDumpBuffer (
447     UINT8                   *Buffer,
448     UINT32                  Count,
449     UINT32                  Display,
450     UINT32                  Offset);
451 
452 #ifdef ACPI_APPLICATION
453 void
454 AcpiUtDumpBufferToFile (
455     ACPI_FILE               File,
456     UINT8                   *Buffer,
457     UINT32                  Count,
458     UINT32                  Display,
459     UINT32                  BaseOffset);
460 #endif
461 
462 void
463 AcpiUtReportError (
464     char                    *ModuleName,
465     UINT32                  LineNumber);
466 
467 void
468 AcpiUtReportInfo (
469     char                    *ModuleName,
470     UINT32                  LineNumber);
471 
472 void
473 AcpiUtReportWarning (
474     char                    *ModuleName,
475     UINT32                  LineNumber);
476 
477 
478 /*
479  * utdelete - Object deletion and reference counts
480  */
481 void
482 AcpiUtAddReference (
483     ACPI_OPERAND_OBJECT     *Object);
484 
485 void
486 AcpiUtRemoveReference (
487     ACPI_OPERAND_OBJECT     *Object);
488 
489 void
490 AcpiUtDeleteInternalPackageObject (
491     ACPI_OPERAND_OBJECT     *Object);
492 
493 void
494 AcpiUtDeleteInternalSimpleObject (
495     ACPI_OPERAND_OBJECT     *Object);
496 
497 void
498 AcpiUtDeleteInternalObjectList (
499     ACPI_OPERAND_OBJECT     **ObjList);
500 
501 
502 /*
503  * uteval - object evaluation
504  */
505 ACPI_STATUS
506 AcpiUtEvaluateObject (
507     ACPI_NAMESPACE_NODE     *PrefixNode,
508     const char              *Path,
509     UINT32                  ExpectedReturnBtypes,
510     ACPI_OPERAND_OBJECT     **ReturnDesc);
511 
512 ACPI_STATUS
513 AcpiUtEvaluateNumericObject (
514     const char              *ObjectName,
515     ACPI_NAMESPACE_NODE     *DeviceNode,
516     UINT64                  *Value);
517 
518 ACPI_STATUS
519 AcpiUtExecute_STA (
520     ACPI_NAMESPACE_NODE     *DeviceNode,
521     UINT32                  *StatusFlags);
522 
523 ACPI_STATUS
524 AcpiUtExecutePowerMethods (
525     ACPI_NAMESPACE_NODE     *DeviceNode,
526     const char              **MethodNames,
527     UINT8                   MethodCount,
528     UINT8                   *OutValues);
529 
530 
531 /*
532  * utids - device ID support
533  */
534 ACPI_STATUS
535 AcpiUtExecute_HID (
536     ACPI_NAMESPACE_NODE     *DeviceNode,
537     ACPI_PNP_DEVICE_ID      **ReturnId);
538 
539 ACPI_STATUS
540 AcpiUtExecute_UID (
541     ACPI_NAMESPACE_NODE     *DeviceNode,
542     ACPI_PNP_DEVICE_ID      **ReturnId);
543 
544 ACPI_STATUS
545 AcpiUtExecute_CID (
546     ACPI_NAMESPACE_NODE     *DeviceNode,
547     ACPI_PNP_DEVICE_ID_LIST **ReturnCidList);
548 
549 ACPI_STATUS
550 AcpiUtExecute_CLS (
551     ACPI_NAMESPACE_NODE     *DeviceNode,
552     ACPI_PNP_DEVICE_ID      **ReturnId);
553 
554 
555 /*
556  * utlock - reader/writer locks
557  */
558 ACPI_STATUS
559 AcpiUtCreateRwLock (
560     ACPI_RW_LOCK            *Lock);
561 
562 void
563 AcpiUtDeleteRwLock (
564     ACPI_RW_LOCK            *Lock);
565 
566 ACPI_STATUS
567 AcpiUtAcquireReadLock (
568     ACPI_RW_LOCK            *Lock);
569 
570 ACPI_STATUS
571 AcpiUtReleaseReadLock (
572     ACPI_RW_LOCK            *Lock);
573 
574 ACPI_STATUS
575 AcpiUtAcquireWriteLock (
576     ACPI_RW_LOCK            *Lock);
577 
578 void
579 AcpiUtReleaseWriteLock (
580     ACPI_RW_LOCK            *Lock);
581 
582 
583 /*
584  * utobject - internal object create/delete/cache routines
585  */
586 ACPI_OPERAND_OBJECT  *
587 AcpiUtCreateInternalObjectDbg (
588     const char              *ModuleName,
589     UINT32                  LineNumber,
590     UINT32                  ComponentId,
591     ACPI_OBJECT_TYPE        Type);
592 
593 void *
594 AcpiUtAllocateObjectDescDbg (
595     const char              *ModuleName,
596     UINT32                  LineNumber,
597     UINT32                  ComponentId);
598 
599 #define AcpiUtCreateInternalObject(t)   AcpiUtCreateInternalObjectDbg (_AcpiModuleName,__LINE__,_COMPONENT,t)
600 #define AcpiUtAllocateObjectDesc()      AcpiUtAllocateObjectDescDbg (_AcpiModuleName,__LINE__,_COMPONENT)
601 
602 void
603 AcpiUtDeleteObjectDesc (
604     ACPI_OPERAND_OBJECT     *Object);
605 
606 BOOLEAN
607 AcpiUtValidInternalObject (
608     void                    *Object);
609 
610 ACPI_OPERAND_OBJECT *
611 AcpiUtCreatePackageObject (
612     UINT32                  Count);
613 
614 ACPI_OPERAND_OBJECT *
615 AcpiUtCreateIntegerObject (
616     UINT64                  Value);
617 
618 ACPI_OPERAND_OBJECT *
619 AcpiUtCreateBufferObject (
620     ACPI_SIZE               BufferSize);
621 
622 ACPI_OPERAND_OBJECT *
623 AcpiUtCreateStringObject (
624     ACPI_SIZE               StringSize);
625 
626 ACPI_STATUS
627 AcpiUtGetObjectSize(
628     ACPI_OPERAND_OBJECT     *Obj,
629     ACPI_SIZE               *ObjLength);
630 
631 
632 /*
633  * utosi - Support for the _OSI predefined control method
634  */
635 ACPI_STATUS
636 AcpiUtInitializeInterfaces (
637     void);
638 
639 ACPI_STATUS
640 AcpiUtInterfaceTerminate (
641     void);
642 
643 ACPI_STATUS
644 AcpiUtInstallInterface (
645     ACPI_STRING             InterfaceName);
646 
647 ACPI_STATUS
648 AcpiUtRemoveInterface (
649     ACPI_STRING             InterfaceName);
650 
651 ACPI_STATUS
652 AcpiUtUpdateInterfaces (
653     UINT8                   Action);
654 
655 ACPI_INTERFACE_INFO *
656 AcpiUtGetInterface (
657     ACPI_STRING             InterfaceName);
658 
659 ACPI_STATUS
660 AcpiUtOsiImplementation (
661     ACPI_WALK_STATE         *WalkState);
662 
663 
664 /*
665  * utpredef - support for predefined names
666  */
667 const ACPI_PREDEFINED_INFO *
668 AcpiUtGetNextPredefinedMethod (
669     const ACPI_PREDEFINED_INFO  *ThisName);
670 
671 const ACPI_PREDEFINED_INFO *
672 AcpiUtMatchPredefinedMethod (
673     char                        *Name);
674 
675 void
676 AcpiUtGetExpectedReturnTypes (
677     char                    *Buffer,
678     UINT32                  ExpectedBtypes);
679 
680 #if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP)
681 const ACPI_PREDEFINED_INFO *
682 AcpiUtMatchResourceName (
683     char                        *Name);
684 
685 void
686 AcpiUtDisplayPredefinedMethod (
687     char                        *Buffer,
688     const ACPI_PREDEFINED_INFO  *ThisName,
689     BOOLEAN                     MultiLine);
690 
691 UINT32
692 AcpiUtGetResourceBitWidth (
693     char                    *Buffer,
694     UINT16                  Types);
695 #endif
696 
697 
698 /*
699  * utstate - Generic state creation/cache routines
700  */
701 void
702 AcpiUtPushGenericState (
703     ACPI_GENERIC_STATE      **ListHead,
704     ACPI_GENERIC_STATE      *State);
705 
706 ACPI_GENERIC_STATE *
707 AcpiUtPopGenericState (
708     ACPI_GENERIC_STATE      **ListHead);
709 
710 
711 ACPI_GENERIC_STATE *
712 AcpiUtCreateGenericState (
713     void);
714 
715 ACPI_THREAD_STATE *
716 AcpiUtCreateThreadState (
717     void);
718 
719 ACPI_GENERIC_STATE *
720 AcpiUtCreateUpdateState (
721     ACPI_OPERAND_OBJECT     *Object,
722     UINT16                  Action);
723 
724 ACPI_GENERIC_STATE *
725 AcpiUtCreatePkgState (
726     void                    *InternalObject,
727     void                    *ExternalObject,
728     UINT16                  Index);
729 
730 ACPI_STATUS
731 AcpiUtCreateUpdateStateAndPush (
732     ACPI_OPERAND_OBJECT     *Object,
733     UINT16                  Action,
734     ACPI_GENERIC_STATE      **StateList);
735 
736 ACPI_GENERIC_STATE *
737 AcpiUtCreateControlState (
738     void);
739 
740 void
741 AcpiUtDeleteGenericState (
742     ACPI_GENERIC_STATE      *State);
743 
744 
745 /*
746  * utmath
747  */
748 ACPI_STATUS
749 AcpiUtDivide (
750     UINT64                  InDividend,
751     UINT64                  InDivisor,
752     UINT64                  *OutQuotient,
753     UINT64                  *OutRemainder);
754 
755 ACPI_STATUS
756 AcpiUtShortDivide (
757     UINT64                  InDividend,
758     UINT32                  Divisor,
759     UINT64                  *OutQuotient,
760     UINT32                  *OutRemainder);
761 
762 
763 /*
764  * utmisc
765  */
766 const ACPI_EXCEPTION_INFO *
767 AcpiUtValidateException (
768     ACPI_STATUS             Status);
769 
770 BOOLEAN
771 AcpiUtIsPciRootBridge (
772     char                    *Id);
773 
774 #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_NAMES_APP)
775 BOOLEAN
776 AcpiUtIsAmlTable (
777     ACPI_TABLE_HEADER       *Table);
778 #endif
779 
780 ACPI_STATUS
781 AcpiUtWalkPackageTree (
782     ACPI_OPERAND_OBJECT     *SourceObject,
783     void                    *TargetObject,
784     ACPI_PKG_CALLBACK       WalkCallback,
785     void                    *Context);
786 
787 /* Values for Base above (16=Hex, 10=Decimal) */
788 
789 #define ACPI_ANY_BASE        0
790 
791 
792 UINT32
793 AcpiUtDwordByteSwap (
794     UINT32                  Value);
795 
796 void
797 AcpiUtSetIntegerWidth (
798     UINT8                   Revision);
799 
800 #ifdef ACPI_DEBUG_OUTPUT
801 void
802 AcpiUtDisplayInitPathname (
803     UINT8                   Type,
804     ACPI_NAMESPACE_NODE     *ObjHandle,
805     const char              *Path);
806 #endif
807 
808 
809 /*
810  * utownerid - Support for Table/Method Owner IDs
811  */
812 ACPI_STATUS
813 AcpiUtAllocateOwnerId (
814     ACPI_OWNER_ID           *OwnerId);
815 
816 void
817 AcpiUtReleaseOwnerId (
818     ACPI_OWNER_ID           *OwnerId);
819 
820 
821 /*
822  * utresrc
823  */
824 ACPI_STATUS
825 AcpiUtWalkAmlResources (
826     ACPI_WALK_STATE         *WalkState,
827     UINT8                   *Aml,
828     ACPI_SIZE               AmlLength,
829     ACPI_WALK_AML_CALLBACK  UserFunction,
830     void                    **Context);
831 
832 ACPI_STATUS
833 AcpiUtValidateResource (
834     ACPI_WALK_STATE         *WalkState,
835     void                    *Aml,
836     UINT8                   *ReturnIndex);
837 
838 UINT32
839 AcpiUtGetDescriptorLength (
840     void                    *Aml);
841 
842 UINT16
843 AcpiUtGetResourceLength (
844     void                    *Aml);
845 
846 UINT8
847 AcpiUtGetResourceHeaderLength (
848     void                    *Aml);
849 
850 UINT8
851 AcpiUtGetResourceType (
852     void                    *Aml);
853 
854 ACPI_STATUS
855 AcpiUtGetResourceEndTag (
856     ACPI_OPERAND_OBJECT     *ObjDesc,
857     UINT8                   **EndTag);
858 
859 
860 /*
861  * utstring - String and character utilities
862  */
863 void
864 AcpiUtPrintString (
865     char                    *String,
866     UINT16                  MaxLength);
867 
868 #if defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP
869 void
870 UtConvertBackslashes (
871     char                    *Pathname);
872 #endif
873 
874 void
875 AcpiUtRepairName (
876     char                    *Name);
877 
878 #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION)
879 BOOLEAN
880 AcpiUtSafeStrcpy (
881     char                    *Dest,
882     ACPI_SIZE               DestSize,
883     char                    *Source);
884 
885 BOOLEAN
886 AcpiUtSafeStrcat (
887     char                    *Dest,
888     ACPI_SIZE               DestSize,
889     char                    *Source);
890 
891 BOOLEAN
892 AcpiUtSafeStrncat (
893     char                    *Dest,
894     ACPI_SIZE               DestSize,
895     char                    *Source,
896     ACPI_SIZE               MaxTransferLength);
897 #endif
898 
899 
900 /*
901  * utmutex - mutex support
902  */
903 ACPI_STATUS
904 AcpiUtMutexInitialize (
905     void);
906 
907 void
908 AcpiUtMutexTerminate (
909     void);
910 
911 ACPI_STATUS
912 AcpiUtAcquireMutex (
913     ACPI_MUTEX_HANDLE       MutexId);
914 
915 ACPI_STATUS
916 AcpiUtReleaseMutex (
917     ACPI_MUTEX_HANDLE       MutexId);
918 
919 
920 /*
921  * utalloc - memory allocation and object caching
922  */
923 ACPI_STATUS
924 AcpiUtCreateCaches (
925     void);
926 
927 ACPI_STATUS
928 AcpiUtDeleteCaches (
929     void);
930 
931 ACPI_STATUS
932 AcpiUtValidateBuffer (
933     ACPI_BUFFER             *Buffer);
934 
935 ACPI_STATUS
936 AcpiUtInitializeBuffer (
937     ACPI_BUFFER             *Buffer,
938     ACPI_SIZE               RequiredLength);
939 
940 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
941 void *
942 AcpiUtAllocateAndTrack (
943     ACPI_SIZE               Size,
944     UINT32                  Component,
945     const char              *Module,
946     UINT32                  Line);
947 
948 void *
949 AcpiUtAllocateZeroedAndTrack (
950     ACPI_SIZE               Size,
951     UINT32                  Component,
952     const char              *Module,
953     UINT32                  Line);
954 
955 void
956 AcpiUtFreeAndTrack (
957     void                    *Address,
958     UINT32                  Component,
959     const char              *Module,
960     UINT32                  Line);
961 
962 void
963 AcpiUtDumpAllocationInfo (
964     void);
965 
966 void
967 AcpiUtDumpAllocations (
968     UINT32                  Component,
969     const char              *Module);
970 
971 ACPI_STATUS
972 AcpiUtCreateList (
973     const char              *ListName,
974     UINT16                  ObjectSize,
975     ACPI_MEMORY_LIST        **ReturnCache);
976 
977 #endif /* ACPI_DBG_TRACK_ALLOCATIONS */
978 
979 
980 /*
981  * utaddress - address range check
982  */
983 ACPI_STATUS
984 AcpiUtAddAddressRange (
985     ACPI_ADR_SPACE_TYPE     SpaceId,
986     ACPI_PHYSICAL_ADDRESS   Address,
987     UINT32                  Length,
988     ACPI_NAMESPACE_NODE     *RegionNode);
989 
990 void
991 AcpiUtRemoveAddressRange (
992     ACPI_ADR_SPACE_TYPE     SpaceId,
993     ACPI_NAMESPACE_NODE     *RegionNode);
994 
995 UINT32
996 AcpiUtCheckAddressRange (
997     ACPI_ADR_SPACE_TYPE     SpaceId,
998     ACPI_PHYSICAL_ADDRESS   Address,
999     UINT32                  Length,
1000     BOOLEAN                 Warn);
1001 
1002 void
1003 AcpiUtDeleteAddressLists (
1004     void);
1005 
1006 
1007 /*
1008  * utxferror - various error/warning output functions
1009  */
1010 void ACPI_INTERNAL_VAR_XFACE
1011 AcpiUtPredefinedWarning (
1012     const char              *ModuleName,
1013     UINT32                  LineNumber,
1014     char                    *Pathname,
1015     UINT8                   NodeFlags,
1016     const char              *Format,
1017     ...);
1018 
1019 void ACPI_INTERNAL_VAR_XFACE
1020 AcpiUtPredefinedInfo (
1021     const char              *ModuleName,
1022     UINT32                  LineNumber,
1023     char                    *Pathname,
1024     UINT8                   NodeFlags,
1025     const char              *Format,
1026     ...);
1027 
1028 void ACPI_INTERNAL_VAR_XFACE
1029 AcpiUtPredefinedBiosError (
1030     const char              *ModuleName,
1031     UINT32                  LineNumber,
1032     char                    *Pathname,
1033     UINT8                   NodeFlags,
1034     const char              *Format,
1035     ...);
1036 
1037 void
1038 AcpiUtNamespaceError (
1039     const char              *ModuleName,
1040     UINT32                  LineNumber,
1041     const char              *InternalName,
1042     ACPI_STATUS             LookupStatus);
1043 
1044 void
1045 AcpiUtMethodError (
1046     const char              *ModuleName,
1047     UINT32                  LineNumber,
1048     const char              *Message,
1049     ACPI_NAMESPACE_NODE     *Node,
1050     const char              *Path,
1051     ACPI_STATUS             LookupStatus);
1052 
1053 
1054 /*
1055  * Utility functions for ACPI names and IDs
1056  */
1057 const AH_PREDEFINED_NAME *
1058 AcpiAhMatchPredefinedName (
1059     char                    *Nameseg);
1060 
1061 const AH_DEVICE_ID *
1062 AcpiAhMatchHardwareId (
1063     char                    *Hid);
1064 
1065 const char *
1066 AcpiAhMatchUuid (
1067     UINT8                   *Data);
1068 
1069 
1070 /*
1071  * utprint - printf/vprintf output functions
1072  */
1073 const char *
1074 AcpiUtScanNumber (
1075     const char              *String,
1076     UINT64                  *NumberPtr);
1077 
1078 const char *
1079 AcpiUtPrintNumber (
1080     char                    *String,
1081     UINT64                  Number);
1082 
1083 int
1084 AcpiUtVsnprintf (
1085     char                    *String,
1086     ACPI_SIZE               Size,
1087     const char              *Format,
1088     va_list                 Args);
1089 
1090 int
1091 AcpiUtSnprintf (
1092     char                    *String,
1093     ACPI_SIZE               Size,
1094     const char              *Format,
1095     ...);
1096 
1097 #ifdef ACPI_APPLICATION
1098 int
1099 AcpiUtFileVprintf (
1100     ACPI_FILE               File,
1101     const char              *Format,
1102     va_list                 Args);
1103 
1104 int
1105 AcpiUtFilePrintf (
1106     ACPI_FILE               File,
1107     const char              *Format,
1108     ...);
1109 #endif
1110 
1111 
1112 /*
1113  * utuuid -- UUID support functions
1114  */
1115 #if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP || defined ACPI_HELP_APP)
1116 void
1117 AcpiUtConvertStringToUuid (
1118     char                    *InString,
1119     UINT8                   *UuidBuffer);
1120 #endif
1121 
1122 #endif /* _ACUTILS_H */
1123