xref: /dflybsd-src/sys/contrib/dev/acpica/source/include/acoutput.h (revision c8860c9adc386d4c6e42a14b22ea4165d1f37b72)
1  /******************************************************************************
2   *
3   * Name: acoutput.h -- debug output
4   *
5   *****************************************************************************/
6  
7  /******************************************************************************
8   *
9   * 1. Copyright Notice
10   *
11   * Some or all of this work - Copyright (c) 1999 - 2021, Intel Corp.
12   * All rights reserved.
13   *
14   * 2. License
15   *
16   * 2.1. This is your license from Intel Corp. under its intellectual property
17   * rights. You may have additional license terms from the party that provided
18   * you this software, covering your right to use that party's intellectual
19   * property rights.
20   *
21   * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22   * copy of the source code appearing in this file ("Covered Code") an
23   * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24   * base code distributed originally by Intel ("Original Intel Code") to copy,
25   * make derivatives, distribute, use and display any portion of the Covered
26   * Code in any form, with the right to sublicense such rights; and
27   *
28   * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29   * license (with the right to sublicense), under only those claims of Intel
30   * patents that are infringed by the Original Intel Code, to make, use, sell,
31   * offer to sell, and import the Covered Code and derivative works thereof
32   * solely to the minimum extent necessary to exercise the above copyright
33   * license, and in no event shall the patent license extend to any additions
34   * to or modifications of the Original Intel Code. No other license or right
35   * is granted directly or by implication, estoppel or otherwise;
36   *
37   * The above copyright and patent license is granted only if the following
38   * conditions are met:
39   *
40   * 3. Conditions
41   *
42   * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43   * Redistribution of source code of any substantial portion of the Covered
44   * Code or modification with rights to further distribute source must include
45   * the above Copyright Notice, the above License, this list of Conditions,
46   * and the following Disclaimer and Export Compliance provision. In addition,
47   * Licensee must cause all Covered Code to which Licensee contributes to
48   * contain a file documenting the changes Licensee made to create that Covered
49   * Code and the date of any change. Licensee must include in that file the
50   * documentation of any changes made by any predecessor Licensee. Licensee
51   * must include a prominent statement that the modification is derived,
52   * directly or indirectly, from Original Intel Code.
53   *
54   * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55   * Redistribution of source code of any substantial portion of the Covered
56   * Code or modification without rights to further distribute source must
57   * include the following Disclaimer and Export Compliance provision in the
58   * documentation and/or other materials provided with distribution. In
59   * addition, Licensee may not authorize further sublicense of source of any
60   * portion of the Covered Code, and must include terms to the effect that the
61   * license from Licensee to its licensee is limited to the intellectual
62   * property embodied in the software Licensee provides to its licensee, and
63   * not to intellectual property embodied in modifications its licensee may
64   * make.
65   *
66   * 3.3. Redistribution of Executable. Redistribution in executable form of any
67   * substantial portion of the Covered Code or modification must reproduce the
68   * above Copyright Notice, and the following Disclaimer and Export Compliance
69   * provision in the documentation and/or other materials provided with the
70   * distribution.
71   *
72   * 3.4. Intel retains all right, title, and interest in and to the Original
73   * Intel Code.
74   *
75   * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76   * Intel shall be used in advertising or otherwise to promote the sale, use or
77   * other dealings in products derived from or relating to the Covered Code
78   * without prior written authorization from Intel.
79   *
80   * 4. Disclaimer and Export Compliance
81   *
82   * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83   * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84   * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85   * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86   * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87   * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88   * PARTICULAR PURPOSE.
89   *
90   * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91   * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92   * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93   * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94   * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95   * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96   * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97   * LIMITED REMEDY.
98   *
99   * 4.3. Licensee shall not export, either directly or indirectly, any of this
100   * software or system incorporating such software without first obtaining any
101   * required license or other approval from the U. S. Department of Commerce or
102   * any other agency or department of the United States Government. In the
103   * event Licensee exports any such software from the United States or
104   * re-exports any such software from a foreign destination, Licensee shall
105   * ensure that the distribution and export/re-export of the software is in
106   * compliance with all laws, regulations, orders, or other restrictions of the
107   * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108   * any of its subsidiaries will export/re-export any technical data, process,
109   * software, or service, directly or indirectly, to any country for which the
110   * United States government or any agency thereof requires an export license,
111   * other governmental approval, or letter of assurance, without first obtaining
112   * such license, approval or letter.
113   *
114   *****************************************************************************
115   *
116   * Alternatively, you may choose to be licensed under the terms of the
117   * following license:
118   *
119   * Redistribution and use in source and binary forms, with or without
120   * modification, are permitted provided that the following conditions
121   * are met:
122   * 1. Redistributions of source code must retain the above copyright
123   *    notice, this list of conditions, and the following disclaimer,
124   *    without modification.
125   * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126   *    substantially similar to the "NO WARRANTY" disclaimer below
127   *    ("Disclaimer") and any redistribution must be conditioned upon
128   *    including a substantially similar Disclaimer requirement for further
129   *    binary redistribution.
130   * 3. Neither the names of the above-listed copyright holders nor the names
131   *    of any contributors may be used to endorse or promote products derived
132   *    from this software without specific prior written permission.
133   *
134   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138   * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145   *
146   * Alternatively, you may choose to be licensed under the terms of the
147   * GNU General Public License ("GPL") version 2 as published by the Free
148   * Software Foundation.
149   *
150   *****************************************************************************/
151  
152  #ifndef __ACOUTPUT_H__
153  #define __ACOUTPUT_H__
154  
155  /*
156   * Debug levels and component IDs. These are used to control the
157   * granularity of the output of the ACPI_DEBUG_PRINT macro -- on a
158   * per-component basis and a per-exception-type basis.
159   */
160  
161  /* Component IDs are used in the global "DebugLayer" */
162  
163  #define ACPI_UTILITIES              0x00000001
164  #define ACPI_HARDWARE               0x00000002
165  #define ACPI_EVENTS                 0x00000004
166  #define ACPI_TABLES                 0x00000008
167  #define ACPI_NAMESPACE              0x00000010
168  #define ACPI_PARSER                 0x00000020
169  #define ACPI_DISPATCHER             0x00000040
170  #define ACPI_EXECUTER               0x00000080
171  #define ACPI_RESOURCES              0x00000100
172  #define ACPI_CA_DEBUGGER            0x00000200
173  #define ACPI_OS_SERVICES            0x00000400
174  #define ACPI_CA_DISASSEMBLER        0x00000800
175  
176  /* Component IDs for ACPI tools and utilities */
177  
178  #define ACPI_COMPILER               0x00001000
179  #define ACPI_TOOLS                  0x00002000
180  #define ACPI_EXAMPLE                0x00004000
181  #define ACPI_DRIVER                 0x00008000
182  #define DT_COMPILER                 0x00010000
183  #define ASL_PREPROCESSOR            0x00020000
184  
185  #define ACPI_ALL_COMPONENTS         0x0001FFFF
186  #define ACPI_COMPONENT_DEFAULT      (ACPI_ALL_COMPONENTS)
187  
188  /* Component IDs reserved for ACPI drivers */
189  
190  #define ACPI_ALL_DRIVERS            0xFFFF0000
191  
192  
193  /*
194   * Raw debug output levels, do not use these in the ACPI_DEBUG_PRINT macros
195   */
196  #define ACPI_LV_INIT                0x00000001
197  #define ACPI_LV_DEBUG_OBJECT        0x00000002
198  #define ACPI_LV_INFO                0x00000004
199  #define ACPI_LV_REPAIR              0x00000008
200  #define ACPI_LV_TRACE_POINT         0x00000010
201  #define ACPI_LV_ALL_EXCEPTIONS      0x0000001F
202  
203  /* Trace verbosity level 1 [Standard Trace Level] */
204  
205  #define ACPI_LV_INIT_NAMES          0x00000020
206  #define ACPI_LV_PARSE               0x00000040
207  #define ACPI_LV_LOAD                0x00000080
208  #define ACPI_LV_DISPATCH            0x00000100
209  #define ACPI_LV_EXEC                0x00000200
210  #define ACPI_LV_NAMES               0x00000400
211  #define ACPI_LV_OPREGION            0x00000800
212  #define ACPI_LV_BFIELD              0x00001000
213  #define ACPI_LV_TABLES              0x00002000
214  #define ACPI_LV_VALUES              0x00004000
215  #define ACPI_LV_OBJECTS             0x00008000
216  #define ACPI_LV_RESOURCES           0x00010000
217  #define ACPI_LV_USER_REQUESTS       0x00020000
218  #define ACPI_LV_PACKAGE             0x00040000
219  #define ACPI_LV_EVALUATION          0x00080000
220  #define ACPI_LV_VERBOSITY1          0x000FFFE0 | ACPI_LV_ALL_EXCEPTIONS
221  
222  /* Trace verbosity level 2 [Function tracing and memory allocation] */
223  
224  #define ACPI_LV_ALLOCATIONS         0x00100000
225  #define ACPI_LV_FUNCTIONS           0x00200000
226  #define ACPI_LV_OPTIMIZATIONS       0x00400000
227  #define ACPI_LV_PARSE_TREES         0x00800000
228  #define ACPI_LV_VERBOSITY2          0x00F00000 | ACPI_LV_VERBOSITY1
229  #define ACPI_LV_ALL                 ACPI_LV_VERBOSITY2
230  
231  /* Trace verbosity level 3 [Threading, I/O, and Interrupts] */
232  
233  #define ACPI_LV_MUTEX               0x01000000
234  #define ACPI_LV_THREADS             0x02000000
235  #define ACPI_LV_IO                  0x04000000
236  #define ACPI_LV_INTERRUPTS          0x08000000
237  #define ACPI_LV_VERBOSITY3          0x0F000000 | ACPI_LV_VERBOSITY2
238  
239  /* Exceptionally verbose output -- also used in the global "DebugLevel"  */
240  
241  #define ACPI_LV_AML_DISASSEMBLE     0x10000000
242  #define ACPI_LV_VERBOSE_INFO        0x20000000
243  #define ACPI_LV_FULL_TABLES         0x40000000
244  #define ACPI_LV_EVENTS              0x80000000
245  #define ACPI_LV_VERBOSE             0xF0000000
246  
247  
248  /*
249   * Debug level macros that are used in the DEBUG_PRINT macros
250   */
251  #define ACPI_DEBUG_LEVEL(dl)        (UINT32) dl,ACPI_DEBUG_PARAMETERS
252  
253  /*
254   * Exception level -- used in the global "DebugLevel"
255   *
256   * Note: For errors, use the ACPI_ERROR or ACPI_EXCEPTION interfaces.
257   * For warnings, use ACPI_WARNING.
258   */
259  #define ACPI_DB_INIT                ACPI_DEBUG_LEVEL (ACPI_LV_INIT)
260  #define ACPI_DB_DEBUG_OBJECT        ACPI_DEBUG_LEVEL (ACPI_LV_DEBUG_OBJECT)
261  #define ACPI_DB_INFO                ACPI_DEBUG_LEVEL (ACPI_LV_INFO)
262  #define ACPI_DB_REPAIR              ACPI_DEBUG_LEVEL (ACPI_LV_REPAIR)
263  #define ACPI_DB_TRACE_POINT         ACPI_DEBUG_LEVEL (ACPI_LV_TRACE_POINT)
264  #define ACPI_DB_ALL_EXCEPTIONS      ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS)
265  
266  /* Trace level -- also used in the global "DebugLevel" */
267  
268  #define ACPI_DB_INIT_NAMES          ACPI_DEBUG_LEVEL (ACPI_LV_INIT_NAMES)
269  #define ACPI_DB_THREADS             ACPI_DEBUG_LEVEL (ACPI_LV_THREADS)
270  #define ACPI_DB_PARSE               ACPI_DEBUG_LEVEL (ACPI_LV_PARSE)
271  #define ACPI_DB_DISPATCH            ACPI_DEBUG_LEVEL (ACPI_LV_DISPATCH)
272  #define ACPI_DB_LOAD                ACPI_DEBUG_LEVEL (ACPI_LV_LOAD)
273  #define ACPI_DB_EXEC                ACPI_DEBUG_LEVEL (ACPI_LV_EXEC)
274  #define ACPI_DB_NAMES               ACPI_DEBUG_LEVEL (ACPI_LV_NAMES)
275  #define ACPI_DB_OPREGION            ACPI_DEBUG_LEVEL (ACPI_LV_OPREGION)
276  #define ACPI_DB_BFIELD              ACPI_DEBUG_LEVEL (ACPI_LV_BFIELD)
277  #define ACPI_DB_TABLES              ACPI_DEBUG_LEVEL (ACPI_LV_TABLES)
278  #define ACPI_DB_FUNCTIONS           ACPI_DEBUG_LEVEL (ACPI_LV_FUNCTIONS)
279  #define ACPI_DB_OPTIMIZATIONS       ACPI_DEBUG_LEVEL (ACPI_LV_OPTIMIZATIONS)
280  #define ACPI_DB_PARSE_TREES         ACPI_DEBUG_LEVEL (ACPI_LV_PARSE_TREES)
281  #define ACPI_DB_VALUES              ACPI_DEBUG_LEVEL (ACPI_LV_VALUES)
282  #define ACPI_DB_OBJECTS             ACPI_DEBUG_LEVEL (ACPI_LV_OBJECTS)
283  #define ACPI_DB_ALLOCATIONS         ACPI_DEBUG_LEVEL (ACPI_LV_ALLOCATIONS)
284  #define ACPI_DB_RESOURCES           ACPI_DEBUG_LEVEL (ACPI_LV_RESOURCES)
285  #define ACPI_DB_IO                  ACPI_DEBUG_LEVEL (ACPI_LV_IO)
286  #define ACPI_DB_INTERRUPTS          ACPI_DEBUG_LEVEL (ACPI_LV_INTERRUPTS)
287  #define ACPI_DB_USER_REQUESTS       ACPI_DEBUG_LEVEL (ACPI_LV_USER_REQUESTS)
288  #define ACPI_DB_PACKAGE             ACPI_DEBUG_LEVEL (ACPI_LV_PACKAGE)
289  #define ACPI_DB_EVALUATION          ACPI_DEBUG_LEVEL (ACPI_LV_EVALUATION)
290  #define ACPI_DB_MUTEX               ACPI_DEBUG_LEVEL (ACPI_LV_MUTEX)
291  #define ACPI_DB_EVENTS              ACPI_DEBUG_LEVEL (ACPI_LV_EVENTS)
292  
293  #define ACPI_DB_ALL                 ACPI_DEBUG_LEVEL (ACPI_LV_ALL)
294  
295  /* Defaults for DebugLevel, debug and normal */
296  
297  #define ACPI_DEBUG_DEFAULT          (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_EVALUATION | ACPI_LV_REPAIR)
298  #define ACPI_NORMAL_DEFAULT         (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR)
299  #define ACPI_DEBUG_ALL              (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
300  
301  
302  /*
303   * Global trace flags
304   */
305  #define ACPI_TRACE_ENABLED          ((UINT32) 4)
306  #define ACPI_TRACE_ONESHOT          ((UINT32) 2)
307  #define ACPI_TRACE_OPCODE           ((UINT32) 1)
308  
309  /* Defaults for trace debugging level/layer */
310  
311  #define ACPI_TRACE_LEVEL_ALL        ACPI_LV_ALL
312  #define ACPI_TRACE_LAYER_ALL        0x000001FF
313  #define ACPI_TRACE_LEVEL_DEFAULT    ACPI_LV_TRACE_POINT
314  #define ACPI_TRACE_LAYER_DEFAULT    ACPI_EXECUTER
315  
316  
317  #if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES)
318  /*
319   * The module name is used primarily for error and debug messages.
320   * The __FILE__ macro is not very useful for this, because it
321   * usually includes the entire pathname to the module making the
322   * debug output difficult to read.
323   */
324  #define ACPI_MODULE_NAME(Name)          static const char ACPI_UNUSED_VAR _AcpiModuleName[] = Name;
325  #else
326  /*
327   * For the no-debug and no-error-msg cases, we must at least define
328   * a null module name.
329   */
330  #define ACPI_MODULE_NAME(Name)
331  #define _AcpiModuleName ""
332  #endif
333  
334  /*
335   * Ascii error messages can be configured out
336   */
337  #ifndef ACPI_NO_ERROR_MESSAGES
338  #define AE_INFO                         _AcpiModuleName, __LINE__
339  
340  /*
341   * Error reporting. Callers module and line number are inserted by AE_INFO,
342   * the plist contains a set of parens to allow variable-length lists.
343   * These macros are used for both the debug and non-debug versions of the code.
344   */
345  #define ACPI_INFO(plist)                AcpiInfo plist
346  #define ACPI_WARNING(plist)             AcpiWarning plist
347  #define ACPI_EXCEPTION(plist)           AcpiException plist
348  #define ACPI_ERROR(plist)               AcpiError plist
349  #define ACPI_BIOS_WARNING(plist)        AcpiBiosWarning plist
350  #define ACPI_BIOS_EXCEPTION(plist)      AcpiBiosException plist
351  #define ACPI_BIOS_ERROR(plist)          AcpiBiosError plist
352  #define ACPI_DEBUG_OBJECT(obj,l,i)      AcpiExDoDebugObject(obj,l,i)
353  
354  #else
355  
356  /* No error messages */
357  
358  #define ACPI_INFO(plist)
359  #define ACPI_WARNING(plist)
360  #define ACPI_EXCEPTION(plist)
361  #define ACPI_ERROR(plist)
362  #define ACPI_BIOS_WARNING(plist)
363  #define ACPI_BIOS_EXCEPTION(plist)
364  #define ACPI_BIOS_ERROR(plist)
365  #define ACPI_DEBUG_OBJECT(obj,l,i)
366  
367  #endif /* ACPI_NO_ERROR_MESSAGES */
368  
369  
370  /*
371   * Debug macros that are conditionally compiled
372   */
373  #ifdef ACPI_DEBUG_OUTPUT
374  
375  /*
376   * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header,
377   * define it now. This is the case where there the compiler does not support
378   * a __FUNCTION__ macro or equivalent.
379   */
380  #ifndef ACPI_GET_FUNCTION_NAME
381  #define ACPI_GET_FUNCTION_NAME          _AcpiFunctionName
382  
383  /*
384   * The Name parameter should be the procedure name as a non-quoted string.
385   * The function name is also used by the function exit macros below.
386   * Note: (const char) is used to be compatible with the debug interfaces
387   * and macros such as __FUNCTION__.
388   */
389  #define ACPI_FUNCTION_NAME(Name)        static const char _AcpiFunctionName[] = #Name;
390  
391  #else
392  /* Compiler supports __FUNCTION__ (or equivalent) -- Ignore this macro */
393  
394  #define ACPI_FUNCTION_NAME(Name)
395  #endif /* ACPI_GET_FUNCTION_NAME */
396  
397  /*
398   * Common parameters used for debug output functions:
399   * line number, function name, module(file) name, component ID
400   */
401  #define ACPI_DEBUG_PARAMETERS \
402      __LINE__, ACPI_GET_FUNCTION_NAME, _AcpiModuleName, _COMPONENT
403  
404  /* Check if debug output is currently dynamically enabled */
405  
406  #define ACPI_IS_DEBUG_ENABLED(Level, Component) \
407      ((Level & AcpiDbgLevel) && (Component & AcpiDbgLayer))
408  
409  /*
410   * Master debug print macros
411   * Print message if and only if:
412   *    1) Debug print for the current component is enabled
413   *    2) Debug error level or trace level for the print statement is enabled
414   *
415   * November 2012: Moved the runtime check for whether to actually emit the
416   * debug message outside of the print function itself. This improves overall
417   * performance at a relatively small code cost. Implementation involves the
418   * use of variadic macros supported by C99.
419   *
420   * Note: the ACPI_DO_WHILE0 macro is used to prevent some compilers from
421   * complaining about these constructs. On other compilers the do...while
422   * adds some extra code, so this feature is optional.
423   */
424  #ifdef ACPI_USE_DO_WHILE_0
425  #define ACPI_DO_WHILE0(a)               do a while(0)
426  #else
427  #define ACPI_DO_WHILE0(a)               a
428  #endif
429  
430  /* DEBUG_PRINT functions */
431  
432  #ifndef COMPILER_VA_MACRO
433  
434  #define ACPI_DEBUG_PRINT(plist)         AcpiDebugPrint plist
435  #define ACPI_DEBUG_PRINT_RAW(plist)     AcpiDebugPrintRaw plist
436  
437  #else
438  
439  /* Helper macros for DEBUG_PRINT */
440  
441  #define ACPI_DO_DEBUG_PRINT(Function, Level, Line, Filename, Modulename, Component, ...) \
442      ACPI_DO_WHILE0 ({ \
443          if (ACPI_IS_DEBUG_ENABLED (Level, Component)) \
444          { \
445              Function (Level, Line, Filename, Modulename, Component, __VA_ARGS__); \
446          } \
447      })
448  
449  #define ACPI_ACTUAL_DEBUG(Level, Line, Filename, Modulename, Component, ...) \
450      ACPI_DO_DEBUG_PRINT (AcpiDebugPrint, Level, Line, \
451          Filename, Modulename, Component, __VA_ARGS__)
452  
453  #define ACPI_ACTUAL_DEBUG_RAW(Level, Line, Filename, Modulename, Component, ...) \
454      ACPI_DO_DEBUG_PRINT (AcpiDebugPrintRaw, Level, Line, \
455          Filename, Modulename, Component, __VA_ARGS__)
456  
457  #define ACPI_DEBUG_PRINT(plist)         ACPI_ACTUAL_DEBUG plist
458  #define ACPI_DEBUG_PRINT_RAW(plist)     ACPI_ACTUAL_DEBUG_RAW plist
459  
460  #endif
461  
462  
463  /*
464   * Function entry tracing
465   *
466   * The name of the function is emitted as a local variable that is
467   * intended to be used by both the entry trace and the exit trace.
468   */
469  
470  /* Helper macro */
471  
472  #define ACPI_TRACE_ENTRY(Name, Function, Type, Param) \
473      ACPI_FUNCTION_NAME (Name) \
474      Function (ACPI_DEBUG_PARAMETERS, (Type) (Param))
475  
476  /* The actual entry trace macros */
477  
478  #define ACPI_FUNCTION_TRACE(Name) \
479      ACPI_FUNCTION_NAME(Name) \
480      AcpiUtTrace (ACPI_DEBUG_PARAMETERS)
481  
482  #define ACPI_FUNCTION_TRACE_PTR(Name, Pointer) \
483      ACPI_TRACE_ENTRY (Name, AcpiUtTracePtr, void *, Pointer)
484  
485  #define ACPI_FUNCTION_TRACE_U32(Name, Value) \
486      ACPI_TRACE_ENTRY (Name, AcpiUtTraceU32, UINT32, Value)
487  
488  #define ACPI_FUNCTION_TRACE_STR(Name, String) \
489      ACPI_TRACE_ENTRY (Name, AcpiUtTraceStr, const char *, String)
490  
491  #define ACPI_FUNCTION_ENTRY() \
492      AcpiUtTrackStackPtr()
493  
494  
495  /*
496   * Function exit tracing
497   *
498   * These macros include a return statement. This is usually considered
499   * bad form, but having a separate exit macro before the actual return
500   * is very ugly and difficult to maintain.
501   *
502   * One of the FUNCTION_TRACE macros above must be used in conjunction
503   * with these macros so that "_AcpiFunctionName" is defined.
504   *
505   * There are two versions of most of the return macros. The default version is
506   * safer, since it avoids side-effects by guaranteeing that the argument will
507   * not be evaluated twice.
508   *
509   * A less-safe version of the macros is provided for optional use if the
510   * compiler uses excessive CPU stack (for example, this may happen in the
511   * debug case if code optimization is disabled.)
512   */
513  
514  /* Exit trace helper macro */
515  
516  #ifndef ACPI_SIMPLE_RETURN_MACROS
517  
518  #define ACPI_TRACE_EXIT(Function, Type, Param) \
519      ACPI_DO_WHILE0 ({ \
520          register Type _Param = (Type) (Param); \
521          Function (ACPI_DEBUG_PARAMETERS, _Param); \
522          return (_Param); \
523      })
524  
525  #else /* Use original less-safe macros */
526  
527  #define ACPI_TRACE_EXIT(Function, Type, Param) \
528      ACPI_DO_WHILE0 ({ \
529          Function (ACPI_DEBUG_PARAMETERS, (Type) (Param)); \
530          return (Param); \
531      })
532  
533  #endif /* ACPI_SIMPLE_RETURN_MACROS */
534  
535  /* The actual exit macros */
536  
537  #define return_VOID \
538      ACPI_DO_WHILE0 ({ \
539          AcpiUtExit (ACPI_DEBUG_PARAMETERS); \
540          return; \
541      })
542  
543  #define return_ACPI_STATUS(Status) \
544      ACPI_TRACE_EXIT (AcpiUtStatusExit, ACPI_STATUS, Status)
545  
546  #define return_PTR(Pointer) \
547      ACPI_TRACE_EXIT (AcpiUtPtrExit, void *, Pointer)
548  
549  #define return_STR(String) \
550      ACPI_TRACE_EXIT (AcpiUtStrExit, const char *, String)
551  
552  #define return_VALUE(Value) \
553      ACPI_TRACE_EXIT (AcpiUtValueExit, UINT64, Value)
554  
555  #define return_UINT32(Value) \
556      ACPI_TRACE_EXIT (AcpiUtValueExit, UINT32, Value)
557  
558  #define return_UINT8(Value) \
559      ACPI_TRACE_EXIT (AcpiUtValueExit, UINT8, Value)
560  
561  /* Conditional execution */
562  
563  #define ACPI_DEBUG_EXEC(a)              a
564  #define ACPI_DEBUG_ONLY_MEMBERS(a)      a;
565  #define _VERBOSE_STRUCTURES
566  
567  
568  /* Various object display routines for debug */
569  
570  #define ACPI_DUMP_STACK_ENTRY(a)        AcpiExDumpOperand((a), 0)
571  #define ACPI_DUMP_OPERANDS(a, b ,c)     AcpiExDumpOperands(a, b, c)
572  #define ACPI_DUMP_ENTRY(a, b)           AcpiNsDumpEntry (a, b)
573  #define ACPI_DUMP_PATHNAME(a, b, c, d)  AcpiNsDumpPathname(a, b, c, d)
574  #define ACPI_DUMP_BUFFER(a, b)          AcpiUtDebugDumpBuffer((UINT8 *) a, b, DB_BYTE_DISPLAY, _COMPONENT)
575  
576  #define ACPI_TRACE_POINT(a, b, c, d)    AcpiTracePoint (a, b, c, d)
577  
578  #else /* ACPI_DEBUG_OUTPUT */
579  /*
580   * This is the non-debug case -- make everything go away,
581   * leaving no executable debug code!
582   */
583  #define ACPI_DEBUG_PRINT(pl)
584  #define ACPI_DEBUG_PRINT_RAW(pl)
585  #define ACPI_DEBUG_EXEC(a)
586  #define ACPI_DEBUG_ONLY_MEMBERS(a)
587  #define ACPI_FUNCTION_NAME(a)
588  #define ACPI_FUNCTION_TRACE(a)
589  #define ACPI_FUNCTION_TRACE_PTR(a, b)
590  #define ACPI_FUNCTION_TRACE_U32(a, b)
591  #define ACPI_FUNCTION_TRACE_STR(a, b)
592  #define ACPI_FUNCTION_ENTRY()
593  #define ACPI_DUMP_STACK_ENTRY(a)
594  #define ACPI_DUMP_OPERANDS(a, b, c)
595  #define ACPI_DUMP_ENTRY(a, b)
596  #define ACPI_DUMP_PATHNAME(a, b, c, d)
597  #define ACPI_DUMP_BUFFER(a, b)
598  #define ACPI_IS_DEBUG_ENABLED(Level, Component) 0
599  #define ACPI_TRACE_POINT(a, b, c, d)
600  
601  /* Return macros must have a return statement at the minimum */
602  
603  #define return_VOID                     return
604  #define return_ACPI_STATUS(s)           return(s)
605  #define return_PTR(s)                   return(s)
606  #define return_STR(s)                   return(s)
607  #define return_VALUE(s)                 return(s)
608  #define return_UINT8(s)                 return(s)
609  #define return_UINT32(s)                return(s)
610  
611  #endif /* ACPI_DEBUG_OUTPUT */
612  
613  
614  #endif /* __ACOUTPUT_H__ */
615