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