utdecode.c revision 306536
1193640Sariff/****************************************************************************** 2193640Sariff * 3193640Sariff * Module Name: utdecode - Utility decoding routines (value-to-string) 4193640Sariff * 5193640Sariff *****************************************************************************/ 6193640Sariff 7193640Sariff/* 8193640Sariff * Copyright (C) 2000 - 2016, Intel Corp. 9193640Sariff * All rights reserved. 10193640Sariff * 11193640Sariff * Redistribution and use in source and binary forms, with or without 12193640Sariff * modification, are permitted provided that the following conditions 13193640Sariff * are met: 14193640Sariff * 1. Redistributions of source code must retain the above copyright 15193640Sariff * notice, this list of conditions, and the following disclaimer, 16193640Sariff * without modification. 17193640Sariff * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18193640Sariff * substantially similar to the "NO WARRANTY" disclaimer below 19193640Sariff * ("Disclaimer") and any redistribution must be conditioned upon 20193640Sariff * including a substantially similar Disclaimer requirement for further 21193640Sariff * binary redistribution. 22193640Sariff * 3. Neither the names of the above-listed copyright holders nor the names 23193640Sariff * of any contributors may be used to endorse or promote products derived 24193640Sariff * from this software without specific prior written permission. 25193640Sariff * 26193640Sariff * Alternatively, this software may be distributed under the terms of the 27193640Sariff * GNU General Public License ("GPL") version 2 as published by the Free 28193640Sariff * Software Foundation. 29193640Sariff * 30193640Sariff * NO WARRANTY 31193640Sariff * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32193640Sariff * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33193640Sariff * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34193640Sariff * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35193640Sariff * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36193640Sariff * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37193640Sariff * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38193640Sariff * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39193640Sariff * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40193640Sariff * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41193640Sariff * POSSIBILITY OF SUCH DAMAGES. 42193640Sariff */ 43193640Sariff 44193640Sariff#include <contrib/dev/acpica/include/acpi.h> 45193640Sariff#include <contrib/dev/acpica/include/accommon.h> 46193640Sariff#include <contrib/dev/acpica/include/acnamesp.h> 47193640Sariff 48193640Sariff#define _COMPONENT ACPI_UTILITIES 49193640Sariff ACPI_MODULE_NAME ("utdecode") 50193640Sariff 51193640Sariff 52193640Sariff/* 53193640Sariff * Properties of the ACPI Object Types, both internal and external. 54193640Sariff * The table is indexed by values of ACPI_OBJECT_TYPE 55193640Sariff */ 56193640Sariffconst UINT8 AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] = 57193640Sariff{ 58193640Sariff ACPI_NS_NORMAL, /* 00 Any */ 59193640Sariff ACPI_NS_NORMAL, /* 01 Number */ 60193640Sariff ACPI_NS_NORMAL, /* 02 String */ 61193640Sariff ACPI_NS_NORMAL, /* 03 Buffer */ 62193640Sariff ACPI_NS_NORMAL, /* 04 Package */ 63193640Sariff ACPI_NS_NORMAL, /* 05 FieldUnit */ 64193640Sariff ACPI_NS_NEWSCOPE, /* 06 Device */ 65193640Sariff ACPI_NS_NORMAL, /* 07 Event */ 66193640Sariff ACPI_NS_NEWSCOPE, /* 08 Method */ 67193640Sariff ACPI_NS_NORMAL, /* 09 Mutex */ 68193640Sariff ACPI_NS_NORMAL, /* 10 Region */ 69193640Sariff ACPI_NS_NEWSCOPE, /* 11 Power */ 70193640Sariff ACPI_NS_NEWSCOPE, /* 12 Processor */ 71193640Sariff ACPI_NS_NEWSCOPE, /* 13 Thermal */ 72193640Sariff ACPI_NS_NORMAL, /* 14 BufferField */ 73193640Sariff ACPI_NS_NORMAL, /* 15 DdbHandle */ 74193640Sariff ACPI_NS_NORMAL, /* 16 Debug Object */ 75193640Sariff ACPI_NS_NORMAL, /* 17 DefField */ 76193640Sariff ACPI_NS_NORMAL, /* 18 BankField */ 77193640Sariff ACPI_NS_NORMAL, /* 19 IndexField */ 78193640Sariff ACPI_NS_NORMAL, /* 20 Reference */ 79193640Sariff ACPI_NS_NORMAL, /* 21 Alias */ 80193640Sariff ACPI_NS_NORMAL, /* 22 MethodAlias */ 81193640Sariff ACPI_NS_NORMAL, /* 23 Notify */ 82193640Sariff ACPI_NS_NORMAL, /* 24 Address Handler */ 83193640Sariff ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 25 Resource Desc */ 84193640Sariff ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 26 Resource Field */ 85193640Sariff ACPI_NS_NEWSCOPE, /* 27 Scope */ 86193640Sariff ACPI_NS_NORMAL, /* 28 Extra */ 87193640Sariff ACPI_NS_NORMAL, /* 29 Data */ 88193640Sariff ACPI_NS_NORMAL /* 30 Invalid */ 89193640Sariff}; 90193640Sariff 91193640Sariff 92193640Sariff/******************************************************************************* 93193640Sariff * 94193640Sariff * FUNCTION: AcpiUtGetRegionName 95193640Sariff * 96193640Sariff * PARAMETERS: Space ID - ID for the region 97193640Sariff * 98193640Sariff * RETURN: Decoded region SpaceId name 99193640Sariff * 100193640Sariff * DESCRIPTION: Translate a Space ID into a name string (Debug only) 101193640Sariff * 102193640Sariff ******************************************************************************/ 103193640Sariff 104193640Sariff/* Region type decoding */ 105193640Sariff 106193640Sariffconst char *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] = 107193640Sariff{ 108193640Sariff "SystemMemory", /* 0x00 */ 109193640Sariff "SystemIO", /* 0x01 */ 110193640Sariff "PCI_Config", /* 0x02 */ 111193640Sariff "EmbeddedControl", /* 0x03 */ 112193640Sariff "SMBus", /* 0x04 */ 113193640Sariff "SystemCMOS", /* 0x05 */ 114193640Sariff "PCIBARTarget", /* 0x06 */ 115193640Sariff "IPMI", /* 0x07 */ 116193640Sariff "GeneralPurposeIo", /* 0x08 */ 117193640Sariff "GenericSerialBus", /* 0x09 */ 118193640Sariff "PCC" /* 0x0A */ 119193640Sariff}; 120193640Sariff 121193640Sariff 122193640Sariffconst char * 123193640SariffAcpiUtGetRegionName ( 124193640Sariff UINT8 SpaceId) 125193640Sariff{ 126193640Sariff 127193640Sariff if (SpaceId >= ACPI_USER_REGION_BEGIN) 128193640Sariff { 129193640Sariff return ("UserDefinedRegion"); 130193640Sariff } 131193640Sariff else if (SpaceId == ACPI_ADR_SPACE_DATA_TABLE) 132193640Sariff { 133193640Sariff return ("DataTable"); 134193640Sariff } 135193640Sariff else if (SpaceId == ACPI_ADR_SPACE_FIXED_HARDWARE) 136193640Sariff { 137193640Sariff return ("FunctionalFixedHW"); 138193640Sariff } 139193640Sariff else if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS) 140193640Sariff { 141193640Sariff return ("InvalidSpaceId"); 142193640Sariff } 143193640Sariff 144193640Sariff return (AcpiGbl_RegionTypes[SpaceId]); 145193640Sariff} 146193640Sariff 147193640Sariff 148193640Sariff/******************************************************************************* 149193640Sariff * 150193640Sariff * FUNCTION: AcpiUtGetEventName 151193640Sariff * 152193640Sariff * PARAMETERS: EventId - Fixed event ID 153193640Sariff * 154193640Sariff * RETURN: Decoded event ID name 155193640Sariff * 156193640Sariff * DESCRIPTION: Translate a Event ID into a name string (Debug only) 157193640Sariff * 158193640Sariff ******************************************************************************/ 159193640Sariff 160193640Sariff/* Event type decoding */ 161193640Sariff 162193640Sariffstatic const char *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] = 163193640Sariff{ 164193640Sariff "PM_Timer", 165193640Sariff "GlobalLock", 166193640Sariff "PowerButton", 167193640Sariff "SleepButton", 168193640Sariff "RealTimeClock", 169193640Sariff}; 170193640Sariff 171193640Sariff 172193640Sariffconst char * 173193640SariffAcpiUtGetEventName ( 174193640Sariff UINT32 EventId) 175193640Sariff{ 176193640Sariff 177193640Sariff if (EventId > ACPI_EVENT_MAX) 178193640Sariff { 179193640Sariff return ("InvalidEventID"); 180193640Sariff } 181193640Sariff 182193640Sariff return (AcpiGbl_EventTypes[EventId]); 183193640Sariff} 184193640Sariff 185193640Sariff 186193640Sariff/******************************************************************************* 187193640Sariff * 188193640Sariff * FUNCTION: AcpiUtGetTypeName 189193640Sariff * 190193640Sariff * PARAMETERS: Type - An ACPI object type 191193640Sariff * 192193640Sariff * RETURN: Decoded ACPI object type name 193193640Sariff * 194193640Sariff * DESCRIPTION: Translate a Type ID into a name string (Debug only) 195193640Sariff * 196193640Sariff ******************************************************************************/ 197193640Sariff 198193640Sariff/* 199193640Sariff * Elements of AcpiGbl_NsTypeNames below must match 200193640Sariff * one-to-one with values of ACPI_OBJECT_TYPE 201193640Sariff * 202193640Sariff * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching; 203193640Sariff * when stored in a table it really means that we have thus far seen no 204193640Sariff * evidence to indicate what type is actually going to be stored for this 205193640Sariff & entry. 206193640Sariff */ 207193640Sariffstatic const char AcpiGbl_BadType[] = "UNDEFINED"; 208193640Sariff 209193640Sariff/* Printable names of the ACPI object types */ 210193640Sariff 211193640Sariffstatic const char *AcpiGbl_NsTypeNames[] = 212193640Sariff{ 213193640Sariff /* 00 */ "Untyped", 214193640Sariff /* 01 */ "Integer", 215193640Sariff /* 02 */ "String", 216193640Sariff /* 03 */ "Buffer", 217193640Sariff /* 04 */ "Package", 218193640Sariff /* 05 */ "FieldUnit", 219193640Sariff /* 06 */ "Device", 220193640Sariff /* 07 */ "Event", 221193640Sariff /* 08 */ "Method", 222193640Sariff /* 09 */ "Mutex", 223193640Sariff /* 10 */ "Region", 224193640Sariff /* 11 */ "Power", 225193640Sariff /* 12 */ "Processor", 226193640Sariff /* 13 */ "Thermal", 227193640Sariff /* 14 */ "BufferField", 228193640Sariff /* 15 */ "DdbHandle", 229193640Sariff /* 16 */ "DebugObject", 230193640Sariff /* 17 */ "RegionField", 231193640Sariff /* 18 */ "BankField", 232193640Sariff /* 19 */ "IndexField", 233193640Sariff /* 20 */ "Reference", 234193640Sariff /* 21 */ "Alias", 235193640Sariff /* 22 */ "MethodAlias", 236193640Sariff /* 23 */ "Notify", 237193640Sariff /* 24 */ "AddrHandler", 238193640Sariff /* 25 */ "ResourceDesc", 239193640Sariff /* 26 */ "ResourceFld", 240193640Sariff /* 27 */ "Scope", 241193640Sariff /* 28 */ "Extra", 242193640Sariff /* 29 */ "Data", 243193640Sariff /* 30 */ "Invalid" 244193640Sariff}; 245193640Sariff 246193640Sariff 247193640Sariffconst char * 248193640SariffAcpiUtGetTypeName ( 249193640Sariff ACPI_OBJECT_TYPE Type) 250193640Sariff{ 251193640Sariff 252193640Sariff if (Type > ACPI_TYPE_INVALID) 253193640Sariff { 254193640Sariff return (AcpiGbl_BadType); 255193640Sariff } 256193640Sariff 257193640Sariff return (AcpiGbl_NsTypeNames[Type]); 258193640Sariff} 259193640Sariff 260193640Sariff 261193640Sariffconst char * 262193640SariffAcpiUtGetObjectTypeName ( 263193640Sariff ACPI_OPERAND_OBJECT *ObjDesc) 264193640Sariff{ 265193640Sariff ACPI_FUNCTION_TRACE (UtGetObjectTypeName); 266193640Sariff 267193640Sariff 268193640Sariff if (!ObjDesc) 269193640Sariff { 270193640Sariff ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n")); 271193640Sariff return_PTR ("[NULL Object Descriptor]"); 272193640Sariff } 273193640Sariff 274193640Sariff /* These descriptor types share a common area */ 275193640Sariff 276193640Sariff if ((ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) && 277193640Sariff (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_NAMED)) 278193640Sariff { 279193640Sariff ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, 280193640Sariff "Invalid object descriptor type: 0x%2.2X [%s] (%p)\n", 281193640Sariff ACPI_GET_DESCRIPTOR_TYPE (ObjDesc), 282193640Sariff AcpiUtGetDescriptorName (ObjDesc), ObjDesc)); 283193640Sariff 284193640Sariff return_PTR ("Invalid object"); 285193640Sariff } 286193640Sariff 287193640Sariff return_STR (AcpiUtGetTypeName (ObjDesc->Common.Type)); 288193640Sariff} 289193640Sariff 290193640Sariff 291193640Sariff/******************************************************************************* 292193640Sariff * 293193640Sariff * FUNCTION: AcpiUtGetNodeName 294193640Sariff * 295193640Sariff * PARAMETERS: Object - A namespace node 296193640Sariff * 297193640Sariff * RETURN: ASCII name of the node 298193640Sariff * 299193640Sariff * DESCRIPTION: Validate the node and return the node's ACPI name. 300193640Sariff * 301193640Sariff ******************************************************************************/ 302193640Sariff 303193640Sariffconst char * 304193640SariffAcpiUtGetNodeName ( 305193640Sariff void *Object) 306193640Sariff{ 307193640Sariff ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) Object; 308193640Sariff 309193640Sariff 310193640Sariff /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */ 311193640Sariff 312193640Sariff if (!Object) 313193640Sariff { 314193640Sariff return ("NULL"); 315193640Sariff } 316193640Sariff 317193640Sariff /* Check for Root node */ 318193640Sariff 319193640Sariff if ((Object == ACPI_ROOT_OBJECT) || 320193640Sariff (Object == AcpiGbl_RootNode)) 321193640Sariff { 322193640Sariff return ("\"\\\" "); 323193640Sariff } 324193640Sariff 325193640Sariff /* Descriptor must be a namespace node */ 326193640Sariff 327193640Sariff if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) 328193640Sariff { 329193640Sariff return ("####"); 330193640Sariff } 331193640Sariff 332193640Sariff /* 333193640Sariff * Ensure name is valid. The name was validated/repaired when the node 334193640Sariff * was created, but make sure it has not been corrupted. 335193640Sariff */ 336193640Sariff AcpiUtRepairName (Node->Name.Ascii); 337193640Sariff 338193640Sariff /* Return the name */ 339193640Sariff 340193640Sariff return (Node->Name.Ascii); 341193640Sariff} 342193640Sariff 343193640Sariff 344193640Sariff/******************************************************************************* 345193640Sariff * 346193640Sariff * FUNCTION: AcpiUtGetDescriptorName 347193640Sariff * 348193640Sariff * PARAMETERS: Object - An ACPI object 349193640Sariff * 350193640Sariff * RETURN: Decoded name of the descriptor type 351193640Sariff * 352193640Sariff * DESCRIPTION: Validate object and return the descriptor type 353193640Sariff * 354193640Sariff ******************************************************************************/ 355193640Sariff 356193640Sariff/* Printable names of object descriptor types */ 357193640Sariff 358193640Sariffstatic const char *AcpiGbl_DescTypeNames[] = 359193640Sariff{ 360193640Sariff /* 00 */ "Not a Descriptor", 361193640Sariff /* 01 */ "Cached", 362193640Sariff /* 02 */ "State-Generic", 363193640Sariff /* 03 */ "State-Update", 364193640Sariff /* 04 */ "State-Package", 365193640Sariff /* 05 */ "State-Control", 366193640Sariff /* 06 */ "State-RootParseScope", 367193640Sariff /* 07 */ "State-ParseScope", 368193640Sariff /* 08 */ "State-WalkScope", 369193640Sariff /* 09 */ "State-Result", 370193640Sariff /* 10 */ "State-Notify", 371193640Sariff /* 11 */ "State-Thread", 372193640Sariff /* 12 */ "Walk", 373193640Sariff /* 13 */ "Parser", 374193640Sariff /* 14 */ "Operand", 375193640Sariff /* 15 */ "Node" 376193640Sariff}; 377193640Sariff 378193640Sariff 379193640Sariffconst char * 380193640SariffAcpiUtGetDescriptorName ( 381193640Sariff void *Object) 382194233Sariff{ 383194233Sariff 384194233Sariff if (!Object) 385194233Sariff { 386194233Sariff return ("NULL OBJECT"); 387194233Sariff } 388194233Sariff 389195378Sariff if (ACPI_GET_DESCRIPTOR_TYPE (Object) > ACPI_DESC_TYPE_MAX) 390195378Sariff { 391195378Sariff return ("Not a Descriptor"); 392195378Sariff } 393195378Sariff 394195378Sariff return (AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)]); 395195378Sariff} 396195378Sariff 397195378Sariff 398195378Sariff/******************************************************************************* 399195378Sariff * 400195378Sariff * FUNCTION: AcpiUtGetReferenceName 401195378Sariff * 402195378Sariff * PARAMETERS: Object - An ACPI reference object 403195378Sariff * 404195378Sariff * RETURN: Decoded name of the type of reference 405195378Sariff * 406195378Sariff * DESCRIPTION: Decode a reference object sub-type to a string. 407195378Sariff * 408195378Sariff ******************************************************************************/ 409195378Sariff 410193640Sariff/* Printable names of reference object sub-types */ 411194233Sariff 412193640Sariffstatic const char *AcpiGbl_RefClassNames[] = 413193640Sariff{ 414193640Sariff /* 00 */ "Local", 415193640Sariff /* 01 */ "Argument", 416193640Sariff /* 02 */ "RefOf", 417193640Sariff /* 03 */ "Index", 418193640Sariff /* 04 */ "DdbHandle", 419193640Sariff /* 05 */ "Named Object", 420193640Sariff /* 06 */ "Debug" 421193640Sariff}; 422193640Sariff 423193640Sariffconst char * 424193640SariffAcpiUtGetReferenceName ( 425193640Sariff ACPI_OPERAND_OBJECT *Object) 426193640Sariff{ 427193640Sariff 428193640Sariff if (!Object) 429193640Sariff { 430193640Sariff return ("NULL Object"); 431193640Sariff } 432193640Sariff 433193640Sariff if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND) 434193640Sariff { 435193640Sariff return ("Not an Operand object"); 436193640Sariff } 437193640Sariff 438193640Sariff if (Object->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) 439193640Sariff { 440193640Sariff return ("Not a Reference object"); 441193640Sariff } 442193640Sariff 443193640Sariff if (Object->Reference.Class > ACPI_REFCLASS_MAX) 444193640Sariff { 445193640Sariff return ("Unknown Reference class"); 446193640Sariff } 447193640Sariff 448193640Sariff return (AcpiGbl_RefClassNames[Object->Reference.Class]); 449193640Sariff} 450193640Sariff 451193640Sariff 452193640Sariff#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 453193640Sariff/* 454193640Sariff * Strings and procedures used for debug only 455193640Sariff */ 456193640Sariff 457193640Sariff/******************************************************************************* 458193640Sariff * 459193640Sariff * FUNCTION: AcpiUtGetMutexName 460193640Sariff * 461193640Sariff * PARAMETERS: MutexId - The predefined ID for this mutex. 462193640Sariff * 463193640Sariff * RETURN: Decoded name of the internal mutex 464193640Sariff * 465193640Sariff * DESCRIPTION: Translate a mutex ID into a name string (Debug only) 466193640Sariff * 467193640Sariff ******************************************************************************/ 468193640Sariff 469193640Sariff/* Names for internal mutex objects, used for debug output */ 470193640Sariff 471193640Sariffstatic const char *AcpiGbl_MutexNames[ACPI_NUM_MUTEX] = 472195378Sariff{ 473195378Sariff "ACPI_MTX_Interpreter", 474195378Sariff "ACPI_MTX_Namespace", 475195378Sariff "ACPI_MTX_Tables", 476195378Sariff "ACPI_MTX_Events", 477195378Sariff "ACPI_MTX_Caches", 478193640Sariff "ACPI_MTX_Memory", 479193640Sariff}; 480193640Sariff 481193640Sariffconst char * 482193640SariffAcpiUtGetMutexName ( 483193640Sariff UINT32 MutexId) 484193640Sariff{ 485193640Sariff 486193640Sariff if (MutexId > ACPI_MAX_MUTEX) 487193640Sariff { 488193640Sariff return ("Invalid Mutex ID"); 489193640Sariff } 490193640Sariff 491193640Sariff return (AcpiGbl_MutexNames[MutexId]); 492193640Sariff} 493193640Sariff 494193640Sariff 495193640Sariff/******************************************************************************* 496193640Sariff * 497193640Sariff * FUNCTION: AcpiUtGetNotifyName 498193640Sariff * 499193640Sariff * PARAMETERS: NotifyValue - Value from the Notify() request 500193640Sariff * 501193640Sariff * RETURN: Decoded name for the notify value 502193640Sariff * 503193640Sariff * DESCRIPTION: Translate a Notify Value to a notify namestring. 504193640Sariff * 505193640Sariff ******************************************************************************/ 506193640Sariff 507193640Sariff/* Names for Notify() values, used for debug output */ 508193640Sariff 509193640Sariffstatic const char *AcpiGbl_GenericNotify[ACPI_GENERIC_NOTIFY_MAX + 1] = 510193640Sariff{ 511193640Sariff /* 00 */ "Bus Check", 512193640Sariff /* 01 */ "Device Check", 513193640Sariff /* 02 */ "Device Wake", 514193640Sariff /* 03 */ "Eject Request", 515193640Sariff /* 04 */ "Device Check Light", 516193640Sariff /* 05 */ "Frequency Mismatch", 517193640Sariff /* 06 */ "Bus Mode Mismatch", 518193640Sariff /* 07 */ "Power Fault", 519193640Sariff /* 08 */ "Capabilities Check", 520193640Sariff /* 09 */ "Device PLD Check", 521193640Sariff /* 0A */ "Reserved", 522193640Sariff /* 0B */ "System Locality Update", 523193640Sariff /* 0C */ "Shutdown Request", /* Reserved in ACPI 6.0 */ 524193640Sariff /* 0D */ "System Resource Affinity Update" 525193640Sariff}; 526193640Sariff 527193640Sariffstatic const char *AcpiGbl_DeviceNotify[5] = 528193640Sariff{ 529194233Sariff /* 80 */ "Status Change", 530194233Sariff /* 81 */ "Information Change", 531194233Sariff /* 82 */ "Device-Specific Change", 532194233Sariff /* 83 */ "Device-Specific Change", 533194233Sariff /* 84 */ "Reserved" 534194233Sariff}; 535194233Sariff 536194233Sariffstatic const char *AcpiGbl_ProcessorNotify[5] = 537194233Sariff{ 538194233Sariff /* 80 */ "Performance Capability Change", 539194233Sariff /* 81 */ "C-State Change", 540194233Sariff /* 82 */ "Throttling Capability Change", 541194233Sariff /* 83 */ "Guaranteed Change", 542194233Sariff /* 84 */ "Minimum Excursion" 543194233Sariff}; 544194233Sariff 545194233Sariffstatic const char *AcpiGbl_ThermalNotify[5] = 546194233Sariff{ 547194233Sariff /* 80 */ "Thermal Status Change", 548194233Sariff /* 81 */ "Thermal Trip Point Change", 549194233Sariff /* 82 */ "Thermal Device List Change", 550194233Sariff /* 83 */ "Thermal Relationship Change", 551194233Sariff /* 84 */ "Reserved" 552194233Sariff}; 553194233Sariff 554194233Sariff 555194233Sariffconst char * 556195378SariffAcpiUtGetNotifyName ( 557195378Sariff UINT32 NotifyValue, 558195378Sariff ACPI_OBJECT_TYPE Type) 559195378Sariff{ 560195378Sariff 561195378Sariff /* 00 - 0D are "common to all object types" (from ACPI Spec) */ 562195378Sariff 563195378Sariff if (NotifyValue <= ACPI_GENERIC_NOTIFY_MAX) 564195378Sariff { 565195378Sariff return (AcpiGbl_GenericNotify[NotifyValue]); 566195378Sariff } 567195378Sariff 568195378Sariff /* 0E - 7F are reserved */ 569195378Sariff 570195378Sariff if (NotifyValue <= ACPI_MAX_SYS_NOTIFY) 571195378Sariff { 572195378Sariff return ("Reserved"); 573195378Sariff } 574195378Sariff 575195378Sariff /* 80 - 84 are per-object-type */ 576195378Sariff 577195378Sariff if (NotifyValue <= ACPI_SPECIFIC_NOTIFY_MAX) 578195378Sariff { 579195378Sariff switch (Type) 580195378Sariff { 581195378Sariff case ACPI_TYPE_ANY: 582195378Sariff case ACPI_TYPE_DEVICE: 583195378Sariff return (AcpiGbl_DeviceNotify [NotifyValue - 0x80]); 584195378Sariff 585195378Sariff case ACPI_TYPE_PROCESSOR: 586195378Sariff return (AcpiGbl_ProcessorNotify [NotifyValue - 0x80]); 587195378Sariff 588195378Sariff case ACPI_TYPE_THERMAL: 589195378Sariff return (AcpiGbl_ThermalNotify [NotifyValue - 0x80]); 590195378Sariff 591195378Sariff default: 592195378Sariff return ("Target object type does not support notifies"); 593195378Sariff } 594195378Sariff } 595195378Sariff 596195378Sariff /* 84 - BF are device-specific */ 597195378Sariff 598195378Sariff if (NotifyValue <= ACPI_MAX_DEVICE_SPECIFIC_NOTIFY) 599195378Sariff { 600195378Sariff return ("Device-Specific"); 601195378Sariff } 602195378Sariff 603195378Sariff /* C0 and above are hardware-specific */ 604195378Sariff 605195378Sariff return ("Hardware-Specific"); 606195378Sariff} 607195378Sariff#endif 608195378Sariff 609195378Sariff 610195378Sariff/******************************************************************************* 611195378Sariff * 612193640Sariff * FUNCTION: AcpiUtValidObjectType 613193640Sariff * 614193640Sariff * PARAMETERS: Type - Object type to be validated 615193640Sariff * 616193640Sariff * RETURN: TRUE if valid object type, FALSE otherwise 617193640Sariff * 618193640Sariff * DESCRIPTION: Validate an object type 619193640Sariff * 620193640Sariff ******************************************************************************/ 621195378Sariff 622195378SariffBOOLEAN 623195378SariffAcpiUtValidObjectType ( 624193640Sariff ACPI_OBJECT_TYPE Type) 625193640Sariff{ 626193640Sariff 627195378Sariff if (Type > ACPI_TYPE_LOCAL_MAX) 628195378Sariff { 629195378Sariff /* Note: Assumes all TYPEs are contiguous (external/local) */ 630193640Sariff 631195378Sariff return (FALSE); 632195378Sariff } 633193640Sariff 634193640Sariff return (TRUE); 635193640Sariff} 636193640Sariff