utglobal.c revision 213806
1/****************************************************************************** 2 * 3 * Module Name: utglobal - Global variables for the ACPI subsystem 4 * 5 *****************************************************************************/ 6 7/****************************************************************************** 8 * 9 * 1. Copyright Notice 10 * 11 * Some or all of this work - Copyright (c) 1999 - 2010, 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#define __UTGLOBAL_C__ 117#define DEFINE_ACPI_GLOBALS 118 119#include <contrib/dev/acpica/include/acpi.h> 120#include <contrib/dev/acpica/include/accommon.h> 121#include <contrib/dev/acpica/include/acnamesp.h> 122 123#define _COMPONENT ACPI_UTILITIES 124 ACPI_MODULE_NAME ("utglobal") 125 126 127/******************************************************************************* 128 * 129 * Static global variable initialization. 130 * 131 ******************************************************************************/ 132 133/* 134 * We want the debug switches statically initialized so they 135 * are already set when the debugger is entered. 136 */ 137 138/* Debug switch - level and trace mask */ 139 140#ifdef ACPI_DEBUG_OUTPUT 141UINT32 AcpiDbgLevel = ACPI_DEBUG_DEFAULT; 142#else 143UINT32 AcpiDbgLevel = ACPI_NORMAL_DEFAULT; 144#endif 145 146/* Debug switch - layer (component) mask */ 147 148UINT32 AcpiDbgLayer = ACPI_COMPONENT_DEFAULT; 149UINT32 AcpiGbl_NestingLevel = 0; 150 151/* Debugger globals */ 152 153BOOLEAN AcpiGbl_DbTerminateThreads = FALSE; 154BOOLEAN AcpiGbl_AbortMethod = FALSE; 155BOOLEAN AcpiGbl_MethodExecuting = FALSE; 156 157/* System flags */ 158 159UINT32 AcpiGbl_StartupFlags = 0; 160 161/* System starts uninitialized */ 162 163BOOLEAN AcpiGbl_Shutdown = TRUE; 164 165const char *AcpiGbl_SleepStateNames[ACPI_S_STATE_COUNT] = 166{ 167 "\\_S0_", 168 "\\_S1_", 169 "\\_S2_", 170 "\\_S3_", 171 "\\_S4_", 172 "\\_S5_" 173}; 174 175const char *AcpiGbl_LowestDstateNames[ACPI_NUM_SxW_METHODS] = 176{ 177 "_S0W", 178 "_S1W", 179 "_S2W", 180 "_S3W", 181 "_S4W" 182}; 183 184const char *AcpiGbl_HighestDstateNames[ACPI_NUM_SxD_METHODS] = 185{ 186 "_S1D", 187 "_S2D", 188 "_S3D", 189 "_S4D" 190}; 191 192 193/******************************************************************************* 194 * 195 * FUNCTION: AcpiFormatException 196 * 197 * PARAMETERS: Status - The ACPI_STATUS code to be formatted 198 * 199 * RETURN: A string containing the exception text. A valid pointer is 200 * always returned. 201 * 202 * DESCRIPTION: This function translates an ACPI exception into an ASCII string 203 * It is here instead of utxface.c so it is always present. 204 * 205 ******************************************************************************/ 206 207const char * 208AcpiFormatException ( 209 ACPI_STATUS Status) 210{ 211 const char *Exception = NULL; 212 213 214 ACPI_FUNCTION_ENTRY (); 215 216 217 Exception = AcpiUtValidateException (Status); 218 if (!Exception) 219 { 220 /* Exception code was not recognized */ 221 222 ACPI_ERROR ((AE_INFO, 223 "Unknown exception code: 0x%8.8X", Status)); 224 225 Exception = "UNKNOWN_STATUS_CODE"; 226 } 227 228 return (ACPI_CAST_PTR (const char, Exception)); 229} 230 231ACPI_EXPORT_SYMBOL (AcpiFormatException) 232 233 234/******************************************************************************* 235 * 236 * Namespace globals 237 * 238 ******************************************************************************/ 239 240/* 241 * Predefined ACPI Names (Built-in to the Interpreter) 242 * 243 * NOTES: 244 * 1) _SB_ is defined to be a device to allow \_SB_._INI to be run 245 * during the initialization sequence. 246 * 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to 247 * perform a Notify() operation on it. 09/2010: Changed to type Device. 248 * This still allows notifies, but does not confuse host code that 249 * searches for valid ThermalZone objects. 250 */ 251const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames[] = 252{ 253 {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL}, 254 {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL}, 255 {"_SB_", ACPI_TYPE_DEVICE, NULL}, 256 {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL}, 257 {"_TZ_", ACPI_TYPE_DEVICE, NULL}, 258 {"_REV", ACPI_TYPE_INTEGER, (char *) ACPI_CA_SUPPORT_LEVEL}, 259 {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME}, 260 {"_GL_", ACPI_TYPE_MUTEX, (char *) 1}, 261 262#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY) 263 {"_OSI", ACPI_TYPE_METHOD, (char *) 1}, 264#endif 265 266 /* Table terminator */ 267 268 {NULL, ACPI_TYPE_ANY, NULL} 269}; 270 271/* 272 * Properties of the ACPI Object Types, both internal and external. 273 * The table is indexed by values of ACPI_OBJECT_TYPE 274 */ 275const UINT8 AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] = 276{ 277 ACPI_NS_NORMAL, /* 00 Any */ 278 ACPI_NS_NORMAL, /* 01 Number */ 279 ACPI_NS_NORMAL, /* 02 String */ 280 ACPI_NS_NORMAL, /* 03 Buffer */ 281 ACPI_NS_NORMAL, /* 04 Package */ 282 ACPI_NS_NORMAL, /* 05 FieldUnit */ 283 ACPI_NS_NEWSCOPE, /* 06 Device */ 284 ACPI_NS_NORMAL, /* 07 Event */ 285 ACPI_NS_NEWSCOPE, /* 08 Method */ 286 ACPI_NS_NORMAL, /* 09 Mutex */ 287 ACPI_NS_NORMAL, /* 10 Region */ 288 ACPI_NS_NEWSCOPE, /* 11 Power */ 289 ACPI_NS_NEWSCOPE, /* 12 Processor */ 290 ACPI_NS_NEWSCOPE, /* 13 Thermal */ 291 ACPI_NS_NORMAL, /* 14 BufferField */ 292 ACPI_NS_NORMAL, /* 15 DdbHandle */ 293 ACPI_NS_NORMAL, /* 16 Debug Object */ 294 ACPI_NS_NORMAL, /* 17 DefField */ 295 ACPI_NS_NORMAL, /* 18 BankField */ 296 ACPI_NS_NORMAL, /* 19 IndexField */ 297 ACPI_NS_NORMAL, /* 20 Reference */ 298 ACPI_NS_NORMAL, /* 21 Alias */ 299 ACPI_NS_NORMAL, /* 22 MethodAlias */ 300 ACPI_NS_NORMAL, /* 23 Notify */ 301 ACPI_NS_NORMAL, /* 24 Address Handler */ 302 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 25 Resource Desc */ 303 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 26 Resource Field */ 304 ACPI_NS_NEWSCOPE, /* 27 Scope */ 305 ACPI_NS_NORMAL, /* 28 Extra */ 306 ACPI_NS_NORMAL, /* 29 Data */ 307 ACPI_NS_NORMAL /* 30 Invalid */ 308}; 309 310 311/* Hex to ASCII conversion table */ 312 313static const char AcpiGbl_HexToAscii[] = 314{ 315 '0','1','2','3','4','5','6','7', 316 '8','9','A','B','C','D','E','F' 317}; 318 319 320/******************************************************************************* 321 * 322 * FUNCTION: AcpiUtHexToAsciiChar 323 * 324 * PARAMETERS: Integer - Contains the hex digit 325 * Position - bit position of the digit within the 326 * integer (multiple of 4) 327 * 328 * RETURN: The converted Ascii character 329 * 330 * DESCRIPTION: Convert a hex digit to an Ascii character 331 * 332 ******************************************************************************/ 333 334char 335AcpiUtHexToAsciiChar ( 336 UINT64 Integer, 337 UINT32 Position) 338{ 339 340 return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]); 341} 342 343 344/****************************************************************************** 345 * 346 * Event and Hardware globals 347 * 348 ******************************************************************************/ 349 350ACPI_BIT_REGISTER_INFO AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG] = 351{ 352 /* Name Parent Register Register Bit Position Register Bit Mask */ 353 354 /* ACPI_BITREG_TIMER_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_TIMER_STATUS, ACPI_BITMASK_TIMER_STATUS}, 355 /* ACPI_BITREG_BUS_MASTER_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_BUS_MASTER_STATUS, ACPI_BITMASK_BUS_MASTER_STATUS}, 356 /* ACPI_BITREG_GLOBAL_LOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_GLOBAL_LOCK_STATUS, ACPI_BITMASK_GLOBAL_LOCK_STATUS}, 357 /* ACPI_BITREG_POWER_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_POWER_BUTTON_STATUS, ACPI_BITMASK_POWER_BUTTON_STATUS}, 358 /* ACPI_BITREG_SLEEP_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_SLEEP_BUTTON_STATUS, ACPI_BITMASK_SLEEP_BUTTON_STATUS}, 359 /* ACPI_BITREG_RT_CLOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_RT_CLOCK_STATUS, ACPI_BITMASK_RT_CLOCK_STATUS}, 360 /* ACPI_BITREG_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_WAKE_STATUS, ACPI_BITMASK_WAKE_STATUS}, 361 /* ACPI_BITREG_PCIEXP_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_PCIEXP_WAKE_STATUS, ACPI_BITMASK_PCIEXP_WAKE_STATUS}, 362 363 /* ACPI_BITREG_TIMER_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_TIMER_ENABLE, ACPI_BITMASK_TIMER_ENABLE}, 364 /* ACPI_BITREG_GLOBAL_LOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE, ACPI_BITMASK_GLOBAL_LOCK_ENABLE}, 365 /* ACPI_BITREG_POWER_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_ENABLE}, 366 /* ACPI_BITREG_SLEEP_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_ENABLE}, 367 /* ACPI_BITREG_RT_CLOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_RT_CLOCK_ENABLE, ACPI_BITMASK_RT_CLOCK_ENABLE}, 368 /* ACPI_BITREG_PCIEXP_WAKE_DISABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE, ACPI_BITMASK_PCIEXP_WAKE_DISABLE}, 369 370 /* ACPI_BITREG_SCI_ENABLE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SCI_ENABLE, ACPI_BITMASK_SCI_ENABLE}, 371 /* ACPI_BITREG_BUS_MASTER_RLD */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_BUS_MASTER_RLD, ACPI_BITMASK_BUS_MASTER_RLD}, 372 /* ACPI_BITREG_GLOBAL_LOCK_RELEASE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE, ACPI_BITMASK_GLOBAL_LOCK_RELEASE}, 373 /* ACPI_BITREG_SLEEP_TYPE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SLEEP_TYPE, ACPI_BITMASK_SLEEP_TYPE}, 374 /* ACPI_BITREG_SLEEP_ENABLE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SLEEP_ENABLE, ACPI_BITMASK_SLEEP_ENABLE}, 375 376 /* ACPI_BITREG_ARB_DIS */ {ACPI_REGISTER_PM2_CONTROL, ACPI_BITPOSITION_ARB_DISABLE, ACPI_BITMASK_ARB_DISABLE} 377}; 378 379 380ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] = 381{ 382 /* ACPI_EVENT_PMTIMER */ {ACPI_BITREG_TIMER_STATUS, ACPI_BITREG_TIMER_ENABLE, ACPI_BITMASK_TIMER_STATUS, ACPI_BITMASK_TIMER_ENABLE}, 383 /* ACPI_EVENT_GLOBAL */ {ACPI_BITREG_GLOBAL_LOCK_STATUS, ACPI_BITREG_GLOBAL_LOCK_ENABLE, ACPI_BITMASK_GLOBAL_LOCK_STATUS, ACPI_BITMASK_GLOBAL_LOCK_ENABLE}, 384 /* ACPI_EVENT_POWER_BUTTON */ {ACPI_BITREG_POWER_BUTTON_STATUS, ACPI_BITREG_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_STATUS, ACPI_BITMASK_POWER_BUTTON_ENABLE}, 385 /* ACPI_EVENT_SLEEP_BUTTON */ {ACPI_BITREG_SLEEP_BUTTON_STATUS, ACPI_BITREG_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_STATUS, ACPI_BITMASK_SLEEP_BUTTON_ENABLE}, 386 /* ACPI_EVENT_RTC */ {ACPI_BITREG_RT_CLOCK_STATUS, ACPI_BITREG_RT_CLOCK_ENABLE, ACPI_BITMASK_RT_CLOCK_STATUS, ACPI_BITMASK_RT_CLOCK_ENABLE}, 387}; 388 389/******************************************************************************* 390 * 391 * FUNCTION: AcpiUtGetRegionName 392 * 393 * PARAMETERS: None. 394 * 395 * RETURN: Status 396 * 397 * DESCRIPTION: Translate a Space ID into a name string (Debug only) 398 * 399 ******************************************************************************/ 400 401/* Region type decoding */ 402 403const char *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] = 404{ 405 "SystemMemory", 406 "SystemIO", 407 "PCI_Config", 408 "EmbeddedControl", 409 "SMBus", 410 "SystemCMOS", 411 "PCIBARTarget", 412 "IPMI", 413 "DataTable" 414}; 415 416 417char * 418AcpiUtGetRegionName ( 419 UINT8 SpaceId) 420{ 421 422 if (SpaceId >= ACPI_USER_REGION_BEGIN) 423 { 424 return ("UserDefinedRegion"); 425 } 426 else if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS) 427 { 428 return ("InvalidSpaceId"); 429 } 430 431 return (ACPI_CAST_PTR (char, AcpiGbl_RegionTypes[SpaceId])); 432} 433 434 435/******************************************************************************* 436 * 437 * FUNCTION: AcpiUtGetEventName 438 * 439 * PARAMETERS: None. 440 * 441 * RETURN: Status 442 * 443 * DESCRIPTION: Translate a Event ID into a name string (Debug only) 444 * 445 ******************************************************************************/ 446 447/* Event type decoding */ 448 449static const char *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] = 450{ 451 "PM_Timer", 452 "GlobalLock", 453 "PowerButton", 454 "SleepButton", 455 "RealTimeClock", 456}; 457 458 459char * 460AcpiUtGetEventName ( 461 UINT32 EventId) 462{ 463 464 if (EventId > ACPI_EVENT_MAX) 465 { 466 return ("InvalidEventID"); 467 } 468 469 return (ACPI_CAST_PTR (char, AcpiGbl_EventTypes[EventId])); 470} 471 472 473/******************************************************************************* 474 * 475 * FUNCTION: AcpiUtGetTypeName 476 * 477 * PARAMETERS: None. 478 * 479 * RETURN: Status 480 * 481 * DESCRIPTION: Translate a Type ID into a name string (Debug only) 482 * 483 ******************************************************************************/ 484 485/* 486 * Elements of AcpiGbl_NsTypeNames below must match 487 * one-to-one with values of ACPI_OBJECT_TYPE 488 * 489 * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching; 490 * when stored in a table it really means that we have thus far seen no 491 * evidence to indicate what type is actually going to be stored for this entry. 492 */ 493static const char AcpiGbl_BadType[] = "UNDEFINED"; 494 495/* Printable names of the ACPI object types */ 496 497static const char *AcpiGbl_NsTypeNames[] = 498{ 499 /* 00 */ "Untyped", 500 /* 01 */ "Integer", 501 /* 02 */ "String", 502 /* 03 */ "Buffer", 503 /* 04 */ "Package", 504 /* 05 */ "FieldUnit", 505 /* 06 */ "Device", 506 /* 07 */ "Event", 507 /* 08 */ "Method", 508 /* 09 */ "Mutex", 509 /* 10 */ "Region", 510 /* 11 */ "Power", 511 /* 12 */ "Processor", 512 /* 13 */ "Thermal", 513 /* 14 */ "BufferField", 514 /* 15 */ "DdbHandle", 515 /* 16 */ "DebugObject", 516 /* 17 */ "RegionField", 517 /* 18 */ "BankField", 518 /* 19 */ "IndexField", 519 /* 20 */ "Reference", 520 /* 21 */ "Alias", 521 /* 22 */ "MethodAlias", 522 /* 23 */ "Notify", 523 /* 24 */ "AddrHandler", 524 /* 25 */ "ResourceDesc", 525 /* 26 */ "ResourceFld", 526 /* 27 */ "Scope", 527 /* 28 */ "Extra", 528 /* 29 */ "Data", 529 /* 30 */ "Invalid" 530}; 531 532 533char * 534AcpiUtGetTypeName ( 535 ACPI_OBJECT_TYPE Type) 536{ 537 538 if (Type > ACPI_TYPE_INVALID) 539 { 540 return (ACPI_CAST_PTR (char, AcpiGbl_BadType)); 541 } 542 543 return (ACPI_CAST_PTR (char, AcpiGbl_NsTypeNames[Type])); 544} 545 546 547char * 548AcpiUtGetObjectTypeName ( 549 ACPI_OPERAND_OBJECT *ObjDesc) 550{ 551 552 if (!ObjDesc) 553 { 554 return ("[NULL Object Descriptor]"); 555 } 556 557 return (AcpiUtGetTypeName (ObjDesc->Common.Type)); 558} 559 560 561/******************************************************************************* 562 * 563 * FUNCTION: AcpiUtGetNodeName 564 * 565 * PARAMETERS: Object - A namespace node 566 * 567 * RETURN: Pointer to a string 568 * 569 * DESCRIPTION: Validate the node and return the node's ACPI name. 570 * 571 ******************************************************************************/ 572 573char * 574AcpiUtGetNodeName ( 575 void *Object) 576{ 577 ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) Object; 578 579 580 /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */ 581 582 if (!Object) 583 { 584 return ("NULL"); 585 } 586 587 /* Check for Root node */ 588 589 if ((Object == ACPI_ROOT_OBJECT) || 590 (Object == AcpiGbl_RootNode)) 591 { 592 return ("\"\\\" "); 593 } 594 595 /* Descriptor must be a namespace node */ 596 597 if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) 598 { 599 return ("####"); 600 } 601 602 /* 603 * Ensure name is valid. The name was validated/repaired when the node 604 * was created, but make sure it has not been corrupted. 605 */ 606 AcpiUtRepairName (Node->Name.Ascii); 607 608 /* Return the name */ 609 610 return (Node->Name.Ascii); 611} 612 613 614/******************************************************************************* 615 * 616 * FUNCTION: AcpiUtGetDescriptorName 617 * 618 * PARAMETERS: Object - An ACPI object 619 * 620 * RETURN: Pointer to a string 621 * 622 * DESCRIPTION: Validate object and return the descriptor type 623 * 624 ******************************************************************************/ 625 626/* Printable names of object descriptor types */ 627 628static const char *AcpiGbl_DescTypeNames[] = 629{ 630 /* 00 */ "Not a Descriptor", 631 /* 01 */ "Cached", 632 /* 02 */ "State-Generic", 633 /* 03 */ "State-Update", 634 /* 04 */ "State-Package", 635 /* 05 */ "State-Control", 636 /* 06 */ "State-RootParseScope", 637 /* 07 */ "State-ParseScope", 638 /* 08 */ "State-WalkScope", 639 /* 09 */ "State-Result", 640 /* 10 */ "State-Notify", 641 /* 11 */ "State-Thread", 642 /* 12 */ "Walk", 643 /* 13 */ "Parser", 644 /* 14 */ "Operand", 645 /* 15 */ "Node" 646}; 647 648 649char * 650AcpiUtGetDescriptorName ( 651 void *Object) 652{ 653 654 if (!Object) 655 { 656 return ("NULL OBJECT"); 657 } 658 659 if (ACPI_GET_DESCRIPTOR_TYPE (Object) > ACPI_DESC_TYPE_MAX) 660 { 661 return ("Not a Descriptor"); 662 } 663 664 return (ACPI_CAST_PTR (char, 665 AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)])); 666 667} 668 669 670/******************************************************************************* 671 * 672 * FUNCTION: AcpiUtGetReferenceName 673 * 674 * PARAMETERS: Object - An ACPI reference object 675 * 676 * RETURN: Pointer to a string 677 * 678 * DESCRIPTION: Decode a reference object sub-type to a string. 679 * 680 ******************************************************************************/ 681 682/* Printable names of reference object sub-types */ 683 684static const char *AcpiGbl_RefClassNames[] = 685{ 686 /* 00 */ "Local", 687 /* 01 */ "Argument", 688 /* 02 */ "RefOf", 689 /* 03 */ "Index", 690 /* 04 */ "DdbHandle", 691 /* 05 */ "Named Object", 692 /* 06 */ "Debug" 693}; 694 695const char * 696AcpiUtGetReferenceName ( 697 ACPI_OPERAND_OBJECT *Object) 698{ 699 700 if (!Object) 701 { 702 return ("NULL Object"); 703 } 704 705 if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND) 706 { 707 return ("Not an Operand object"); 708 } 709 710 if (Object->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) 711 { 712 return ("Not a Reference object"); 713 } 714 715 if (Object->Reference.Class > ACPI_REFCLASS_MAX) 716 { 717 return ("Unknown Reference class"); 718 } 719 720 return (AcpiGbl_RefClassNames[Object->Reference.Class]); 721} 722 723 724#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 725/* 726 * Strings and procedures used for debug only 727 */ 728 729/******************************************************************************* 730 * 731 * FUNCTION: AcpiUtGetMutexName 732 * 733 * PARAMETERS: MutexId - The predefined ID for this mutex. 734 * 735 * RETURN: String containing the name of the mutex. Always returns a valid 736 * pointer. 737 * 738 * DESCRIPTION: Translate a mutex ID into a name string (Debug only) 739 * 740 ******************************************************************************/ 741 742char * 743AcpiUtGetMutexName ( 744 UINT32 MutexId) 745{ 746 747 if (MutexId > ACPI_MAX_MUTEX) 748 { 749 return ("Invalid Mutex ID"); 750 } 751 752 return (AcpiGbl_MutexNames[MutexId]); 753} 754 755 756/******************************************************************************* 757 * 758 * FUNCTION: AcpiUtGetNotifyName 759 * 760 * PARAMETERS: NotifyValue - Value from the Notify() request 761 * 762 * RETURN: String corresponding to the Notify Value. 763 * 764 * DESCRIPTION: Translate a Notify Value to a notify namestring. 765 * 766 ******************************************************************************/ 767 768/* Names for Notify() values, used for debug output */ 769 770static const char *AcpiGbl_NotifyValueNames[] = 771{ 772 "Bus Check", 773 "Device Check", 774 "Device Wake", 775 "Eject Request", 776 "Device Check Light", 777 "Frequency Mismatch", 778 "Bus Mode Mismatch", 779 "Power Fault", 780 "Capabilities Check", 781 "Device PLD Check", 782 "Reserved", 783 "System Locality Update" 784}; 785 786const char * 787AcpiUtGetNotifyName ( 788 UINT32 NotifyValue) 789{ 790 791 if (NotifyValue <= ACPI_NOTIFY_MAX) 792 { 793 return (AcpiGbl_NotifyValueNames[NotifyValue]); 794 } 795 else if (NotifyValue <= ACPI_MAX_SYS_NOTIFY) 796 { 797 return ("Reserved"); 798 } 799 else /* Greater or equal to 0x80 */ 800 { 801 return ("**Device Specific**"); 802 } 803} 804#endif 805 806 807/******************************************************************************* 808 * 809 * FUNCTION: AcpiUtValidObjectType 810 * 811 * PARAMETERS: Type - Object type to be validated 812 * 813 * RETURN: TRUE if valid object type, FALSE otherwise 814 * 815 * DESCRIPTION: Validate an object type 816 * 817 ******************************************************************************/ 818 819BOOLEAN 820AcpiUtValidObjectType ( 821 ACPI_OBJECT_TYPE Type) 822{ 823 824 if (Type > ACPI_TYPE_LOCAL_MAX) 825 { 826 /* Note: Assumes all TYPEs are contiguous (external/local) */ 827 828 return (FALSE); 829 } 830 831 return (TRUE); 832} 833 834 835/******************************************************************************* 836 * 837 * FUNCTION: AcpiUtInitGlobals 838 * 839 * PARAMETERS: None 840 * 841 * RETURN: Status 842 * 843 * DESCRIPTION: Init library globals. All globals that require specific 844 * initialization should be initialized here! 845 * 846 ******************************************************************************/ 847 848ACPI_STATUS 849AcpiUtInitGlobals ( 850 void) 851{ 852 ACPI_STATUS Status; 853 UINT32 i; 854 855 856 ACPI_FUNCTION_TRACE (UtInitGlobals); 857 858 859 /* Create all memory caches */ 860 861 Status = AcpiUtCreateCaches (); 862 if (ACPI_FAILURE (Status)) 863 { 864 return_ACPI_STATUS (Status); 865 } 866 867 /* Mutex locked flags */ 868 869 for (i = 0; i < ACPI_NUM_MUTEX; i++) 870 { 871 AcpiGbl_MutexInfo[i].Mutex = NULL; 872 AcpiGbl_MutexInfo[i].ThreadId = ACPI_MUTEX_NOT_ACQUIRED; 873 AcpiGbl_MutexInfo[i].UseCount = 0; 874 } 875 876 for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++) 877 { 878 AcpiGbl_OwnerIdMask[i] = 0; 879 } 880 881 /* Last OwnerID is never valid */ 882 883 AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000; 884 885 /* Event counters */ 886 887 AcpiMethodCount = 0; 888 AcpiSciCount = 0; 889 AcpiGpeCount = 0; 890 891 for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) 892 { 893 AcpiFixedEventCount[i] = 0; 894 } 895 896 /* GPE support */ 897 898 AcpiGbl_GpeXruptListHead = NULL; 899 AcpiGbl_GpeFadtBlocks[0] = NULL; 900 AcpiGbl_GpeFadtBlocks[1] = NULL; 901 AcpiCurrentGpeCount = 0; 902 903 /* Global handlers */ 904 905 AcpiGbl_SystemNotify.Handler = NULL; 906 AcpiGbl_DeviceNotify.Handler = NULL; 907 AcpiGbl_ExceptionHandler = NULL; 908 AcpiGbl_InitHandler = NULL; 909 AcpiGbl_TableHandler = NULL; 910 AcpiGbl_InterfaceHandler = NULL; 911 912 /* Global Lock support */ 913 914 AcpiGbl_GlobalLockSemaphore = NULL; 915 AcpiGbl_GlobalLockMutex = NULL; 916 AcpiGbl_GlobalLockAcquired = FALSE; 917 AcpiGbl_GlobalLockHandle = 0; 918 AcpiGbl_GlobalLockPresent = FALSE; 919 920 /* Miscellaneous variables */ 921 922 AcpiGbl_DSDT = NULL; 923 AcpiGbl_CmSingleStep = FALSE; 924 AcpiGbl_DbTerminateThreads = FALSE; 925 AcpiGbl_Shutdown = FALSE; 926 AcpiGbl_NsLookupCount = 0; 927 AcpiGbl_PsFindCount = 0; 928 AcpiGbl_AcpiHardwarePresent = TRUE; 929 AcpiGbl_LastOwnerIdIndex = 0; 930 AcpiGbl_NextOwnerIdOffset = 0; 931 AcpiGbl_TraceMethodName = 0; 932 AcpiGbl_TraceDbgLevel = 0; 933 AcpiGbl_TraceDbgLayer = 0; 934 AcpiGbl_DebuggerConfiguration = DEBUGGER_THREADING; 935 AcpiGbl_DbOutputFlags = ACPI_DB_CONSOLE_OUTPUT; 936 AcpiGbl_OsiData = 0; 937 AcpiGbl_OsiMutex = NULL; 938 939 /* Hardware oriented */ 940 941 AcpiGbl_EventsInitialized = FALSE; 942 AcpiGbl_SystemAwakeAndRunning = TRUE; 943 944 /* Namespace */ 945 946 AcpiGbl_ModuleCodeList = NULL; 947 AcpiGbl_RootNode = NULL; 948 AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME; 949 AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED; 950 AcpiGbl_RootNodeStruct.Type = ACPI_TYPE_DEVICE; 951 AcpiGbl_RootNodeStruct.Parent = NULL; 952 AcpiGbl_RootNodeStruct.Child = NULL; 953 AcpiGbl_RootNodeStruct.Peer = NULL; 954 AcpiGbl_RootNodeStruct.Object = NULL; 955 956 957#ifdef ACPI_DISASSEMBLER 958 AcpiGbl_ExternalList = NULL; 959#endif 960 961#ifdef ACPI_DEBUG_OUTPUT 962 AcpiGbl_LowestStackPointer = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX); 963#endif 964 965#ifdef ACPI_DBG_TRACK_ALLOCATIONS 966 AcpiGbl_DisplayFinalMemStats = FALSE; 967 AcpiGbl_DisableMemTracking = FALSE; 968#endif 969 970 return_ACPI_STATUS (AE_OK); 971} 972 973/* Public globals */ 974 975ACPI_EXPORT_SYMBOL (AcpiGbl_FADT) 976ACPI_EXPORT_SYMBOL (AcpiDbgLevel) 977ACPI_EXPORT_SYMBOL (AcpiDbgLayer) 978ACPI_EXPORT_SYMBOL (AcpiGpeCount) 979ACPI_EXPORT_SYMBOL (AcpiCurrentGpeCount) 980 981 982