1 /******************************************************************************
   2  *
   3  * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
   4  *
   5  *****************************************************************************/
   6 
   7 /*
   8  * Copyright (C) 2000 - 2011, 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 
  50 /* Strings used by the disassembler and debugger resource dump routines */
  51 
  52 #if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
  53 
  54 extern const char                       *AcpiGbl_BmDecode[];
  55 extern const char                       *AcpiGbl_ConfigDecode[];
  56 extern const char                       *AcpiGbl_ConsumeDecode[];
  57 extern const char                       *AcpiGbl_DecDecode[];
  58 extern const char                       *AcpiGbl_HeDecode[];
  59 extern const char                       *AcpiGbl_IoDecode[];
  60 extern const char                       *AcpiGbl_LlDecode[];
  61 extern const char                       *AcpiGbl_MaxDecode[];
  62 extern const char                       *AcpiGbl_MemDecode[];
  63 extern const char                       *AcpiGbl_MinDecode[];
  64 extern const char                       *AcpiGbl_MtpDecode[];
  65 extern const char                       *AcpiGbl_RngDecode[];
  66 extern const char                       *AcpiGbl_RwDecode[];
  67 extern const char                       *AcpiGbl_ShrDecode[];
  68 extern const char                       *AcpiGbl_SizDecode[];
  69 extern const char                       *AcpiGbl_TrsDecode[];
  70 extern const char                       *AcpiGbl_TtpDecode[];
  71 extern const char                       *AcpiGbl_TypDecode[];
  72 #endif
  73 
  74 /* Types for Resource descriptor entries */
  75 
  76 #define ACPI_INVALID_RESOURCE           0
  77 #define ACPI_FIXED_LENGTH               1
  78 #define ACPI_VARIABLE_LENGTH            2
  79 #define ACPI_SMALL_VARIABLE_LENGTH      3
  80 
  81 typedef
  82 ACPI_STATUS (*ACPI_WALK_AML_CALLBACK) (
  83     UINT8                   *Aml,
  84     UINT32                  Length,
  85     UINT32                  Offset,
  86     UINT8                   ResourceIndex,
  87     void                    *Context);
  88 
  89 typedef
  90 ACPI_STATUS (*ACPI_PKG_CALLBACK) (
  91     UINT8                   ObjectType,
  92     ACPI_OPERAND_OBJECT     *SourceObject,
  93     ACPI_GENERIC_STATE      *State,
  94     void                    *Context);
  95 
  96 typedef struct acpi_pkg_info
  97 {
  98     UINT8                   *FreeSpace;
  99     ACPI_SIZE               Length;
 100     UINT32                  ObjectSpace;
 101     UINT32                  NumPackages;
 102 
 103 } ACPI_PKG_INFO;
 104 
 105 #define REF_INCREMENT       (UINT16) 0
 106 #define REF_DECREMENT       (UINT16) 1
 107 #define REF_FORCE_DELETE    (UINT16) 2
 108 
 109 /* AcpiUtDumpBuffer */
 110 
 111 #define DB_BYTE_DISPLAY     1
 112 #define DB_WORD_DISPLAY     2
 113 #define DB_DWORD_DISPLAY    4
 114 #define DB_QWORD_DISPLAY    8
 115 
 116 
 117 /*
 118  * utglobal - Global data structures and procedures
 119  */
 120 ACPI_STATUS
 121 AcpiUtInitGlobals (
 122     void);
 123 
 124 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 125 
 126 char *
 127 AcpiUtGetMutexName (
 128     UINT32                  MutexId);
 129 
 130 const char *
 131 AcpiUtGetNotifyName (
 132     UINT32                  NotifyValue);
 133 
 134 #endif
 135 
 136 char *
 137 AcpiUtGetTypeName (
 138     ACPI_OBJECT_TYPE        Type);
 139 
 140 char *
 141 AcpiUtGetNodeName (
 142     void                    *Object);
 143 
 144 char *
 145 AcpiUtGetDescriptorName (
 146     void                    *Object);
 147 
 148 const char *
 149 AcpiUtGetReferenceName (
 150     ACPI_OPERAND_OBJECT     *Object);
 151 
 152 char *
 153 AcpiUtGetObjectTypeName (
 154     ACPI_OPERAND_OBJECT     *ObjDesc);
 155 
 156 char *
 157 AcpiUtGetRegionName (
 158     UINT8                   SpaceId);
 159 
 160 char *
 161 AcpiUtGetEventName (
 162     UINT32                  EventId);
 163 
 164 char
 165 AcpiUtHexToAsciiChar (
 166     UINT64                  Integer,
 167     UINT32                  Position);
 168 
 169 BOOLEAN
 170 AcpiUtValidObjectType (
 171     ACPI_OBJECT_TYPE        Type);
 172 
 173 
 174 /*
 175  * utinit - miscellaneous initialization and shutdown
 176  */
 177 ACPI_STATUS
 178 AcpiUtHardwareInitialize (
 179     void);
 180 
 181 void
 182 AcpiUtSubsystemShutdown (
 183     void);
 184 
 185 
 186 /*
 187  * utclib - Local implementations of C library functions
 188  */
 189 #ifndef ACPI_USE_SYSTEM_CLIBRARY
 190 
 191 ACPI_SIZE
 192 AcpiUtStrlen (
 193     const char              *String);
 194 
 195 char *
 196 AcpiUtStrcpy (
 197     char                    *DstString,
 198     const char              *SrcString);
 199 
 200 char *
 201 AcpiUtStrncpy (
 202     char                    *DstString,
 203     const char              *SrcString,
 204     ACPI_SIZE               Count);
 205 
 206 int
 207 AcpiUtMemcmp (
 208     const char              *Buffer1,
 209     const char              *Buffer2,
 210     ACPI_SIZE               Count);
 211 
 212 int
 213 AcpiUtStrncmp (
 214     const char              *String1,
 215     const char              *String2,
 216     ACPI_SIZE               Count);
 217 
 218 int
 219 AcpiUtStrcmp (
 220     const char              *String1,
 221     const char              *String2);
 222 
 223 char *
 224 AcpiUtStrcat (
 225     char                    *DstString,
 226     const char              *SrcString);
 227 
 228 char *
 229 AcpiUtStrncat (
 230     char                    *DstString,
 231     const char              *SrcString,
 232     ACPI_SIZE               Count);
 233 
 234 UINT32
 235 AcpiUtStrtoul (
 236     const char              *String,
 237     char                    **Terminator,
 238     UINT32                  Base);
 239 
 240 char *
 241 AcpiUtStrstr (
 242     char                    *String1,
 243     char                    *String2);
 244 
 245 void *
 246 AcpiUtMemcpy (
 247     void                    *Dest,
 248     const void              *Src,
 249     ACPI_SIZE               Count);
 250 
 251 void *
 252 AcpiUtMemset (
 253     void                    *Dest,
 254     UINT8                   Value,
 255     ACPI_SIZE               Count);
 256 
 257 int
 258 AcpiUtToUpper (
 259     int                     c);
 260 
 261 int
 262 AcpiUtToLower (
 263     int                     c);
 264 
 265 extern const UINT8 _acpi_ctype[];
 266 
 267 #define _ACPI_XA     0x00    /* extra alphabetic - not supported */
 268 #define _ACPI_XS     0x40    /* extra space */
 269 #define _ACPI_BB     0x00    /* BEL, BS, etc. - not supported */
 270 #define _ACPI_CN     0x20    /* CR, FF, HT, NL, VT */
 271 #define _ACPI_DI     0x04    /* '0'-'9' */
 272 #define _ACPI_LO     0x02    /* 'a'-'z' */
 273 #define _ACPI_PU     0x10    /* punctuation */
 274 #define _ACPI_SP     0x08    /* space */
 275 #define _ACPI_UP     0x01    /* 'A'-'Z' */
 276 #define _ACPI_XD     0x80    /* '0'-'9', 'A'-'F', 'a'-'f' */
 277 
 278 #define ACPI_IS_DIGIT(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_DI))
 279 #define ACPI_IS_SPACE(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_SP))
 280 #define ACPI_IS_XDIGIT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_XD))
 281 #define ACPI_IS_UPPER(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_UP))
 282 #define ACPI_IS_LOWER(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO))
 283 #define ACPI_IS_PRINT(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_SP | _ACPI_PU))
 284 #define ACPI_IS_ALPHA(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP))
 285 
 286 #endif /* !ACPI_USE_SYSTEM_CLIBRARY */
 287 
 288 #define ACPI_IS_ASCII(c)  ((c) < 0x80)
 289 
 290 
 291 /*
 292  * utcopy - Object construction and conversion interfaces
 293  */
 294 ACPI_STATUS
 295 AcpiUtBuildSimpleObject(
 296     ACPI_OPERAND_OBJECT     *Obj,
 297     ACPI_OBJECT             *UserObj,
 298     UINT8                   *DataSpace,
 299     UINT32                  *BufferSpaceUsed);
 300 
 301 ACPI_STATUS
 302 AcpiUtBuildPackageObject (
 303     ACPI_OPERAND_OBJECT     *Obj,
 304     UINT8                   *Buffer,
 305     UINT32                  *SpaceUsed);
 306 
 307 ACPI_STATUS
 308 AcpiUtCopyIobjectToEobject (
 309     ACPI_OPERAND_OBJECT     *Obj,
 310     ACPI_BUFFER             *RetBuffer);
 311 
 312 ACPI_STATUS
 313 AcpiUtCopyEobjectToIobject (
 314     ACPI_OBJECT             *Obj,
 315     ACPI_OPERAND_OBJECT     **InternalObj);
 316 
 317 ACPI_STATUS
 318 AcpiUtCopyISimpleToIsimple (
 319     ACPI_OPERAND_OBJECT     *SourceObj,
 320     ACPI_OPERAND_OBJECT     *DestObj);
 321 
 322 ACPI_STATUS
 323 AcpiUtCopyIobjectToIobject (
 324     ACPI_OPERAND_OBJECT     *SourceDesc,
 325     ACPI_OPERAND_OBJECT     **DestDesc,
 326     ACPI_WALK_STATE         *WalkState);
 327 
 328 
 329 /*
 330  * utcreate - Object creation
 331  */
 332 ACPI_STATUS
 333 AcpiUtUpdateObjectReference (
 334     ACPI_OPERAND_OBJECT     *Object,
 335     UINT16                  Action);
 336 
 337 
 338 /*
 339  * utdebug - Debug interfaces
 340  */
 341 void
 342 AcpiUtInitStackPtrTrace (
 343     void);
 344 
 345 void
 346 AcpiUtTrackStackPtr (
 347     void);
 348 
 349 void
 350 AcpiUtTrace (
 351     UINT32                  LineNumber,
 352     const char              *FunctionName,
 353     const char              *ModuleName,
 354     UINT32                  ComponentId);
 355 
 356 void
 357 AcpiUtTracePtr (
 358     UINT32                  LineNumber,
 359     const char              *FunctionName,
 360     const char              *ModuleName,
 361     UINT32                  ComponentId,
 362     void                    *Pointer);
 363 
 364 void
 365 AcpiUtTraceU32 (
 366     UINT32                  LineNumber,
 367     const char              *FunctionName,
 368     const char              *ModuleName,
 369     UINT32                  ComponentId,
 370     UINT32                  Integer);
 371 
 372 void
 373 AcpiUtTraceStr (
 374     UINT32                  LineNumber,
 375     const char              *FunctionName,
 376     const char              *ModuleName,
 377     UINT32                  ComponentId,
 378     char                    *String);
 379 
 380 void
 381 AcpiUtExit (
 382     UINT32                  LineNumber,
 383     const char              *FunctionName,
 384     const char              *ModuleName,
 385     UINT32                  ComponentId);
 386 
 387 void
 388 AcpiUtStatusExit (
 389     UINT32                  LineNumber,
 390     const char              *FunctionName,
 391     const char              *ModuleName,
 392     UINT32                  ComponentId,
 393     ACPI_STATUS             Status);
 394 
 395 void
 396 AcpiUtValueExit (
 397     UINT32                  LineNumber,
 398     const char              *FunctionName,
 399     const char              *ModuleName,
 400     UINT32                  ComponentId,
 401     UINT64                  Value);
 402 
 403 void
 404 AcpiUtPtrExit (
 405     UINT32                  LineNumber,
 406     const char              *FunctionName,
 407     const char              *ModuleName,
 408     UINT32                  ComponentId,
 409     UINT8                   *Ptr);
 410 
 411 void
 412 AcpiUtDumpBuffer (
 413     UINT8                   *Buffer,
 414     UINT32                  Count,
 415     UINT32                  Display,
 416     UINT32                  componentId);
 417 
 418 void
 419 AcpiUtDumpBuffer2 (
 420     UINT8                   *Buffer,
 421     UINT32                  Count,
 422     UINT32                  Display);
 423 
 424 void
 425 AcpiUtReportError (
 426     char                    *ModuleName,
 427     UINT32                  LineNumber);
 428 
 429 void
 430 AcpiUtReportInfo (
 431     char                    *ModuleName,
 432     UINT32                  LineNumber);
 433 
 434 void
 435 AcpiUtReportWarning (
 436     char                    *ModuleName,
 437     UINT32                  LineNumber);
 438 
 439 /*
 440  * utdelete - Object deletion and reference counts
 441  */
 442 void
 443 AcpiUtAddReference (
 444     ACPI_OPERAND_OBJECT     *Object);
 445 
 446 void
 447 AcpiUtRemoveReference (
 448     ACPI_OPERAND_OBJECT     *Object);
 449 
 450 void
 451 AcpiUtDeleteInternalPackageObject (
 452     ACPI_OPERAND_OBJECT     *Object);
 453 
 454 void
 455 AcpiUtDeleteInternalSimpleObject (
 456     ACPI_OPERAND_OBJECT     *Object);
 457 
 458 void
 459 AcpiUtDeleteInternalObjectList (
 460     ACPI_OPERAND_OBJECT     **ObjList);
 461 
 462 
 463 /*
 464  * uteval - object evaluation
 465  */
 466 ACPI_STATUS
 467 AcpiUtEvaluateObject (
 468     ACPI_NAMESPACE_NODE     *PrefixNode,
 469     char                    *Path,
 470     UINT32                  ExpectedReturnBtypes,
 471     ACPI_OPERAND_OBJECT     **ReturnDesc);
 472 
 473 ACPI_STATUS
 474 AcpiUtEvaluateNumericObject (
 475     char                    *ObjectName,
 476     ACPI_NAMESPACE_NODE     *DeviceNode,
 477     UINT64                  *Value);
 478 
 479 ACPI_STATUS
 480 AcpiUtExecute_STA (
 481     ACPI_NAMESPACE_NODE     *DeviceNode,
 482     UINT32                  *StatusFlags);
 483 
 484 ACPI_STATUS
 485 AcpiUtExecutePowerMethods (
 486     ACPI_NAMESPACE_NODE     *DeviceNode,
 487     const char              **MethodNames,
 488     UINT8                   MethodCount,
 489     UINT8                   *OutValues);
 490 
 491 
 492 /*
 493  * utids - device ID support
 494  */
 495 ACPI_STATUS
 496 AcpiUtExecute_HID (
 497     ACPI_NAMESPACE_NODE     *DeviceNode,
 498     ACPI_DEVICE_ID          **ReturnId);
 499 
 500 ACPI_STATUS
 501 AcpiUtExecute_UID (
 502     ACPI_NAMESPACE_NODE     *DeviceNode,
 503     ACPI_DEVICE_ID          **ReturnId);
 504 
 505 ACPI_STATUS
 506 AcpiUtExecute_CID (
 507     ACPI_NAMESPACE_NODE     *DeviceNode,
 508     ACPI_DEVICE_ID_LIST     **ReturnCidList);
 509 
 510 
 511 /*
 512  * utlock - reader/writer locks
 513  */
 514 ACPI_STATUS
 515 AcpiUtCreateRwLock (
 516     ACPI_RW_LOCK            *Lock);
 517 
 518 void
 519 AcpiUtDeleteRwLock (
 520     ACPI_RW_LOCK            *Lock);
 521 
 522 ACPI_STATUS
 523 AcpiUtAcquireReadLock (
 524     ACPI_RW_LOCK            *Lock);
 525 
 526 ACPI_STATUS
 527 AcpiUtReleaseReadLock (
 528     ACPI_RW_LOCK            *Lock);
 529 
 530 ACPI_STATUS
 531 AcpiUtAcquireWriteLock (
 532     ACPI_RW_LOCK            *Lock);
 533 
 534 void
 535 AcpiUtReleaseWriteLock (
 536     ACPI_RW_LOCK            *Lock);
 537 
 538 
 539 /*
 540  * utobject - internal object create/delete/cache routines
 541  */
 542 ACPI_OPERAND_OBJECT  *
 543 AcpiUtCreateInternalObjectDbg (
 544     const char              *ModuleName,
 545     UINT32                  LineNumber,
 546     UINT32                  ComponentId,
 547     ACPI_OBJECT_TYPE        Type);
 548 
 549 void *
 550 AcpiUtAllocateObjectDescDbg (
 551     const char              *ModuleName,
 552     UINT32                  LineNumber,
 553     UINT32                  ComponentId);
 554 
 555 #define AcpiUtCreateInternalObject(t)   AcpiUtCreateInternalObjectDbg (_AcpiModuleName,__LINE__,_COMPONENT,t)
 556 #define AcpiUtAllocateObjectDesc()      AcpiUtAllocateObjectDescDbg (_AcpiModuleName,__LINE__,_COMPONENT)
 557 
 558 void
 559 AcpiUtDeleteObjectDesc (
 560     ACPI_OPERAND_OBJECT     *Object);
 561 
 562 BOOLEAN
 563 AcpiUtValidInternalObject (
 564     void                    *Object);
 565 
 566 ACPI_OPERAND_OBJECT *
 567 AcpiUtCreatePackageObject (
 568     UINT32                  Count);
 569 
 570 ACPI_OPERAND_OBJECT *
 571 AcpiUtCreateIntegerObject (
 572     UINT64                  Value);
 573 
 574 ACPI_OPERAND_OBJECT *
 575 AcpiUtCreateBufferObject (
 576     ACPI_SIZE               BufferSize);
 577 
 578 ACPI_OPERAND_OBJECT *
 579 AcpiUtCreateStringObject (
 580     ACPI_SIZE               StringSize);
 581 
 582 ACPI_STATUS
 583 AcpiUtGetObjectSize(
 584     ACPI_OPERAND_OBJECT     *Obj,
 585     ACPI_SIZE               *ObjLength);
 586 
 587 
 588 /*
 589  * utosi - Support for the _OSI predefined control method
 590  */
 591 ACPI_STATUS
 592 AcpiUtInitializeInterfaces (
 593     void);
 594 
 595 void
 596 AcpiUtInterfaceTerminate (
 597     void);
 598 
 599 ACPI_STATUS
 600 AcpiUtInstallInterface (
 601     ACPI_STRING             InterfaceName);
 602 
 603 ACPI_STATUS
 604 AcpiUtRemoveInterface (
 605     ACPI_STRING             InterfaceName);
 606 
 607 ACPI_INTERFACE_INFO *
 608 AcpiUtGetInterface (
 609     ACPI_STRING             InterfaceName);
 610 
 611 ACPI_STATUS
 612 AcpiUtOsiImplementation (
 613     ACPI_WALK_STATE         *WalkState);
 614 
 615 
 616 /*
 617  * utstate - Generic state creation/cache routines
 618  */
 619 void
 620 AcpiUtPushGenericState (
 621     ACPI_GENERIC_STATE      **ListHead,
 622     ACPI_GENERIC_STATE      *State);
 623 
 624 ACPI_GENERIC_STATE *
 625 AcpiUtPopGenericState (
 626     ACPI_GENERIC_STATE      **ListHead);
 627 
 628 
 629 ACPI_GENERIC_STATE *
 630 AcpiUtCreateGenericState (
 631     void);
 632 
 633 ACPI_THREAD_STATE *
 634 AcpiUtCreateThreadState (
 635     void);
 636 
 637 ACPI_GENERIC_STATE *
 638 AcpiUtCreateUpdateState (
 639     ACPI_OPERAND_OBJECT     *Object,
 640     UINT16                  Action);
 641 
 642 ACPI_GENERIC_STATE *
 643 AcpiUtCreatePkgState (
 644     void                    *InternalObject,
 645     void                    *ExternalObject,
 646     UINT16                  Index);
 647 
 648 ACPI_STATUS
 649 AcpiUtCreateUpdateStateAndPush (
 650     ACPI_OPERAND_OBJECT     *Object,
 651     UINT16                  Action,
 652     ACPI_GENERIC_STATE      **StateList);
 653 
 654 ACPI_STATUS
 655 AcpiUtCreatePkgStateAndPush (
 656     void                    *InternalObject,
 657     void                    *ExternalObject,
 658     UINT16                  Index,
 659     ACPI_GENERIC_STATE      **StateList);
 660 
 661 ACPI_GENERIC_STATE *
 662 AcpiUtCreateControlState (
 663     void);
 664 
 665 void
 666 AcpiUtDeleteGenericState (
 667     ACPI_GENERIC_STATE      *State);
 668 
 669 
 670 /*
 671  * utmath
 672  */
 673 ACPI_STATUS
 674 AcpiUtDivide (
 675     UINT64                  InDividend,
 676     UINT64                  InDivisor,
 677     UINT64                  *OutQuotient,
 678     UINT64                  *OutRemainder);
 679 
 680 ACPI_STATUS
 681 AcpiUtShortDivide (
 682     UINT64                  InDividend,
 683     UINT32                  Divisor,
 684     UINT64                  *OutQuotient,
 685     UINT32                  *OutRemainder);
 686 
 687 /*
 688  * utmisc
 689  */
 690 const char *
 691 AcpiUtValidateException (
 692     ACPI_STATUS             Status);
 693 
 694 BOOLEAN
 695 AcpiUtIsPciRootBridge (
 696     char                    *Id);
 697 
 698 BOOLEAN
 699 AcpiUtIsAmlTable (
 700     ACPI_TABLE_HEADER       *Table);
 701 
 702 ACPI_STATUS
 703 AcpiUtAllocateOwnerId (
 704     ACPI_OWNER_ID           *OwnerId);
 705 
 706 void
 707 AcpiUtReleaseOwnerId (
 708     ACPI_OWNER_ID           *OwnerId);
 709 
 710 ACPI_STATUS
 711 AcpiUtWalkPackageTree (
 712     ACPI_OPERAND_OBJECT     *SourceObject,
 713     void                    *TargetObject,
 714     ACPI_PKG_CALLBACK       WalkCallback,
 715     void                    *Context);
 716 
 717 void
 718 AcpiUtStrupr (
 719     char                    *SrcString);
 720 
 721 void
 722 AcpiUtStrlwr (
 723     char                    *SrcString);
 724 
 725 void
 726 AcpiUtPrintString (
 727     char                    *String,
 728     UINT8                   MaxLength);
 729 
 730 BOOLEAN
 731 AcpiUtValidAcpiName (
 732     UINT32                  Name);
 733 
 734 void
 735 AcpiUtRepairName (
 736     char                    *Name);
 737 
 738 BOOLEAN
 739 AcpiUtValidAcpiChar (
 740     char                    Character,
 741     UINT32                  Position);
 742 
 743 ACPI_STATUS
 744 AcpiUtStrtoul64 (
 745     char                    *String,
 746     UINT32                  Base,
 747     UINT64                  *RetInteger);
 748 
 749 /* Values for Base above (16=Hex, 10=Decimal) */
 750 
 751 #define ACPI_ANY_BASE        0
 752 
 753 UINT32
 754 AcpiUtDwordByteSwap (
 755     UINT32                  Value);
 756 
 757 void
 758 AcpiUtSetIntegerWidth (
 759     UINT8                   Revision);
 760 
 761 #ifdef ACPI_DEBUG_OUTPUT
 762 void
 763 AcpiUtDisplayInitPathname (
 764     UINT8                   Type,
 765     ACPI_NAMESPACE_NODE     *ObjHandle,
 766     char                    *Path);
 767 #endif
 768 
 769 
 770 /*
 771  * utresrc
 772  */
 773 ACPI_STATUS
 774 AcpiUtWalkAmlResources (
 775     UINT8                   *Aml,
 776     ACPI_SIZE               AmlLength,
 777     ACPI_WALK_AML_CALLBACK  UserFunction,
 778     void                    *Context);
 779 
 780 ACPI_STATUS
 781 AcpiUtValidateResource (
 782     void                    *Aml,
 783     UINT8                   *ReturnIndex);
 784 
 785 UINT32
 786 AcpiUtGetDescriptorLength (
 787     void                    *Aml);
 788 
 789 UINT16
 790 AcpiUtGetResourceLength (
 791     void                    *Aml);
 792 
 793 UINT8
 794 AcpiUtGetResourceHeaderLength (
 795     void                    *Aml);
 796 
 797 UINT8
 798 AcpiUtGetResourceType (
 799     void                    *Aml);
 800 
 801 ACPI_STATUS
 802 AcpiUtGetResourceEndTag (
 803     ACPI_OPERAND_OBJECT     *ObjDesc,
 804     UINT8                   **EndTag);
 805 
 806 
 807 /*
 808  * utmutex - mutex support
 809  */
 810 ACPI_STATUS
 811 AcpiUtMutexInitialize (
 812     void);
 813 
 814 void
 815 AcpiUtMutexTerminate (
 816     void);
 817 
 818 ACPI_STATUS
 819 AcpiUtAcquireMutex (
 820     ACPI_MUTEX_HANDLE       MutexId);
 821 
 822 ACPI_STATUS
 823 AcpiUtReleaseMutex (
 824     ACPI_MUTEX_HANDLE       MutexId);
 825 
 826 
 827 /*
 828  * utalloc - memory allocation and object caching
 829  */
 830 ACPI_STATUS
 831 AcpiUtCreateCaches (
 832     void);
 833 
 834 ACPI_STATUS
 835 AcpiUtDeleteCaches (
 836     void);
 837 
 838 ACPI_STATUS
 839 AcpiUtValidateBuffer (
 840     ACPI_BUFFER             *Buffer);
 841 
 842 ACPI_STATUS
 843 AcpiUtInitializeBuffer (
 844     ACPI_BUFFER             *Buffer,
 845     ACPI_SIZE               RequiredLength);
 846 
 847 void *
 848 AcpiUtAllocate (
 849     ACPI_SIZE               Size,
 850     UINT32                  Component,
 851     const char              *Module,
 852     UINT32                  Line);
 853 
 854 void *
 855 AcpiUtAllocateZeroed (
 856     ACPI_SIZE               Size,
 857     UINT32                  Component,
 858     const char              *Module,
 859     UINT32                  Line);
 860 
 861 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
 862 void *
 863 AcpiUtAllocateAndTrack (
 864     ACPI_SIZE               Size,
 865     UINT32                  Component,
 866     const char              *Module,
 867     UINT32                  Line);
 868 
 869 void *
 870 AcpiUtAllocateZeroedAndTrack (
 871     ACPI_SIZE               Size,
 872     UINT32                  Component,
 873     const char              *Module,
 874     UINT32                  Line);
 875 
 876 void
 877 AcpiUtFreeAndTrack (
 878     void                    *Address,
 879     UINT32                  Component,
 880     const char              *Module,
 881     UINT32                  Line);
 882 
 883 void
 884 AcpiUtDumpAllocationInfo (
 885     void);
 886 
 887 void
 888 AcpiUtDumpAllocations (
 889     UINT32                  Component,
 890     const char              *Module);
 891 
 892 ACPI_STATUS
 893 AcpiUtCreateList (
 894     char                    *ListName,
 895     UINT16                  ObjectSize,
 896     ACPI_MEMORY_LIST        **ReturnCache);
 897 
 898 #endif /* ACPI_DBG_TRACK_ALLOCATIONS */
 899 
 900 
 901 /*
 902  * utxferror - various error/warning output functions
 903  */
 904 void ACPI_INTERNAL_VAR_XFACE
 905 AcpiUtPredefinedWarning (
 906     const char              *ModuleName,
 907     UINT32                  LineNumber,
 908     char                    *Pathname,
 909     UINT8                   NodeFlags,
 910     const char              *Format,
 911     ...);
 912 
 913 void ACPI_INTERNAL_VAR_XFACE
 914 AcpiUtPredefinedInfo (
 915     const char              *ModuleName,
 916     UINT32                  LineNumber,
 917     char                    *Pathname,
 918     UINT8                   NodeFlags,
 919     const char              *Format,
 920     ...);
 921 
 922 void
 923 AcpiUtNamespaceError (
 924     const char              *ModuleName,
 925     UINT32                  LineNumber,
 926     const char              *InternalName,
 927     ACPI_STATUS             LookupStatus);
 928 
 929 void
 930 AcpiUtMethodError (
 931     const char              *ModuleName,
 932     UINT32                  LineNumber,
 933     const char              *Message,
 934     ACPI_NAMESPACE_NODE     *Node,
 935     const char              *Path,
 936     ACPI_STATUS             LookupStatus);
 937 
 938 #endif /* _ACUTILS_H */