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