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