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