xref: /openbmc/linux/include/acpi/acoutput.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1  /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
2  /******************************************************************************
3   *
4   * Name: acoutput.h -- debug output
5   *
6   * Copyright (C) 2000 - 2023, Intel Corp.
7   *
8   *****************************************************************************/
9  
10  #ifndef __ACOUTPUT_H__
11  #define __ACOUTPUT_H__
12  
13  /*
14   * Debug levels and component IDs. These are used to control the
15   * granularity of the output of the ACPI_DEBUG_PRINT macro -- on a
16   * per-component basis and a per-exception-type basis.
17   */
18  
19  /* Component IDs are used in the global "DebugLayer" */
20  
21  #define ACPI_UTILITIES              0x00000001
22  #define ACPI_HARDWARE               0x00000002
23  #define ACPI_EVENTS                 0x00000004
24  #define ACPI_TABLES                 0x00000008
25  #define ACPI_NAMESPACE              0x00000010
26  #define ACPI_PARSER                 0x00000020
27  #define ACPI_DISPATCHER             0x00000040
28  #define ACPI_EXECUTER               0x00000080
29  #define ACPI_RESOURCES              0x00000100
30  #define ACPI_CA_DEBUGGER            0x00000200
31  #define ACPI_OS_SERVICES            0x00000400
32  #define ACPI_CA_DISASSEMBLER        0x00000800
33  
34  /* Component IDs for ACPI tools and utilities */
35  
36  #define ACPI_COMPILER               0x00001000
37  #define ACPI_TOOLS                  0x00002000
38  #define ACPI_EXAMPLE                0x00004000
39  #define ACPI_DRIVER                 0x00008000
40  #define DT_COMPILER                 0x00010000
41  #define ASL_PREPROCESSOR            0x00020000
42  
43  #define ACPI_ALL_COMPONENTS         0x0001FFFF
44  #define ACPI_COMPONENT_DEFAULT      (ACPI_ALL_COMPONENTS)
45  
46  /* Component IDs reserved for ACPI drivers */
47  
48  #define ACPI_ALL_DRIVERS            0xFFFF0000
49  
50  /*
51   * Raw debug output levels, do not use these in the ACPI_DEBUG_PRINT macros
52   */
53  #define ACPI_LV_INIT                0x00000001
54  #define ACPI_LV_DEBUG_OBJECT        0x00000002
55  #define ACPI_LV_INFO                0x00000004
56  #define ACPI_LV_REPAIR              0x00000008
57  #define ACPI_LV_TRACE_POINT         0x00000010
58  #define ACPI_LV_ALL_EXCEPTIONS      0x0000001F
59  
60  /* Trace verbosity level 1 [Standard Trace Level] */
61  
62  #define ACPI_LV_INIT_NAMES          0x00000020
63  #define ACPI_LV_PARSE               0x00000040
64  #define ACPI_LV_LOAD                0x00000080
65  #define ACPI_LV_DISPATCH            0x00000100
66  #define ACPI_LV_EXEC                0x00000200
67  #define ACPI_LV_NAMES               0x00000400
68  #define ACPI_LV_OPREGION            0x00000800
69  #define ACPI_LV_BFIELD              0x00001000
70  #define ACPI_LV_TABLES              0x00002000
71  #define ACPI_LV_VALUES              0x00004000
72  #define ACPI_LV_OBJECTS             0x00008000
73  #define ACPI_LV_RESOURCES           0x00010000
74  #define ACPI_LV_USER_REQUESTS       0x00020000
75  #define ACPI_LV_PACKAGE             0x00040000
76  #define ACPI_LV_EVALUATION          0x00080000
77  #define ACPI_LV_VERBOSITY1          0x000FFF40 | ACPI_LV_ALL_EXCEPTIONS
78  
79  /* Trace verbosity level 2 [Function tracing and memory allocation] */
80  
81  #define ACPI_LV_ALLOCATIONS         0x00100000
82  #define ACPI_LV_FUNCTIONS           0x00200000
83  #define ACPI_LV_OPTIMIZATIONS       0x00400000
84  #define ACPI_LV_PARSE_TREES         0x00800000
85  #define ACPI_LV_VERBOSITY2          0x00F00000 | ACPI_LV_VERBOSITY1
86  #define ACPI_LV_ALL                 ACPI_LV_VERBOSITY2
87  
88  /* Trace verbosity level 3 [Threading, I/O, and Interrupts] */
89  
90  #define ACPI_LV_MUTEX               0x01000000
91  #define ACPI_LV_THREADS             0x02000000
92  #define ACPI_LV_IO                  0x04000000
93  #define ACPI_LV_INTERRUPTS          0x08000000
94  #define ACPI_LV_VERBOSITY3          0x0F000000 | ACPI_LV_VERBOSITY2
95  
96  /* Exceptionally verbose output -- also used in the global "DebugLevel"  */
97  
98  #define ACPI_LV_AML_DISASSEMBLE     0x10000000
99  #define ACPI_LV_VERBOSE_INFO        0x20000000
100  #define ACPI_LV_FULL_TABLES         0x40000000
101  #define ACPI_LV_EVENTS              0x80000000
102  #define ACPI_LV_VERBOSE             0xF0000000
103  
104  /*
105   * Debug level macros that are used in the DEBUG_PRINT macros
106   */
107  #define ACPI_DEBUG_LEVEL(dl)        (u32) dl,ACPI_DEBUG_PARAMETERS
108  
109  /*
110   * Exception level -- used in the global "DebugLevel"
111   *
112   * Note: For errors, use the ACPI_ERROR or ACPI_EXCEPTION interfaces.
113   * For warnings, use ACPI_WARNING.
114   */
115  #define ACPI_DB_INIT                ACPI_DEBUG_LEVEL (ACPI_LV_INIT)
116  #define ACPI_DB_DEBUG_OBJECT        ACPI_DEBUG_LEVEL (ACPI_LV_DEBUG_OBJECT)
117  #define ACPI_DB_INFO                ACPI_DEBUG_LEVEL (ACPI_LV_INFO)
118  #define ACPI_DB_REPAIR              ACPI_DEBUG_LEVEL (ACPI_LV_REPAIR)
119  #define ACPI_DB_TRACE_POINT         ACPI_DEBUG_LEVEL (ACPI_LV_TRACE_POINT)
120  #define ACPI_DB_ALL_EXCEPTIONS      ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS)
121  
122  /* Trace level -- also used in the global "DebugLevel" */
123  
124  #define ACPI_DB_INIT_NAMES          ACPI_DEBUG_LEVEL (ACPI_LV_INIT_NAMES)
125  #define ACPI_DB_THREADS             ACPI_DEBUG_LEVEL (ACPI_LV_THREADS)
126  #define ACPI_DB_PARSE               ACPI_DEBUG_LEVEL (ACPI_LV_PARSE)
127  #define ACPI_DB_DISPATCH            ACPI_DEBUG_LEVEL (ACPI_LV_DISPATCH)
128  #define ACPI_DB_LOAD                ACPI_DEBUG_LEVEL (ACPI_LV_LOAD)
129  #define ACPI_DB_EXEC                ACPI_DEBUG_LEVEL (ACPI_LV_EXEC)
130  #define ACPI_DB_NAMES               ACPI_DEBUG_LEVEL (ACPI_LV_NAMES)
131  #define ACPI_DB_OPREGION            ACPI_DEBUG_LEVEL (ACPI_LV_OPREGION)
132  #define ACPI_DB_BFIELD              ACPI_DEBUG_LEVEL (ACPI_LV_BFIELD)
133  #define ACPI_DB_TABLES              ACPI_DEBUG_LEVEL (ACPI_LV_TABLES)
134  #define ACPI_DB_FUNCTIONS           ACPI_DEBUG_LEVEL (ACPI_LV_FUNCTIONS)
135  #define ACPI_DB_OPTIMIZATIONS       ACPI_DEBUG_LEVEL (ACPI_LV_OPTIMIZATIONS)
136  #define ACPI_DB_PARSE_TREES         ACPI_DEBUG_LEVEL (ACPI_LV_PARSE_TREES)
137  #define ACPI_DB_VALUES              ACPI_DEBUG_LEVEL (ACPI_LV_VALUES)
138  #define ACPI_DB_OBJECTS             ACPI_DEBUG_LEVEL (ACPI_LV_OBJECTS)
139  #define ACPI_DB_ALLOCATIONS         ACPI_DEBUG_LEVEL (ACPI_LV_ALLOCATIONS)
140  #define ACPI_DB_RESOURCES           ACPI_DEBUG_LEVEL (ACPI_LV_RESOURCES)
141  #define ACPI_DB_IO                  ACPI_DEBUG_LEVEL (ACPI_LV_IO)
142  #define ACPI_DB_INTERRUPTS          ACPI_DEBUG_LEVEL (ACPI_LV_INTERRUPTS)
143  #define ACPI_DB_USER_REQUESTS       ACPI_DEBUG_LEVEL (ACPI_LV_USER_REQUESTS)
144  #define ACPI_DB_PACKAGE             ACPI_DEBUG_LEVEL (ACPI_LV_PACKAGE)
145  #define ACPI_DB_EVALUATION          ACPI_DEBUG_LEVEL (ACPI_LV_EVALUATION)
146  #define ACPI_DB_MUTEX               ACPI_DEBUG_LEVEL (ACPI_LV_MUTEX)
147  #define ACPI_DB_EVENTS              ACPI_DEBUG_LEVEL (ACPI_LV_EVENTS)
148  
149  #define ACPI_DB_ALL                 ACPI_DEBUG_LEVEL (ACPI_LV_ALL)
150  
151  /* Defaults for debug_level, debug and normal */
152  
153  #ifndef ACPI_DEBUG_DEFAULT
154  #define ACPI_DEBUG_DEFAULT          (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_EVALUATION | ACPI_LV_REPAIR)
155  #endif
156  
157  #define ACPI_NORMAL_DEFAULT         (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR)
158  #define ACPI_DEBUG_ALL              (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
159  
160  /*
161   * Global trace flags
162   */
163  #define ACPI_TRACE_ENABLED          ((u32) 4)
164  #define ACPI_TRACE_ONESHOT          ((u32) 2)
165  #define ACPI_TRACE_OPCODE           ((u32) 1)
166  
167  /* Defaults for trace debugging level/layer */
168  
169  #define ACPI_TRACE_LEVEL_ALL        ACPI_LV_ALL
170  #define ACPI_TRACE_LAYER_ALL        0x000001FF
171  #define ACPI_TRACE_LEVEL_DEFAULT    ACPI_LV_TRACE_POINT
172  #define ACPI_TRACE_LAYER_DEFAULT    ACPI_EXECUTER
173  
174  #if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES)
175  /*
176   * The module name is used primarily for error and debug messages.
177   * The __FILE__ macro is not very useful for this, because it
178   * usually includes the entire pathname to the module making the
179   * debug output difficult to read.
180   */
181  #define ACPI_MODULE_NAME(name)          static const char ACPI_UNUSED_VAR _acpi_module_name[] = name;
182  #else
183  /*
184   * For the no-debug and no-error-msg cases, we must at least define
185   * a null module name.
186   */
187  #define ACPI_MODULE_NAME(name)
188  #define _acpi_module_name ""
189  #endif
190  
191  /*
192   * Ascii error messages can be configured out
193   */
194  #ifndef ACPI_NO_ERROR_MESSAGES
195  #define AE_INFO                         _acpi_module_name, __LINE__
196  
197  /*
198   * Error reporting. Callers module and line number are inserted by AE_INFO,
199   * the plist contains a set of parens to allow variable-length lists.
200   * These macros are used for both the debug and non-debug versions of the code.
201   */
202  #define ACPI_INFO(plist)                acpi_info plist
203  #define ACPI_WARNING(plist)             acpi_warning plist
204  #define ACPI_EXCEPTION(plist)           acpi_exception plist
205  #define ACPI_ERROR(plist)               acpi_error plist
206  #define ACPI_BIOS_WARNING(plist)        acpi_bios_warning plist
207  #define ACPI_BIOS_EXCEPTION(plist)      acpi_bios_exception plist
208  #define ACPI_BIOS_ERROR(plist)          acpi_bios_error plist
209  #define ACPI_DEBUG_OBJECT(obj,l,i)      acpi_ex_do_debug_object(obj,l,i)
210  
211  #else
212  
213  /* No error messages */
214  
215  #define ACPI_INFO(plist)
216  #define ACPI_WARNING(plist)
217  #define ACPI_EXCEPTION(plist)
218  #define ACPI_ERROR(plist)
219  #define ACPI_BIOS_WARNING(plist)
220  #define ACPI_BIOS_EXCEPTION(plist)
221  #define ACPI_BIOS_ERROR(plist)
222  #define ACPI_DEBUG_OBJECT(obj,l,i)
223  
224  #endif				/* ACPI_NO_ERROR_MESSAGES */
225  
226  /*
227   * Debug macros that are conditionally compiled
228   */
229  #ifdef ACPI_DEBUG_OUTPUT
230  
231  /*
232   * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header,
233   * define it now. This is the case where there the compiler does not support
234   * a __func__ macro or equivalent.
235   */
236  #ifndef ACPI_GET_FUNCTION_NAME
237  #define ACPI_GET_FUNCTION_NAME          _acpi_function_name
238  
239  /*
240   * The Name parameter should be the procedure name as a non-quoted string.
241   * The function name is also used by the function exit macros below.
242   * Note: (const char) is used to be compatible with the debug interfaces
243   * and macros such as __func__.
244   */
245  #define ACPI_FUNCTION_NAME(name)        static const char _acpi_function_name[] = #name;
246  
247  #else
248  /* Compiler supports __func__ (or equivalent) -- Ignore this macro */
249  
250  #define ACPI_FUNCTION_NAME(name)
251  #endif				/* ACPI_GET_FUNCTION_NAME */
252  
253  /*
254   * Common parameters used for debug output functions:
255   * line number, function name, module(file) name, component ID
256   */
257  #define ACPI_DEBUG_PARAMETERS \
258  	__LINE__, ACPI_GET_FUNCTION_NAME, _acpi_module_name, _COMPONENT
259  
260  /* Check if debug output is currently dynamically enabled */
261  
262  #define ACPI_IS_DEBUG_ENABLED(level, component) \
263  	((level & acpi_dbg_level) && (component & acpi_dbg_layer))
264  
265  /*
266   * Master debug print macros
267   * Print message if and only if:
268   *    1) Debug print for the current component is enabled
269   *    2) Debug error level or trace level for the print statement is enabled
270   *
271   * November 2012: Moved the runtime check for whether to actually emit the
272   * debug message outside of the print function itself. This improves overall
273   * performance at a relatively small code cost. Implementation involves the
274   * use of variadic macros supported by C99.
275   *
276   * Note: the ACPI_DO_WHILE0 macro is used to prevent some compilers from
277   * complaining about these constructs. On other compilers the do...while
278   * adds some extra code, so this feature is optional.
279   */
280  #ifdef ACPI_USE_DO_WHILE_0
281  #define ACPI_DO_WHILE0(a)               do a while(0)
282  #else
283  #define ACPI_DO_WHILE0(a)               a
284  #endif
285  
286  /* DEBUG_PRINT functions */
287  
288  #ifndef COMPILER_VA_MACRO
289  
290  #define ACPI_DEBUG_PRINT(plist)         acpi_debug_print plist
291  #define ACPI_DEBUG_PRINT_RAW(plist)     acpi_debug_print_raw plist
292  
293  #else
294  
295  /* Helper macros for DEBUG_PRINT */
296  
297  #define ACPI_DO_DEBUG_PRINT(function, level, line, filename, modulename, component, ...) \
298  	ACPI_DO_WHILE0 ({ \
299  		if (ACPI_IS_DEBUG_ENABLED (level, component)) \
300  		{ \
301  			function (level, line, filename, modulename, component, __VA_ARGS__); \
302  		} \
303  	})
304  
305  #define ACPI_ACTUAL_DEBUG(level, line, filename, modulename, component, ...) \
306  	ACPI_DO_DEBUG_PRINT (acpi_debug_print, level, line, \
307  		filename, modulename, component, __VA_ARGS__)
308  
309  #define ACPI_ACTUAL_DEBUG_RAW(level, line, filename, modulename, component, ...) \
310  	ACPI_DO_DEBUG_PRINT (acpi_debug_print_raw, level, line, \
311  		filename, modulename, component, __VA_ARGS__)
312  
313  #define ACPI_DEBUG_PRINT(plist)         ACPI_ACTUAL_DEBUG plist
314  #define ACPI_DEBUG_PRINT_RAW(plist)     ACPI_ACTUAL_DEBUG_RAW plist
315  
316  #endif
317  
318  /*
319   * Function entry tracing
320   *
321   * The name of the function is emitted as a local variable that is
322   * intended to be used by both the entry trace and the exit trace.
323   */
324  
325  /* Helper macro */
326  
327  #define ACPI_TRACE_ENTRY(name, function, type, param) \
328  	ACPI_FUNCTION_NAME (name) \
329  	function (ACPI_DEBUG_PARAMETERS, (type) (param))
330  
331  /* The actual entry trace macros */
332  
333  #define ACPI_FUNCTION_TRACE(name) \
334  	ACPI_FUNCTION_NAME(name) \
335  	acpi_ut_trace (ACPI_DEBUG_PARAMETERS)
336  
337  #define ACPI_FUNCTION_TRACE_PTR(name, pointer) \
338  	ACPI_TRACE_ENTRY (name, acpi_ut_trace_ptr, void *, pointer)
339  
340  #define ACPI_FUNCTION_TRACE_U32(name, value) \
341  	ACPI_TRACE_ENTRY (name, acpi_ut_trace_u32, u32, value)
342  
343  #define ACPI_FUNCTION_TRACE_STR(name, string) \
344  	ACPI_TRACE_ENTRY (name, acpi_ut_trace_str, const char *, string)
345  
346  #define ACPI_FUNCTION_ENTRY() \
347  	acpi_ut_track_stack_ptr()
348  
349  /*
350   * Function exit tracing
351   *
352   * These macros include a return statement. This is usually considered
353   * bad form, but having a separate exit macro before the actual return
354   * is very ugly and difficult to maintain.
355   *
356   * One of the FUNCTION_TRACE macros above must be used in conjunction
357   * with these macros so that "_AcpiFunctionName" is defined.
358   *
359   * There are two versions of most of the return macros. The default version is
360   * safer, since it avoids side-effects by guaranteeing that the argument will
361   * not be evaluated twice.
362   *
363   * A less-safe version of the macros is provided for optional use if the
364   * compiler uses excessive CPU stack (for example, this may happen in the
365   * debug case if code optimization is disabled.)
366   */
367  
368  /* Exit trace helper macro */
369  
370  #ifndef ACPI_SIMPLE_RETURN_MACROS
371  
372  #define ACPI_TRACE_EXIT(function, type, param) \
373  	ACPI_DO_WHILE0 ({ \
374  		register type _param = (type) (param); \
375  		function (ACPI_DEBUG_PARAMETERS, _param); \
376  		return (_param); \
377  	})
378  
379  #else				/* Use original less-safe macros */
380  
381  #define ACPI_TRACE_EXIT(function, type, param) \
382  	ACPI_DO_WHILE0 ({ \
383  		function (ACPI_DEBUG_PARAMETERS, (type) (param)); \
384  		return (param); \
385  	})
386  
387  #endif				/* ACPI_SIMPLE_RETURN_MACROS */
388  
389  /* The actual exit macros */
390  
391  #define return_VOID \
392  	ACPI_DO_WHILE0 ({ \
393  		acpi_ut_exit (ACPI_DEBUG_PARAMETERS); \
394  		return; \
395  	})
396  
397  #define return_ACPI_STATUS(status) \
398  	ACPI_TRACE_EXIT (acpi_ut_status_exit, acpi_status, status)
399  
400  #define return_PTR(pointer) \
401  	ACPI_TRACE_EXIT (acpi_ut_ptr_exit, void *, pointer)
402  
403  #define return_STR(string) \
404  	ACPI_TRACE_EXIT (acpi_ut_str_exit, const char *, string)
405  
406  #define return_VALUE(value) \
407  	ACPI_TRACE_EXIT (acpi_ut_value_exit, u64, value)
408  
409  #define return_UINT32(value) \
410  	ACPI_TRACE_EXIT (acpi_ut_value_exit, u32, value)
411  
412  #define return_UINT8(value) \
413  	ACPI_TRACE_EXIT (acpi_ut_value_exit, u8, value)
414  
415  /* Conditional execution */
416  
417  #define ACPI_DEBUG_EXEC(a)              a
418  #define ACPI_DEBUG_ONLY_MEMBERS(a)      a
419  #define _VERBOSE_STRUCTURES
420  
421  /* Various object display routines for debug */
422  
423  #define ACPI_DUMP_STACK_ENTRY(a)        acpi_ex_dump_operand((a), 0)
424  #define ACPI_DUMP_OPERANDS(a, b ,c)     acpi_ex_dump_operands(a, b, c)
425  #define ACPI_DUMP_ENTRY(a, b)           acpi_ns_dump_entry (a, b)
426  #define ACPI_DUMP_PATHNAME(a, b, c, d)  acpi_ns_dump_pathname(a, b, c, d)
427  #define ACPI_DUMP_BUFFER(a, b)          acpi_ut_debug_dump_buffer((u8 *) a, b, DB_BYTE_DISPLAY, _COMPONENT)
428  
429  #define ACPI_TRACE_POINT(a, b, c, d)    acpi_trace_point (a, b, c, d)
430  
431  #else				/* ACPI_DEBUG_OUTPUT */
432  /*
433   * This is the non-debug case -- make everything go away,
434   * leaving no executable debug code!
435   */
436  #define ACPI_DEBUG_PRINT(pl)
437  #define ACPI_DEBUG_PRINT_RAW(pl)
438  #define ACPI_DEBUG_EXEC(a)
439  #define ACPI_DEBUG_ONLY_MEMBERS(a)
440  #define ACPI_FUNCTION_NAME(a)
441  #define ACPI_FUNCTION_TRACE(a)
442  #define ACPI_FUNCTION_TRACE_PTR(a, b)
443  #define ACPI_FUNCTION_TRACE_U32(a, b)
444  #define ACPI_FUNCTION_TRACE_STR(a, b)
445  #define ACPI_FUNCTION_ENTRY()
446  #define ACPI_DUMP_STACK_ENTRY(a)
447  #define ACPI_DUMP_OPERANDS(a, b, c)
448  #define ACPI_DUMP_ENTRY(a, b)
449  #define ACPI_DUMP_PATHNAME(a, b, c, d)
450  #define ACPI_DUMP_BUFFER(a, b)
451  #define ACPI_IS_DEBUG_ENABLED(level, component) 0
452  #define ACPI_TRACE_POINT(a, b, c, d)
453  
454  /* Return macros must have a return statement at the minimum */
455  
456  #define return_VOID                     return
457  #define return_ACPI_STATUS(s)           return(s)
458  #define return_PTR(s)                   return(s)
459  #define return_STR(s)                   return(s)
460  #define return_VALUE(s)                 return(s)
461  #define return_UINT8(s)                 return(s)
462  #define return_UINT32(s)                return(s)
463  
464  #endif				/* ACPI_DEBUG_OUTPUT */
465  
466  #endif				/* __ACOUTPUT_H__ */
467