1218585Sjkim/******************************************************************************
2218585Sjkim *
3218585Sjkim * Module Name: utdecode - Utility decoding routines (value-to-string)
4218585Sjkim *
5218585Sjkim *****************************************************************************/
6218585Sjkim
7218585Sjkim/*
8218585Sjkim * Copyright (C) 2000 - 2011, Intel Corp.
9218585Sjkim * All rights reserved.
10218585Sjkim *
11218585Sjkim * Redistribution and use in source and binary forms, with or without
12218585Sjkim * modification, are permitted provided that the following conditions
13218585Sjkim * are met:
14218585Sjkim * 1. Redistributions of source code must retain the above copyright
15218585Sjkim *    notice, this list of conditions, and the following disclaimer,
16218585Sjkim *    without modification.
17218585Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18218585Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19218585Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20218585Sjkim *    including a substantially similar Disclaimer requirement for further
21218585Sjkim *    binary redistribution.
22218585Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23218585Sjkim *    of any contributors may be used to endorse or promote products derived
24218585Sjkim *    from this software without specific prior written permission.
25218585Sjkim *
26218585Sjkim * Alternatively, this software may be distributed under the terms of the
27218585Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28218585Sjkim * Software Foundation.
29218585Sjkim *
30218585Sjkim * NO WARRANTY
31218585Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32218585Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33218585Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34218585Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35218585Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36218585Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37218585Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38218585Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39218585Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40218585Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41218585Sjkim * POSSIBILITY OF SUCH DAMAGES.
42218585Sjkim */
43218585Sjkim
44218585Sjkim#define __UTDECODE_C__
45218585Sjkim
46218590Sjkim#include <contrib/dev/acpica/include/acpi.h>
47218590Sjkim#include <contrib/dev/acpica/include/accommon.h>
48218590Sjkim#include <contrib/dev/acpica/include/acnamesp.h>
49218585Sjkim
50218585Sjkim#define _COMPONENT          ACPI_UTILITIES
51218585Sjkim        ACPI_MODULE_NAME    ("utdecode")
52218585Sjkim
53218585Sjkim
54218585Sjkim/*******************************************************************************
55218585Sjkim *
56218585Sjkim * FUNCTION:    AcpiFormatException
57218585Sjkim *
58218585Sjkim * PARAMETERS:  Status       - The ACPI_STATUS code to be formatted
59218585Sjkim *
60218585Sjkim * RETURN:      A string containing the exception text. A valid pointer is
61218585Sjkim *              always returned.
62218585Sjkim *
63218585Sjkim * DESCRIPTION: This function translates an ACPI exception into an ASCII string
64218585Sjkim *              It is here instead of utxface.c so it is always present.
65218585Sjkim *
66218585Sjkim ******************************************************************************/
67218585Sjkim
68218585Sjkimconst char *
69218585SjkimAcpiFormatException (
70218585Sjkim    ACPI_STATUS             Status)
71218585Sjkim{
72218585Sjkim    const char              *Exception = NULL;
73218585Sjkim
74218585Sjkim
75218585Sjkim    ACPI_FUNCTION_ENTRY ();
76218585Sjkim
77218585Sjkim
78218585Sjkim    Exception = AcpiUtValidateException (Status);
79218585Sjkim    if (!Exception)
80218585Sjkim    {
81218585Sjkim        /* Exception code was not recognized */
82218585Sjkim
83218585Sjkim        ACPI_ERROR ((AE_INFO,
84218585Sjkim            "Unknown exception code: 0x%8.8X", Status));
85218585Sjkim
86218585Sjkim        Exception = "UNKNOWN_STATUS_CODE";
87218585Sjkim    }
88218585Sjkim
89218585Sjkim    return (ACPI_CAST_PTR (const char, Exception));
90218585Sjkim}
91218585Sjkim
92218585SjkimACPI_EXPORT_SYMBOL (AcpiFormatException)
93218585Sjkim
94218585Sjkim
95218585Sjkim/*
96218585Sjkim * Properties of the ACPI Object Types, both internal and external.
97218585Sjkim * The table is indexed by values of ACPI_OBJECT_TYPE
98218585Sjkim */
99218585Sjkimconst UINT8                     AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] =
100218585Sjkim{
101218585Sjkim    ACPI_NS_NORMAL,                     /* 00 Any              */
102218585Sjkim    ACPI_NS_NORMAL,                     /* 01 Number           */
103218585Sjkim    ACPI_NS_NORMAL,                     /* 02 String           */
104218585Sjkim    ACPI_NS_NORMAL,                     /* 03 Buffer           */
105218585Sjkim    ACPI_NS_NORMAL,                     /* 04 Package          */
106218585Sjkim    ACPI_NS_NORMAL,                     /* 05 FieldUnit        */
107218585Sjkim    ACPI_NS_NEWSCOPE,                   /* 06 Device           */
108218585Sjkim    ACPI_NS_NORMAL,                     /* 07 Event            */
109218585Sjkim    ACPI_NS_NEWSCOPE,                   /* 08 Method           */
110218585Sjkim    ACPI_NS_NORMAL,                     /* 09 Mutex            */
111218585Sjkim    ACPI_NS_NORMAL,                     /* 10 Region           */
112218585Sjkim    ACPI_NS_NEWSCOPE,                   /* 11 Power            */
113218585Sjkim    ACPI_NS_NEWSCOPE,                   /* 12 Processor        */
114218585Sjkim    ACPI_NS_NEWSCOPE,                   /* 13 Thermal          */
115218585Sjkim    ACPI_NS_NORMAL,                     /* 14 BufferField      */
116218585Sjkim    ACPI_NS_NORMAL,                     /* 15 DdbHandle        */
117218585Sjkim    ACPI_NS_NORMAL,                     /* 16 Debug Object     */
118218585Sjkim    ACPI_NS_NORMAL,                     /* 17 DefField         */
119218585Sjkim    ACPI_NS_NORMAL,                     /* 18 BankField        */
120218585Sjkim    ACPI_NS_NORMAL,                     /* 19 IndexField       */
121218585Sjkim    ACPI_NS_NORMAL,                     /* 20 Reference        */
122218585Sjkim    ACPI_NS_NORMAL,                     /* 21 Alias            */
123218585Sjkim    ACPI_NS_NORMAL,                     /* 22 MethodAlias      */
124218585Sjkim    ACPI_NS_NORMAL,                     /* 23 Notify           */
125218585Sjkim    ACPI_NS_NORMAL,                     /* 24 Address Handler  */
126218585Sjkim    ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 25 Resource Desc    */
127218585Sjkim    ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 26 Resource Field   */
128218585Sjkim    ACPI_NS_NEWSCOPE,                   /* 27 Scope            */
129218585Sjkim    ACPI_NS_NORMAL,                     /* 28 Extra            */
130218585Sjkim    ACPI_NS_NORMAL,                     /* 29 Data             */
131218585Sjkim    ACPI_NS_NORMAL                      /* 30 Invalid          */
132218585Sjkim};
133218585Sjkim
134218585Sjkim
135218585Sjkim/*******************************************************************************
136218585Sjkim *
137218585Sjkim * FUNCTION:    AcpiUtHexToAsciiChar
138218585Sjkim *
139218585Sjkim * PARAMETERS:  Integer             - Contains the hex digit
140218585Sjkim *              Position            - bit position of the digit within the
141218585Sjkim *                                    integer (multiple of 4)
142218585Sjkim *
143218585Sjkim * RETURN:      The converted Ascii character
144218585Sjkim *
145218585Sjkim * DESCRIPTION: Convert a hex digit to an Ascii character
146218585Sjkim *
147218585Sjkim ******************************************************************************/
148218585Sjkim
149218585Sjkim/* Hex to ASCII conversion table */
150218585Sjkim
151218585Sjkimstatic const char           AcpiGbl_HexToAscii[] =
152218585Sjkim{
153218585Sjkim    '0','1','2','3','4','5','6','7',
154218585Sjkim    '8','9','A','B','C','D','E','F'
155218585Sjkim};
156218585Sjkim
157218585Sjkimchar
158218585SjkimAcpiUtHexToAsciiChar (
159218585Sjkim    UINT64                  Integer,
160218585Sjkim    UINT32                  Position)
161218585Sjkim{
162218585Sjkim
163218585Sjkim    return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]);
164218585Sjkim}
165218585Sjkim
166218585Sjkim
167218585Sjkim/*******************************************************************************
168218585Sjkim *
169218585Sjkim * FUNCTION:    AcpiUtGetRegionName
170218585Sjkim *
171218585Sjkim * PARAMETERS:  Space ID            - ID for the region
172218585Sjkim *
173218585Sjkim * RETURN:      Decoded region SpaceId name
174218585Sjkim *
175218585Sjkim * DESCRIPTION: Translate a Space ID into a name string (Debug only)
176218585Sjkim *
177218585Sjkim ******************************************************************************/
178218585Sjkim
179218585Sjkim/* Region type decoding */
180218585Sjkim
181218585Sjkimconst char        *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
182218585Sjkim{
183218585Sjkim    "SystemMemory",
184218585Sjkim    "SystemIO",
185218585Sjkim    "PCI_Config",
186218585Sjkim    "EmbeddedControl",
187218585Sjkim    "SMBus",
188218585Sjkim    "SystemCMOS",
189218585Sjkim    "PCIBARTarget",
190220663Sjkim    "IPMI"
191218585Sjkim};
192218585Sjkim
193218585Sjkim
194218585Sjkimchar *
195218585SjkimAcpiUtGetRegionName (
196218585Sjkim    UINT8                   SpaceId)
197218585Sjkim{
198218585Sjkim
199218585Sjkim    if (SpaceId >= ACPI_USER_REGION_BEGIN)
200218585Sjkim    {
201218585Sjkim        return ("UserDefinedRegion");
202218585Sjkim    }
203220663Sjkim    else if (SpaceId == ACPI_ADR_SPACE_DATA_TABLE)
204220663Sjkim    {
205220663Sjkim        return ("DataTable");
206220663Sjkim    }
207218585Sjkim    else if (SpaceId == ACPI_ADR_SPACE_FIXED_HARDWARE)
208218585Sjkim    {
209218585Sjkim        return ("FunctionalFixedHW");
210218585Sjkim    }
211218585Sjkim    else if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS)
212218585Sjkim    {
213218585Sjkim        return ("InvalidSpaceId");
214218585Sjkim    }
215218585Sjkim
216218585Sjkim    return (ACPI_CAST_PTR (char, AcpiGbl_RegionTypes[SpaceId]));
217218585Sjkim}
218218585Sjkim
219218585Sjkim
220218585Sjkim/*******************************************************************************
221218585Sjkim *
222218585Sjkim * FUNCTION:    AcpiUtGetEventName
223218585Sjkim *
224218585Sjkim * PARAMETERS:  EventId             - Fixed event ID
225218585Sjkim *
226218585Sjkim * RETURN:      Decoded event ID name
227218585Sjkim *
228218585Sjkim * DESCRIPTION: Translate a Event ID into a name string (Debug only)
229218585Sjkim *
230218585Sjkim ******************************************************************************/
231218585Sjkim
232218585Sjkim/* Event type decoding */
233218585Sjkim
234218585Sjkimstatic const char        *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] =
235218585Sjkim{
236218585Sjkim    "PM_Timer",
237218585Sjkim    "GlobalLock",
238218585Sjkim    "PowerButton",
239218585Sjkim    "SleepButton",
240218585Sjkim    "RealTimeClock",
241218585Sjkim};
242218585Sjkim
243218585Sjkim
244218585Sjkimchar *
245218585SjkimAcpiUtGetEventName (
246218585Sjkim    UINT32                  EventId)
247218585Sjkim{
248218585Sjkim
249218585Sjkim    if (EventId > ACPI_EVENT_MAX)
250218585Sjkim    {
251218585Sjkim        return ("InvalidEventID");
252218585Sjkim    }
253218585Sjkim
254218585Sjkim    return (ACPI_CAST_PTR (char, AcpiGbl_EventTypes[EventId]));
255218585Sjkim}
256218585Sjkim
257218585Sjkim
258218585Sjkim/*******************************************************************************
259218585Sjkim *
260218585Sjkim * FUNCTION:    AcpiUtGetTypeName
261218585Sjkim *
262218585Sjkim * PARAMETERS:  Type                - An ACPI object type
263218585Sjkim *
264218585Sjkim * RETURN:      Decoded ACPI object type name
265218585Sjkim *
266218585Sjkim * DESCRIPTION: Translate a Type ID into a name string (Debug only)
267218585Sjkim *
268218585Sjkim ******************************************************************************/
269218585Sjkim
270218585Sjkim/*
271218585Sjkim * Elements of AcpiGbl_NsTypeNames below must match
272218585Sjkim * one-to-one with values of ACPI_OBJECT_TYPE
273218585Sjkim *
274218585Sjkim * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching;
275218585Sjkim * when stored in a table it really means that we have thus far seen no
276218585Sjkim * evidence to indicate what type is actually going to be stored for this entry.
277218585Sjkim */
278218585Sjkimstatic const char           AcpiGbl_BadType[] = "UNDEFINED";
279218585Sjkim
280218585Sjkim/* Printable names of the ACPI object types */
281218585Sjkim
282218585Sjkimstatic const char           *AcpiGbl_NsTypeNames[] =
283218585Sjkim{
284218585Sjkim    /* 00 */ "Untyped",
285218585Sjkim    /* 01 */ "Integer",
286218585Sjkim    /* 02 */ "String",
287218585Sjkim    /* 03 */ "Buffer",
288218585Sjkim    /* 04 */ "Package",
289218585Sjkim    /* 05 */ "FieldUnit",
290218585Sjkim    /* 06 */ "Device",
291218585Sjkim    /* 07 */ "Event",
292218585Sjkim    /* 08 */ "Method",
293218585Sjkim    /* 09 */ "Mutex",
294218585Sjkim    /* 10 */ "Region",
295218585Sjkim    /* 11 */ "Power",
296218585Sjkim    /* 12 */ "Processor",
297218585Sjkim    /* 13 */ "Thermal",
298218585Sjkim    /* 14 */ "BufferField",
299218585Sjkim    /* 15 */ "DdbHandle",
300218585Sjkim    /* 16 */ "DebugObject",
301218585Sjkim    /* 17 */ "RegionField",
302218585Sjkim    /* 18 */ "BankField",
303218585Sjkim    /* 19 */ "IndexField",
304218585Sjkim    /* 20 */ "Reference",
305218585Sjkim    /* 21 */ "Alias",
306218585Sjkim    /* 22 */ "MethodAlias",
307218585Sjkim    /* 23 */ "Notify",
308218585Sjkim    /* 24 */ "AddrHandler",
309218585Sjkim    /* 25 */ "ResourceDesc",
310218585Sjkim    /* 26 */ "ResourceFld",
311218585Sjkim    /* 27 */ "Scope",
312218585Sjkim    /* 28 */ "Extra",
313218585Sjkim    /* 29 */ "Data",
314218585Sjkim    /* 30 */ "Invalid"
315218585Sjkim};
316218585Sjkim
317218585Sjkim
318218585Sjkimchar *
319218585SjkimAcpiUtGetTypeName (
320218585Sjkim    ACPI_OBJECT_TYPE        Type)
321218585Sjkim{
322218585Sjkim
323218585Sjkim    if (Type > ACPI_TYPE_INVALID)
324218585Sjkim    {
325218585Sjkim        return (ACPI_CAST_PTR (char, AcpiGbl_BadType));
326218585Sjkim    }
327218585Sjkim
328218585Sjkim    return (ACPI_CAST_PTR (char, AcpiGbl_NsTypeNames[Type]));
329218585Sjkim}
330218585Sjkim
331218585Sjkim
332218585Sjkimchar *
333218585SjkimAcpiUtGetObjectTypeName (
334218585Sjkim    ACPI_OPERAND_OBJECT     *ObjDesc)
335218585Sjkim{
336218585Sjkim
337218585Sjkim    if (!ObjDesc)
338218585Sjkim    {
339218585Sjkim        return ("[NULL Object Descriptor]");
340218585Sjkim    }
341218585Sjkim
342218585Sjkim    return (AcpiUtGetTypeName (ObjDesc->Common.Type));
343218585Sjkim}
344218585Sjkim
345218585Sjkim
346218585Sjkim/*******************************************************************************
347218585Sjkim *
348218585Sjkim * FUNCTION:    AcpiUtGetNodeName
349218585Sjkim *
350218585Sjkim * PARAMETERS:  Object               - A namespace node
351218585Sjkim *
352218585Sjkim * RETURN:      ASCII name of the node
353218585Sjkim *
354218585Sjkim * DESCRIPTION: Validate the node and return the node's ACPI name.
355218585Sjkim *
356218585Sjkim ******************************************************************************/
357218585Sjkim
358218585Sjkimchar *
359218585SjkimAcpiUtGetNodeName (
360218585Sjkim    void                    *Object)
361218585Sjkim{
362218585Sjkim    ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) Object;
363218585Sjkim
364218585Sjkim
365218585Sjkim    /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */
366218585Sjkim
367218585Sjkim    if (!Object)
368218585Sjkim    {
369218585Sjkim        return ("NULL");
370218585Sjkim    }
371218585Sjkim
372218585Sjkim    /* Check for Root node */
373218585Sjkim
374218585Sjkim    if ((Object == ACPI_ROOT_OBJECT) ||
375218585Sjkim        (Object == AcpiGbl_RootNode))
376218585Sjkim    {
377218585Sjkim        return ("\"\\\" ");
378218585Sjkim    }
379218585Sjkim
380218585Sjkim    /* Descriptor must be a namespace node */
381218585Sjkim
382218585Sjkim    if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
383218585Sjkim    {
384218585Sjkim        return ("####");
385218585Sjkim    }
386218585Sjkim
387218585Sjkim    /*
388218585Sjkim     * Ensure name is valid. The name was validated/repaired when the node
389218585Sjkim     * was created, but make sure it has not been corrupted.
390218585Sjkim     */
391218585Sjkim    AcpiUtRepairName (Node->Name.Ascii);
392218585Sjkim
393218585Sjkim    /* Return the name */
394218585Sjkim
395218585Sjkim    return (Node->Name.Ascii);
396218585Sjkim}
397218585Sjkim
398218585Sjkim
399218585Sjkim/*******************************************************************************
400218585Sjkim *
401218585Sjkim * FUNCTION:    AcpiUtGetDescriptorName
402218585Sjkim *
403218585Sjkim * PARAMETERS:  Object               - An ACPI object
404218585Sjkim *
405218585Sjkim * RETURN:      Decoded name of the descriptor type
406218585Sjkim *
407218585Sjkim * DESCRIPTION: Validate object and return the descriptor type
408218585Sjkim *
409218585Sjkim ******************************************************************************/
410218585Sjkim
411218585Sjkim/* Printable names of object descriptor types */
412218585Sjkim
413218585Sjkimstatic const char           *AcpiGbl_DescTypeNames[] =
414218585Sjkim{
415218585Sjkim    /* 00 */ "Not a Descriptor",
416218585Sjkim    /* 01 */ "Cached",
417218585Sjkim    /* 02 */ "State-Generic",
418218585Sjkim    /* 03 */ "State-Update",
419218585Sjkim    /* 04 */ "State-Package",
420218585Sjkim    /* 05 */ "State-Control",
421218585Sjkim    /* 06 */ "State-RootParseScope",
422218585Sjkim    /* 07 */ "State-ParseScope",
423218585Sjkim    /* 08 */ "State-WalkScope",
424218585Sjkim    /* 09 */ "State-Result",
425218585Sjkim    /* 10 */ "State-Notify",
426218585Sjkim    /* 11 */ "State-Thread",
427218585Sjkim    /* 12 */ "Walk",
428218585Sjkim    /* 13 */ "Parser",
429218585Sjkim    /* 14 */ "Operand",
430218585Sjkim    /* 15 */ "Node"
431218585Sjkim};
432218585Sjkim
433218585Sjkim
434218585Sjkimchar *
435218585SjkimAcpiUtGetDescriptorName (
436218585Sjkim    void                    *Object)
437218585Sjkim{
438218585Sjkim
439218585Sjkim    if (!Object)
440218585Sjkim    {
441218585Sjkim        return ("NULL OBJECT");
442218585Sjkim    }
443218585Sjkim
444218585Sjkim    if (ACPI_GET_DESCRIPTOR_TYPE (Object) > ACPI_DESC_TYPE_MAX)
445218585Sjkim    {
446218585Sjkim        return ("Not a Descriptor");
447218585Sjkim    }
448218585Sjkim
449218585Sjkim    return (ACPI_CAST_PTR (char,
450218585Sjkim        AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)]));
451218585Sjkim
452218585Sjkim}
453218585Sjkim
454218585Sjkim
455218585Sjkim/*******************************************************************************
456218585Sjkim *
457218585Sjkim * FUNCTION:    AcpiUtGetReferenceName
458218585Sjkim *
459218585Sjkim * PARAMETERS:  Object               - An ACPI reference object
460218585Sjkim *
461218585Sjkim * RETURN:      Decoded name of the type of reference
462218585Sjkim *
463218585Sjkim * DESCRIPTION: Decode a reference object sub-type to a string.
464218585Sjkim *
465218585Sjkim ******************************************************************************/
466218585Sjkim
467218585Sjkim/* Printable names of reference object sub-types */
468218585Sjkim
469218585Sjkimstatic const char           *AcpiGbl_RefClassNames[] =
470218585Sjkim{
471218585Sjkim    /* 00 */ "Local",
472218585Sjkim    /* 01 */ "Argument",
473218585Sjkim    /* 02 */ "RefOf",
474218585Sjkim    /* 03 */ "Index",
475218585Sjkim    /* 04 */ "DdbHandle",
476218585Sjkim    /* 05 */ "Named Object",
477218585Sjkim    /* 06 */ "Debug"
478218585Sjkim};
479218585Sjkim
480218585Sjkimconst char *
481218585SjkimAcpiUtGetReferenceName (
482218585Sjkim    ACPI_OPERAND_OBJECT     *Object)
483218585Sjkim{
484218585Sjkim
485218585Sjkim    if (!Object)
486218585Sjkim    {
487218585Sjkim        return ("NULL Object");
488218585Sjkim    }
489218585Sjkim
490218585Sjkim    if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND)
491218585Sjkim    {
492218585Sjkim        return ("Not an Operand object");
493218585Sjkim    }
494218585Sjkim
495218585Sjkim    if (Object->Common.Type != ACPI_TYPE_LOCAL_REFERENCE)
496218585Sjkim    {
497218585Sjkim        return ("Not a Reference object");
498218585Sjkim    }
499218585Sjkim
500218585Sjkim    if (Object->Reference.Class > ACPI_REFCLASS_MAX)
501218585Sjkim    {
502218585Sjkim        return ("Unknown Reference class");
503218585Sjkim    }
504218585Sjkim
505218585Sjkim    return (AcpiGbl_RefClassNames[Object->Reference.Class]);
506218585Sjkim}
507218585Sjkim
508218585Sjkim
509218585Sjkim#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
510218585Sjkim/*
511218585Sjkim * Strings and procedures used for debug only
512218585Sjkim */
513218585Sjkim
514218585Sjkim/*******************************************************************************
515218585Sjkim *
516218585Sjkim * FUNCTION:    AcpiUtGetMutexName
517218585Sjkim *
518218585Sjkim * PARAMETERS:  MutexId         - The predefined ID for this mutex.
519218585Sjkim *
520218585Sjkim * RETURN:      Decoded name of the internal mutex
521218585Sjkim *
522218585Sjkim * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
523218585Sjkim *
524218585Sjkim ******************************************************************************/
525218585Sjkim
526218585Sjkim/* Names for internal mutex objects, used for debug output */
527218585Sjkim
528218585Sjkimstatic char                 *AcpiGbl_MutexNames[ACPI_NUM_MUTEX] =
529218585Sjkim{
530218585Sjkim    "ACPI_MTX_Interpreter",
531218585Sjkim    "ACPI_MTX_Namespace",
532218585Sjkim    "ACPI_MTX_Tables",
533218585Sjkim    "ACPI_MTX_Events",
534218585Sjkim    "ACPI_MTX_Caches",
535218585Sjkim    "ACPI_MTX_Memory",
536218585Sjkim    "ACPI_MTX_CommandComplete",
537218585Sjkim    "ACPI_MTX_CommandReady"
538218585Sjkim};
539218585Sjkim
540218585Sjkimchar *
541218585SjkimAcpiUtGetMutexName (
542218585Sjkim    UINT32                  MutexId)
543218585Sjkim{
544218585Sjkim
545218585Sjkim    if (MutexId > ACPI_MAX_MUTEX)
546218585Sjkim    {
547218585Sjkim        return ("Invalid Mutex ID");
548218585Sjkim    }
549218585Sjkim
550218585Sjkim    return (AcpiGbl_MutexNames[MutexId]);
551218585Sjkim}
552218585Sjkim
553218585Sjkim
554218585Sjkim/*******************************************************************************
555218585Sjkim *
556218585Sjkim * FUNCTION:    AcpiUtGetNotifyName
557218585Sjkim *
558218585Sjkim * PARAMETERS:  NotifyValue     - Value from the Notify() request
559218585Sjkim *
560218585Sjkim * RETURN:      Decoded name for the notify value
561218585Sjkim *
562218585Sjkim * DESCRIPTION: Translate a Notify Value to a notify namestring.
563218585Sjkim *
564218585Sjkim ******************************************************************************/
565218585Sjkim
566218585Sjkim/* Names for Notify() values, used for debug output */
567218585Sjkim
568218585Sjkimstatic const char           *AcpiGbl_NotifyValueNames[] =
569218585Sjkim{
570218585Sjkim    "Bus Check",
571218585Sjkim    "Device Check",
572218585Sjkim    "Device Wake",
573218585Sjkim    "Eject Request",
574218585Sjkim    "Device Check Light",
575218585Sjkim    "Frequency Mismatch",
576218585Sjkim    "Bus Mode Mismatch",
577218585Sjkim    "Power Fault",
578218585Sjkim    "Capabilities Check",
579218585Sjkim    "Device PLD Check",
580218585Sjkim    "Reserved",
581218585Sjkim    "System Locality Update"
582218585Sjkim};
583218585Sjkim
584218585Sjkimconst char *
585218585SjkimAcpiUtGetNotifyName (
586218585Sjkim    UINT32                  NotifyValue)
587218585Sjkim{
588218585Sjkim
589218585Sjkim    if (NotifyValue <= ACPI_NOTIFY_MAX)
590218585Sjkim    {
591218585Sjkim        return (AcpiGbl_NotifyValueNames[NotifyValue]);
592218585Sjkim    }
593218585Sjkim    else if (NotifyValue <= ACPI_MAX_SYS_NOTIFY)
594218585Sjkim    {
595218585Sjkim        return ("Reserved");
596218585Sjkim    }
597218585Sjkim    else /* Greater or equal to 0x80 */
598218585Sjkim    {
599218585Sjkim        return ("**Device Specific**");
600218585Sjkim    }
601218585Sjkim}
602218585Sjkim#endif
603218585Sjkim
604218585Sjkim
605218585Sjkim/*******************************************************************************
606218585Sjkim *
607218585Sjkim * FUNCTION:    AcpiUtValidObjectType
608218585Sjkim *
609218585Sjkim * PARAMETERS:  Type            - Object type to be validated
610218585Sjkim *
611218585Sjkim * RETURN:      TRUE if valid object type, FALSE otherwise
612218585Sjkim *
613218585Sjkim * DESCRIPTION: Validate an object type
614218585Sjkim *
615218585Sjkim ******************************************************************************/
616218585Sjkim
617218585SjkimBOOLEAN
618218585SjkimAcpiUtValidObjectType (
619218585Sjkim    ACPI_OBJECT_TYPE        Type)
620218585Sjkim{
621218585Sjkim
622218585Sjkim    if (Type > ACPI_TYPE_LOCAL_MAX)
623218585Sjkim    {
624218585Sjkim        /* Note: Assumes all TYPEs are contiguous (external/local) */
625218585Sjkim
626218585Sjkim        return (FALSE);
627218585Sjkim    }
628218585Sjkim
629218585Sjkim    return (TRUE);
630218585Sjkim}
631