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