utglobal.c revision 206117
185892Smike/****************************************************************************** 285892Smike * 385892Smike * Module Name: utglobal - Global variables for the ACPI subsystem 485892Smike * 585892Smike *****************************************************************************/ 685892Smike 785892Smike/****************************************************************************** 885892Smike * 985892Smike * 1. Copyright Notice 1085892Smike * 1185892Smike * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp. 1285892Smike * All rights reserved. 1385892Smike * 1485892Smike * 2. License 1585892Smike * 1685892Smike * 2.1. This is your license from Intel Corp. under its intellectual property 1785892Smike * rights. You may have additional license terms from the party that provided 1885892Smike * you this software, covering your right to use that party's intellectual 1985892Smike * property rights. 2085892Smike * 2185892Smike * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 2285892Smike * copy of the source code appearing in this file ("Covered Code") an 2385892Smike * irrevocable, perpetual, worldwide license under Intel's copyrights in the 2485892Smike * base code distributed originally by Intel ("Original Intel Code") to copy, 2585892Smike * make derivatives, distribute, use and display any portion of the Covered 2685892Smike * Code in any form, with the right to sublicense such rights; and 2785892Smike * 2885892Smike * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 2985892Smike * license (with the right to sublicense), under only those claims of Intel 3085892Smike * patents that are infringed by the Original Intel Code, to make, use, sell, 3185892Smike * offer to sell, and import the Covered Code and derivative works thereof 3285892Smike * solely to the minimum extent necessary to exercise the above copyright 3385892Smike * license, and in no event shall the patent license extend to any additions 3485892Smike * to or modifications of the Original Intel Code. No other license or right 3585892Smike * is granted directly or by implication, estoppel or otherwise; 3685892Smike * 3785892Smike * The above copyright and patent license is granted only if the following 3885892Smike * conditions are met: 3985892Smike * 40217147Stijl * 3. Conditions 41217155Stijl * 42217155Stijl * 3.1. Redistribution of Source with Rights to Further Distribute Source. 43209975Snwhitehorn * Redistribution of source code of any substantial portion of the Covered 44217155Stijl * Code or modification with rights to further distribute source must include 45217155Stijl * the above Copyright Notice, the above License, this list of Conditions, 46209975Snwhitehorn * and the following Disclaimer and Export Compliance provision. In addition, 47209975Snwhitehorn * Licensee must cause all Covered Code to which Licensee contributes to 4885892Smike * contain a file documenting the changes Licensee made to create that Covered 4985892Smike * Code and the date of any change. Licensee must include in that file the 5085892Smike * documentation of any changes made by any predecessor Licensee. Licensee 5185892Smike * must include a prominent statement that the modification is derived, 5285892Smike * directly or indirectly, from Original Intel Code. 53217155Stijl * 5485892Smike * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 5585892Smike * Redistribution of source code of any substantial portion of the Covered 5685892Smike * Code or modification without rights to further distribute source must 57217155Stijl * include the following Disclaimer and Export Compliance provision in the 5885892Smike * documentation and/or other materials provided with distribution. In 5985892Smike * addition, Licensee may not authorize further sublicense of source of any 6085892Smike * portion of the Covered Code, and must include terms to the effect that the 61217155Stijl * license from Licensee to its licensee is limited to the intellectual 6299117Smike * property embodied in the software Licensee provides to its licensee, and 63217155Stijl * not to intellectual property embodied in modifications its licensee may 6485892Smike * make. 6585892Smike * 6685892Smike * 3.3. Redistribution of Executable. Redistribution in executable form of any 6785892Smike * substantial portion of the Covered Code or modification must reproduce the 68217155Stijl * above Copyright Notice, and the following Disclaimer and Export Compliance 6985892Smike * provision in the documentation and/or other materials provided with the 7085892Smike * distribution. 7185892Smike * 72217155Stijl * 3.4. Intel retains all right, title, and interest in and to the Original 7385892Smike * Intel Code. 7485892Smike * 7585892Smike * 3.5. Neither the name Intel nor any other trademark owned or controlled by 76217155Stijl * Intel shall be used in advertising or otherwise to promote the sale, use or 7799117Smike * other dealings in products derived from or relating to the Covered Code 78217155Stijl * without prior written authorization from Intel. 7985892Smike * 8085892Smike * 4. Disclaimer and Export Compliance 8185892Smike * 8285892Smike * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 8385892Smike * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 8485892Smike * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 85217155Stijl * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 8685892Smike * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 8785892Smike * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 8885892Smike * PARTICULAR PURPOSE. 89217155Stijl * 9085892Smike * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 9185892Smike * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 9285892Smike * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 93217155Stijl * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 9499117Smike * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 95217155Stijl * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 9685892Smike * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 9785892Smike * LIMITED REMEDY. 9885892Smike * 9985892Smike * 4.3. Licensee shall not export, either directly or indirectly, any of this 100217155Stijl * software or system incorporating such software without first obtaining any 10185892Smike * required license or other approval from the U. S. Department of Commerce or 10285892Smike * any other agency or department of the United States Government. In the 10385892Smike * event Licensee exports any such software from the United States or 104217155Stijl * re-exports any such software from a foreign destination, Licensee shall 10585892Smike * ensure that the distribution and export/re-export of the software is in 10685892Smike * compliance with all laws, regulations, orders, or other restrictions of the 10785892Smike * U.S. Export Administration Regulations. Licensee agrees that neither it nor 108217155Stijl * any of its subsidiaries will export/re-export any technical data, process, 10999117Smike * software, or service, directly or indirectly, to any country for which the 110217155Stijl * United States government or any agency thereof requires an export license, 11185892Smike * other governmental approval, or letter of assurance, without first obtaining 11285892Smike * such license, approval or letter. 11385892Smike * 11485892Smike *****************************************************************************/ 115217155Stijl 11685892Smike#define __UTGLOBAL_C__ 11785892Smike#define DEFINE_ACPI_GLOBALS 11885892Smike 119217155Stijl#include <contrib/dev/acpica/include/acpi.h> 12085892Smike#include <contrib/dev/acpica/include/accommon.h> 12185892Smike#include <contrib/dev/acpica/include/acnamesp.h> 12285892Smike 123217155Stijl#define _COMPONENT ACPI_UTILITIES 12499117Smike ACPI_MODULE_NAME ("utglobal") 125217155Stijl 12685892Smike 12785892Smike/******************************************************************************* 12885892Smike * 12985892Smike * Static global variable initialization. 130217155Stijl * 13185892Smike ******************************************************************************/ 13285892Smike 13385892Smike/* 134217155Stijl * We want the debug switches statically initialized so they 13585892Smike * are already set when the debugger is entered. 13685892Smike */ 13785892Smike 138217155Stijl/* Debug switch - level and trace mask */ 13999117Smike 140217155Stijl#ifdef ACPI_DEBUG_OUTPUT 14185892SmikeUINT32 AcpiDbgLevel = ACPI_DEBUG_DEFAULT; 14285892Smike#else 14385892SmikeUINT32 AcpiDbgLevel = ACPI_NORMAL_DEFAULT; 14485892Smike#endif 14585892Smike 14685892Smike/* Debug switch - layer (component) mask */ 147217155Stijl 14885892SmikeUINT32 AcpiDbgLayer = ACPI_COMPONENT_DEFAULT; 14985892SmikeUINT32 AcpiGbl_NestingLevel = 0; 15085892Smike 151217155Stijl/* Debugger globals */ 15285892Smike 15385892SmikeBOOLEAN AcpiGbl_DbTerminateThreads = FALSE; 15485892SmikeBOOLEAN AcpiGbl_AbortMethod = FALSE; 155217155StijlBOOLEAN AcpiGbl_MethodExecuting = FALSE; 15699117Smike 157217155Stijl/* System flags */ 15885892Smike 15985892SmikeUINT32 AcpiGbl_StartupFlags = 0; 16085892Smike 16185892Smike/* System starts uninitialized */ 162217155Stijl 16385892SmikeBOOLEAN AcpiGbl_Shutdown = TRUE; 16485892Smike 16585892Smikeconst char *AcpiGbl_SleepStateNames[ACPI_S_STATE_COUNT] = 166217155Stijl{ 16785892Smike "\\_S0_", 16885892Smike "\\_S1_", 16985892Smike "\\_S2_", 170217155Stijl "\\_S3_", 17199117Smike "\\_S4_", 172217155Stijl "\\_S5_" 17385892Smike}; 17485892Smike 17585892Smikeconst char *AcpiGbl_LowestDstateNames[ACPI_NUM_SxW_METHODS] = 17685892Smike{ 17785892Smike "_S0W", 17885892Smike "_S1W", 179217155Stijl "_S2W", 18085892Smike "_S3W", 18185892Smike "_S4W" 18285892Smike}; 183217155Stijl 18485892Smikeconst char *AcpiGbl_HighestDstateNames[ACPI_NUM_SxD_METHODS] = 18585892Smike{ 18685892Smike "_S1D", 187217155Stijl "_S2D", 18899117Smike "_S3D", 189217155Stijl "_S4D" 19085892Smike}; 19185892Smike 19285892Smike 19385892Smike/******************************************************************************* 194217155Stijl * 19585892Smike * FUNCTION: AcpiFormatException 19685892Smike * 19785892Smike * PARAMETERS: Status - The ACPI_STATUS code to be formatted 198217155Stijl * 19985892Smike * RETURN: A string containing the exception text. A valid pointer is 20085892Smike * always returned. 20185892Smike * 202217155Stijl * DESCRIPTION: This function translates an ACPI exception into an ASCII string 20399117Smike * It is here instead of utxface.c so it is always present. 204217155Stijl * 20585892Smike ******************************************************************************/ 20685892Smike 20785892Smikeconst char * 20885892SmikeAcpiFormatException ( 209217155Stijl ACPI_STATUS Status) 21085892Smike{ 21185892Smike const char *Exception = NULL; 21285892Smike 213217155Stijl 21485892Smike ACPI_FUNCTION_ENTRY (); 21585892Smike 21685892Smike 217217155Stijl Exception = AcpiUtValidateException (Status); 21899117Smike if (!Exception) 219217155Stijl { 22085892Smike /* Exception code was not recognized */ 22185892Smike 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. 248 */ 249const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames[] = 250{ 251 {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL}, 252 {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL}, 253 {"_SB_", ACPI_TYPE_DEVICE, NULL}, 254 {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL}, 255 {"_TZ_", ACPI_TYPE_THERMAL, NULL}, 256 {"_REV", ACPI_TYPE_INTEGER, (char *) ACPI_CA_SUPPORT_LEVEL}, 257 {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME}, 258 {"_GL_", ACPI_TYPE_MUTEX, (char *) 1}, 259 260#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY) 261 {"_OSI", ACPI_TYPE_METHOD, (char *) 1}, 262#endif 263 264 /* Table terminator */ 265 266 {NULL, ACPI_TYPE_ANY, NULL} 267}; 268 269/* 270 * Properties of the ACPI Object Types, both internal and external. 271 * The table is indexed by values of ACPI_OBJECT_TYPE 272 */ 273const UINT8 AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] = 274{ 275 ACPI_NS_NORMAL, /* 00 Any */ 276 ACPI_NS_NORMAL, /* 01 Number */ 277 ACPI_NS_NORMAL, /* 02 String */ 278 ACPI_NS_NORMAL, /* 03 Buffer */ 279 ACPI_NS_NORMAL, /* 04 Package */ 280 ACPI_NS_NORMAL, /* 05 FieldUnit */ 281 ACPI_NS_NEWSCOPE, /* 06 Device */ 282 ACPI_NS_NORMAL, /* 07 Event */ 283 ACPI_NS_NEWSCOPE, /* 08 Method */ 284 ACPI_NS_NORMAL, /* 09 Mutex */ 285 ACPI_NS_NORMAL, /* 10 Region */ 286 ACPI_NS_NEWSCOPE, /* 11 Power */ 287 ACPI_NS_NEWSCOPE, /* 12 Processor */ 288 ACPI_NS_NEWSCOPE, /* 13 Thermal */ 289 ACPI_NS_NORMAL, /* 14 BufferField */ 290 ACPI_NS_NORMAL, /* 15 DdbHandle */ 291 ACPI_NS_NORMAL, /* 16 Debug Object */ 292 ACPI_NS_NORMAL, /* 17 DefField */ 293 ACPI_NS_NORMAL, /* 18 BankField */ 294 ACPI_NS_NORMAL, /* 19 IndexField */ 295 ACPI_NS_NORMAL, /* 20 Reference */ 296 ACPI_NS_NORMAL, /* 21 Alias */ 297 ACPI_NS_NORMAL, /* 22 MethodAlias */ 298 ACPI_NS_NORMAL, /* 23 Notify */ 299 ACPI_NS_NORMAL, /* 24 Address Handler */ 300 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 25 Resource Desc */ 301 ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 26 Resource Field */ 302 ACPI_NS_NEWSCOPE, /* 27 Scope */ 303 ACPI_NS_NORMAL, /* 28 Extra */ 304 ACPI_NS_NORMAL, /* 29 Data */ 305 ACPI_NS_NORMAL /* 30 Invalid */ 306}; 307 308 309/* Hex to ASCII conversion table */ 310 311static const char AcpiGbl_HexToAscii[] = 312{ 313 '0','1','2','3','4','5','6','7', 314 '8','9','A','B','C','D','E','F' 315}; 316 317 318/******************************************************************************* 319 * 320 * FUNCTION: AcpiUtHexToAsciiChar 321 * 322 * PARAMETERS: Integer - Contains the hex digit 323 * Position - bit position of the digit within the 324 * integer (multiple of 4) 325 * 326 * RETURN: The converted Ascii character 327 * 328 * DESCRIPTION: Convert a hex digit to an Ascii character 329 * 330 ******************************************************************************/ 331 332char 333AcpiUtHexToAsciiChar ( 334 UINT64 Integer, 335 UINT32 Position) 336{ 337 338 return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]); 339} 340 341 342/****************************************************************************** 343 * 344 * Event and Hardware globals 345 * 346 ******************************************************************************/ 347 348ACPI_BIT_REGISTER_INFO AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG] = 349{ 350 /* Name Parent Register Register Bit Position Register Bit Mask */ 351 352 /* ACPI_BITREG_TIMER_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_TIMER_STATUS, ACPI_BITMASK_TIMER_STATUS}, 353 /* ACPI_BITREG_BUS_MASTER_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_BUS_MASTER_STATUS, ACPI_BITMASK_BUS_MASTER_STATUS}, 354 /* ACPI_BITREG_GLOBAL_LOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_GLOBAL_LOCK_STATUS, ACPI_BITMASK_GLOBAL_LOCK_STATUS}, 355 /* ACPI_BITREG_POWER_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_POWER_BUTTON_STATUS, ACPI_BITMASK_POWER_BUTTON_STATUS}, 356 /* ACPI_BITREG_SLEEP_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_SLEEP_BUTTON_STATUS, ACPI_BITMASK_SLEEP_BUTTON_STATUS}, 357 /* ACPI_BITREG_RT_CLOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_RT_CLOCK_STATUS, ACPI_BITMASK_RT_CLOCK_STATUS}, 358 /* ACPI_BITREG_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_WAKE_STATUS, ACPI_BITMASK_WAKE_STATUS}, 359 /* ACPI_BITREG_PCIEXP_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_PCIEXP_WAKE_STATUS, ACPI_BITMASK_PCIEXP_WAKE_STATUS}, 360 361 /* ACPI_BITREG_TIMER_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_TIMER_ENABLE, ACPI_BITMASK_TIMER_ENABLE}, 362 /* ACPI_BITREG_GLOBAL_LOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE, ACPI_BITMASK_GLOBAL_LOCK_ENABLE}, 363 /* ACPI_BITREG_POWER_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_ENABLE}, 364 /* ACPI_BITREG_SLEEP_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_ENABLE}, 365 /* ACPI_BITREG_RT_CLOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_RT_CLOCK_ENABLE, ACPI_BITMASK_RT_CLOCK_ENABLE}, 366 /* ACPI_BITREG_PCIEXP_WAKE_DISABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE, ACPI_BITMASK_PCIEXP_WAKE_DISABLE}, 367 368 /* ACPI_BITREG_SCI_ENABLE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SCI_ENABLE, ACPI_BITMASK_SCI_ENABLE}, 369 /* ACPI_BITREG_BUS_MASTER_RLD */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_BUS_MASTER_RLD, ACPI_BITMASK_BUS_MASTER_RLD}, 370 /* ACPI_BITREG_GLOBAL_LOCK_RELEASE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE, ACPI_BITMASK_GLOBAL_LOCK_RELEASE}, 371 /* ACPI_BITREG_SLEEP_TYPE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SLEEP_TYPE, ACPI_BITMASK_SLEEP_TYPE}, 372 /* ACPI_BITREG_SLEEP_ENABLE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SLEEP_ENABLE, ACPI_BITMASK_SLEEP_ENABLE}, 373 374 /* ACPI_BITREG_ARB_DIS */ {ACPI_REGISTER_PM2_CONTROL, ACPI_BITPOSITION_ARB_DISABLE, ACPI_BITMASK_ARB_DISABLE} 375}; 376 377 378ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] = 379{ 380 /* ACPI_EVENT_PMTIMER */ {ACPI_BITREG_TIMER_STATUS, ACPI_BITREG_TIMER_ENABLE, ACPI_BITMASK_TIMER_STATUS, ACPI_BITMASK_TIMER_ENABLE}, 381 /* ACPI_EVENT_GLOBAL */ {ACPI_BITREG_GLOBAL_LOCK_STATUS, ACPI_BITREG_GLOBAL_LOCK_ENABLE, ACPI_BITMASK_GLOBAL_LOCK_STATUS, ACPI_BITMASK_GLOBAL_LOCK_ENABLE}, 382 /* ACPI_EVENT_POWER_BUTTON */ {ACPI_BITREG_POWER_BUTTON_STATUS, ACPI_BITREG_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_STATUS, ACPI_BITMASK_POWER_BUTTON_ENABLE}, 383 /* ACPI_EVENT_SLEEP_BUTTON */ {ACPI_BITREG_SLEEP_BUTTON_STATUS, ACPI_BITREG_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_STATUS, ACPI_BITMASK_SLEEP_BUTTON_ENABLE}, 384 /* ACPI_EVENT_RTC */ {ACPI_BITREG_RT_CLOCK_STATUS, ACPI_BITREG_RT_CLOCK_ENABLE, ACPI_BITMASK_RT_CLOCK_STATUS, ACPI_BITMASK_RT_CLOCK_ENABLE}, 385}; 386 387/******************************************************************************* 388 * 389 * FUNCTION: AcpiUtGetRegionName 390 * 391 * PARAMETERS: None. 392 * 393 * RETURN: Status 394 * 395 * DESCRIPTION: Translate a Space ID into a name string (Debug only) 396 * 397 ******************************************************************************/ 398 399/* Region type decoding */ 400 401const char *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] = 402{ 403 "SystemMemory", 404 "SystemIO", 405 "PCI_Config", 406 "EmbeddedControl", 407 "SMBus", 408 "SystemCMOS", 409 "PCIBARTarget", 410 "IPMI", 411 "DataTable" 412}; 413 414 415char * 416AcpiUtGetRegionName ( 417 UINT8 SpaceId) 418{ 419 420 if (SpaceId >= ACPI_USER_REGION_BEGIN) 421 { 422 return ("UserDefinedRegion"); 423 } 424 else if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS) 425 { 426 return ("InvalidSpaceId"); 427 } 428 429 return (ACPI_CAST_PTR (char, AcpiGbl_RegionTypes[SpaceId])); 430} 431 432 433/******************************************************************************* 434 * 435 * FUNCTION: AcpiUtGetEventName 436 * 437 * PARAMETERS: None. 438 * 439 * RETURN: Status 440 * 441 * DESCRIPTION: Translate a Event ID into a name string (Debug only) 442 * 443 ******************************************************************************/ 444 445/* Event type decoding */ 446 447static const char *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] = 448{ 449 "PM_Timer", 450 "GlobalLock", 451 "PowerButton", 452 "SleepButton", 453 "RealTimeClock", 454}; 455 456 457char * 458AcpiUtGetEventName ( 459 UINT32 EventId) 460{ 461 462 if (EventId > ACPI_EVENT_MAX) 463 { 464 return ("InvalidEventID"); 465 } 466 467 return (ACPI_CAST_PTR (char, AcpiGbl_EventTypes[EventId])); 468} 469 470 471/******************************************************************************* 472 * 473 * FUNCTION: AcpiUtGetTypeName 474 * 475 * PARAMETERS: None. 476 * 477 * RETURN: Status 478 * 479 * DESCRIPTION: Translate a Type ID into a name string (Debug only) 480 * 481 ******************************************************************************/ 482 483/* 484 * Elements of AcpiGbl_NsTypeNames below must match 485 * one-to-one with values of ACPI_OBJECT_TYPE 486 * 487 * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching; 488 * when stored in a table it really means that we have thus far seen no 489 * evidence to indicate what type is actually going to be stored for this entry. 490 */ 491static const char AcpiGbl_BadType[] = "UNDEFINED"; 492 493/* Printable names of the ACPI object types */ 494 495static const char *AcpiGbl_NsTypeNames[] = 496{ 497 /* 00 */ "Untyped", 498 /* 01 */ "Integer", 499 /* 02 */ "String", 500 /* 03 */ "Buffer", 501 /* 04 */ "Package", 502 /* 05 */ "FieldUnit", 503 /* 06 */ "Device", 504 /* 07 */ "Event", 505 /* 08 */ "Method", 506 /* 09 */ "Mutex", 507 /* 10 */ "Region", 508 /* 11 */ "Power", 509 /* 12 */ "Processor", 510 /* 13 */ "Thermal", 511 /* 14 */ "BufferField", 512 /* 15 */ "DdbHandle", 513 /* 16 */ "DebugObject", 514 /* 17 */ "RegionField", 515 /* 18 */ "BankField", 516 /* 19 */ "IndexField", 517 /* 20 */ "Reference", 518 /* 21 */ "Alias", 519 /* 22 */ "MethodAlias", 520 /* 23 */ "Notify", 521 /* 24 */ "AddrHandler", 522 /* 25 */ "ResourceDesc", 523 /* 26 */ "ResourceFld", 524 /* 27 */ "Scope", 525 /* 28 */ "Extra", 526 /* 29 */ "Data", 527 /* 30 */ "Invalid" 528}; 529 530 531char * 532AcpiUtGetTypeName ( 533 ACPI_OBJECT_TYPE Type) 534{ 535 536 if (Type > ACPI_TYPE_INVALID) 537 { 538 return (ACPI_CAST_PTR (char, AcpiGbl_BadType)); 539 } 540 541 return (ACPI_CAST_PTR (char, AcpiGbl_NsTypeNames[Type])); 542} 543 544 545char * 546AcpiUtGetObjectTypeName ( 547 ACPI_OPERAND_OBJECT *ObjDesc) 548{ 549 550 if (!ObjDesc) 551 { 552 return ("[NULL Object Descriptor]"); 553 } 554 555 return (AcpiUtGetTypeName (ObjDesc->Common.Type)); 556} 557 558 559/******************************************************************************* 560 * 561 * FUNCTION: AcpiUtGetNodeName 562 * 563 * PARAMETERS: Object - A namespace node 564 * 565 * RETURN: Pointer to a string 566 * 567 * DESCRIPTION: Validate the node and return the node's ACPI name. 568 * 569 ******************************************************************************/ 570 571char * 572AcpiUtGetNodeName ( 573 void *Object) 574{ 575 ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) Object; 576 577 578 /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */ 579 580 if (!Object) 581 { 582 return ("NULL"); 583 } 584 585 /* Check for Root node */ 586 587 if ((Object == ACPI_ROOT_OBJECT) || 588 (Object == AcpiGbl_RootNode)) 589 { 590 return ("\"\\\" "); 591 } 592 593 /* Descriptor must be a namespace node */ 594 595 if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) 596 { 597 return ("####"); 598 } 599 600 /* 601 * Ensure name is valid. The name was validated/repaired when the node 602 * was created, but make sure it has not been corrupted. 603 */ 604 AcpiUtRepairName (Node->Name.Ascii); 605 606 /* Return the name */ 607 608 return (Node->Name.Ascii); 609} 610 611 612/******************************************************************************* 613 * 614 * FUNCTION: AcpiUtGetDescriptorName 615 * 616 * PARAMETERS: Object - An ACPI object 617 * 618 * RETURN: Pointer to a string 619 * 620 * DESCRIPTION: Validate object and return the descriptor type 621 * 622 ******************************************************************************/ 623 624/* Printable names of object descriptor types */ 625 626static const char *AcpiGbl_DescTypeNames[] = 627{ 628 /* 00 */ "Invalid", 629 /* 01 */ "Cached", 630 /* 02 */ "State-Generic", 631 /* 03 */ "State-Update", 632 /* 04 */ "State-Package", 633 /* 05 */ "State-Control", 634 /* 06 */ "State-RootParseScope", 635 /* 07 */ "State-ParseScope", 636 /* 08 */ "State-WalkScope", 637 /* 09 */ "State-Result", 638 /* 10 */ "State-Notify", 639 /* 11 */ "State-Thread", 640 /* 12 */ "Walk", 641 /* 13 */ "Parser", 642 /* 14 */ "Operand", 643 /* 15 */ "Node" 644}; 645 646 647char * 648AcpiUtGetDescriptorName ( 649 void *Object) 650{ 651 652 if (!Object) 653 { 654 return ("NULL OBJECT"); 655 } 656 657 if (ACPI_GET_DESCRIPTOR_TYPE (Object) > ACPI_DESC_TYPE_MAX) 658 { 659 return (ACPI_CAST_PTR (char, AcpiGbl_BadType)); 660 } 661 662 return (ACPI_CAST_PTR (char, 663 AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)])); 664 665} 666 667 668/******************************************************************************* 669 * 670 * FUNCTION: AcpiUtGetReferenceName 671 * 672 * PARAMETERS: Object - An ACPI reference object 673 * 674 * RETURN: Pointer to a string 675 * 676 * DESCRIPTION: Decode a reference object sub-type to a string. 677 * 678 ******************************************************************************/ 679 680/* Printable names of reference object sub-types */ 681 682static const char *AcpiGbl_RefClassNames[] = 683{ 684 /* 00 */ "Local", 685 /* 01 */ "Argument", 686 /* 02 */ "RefOf", 687 /* 03 */ "Index", 688 /* 04 */ "DdbHandle", 689 /* 05 */ "Named Object", 690 /* 06 */ "Debug" 691}; 692 693const char * 694AcpiUtGetReferenceName ( 695 ACPI_OPERAND_OBJECT *Object) 696{ 697 698 if (!Object) 699 { 700 return ("NULL Object"); 701 } 702 703 if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND) 704 { 705 return ("Not an Operand object"); 706 } 707 708 if (Object->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) 709 { 710 return ("Not a Reference object"); 711 } 712 713 if (Object->Reference.Class > ACPI_REFCLASS_MAX) 714 { 715 return ("Unknown Reference class"); 716 } 717 718 return (AcpiGbl_RefClassNames[Object->Reference.Class]); 719} 720 721 722#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 723/* 724 * Strings and procedures used for debug only 725 */ 726 727/******************************************************************************* 728 * 729 * FUNCTION: AcpiUtGetMutexName 730 * 731 * PARAMETERS: MutexId - The predefined ID for this mutex. 732 * 733 * RETURN: String containing the name of the mutex. Always returns a valid 734 * pointer. 735 * 736 * DESCRIPTION: Translate a mutex ID into a name string (Debug only) 737 * 738 ******************************************************************************/ 739 740char * 741AcpiUtGetMutexName ( 742 UINT32 MutexId) 743{ 744 745 if (MutexId > ACPI_MAX_MUTEX) 746 { 747 return ("Invalid Mutex ID"); 748 } 749 750 return (AcpiGbl_MutexNames[MutexId]); 751} 752 753 754/******************************************************************************* 755 * 756 * FUNCTION: AcpiUtGetNotifyName 757 * 758 * PARAMETERS: NotifyValue - Value from the Notify() request 759 * 760 * RETURN: String corresponding to the Notify Value. 761 * 762 * DESCRIPTION: Translate a Notify Value to a notify namestring. 763 * 764 ******************************************************************************/ 765 766/* Names for Notify() values, used for debug output */ 767 768static const char *AcpiGbl_NotifyValueNames[] = 769{ 770 "Bus Check", 771 "Device Check", 772 "Device Wake", 773 "Eject Request", 774 "Device Check Light", 775 "Frequency Mismatch", 776 "Bus Mode Mismatch", 777 "Power Fault", 778 "Capabilities Check", 779 "Device PLD Check", 780 "Reserved", 781 "System Locality Update" 782}; 783 784const char * 785AcpiUtGetNotifyName ( 786 UINT32 NotifyValue) 787{ 788 789 if (NotifyValue <= ACPI_NOTIFY_MAX) 790 { 791 return (AcpiGbl_NotifyValueNames[NotifyValue]); 792 } 793 else if (NotifyValue <= ACPI_MAX_SYS_NOTIFY) 794 { 795 return ("Reserved"); 796 } 797 else /* Greater or equal to 0x80 */ 798 { 799 return ("**Device Specific**"); 800 } 801} 802#endif 803 804 805/******************************************************************************* 806 * 807 * FUNCTION: AcpiUtValidObjectType 808 * 809 * PARAMETERS: Type - Object type to be validated 810 * 811 * RETURN: TRUE if valid object type, FALSE otherwise 812 * 813 * DESCRIPTION: Validate an object type 814 * 815 ******************************************************************************/ 816 817BOOLEAN 818AcpiUtValidObjectType ( 819 ACPI_OBJECT_TYPE Type) 820{ 821 822 if (Type > ACPI_TYPE_LOCAL_MAX) 823 { 824 /* Note: Assumes all TYPEs are contiguous (external/local) */ 825 826 return (FALSE); 827 } 828 829 return (TRUE); 830} 831 832 833/******************************************************************************* 834 * 835 * FUNCTION: AcpiUtInitGlobals 836 * 837 * PARAMETERS: None 838 * 839 * RETURN: Status 840 * 841 * DESCRIPTION: Init library globals. All globals that require specific 842 * initialization should be initialized here! 843 * 844 ******************************************************************************/ 845 846ACPI_STATUS 847AcpiUtInitGlobals ( 848 void) 849{ 850 ACPI_STATUS Status; 851 UINT32 i; 852 853 854 ACPI_FUNCTION_TRACE (UtInitGlobals); 855 856 857 /* Create all memory caches */ 858 859 Status = AcpiUtCreateCaches (); 860 if (ACPI_FAILURE (Status)) 861 { 862 return_ACPI_STATUS (Status); 863 } 864 865 /* Mutex locked flags */ 866 867 for (i = 0; i < ACPI_NUM_MUTEX; i++) 868 { 869 AcpiGbl_MutexInfo[i].Mutex = NULL; 870 AcpiGbl_MutexInfo[i].ThreadId = ACPI_MUTEX_NOT_ACQUIRED; 871 AcpiGbl_MutexInfo[i].UseCount = 0; 872 } 873 874 for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++) 875 { 876 AcpiGbl_OwnerIdMask[i] = 0; 877 } 878 879 /* Last OwnerID is never valid */ 880 881 AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000; 882 883 /* Event counters */ 884 885 AcpiMethodCount = 0; 886 AcpiSciCount = 0; 887 AcpiGpeCount = 0; 888 889 for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) 890 { 891 AcpiFixedEventCount[i] = 0; 892 } 893 894 /* GPE support */ 895 896 AcpiGbl_GpeXruptListHead = NULL; 897 AcpiGbl_GpeFadtBlocks[0] = NULL; 898 AcpiGbl_GpeFadtBlocks[1] = NULL; 899 AcpiCurrentGpeCount = 0; 900 901 /* Global handlers */ 902 903 AcpiGbl_SystemNotify.Handler = NULL; 904 AcpiGbl_DeviceNotify.Handler = NULL; 905 AcpiGbl_ExceptionHandler = NULL; 906 AcpiGbl_InitHandler = NULL; 907 AcpiGbl_TableHandler = NULL; 908 909 /* Global Lock support */ 910 911 AcpiGbl_GlobalLockSemaphore = NULL; 912 AcpiGbl_GlobalLockMutex = NULL; 913 AcpiGbl_GlobalLockAcquired = FALSE; 914 AcpiGbl_GlobalLockHandle = 0; 915 AcpiGbl_GlobalLockPresent = FALSE; 916 917 /* Miscellaneous variables */ 918 919 AcpiGbl_DSDT = NULL; 920 AcpiGbl_CmSingleStep = FALSE; 921 AcpiGbl_DbTerminateThreads = FALSE; 922 AcpiGbl_Shutdown = FALSE; 923 AcpiGbl_NsLookupCount = 0; 924 AcpiGbl_PsFindCount = 0; 925 AcpiGbl_AcpiHardwarePresent = TRUE; 926 AcpiGbl_LastOwnerIdIndex = 0; 927 AcpiGbl_NextOwnerIdOffset = 0; 928 AcpiGbl_TraceMethodName = 0; 929 AcpiGbl_TraceDbgLevel = 0; 930 AcpiGbl_TraceDbgLayer = 0; 931 AcpiGbl_DebuggerConfiguration = DEBUGGER_THREADING; 932 AcpiGbl_DbOutputFlags = ACPI_DB_CONSOLE_OUTPUT; 933 AcpiGbl_OsiData = 0; 934 935 /* Hardware oriented */ 936 937 AcpiGbl_EventsInitialized = FALSE; 938 AcpiGbl_SystemAwakeAndRunning = TRUE; 939 940 /* Namespace */ 941 942 AcpiGbl_ModuleCodeList = NULL; 943 AcpiGbl_RootNode = NULL; 944 AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME; 945 AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED; 946 AcpiGbl_RootNodeStruct.Type = ACPI_TYPE_DEVICE; 947 AcpiGbl_RootNodeStruct.Child = NULL; 948 AcpiGbl_RootNodeStruct.Peer = NULL; 949 AcpiGbl_RootNodeStruct.Object = NULL; 950 AcpiGbl_RootNodeStruct.Flags = ANOBJ_END_OF_PEER_LIST; 951 952 953#ifdef ACPI_DISASSEMBLER 954 AcpiGbl_ExternalList = NULL; 955#endif 956 957#ifdef ACPI_DEBUG_OUTPUT 958 AcpiGbl_LowestStackPointer = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX); 959#endif 960 961#ifdef ACPI_DBG_TRACK_ALLOCATIONS 962 AcpiGbl_DisplayFinalMemStats = FALSE; 963#endif 964 965 return_ACPI_STATUS (AE_OK); 966} 967 968/* Public globals */ 969 970ACPI_EXPORT_SYMBOL (AcpiGbl_FADT) 971ACPI_EXPORT_SYMBOL (AcpiDbgLevel) 972ACPI_EXPORT_SYMBOL (AcpiDbgLayer) 973ACPI_EXPORT_SYMBOL (AcpiGpeCount) 974ACPI_EXPORT_SYMBOL (AcpiCurrentGpeCount) 975 976 977