These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / acpi / acpica / utdebug.c
1 /******************************************************************************
2  *
3  * Module Name: utdebug - Debug print/trace routines
4  *
5  *****************************************************************************/
6
7 /*
8  * Copyright (C) 2000 - 2015, Intel Corp.
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 EXPORT_ACPI_INTERFACES
45
46 #include <acpi/acpi.h>
47 #include "accommon.h"
48 #include "acinterp.h"
49
50 #define _COMPONENT          ACPI_UTILITIES
51 ACPI_MODULE_NAME("utdebug")
52
53 #ifdef ACPI_DEBUG_OUTPUT
54 static acpi_thread_id acpi_gbl_prev_thread_id = (acpi_thread_id) 0xFFFFFFFF;
55 static char *acpi_gbl_fn_entry_str = "----Entry";
56 static char *acpi_gbl_fn_exit_str = "----Exit-";
57
58 /* Local prototypes */
59
60 static const char *acpi_ut_trim_function_name(const char *function_name);
61
62 /*******************************************************************************
63  *
64  * FUNCTION:    acpi_ut_init_stack_ptr_trace
65  *
66  * PARAMETERS:  None
67  *
68  * RETURN:      None
69  *
70  * DESCRIPTION: Save the current CPU stack pointer at subsystem startup
71  *
72  ******************************************************************************/
73
74 void acpi_ut_init_stack_ptr_trace(void)
75 {
76         acpi_size current_sp;
77
78         acpi_gbl_entry_stack_pointer = &current_sp;
79 }
80
81 /*******************************************************************************
82  *
83  * FUNCTION:    acpi_ut_track_stack_ptr
84  *
85  * PARAMETERS:  None
86  *
87  * RETURN:      None
88  *
89  * DESCRIPTION: Save the current CPU stack pointer
90  *
91  ******************************************************************************/
92
93 void acpi_ut_track_stack_ptr(void)
94 {
95         acpi_size current_sp;
96
97         if (&current_sp < acpi_gbl_lowest_stack_pointer) {
98                 acpi_gbl_lowest_stack_pointer = &current_sp;
99         }
100
101         if (acpi_gbl_nesting_level > acpi_gbl_deepest_nesting) {
102                 acpi_gbl_deepest_nesting = acpi_gbl_nesting_level;
103         }
104 }
105
106 /*******************************************************************************
107  *
108  * FUNCTION:    acpi_ut_trim_function_name
109  *
110  * PARAMETERS:  function_name       - Ascii string containing a procedure name
111  *
112  * RETURN:      Updated pointer to the function name
113  *
114  * DESCRIPTION: Remove the "Acpi" prefix from the function name, if present.
115  *              This allows compiler macros such as __func__ to be used
116  *              with no change to the debug output.
117  *
118  ******************************************************************************/
119
120 static const char *acpi_ut_trim_function_name(const char *function_name)
121 {
122
123         /* All Function names are longer than 4 chars, check is safe */
124
125         if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_MIXED) {
126
127                 /* This is the case where the original source has not been modified */
128
129                 return (function_name + 4);
130         }
131
132         if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_LOWER) {
133
134                 /* This is the case where the source has been 'linuxized' */
135
136                 return (function_name + 5);
137         }
138
139         return (function_name);
140 }
141
142 /*******************************************************************************
143  *
144  * FUNCTION:    acpi_debug_print
145  *
146  * PARAMETERS:  requested_debug_level - Requested debug print level
147  *              line_number         - Caller's line number (for error output)
148  *              function_name       - Caller's procedure name
149  *              module_name         - Caller's module name
150  *              component_id        - Caller's component ID
151  *              format              - Printf format field
152  *              ...                 - Optional printf arguments
153  *
154  * RETURN:      None
155  *
156  * DESCRIPTION: Print error message with prefix consisting of the module name,
157  *              line number, and component ID.
158  *
159  ******************************************************************************/
160
161 void ACPI_INTERNAL_VAR_XFACE
162 acpi_debug_print(u32 requested_debug_level,
163                  u32 line_number,
164                  const char *function_name,
165                  const char *module_name,
166                  u32 component_id, const char *format, ...)
167 {
168         acpi_thread_id thread_id;
169         va_list args;
170
171         /* Check if debug output enabled */
172
173         if (!ACPI_IS_DEBUG_ENABLED(requested_debug_level, component_id)) {
174                 return;
175         }
176
177         /*
178          * Thread tracking and context switch notification
179          */
180         thread_id = acpi_os_get_thread_id();
181         if (thread_id != acpi_gbl_prev_thread_id) {
182                 if (ACPI_LV_THREADS & acpi_dbg_level) {
183                         acpi_os_printf
184                             ("\n**** Context Switch from TID %u to TID %u ****\n\n",
185                              (u32)acpi_gbl_prev_thread_id, (u32)thread_id);
186                 }
187
188                 acpi_gbl_prev_thread_id = thread_id;
189                 acpi_gbl_nesting_level = 0;
190         }
191
192         /*
193          * Display the module name, current line number, thread ID (if requested),
194          * current procedure nesting level, and the current procedure name
195          */
196         acpi_os_printf("%9s-%04ld ", module_name, line_number);
197
198 #ifdef ACPI_APPLICATION
199         /*
200          * For acpi_exec/iASL only, emit the thread ID and nesting level.
201          * Note: nesting level is really only useful during a single-thread
202          * execution. Otherwise, multiple threads will keep resetting the
203          * level.
204          */
205         if (ACPI_LV_THREADS & acpi_dbg_level) {
206                 acpi_os_printf("[%u] ", (u32)thread_id);
207         }
208
209         acpi_os_printf("[%02ld] ", acpi_gbl_nesting_level);
210 #endif
211
212         acpi_os_printf("%-22.22s: ", acpi_ut_trim_function_name(function_name));
213
214         va_start(args, format);
215         acpi_os_vprintf(format, args);
216         va_end(args);
217 }
218
219 ACPI_EXPORT_SYMBOL(acpi_debug_print)
220
221 /*******************************************************************************
222  *
223  * FUNCTION:    acpi_debug_print_raw
224  *
225  * PARAMETERS:  requested_debug_level - Requested debug print level
226  *              line_number         - Caller's line number
227  *              function_name       - Caller's procedure name
228  *              module_name         - Caller's module name
229  *              component_id        - Caller's component ID
230  *              format              - Printf format field
231  *              ...                 - Optional printf arguments
232  *
233  * RETURN:      None
234  *
235  * DESCRIPTION: Print message with no headers. Has same interface as
236  *              debug_print so that the same macros can be used.
237  *
238  ******************************************************************************/
239 void ACPI_INTERNAL_VAR_XFACE
240 acpi_debug_print_raw(u32 requested_debug_level,
241                      u32 line_number,
242                      const char *function_name,
243                      const char *module_name,
244                      u32 component_id, const char *format, ...)
245 {
246         va_list args;
247
248         /* Check if debug output enabled */
249
250         if (!ACPI_IS_DEBUG_ENABLED(requested_debug_level, component_id)) {
251                 return;
252         }
253
254         va_start(args, format);
255         acpi_os_vprintf(format, args);
256         va_end(args);
257 }
258
259 ACPI_EXPORT_SYMBOL(acpi_debug_print_raw)
260
261 /*******************************************************************************
262  *
263  * FUNCTION:    acpi_ut_trace
264  *
265  * PARAMETERS:  line_number         - Caller's line number
266  *              function_name       - Caller's procedure name
267  *              module_name         - Caller's module name
268  *              component_id        - Caller's component ID
269  *
270  * RETURN:      None
271  *
272  * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
273  *              set in debug_level
274  *
275  ******************************************************************************/
276 void
277 acpi_ut_trace(u32 line_number,
278               const char *function_name,
279               const char *module_name, u32 component_id)
280 {
281
282         acpi_gbl_nesting_level++;
283         acpi_ut_track_stack_ptr();
284
285         /* Check if enabled up-front for performance */
286
287         if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
288                 acpi_debug_print(ACPI_LV_FUNCTIONS,
289                                  line_number, function_name, module_name,
290                                  component_id, "%s\n", acpi_gbl_fn_entry_str);
291         }
292 }
293
294 ACPI_EXPORT_SYMBOL(acpi_ut_trace)
295
296 /*******************************************************************************
297  *
298  * FUNCTION:    acpi_ut_trace_ptr
299  *
300  * PARAMETERS:  line_number         - Caller's line number
301  *              function_name       - Caller's procedure name
302  *              module_name         - Caller's module name
303  *              component_id        - Caller's component ID
304  *              pointer             - Pointer to display
305  *
306  * RETURN:      None
307  *
308  * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
309  *              set in debug_level
310  *
311  ******************************************************************************/
312 void
313 acpi_ut_trace_ptr(u32 line_number,
314                   const char *function_name,
315                   const char *module_name, u32 component_id, void *pointer)
316 {
317
318         acpi_gbl_nesting_level++;
319         acpi_ut_track_stack_ptr();
320
321         /* Check if enabled up-front for performance */
322
323         if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
324                 acpi_debug_print(ACPI_LV_FUNCTIONS,
325                                  line_number, function_name, module_name,
326                                  component_id, "%s %p\n", acpi_gbl_fn_entry_str,
327                                  pointer);
328         }
329 }
330
331 /*******************************************************************************
332  *
333  * FUNCTION:    acpi_ut_trace_str
334  *
335  * PARAMETERS:  line_number         - Caller's line number
336  *              function_name       - Caller's procedure name
337  *              module_name         - Caller's module name
338  *              component_id        - Caller's component ID
339  *              string              - Additional string to display
340  *
341  * RETURN:      None
342  *
343  * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
344  *              set in debug_level
345  *
346  ******************************************************************************/
347
348 void
349 acpi_ut_trace_str(u32 line_number,
350                   const char *function_name,
351                   const char *module_name, u32 component_id, char *string)
352 {
353
354         acpi_gbl_nesting_level++;
355         acpi_ut_track_stack_ptr();
356
357         /* Check if enabled up-front for performance */
358
359         if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
360                 acpi_debug_print(ACPI_LV_FUNCTIONS,
361                                  line_number, function_name, module_name,
362                                  component_id, "%s %s\n", acpi_gbl_fn_entry_str,
363                                  string);
364         }
365 }
366
367 /*******************************************************************************
368  *
369  * FUNCTION:    acpi_ut_trace_u32
370  *
371  * PARAMETERS:  line_number         - Caller's line number
372  *              function_name       - Caller's procedure name
373  *              module_name         - Caller's module name
374  *              component_id        - Caller's component ID
375  *              integer             - Integer to display
376  *
377  * RETURN:      None
378  *
379  * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
380  *              set in debug_level
381  *
382  ******************************************************************************/
383
384 void
385 acpi_ut_trace_u32(u32 line_number,
386                   const char *function_name,
387                   const char *module_name, u32 component_id, u32 integer)
388 {
389
390         acpi_gbl_nesting_level++;
391         acpi_ut_track_stack_ptr();
392
393         /* Check if enabled up-front for performance */
394
395         if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
396                 acpi_debug_print(ACPI_LV_FUNCTIONS,
397                                  line_number, function_name, module_name,
398                                  component_id, "%s %08X\n",
399                                  acpi_gbl_fn_entry_str, integer);
400         }
401 }
402
403 /*******************************************************************************
404  *
405  * FUNCTION:    acpi_ut_exit
406  *
407  * PARAMETERS:  line_number         - Caller's line number
408  *              function_name       - Caller's procedure name
409  *              module_name         - Caller's module name
410  *              component_id        - Caller's component ID
411  *
412  * RETURN:      None
413  *
414  * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
415  *              set in debug_level
416  *
417  ******************************************************************************/
418
419 void
420 acpi_ut_exit(u32 line_number,
421              const char *function_name,
422              const char *module_name, u32 component_id)
423 {
424
425         /* Check if enabled up-front for performance */
426
427         if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
428                 acpi_debug_print(ACPI_LV_FUNCTIONS,
429                                  line_number, function_name, module_name,
430                                  component_id, "%s\n", acpi_gbl_fn_exit_str);
431         }
432
433         if (acpi_gbl_nesting_level) {
434                 acpi_gbl_nesting_level--;
435         }
436 }
437
438 ACPI_EXPORT_SYMBOL(acpi_ut_exit)
439
440 /*******************************************************************************
441  *
442  * FUNCTION:    acpi_ut_status_exit
443  *
444  * PARAMETERS:  line_number         - Caller's line number
445  *              function_name       - Caller's procedure name
446  *              module_name         - Caller's module name
447  *              component_id        - Caller's component ID
448  *              status              - Exit status code
449  *
450  * RETURN:      None
451  *
452  * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
453  *              set in debug_level. Prints exit status also.
454  *
455  ******************************************************************************/
456 void
457 acpi_ut_status_exit(u32 line_number,
458                     const char *function_name,
459                     const char *module_name,
460                     u32 component_id, acpi_status status)
461 {
462
463         /* Check if enabled up-front for performance */
464
465         if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
466                 if (ACPI_SUCCESS(status)) {
467                         acpi_debug_print(ACPI_LV_FUNCTIONS,
468                                          line_number, function_name,
469                                          module_name, component_id, "%s %s\n",
470                                          acpi_gbl_fn_exit_str,
471                                          acpi_format_exception(status));
472                 } else {
473                         acpi_debug_print(ACPI_LV_FUNCTIONS,
474                                          line_number, function_name,
475                                          module_name, component_id,
476                                          "%s ****Exception****: %s\n",
477                                          acpi_gbl_fn_exit_str,
478                                          acpi_format_exception(status));
479                 }
480         }
481
482         if (acpi_gbl_nesting_level) {
483                 acpi_gbl_nesting_level--;
484         }
485 }
486
487 ACPI_EXPORT_SYMBOL(acpi_ut_status_exit)
488
489 /*******************************************************************************
490  *
491  * FUNCTION:    acpi_ut_value_exit
492  *
493  * PARAMETERS:  line_number         - Caller's line number
494  *              function_name       - Caller's procedure name
495  *              module_name         - Caller's module name
496  *              component_id        - Caller's component ID
497  *              value               - Value to be printed with exit msg
498  *
499  * RETURN:      None
500  *
501  * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
502  *              set in debug_level. Prints exit value also.
503  *
504  ******************************************************************************/
505 void
506 acpi_ut_value_exit(u32 line_number,
507                    const char *function_name,
508                    const char *module_name, u32 component_id, u64 value)
509 {
510
511         /* Check if enabled up-front for performance */
512
513         if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
514                 acpi_debug_print(ACPI_LV_FUNCTIONS,
515                                  line_number, function_name, module_name,
516                                  component_id, "%s %8.8X%8.8X\n",
517                                  acpi_gbl_fn_exit_str,
518                                  ACPI_FORMAT_UINT64(value));
519         }
520
521         if (acpi_gbl_nesting_level) {
522                 acpi_gbl_nesting_level--;
523         }
524 }
525
526 ACPI_EXPORT_SYMBOL(acpi_ut_value_exit)
527
528 /*******************************************************************************
529  *
530  * FUNCTION:    acpi_ut_ptr_exit
531  *
532  * PARAMETERS:  line_number         - Caller's line number
533  *              function_name       - Caller's procedure name
534  *              module_name         - Caller's module name
535  *              component_id        - Caller's component ID
536  *              ptr                 - Pointer to display
537  *
538  * RETURN:      None
539  *
540  * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
541  *              set in debug_level. Prints exit value also.
542  *
543  ******************************************************************************/
544 void
545 acpi_ut_ptr_exit(u32 line_number,
546                  const char *function_name,
547                  const char *module_name, u32 component_id, u8 *ptr)
548 {
549
550         /* Check if enabled up-front for performance */
551
552         if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
553                 acpi_debug_print(ACPI_LV_FUNCTIONS,
554                                  line_number, function_name, module_name,
555                                  component_id, "%s %p\n", acpi_gbl_fn_exit_str,
556                                  ptr);
557         }
558
559         if (acpi_gbl_nesting_level) {
560                 acpi_gbl_nesting_level--;
561         }
562 }
563
564 /*******************************************************************************
565  *
566  * FUNCTION:    acpi_trace_point
567  *
568  * PARAMETERS:  type                - Trace event type
569  *              begin               - TRUE if before execution
570  *              aml                 - Executed AML address
571  *              pathname            - Object path
572  *              pointer             - Pointer to the related object
573  *
574  * RETURN:      None
575  *
576  * DESCRIPTION: Interpreter execution trace.
577  *
578  ******************************************************************************/
579
580 void
581 acpi_trace_point(acpi_trace_event_type type, u8 begin, u8 *aml, char *pathname)
582 {
583
584         ACPI_FUNCTION_ENTRY();
585
586         acpi_ex_trace_point(type, begin, aml, pathname);
587
588 #ifdef ACPI_USE_SYSTEM_TRACER
589         acpi_os_trace_point(type, begin, aml, pathname);
590 #endif
591 }
592
593 ACPI_EXPORT_SYMBOL(acpi_trace_point)
594 #endif
595 #ifdef ACPI_APPLICATION
596 /*******************************************************************************
597  *
598  * FUNCTION:    acpi_log_error
599  *
600  * PARAMETERS:  format              - Printf format field
601  *              ...                 - Optional printf arguments
602  *
603  * RETURN:      None
604  *
605  * DESCRIPTION: Print error message to the console, used by applications.
606  *
607  ******************************************************************************/
608 void ACPI_INTERNAL_VAR_XFACE acpi_log_error(const char *format, ...)
609 {
610         va_list args;
611
612         va_start(args, format);
613         (void)acpi_ut_file_vprintf(ACPI_FILE_ERR, format, args);
614         va_end(args);
615 }
616
617 ACPI_EXPORT_SYMBOL(acpi_log_error)
618 #endif