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