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