Merge from vendor branch INTEL_ACPICA:
[dragonfly.git] / sys / contrib / dev / acpica-unix-20061109 / utilities / utglobal.c
1 /******************************************************************************
2  *
3  * Module Name: utglobal - Global variables for the ACPI subsystem
4  *              $Revision: 1.247 $
5  *
6  *****************************************************************************/
7
8 /******************************************************************************
9  *
10  * 1. Copyright Notice
11  *
12  * Some or all of this work - Copyright (c) 1999 - 2006, Intel Corp.
13  * All rights reserved.
14  *
15  * 2. License
16  *
17  * 2.1. This is your license from Intel Corp. under its intellectual property
18  * rights.  You may have additional license terms from the party that provided
19  * you this software, covering your right to use that party's intellectual
20  * property rights.
21  *
22  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
23  * copy of the source code appearing in this file ("Covered Code") an
24  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
25  * base code distributed originally by Intel ("Original Intel Code") to copy,
26  * make derivatives, distribute, use and display any portion of the Covered
27  * Code in any form, with the right to sublicense such rights; and
28  *
29  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
30  * license (with the right to sublicense), under only those claims of Intel
31  * patents that are infringed by the Original Intel Code, to make, use, sell,
32  * offer to sell, and import the Covered Code and derivative works thereof
33  * solely to the minimum extent necessary to exercise the above copyright
34  * license, and in no event shall the patent license extend to any additions
35  * to or modifications of the Original Intel Code.  No other license or right
36  * is granted directly or by implication, estoppel or otherwise;
37  *
38  * The above copyright and patent license is granted only if the following
39  * conditions are met:
40  *
41  * 3. Conditions
42  *
43  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
44  * Redistribution of source code of any substantial portion of the Covered
45  * Code or modification with rights to further distribute source must include
46  * the above Copyright Notice, the above License, this list of Conditions,
47  * and the following Disclaimer and Export Compliance provision.  In addition,
48  * Licensee must cause all Covered Code to which Licensee contributes to
49  * contain a file documenting the changes Licensee made to create that Covered
50  * Code and the date of any change.  Licensee must include in that file the
51  * documentation of any changes made by any predecessor Licensee.  Licensee
52  * must include a prominent statement that the modification is derived,
53  * directly or indirectly, from Original Intel Code.
54  *
55  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
56  * Redistribution of source code of any substantial portion of the Covered
57  * Code or modification without rights to further distribute source must
58  * include the following Disclaimer and Export Compliance provision in the
59  * documentation and/or other materials provided with distribution.  In
60  * addition, Licensee may not authorize further sublicense of source of any
61  * portion of the Covered Code, and must include terms to the effect that the
62  * license from Licensee to its licensee is limited to the intellectual
63  * property embodied in the software Licensee provides to its licensee, and
64  * not to intellectual property embodied in modifications its licensee may
65  * make.
66  *
67  * 3.3. Redistribution of Executable. Redistribution in executable form of any
68  * substantial portion of the Covered Code or modification must reproduce the
69  * above Copyright Notice, and the following Disclaimer and Export Compliance
70  * provision in the documentation and/or other materials provided with the
71  * distribution.
72  *
73  * 3.4. Intel retains all right, title, and interest in and to the Original
74  * Intel Code.
75  *
76  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
77  * Intel shall be used in advertising or otherwise to promote the sale, use or
78  * other dealings in products derived from or relating to the Covered Code
79  * without prior written authorization from Intel.
80  *
81  * 4. Disclaimer and Export Compliance
82  *
83  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
84  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
85  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
86  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
87  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
88  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
89  * PARTICULAR PURPOSE.
90  *
91  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
92  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
93  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
94  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
95  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
96  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
97  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
98  * LIMITED REMEDY.
99  *
100  * 4.3. Licensee shall not export, either directly or indirectly, any of this
101  * software or system incorporating such software without first obtaining any
102  * required license or other approval from the U. S. Department of Commerce or
103  * any other agency or department of the United States Government.  In the
104  * event Licensee exports any such software from the United States or
105  * re-exports any such software from a foreign destination, Licensee shall
106  * ensure that the distribution and export/re-export of the software is in
107  * compliance with all laws, regulations, orders, or other restrictions of the
108  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
109  * any of its subsidiaries will export/re-export any technical data, process,
110  * software, or service, directly or indirectly, to any country for which the
111  * United States government or any agency thereof requires an export license,
112  * other governmental approval, or letter of assurance, without first obtaining
113  * such license, approval or letter.
114  *
115  *****************************************************************************/
116
117 #define __UTGLOBAL_C__
118 #define DEFINE_ACPI_GLOBALS
119
120 #include "acpi.h"
121 #include "acnamesp.h"
122
123 ACPI_EXPORT_SYMBOL (AcpiGbl_FADT)
124
125 #define _COMPONENT          ACPI_UTILITIES
126         ACPI_MODULE_NAME    ("utglobal")
127
128
129 /*******************************************************************************
130  *
131  * Static global variable initialization.
132  *
133  ******************************************************************************/
134
135 /*
136  * We want the debug switches statically initialized so they
137  * are already set when the debugger is entered.
138  */
139
140 /* Debug switch - level and trace mask */
141
142 #ifdef ACPI_DEBUG_OUTPUT
143 UINT32                      AcpiDbgLevel = ACPI_DEBUG_DEFAULT;
144 #else
145 UINT32                      AcpiDbgLevel = ACPI_NORMAL_DEFAULT;
146 #endif
147
148 /* Debug switch - layer (component) mask */
149
150 UINT32                      AcpiDbgLayer = ACPI_COMPONENT_DEFAULT;
151 UINT32                      AcpiGbl_NestingLevel = 0;
152
153 /* Debugger globals */
154
155 BOOLEAN                     AcpiGbl_DbTerminateThreads = FALSE;
156 BOOLEAN                     AcpiGbl_AbortMethod = FALSE;
157 BOOLEAN                     AcpiGbl_MethodExecuting = FALSE;
158
159 /* System flags */
160
161 UINT32                      AcpiGbl_StartupFlags = 0;
162
163 /* System starts uninitialized */
164
165 BOOLEAN                     AcpiGbl_Shutdown = TRUE;
166
167 const char                  *AcpiGbl_SleepStateNames[ACPI_S_STATE_COUNT] =
168 {
169     "\\_S0_",
170     "\\_S1_",
171     "\\_S2_",
172     "\\_S3_",
173     "\\_S4_",
174     "\\_S5_"
175 };
176
177 const char                  *AcpiGbl_HighestDstateNames[4] =
178 {
179     "_S1D",
180     "_S2D",
181     "_S3D",
182     "_S4D"
183 };
184
185
186 /*******************************************************************************
187  *
188  * FUNCTION:    AcpiFormatException
189  *
190  * PARAMETERS:  Status       - The ACPI_STATUS code to be formatted
191  *
192  * RETURN:      A string containing the exception text. A valid pointer is
193  *              always returned.
194  *
195  * DESCRIPTION: This function translates an ACPI exception into an ASCII string
196  *              It is here instead of utxface.c so it is always present.
197  *
198  ******************************************************************************/
199
200 const char *
201 AcpiFormatException (
202     ACPI_STATUS             Status)
203 {
204     const char              *Exception = NULL;
205
206
207     ACPI_FUNCTION_ENTRY ();
208
209
210     Exception = AcpiUtValidateException (Status);
211     if (!Exception)
212     {
213         /* Exception code was not recognized */
214
215         ACPI_ERROR ((AE_INFO,
216             "Unknown exception code: 0x%8.8X", Status));
217
218         Exception = "UNKNOWN_STATUS_CODE";
219     }
220
221     return (ACPI_CAST_PTR (const char, Exception));
222 }
223
224 ACPI_EXPORT_SYMBOL (AcpiFormatException)
225
226
227 /*******************************************************************************
228  *
229  * Namespace globals
230  *
231  ******************************************************************************/
232
233 /*
234  * Predefined ACPI Names (Built-in to the Interpreter)
235  *
236  * NOTES:
237  * 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
238  *    during the initialization sequence.
239  * 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
240  *    perform a Notify() operation on it.
241  */
242 const ACPI_PREDEFINED_NAMES     AcpiGbl_PreDefinedNames[] =
243 {
244     {"_GPE",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
245     {"_PR_",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
246     {"_SB_",    ACPI_TYPE_DEVICE,           NULL},
247     {"_SI_",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
248     {"_TZ_",    ACPI_TYPE_THERMAL,          NULL},
249     {"_REV",    ACPI_TYPE_INTEGER,          (char *) ACPI_CA_SUPPORT_LEVEL},
250     {"_OS_",    ACPI_TYPE_STRING,           ACPI_OS_NAME},
251     {"_GL_",    ACPI_TYPE_MUTEX,            (char *) 1},
252
253 #if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
254     {"_OSI",    ACPI_TYPE_METHOD,           (char *) 1},
255 #endif
256
257     /* Table terminator */
258
259     {NULL,      ACPI_TYPE_ANY,              NULL}
260 };
261
262 /*
263  * Properties of the ACPI Object Types, both internal and external.
264  * The table is indexed by values of ACPI_OBJECT_TYPE
265  */
266 const UINT8                     AcpiGbl_NsProperties[] =
267 {
268     ACPI_NS_NORMAL,                     /* 00 Any              */
269     ACPI_NS_NORMAL,                     /* 01 Number           */
270     ACPI_NS_NORMAL,                     /* 02 String           */
271     ACPI_NS_NORMAL,                     /* 03 Buffer           */
272     ACPI_NS_NORMAL,                     /* 04 Package          */
273     ACPI_NS_NORMAL,                     /* 05 FieldUnit        */
274     ACPI_NS_NEWSCOPE,                   /* 06 Device           */
275     ACPI_NS_NORMAL,                     /* 07 Event            */
276     ACPI_NS_NEWSCOPE,                   /* 08 Method           */
277     ACPI_NS_NORMAL,                     /* 09 Mutex            */
278     ACPI_NS_NORMAL,                     /* 10 Region           */
279     ACPI_NS_NEWSCOPE,                   /* 11 Power            */
280     ACPI_NS_NEWSCOPE,                   /* 12 Processor        */
281     ACPI_NS_NEWSCOPE,                   /* 13 Thermal          */
282     ACPI_NS_NORMAL,                     /* 14 BufferField      */
283     ACPI_NS_NORMAL,                     /* 15 DdbHandle        */
284     ACPI_NS_NORMAL,                     /* 16 Debug Object     */
285     ACPI_NS_NORMAL,                     /* 17 DefField         */
286     ACPI_NS_NORMAL,                     /* 18 BankField        */
287     ACPI_NS_NORMAL,                     /* 19 IndexField       */
288     ACPI_NS_NORMAL,                     /* 20 Reference        */
289     ACPI_NS_NORMAL,                     /* 21 Alias            */
290     ACPI_NS_NORMAL,                     /* 22 MethodAlias      */
291     ACPI_NS_NORMAL,                     /* 23 Notify           */
292     ACPI_NS_NORMAL,                     /* 24 Address Handler  */
293     ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 25 Resource Desc    */
294     ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 26 Resource Field   */
295     ACPI_NS_NEWSCOPE,                   /* 27 Scope            */
296     ACPI_NS_NORMAL,                     /* 28 Extra            */
297     ACPI_NS_NORMAL,                     /* 29 Data             */
298     ACPI_NS_NORMAL                      /* 30 Invalid          */
299 };
300
301
302 /* Hex to ASCII conversion table */
303
304 static const char           AcpiGbl_HexToAscii[] =
305 {
306     '0','1','2','3','4','5','6','7',
307     '8','9','A','B','C','D','E','F'
308 };
309
310
311 /*******************************************************************************
312  *
313  * FUNCTION:    AcpiUtHexToAsciiChar
314  *
315  * PARAMETERS:  Integer             - Contains the hex digit
316  *              Position            - bit position of the digit within the
317  *                                    integer (multiple of 4)
318  *
319  * RETURN:      The converted Ascii character
320  *
321  * DESCRIPTION: Convert a hex digit to an Ascii character
322  *
323  ******************************************************************************/
324
325 char
326 AcpiUtHexToAsciiChar (
327     ACPI_INTEGER            Integer,
328     UINT32                  Position)
329 {
330
331     return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]);
332 }
333
334
335 /******************************************************************************
336  *
337  * Event and Hardware globals
338  *
339  ******************************************************************************/
340
341 ACPI_BIT_REGISTER_INFO      AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG] =
342 {
343     /* Name                                     Parent Register             Register Bit Position                   Register Bit Mask       */
344
345     /* ACPI_BITREG_TIMER_STATUS         */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_TIMER_STATUS,          ACPI_BITMASK_TIMER_STATUS},
346     /* ACPI_BITREG_BUS_MASTER_STATUS    */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_BUS_MASTER_STATUS,     ACPI_BITMASK_BUS_MASTER_STATUS},
347     /* ACPI_BITREG_GLOBAL_LOCK_STATUS   */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_GLOBAL_LOCK_STATUS,    ACPI_BITMASK_GLOBAL_LOCK_STATUS},
348     /* ACPI_BITREG_POWER_BUTTON_STATUS  */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_POWER_BUTTON_STATUS,   ACPI_BITMASK_POWER_BUTTON_STATUS},
349     /* ACPI_BITREG_SLEEP_BUTTON_STATUS  */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_SLEEP_BUTTON_STATUS,   ACPI_BITMASK_SLEEP_BUTTON_STATUS},
350     /* ACPI_BITREG_RT_CLOCK_STATUS      */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_RT_CLOCK_STATUS,       ACPI_BITMASK_RT_CLOCK_STATUS},
351     /* ACPI_BITREG_WAKE_STATUS          */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_WAKE_STATUS,           ACPI_BITMASK_WAKE_STATUS},
352     /* ACPI_BITREG_PCIEXP_WAKE_STATUS   */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_PCIEXP_WAKE_STATUS,    ACPI_BITMASK_PCIEXP_WAKE_STATUS},
353
354     /* ACPI_BITREG_TIMER_ENABLE         */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_TIMER_ENABLE,          ACPI_BITMASK_TIMER_ENABLE},
355     /* ACPI_BITREG_GLOBAL_LOCK_ENABLE   */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE,    ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
356     /* ACPI_BITREG_POWER_BUTTON_ENABLE  */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_POWER_BUTTON_ENABLE,   ACPI_BITMASK_POWER_BUTTON_ENABLE},
357     /* ACPI_BITREG_SLEEP_BUTTON_ENABLE  */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE,   ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
358     /* ACPI_BITREG_RT_CLOCK_ENABLE      */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_RT_CLOCK_ENABLE,       ACPI_BITMASK_RT_CLOCK_ENABLE},
359     /* ACPI_BITREG_WAKE_ENABLE          */   {ACPI_REGISTER_PM1_ENABLE,   0,                                      0},
360     /* ACPI_BITREG_PCIEXP_WAKE_DISABLE  */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE,   ACPI_BITMASK_PCIEXP_WAKE_DISABLE},
361
362     /* ACPI_BITREG_SCI_ENABLE           */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SCI_ENABLE,            ACPI_BITMASK_SCI_ENABLE},
363     /* ACPI_BITREG_BUS_MASTER_RLD       */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_BUS_MASTER_RLD,        ACPI_BITMASK_BUS_MASTER_RLD},
364     /* ACPI_BITREG_GLOBAL_LOCK_RELEASE  */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE,   ACPI_BITMASK_GLOBAL_LOCK_RELEASE},
365     /* ACPI_BITREG_SLEEP_TYPE_A         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_TYPE_X,          ACPI_BITMASK_SLEEP_TYPE_X},
366     /* ACPI_BITREG_SLEEP_TYPE_B         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_TYPE_X,          ACPI_BITMASK_SLEEP_TYPE_X},
367     /* ACPI_BITREG_SLEEP_ENABLE         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_ENABLE,          ACPI_BITMASK_SLEEP_ENABLE},
368
369     /* ACPI_BITREG_ARB_DIS              */   {ACPI_REGISTER_PM2_CONTROL,  ACPI_BITPOSITION_ARB_DISABLE,           ACPI_BITMASK_ARB_DISABLE}
370 };
371
372
373 ACPI_FIXED_EVENT_INFO       AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] =
374 {
375     /* ACPI_EVENT_PMTIMER       */  {ACPI_BITREG_TIMER_STATUS,          ACPI_BITREG_TIMER_ENABLE,        ACPI_BITMASK_TIMER_STATUS,          ACPI_BITMASK_TIMER_ENABLE},
376     /* ACPI_EVENT_GLOBAL        */  {ACPI_BITREG_GLOBAL_LOCK_STATUS,    ACPI_BITREG_GLOBAL_LOCK_ENABLE,  ACPI_BITMASK_GLOBAL_LOCK_STATUS,    ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
377     /* ACPI_EVENT_POWER_BUTTON  */  {ACPI_BITREG_POWER_BUTTON_STATUS,   ACPI_BITREG_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_STATUS,   ACPI_BITMASK_POWER_BUTTON_ENABLE},
378     /* ACPI_EVENT_SLEEP_BUTTON  */  {ACPI_BITREG_SLEEP_BUTTON_STATUS,   ACPI_BITREG_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_STATUS,   ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
379     /* ACPI_EVENT_RTC           */  {ACPI_BITREG_RT_CLOCK_STATUS,       ACPI_BITREG_RT_CLOCK_ENABLE,     ACPI_BITMASK_RT_CLOCK_STATUS,       ACPI_BITMASK_RT_CLOCK_ENABLE},
380 };
381
382 /*******************************************************************************
383  *
384  * FUNCTION:    AcpiUtGetRegionName
385  *
386  * PARAMETERS:  None.
387  *
388  * RETURN:      Status
389  *
390  * DESCRIPTION: Translate a Space ID into a name string (Debug only)
391  *
392  ******************************************************************************/
393
394 /* Region type decoding */
395
396 const char        *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
397 {
398     "SystemMemory",
399     "SystemIO",
400     "PCI_Config",
401     "EmbeddedControl",
402     "SMBus",
403     "CMOS",
404     "PCIBARTarget",
405     "DataTable"
406 };
407
408
409 char *
410 AcpiUtGetRegionName (
411     UINT8                   SpaceId)
412 {
413
414     if (SpaceId >= ACPI_USER_REGION_BEGIN)
415     {
416         return ("UserDefinedRegion");
417     }
418     else if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS)
419     {
420         return ("InvalidSpaceId");
421     }
422
423     return (ACPI_CAST_PTR (char, AcpiGbl_RegionTypes[SpaceId]));
424 }
425
426
427 /*******************************************************************************
428  *
429  * FUNCTION:    AcpiUtGetEventName
430  *
431  * PARAMETERS:  None.
432  *
433  * RETURN:      Status
434  *
435  * DESCRIPTION: Translate a Event ID into a name string (Debug only)
436  *
437  ******************************************************************************/
438
439 /* Event type decoding */
440
441 static const char        *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] =
442 {
443     "PM_Timer",
444     "GlobalLock",
445     "PowerButton",
446     "SleepButton",
447     "RealTimeClock",
448 };
449
450
451 char *
452 AcpiUtGetEventName (
453     UINT32                  EventId)
454 {
455
456     if (EventId > ACPI_EVENT_MAX)
457     {
458         return ("InvalidEventID");
459     }
460
461     return (ACPI_CAST_PTR (char, AcpiGbl_EventTypes[EventId]));
462 }
463
464
465 /*******************************************************************************
466  *
467  * FUNCTION:    AcpiUtGetTypeName
468  *
469  * PARAMETERS:  None.
470  *
471  * RETURN:      Status
472  *
473  * DESCRIPTION: Translate a Type ID into a name string (Debug only)
474  *
475  ******************************************************************************/
476
477 /*
478  * Elements of AcpiGbl_NsTypeNames below must match
479  * one-to-one with values of ACPI_OBJECT_TYPE
480  *
481  * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching;
482  * when stored in a table it really means that we have thus far seen no
483  * evidence to indicate what type is actually going to be stored for this entry.
484  */
485 static const char           AcpiGbl_BadType[] = "UNDEFINED";
486
487 /* Printable names of the ACPI object types */
488
489 static const char           *AcpiGbl_NsTypeNames[] =
490 {
491     /* 00 */ "Untyped",
492     /* 01 */ "Integer",
493     /* 02 */ "String",
494     /* 03 */ "Buffer",
495     /* 04 */ "Package",
496     /* 05 */ "FieldUnit",
497     /* 06 */ "Device",
498     /* 07 */ "Event",
499     /* 08 */ "Method",
500     /* 09 */ "Mutex",
501     /* 10 */ "Region",
502     /* 11 */ "Power",
503     /* 12 */ "Processor",
504     /* 13 */ "Thermal",
505     /* 14 */ "BufferField",
506     /* 15 */ "DdbHandle",
507     /* 16 */ "DebugObject",
508     /* 17 */ "RegionField",
509     /* 18 */ "BankField",
510     /* 19 */ "IndexField",
511     /* 20 */ "Reference",
512     /* 21 */ "Alias",
513     /* 22 */ "MethodAlias",
514     /* 23 */ "Notify",
515     /* 24 */ "AddrHandler",
516     /* 25 */ "ResourceDesc",
517     /* 26 */ "ResourceFld",
518     /* 27 */ "Scope",
519     /* 28 */ "Extra",
520     /* 29 */ "Data",
521     /* 30 */ "Invalid"
522 };
523
524
525 char *
526 AcpiUtGetTypeName (
527     ACPI_OBJECT_TYPE        Type)
528 {
529
530     if (Type > ACPI_TYPE_INVALID)
531     {
532         return (ACPI_CAST_PTR (char, AcpiGbl_BadType));
533     }
534
535     return (ACPI_CAST_PTR (char, AcpiGbl_NsTypeNames[Type]));
536 }
537
538
539 char *
540 AcpiUtGetObjectTypeName (
541     ACPI_OPERAND_OBJECT     *ObjDesc)
542 {
543
544     if (!ObjDesc)
545     {
546         return ("[NULL Object Descriptor]");
547     }
548
549     return (AcpiUtGetTypeName (ACPI_GET_OBJECT_TYPE (ObjDesc)));
550 }
551
552
553 /*******************************************************************************
554  *
555  * FUNCTION:    AcpiUtGetNodeName
556  *
557  * PARAMETERS:  Object               - A namespace node
558  *
559  * RETURN:      Pointer to a string
560  *
561  * DESCRIPTION: Validate the node and return the node's ACPI name.
562  *
563  ******************************************************************************/
564
565 char *
566 AcpiUtGetNodeName (
567     void                    *Object)
568 {
569     ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) Object;
570
571
572     /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */
573
574     if (!Object)
575     {
576         return ("NULL");
577     }
578
579     /* Check for Root node */
580
581     if ((Object == ACPI_ROOT_OBJECT) ||
582         (Object == AcpiGbl_RootNode))
583     {
584         return ("\"\\\" ");
585     }
586
587     /* Descriptor must be a namespace node */
588
589     if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
590     {
591         return ("####");
592     }
593
594     /* Name must be a valid ACPI name */
595
596     if (!AcpiUtValidAcpiName (Node->Name.Integer))
597     {
598         Node->Name.Integer = AcpiUtRepairName (Node->Name.Ascii);
599     }
600
601     /* Return the name */
602
603     return (Node->Name.Ascii);
604 }
605
606
607 /*******************************************************************************
608  *
609  * FUNCTION:    AcpiUtGetDescriptorName
610  *
611  * PARAMETERS:  Object               - An ACPI object
612  *
613  * RETURN:      Pointer to a string
614  *
615  * DESCRIPTION: Validate object and return the descriptor type
616  *
617  ******************************************************************************/
618
619 /* Printable names of object descriptor types */
620
621 static const char           *AcpiGbl_DescTypeNames[] =
622 {
623     /* 00 */ "Invalid",
624     /* 01 */ "Cached",
625     /* 02 */ "State-Generic",
626     /* 03 */ "State-Update",
627     /* 04 */ "State-Package",
628     /* 05 */ "State-Control",
629     /* 06 */ "State-RootParseScope",
630     /* 07 */ "State-ParseScope",
631     /* 08 */ "State-WalkScope",
632     /* 09 */ "State-Result",
633     /* 10 */ "State-Notify",
634     /* 11 */ "State-Thread",
635     /* 12 */ "Walk",
636     /* 13 */ "Parser",
637     /* 14 */ "Operand",
638     /* 15 */ "Node"
639 };
640
641
642 char *
643 AcpiUtGetDescriptorName (
644     void                    *Object)
645 {
646
647     if (!Object)
648     {
649         return ("NULL OBJECT");
650     }
651
652     if (ACPI_GET_DESCRIPTOR_TYPE (Object) > ACPI_DESC_TYPE_MAX)
653     {
654         return (ACPI_CAST_PTR (char, AcpiGbl_BadType));
655     }
656
657     return (ACPI_CAST_PTR (char,
658         AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)]));
659
660 }
661
662
663 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
664 /*
665  * Strings and procedures used for debug only
666  */
667
668 /*******************************************************************************
669  *
670  * FUNCTION:    AcpiUtGetMutexName
671  *
672  * PARAMETERS:  MutexId         - The predefined ID for this mutex.
673  *
674  * RETURN:      String containing the name of the mutex. Always returns a valid
675  *              pointer.
676  *
677  * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
678  *
679  ******************************************************************************/
680
681 char *
682 AcpiUtGetMutexName (
683     UINT32                  MutexId)
684 {
685
686     if (MutexId > ACPI_MAX_MUTEX)
687     {
688         return ("Invalid Mutex ID");
689     }
690
691     return (AcpiGbl_MutexNames[MutexId]);
692 }
693 #endif
694
695
696 /*******************************************************************************
697  *
698  * FUNCTION:    AcpiUtValidObjectType
699  *
700  * PARAMETERS:  Type            - Object type to be validated
701  *
702  * RETURN:      TRUE if valid object type, FALSE otherwise
703  *
704  * DESCRIPTION: Validate an object type
705  *
706  ******************************************************************************/
707
708 BOOLEAN
709 AcpiUtValidObjectType (
710     ACPI_OBJECT_TYPE        Type)
711 {
712
713     if (Type > ACPI_TYPE_LOCAL_MAX)
714     {
715         /* Note: Assumes all TYPEs are contiguous (external/local) */
716
717         return (FALSE);
718     }
719
720     return (TRUE);
721 }
722
723
724 /*******************************************************************************
725  *
726  * FUNCTION:    AcpiUtInitGlobals
727  *
728  * PARAMETERS:  None
729  *
730  * RETURN:      None
731  *
732  * DESCRIPTION: Init library globals.  All globals that require specific
733  *              initialization should be initialized here!
734  *
735  ******************************************************************************/
736
737 void
738 AcpiUtInitGlobals (
739     void)
740 {
741     ACPI_STATUS             Status;
742     UINT32                  i;
743
744
745     ACPI_FUNCTION_TRACE (UtInitGlobals);
746
747
748     /* Create all memory caches */
749
750     Status = AcpiUtCreateCaches ();
751     if (ACPI_FAILURE (Status))
752     {
753         return;
754     }
755
756     /* Mutex locked flags */
757
758     for (i = 0; i < ACPI_NUM_MUTEX; i++)
759     {
760         AcpiGbl_MutexInfo[i].Mutex          = NULL;
761         AcpiGbl_MutexInfo[i].ThreadId       = ACPI_MUTEX_NOT_ACQUIRED;
762         AcpiGbl_MutexInfo[i].UseCount       = 0;
763     }
764
765     for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++)
766     {
767         AcpiGbl_OwnerIdMask[i]              = 0;
768     }
769     AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000; /* Last ID is never valid */
770
771     /* GPE support */
772
773     AcpiGpeCount                        = 0;
774     AcpiGbl_GpeXruptListHead            = NULL;
775     AcpiGbl_GpeFadtBlocks[0]            = NULL;
776     AcpiGbl_GpeFadtBlocks[1]            = NULL;
777
778     /* Global notify handlers */
779
780     AcpiGbl_SystemNotify.Handler        = NULL;
781     AcpiGbl_DeviceNotify.Handler        = NULL;
782     AcpiGbl_ExceptionHandler            = NULL;
783     AcpiGbl_InitHandler                 = NULL;
784
785     /* Global Lock support */
786
787     AcpiGbl_GlobalLockSemaphore         = NULL;
788     AcpiGbl_GlobalLockMutex             = NULL;
789     AcpiGbl_GlobalLockAcquired          = FALSE;
790     AcpiGbl_GlobalLockHandle            = 0;
791
792     /* Miscellaneous variables */
793
794     AcpiGbl_CmSingleStep                = FALSE;
795     AcpiGbl_DbTerminateThreads          = FALSE;
796     AcpiGbl_Shutdown                    = FALSE;
797     AcpiGbl_NsLookupCount               = 0;
798     AcpiGbl_PsFindCount                 = 0;
799     AcpiGbl_AcpiHardwarePresent         = TRUE;
800     AcpiGbl_LastOwnerIdIndex            = 0;
801     AcpiGbl_NextOwnerIdOffset           = 0;
802     AcpiGbl_TraceMethodName             = 0;
803     AcpiGbl_TraceDbgLevel               = 0;
804     AcpiGbl_TraceDbgLayer               = 0;
805     AcpiGbl_DebuggerConfiguration       = DEBUGGER_THREADING;
806     AcpiGbl_DbOutputFlags               = ACPI_DB_CONSOLE_OUTPUT;
807
808     /* Hardware oriented */
809
810     AcpiGbl_EventsInitialized           = FALSE;
811     AcpiGbl_SystemAwakeAndRunning       = TRUE;
812
813     /* Namespace */
814
815     AcpiGbl_RootNode                    = NULL;
816     AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
817     AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
818     AcpiGbl_RootNodeStruct.Type         = ACPI_TYPE_DEVICE;
819     AcpiGbl_RootNodeStruct.Child        = NULL;
820     AcpiGbl_RootNodeStruct.Peer         = NULL;
821     AcpiGbl_RootNodeStruct.Object       = NULL;
822     AcpiGbl_RootNodeStruct.Flags        = ANOBJ_END_OF_PEER_LIST;
823
824
825 #ifdef ACPI_DEBUG_OUTPUT
826     AcpiGbl_LowestStackPointer          = ACPI_SIZE_MAX;
827 #endif
828
829     return_VOID;
830 }
831
832 /* Public globals */
833
834 ACPI_EXPORT_SYMBOL (AcpiDbgLevel)
835 ACPI_EXPORT_SYMBOL (AcpiDbgLayer)
836 ACPI_EXPORT_SYMBOL (AcpiGpeCount)
837
838