Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6595 | serge | 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 |
||
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 = ¤t_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 (¤t_sp < acpi_gbl_lowest_stack_pointer) { |
||
98 | acpi_gbl_lowest_stack_pointer = ¤t_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> |