acutils.h revision 284460
1121159Sbmah/******************************************************************************
2121159Sbmah *
3121159Sbmah * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
4121159Sbmah *
5121159Sbmah *****************************************************************************/
6121159Sbmah
7121159Sbmah/*
8121159Sbmah * Copyright (C) 2000 - 2015, Intel Corp.
9121159Sbmah * All rights reserved.
10121159Sbmah *
11121159Sbmah * Redistribution and use in source and binary forms, with or without
12121159Sbmah * modification, are permitted provided that the following conditions
13121159Sbmah * are met:
14121159Sbmah * 1. Redistributions of source code must retain the above copyright
15121159Sbmah *    notice, this list of conditions, and the following disclaimer,
16121159Sbmah *    without modification.
17121159Sbmah * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18121159Sbmah *    substantially similar to the "NO WARRANTY" disclaimer below
19121159Sbmah *    ("Disclaimer") and any redistribution must be conditioned upon
20121159Sbmah *    including a substantially similar Disclaimer requirement for further
21121159Sbmah *    binary redistribution.
22121159Sbmah * 3. Neither the names of the above-listed copyright holders nor the names
23121159Sbmah *    of any contributors may be used to endorse or promote products derived
24121159Sbmah *    from this software without specific prior written permission.
25121159Sbmah *
26121159Sbmah * Alternatively, this software may be distributed under the terms of the
27121159Sbmah * GNU General Public License ("GPL") version 2 as published by the Free
28166671Sbrueffer * Software Foundation.
29121159Sbmah *
30121159Sbmah * NO WARRANTY
31121159Sbmah * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32121159Sbmah * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33121159Sbmah * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34121159Sbmah * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35121159Sbmah * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36121159Sbmah * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37121159Sbmah * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38121159Sbmah * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39121159Sbmah * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40121159Sbmah * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41121159Sbmah * POSSIBILITY OF SUCH DAMAGES.
42121159Sbmah */
43121159Sbmah
44121159Sbmah#ifndef _ACUTILS_H
45121159Sbmah#define _ACUTILS_H
46121159Sbmah
47121159Sbmah
48121159Sbmahextern const UINT8                      AcpiGbl_ResourceAmlSizes[];
49121159Sbmahextern const UINT8                      AcpiGbl_ResourceAmlSerialBusSizes[];
50121159Sbmah
51121159Sbmah/* Strings used by the disassembler and debugger resource dump routines */
52121159Sbmah
53121159Sbmah#if defined(ACPI_DEBUG_OUTPUT) || defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
54121159Sbmah
55121159Sbmahextern const char                       *AcpiGbl_BmDecode[];
56121159Sbmahextern const char                       *AcpiGbl_ConfigDecode[];
57121159Sbmahextern const char                       *AcpiGbl_ConsumeDecode[];
58121159Sbmahextern const char                       *AcpiGbl_DecDecode[];
59121159Sbmahextern const char                       *AcpiGbl_HeDecode[];
60121159Sbmahextern const char                       *AcpiGbl_IoDecode[];
61121159Sbmahextern const char                       *AcpiGbl_LlDecode[];
62121159Sbmahextern const char                       *AcpiGbl_MaxDecode[];
63121159Sbmahextern const char                       *AcpiGbl_MemDecode[];
64121159Sbmahextern const char                       *AcpiGbl_MinDecode[];
65121159Sbmahextern const char                       *AcpiGbl_MtpDecode[];
66121159Sbmahextern const char                       *AcpiGbl_RngDecode[];
67121159Sbmahextern const char                       *AcpiGbl_RwDecode[];
68121159Sbmahextern const char                       *AcpiGbl_ShrDecode[];
69121159Sbmahextern const char                       *AcpiGbl_SizDecode[];
70121159Sbmahextern const char                       *AcpiGbl_TrsDecode[];
71121159Sbmahextern const char                       *AcpiGbl_TtpDecode[];
72121159Sbmahextern const char                       *AcpiGbl_TypDecode[];
73121159Sbmahextern const char                       *AcpiGbl_PpcDecode[];
74121159Sbmahextern const char                       *AcpiGbl_IorDecode[];
75121159Sbmahextern const char                       *AcpiGbl_DtsDecode[];
76121159Sbmahextern const char                       *AcpiGbl_CtDecode[];
77121159Sbmahextern const char                       *AcpiGbl_SbtDecode[];
78121159Sbmahextern const char                       *AcpiGbl_AmDecode[];
79121159Sbmahextern const char                       *AcpiGbl_SmDecode[];
80121159Sbmahextern const char                       *AcpiGbl_WmDecode[];
81121159Sbmahextern const char                       *AcpiGbl_CphDecode[];
82121159Sbmahextern const char                       *AcpiGbl_CpoDecode[];
83121159Sbmahextern const char                       *AcpiGbl_DpDecode[];
84121159Sbmahextern const char                       *AcpiGbl_EdDecode[];
85121159Sbmahextern const char                       *AcpiGbl_BpbDecode[];
86121159Sbmahextern const char                       *AcpiGbl_SbDecode[];
87121159Sbmahextern const char                       *AcpiGbl_FcDecode[];
88121159Sbmahextern const char                       *AcpiGbl_PtDecode[];
89121159Sbmah#endif
90121159Sbmah
91121159Sbmah/*
92121159Sbmah * For the iASL compiler case, the output is redirected to stderr so that
93121159Sbmah * any of the various ACPI errors and warnings do not appear in the output
94121159Sbmah * files, for either the compiler or disassembler portions of the tool.
95121159Sbmah */
96121159Sbmah#ifdef ACPI_ASL_COMPILER
97121159Sbmah
98121159Sbmah#include <stdio.h>
99121159Sbmah
100121159Sbmah#define ACPI_MSG_REDIRECT_BEGIN \
101121159Sbmah    FILE                    *OutputFile = AcpiGbl_OutputFile; \
102121159Sbmah    AcpiOsRedirectOutput (stderr);
103121159Sbmah
104121159Sbmah#define ACPI_MSG_REDIRECT_END \
105121159Sbmah    AcpiOsRedirectOutput (OutputFile);
106121159Sbmah
107121159Sbmah#else
108121159Sbmah/*
109121159Sbmah * non-iASL case - no redirection, nothing to do
110121159Sbmah */
111121159Sbmah#define ACPI_MSG_REDIRECT_BEGIN
112121159Sbmah#define ACPI_MSG_REDIRECT_END
113121159Sbmah#endif
114121159Sbmah
115121159Sbmah/*
116121159Sbmah * Common error message prefixes
117121159Sbmah */
118121159Sbmah#define ACPI_MSG_ERROR          "ACPI Error: "
119121159Sbmah#define ACPI_MSG_EXCEPTION      "ACPI Exception: "
120121159Sbmah#define ACPI_MSG_WARNING        "ACPI Warning: "
121121159Sbmah#define ACPI_MSG_INFO           "ACPI: "
122121159Sbmah
123121159Sbmah#define ACPI_MSG_BIOS_ERROR     "ACPI BIOS Error (bug): "
124121159Sbmah#define ACPI_MSG_BIOS_WARNING   "ACPI BIOS Warning (bug): "
125121159Sbmah
126121159Sbmah/*
127121159Sbmah * Common message suffix
128121159Sbmah */
129121159Sbmah#define ACPI_MSG_SUFFIX \
130121159Sbmah    AcpiOsPrintf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, ModuleName, LineNumber)
131121159Sbmah
132121159Sbmah
133121159Sbmah/* Types for Resource descriptor entries */
134121159Sbmah
135121159Sbmah#define ACPI_INVALID_RESOURCE           0
136121159Sbmah#define ACPI_FIXED_LENGTH               1
137121159Sbmah#define ACPI_VARIABLE_LENGTH            2
138121159Sbmah#define ACPI_SMALL_VARIABLE_LENGTH      3
139121159Sbmah
140131864Srutypedef
141121159SbmahACPI_STATUS (*ACPI_WALK_AML_CALLBACK) (
142121159Sbmah    UINT8                   *Aml,
143121159Sbmah    UINT32                  Length,
144121159Sbmah    UINT32                  Offset,
145121159Sbmah    UINT8                   ResourceIndex,
146121159Sbmah    void                    **Context);
147121159Sbmah
148121159Sbmahtypedef
149121159SbmahACPI_STATUS (*ACPI_PKG_CALLBACK) (
150121159Sbmah    UINT8                   ObjectType,
151121159Sbmah    ACPI_OPERAND_OBJECT     *SourceObject,
152121159Sbmah    ACPI_GENERIC_STATE      *State,
153121159Sbmah    void                    *Context);
154121159Sbmah
155121159Sbmahtypedef struct acpi_pkg_info
156121159Sbmah{
157121159Sbmah    UINT8                   *FreeSpace;
158121159Sbmah    ACPI_SIZE               Length;
159121159Sbmah    UINT32                  ObjectSpace;
160121159Sbmah    UINT32                  NumPackages;
161121159Sbmah
162121159Sbmah} ACPI_PKG_INFO;
163121159Sbmah
164121159Sbmah/* Object reference counts */
165121159Sbmah
166121159Sbmah#define REF_INCREMENT       (UINT16) 0
167121159Sbmah#define REF_DECREMENT       (UINT16) 1
168121159Sbmah
169121159Sbmah/* AcpiUtDumpBuffer */
170121159Sbmah
171121159Sbmah#define DB_BYTE_DISPLAY     1
172121159Sbmah#define DB_WORD_DISPLAY     2
173121159Sbmah#define DB_DWORD_DISPLAY    4
174121159Sbmah#define DB_QWORD_DISPLAY    8
175121159Sbmah
176131864Sru/*
177121159Sbmah * utglobal - Global data structures and procedures
178131864Sru */
179121159SbmahACPI_STATUS
180121159SbmahAcpiUtInitGlobals (
181131864Sru    void);
182121159Sbmah
183131864Sru#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
184131864Sru
185131864Sruchar *
186131864SruAcpiUtGetMutexName (
187131864Sru    UINT32                  MutexId);
188131864Sru
189131864Sruconst char *
190131864SruAcpiUtGetNotifyName (
191131864Sru    UINT32                  NotifyValue,
192131864Sru    ACPI_OBJECT_TYPE        Type);
193131864Sru#endif
194131864Sru
195121159Sbmahchar *
196131864SruAcpiUtGetTypeName (
197131864Sru    ACPI_OBJECT_TYPE        Type);
198121159Sbmah
199131864Sruchar *
200131864SruAcpiUtGetNodeName (
201131864Sru    void                    *Object);
202
203char *
204AcpiUtGetDescriptorName (
205    void                    *Object);
206
207const char *
208AcpiUtGetReferenceName (
209    ACPI_OPERAND_OBJECT     *Object);
210
211char *
212AcpiUtGetObjectTypeName (
213    ACPI_OPERAND_OBJECT     *ObjDesc);
214
215char *
216AcpiUtGetRegionName (
217    UINT8                   SpaceId);
218
219char *
220AcpiUtGetEventName (
221    UINT32                  EventId);
222
223char
224AcpiUtHexToAsciiChar (
225    UINT64                  Integer,
226    UINT32                  Position);
227
228UINT8
229AcpiUtAsciiCharToHex (
230    int                     HexChar);
231
232BOOLEAN
233AcpiUtValidObjectType (
234    ACPI_OBJECT_TYPE        Type);
235
236
237/*
238 * utinit - miscellaneous initialization and shutdown
239 */
240ACPI_STATUS
241AcpiUtHardwareInitialize (
242    void);
243
244void
245AcpiUtSubsystemShutdown (
246    void);
247
248
249/*
250 * utclib - Local implementations of C library functions
251 */
252#ifndef ACPI_USE_SYSTEM_CLIBRARY
253
254ACPI_SIZE
255AcpiUtStrlen (
256    const char              *String);
257
258char *
259AcpiUtStrchr (
260    const char              *String,
261    int                     ch);
262
263char *
264AcpiUtStrcpy (
265    char                    *DstString,
266    const char              *SrcString);
267
268char *
269AcpiUtStrncpy (
270    char                    *DstString,
271    const char              *SrcString,
272    ACPI_SIZE               Count);
273
274int
275AcpiUtMemcmp (
276    const char              *Buffer1,
277    const char              *Buffer2,
278    ACPI_SIZE               Count);
279
280int
281AcpiUtStrncmp (
282    const char              *String1,
283    const char              *String2,
284    ACPI_SIZE               Count);
285
286int
287AcpiUtStrcmp (
288    const char              *String1,
289    const char              *String2);
290
291char *
292AcpiUtStrcat (
293    char                    *DstString,
294    const char              *SrcString);
295
296char *
297AcpiUtStrncat (
298    char                    *DstString,
299    const char              *SrcString,
300    ACPI_SIZE               Count);
301
302UINT32
303AcpiUtStrtoul (
304    const char              *String,
305    char                    **Terminator,
306    UINT32                  Base);
307
308char *
309AcpiUtStrstr (
310    char                    *String1,
311    char                    *String2);
312
313void *
314AcpiUtMemcpy (
315    void                    *Dest,
316    const void              *Src,
317    ACPI_SIZE               Count);
318
319void *
320AcpiUtMemset (
321    void                    *Dest,
322    UINT8                   Value,
323    ACPI_SIZE               Count);
324
325int
326AcpiUtToUpper (
327    int                     c);
328
329int
330AcpiUtToLower (
331    int                     c);
332
333extern const UINT8 _acpi_ctype[];
334
335#define _ACPI_XA     0x00    /* extra alphabetic - not supported */
336#define _ACPI_XS     0x40    /* extra space */
337#define _ACPI_BB     0x00    /* BEL, BS, etc. - not supported */
338#define _ACPI_CN     0x20    /* CR, FF, HT, NL, VT */
339#define _ACPI_DI     0x04    /* '0'-'9' */
340#define _ACPI_LO     0x02    /* 'a'-'z' */
341#define _ACPI_PU     0x10    /* punctuation */
342#define _ACPI_SP     0x08    /* space, tab, CR, LF, VT, FF */
343#define _ACPI_UP     0x01    /* 'A'-'Z' */
344#define _ACPI_XD     0x80    /* '0'-'9', 'A'-'F', 'a'-'f' */
345
346#define ACPI_IS_DIGIT(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_DI))
347#define ACPI_IS_SPACE(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_SP))
348#define ACPI_IS_XDIGIT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_XD))
349#define ACPI_IS_UPPER(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_UP))
350#define ACPI_IS_LOWER(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO))
351#define ACPI_IS_PRINT(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_XS | _ACPI_PU))
352#define ACPI_IS_ALPHA(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP))
353
354#endif /* !ACPI_USE_SYSTEM_CLIBRARY */
355
356#define ACPI_IS_ASCII(c)  ((c) < 0x80)
357
358
359/*
360 * utcopy - Object construction and conversion interfaces
361 */
362ACPI_STATUS
363AcpiUtBuildSimpleObject(
364    ACPI_OPERAND_OBJECT     *Obj,
365    ACPI_OBJECT             *UserObj,
366    UINT8                   *DataSpace,
367    UINT32                  *BufferSpaceUsed);
368
369ACPI_STATUS
370AcpiUtBuildPackageObject (
371    ACPI_OPERAND_OBJECT     *Obj,
372    UINT8                   *Buffer,
373    UINT32                  *SpaceUsed);
374
375ACPI_STATUS
376AcpiUtCopyIobjectToEobject (
377    ACPI_OPERAND_OBJECT     *Obj,
378    ACPI_BUFFER             *RetBuffer);
379
380ACPI_STATUS
381AcpiUtCopyEobjectToIobject (
382    ACPI_OBJECT             *Obj,
383    ACPI_OPERAND_OBJECT     **InternalObj);
384
385ACPI_STATUS
386AcpiUtCopyISimpleToIsimple (
387    ACPI_OPERAND_OBJECT     *SourceObj,
388    ACPI_OPERAND_OBJECT     *DestObj);
389
390ACPI_STATUS
391AcpiUtCopyIobjectToIobject (
392    ACPI_OPERAND_OBJECT     *SourceDesc,
393    ACPI_OPERAND_OBJECT     **DestDesc,
394    ACPI_WALK_STATE         *WalkState);
395
396
397/*
398 * utcreate - Object creation
399 */
400ACPI_STATUS
401AcpiUtUpdateObjectReference (
402    ACPI_OPERAND_OBJECT     *Object,
403    UINT16                  Action);
404
405
406/*
407 * utdebug - Debug interfaces
408 */
409void
410AcpiUtInitStackPtrTrace (
411    void);
412
413void
414AcpiUtTrackStackPtr (
415    void);
416
417void
418AcpiUtTrace (
419    UINT32                  LineNumber,
420    const char              *FunctionName,
421    const char              *ModuleName,
422    UINT32                  ComponentId);
423
424void
425AcpiUtTracePtr (
426    UINT32                  LineNumber,
427    const char              *FunctionName,
428    const char              *ModuleName,
429    UINT32                  ComponentId,
430    void                    *Pointer);
431
432void
433AcpiUtTraceU32 (
434    UINT32                  LineNumber,
435    const char              *FunctionName,
436    const char              *ModuleName,
437    UINT32                  ComponentId,
438    UINT32                  Integer);
439
440void
441AcpiUtTraceStr (
442    UINT32                  LineNumber,
443    const char              *FunctionName,
444    const char              *ModuleName,
445    UINT32                  ComponentId,
446    char                    *String);
447
448void
449AcpiUtExit (
450    UINT32                  LineNumber,
451    const char              *FunctionName,
452    const char              *ModuleName,
453    UINT32                  ComponentId);
454
455void
456AcpiUtStatusExit (
457    UINT32                  LineNumber,
458    const char              *FunctionName,
459    const char              *ModuleName,
460    UINT32                  ComponentId,
461    ACPI_STATUS             Status);
462
463void
464AcpiUtValueExit (
465    UINT32                  LineNumber,
466    const char              *FunctionName,
467    const char              *ModuleName,
468    UINT32                  ComponentId,
469    UINT64                  Value);
470
471void
472AcpiUtPtrExit (
473    UINT32                  LineNumber,
474    const char              *FunctionName,
475    const char              *ModuleName,
476    UINT32                  ComponentId,
477    UINT8                   *Ptr);
478
479void
480AcpiUtDebugDumpBuffer (
481    UINT8                   *Buffer,
482    UINT32                  Count,
483    UINT32                  Display,
484    UINT32                  ComponentId);
485
486void
487AcpiUtDumpBuffer (
488    UINT8                   *Buffer,
489    UINT32                  Count,
490    UINT32                  Display,
491    UINT32                  Offset);
492
493#ifdef ACPI_APPLICATION
494void
495AcpiUtDumpBufferToFile (
496    ACPI_FILE               File,
497    UINT8                   *Buffer,
498    UINT32                  Count,
499    UINT32                  Display,
500    UINT32                  BaseOffset);
501#endif
502
503void
504AcpiUtReportError (
505    char                    *ModuleName,
506    UINT32                  LineNumber);
507
508void
509AcpiUtReportInfo (
510    char                    *ModuleName,
511    UINT32                  LineNumber);
512
513void
514AcpiUtReportWarning (
515    char                    *ModuleName,
516    UINT32                  LineNumber);
517
518/*
519 * utdelete - Object deletion and reference counts
520 */
521void
522AcpiUtAddReference (
523    ACPI_OPERAND_OBJECT     *Object);
524
525void
526AcpiUtRemoveReference (
527    ACPI_OPERAND_OBJECT     *Object);
528
529void
530AcpiUtDeleteInternalPackageObject (
531    ACPI_OPERAND_OBJECT     *Object);
532
533void
534AcpiUtDeleteInternalSimpleObject (
535    ACPI_OPERAND_OBJECT     *Object);
536
537void
538AcpiUtDeleteInternalObjectList (
539    ACPI_OPERAND_OBJECT     **ObjList);
540
541
542/*
543 * uteval - object evaluation
544 */
545ACPI_STATUS
546AcpiUtEvaluateObject (
547    ACPI_NAMESPACE_NODE     *PrefixNode,
548    char                    *Path,
549    UINT32                  ExpectedReturnBtypes,
550    ACPI_OPERAND_OBJECT     **ReturnDesc);
551
552ACPI_STATUS
553AcpiUtEvaluateNumericObject (
554    char                    *ObjectName,
555    ACPI_NAMESPACE_NODE     *DeviceNode,
556    UINT64                  *Value);
557
558ACPI_STATUS
559AcpiUtExecute_STA (
560    ACPI_NAMESPACE_NODE     *DeviceNode,
561    UINT32                  *StatusFlags);
562
563ACPI_STATUS
564AcpiUtExecutePowerMethods (
565    ACPI_NAMESPACE_NODE     *DeviceNode,
566    const char              **MethodNames,
567    UINT8                   MethodCount,
568    UINT8                   *OutValues);
569
570
571/*
572 * utfileio - file operations
573 */
574#ifdef ACPI_APPLICATION
575ACPI_STATUS
576AcpiUtReadTableFromFile (
577    char                    *Filename,
578    ACPI_TABLE_HEADER       **Table);
579#endif
580
581
582/*
583 * utids - device ID support
584 */
585ACPI_STATUS
586AcpiUtExecute_HID (
587    ACPI_NAMESPACE_NODE     *DeviceNode,
588    ACPI_PNP_DEVICE_ID      **ReturnId);
589
590ACPI_STATUS
591AcpiUtExecute_UID (
592    ACPI_NAMESPACE_NODE     *DeviceNode,
593    ACPI_PNP_DEVICE_ID      **ReturnId);
594
595ACPI_STATUS
596AcpiUtExecute_SUB (
597    ACPI_NAMESPACE_NODE     *DeviceNode,
598    ACPI_PNP_DEVICE_ID      **ReturnId);
599
600ACPI_STATUS
601AcpiUtExecute_CID (
602    ACPI_NAMESPACE_NODE     *DeviceNode,
603    ACPI_PNP_DEVICE_ID_LIST **ReturnCidList);
604
605
606/*
607 * utlock - reader/writer locks
608 */
609ACPI_STATUS
610AcpiUtCreateRwLock (
611    ACPI_RW_LOCK            *Lock);
612
613void
614AcpiUtDeleteRwLock (
615    ACPI_RW_LOCK            *Lock);
616
617ACPI_STATUS
618AcpiUtAcquireReadLock (
619    ACPI_RW_LOCK            *Lock);
620
621ACPI_STATUS
622AcpiUtReleaseReadLock (
623    ACPI_RW_LOCK            *Lock);
624
625ACPI_STATUS
626AcpiUtAcquireWriteLock (
627    ACPI_RW_LOCK            *Lock);
628
629void
630AcpiUtReleaseWriteLock (
631    ACPI_RW_LOCK            *Lock);
632
633
634/*
635 * utobject - internal object create/delete/cache routines
636 */
637ACPI_OPERAND_OBJECT  *
638AcpiUtCreateInternalObjectDbg (
639    const char              *ModuleName,
640    UINT32                  LineNumber,
641    UINT32                  ComponentId,
642    ACPI_OBJECT_TYPE        Type);
643
644void *
645AcpiUtAllocateObjectDescDbg (
646    const char              *ModuleName,
647    UINT32                  LineNumber,
648    UINT32                  ComponentId);
649
650#define AcpiUtCreateInternalObject(t)   AcpiUtCreateInternalObjectDbg (_AcpiModuleName,__LINE__,_COMPONENT,t)
651#define AcpiUtAllocateObjectDesc()      AcpiUtAllocateObjectDescDbg (_AcpiModuleName,__LINE__,_COMPONENT)
652
653void
654AcpiUtDeleteObjectDesc (
655    ACPI_OPERAND_OBJECT     *Object);
656
657BOOLEAN
658AcpiUtValidInternalObject (
659    void                    *Object);
660
661ACPI_OPERAND_OBJECT *
662AcpiUtCreatePackageObject (
663    UINT32                  Count);
664
665ACPI_OPERAND_OBJECT *
666AcpiUtCreateIntegerObject (
667    UINT64                  Value);
668
669ACPI_OPERAND_OBJECT *
670AcpiUtCreateBufferObject (
671    ACPI_SIZE               BufferSize);
672
673ACPI_OPERAND_OBJECT *
674AcpiUtCreateStringObject (
675    ACPI_SIZE               StringSize);
676
677ACPI_STATUS
678AcpiUtGetObjectSize(
679    ACPI_OPERAND_OBJECT     *Obj,
680    ACPI_SIZE               *ObjLength);
681
682
683/*
684 * utosi - Support for the _OSI predefined control method
685 */
686ACPI_STATUS
687AcpiUtInitializeInterfaces (
688    void);
689
690ACPI_STATUS
691AcpiUtInterfaceTerminate (
692    void);
693
694ACPI_STATUS
695AcpiUtInstallInterface (
696    ACPI_STRING             InterfaceName);
697
698ACPI_STATUS
699AcpiUtRemoveInterface (
700    ACPI_STRING             InterfaceName);
701
702ACPI_STATUS
703AcpiUtUpdateInterfaces (
704    UINT8                   Action);
705
706ACPI_INTERFACE_INFO *
707AcpiUtGetInterface (
708    ACPI_STRING             InterfaceName);
709
710ACPI_STATUS
711AcpiUtOsiImplementation (
712    ACPI_WALK_STATE         *WalkState);
713
714
715/*
716 * utpredef - support for predefined names
717 */
718const ACPI_PREDEFINED_INFO *
719AcpiUtGetNextPredefinedMethod (
720    const ACPI_PREDEFINED_INFO  *ThisName);
721
722const ACPI_PREDEFINED_INFO *
723AcpiUtMatchPredefinedMethod (
724    char                        *Name);
725
726void
727AcpiUtGetExpectedReturnTypes (
728    char                    *Buffer,
729    UINT32                  ExpectedBtypes);
730
731#if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP)
732const ACPI_PREDEFINED_INFO *
733AcpiUtMatchResourceName (
734    char                        *Name);
735
736void
737AcpiUtDisplayPredefinedMethod (
738    char                        *Buffer,
739    const ACPI_PREDEFINED_INFO  *ThisName,
740    BOOLEAN                     MultiLine);
741
742UINT32
743AcpiUtGetResourceBitWidth (
744    char                    *Buffer,
745    UINT16                  Types);
746#endif
747
748
749/*
750 * utstate - Generic state creation/cache routines
751 */
752void
753AcpiUtPushGenericState (
754    ACPI_GENERIC_STATE      **ListHead,
755    ACPI_GENERIC_STATE      *State);
756
757ACPI_GENERIC_STATE *
758AcpiUtPopGenericState (
759    ACPI_GENERIC_STATE      **ListHead);
760
761
762ACPI_GENERIC_STATE *
763AcpiUtCreateGenericState (
764    void);
765
766ACPI_THREAD_STATE *
767AcpiUtCreateThreadState (
768    void);
769
770ACPI_GENERIC_STATE *
771AcpiUtCreateUpdateState (
772    ACPI_OPERAND_OBJECT     *Object,
773    UINT16                  Action);
774
775ACPI_GENERIC_STATE *
776AcpiUtCreatePkgState (
777    void                    *InternalObject,
778    void                    *ExternalObject,
779    UINT16                  Index);
780
781ACPI_STATUS
782AcpiUtCreateUpdateStateAndPush (
783    ACPI_OPERAND_OBJECT     *Object,
784    UINT16                  Action,
785    ACPI_GENERIC_STATE      **StateList);
786
787ACPI_GENERIC_STATE *
788AcpiUtCreateControlState (
789    void);
790
791void
792AcpiUtDeleteGenericState (
793    ACPI_GENERIC_STATE      *State);
794
795
796/*
797 * utmath
798 */
799ACPI_STATUS
800AcpiUtDivide (
801    UINT64                  InDividend,
802    UINT64                  InDivisor,
803    UINT64                  *OutQuotient,
804    UINT64                  *OutRemainder);
805
806ACPI_STATUS
807AcpiUtShortDivide (
808    UINT64                  InDividend,
809    UINT32                  Divisor,
810    UINT64                  *OutQuotient,
811    UINT32                  *OutRemainder);
812
813
814/*
815 * utmisc
816 */
817const ACPI_EXCEPTION_INFO *
818AcpiUtValidateException (
819    ACPI_STATUS             Status);
820
821BOOLEAN
822AcpiUtIsPciRootBridge (
823    char                    *Id);
824
825#if (defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP)
826BOOLEAN
827AcpiUtIsAmlTable (
828    ACPI_TABLE_HEADER       *Table);
829#endif
830
831ACPI_STATUS
832AcpiUtWalkPackageTree (
833    ACPI_OPERAND_OBJECT     *SourceObject,
834    void                    *TargetObject,
835    ACPI_PKG_CALLBACK       WalkCallback,
836    void                    *Context);
837
838
839/* Values for Base above (16=Hex, 10=Decimal) */
840
841#define ACPI_ANY_BASE        0
842
843UINT32
844AcpiUtDwordByteSwap (
845    UINT32                  Value);
846
847void
848AcpiUtSetIntegerWidth (
849    UINT8                   Revision);
850
851#ifdef ACPI_DEBUG_OUTPUT
852void
853AcpiUtDisplayInitPathname (
854    UINT8                   Type,
855    ACPI_NAMESPACE_NODE     *ObjHandle,
856    char                    *Path);
857#endif
858
859
860/*
861 * utownerid - Support for Table/Method Owner IDs
862 */
863ACPI_STATUS
864AcpiUtAllocateOwnerId (
865    ACPI_OWNER_ID           *OwnerId);
866
867void
868AcpiUtReleaseOwnerId (
869    ACPI_OWNER_ID           *OwnerId);
870
871
872/*
873 * utresrc
874 */
875ACPI_STATUS
876AcpiUtWalkAmlResources (
877    ACPI_WALK_STATE         *WalkState,
878    UINT8                   *Aml,
879    ACPI_SIZE               AmlLength,
880    ACPI_WALK_AML_CALLBACK  UserFunction,
881    void                    **Context);
882
883ACPI_STATUS
884AcpiUtValidateResource (
885    ACPI_WALK_STATE         *WalkState,
886    void                    *Aml,
887    UINT8                   *ReturnIndex);
888
889UINT32
890AcpiUtGetDescriptorLength (
891    void                    *Aml);
892
893UINT16
894AcpiUtGetResourceLength (
895    void                    *Aml);
896
897UINT8
898AcpiUtGetResourceHeaderLength (
899    void                    *Aml);
900
901UINT8
902AcpiUtGetResourceType (
903    void                    *Aml);
904
905ACPI_STATUS
906AcpiUtGetResourceEndTag (
907    ACPI_OPERAND_OBJECT     *ObjDesc,
908    UINT8                   **EndTag);
909
910
911/*
912 * utstring - String and character utilities
913 */
914void
915AcpiUtStrupr (
916    char                    *SrcString);
917
918#ifdef ACPI_ASL_COMPILER
919void
920AcpiUtStrlwr (
921    char                    *SrcString);
922
923int
924AcpiUtStricmp (
925    char                    *String1,
926    char                    *String2);
927#endif
928
929ACPI_STATUS
930AcpiUtStrtoul64 (
931    char                    *String,
932    UINT32                  Base,
933    UINT64                  *RetInteger);
934
935void
936AcpiUtPrintString (
937    char                    *String,
938    UINT16                  MaxLength);
939
940#if defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP
941void
942UtConvertBackslashes (
943    char                    *Pathname);
944#endif
945
946BOOLEAN
947AcpiUtValidAcpiName (
948    char                    *Name);
949
950BOOLEAN
951AcpiUtValidAcpiChar (
952    char                    Character,
953    UINT32                  Position);
954
955void
956AcpiUtRepairName (
957    char                    *Name);
958
959#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION)
960BOOLEAN
961AcpiUtSafeStrcpy (
962    char                    *Dest,
963    ACPI_SIZE               DestSize,
964    char                    *Source);
965
966BOOLEAN
967AcpiUtSafeStrcat (
968    char                    *Dest,
969    ACPI_SIZE               DestSize,
970    char                    *Source);
971
972#ifndef _KERNEL
973BOOLEAN
974AcpiUtSafeStrncat (
975    char                    *Dest,
976    ACPI_SIZE               DestSize,
977    char                    *Source,
978    ACPI_SIZE               MaxTransferLength);
979#endif
980#endif
981
982
983/*
984 * utmutex - mutex support
985 */
986ACPI_STATUS
987AcpiUtMutexInitialize (
988    void);
989
990void
991AcpiUtMutexTerminate (
992    void);
993
994ACPI_STATUS
995AcpiUtAcquireMutex (
996    ACPI_MUTEX_HANDLE       MutexId);
997
998ACPI_STATUS
999AcpiUtReleaseMutex (
1000    ACPI_MUTEX_HANDLE       MutexId);
1001
1002
1003/*
1004 * utalloc - memory allocation and object caching
1005 */
1006ACPI_STATUS
1007AcpiUtCreateCaches (
1008    void);
1009
1010ACPI_STATUS
1011AcpiUtDeleteCaches (
1012    void);
1013
1014ACPI_STATUS
1015AcpiUtValidateBuffer (
1016    ACPI_BUFFER             *Buffer);
1017
1018ACPI_STATUS
1019AcpiUtInitializeBuffer (
1020    ACPI_BUFFER             *Buffer,
1021    ACPI_SIZE               RequiredLength);
1022
1023#ifdef ACPI_DBG_TRACK_ALLOCATIONS
1024void *
1025AcpiUtAllocateAndTrack (
1026    ACPI_SIZE               Size,
1027    UINT32                  Component,
1028    const char              *Module,
1029    UINT32                  Line);
1030
1031void *
1032AcpiUtAllocateZeroedAndTrack (
1033    ACPI_SIZE               Size,
1034    UINT32                  Component,
1035    const char              *Module,
1036    UINT32                  Line);
1037
1038void
1039AcpiUtFreeAndTrack (
1040    void                    *Address,
1041    UINT32                  Component,
1042    const char              *Module,
1043    UINT32                  Line);
1044
1045void
1046AcpiUtDumpAllocationInfo (
1047    void);
1048
1049void
1050AcpiUtDumpAllocations (
1051    UINT32                  Component,
1052    const char              *Module);
1053
1054ACPI_STATUS
1055AcpiUtCreateList (
1056    char                    *ListName,
1057    UINT16                  ObjectSize,
1058    ACPI_MEMORY_LIST        **ReturnCache);
1059
1060#endif /* ACPI_DBG_TRACK_ALLOCATIONS */
1061
1062/*
1063 * utaddress - address range check
1064 */
1065ACPI_STATUS
1066AcpiUtAddAddressRange (
1067    ACPI_ADR_SPACE_TYPE     SpaceId,
1068    ACPI_PHYSICAL_ADDRESS   Address,
1069    UINT32                  Length,
1070    ACPI_NAMESPACE_NODE     *RegionNode);
1071
1072void
1073AcpiUtRemoveAddressRange (
1074    ACPI_ADR_SPACE_TYPE     SpaceId,
1075    ACPI_NAMESPACE_NODE     *RegionNode);
1076
1077UINT32
1078AcpiUtCheckAddressRange (
1079    ACPI_ADR_SPACE_TYPE     SpaceId,
1080    ACPI_PHYSICAL_ADDRESS   Address,
1081    UINT32                  Length,
1082    BOOLEAN                 Warn);
1083
1084void
1085AcpiUtDeleteAddressLists (
1086    void);
1087
1088/*
1089 * utxferror - various error/warning output functions
1090 */
1091void ACPI_INTERNAL_VAR_XFACE
1092AcpiUtPredefinedWarning (
1093    const char              *ModuleName,
1094    UINT32                  LineNumber,
1095    char                    *Pathname,
1096    UINT8                   NodeFlags,
1097    const char              *Format,
1098    ...);
1099
1100void ACPI_INTERNAL_VAR_XFACE
1101AcpiUtPredefinedInfo (
1102    const char              *ModuleName,
1103    UINT32                  LineNumber,
1104    char                    *Pathname,
1105    UINT8                   NodeFlags,
1106    const char              *Format,
1107    ...);
1108
1109void ACPI_INTERNAL_VAR_XFACE
1110AcpiUtPredefinedBiosError (
1111    const char              *ModuleName,
1112    UINT32                  LineNumber,
1113    char                    *Pathname,
1114    UINT8                   NodeFlags,
1115    const char              *Format,
1116    ...);
1117
1118void
1119AcpiUtNamespaceError (
1120    const char              *ModuleName,
1121    UINT32                  LineNumber,
1122    const char              *InternalName,
1123    ACPI_STATUS             LookupStatus);
1124
1125void
1126AcpiUtMethodError (
1127    const char              *ModuleName,
1128    UINT32                  LineNumber,
1129    const char              *Message,
1130    ACPI_NAMESPACE_NODE     *Node,
1131    const char              *Path,
1132    ACPI_STATUS             LookupStatus);
1133
1134/*
1135 * Utility functions for ACPI names and IDs
1136 */
1137const AH_PREDEFINED_NAME *
1138AcpiAhMatchPredefinedName (
1139    char                    *Nameseg);
1140
1141const AH_DEVICE_ID *
1142AcpiAhMatchHardwareId (
1143    char                    *Hid);
1144
1145const char *
1146AcpiAhMatchUuid (
1147    UINT8                   *Data);
1148
1149/*
1150 * utprint - printf/vprintf output functions
1151 */
1152const char *
1153AcpiUtScanNumber (
1154    const char              *String,
1155    UINT64                  *NumberPtr);
1156
1157const char *
1158AcpiUtPrintNumber (
1159    char                    *String,
1160    UINT64                  Number);
1161
1162int
1163AcpiUtVsnprintf (
1164    char                    *String,
1165    ACPI_SIZE               Size,
1166    const char              *Format,
1167    va_list                 Args);
1168
1169int
1170AcpiUtSnprintf (
1171    char                    *String,
1172    ACPI_SIZE               Size,
1173    const char              *Format,
1174    ...);
1175
1176#ifdef ACPI_APPLICATION
1177int
1178AcpiUtFileVprintf (
1179    ACPI_FILE               File,
1180    const char              *Format,
1181    va_list                 Args);
1182
1183int
1184AcpiUtFilePrintf (
1185    ACPI_FILE               File,
1186    const char              *Format,
1187    ...);
1188#endif
1189
1190/*
1191 * utuuid -- UUID support functions
1192 */
1193#if (defined ACPI_ASL_COMPILER || defined ACPI_DISASSEMBLER || defined ACPI_EXEC_APP || defined ACPI_HELP_APP)
1194void
1195AcpiUtConvertStringToUuid (
1196    char                    *InString,
1197    UINT8                   *UuidBuffer);
1198#endif
1199
1200#endif /* _ACUTILS_H */
1201