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