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