13446Smrj /******************************************************************************
23446Smrj  *
33446Smrj  * Module Name: utglobal - Global variables for the ACPI subsystem
4*7851SDana.Myers@Sun.COM  *              $Revision: 1.256 $
53446Smrj  *
63446Smrj  *****************************************************************************/
73446Smrj 
83446Smrj /******************************************************************************
93446Smrj  *
103446Smrj  * 1. Copyright Notice
113446Smrj  *
12*7851SDana.Myers@Sun.COM  * Some or all of this work - Copyright (c) 1999 - 2008, Intel Corp.
133446Smrj  * All rights reserved.
143446Smrj  *
153446Smrj  * 2. License
163446Smrj  *
173446Smrj  * 2.1. This is your license from Intel Corp. under its intellectual property
183446Smrj  * rights.  You may have additional license terms from the party that provided
193446Smrj  * you this software, covering your right to use that party's intellectual
203446Smrj  * property rights.
213446Smrj  *
223446Smrj  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
233446Smrj  * copy of the source code appearing in this file ("Covered Code") an
243446Smrj  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
253446Smrj  * base code distributed originally by Intel ("Original Intel Code") to copy,
263446Smrj  * make derivatives, distribute, use and display any portion of the Covered
273446Smrj  * Code in any form, with the right to sublicense such rights; and
283446Smrj  *
293446Smrj  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
303446Smrj  * license (with the right to sublicense), under only those claims of Intel
313446Smrj  * patents that are infringed by the Original Intel Code, to make, use, sell,
323446Smrj  * offer to sell, and import the Covered Code and derivative works thereof
333446Smrj  * solely to the minimum extent necessary to exercise the above copyright
343446Smrj  * license, and in no event shall the patent license extend to any additions
353446Smrj  * to or modifications of the Original Intel Code.  No other license or right
363446Smrj  * is granted directly or by implication, estoppel or otherwise;
373446Smrj  *
383446Smrj  * The above copyright and patent license is granted only if the following
393446Smrj  * conditions are met:
403446Smrj  *
413446Smrj  * 3. Conditions
423446Smrj  *
433446Smrj  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
443446Smrj  * Redistribution of source code of any substantial portion of the Covered
453446Smrj  * Code or modification with rights to further distribute source must include
463446Smrj  * the above Copyright Notice, the above License, this list of Conditions,
473446Smrj  * and the following Disclaimer and Export Compliance provision.  In addition,
483446Smrj  * Licensee must cause all Covered Code to which Licensee contributes to
493446Smrj  * contain a file documenting the changes Licensee made to create that Covered
503446Smrj  * Code and the date of any change.  Licensee must include in that file the
513446Smrj  * documentation of any changes made by any predecessor Licensee.  Licensee
523446Smrj  * must include a prominent statement that the modification is derived,
533446Smrj  * directly or indirectly, from Original Intel Code.
543446Smrj  *
553446Smrj  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
563446Smrj  * Redistribution of source code of any substantial portion of the Covered
573446Smrj  * Code or modification without rights to further distribute source must
583446Smrj  * include the following Disclaimer and Export Compliance provision in the
593446Smrj  * documentation and/or other materials provided with distribution.  In
603446Smrj  * addition, Licensee may not authorize further sublicense of source of any
613446Smrj  * portion of the Covered Code, and must include terms to the effect that the
623446Smrj  * license from Licensee to its licensee is limited to the intellectual
633446Smrj  * property embodied in the software Licensee provides to its licensee, and
643446Smrj  * not to intellectual property embodied in modifications its licensee may
653446Smrj  * make.
663446Smrj  *
673446Smrj  * 3.3. Redistribution of Executable. Redistribution in executable form of any
683446Smrj  * substantial portion of the Covered Code or modification must reproduce the
693446Smrj  * above Copyright Notice, and the following Disclaimer and Export Compliance
703446Smrj  * provision in the documentation and/or other materials provided with the
713446Smrj  * distribution.
723446Smrj  *
733446Smrj  * 3.4. Intel retains all right, title, and interest in and to the Original
743446Smrj  * Intel Code.
753446Smrj  *
763446Smrj  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
773446Smrj  * Intel shall be used in advertising or otherwise to promote the sale, use or
783446Smrj  * other dealings in products derived from or relating to the Covered Code
793446Smrj  * without prior written authorization from Intel.
803446Smrj  *
813446Smrj  * 4. Disclaimer and Export Compliance
823446Smrj  *
833446Smrj  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
843446Smrj  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
853446Smrj  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
863446Smrj  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
873446Smrj  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
883446Smrj  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
893446Smrj  * PARTICULAR PURPOSE.
903446Smrj  *
913446Smrj  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
923446Smrj  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
933446Smrj  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
943446Smrj  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
953446Smrj  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
963446Smrj  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
973446Smrj  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
983446Smrj  * LIMITED REMEDY.
993446Smrj  *
1003446Smrj  * 4.3. Licensee shall not export, either directly or indirectly, any of this
1013446Smrj  * software or system incorporating such software without first obtaining any
1023446Smrj  * required license or other approval from the U. S. Department of Commerce or
1033446Smrj  * any other agency or department of the United States Government.  In the
1043446Smrj  * event Licensee exports any such software from the United States or
1053446Smrj  * re-exports any such software from a foreign destination, Licensee shall
1063446Smrj  * ensure that the distribution and export/re-export of the software is in
1073446Smrj  * compliance with all laws, regulations, orders, or other restrictions of the
1083446Smrj  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
1093446Smrj  * any of its subsidiaries will export/re-export any technical data, process,
1103446Smrj  * software, or service, directly or indirectly, to any country for which the
1113446Smrj  * United States government or any agency thereof requires an export license,
1123446Smrj  * other governmental approval, or letter of assurance, without first obtaining
1133446Smrj  * such license, approval or letter.
1143446Smrj  *
1153446Smrj  *****************************************************************************/
1163446Smrj 
1173446Smrj #define __UTGLOBAL_C__
1183446Smrj #define DEFINE_ACPI_GLOBALS
1193446Smrj 
1203446Smrj #include "acpi.h"
1213446Smrj #include "acnamesp.h"
1223446Smrj 
123*7851SDana.Myers@Sun.COM ACPI_EXPORT_SYMBOL (AcpiGbl_FADT)
124*7851SDana.Myers@Sun.COM 
1253446Smrj #define _COMPONENT          ACPI_UTILITIES
1263446Smrj         ACPI_MODULE_NAME    ("utglobal")
1273446Smrj 
1283446Smrj 
1293446Smrj /*******************************************************************************
1303446Smrj  *
1313446Smrj  * Static global variable initialization.
1323446Smrj  *
1333446Smrj  ******************************************************************************/
1343446Smrj 
1353446Smrj /*
1363446Smrj  * We want the debug switches statically initialized so they
1373446Smrj  * are already set when the debugger is entered.
1383446Smrj  */
1393446Smrj 
1403446Smrj /* Debug switch - level and trace mask */
1413446Smrj 
1423446Smrj #ifdef ACPI_DEBUG_OUTPUT
1433446Smrj UINT32                      AcpiDbgLevel = ACPI_DEBUG_DEFAULT;
1443446Smrj #else
1453446Smrj UINT32                      AcpiDbgLevel = ACPI_NORMAL_DEFAULT;
1463446Smrj #endif
1473446Smrj 
1483446Smrj /* Debug switch - layer (component) mask */
1493446Smrj 
1503446Smrj UINT32                      AcpiDbgLayer = ACPI_COMPONENT_DEFAULT;
1513446Smrj UINT32                      AcpiGbl_NestingLevel = 0;
1523446Smrj 
1533446Smrj /* Debugger globals */
1543446Smrj 
1553446Smrj BOOLEAN                     AcpiGbl_DbTerminateThreads = FALSE;
1563446Smrj BOOLEAN                     AcpiGbl_AbortMethod = FALSE;
1573446Smrj BOOLEAN                     AcpiGbl_MethodExecuting = FALSE;
1583446Smrj 
1593446Smrj /* System flags */
1603446Smrj 
1613446Smrj UINT32                      AcpiGbl_StartupFlags = 0;
1623446Smrj 
1633446Smrj /* System starts uninitialized */
1643446Smrj 
1653446Smrj BOOLEAN                     AcpiGbl_Shutdown = TRUE;
1663446Smrj 
1673446Smrj const char                  *AcpiGbl_SleepStateNames[ACPI_S_STATE_COUNT] =
1683446Smrj {
1693446Smrj     "\\_S0_",
1703446Smrj     "\\_S1_",
1713446Smrj     "\\_S2_",
1723446Smrj     "\\_S3_",
1733446Smrj     "\\_S4_",
1743446Smrj     "\\_S5_"
1753446Smrj };
1763446Smrj 
1773446Smrj const char                  *AcpiGbl_HighestDstateNames[4] =
1783446Smrj {
1793446Smrj     "_S1D",
1803446Smrj     "_S2D",
1813446Smrj     "_S3D",
1823446Smrj     "_S4D"
1833446Smrj };
1843446Smrj 
1853446Smrj 
1863446Smrj /*******************************************************************************
1873446Smrj  *
188*7851SDana.Myers@Sun.COM  * FUNCTION:    AcpiFormatException
189*7851SDana.Myers@Sun.COM  *
190*7851SDana.Myers@Sun.COM  * PARAMETERS:  Status       - The ACPI_STATUS code to be formatted
191*7851SDana.Myers@Sun.COM  *
192*7851SDana.Myers@Sun.COM  * RETURN:      A string containing the exception text. A valid pointer is
193*7851SDana.Myers@Sun.COM  *              always returned.
194*7851SDana.Myers@Sun.COM  *
195*7851SDana.Myers@Sun.COM  * DESCRIPTION: This function translates an ACPI exception into an ASCII string
196*7851SDana.Myers@Sun.COM  *              It is here instead of utxface.c so it is always present.
197*7851SDana.Myers@Sun.COM  *
198*7851SDana.Myers@Sun.COM  ******************************************************************************/
199*7851SDana.Myers@Sun.COM 
200*7851SDana.Myers@Sun.COM const char *
201*7851SDana.Myers@Sun.COM AcpiFormatException (
202*7851SDana.Myers@Sun.COM     ACPI_STATUS             Status)
203*7851SDana.Myers@Sun.COM {
204*7851SDana.Myers@Sun.COM     const char              *Exception = NULL;
205*7851SDana.Myers@Sun.COM 
206*7851SDana.Myers@Sun.COM 
207*7851SDana.Myers@Sun.COM     ACPI_FUNCTION_ENTRY ();
208*7851SDana.Myers@Sun.COM 
209*7851SDana.Myers@Sun.COM 
210*7851SDana.Myers@Sun.COM     Exception = AcpiUtValidateException (Status);
211*7851SDana.Myers@Sun.COM     if (!Exception)
212*7851SDana.Myers@Sun.COM     {
213*7851SDana.Myers@Sun.COM         /* Exception code was not recognized */
214*7851SDana.Myers@Sun.COM 
215*7851SDana.Myers@Sun.COM         ACPI_ERROR ((AE_INFO,
216*7851SDana.Myers@Sun.COM             "Unknown exception code: 0x%8.8X", Status));
217*7851SDana.Myers@Sun.COM 
218*7851SDana.Myers@Sun.COM         Exception = "UNKNOWN_STATUS_CODE";
219*7851SDana.Myers@Sun.COM     }
220*7851SDana.Myers@Sun.COM 
221*7851SDana.Myers@Sun.COM     return (ACPI_CAST_PTR (const char, Exception));
222*7851SDana.Myers@Sun.COM }
223*7851SDana.Myers@Sun.COM 
224*7851SDana.Myers@Sun.COM ACPI_EXPORT_SYMBOL (AcpiFormatException)
225*7851SDana.Myers@Sun.COM 
226*7851SDana.Myers@Sun.COM 
227*7851SDana.Myers@Sun.COM /*******************************************************************************
228*7851SDana.Myers@Sun.COM  *
2293446Smrj  * Namespace globals
2303446Smrj  *
2313446Smrj  ******************************************************************************/
2323446Smrj 
2333446Smrj /*
2343446Smrj  * Predefined ACPI Names (Built-in to the Interpreter)
2353446Smrj  *
2363446Smrj  * NOTES:
2373446Smrj  * 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
2383446Smrj  *    during the initialization sequence.
2393446Smrj  * 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
2403446Smrj  *    perform a Notify() operation on it.
2413446Smrj  */
2423446Smrj const ACPI_PREDEFINED_NAMES     AcpiGbl_PreDefinedNames[] =
2433446Smrj {
2443446Smrj     {"_GPE",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
2453446Smrj     {"_PR_",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
2463446Smrj     {"_SB_",    ACPI_TYPE_DEVICE,           NULL},
2473446Smrj     {"_SI_",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
2483446Smrj     {"_TZ_",    ACPI_TYPE_THERMAL,          NULL},
2493446Smrj     {"_REV",    ACPI_TYPE_INTEGER,          (char *) ACPI_CA_SUPPORT_LEVEL},
2503446Smrj     {"_OS_",    ACPI_TYPE_STRING,           ACPI_OS_NAME},
2513446Smrj     {"_GL_",    ACPI_TYPE_MUTEX,            (char *) 1},
2523446Smrj 
2533446Smrj #if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
2543446Smrj     {"_OSI",    ACPI_TYPE_METHOD,           (char *) 1},
2553446Smrj #endif
2563446Smrj 
2573446Smrj     /* Table terminator */
2583446Smrj 
2593446Smrj     {NULL,      ACPI_TYPE_ANY,              NULL}
2603446Smrj };
2613446Smrj 
2623446Smrj /*
2633446Smrj  * Properties of the ACPI Object Types, both internal and external.
2643446Smrj  * The table is indexed by values of ACPI_OBJECT_TYPE
2653446Smrj  */
266*7851SDana.Myers@Sun.COM const UINT8                     AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] =
2673446Smrj {
2683446Smrj     ACPI_NS_NORMAL,                     /* 00 Any              */
2693446Smrj     ACPI_NS_NORMAL,                     /* 01 Number           */
2703446Smrj     ACPI_NS_NORMAL,                     /* 02 String           */
2713446Smrj     ACPI_NS_NORMAL,                     /* 03 Buffer           */
2723446Smrj     ACPI_NS_NORMAL,                     /* 04 Package          */
2733446Smrj     ACPI_NS_NORMAL,                     /* 05 FieldUnit        */
2743446Smrj     ACPI_NS_NEWSCOPE,                   /* 06 Device           */
2753446Smrj     ACPI_NS_NORMAL,                     /* 07 Event            */
2763446Smrj     ACPI_NS_NEWSCOPE,                   /* 08 Method           */
2773446Smrj     ACPI_NS_NORMAL,                     /* 09 Mutex            */
2783446Smrj     ACPI_NS_NORMAL,                     /* 10 Region           */
2793446Smrj     ACPI_NS_NEWSCOPE,                   /* 11 Power            */
2803446Smrj     ACPI_NS_NEWSCOPE,                   /* 12 Processor        */
2813446Smrj     ACPI_NS_NEWSCOPE,                   /* 13 Thermal          */
2823446Smrj     ACPI_NS_NORMAL,                     /* 14 BufferField      */
2833446Smrj     ACPI_NS_NORMAL,                     /* 15 DdbHandle        */
2843446Smrj     ACPI_NS_NORMAL,                     /* 16 Debug Object     */
2853446Smrj     ACPI_NS_NORMAL,                     /* 17 DefField         */
2863446Smrj     ACPI_NS_NORMAL,                     /* 18 BankField        */
2873446Smrj     ACPI_NS_NORMAL,                     /* 19 IndexField       */
2883446Smrj     ACPI_NS_NORMAL,                     /* 20 Reference        */
2893446Smrj     ACPI_NS_NORMAL,                     /* 21 Alias            */
2903446Smrj     ACPI_NS_NORMAL,                     /* 22 MethodAlias      */
2913446Smrj     ACPI_NS_NORMAL,                     /* 23 Notify           */
2923446Smrj     ACPI_NS_NORMAL,                     /* 24 Address Handler  */
2933446Smrj     ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 25 Resource Desc    */
2943446Smrj     ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 26 Resource Field   */
2953446Smrj     ACPI_NS_NEWSCOPE,                   /* 27 Scope            */
2963446Smrj     ACPI_NS_NORMAL,                     /* 28 Extra            */
2973446Smrj     ACPI_NS_NORMAL,                     /* 29 Data             */
2983446Smrj     ACPI_NS_NORMAL                      /* 30 Invalid          */
2993446Smrj };
3003446Smrj 
3013446Smrj 
3023446Smrj /* Hex to ASCII conversion table */
3033446Smrj 
3043446Smrj static const char           AcpiGbl_HexToAscii[] =
3053446Smrj {
3063446Smrj     '0','1','2','3','4','5','6','7',
3073446Smrj     '8','9','A','B','C','D','E','F'
3083446Smrj };
3093446Smrj 
3103446Smrj 
3113446Smrj /*******************************************************************************
3123446Smrj  *
3133446Smrj  * FUNCTION:    AcpiUtHexToAsciiChar
3143446Smrj  *
3153446Smrj  * PARAMETERS:  Integer             - Contains the hex digit
3163446Smrj  *              Position            - bit position of the digit within the
3173446Smrj  *                                    integer (multiple of 4)
3183446Smrj  *
3193446Smrj  * RETURN:      The converted Ascii character
3203446Smrj  *
3213446Smrj  * DESCRIPTION: Convert a hex digit to an Ascii character
3223446Smrj  *
3233446Smrj  ******************************************************************************/
3243446Smrj 
3253446Smrj char
3263446Smrj AcpiUtHexToAsciiChar (
3273446Smrj     ACPI_INTEGER            Integer,
3283446Smrj     UINT32                  Position)
3293446Smrj {
3303446Smrj 
3313446Smrj     return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]);
3323446Smrj }
3333446Smrj 
3343446Smrj 
3353446Smrj /******************************************************************************
3363446Smrj  *
3373446Smrj  * Event and Hardware globals
3383446Smrj  *
3393446Smrj  ******************************************************************************/
3403446Smrj 
3413446Smrj ACPI_BIT_REGISTER_INFO      AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG] =
3423446Smrj {
3433446Smrj     /* Name                                     Parent Register             Register Bit Position                   Register Bit Mask       */
3443446Smrj 
3453446Smrj     /* ACPI_BITREG_TIMER_STATUS         */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_TIMER_STATUS,          ACPI_BITMASK_TIMER_STATUS},
3463446Smrj     /* ACPI_BITREG_BUS_MASTER_STATUS    */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_BUS_MASTER_STATUS,     ACPI_BITMASK_BUS_MASTER_STATUS},
3473446Smrj     /* ACPI_BITREG_GLOBAL_LOCK_STATUS   */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_GLOBAL_LOCK_STATUS,    ACPI_BITMASK_GLOBAL_LOCK_STATUS},
3483446Smrj     /* ACPI_BITREG_POWER_BUTTON_STATUS  */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_POWER_BUTTON_STATUS,   ACPI_BITMASK_POWER_BUTTON_STATUS},
3493446Smrj     /* ACPI_BITREG_SLEEP_BUTTON_STATUS  */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_SLEEP_BUTTON_STATUS,   ACPI_BITMASK_SLEEP_BUTTON_STATUS},
3503446Smrj     /* ACPI_BITREG_RT_CLOCK_STATUS      */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_RT_CLOCK_STATUS,       ACPI_BITMASK_RT_CLOCK_STATUS},
3513446Smrj     /* ACPI_BITREG_WAKE_STATUS          */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_WAKE_STATUS,           ACPI_BITMASK_WAKE_STATUS},
3523446Smrj     /* ACPI_BITREG_PCIEXP_WAKE_STATUS   */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_PCIEXP_WAKE_STATUS,    ACPI_BITMASK_PCIEXP_WAKE_STATUS},
3533446Smrj 
3543446Smrj     /* ACPI_BITREG_TIMER_ENABLE         */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_TIMER_ENABLE,          ACPI_BITMASK_TIMER_ENABLE},
3553446Smrj     /* ACPI_BITREG_GLOBAL_LOCK_ENABLE   */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE,    ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
3563446Smrj     /* ACPI_BITREG_POWER_BUTTON_ENABLE  */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_POWER_BUTTON_ENABLE,   ACPI_BITMASK_POWER_BUTTON_ENABLE},
3573446Smrj     /* ACPI_BITREG_SLEEP_BUTTON_ENABLE  */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE,   ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
3583446Smrj     /* ACPI_BITREG_RT_CLOCK_ENABLE      */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_RT_CLOCK_ENABLE,       ACPI_BITMASK_RT_CLOCK_ENABLE},
3593446Smrj     /* ACPI_BITREG_WAKE_ENABLE          */   {ACPI_REGISTER_PM1_ENABLE,   0,                                      0},
3603446Smrj     /* ACPI_BITREG_PCIEXP_WAKE_DISABLE  */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE,   ACPI_BITMASK_PCIEXP_WAKE_DISABLE},
3613446Smrj 
3623446Smrj     /* ACPI_BITREG_SCI_ENABLE           */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SCI_ENABLE,            ACPI_BITMASK_SCI_ENABLE},
3633446Smrj     /* ACPI_BITREG_BUS_MASTER_RLD       */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_BUS_MASTER_RLD,        ACPI_BITMASK_BUS_MASTER_RLD},
3643446Smrj     /* ACPI_BITREG_GLOBAL_LOCK_RELEASE  */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE,   ACPI_BITMASK_GLOBAL_LOCK_RELEASE},
3653446Smrj     /* ACPI_BITREG_SLEEP_TYPE_A         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_TYPE_X,          ACPI_BITMASK_SLEEP_TYPE_X},
3663446Smrj     /* ACPI_BITREG_SLEEP_TYPE_B         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_TYPE_X,          ACPI_BITMASK_SLEEP_TYPE_X},
3673446Smrj     /* ACPI_BITREG_SLEEP_ENABLE         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_ENABLE,          ACPI_BITMASK_SLEEP_ENABLE},
3683446Smrj 
3693446Smrj     /* ACPI_BITREG_ARB_DIS              */   {ACPI_REGISTER_PM2_CONTROL,  ACPI_BITPOSITION_ARB_DISABLE,           ACPI_BITMASK_ARB_DISABLE}
3703446Smrj };
3713446Smrj 
3723446Smrj 
3733446Smrj ACPI_FIXED_EVENT_INFO       AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] =
3743446Smrj {
3753446Smrj     /* ACPI_EVENT_PMTIMER       */  {ACPI_BITREG_TIMER_STATUS,          ACPI_BITREG_TIMER_ENABLE,        ACPI_BITMASK_TIMER_STATUS,          ACPI_BITMASK_TIMER_ENABLE},
3763446Smrj     /* ACPI_EVENT_GLOBAL        */  {ACPI_BITREG_GLOBAL_LOCK_STATUS,    ACPI_BITREG_GLOBAL_LOCK_ENABLE,  ACPI_BITMASK_GLOBAL_LOCK_STATUS,    ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
3773446Smrj     /* ACPI_EVENT_POWER_BUTTON  */  {ACPI_BITREG_POWER_BUTTON_STATUS,   ACPI_BITREG_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_STATUS,   ACPI_BITMASK_POWER_BUTTON_ENABLE},
3783446Smrj     /* ACPI_EVENT_SLEEP_BUTTON  */  {ACPI_BITREG_SLEEP_BUTTON_STATUS,   ACPI_BITREG_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_STATUS,   ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
3793446Smrj     /* ACPI_EVENT_RTC           */  {ACPI_BITREG_RT_CLOCK_STATUS,       ACPI_BITREG_RT_CLOCK_ENABLE,     ACPI_BITMASK_RT_CLOCK_STATUS,       ACPI_BITMASK_RT_CLOCK_ENABLE},
3803446Smrj };
3813446Smrj 
3823446Smrj /*******************************************************************************
3833446Smrj  *
3843446Smrj  * FUNCTION:    AcpiUtGetRegionName
3853446Smrj  *
3863446Smrj  * PARAMETERS:  None.
3873446Smrj  *
3883446Smrj  * RETURN:      Status
3893446Smrj  *
3903446Smrj  * DESCRIPTION: Translate a Space ID into a name string (Debug only)
3913446Smrj  *
3923446Smrj  ******************************************************************************/
3933446Smrj 
3943446Smrj /* Region type decoding */
3953446Smrj 
3963446Smrj const char        *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
3973446Smrj {
3983446Smrj     "SystemMemory",
3993446Smrj     "SystemIO",
4003446Smrj     "PCI_Config",
4013446Smrj     "EmbeddedControl",
4023446Smrj     "SMBus",
4033446Smrj     "CMOS",
4043446Smrj     "PCIBARTarget",
4053446Smrj     "DataTable"
4063446Smrj };
4073446Smrj 
4083446Smrj 
4093446Smrj char *
4103446Smrj AcpiUtGetRegionName (
4113446Smrj     UINT8                   SpaceId)
4123446Smrj {
4133446Smrj 
4143446Smrj     if (SpaceId >= ACPI_USER_REGION_BEGIN)
4153446Smrj     {
4163446Smrj         return ("UserDefinedRegion");
4173446Smrj     }
4183446Smrj     else if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS)
4193446Smrj     {
4203446Smrj         return ("InvalidSpaceId");
4213446Smrj     }
4223446Smrj 
4233446Smrj     return (ACPI_CAST_PTR (char, AcpiGbl_RegionTypes[SpaceId]));
4243446Smrj }
4253446Smrj 
4263446Smrj 
4273446Smrj /*******************************************************************************
4283446Smrj  *
4293446Smrj  * FUNCTION:    AcpiUtGetEventName
4303446Smrj  *
4313446Smrj  * PARAMETERS:  None.
4323446Smrj  *
4333446Smrj  * RETURN:      Status
4343446Smrj  *
4353446Smrj  * DESCRIPTION: Translate a Event ID into a name string (Debug only)
4363446Smrj  *
4373446Smrj  ******************************************************************************/
4383446Smrj 
4393446Smrj /* Event type decoding */
4403446Smrj 
4413446Smrj static const char        *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] =
4423446Smrj {
4433446Smrj     "PM_Timer",
4443446Smrj     "GlobalLock",
4453446Smrj     "PowerButton",
4463446Smrj     "SleepButton",
4473446Smrj     "RealTimeClock",
4483446Smrj };
4493446Smrj 
4503446Smrj 
4513446Smrj char *
4523446Smrj AcpiUtGetEventName (
4533446Smrj     UINT32                  EventId)
4543446Smrj {
4553446Smrj 
4563446Smrj     if (EventId > ACPI_EVENT_MAX)
4573446Smrj     {
4583446Smrj         return ("InvalidEventID");
4593446Smrj     }
4603446Smrj 
4613446Smrj     return (ACPI_CAST_PTR (char, AcpiGbl_EventTypes[EventId]));
4623446Smrj }
4633446Smrj 
4643446Smrj 
4653446Smrj /*******************************************************************************
4663446Smrj  *
4673446Smrj  * FUNCTION:    AcpiUtGetTypeName
4683446Smrj  *
4693446Smrj  * PARAMETERS:  None.
4703446Smrj  *
4713446Smrj  * RETURN:      Status
4723446Smrj  *
4733446Smrj  * DESCRIPTION: Translate a Type ID into a name string (Debug only)
4743446Smrj  *
4753446Smrj  ******************************************************************************/
4763446Smrj 
4773446Smrj /*
4783446Smrj  * Elements of AcpiGbl_NsTypeNames below must match
4793446Smrj  * one-to-one with values of ACPI_OBJECT_TYPE
4803446Smrj  *
4813446Smrj  * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching;
4823446Smrj  * when stored in a table it really means that we have thus far seen no
4833446Smrj  * evidence to indicate what type is actually going to be stored for this entry.
4843446Smrj  */
4853446Smrj static const char           AcpiGbl_BadType[] = "UNDEFINED";
4863446Smrj 
4873446Smrj /* Printable names of the ACPI object types */
4883446Smrj 
4893446Smrj static const char           *AcpiGbl_NsTypeNames[] =
4903446Smrj {
4913446Smrj     /* 00 */ "Untyped",
4923446Smrj     /* 01 */ "Integer",
4933446Smrj     /* 02 */ "String",
4943446Smrj     /* 03 */ "Buffer",
4953446Smrj     /* 04 */ "Package",
4963446Smrj     /* 05 */ "FieldUnit",
4973446Smrj     /* 06 */ "Device",
4983446Smrj     /* 07 */ "Event",
4993446Smrj     /* 08 */ "Method",
5003446Smrj     /* 09 */ "Mutex",
5013446Smrj     /* 10 */ "Region",
5023446Smrj     /* 11 */ "Power",
5033446Smrj     /* 12 */ "Processor",
5043446Smrj     /* 13 */ "Thermal",
5053446Smrj     /* 14 */ "BufferField",
5063446Smrj     /* 15 */ "DdbHandle",
5073446Smrj     /* 16 */ "DebugObject",
5083446Smrj     /* 17 */ "RegionField",
5093446Smrj     /* 18 */ "BankField",
5103446Smrj     /* 19 */ "IndexField",
5113446Smrj     /* 20 */ "Reference",
5123446Smrj     /* 21 */ "Alias",
5133446Smrj     /* 22 */ "MethodAlias",
5143446Smrj     /* 23 */ "Notify",
5153446Smrj     /* 24 */ "AddrHandler",
5163446Smrj     /* 25 */ "ResourceDesc",
5173446Smrj     /* 26 */ "ResourceFld",
5183446Smrj     /* 27 */ "Scope",
5193446Smrj     /* 28 */ "Extra",
5203446Smrj     /* 29 */ "Data",
5213446Smrj     /* 30 */ "Invalid"
5223446Smrj };
5233446Smrj 
5243446Smrj 
5253446Smrj char *
5263446Smrj AcpiUtGetTypeName (
5273446Smrj     ACPI_OBJECT_TYPE        Type)
5283446Smrj {
5293446Smrj 
5303446Smrj     if (Type > ACPI_TYPE_INVALID)
5313446Smrj     {
5323446Smrj         return (ACPI_CAST_PTR (char, AcpiGbl_BadType));
5333446Smrj     }
5343446Smrj 
5353446Smrj     return (ACPI_CAST_PTR (char, AcpiGbl_NsTypeNames[Type]));
5363446Smrj }
5373446Smrj 
5383446Smrj 
5393446Smrj char *
5403446Smrj AcpiUtGetObjectTypeName (
5413446Smrj     ACPI_OPERAND_OBJECT     *ObjDesc)
5423446Smrj {
5433446Smrj 
5443446Smrj     if (!ObjDesc)
5453446Smrj     {
5463446Smrj         return ("[NULL Object Descriptor]");
5473446Smrj     }
5483446Smrj 
5493446Smrj     return (AcpiUtGetTypeName (ACPI_GET_OBJECT_TYPE (ObjDesc)));
5503446Smrj }
5513446Smrj 
5523446Smrj 
5533446Smrj /*******************************************************************************
5543446Smrj  *
5553446Smrj  * FUNCTION:    AcpiUtGetNodeName
5563446Smrj  *
5573446Smrj  * PARAMETERS:  Object               - A namespace node
5583446Smrj  *
5593446Smrj  * RETURN:      Pointer to a string
5603446Smrj  *
5613446Smrj  * DESCRIPTION: Validate the node and return the node's ACPI name.
5623446Smrj  *
5633446Smrj  ******************************************************************************/
5643446Smrj 
5653446Smrj char *
5663446Smrj AcpiUtGetNodeName (
5673446Smrj     void                    *Object)
5683446Smrj {
5693446Smrj     ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) Object;
5703446Smrj 
5713446Smrj 
5723446Smrj     /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */
5733446Smrj 
5743446Smrj     if (!Object)
5753446Smrj     {
5763446Smrj         return ("NULL");
5773446Smrj     }
5783446Smrj 
5793446Smrj     /* Check for Root node */
5803446Smrj 
5813446Smrj     if ((Object == ACPI_ROOT_OBJECT) ||
5823446Smrj         (Object == AcpiGbl_RootNode))
5833446Smrj     {
5843446Smrj         return ("\"\\\" ");
5853446Smrj     }
5863446Smrj 
5873446Smrj     /* Descriptor must be a namespace node */
5883446Smrj 
5893446Smrj     if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)
5903446Smrj     {
5913446Smrj         return ("####");
5923446Smrj     }
5933446Smrj 
594*7851SDana.Myers@Sun.COM     /*
595*7851SDana.Myers@Sun.COM      * Ensure name is valid. The name was validated/repaired when the node
596*7851SDana.Myers@Sun.COM      * was created, but make sure it has not been corrupted.
597*7851SDana.Myers@Sun.COM      */
598*7851SDana.Myers@Sun.COM     AcpiUtRepairName (Node->Name.Ascii);
5993446Smrj 
6003446Smrj     /* Return the name */
6013446Smrj 
6023446Smrj     return (Node->Name.Ascii);
6033446Smrj }
6043446Smrj 
6053446Smrj 
6063446Smrj /*******************************************************************************
6073446Smrj  *
6083446Smrj  * FUNCTION:    AcpiUtGetDescriptorName
6093446Smrj  *
6103446Smrj  * PARAMETERS:  Object               - An ACPI object
6113446Smrj  *
6123446Smrj  * RETURN:      Pointer to a string
6133446Smrj  *
6143446Smrj  * DESCRIPTION: Validate object and return the descriptor type
6153446Smrj  *
6163446Smrj  ******************************************************************************/
6173446Smrj 
6183446Smrj /* Printable names of object descriptor types */
6193446Smrj 
6203446Smrj static const char           *AcpiGbl_DescTypeNames[] =
6213446Smrj {
6223446Smrj     /* 00 */ "Invalid",
6233446Smrj     /* 01 */ "Cached",
6243446Smrj     /* 02 */ "State-Generic",
6253446Smrj     /* 03 */ "State-Update",
6263446Smrj     /* 04 */ "State-Package",
6273446Smrj     /* 05 */ "State-Control",
6283446Smrj     /* 06 */ "State-RootParseScope",
6293446Smrj     /* 07 */ "State-ParseScope",
6303446Smrj     /* 08 */ "State-WalkScope",
6313446Smrj     /* 09 */ "State-Result",
6323446Smrj     /* 10 */ "State-Notify",
6333446Smrj     /* 11 */ "State-Thread",
6343446Smrj     /* 12 */ "Walk",
6353446Smrj     /* 13 */ "Parser",
6363446Smrj     /* 14 */ "Operand",
6373446Smrj     /* 15 */ "Node"
6383446Smrj };
6393446Smrj 
6403446Smrj 
6413446Smrj char *
6423446Smrj AcpiUtGetDescriptorName (
6433446Smrj     void                    *Object)
6443446Smrj {
6453446Smrj 
6463446Smrj     if (!Object)
6473446Smrj     {
6483446Smrj         return ("NULL OBJECT");
6493446Smrj     }
6503446Smrj 
6513446Smrj     if (ACPI_GET_DESCRIPTOR_TYPE (Object) > ACPI_DESC_TYPE_MAX)
6523446Smrj     {
6533446Smrj         return (ACPI_CAST_PTR (char, AcpiGbl_BadType));
6543446Smrj     }
6553446Smrj 
6563446Smrj     return (ACPI_CAST_PTR (char,
6573446Smrj         AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)]));
6583446Smrj 
6593446Smrj }
6603446Smrj 
6613446Smrj 
662*7851SDana.Myers@Sun.COM /*******************************************************************************
663*7851SDana.Myers@Sun.COM  *
664*7851SDana.Myers@Sun.COM  * FUNCTION:    AcpiUtGetReferenceName
665*7851SDana.Myers@Sun.COM  *
666*7851SDana.Myers@Sun.COM  * PARAMETERS:  Object               - An ACPI reference object
667*7851SDana.Myers@Sun.COM  *
668*7851SDana.Myers@Sun.COM  * RETURN:      Pointer to a string
669*7851SDana.Myers@Sun.COM  *
670*7851SDana.Myers@Sun.COM  * DESCRIPTION: Decode a reference object sub-type to a string.
671*7851SDana.Myers@Sun.COM  *
672*7851SDana.Myers@Sun.COM  ******************************************************************************/
673*7851SDana.Myers@Sun.COM 
674*7851SDana.Myers@Sun.COM /* Printable names of reference object sub-types */
675*7851SDana.Myers@Sun.COM 
676*7851SDana.Myers@Sun.COM static const char           *AcpiGbl_RefClassNames[] =
677*7851SDana.Myers@Sun.COM {
678*7851SDana.Myers@Sun.COM     /* 00 */ "Local",
679*7851SDana.Myers@Sun.COM     /* 01 */ "Argument",
680*7851SDana.Myers@Sun.COM     /* 02 */ "RefOf",
681*7851SDana.Myers@Sun.COM     /* 03 */ "Index",
682*7851SDana.Myers@Sun.COM     /* 04 */ "DdbHandle",
683*7851SDana.Myers@Sun.COM     /* 05 */ "Named Object",
684*7851SDana.Myers@Sun.COM     /* 06 */ "Debug"
685*7851SDana.Myers@Sun.COM };
686*7851SDana.Myers@Sun.COM 
687*7851SDana.Myers@Sun.COM const char *
688*7851SDana.Myers@Sun.COM AcpiUtGetReferenceName (
689*7851SDana.Myers@Sun.COM     ACPI_OPERAND_OBJECT     *Object)
690*7851SDana.Myers@Sun.COM {
691*7851SDana.Myers@Sun.COM 
692*7851SDana.Myers@Sun.COM     if (!Object)
693*7851SDana.Myers@Sun.COM     {
694*7851SDana.Myers@Sun.COM         return ("NULL Object");
695*7851SDana.Myers@Sun.COM     }
696*7851SDana.Myers@Sun.COM 
697*7851SDana.Myers@Sun.COM     if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND)
698*7851SDana.Myers@Sun.COM     {
699*7851SDana.Myers@Sun.COM         return ("Not an Operand object");
700*7851SDana.Myers@Sun.COM     }
701*7851SDana.Myers@Sun.COM 
702*7851SDana.Myers@Sun.COM     if (Object->Common.Type != ACPI_TYPE_LOCAL_REFERENCE)
703*7851SDana.Myers@Sun.COM     {
704*7851SDana.Myers@Sun.COM         return ("Not a Reference object");
705*7851SDana.Myers@Sun.COM     }
706*7851SDana.Myers@Sun.COM 
707*7851SDana.Myers@Sun.COM     if (Object->Reference.Class > ACPI_REFCLASS_MAX)
708*7851SDana.Myers@Sun.COM     {
709*7851SDana.Myers@Sun.COM         return ("Unknown Reference class");
710*7851SDana.Myers@Sun.COM     }
711*7851SDana.Myers@Sun.COM 
712*7851SDana.Myers@Sun.COM     return (AcpiGbl_RefClassNames[Object->Reference.Class]);
713*7851SDana.Myers@Sun.COM }
714*7851SDana.Myers@Sun.COM 
715*7851SDana.Myers@Sun.COM 
7163446Smrj #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
7173446Smrj /*
7183446Smrj  * Strings and procedures used for debug only
7193446Smrj  */
7203446Smrj 
7213446Smrj /*******************************************************************************
7223446Smrj  *
7233446Smrj  * FUNCTION:    AcpiUtGetMutexName
7243446Smrj  *
7253446Smrj  * PARAMETERS:  MutexId         - The predefined ID for this mutex.
7263446Smrj  *
7273446Smrj  * RETURN:      String containing the name of the mutex. Always returns a valid
7283446Smrj  *              pointer.
7293446Smrj  *
7303446Smrj  * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
7313446Smrj  *
7323446Smrj  ******************************************************************************/
7333446Smrj 
7343446Smrj char *
7353446Smrj AcpiUtGetMutexName (
7363446Smrj     UINT32                  MutexId)
7373446Smrj {
7383446Smrj 
7393446Smrj     if (MutexId > ACPI_MAX_MUTEX)
7403446Smrj     {
7413446Smrj         return ("Invalid Mutex ID");
7423446Smrj     }
7433446Smrj 
7443446Smrj     return (AcpiGbl_MutexNames[MutexId]);
7453446Smrj }
746*7851SDana.Myers@Sun.COM 
747*7851SDana.Myers@Sun.COM 
748*7851SDana.Myers@Sun.COM /*******************************************************************************
749*7851SDana.Myers@Sun.COM  *
750*7851SDana.Myers@Sun.COM  * FUNCTION:    AcpiUtGetNotifyName
751*7851SDana.Myers@Sun.COM  *
752*7851SDana.Myers@Sun.COM  * PARAMETERS:  NotifyValue     - Value from the Notify() request
753*7851SDana.Myers@Sun.COM  *
754*7851SDana.Myers@Sun.COM  * RETURN:      String corresponding to the Notify Value.
755*7851SDana.Myers@Sun.COM  *
756*7851SDana.Myers@Sun.COM  * DESCRIPTION: Translate a Notify Value to a notify namestring.
757*7851SDana.Myers@Sun.COM  *
758*7851SDana.Myers@Sun.COM  ******************************************************************************/
759*7851SDana.Myers@Sun.COM 
760*7851SDana.Myers@Sun.COM /* Names for Notify() values, used for debug output */
761*7851SDana.Myers@Sun.COM 
762*7851SDana.Myers@Sun.COM static const char        *AcpiGbl_NotifyValueNames[] =
763*7851SDana.Myers@Sun.COM {
764*7851SDana.Myers@Sun.COM     "Bus Check",
765*7851SDana.Myers@Sun.COM     "Device Check",
766*7851SDana.Myers@Sun.COM     "Device Wake",
767*7851SDana.Myers@Sun.COM     "Eject Request",
768*7851SDana.Myers@Sun.COM     "Device Check Light",
769*7851SDana.Myers@Sun.COM     "Frequency Mismatch",
770*7851SDana.Myers@Sun.COM     "Bus Mode Mismatch",
771*7851SDana.Myers@Sun.COM     "Power Fault",
772*7851SDana.Myers@Sun.COM     "Capabilities Check",
773*7851SDana.Myers@Sun.COM     "Device PLD Check",
774*7851SDana.Myers@Sun.COM     "Reserved",
775*7851SDana.Myers@Sun.COM     "System Locality Update"
776*7851SDana.Myers@Sun.COM };
777*7851SDana.Myers@Sun.COM 
778*7851SDana.Myers@Sun.COM const char *
779*7851SDana.Myers@Sun.COM AcpiUtGetNotifyName (
780*7851SDana.Myers@Sun.COM     UINT32                  NotifyValue)
781*7851SDana.Myers@Sun.COM {
782*7851SDana.Myers@Sun.COM 
783*7851SDana.Myers@Sun.COM     if (NotifyValue <= ACPI_NOTIFY_MAX)
784*7851SDana.Myers@Sun.COM     {
785*7851SDana.Myers@Sun.COM         return (AcpiGbl_NotifyValueNames[NotifyValue]);
786*7851SDana.Myers@Sun.COM     }
787*7851SDana.Myers@Sun.COM     else if (NotifyValue <= ACPI_MAX_SYS_NOTIFY)
788*7851SDana.Myers@Sun.COM     {
789*7851SDana.Myers@Sun.COM         return ("Reserved");
790*7851SDana.Myers@Sun.COM     }
791*7851SDana.Myers@Sun.COM     else /* Greater or equal to 0x80 */
792*7851SDana.Myers@Sun.COM     {
793*7851SDana.Myers@Sun.COM         return ("**Device Specific**");
794*7851SDana.Myers@Sun.COM     }
795*7851SDana.Myers@Sun.COM }
7963446Smrj #endif
7973446Smrj 
7983446Smrj 
7993446Smrj /*******************************************************************************
8003446Smrj  *
8013446Smrj  * FUNCTION:    AcpiUtValidObjectType
8023446Smrj  *
8033446Smrj  * PARAMETERS:  Type            - Object type to be validated
8043446Smrj  *
8053446Smrj  * RETURN:      TRUE if valid object type, FALSE otherwise
8063446Smrj  *
8073446Smrj  * DESCRIPTION: Validate an object type
8083446Smrj  *
8093446Smrj  ******************************************************************************/
8103446Smrj 
8113446Smrj BOOLEAN
8123446Smrj AcpiUtValidObjectType (
8133446Smrj     ACPI_OBJECT_TYPE        Type)
8143446Smrj {
8153446Smrj 
8163446Smrj     if (Type > ACPI_TYPE_LOCAL_MAX)
8173446Smrj     {
8183446Smrj         /* Note: Assumes all TYPEs are contiguous (external/local) */
8193446Smrj 
8203446Smrj         return (FALSE);
8213446Smrj     }
8223446Smrj 
8233446Smrj     return (TRUE);
8243446Smrj }
8253446Smrj 
8263446Smrj 
8273446Smrj /*******************************************************************************
8283446Smrj  *
8293446Smrj  * FUNCTION:    AcpiUtInitGlobals
8303446Smrj  *
8313446Smrj  * PARAMETERS:  None
8323446Smrj  *
833*7851SDana.Myers@Sun.COM  * RETURN:      Status
8343446Smrj  *
8353446Smrj  * DESCRIPTION: Init library globals.  All globals that require specific
8363446Smrj  *              initialization should be initialized here!
8373446Smrj  *
8383446Smrj  ******************************************************************************/
8393446Smrj 
840*7851SDana.Myers@Sun.COM ACPI_STATUS
8413446Smrj AcpiUtInitGlobals (
8423446Smrj     void)
8433446Smrj {
8443446Smrj     ACPI_STATUS             Status;
8453446Smrj     UINT32                  i;
8463446Smrj 
8473446Smrj 
8483446Smrj     ACPI_FUNCTION_TRACE (UtInitGlobals);
8493446Smrj 
8503446Smrj 
8513446Smrj     /* Create all memory caches */
8523446Smrj 
8533446Smrj     Status = AcpiUtCreateCaches ();
8543446Smrj     if (ACPI_FAILURE (Status))
8553446Smrj     {
856*7851SDana.Myers@Sun.COM         return_ACPI_STATUS (Status);
8573446Smrj     }
8583446Smrj 
8593446Smrj     /* Mutex locked flags */
8603446Smrj 
8613446Smrj     for (i = 0; i < ACPI_NUM_MUTEX; i++)
8623446Smrj     {
8633446Smrj         AcpiGbl_MutexInfo[i].Mutex          = NULL;
8643446Smrj         AcpiGbl_MutexInfo[i].ThreadId       = ACPI_MUTEX_NOT_ACQUIRED;
8653446Smrj         AcpiGbl_MutexInfo[i].UseCount       = 0;
8663446Smrj     }
8673446Smrj 
8683446Smrj     for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++)
8693446Smrj     {
8703446Smrj         AcpiGbl_OwnerIdMask[i]              = 0;
8713446Smrj     }
8723446Smrj     AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000; /* Last ID is never valid */
8733446Smrj 
874*7851SDana.Myers@Sun.COM     /* Event counters */
875*7851SDana.Myers@Sun.COM 
876*7851SDana.Myers@Sun.COM     AcpiMethodCount                     = 0;
877*7851SDana.Myers@Sun.COM     AcpiSciCount                        = 0;
878*7851SDana.Myers@Sun.COM     AcpiGpeCount                        = 0;
879*7851SDana.Myers@Sun.COM 
880*7851SDana.Myers@Sun.COM     for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
881*7851SDana.Myers@Sun.COM     {
882*7851SDana.Myers@Sun.COM         AcpiFixedEventCount[i]              = 0;
883*7851SDana.Myers@Sun.COM     }
884*7851SDana.Myers@Sun.COM 
8853446Smrj     /* GPE support */
8863446Smrj 
8873446Smrj     AcpiGbl_GpeXruptListHead            = NULL;
8883446Smrj     AcpiGbl_GpeFadtBlocks[0]            = NULL;
8893446Smrj     AcpiGbl_GpeFadtBlocks[1]            = NULL;
8903446Smrj 
891*7851SDana.Myers@Sun.COM     /* Global handlers */
8923446Smrj 
8933446Smrj     AcpiGbl_SystemNotify.Handler        = NULL;
8943446Smrj     AcpiGbl_DeviceNotify.Handler        = NULL;
8953446Smrj     AcpiGbl_ExceptionHandler            = NULL;
8963446Smrj     AcpiGbl_InitHandler                 = NULL;
897*7851SDana.Myers@Sun.COM     AcpiGbl_TableHandler                = NULL;
8983446Smrj 
8993446Smrj     /* Global Lock support */
9003446Smrj 
9013446Smrj     AcpiGbl_GlobalLockSemaphore         = NULL;
9023446Smrj     AcpiGbl_GlobalLockMutex             = NULL;
9033446Smrj     AcpiGbl_GlobalLockAcquired          = FALSE;
9043446Smrj     AcpiGbl_GlobalLockHandle            = 0;
9053446Smrj 
9063446Smrj     /* Miscellaneous variables */
9073446Smrj 
9083446Smrj     AcpiGbl_CmSingleStep                = FALSE;
9093446Smrj     AcpiGbl_DbTerminateThreads          = FALSE;
9103446Smrj     AcpiGbl_Shutdown                    = FALSE;
9113446Smrj     AcpiGbl_NsLookupCount               = 0;
9123446Smrj     AcpiGbl_PsFindCount                 = 0;
9133446Smrj     AcpiGbl_AcpiHardwarePresent         = TRUE;
9143446Smrj     AcpiGbl_LastOwnerIdIndex            = 0;
9153446Smrj     AcpiGbl_NextOwnerIdOffset           = 0;
9163446Smrj     AcpiGbl_TraceMethodName             = 0;
9173446Smrj     AcpiGbl_TraceDbgLevel               = 0;
9183446Smrj     AcpiGbl_TraceDbgLayer               = 0;
9193446Smrj     AcpiGbl_DebuggerConfiguration       = DEBUGGER_THREADING;
9203446Smrj     AcpiGbl_DbOutputFlags               = ACPI_DB_CONSOLE_OUTPUT;
9213446Smrj 
9223446Smrj     /* Hardware oriented */
9233446Smrj 
9243446Smrj     AcpiGbl_EventsInitialized           = FALSE;
9253446Smrj     AcpiGbl_SystemAwakeAndRunning       = TRUE;
9263446Smrj 
9273446Smrj     /* Namespace */
9283446Smrj 
9293446Smrj     AcpiGbl_RootNode                    = NULL;
9303446Smrj     AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
9313446Smrj     AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
9323446Smrj     AcpiGbl_RootNodeStruct.Type         = ACPI_TYPE_DEVICE;
9333446Smrj     AcpiGbl_RootNodeStruct.Child        = NULL;
9343446Smrj     AcpiGbl_RootNodeStruct.Peer         = NULL;
9353446Smrj     AcpiGbl_RootNodeStruct.Object       = NULL;
9363446Smrj     AcpiGbl_RootNodeStruct.Flags        = ANOBJ_END_OF_PEER_LIST;
9373446Smrj 
9383446Smrj 
9393446Smrj #ifdef ACPI_DEBUG_OUTPUT
940*7851SDana.Myers@Sun.COM     AcpiGbl_LowestStackPointer          = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX);
9413446Smrj #endif
9423446Smrj 
943*7851SDana.Myers@Sun.COM #ifdef ACPI_DBG_TRACK_ALLOCATIONS
944*7851SDana.Myers@Sun.COM     AcpiGbl_DisplayFinalMemStats        = FALSE;
945*7851SDana.Myers@Sun.COM #endif
946*7851SDana.Myers@Sun.COM 
947*7851SDana.Myers@Sun.COM     return_ACPI_STATUS (AE_OK);
9483446Smrj }
9493446Smrj 
9503446Smrj /* Public globals */
9513446Smrj 
9523446Smrj ACPI_EXPORT_SYMBOL (AcpiDbgLevel)
9533446Smrj ACPI_EXPORT_SYMBOL (AcpiDbgLayer)
954*7851SDana.Myers@Sun.COM ACPI_EXPORT_SYMBOL (AcpiGpeCount)
9553446Smrj 
9563446Smrj 
957