Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /******************************************************************************
  2  *
  3  * Module Name: utglobal - Global variables for the ACPI subsystem
  4  *
  5  *****************************************************************************/
  6 
  7 /*
  8  * Copyright (C) 2000 - 2005, R. Byron Moore
  9  * All rights reserved.
 10  *
 11  * Redistribution and use in source and binary forms, with or without
 12  * modification, are permitted provided that the following conditions
 13  * are met:
 14  * 1. Redistributions of source code must retain the above copyright
 15  *    notice, this list of conditions, and the following disclaimer,
 16  *    without modification.
 17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
 18  *    substantially similar to the "NO WARRANTY" disclaimer below
 19  *    ("Disclaimer") and any redistribution must be conditioned upon
 20  *    including a substantially similar Disclaimer requirement for further
 21  *    binary redistribution.
 22  * 3. Neither the names of the above-listed copyright holders nor the names
 23  *    of any contributors may be used to endorse or promote products derived
 24  *    from this software without specific prior written permission.
 25  *
 26  * Alternatively, this software may be distributed under the terms of the
 27  * GNU General Public License ("GPL") version 2 as published by the Free
 28  * Software Foundation.
 29  *
 30  * NO WARRANTY
 31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
 34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 41  * POSSIBILITY OF SUCH DAMAGES.
 42  */
 43 
 44 #define DEFINE_ACPI_GLOBALS
 45 
 46 #include <linux/module.h>
 47 
 48 #include <acpi/acpi.h>
 49 #include <acpi/acnamesp.h>
 50 
 51 #define _COMPONENT          ACPI_UTILITIES
 52          ACPI_MODULE_NAME    ("utglobal")
 53 
 54 
 55 /******************************************************************************
 56  *
 57  * FUNCTION:    acpi_format_exception
 58  *
 59  * PARAMETERS:  Status       - The acpi_status code to be formatted
 60  *
 61  * RETURN:      A string containing the exception  text
 62  *
 63  * DESCRIPTION: This function translates an ACPI exception into an ASCII string.
 64  *
 65  ******************************************************************************/
 66 
 67 const char *
 68 acpi_format_exception (
 69         acpi_status                     status)
 70 {
 71         const char                      *exception = "UNKNOWN_STATUS_CODE";
 72         acpi_status                     sub_status;
 73 
 74 
 75         ACPI_FUNCTION_NAME ("format_exception");
 76 
 77 
 78         sub_status = (status & ~AE_CODE_MASK);
 79 
 80         switch (status & AE_CODE_MASK) {
 81         case AE_CODE_ENVIRONMENTAL:
 82 
 83                 if (sub_status <= AE_CODE_ENV_MAX) {
 84                         exception = acpi_gbl_exception_names_env [sub_status];
 85                         break;
 86                 }
 87                 goto unknown;
 88 
 89         case AE_CODE_PROGRAMMER:
 90 
 91                 if (sub_status <= AE_CODE_PGM_MAX) {
 92                         exception = acpi_gbl_exception_names_pgm [sub_status -1];
 93                         break;
 94                 }
 95                 goto unknown;
 96 
 97         case AE_CODE_ACPI_TABLES:
 98 
 99                 if (sub_status <= AE_CODE_TBL_MAX) {
100                         exception = acpi_gbl_exception_names_tbl [sub_status -1];
101                         break;
102                 }
103                 goto unknown;
104 
105         case AE_CODE_AML:
106 
107                 if (sub_status <= AE_CODE_AML_MAX) {
108                         exception = acpi_gbl_exception_names_aml [sub_status -1];
109                         break;
110                 }
111                 goto unknown;
112 
113         case AE_CODE_CONTROL:
114 
115                 if (sub_status <= AE_CODE_CTRL_MAX) {
116                         exception = acpi_gbl_exception_names_ctrl [sub_status -1];
117                         break;
118                 }
119                 goto unknown;
120 
121         default:
122                 goto unknown;
123         }
124 
125 
126         return ((const char *) exception);
127 
128 unknown:
129 
130         ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown exception code: 0x%8.8X\n", status));
131         return ((const char *) exception);
132 }
133 
134 
135 /******************************************************************************
136  *
137  * Static global variable initialization.
138  *
139  ******************************************************************************/
140 
141 /*
142  * We want the debug switches statically initialized so they
143  * are already set when the debugger is entered.
144  */
145 
146 /* Debug switch - level and trace mask */
147 u32                                 acpi_dbg_level = ACPI_DEBUG_DEFAULT;
148 EXPORT_SYMBOL(acpi_dbg_level);
149 
150 /* Debug switch - layer (component) mask */
151 
152 u32                                 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS;
153 EXPORT_SYMBOL(acpi_dbg_layer);
154 u32                                 acpi_gbl_nesting_level = 0;
155 
156 
157 /* Debugger globals */
158 
159 u8                                  acpi_gbl_db_terminate_threads = FALSE;
160 u8                                  acpi_gbl_abort_method = FALSE;
161 u8                                  acpi_gbl_method_executing = FALSE;
162 
163 /* System flags */
164 
165 u32                                 acpi_gbl_startup_flags = 0;
166 
167 /* System starts uninitialized */
168 
169 u8                                  acpi_gbl_shutdown = TRUE;
170 
171 const u8                            acpi_gbl_decode_to8bit [8] = {1,2,4,8,16,32,64,128};
172 
173 const char                          *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT] =
174 {
175         "\\_S0_",
176         "\\_S1_",
177         "\\_S2_",
178         "\\_S3_",
179         "\\_S4_",
180         "\\_S5_"
181 };
182 
183 const char                          *acpi_gbl_highest_dstate_names[4] =
184 {
185         "_S1D",
186         "_S2D",
187         "_S3D",
188         "_S4D"
189 };
190 
191 /*
192  * Strings supported by the _OSI predefined (internal) method.
193  * When adding strings, be sure to update ACPI_NUM_OSI_STRINGS.
194  */
195 const char                          *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STRINGS] =
196 {
197         "Linux",
198         "Windows 2000",
199         "Windows 2001",
200         "Windows 2001.1",
201         "Windows 2001 SP0",
202         "Windows 2001 SP1",
203         "Windows 2001 SP2",
204         "Windows 2001 SP3",
205         "Windows 2001 SP4"
206 };
207 
208 
209 /******************************************************************************
210  *
211  * Namespace globals
212  *
213  ******************************************************************************/
214 
215 
216 /*
217  * Predefined ACPI Names (Built-in to the Interpreter)
218  *
219  * NOTES:
220  * 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
221  *    during the initialization sequence.
222  * 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
223  *    perform a Notify() operation on it.
224  */
225 const struct acpi_predefined_names      acpi_gbl_pre_defined_names[] =
226 { {"_GPE",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
227         {"_PR_",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
228         {"_SB_",    ACPI_TYPE_DEVICE,           NULL},
229         {"_SI_",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
230         {"_TZ_",    ACPI_TYPE_THERMAL,          NULL},
231         {"_REV",    ACPI_TYPE_INTEGER,          (char *) ACPI_CA_SUPPORT_LEVEL},
232         {"_OS_",    ACPI_TYPE_STRING,           ACPI_OS_NAME},
233         {"_GL_",    ACPI_TYPE_MUTEX,            (char *) 1},
234 
235 #if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
236         {"_OSI",    ACPI_TYPE_METHOD,           (char *) 1},
237 #endif
238         {NULL,      ACPI_TYPE_ANY,              NULL}              /* Table terminator */
239 };
240 
241 
242 /*
243  * Properties of the ACPI Object Types, both internal and external.
244  * The table is indexed by values of acpi_object_type
245  */
246 const u8                                acpi_gbl_ns_properties[] =
247 {
248         ACPI_NS_NORMAL,                     /* 00 Any              */
249         ACPI_NS_NORMAL,                     /* 01 Number           */
250         ACPI_NS_NORMAL,                     /* 02 String           */
251         ACPI_NS_NORMAL,                     /* 03 Buffer           */
252         ACPI_NS_NORMAL,                     /* 04 Package          */
253         ACPI_NS_NORMAL,                     /* 05 field_unit       */
254         ACPI_NS_NEWSCOPE,                   /* 06 Device           */
255         ACPI_NS_NORMAL,                     /* 07 Event            */
256         ACPI_NS_NEWSCOPE,                   /* 08 Method           */
257         ACPI_NS_NORMAL,                     /* 09 Mutex            */
258         ACPI_NS_NORMAL,                     /* 10 Region           */
259         ACPI_NS_NEWSCOPE,                   /* 11 Power            */
260         ACPI_NS_NEWSCOPE,                   /* 12 Processor        */
261         ACPI_NS_NEWSCOPE,                   /* 13 Thermal          */
262         ACPI_NS_NORMAL,                     /* 14 buffer_field     */
263         ACPI_NS_NORMAL,                     /* 15 ddb_handle       */
264         ACPI_NS_NORMAL,                     /* 16 Debug Object     */
265         ACPI_NS_NORMAL,                     /* 17 def_field        */
266         ACPI_NS_NORMAL,                     /* 18 bank_field       */
267         ACPI_NS_NORMAL,                     /* 19 index_field      */
268         ACPI_NS_NORMAL,                     /* 20 Reference        */
269         ACPI_NS_NORMAL,                     /* 21 Alias            */
270         ACPI_NS_NORMAL,                     /* 22 method_alias     */
271         ACPI_NS_NORMAL,                     /* 23 Notify           */
272         ACPI_NS_NORMAL,                     /* 24 Address Handler  */
273         ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 25 Resource Desc    */
274         ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 26 Resource Field   */
275         ACPI_NS_NEWSCOPE,                   /* 27 Scope            */
276         ACPI_NS_NORMAL,                     /* 28 Extra            */
277         ACPI_NS_NORMAL,                     /* 29 Data             */
278         ACPI_NS_NORMAL                      /* 30 Invalid          */
279 };
280 
281 
282 /* Hex to ASCII conversion table */
283 
284 static const char                   acpi_gbl_hex_to_ascii[] =
285                           {'','1','2','3','4','5','6','7',
286                                          '8','9','A','B','C','D','E','F'};
287 
288 /*****************************************************************************
289  *
290  * FUNCTION:    acpi_ut_hex_to_ascii_char
291  *
292  * PARAMETERS:  Integer             - Contains the hex digit
293  *              Position            - bit position of the digit within the
294  *                                    integer
295  *
296  * RETURN:      Ascii character
297  *
298  * DESCRIPTION: Convert a hex digit to an ascii character
299  *
300  ****************************************************************************/
301 
302 char
303 acpi_ut_hex_to_ascii_char (
304         acpi_integer                    integer,
305         u32                             position)
306 {
307 
308         return (acpi_gbl_hex_to_ascii[(integer >> position) & 0xF]);
309 }
310 
311 
312 /******************************************************************************
313  *
314  * Table name globals
315  *
316  * NOTE: This table includes ONLY the ACPI tables that the subsystem consumes.
317  * it is NOT an exhaustive list of all possible ACPI tables.  All ACPI tables
318  * that are not used by the subsystem are simply ignored.
319  *
320  * Do NOT add any table to this list that is not consumed directly by this
321  * subsystem.
322  *
323  ******************************************************************************/
324 
325 struct acpi_table_list              acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES];
326 
327 struct acpi_table_support           acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES] =
328 {
329         /***********    Name,   Signature, Global typed pointer     Signature size,      Type                  How many allowed?,    Contains valid AML? */
330 
331         /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL,                    sizeof (RSDP_SIG)-1, ACPI_TABLE_ROOT     | ACPI_TABLE_SINGLE},
332         /* DSDT 1 */ {DSDT_SIG,  DSDT_SIG, (void *) &acpi_gbl_DSDT, sizeof (DSDT_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE   | ACPI_TABLE_EXECUTABLE},
333         /* FADT 2 */ {FADT_SIG,  FADT_SIG, (void *) &acpi_gbl_FADT, sizeof (FADT_SIG)-1, ACPI_TABLE_PRIMARY  | ACPI_TABLE_SINGLE},
334         /* FACS 3 */ {FACS_SIG,  FACS_SIG, (void *) &acpi_gbl_FACS, sizeof (FACS_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE},
335         /* PSDT 4 */ {PSDT_SIG,  PSDT_SIG, NULL,                    sizeof (PSDT_SIG)-1, ACPI_TABLE_PRIMARY  | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
336         /* SSDT 5 */ {SSDT_SIG,  SSDT_SIG, NULL,                    sizeof (SSDT_SIG)-1, ACPI_TABLE_PRIMARY  | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
337         /* XSDT 6 */ {XSDT_SIG,  XSDT_SIG, NULL,                    sizeof (RSDT_SIG)-1, ACPI_TABLE_ROOT     | ACPI_TABLE_SINGLE},
338 };
339 
340 
341 /******************************************************************************
342  *
343  * Event and Hardware globals
344  *
345  ******************************************************************************/
346 
347 struct acpi_bit_register_info       acpi_gbl_bit_register_info[ACPI_NUM_BITREG] =
348 {
349         /* Name                                     Parent Register             Register Bit Position                   Register Bit Mask       */
350 
351         /* ACPI_BITREG_TIMER_STATUS         */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_TIMER_STATUS,          ACPI_BITMASK_TIMER_STATUS},
352         /* ACPI_BITREG_BUS_MASTER_STATUS    */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_BUS_MASTER_STATUS,     ACPI_BITMASK_BUS_MASTER_STATUS},
353         /* ACPI_BITREG_GLOBAL_LOCK_STATUS   */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_GLOBAL_LOCK_STATUS,    ACPI_BITMASK_GLOBAL_LOCK_STATUS},
354         /* ACPI_BITREG_POWER_BUTTON_STATUS  */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_POWER_BUTTON_STATUS,   ACPI_BITMASK_POWER_BUTTON_STATUS},
355         /* ACPI_BITREG_SLEEP_BUTTON_STATUS  */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_SLEEP_BUTTON_STATUS,   ACPI_BITMASK_SLEEP_BUTTON_STATUS},
356         /* ACPI_BITREG_RT_CLOCK_STATUS      */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_RT_CLOCK_STATUS,       ACPI_BITMASK_RT_CLOCK_STATUS},
357         /* ACPI_BITREG_WAKE_STATUS          */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_WAKE_STATUS,           ACPI_BITMASK_WAKE_STATUS},
358 
359         /* ACPI_BITREG_TIMER_ENABLE         */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_TIMER_ENABLE,          ACPI_BITMASK_TIMER_ENABLE},
360         /* ACPI_BITREG_GLOBAL_LOCK_ENABLE   */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE,    ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
361         /* ACPI_BITREG_POWER_BUTTON_ENABLE  */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_POWER_BUTTON_ENABLE,   ACPI_BITMASK_POWER_BUTTON_ENABLE},
362         /* ACPI_BITREG_SLEEP_BUTTON_ENABLE  */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE,   ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
363         /* ACPI_BITREG_RT_CLOCK_ENABLE      */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_RT_CLOCK_ENABLE,       ACPI_BITMASK_RT_CLOCK_ENABLE},
364         /* ACPI_BITREG_WAKE_ENABLE          */   {ACPI_REGISTER_PM1_ENABLE,   0,                                      0},
365 
366         /* ACPI_BITREG_SCI_ENABLE           */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SCI_ENABLE,            ACPI_BITMASK_SCI_ENABLE},
367         /* ACPI_BITREG_BUS_MASTER_RLD       */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_BUS_MASTER_RLD,        ACPI_BITMASK_BUS_MASTER_RLD},
368         /* ACPI_BITREG_GLOBAL_LOCK_RELEASE  */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE,   ACPI_BITMASK_GLOBAL_LOCK_RELEASE},
369         /* ACPI_BITREG_SLEEP_TYPE_A         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_TYPE_X,          ACPI_BITMASK_SLEEP_TYPE_X},
370         /* ACPI_BITREG_SLEEP_TYPE_B         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_TYPE_X,          ACPI_BITMASK_SLEEP_TYPE_X},
371         /* ACPI_BITREG_SLEEP_ENABLE         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_ENABLE,          ACPI_BITMASK_SLEEP_ENABLE},
372 
373         /* ACPI_BITREG_ARB_DIS              */   {ACPI_REGISTER_PM2_CONTROL,  ACPI_BITPOSITION_ARB_DISABLE,           ACPI_BITMASK_ARB_DISABLE}
374 };
375 
376 
377 struct acpi_fixed_event_info        acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] =
378 {
379         /* ACPI_EVENT_PMTIMER       */  {ACPI_BITREG_TIMER_STATUS,          ACPI_BITREG_TIMER_ENABLE,        ACPI_BITMASK_TIMER_STATUS,          ACPI_BITMASK_TIMER_ENABLE},
380         /* ACPI_EVENT_GLOBAL        */  {ACPI_BITREG_GLOBAL_LOCK_STATUS,    ACPI_BITREG_GLOBAL_LOCK_ENABLE,  ACPI_BITMASK_GLOBAL_LOCK_STATUS,    ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
381         /* ACPI_EVENT_POWER_BUTTON  */  {ACPI_BITREG_POWER_BUTTON_STATUS,   ACPI_BITREG_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_STATUS,   ACPI_BITMASK_POWER_BUTTON_ENABLE},
382         /* ACPI_EVENT_SLEEP_BUTTON  */  {ACPI_BITREG_SLEEP_BUTTON_STATUS,   ACPI_BITREG_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_STATUS,   ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
383         /* ACPI_EVENT_RTC           */  {ACPI_BITREG_RT_CLOCK_STATUS,       ACPI_BITREG_RT_CLOCK_ENABLE,     ACPI_BITMASK_RT_CLOCK_STATUS,       ACPI_BITMASK_RT_CLOCK_ENABLE},
384 };
385 
386 /*****************************************************************************
387  *
388  * FUNCTION:    acpi_ut_get_region_name
389  *
390  * PARAMETERS:  None.
391  *
392  * RETURN:      Status
393  *
394  * DESCRIPTION: Translate a Space ID into a name string (Debug only)
395  *
396  ****************************************************************************/
397 
398 /* Region type decoding */
399 
400 const char                *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] =
401 {
402 /*! [Begin] no source code translation (keep these ASL Keywords as-is) */
403         "SystemMemory",
404         "SystemIO",
405         "PCI_Config",
406         "EmbeddedControl",
407         "SMBus",
408         "CMOS",
409         "PCIBARTarget",
410         "DataTable"
411 /*! [End] no source code translation !*/
412 };
413 
414 
415 char *
416 acpi_ut_get_region_name (
417         u8                              space_id)
418 {
419 
420         if (space_id >= ACPI_USER_REGION_BEGIN)
421         {
422                 return ("user_defined_region");
423         }
424 
425         else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS)
426         {
427                 return ("invalid_space_id");
428         }
429 
430         return ((char *) acpi_gbl_region_types[space_id]);
431 }
432 
433 
434 /*****************************************************************************
435  *
436  * FUNCTION:    acpi_ut_get_event_name
437  *
438  * PARAMETERS:  None.
439  *
440  * RETURN:      Status
441  *
442  * DESCRIPTION: Translate a Event ID into a name string (Debug only)
443  *
444  ****************************************************************************/
445 
446 /* Event type decoding */
447 
448 static const char                *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] =
449 {
450         "PM_Timer",
451         "global_lock",
452         "power_button",
453         "sleep_button",
454         "real_time_clock",
455 };
456 
457 
458 char *
459 acpi_ut_get_event_name (
460         u32                             event_id)
461 {
462 
463         if (event_id > ACPI_EVENT_MAX)
464         {
465                 return ("invalid_event_iD");
466         }
467 
468         return ((char *) acpi_gbl_event_types[event_id]);
469 }
470 
471 
472 /*****************************************************************************
473  *
474  * FUNCTION:    acpi_ut_get_type_name
475  *
476  * PARAMETERS:  None.
477  *
478  * RETURN:      Status
479  *
480  * DESCRIPTION: Translate a Type ID into a name string (Debug only)
481  *
482  ****************************************************************************/
483 
484 /*
485  * Elements of acpi_gbl_ns_type_names below must match
486  * one-to-one with values of acpi_object_type
487  *
488  * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching; when
489  * stored in a table it really means that we have thus far seen no evidence to
490  * indicate what type is actually going to be stored for this entry.
491  */
492 static const char                   acpi_gbl_bad_type[] = "UNDEFINED";
493 #define TYPE_NAME_LENGTH    12                           /* Maximum length of each string */
494 
495 static const char                   *acpi_gbl_ns_type_names[] = /* printable names of ACPI types */
496 {
497         /* 00 */ "Untyped",
498         /* 01 */ "Integer",
499         /* 02 */ "String",
500         /* 03 */ "Buffer",
501         /* 04 */ "Package",
502         /* 05 */ "field_unit",
503         /* 06 */ "Device",
504         /* 07 */ "Event",
505         /* 08 */ "Method",
506         /* 09 */ "Mutex",
507         /* 10 */ "Region",
508         /* 11 */ "Power",
509         /* 12 */ "Processor",
510         /* 13 */ "Thermal",
511         /* 14 */ "buffer_field",
512         /* 15 */ "ddb_handle",
513         /* 16 */ "debug_object",
514         /* 17 */ "region_field",
515         /* 18 */ "bank_field",
516         /* 19 */ "index_field",
517         /* 20 */ "Reference",
518         /* 21 */ "Alias",
519         /* 22 */ "method_alias",
520         /* 23 */ "Notify",
521         /* 24 */ "addr_handler",
522         /* 25 */ "resource_desc",
523         /* 26 */ "resource_fld",
524         /* 27 */ "Scope",
525         /* 28 */ "Extra",
526         /* 29 */ "Data",
527         /* 30 */ "Invalid"
528 };
529 
530 
531 char *
532 acpi_ut_get_type_name (
533         acpi_object_type                type)
534 {
535 
536         if (type > ACPI_TYPE_INVALID)
537         {
538                 return ((char *) acpi_gbl_bad_type);
539         }
540 
541         return ((char *) acpi_gbl_ns_type_names[type]);
542 }
543 
544 
545 char *
546 acpi_ut_get_object_type_name (
547         union acpi_operand_object       *obj_desc)
548 {
549 
550         if (!obj_desc)
551         {
552                 return ("[NULL Object Descriptor]");
553         }
554 
555         return (acpi_ut_get_type_name (ACPI_GET_OBJECT_TYPE (obj_desc)));
556 }
557 
558 
559 /*****************************************************************************
560  *
561  * FUNCTION:    acpi_ut_get_node_name
562  *
563  * PARAMETERS:  Object               - A namespace node
564  *
565  * RETURN:      Pointer to a string
566  *
567  * DESCRIPTION: Validate the node and return the node's ACPI name.
568  *
569  ****************************************************************************/
570 
571 char *
572 acpi_ut_get_node_name (
573         void                            *object)
574 {
575         struct acpi_namespace_node      *node = (struct acpi_namespace_node *) object;
576 
577 
578         /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */
579 
580         if (!object)
581         {
582                 return ("NULL");
583         }
584 
585         /* Check for Root node */
586 
587         if ((object == ACPI_ROOT_OBJECT) ||
588                 (object == acpi_gbl_root_node))
589         {
590                 return ("\"\\\" ");
591         }
592 
593         /* Descriptor must be a namespace node */
594 
595         if (node->descriptor != ACPI_DESC_TYPE_NAMED)
596         {
597                 return ("####");
598         }
599 
600         /* Name must be a valid ACPI name */
601 
602         if (!acpi_ut_valid_acpi_name (* (u32 *) node->name.ascii))
603         {
604                 return ("????");
605         }
606 
607         /* Return the name */
608 
609         return (node->name.ascii);
610 }
611 
612 
613 /*****************************************************************************
614  *
615  * FUNCTION:    acpi_ut_get_descriptor_name
616  *
617  * PARAMETERS:  Object               - An ACPI object
618  *
619  * RETURN:      Pointer to a string
620  *
621  * DESCRIPTION: Validate object and return the descriptor type
622  *
623  ****************************************************************************/
624 
625 static const char                   *acpi_gbl_desc_type_names[] = /* printable names of descriptor types */
626 {
627         /* 00 */ "Invalid",
628         /* 01 */ "Cached",
629         /* 02 */ "State-Generic",
630         /* 03 */ "State-Update",
631         /* 04 */ "State-Package",
632         /* 05 */ "State-Control",
633         /* 06 */ "State-root_parse_scope",
634         /* 07 */ "State-parse_scope",
635         /* 08 */ "State-walk_scope",
636         /* 09 */ "State-Result",
637         /* 10 */ "State-Notify",
638         /* 11 */ "State-Thread",
639         /* 12 */ "Walk",
640         /* 13 */ "Parser",
641         /* 14 */ "Operand",
642         /* 15 */ "Node"
643 };
644 
645 
646 char *
647 acpi_ut_get_descriptor_name (
648         void                            *object)
649 {
650 
651         if (!object)
652         {
653                 return ("NULL OBJECT");
654         }
655 
656         if (ACPI_GET_DESCRIPTOR_TYPE (object) > ACPI_DESC_TYPE_MAX)
657         {
658                 return ((char *) acpi_gbl_bad_type);
659         }
660 
661         return ((char *) acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE (object)]);
662 
663 }
664 
665 
666 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
667 /*
668  * Strings and procedures used for debug only
669  */
670 
671 /*****************************************************************************
672  *
673  * FUNCTION:    acpi_ut_get_mutex_name
674  *
675  * PARAMETERS:  None.
676  *
677  * RETURN:      Status
678  *
679  * DESCRIPTION: Translate a mutex ID into a name string (Debug only)
680  *
681  ****************************************************************************/
682 
683 char *
684 acpi_ut_get_mutex_name (
685         u32                             mutex_id)
686 {
687 
688         if (mutex_id > MAX_MUTEX)
689         {
690                 return ("Invalid Mutex ID");
691         }
692 
693         return (acpi_gbl_mutex_names[mutex_id]);
694 }
695 
696 #endif
697 
698 
699 /*****************************************************************************
700  *
701  * FUNCTION:    acpi_ut_valid_object_type
702  *
703  * PARAMETERS:  Type            - Object type to be validated
704  *
705  * RETURN:      TRUE if valid object type
706  *
707  * DESCRIPTION: Validate an object type
708  *
709  ****************************************************************************/
710 
711 u8
712 acpi_ut_valid_object_type (
713         acpi_object_type                type)
714 {
715 
716         if (type > ACPI_TYPE_LOCAL_MAX)
717         {
718                 /* Note: Assumes all TYPEs are contiguous (external/local) */
719 
720                 return (FALSE);
721         }
722 
723         return (TRUE);
724 }
725 
726 
727 /****************************************************************************
728  *
729  * FUNCTION:    acpi_ut_allocate_owner_id
730  *
731  * PARAMETERS:  id_type         - Type of ID (method or table)
732  *
733  * DESCRIPTION: Allocate a table or method owner id
734  *
735  ***************************************************************************/
736 
737 acpi_owner_id
738 acpi_ut_allocate_owner_id (
739         u32                             id_type)
740 {
741         acpi_owner_id                   owner_id = 0xFFFF;
742 
743 
744         ACPI_FUNCTION_TRACE ("ut_allocate_owner_id");
745 
746 
747         if (ACPI_FAILURE (acpi_ut_acquire_mutex (ACPI_MTX_CACHES)))
748         {
749                 return (0);
750         }
751 
752         switch (id_type)
753         {
754         case ACPI_OWNER_TYPE_TABLE:
755 
756                 owner_id = acpi_gbl_next_table_owner_id;
757                 acpi_gbl_next_table_owner_id++;
758 
759                 /* Check for wraparound */
760 
761                 if (acpi_gbl_next_table_owner_id == ACPI_FIRST_METHOD_ID)
762                 {
763                         acpi_gbl_next_table_owner_id = ACPI_FIRST_TABLE_ID;
764                         ACPI_REPORT_WARNING (("Table owner ID wraparound\n"));
765                 }
766                 break;
767 
768 
769         case ACPI_OWNER_TYPE_METHOD:
770 
771                 owner_id = acpi_gbl_next_method_owner_id;
772                 acpi_gbl_next_method_owner_id++;
773 
774                 if (acpi_gbl_next_method_owner_id == ACPI_FIRST_TABLE_ID)
775                 {
776                         /* Check for wraparound */
777 
778                         acpi_gbl_next_method_owner_id = ACPI_FIRST_METHOD_ID;
779                 }
780                 break;
781 
782         default:
783                 break;
784         }
785 
786         (void) acpi_ut_release_mutex (ACPI_MTX_CACHES);
787         return_VALUE (owner_id);
788 }
789 
790 
791 /****************************************************************************
792  *
793  * FUNCTION:    acpi_ut_init_globals
794  *
795  * PARAMETERS:  none
796  *
797  * DESCRIPTION: Init library globals.  All globals that require specific
798  *              initialization should be initialized here!
799  *
800  ***************************************************************************/
801 
802 void
803 acpi_ut_init_globals (
804         void)
805 {
806         u32                             i;
807 
808 
809         ACPI_FUNCTION_TRACE ("ut_init_globals");
810 
811 
812         /* Memory allocation and cache lists */
813 
814         ACPI_MEMSET (acpi_gbl_memory_lists, 0, sizeof (struct acpi_memory_list) * ACPI_NUM_MEM_LISTS);
815 
816         acpi_gbl_memory_lists[ACPI_MEM_LIST_STATE].link_offset      = (u16) ACPI_PTR_DIFF (&(((union acpi_generic_state *) NULL)->common.next), NULL);
817         acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE].link_offset     = (u16) ACPI_PTR_DIFF (&(((union acpi_parse_object *) NULL)->common.next), NULL);
818         acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE_EXT].link_offset = (u16) ACPI_PTR_DIFF (&(((union acpi_parse_object *) NULL)->common.next), NULL);
819         acpi_gbl_memory_lists[ACPI_MEM_LIST_OPERAND].link_offset    = (u16) ACPI_PTR_DIFF (&(((union acpi_operand_object *) NULL)->cache.next), NULL);
820         acpi_gbl_memory_lists[ACPI_MEM_LIST_WALK].link_offset       = (u16) ACPI_PTR_DIFF (&(((struct acpi_walk_state *) NULL)->next), NULL);
821 
822         acpi_gbl_memory_lists[ACPI_MEM_LIST_NSNODE].object_size     = sizeof (struct acpi_namespace_node);
823         acpi_gbl_memory_lists[ACPI_MEM_LIST_STATE].object_size      = sizeof (union acpi_generic_state);
824         acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE].object_size     = sizeof (struct acpi_parse_obj_common);
825         acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE_EXT].object_size = sizeof (struct acpi_parse_obj_named);
826         acpi_gbl_memory_lists[ACPI_MEM_LIST_OPERAND].object_size    = sizeof (union acpi_operand_object);
827         acpi_gbl_memory_lists[ACPI_MEM_LIST_WALK].object_size       = sizeof (struct acpi_walk_state);
828 
829         acpi_gbl_memory_lists[ACPI_MEM_LIST_STATE].max_cache_depth  = ACPI_MAX_STATE_CACHE_DEPTH;
830         acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE].max_cache_depth = ACPI_MAX_PARSE_CACHE_DEPTH;
831         acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE_EXT].max_cache_depth = ACPI_MAX_EXTPARSE_CACHE_DEPTH;
832         acpi_gbl_memory_lists[ACPI_MEM_LIST_OPERAND].max_cache_depth = ACPI_MAX_OBJECT_CACHE_DEPTH;
833         acpi_gbl_memory_lists[ACPI_MEM_LIST_WALK].max_cache_depth   = ACPI_MAX_WALK_CACHE_DEPTH;
834 
835         ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].list_name    = "Global Memory Allocation");
836         ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_NSNODE].list_name    = "Namespace Nodes");
837         ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_STATE].list_name     = "State Object Cache");
838         ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE].list_name    = "Parse Node Cache");
839         ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE_EXT].list_name = "Extended Parse Node Cache");
840         ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_OPERAND].list_name   = "Operand Object Cache");
841         ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_WALK].list_name      = "Tree Walk Node Cache");
842 
843         /* ACPI table structure */
844 
845         for (i = 0; i < NUM_ACPI_TABLE_TYPES; i++)
846         {
847                 acpi_gbl_table_lists[i].next        = NULL;
848                 acpi_gbl_table_lists[i].count       = 0;
849         }
850 
851         /* Mutex locked flags */
852 
853         for (i = 0; i < NUM_MUTEX; i++)
854         {
855                 acpi_gbl_mutex_info[i].mutex        = NULL;
856                 acpi_gbl_mutex_info[i].owner_id     = ACPI_MUTEX_NOT_ACQUIRED;
857                 acpi_gbl_mutex_info[i].use_count    = 0;
858         }
859 
860         /* GPE support */
861 
862         acpi_gbl_gpe_xrupt_list_head        = NULL;
863         acpi_gbl_gpe_fadt_blocks[0]         = NULL;
864         acpi_gbl_gpe_fadt_blocks[1]         = NULL;
865 
866         /* Global notify handlers */
867 
868         acpi_gbl_system_notify.handler      = NULL;
869         acpi_gbl_device_notify.handler      = NULL;
870         acpi_gbl_exception_handler          = NULL;
871         acpi_gbl_init_handler               = NULL;
872 
873         /* Global "typed" ACPI table pointers */
874 
875         acpi_gbl_RSDP                       = NULL;
876         acpi_gbl_XSDT                       = NULL;
877         acpi_gbl_FACS                       = NULL;
878         acpi_gbl_FADT                       = NULL;
879         acpi_gbl_DSDT                       = NULL;
880 
881         /* Global Lock support */
882 
883         acpi_gbl_global_lock_acquired       = FALSE;
884         acpi_gbl_global_lock_thread_count   = 0;
885         acpi_gbl_global_lock_handle         = 0;
886 
887         /* Miscellaneous variables */
888 
889         acpi_gbl_table_flags                = ACPI_PHYSICAL_POINTER;
890         acpi_gbl_rsdp_original_location     = 0;
891         acpi_gbl_cm_single_step             = FALSE;
892         acpi_gbl_db_terminate_threads       = FALSE;
893         acpi_gbl_shutdown                   = FALSE;
894         acpi_gbl_ns_lookup_count            = 0;
895         acpi_gbl_ps_find_count              = 0;
896         acpi_gbl_acpi_hardware_present      = TRUE;
897         acpi_gbl_next_table_owner_id        = ACPI_FIRST_TABLE_ID;
898         acpi_gbl_next_method_owner_id       = ACPI_FIRST_METHOD_ID;
899         acpi_gbl_debugger_configuration     = DEBUGGER_THREADING;
900         acpi_gbl_db_output_flags            = ACPI_DB_CONSOLE_OUTPUT;
901 
902         /* Hardware oriented */
903 
904         acpi_gbl_events_initialized         = FALSE;
905         acpi_gbl_system_awake_and_running   = TRUE;
906 
907         /* Namespace */
908 
909         acpi_gbl_root_node                  = NULL;
910 
911         acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME;
912         acpi_gbl_root_node_struct.descriptor = ACPI_DESC_TYPE_NAMED;
913         acpi_gbl_root_node_struct.type      = ACPI_TYPE_DEVICE;
914         acpi_gbl_root_node_struct.child     = NULL;
915         acpi_gbl_root_node_struct.peer      = NULL;
916         acpi_gbl_root_node_struct.object    = NULL;
917         acpi_gbl_root_node_struct.flags     = ANOBJ_END_OF_PEER_LIST;
918 
919 
920 #ifdef ACPI_DEBUG_OUTPUT
921         acpi_gbl_lowest_stack_pointer       = ACPI_SIZE_MAX;
922 #endif
923 
924         return_VOID;
925 }
926 
927 
928 
  This page was automatically generated by the LXR engine.