1 | /****************************************************************************** |
2 | * |
3 | * Module Name: utdebug - Debug print/trace routines |
4 | * |
5 | *****************************************************************************/ |
6 | |
7 | /* |
8 | * Copyright (C) 2000 - 2016, 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.h" |
47 | #include "accommon.h" |
48 | #include "acinterp.h" |
49 | |
50 | #define _COMPONENT ACPI_UTILITIES |
51 | ACPI_MODULE_NAME ("utdebug" ) |
52 | |
53 | |
54 | #ifdef ACPI_DEBUG_OUTPUT |
55 | |
56 | static ACPI_THREAD_ID AcpiGbl_PreviousThreadId = (ACPI_THREAD_ID) 0xFFFFFFFF; |
57 | static const char *AcpiGbl_FunctionEntryPrefix = "----Entry" ; |
58 | static const char *AcpiGbl_FunctionExitPrefix = "----Exit-" ; |
59 | |
60 | |
61 | /******************************************************************************* |
62 | * |
63 | * FUNCTION: AcpiUtInitStackPtrTrace |
64 | * |
65 | * PARAMETERS: None |
66 | * |
67 | * RETURN: None |
68 | * |
69 | * DESCRIPTION: Save the current CPU stack pointer at subsystem startup |
70 | * |
71 | ******************************************************************************/ |
72 | |
73 | void |
74 | AcpiUtInitStackPtrTrace ( |
75 | void) |
76 | { |
77 | ACPI_SIZE CurrentSp; |
78 | |
79 | |
80 | AcpiGbl_EntryStackPointer = &CurrentSp; |
81 | } |
82 | |
83 | |
84 | /******************************************************************************* |
85 | * |
86 | * FUNCTION: AcpiUtTrackStackPtr |
87 | * |
88 | * PARAMETERS: None |
89 | * |
90 | * RETURN: None |
91 | * |
92 | * DESCRIPTION: Save the current CPU stack pointer |
93 | * |
94 | ******************************************************************************/ |
95 | |
96 | void |
97 | AcpiUtTrackStackPtr ( |
98 | void) |
99 | { |
100 | ACPI_SIZE CurrentSp; |
101 | |
102 | |
103 | if (&CurrentSp < AcpiGbl_LowestStackPointer) |
104 | { |
105 | AcpiGbl_LowestStackPointer = &CurrentSp; |
106 | } |
107 | |
108 | if (AcpiGbl_NestingLevel > AcpiGbl_DeepestNesting) |
109 | { |
110 | AcpiGbl_DeepestNesting = AcpiGbl_NestingLevel; |
111 | } |
112 | } |
113 | |
114 | |
115 | /******************************************************************************* |
116 | * |
117 | * FUNCTION: AcpiUtTrimFunctionName |
118 | * |
119 | * PARAMETERS: FunctionName - Ascii string containing a procedure name |
120 | * |
121 | * RETURN: Updated pointer to the function name |
122 | * |
123 | * DESCRIPTION: Remove the "Acpi" prefix from the function name, if present. |
124 | * This allows compiler macros such as __FUNCTION__ to be used |
125 | * with no change to the debug output. |
126 | * |
127 | ******************************************************************************/ |
128 | |
129 | static const char * |
130 | AcpiUtTrimFunctionName ( |
131 | const char *FunctionName) |
132 | { |
133 | |
134 | /* All Function names are longer than 4 chars, check is safe */ |
135 | |
136 | if (*(ACPI_CAST_PTR (UINT32, FunctionName)) == ACPI_PREFIX_MIXED) |
137 | { |
138 | /* This is the case where the original source has not been modified */ |
139 | |
140 | return (FunctionName + 4); |
141 | } |
142 | |
143 | if (*(ACPI_CAST_PTR (UINT32, FunctionName)) == ACPI_PREFIX_LOWER) |
144 | { |
145 | /* This is the case where the source has been 'linuxized' */ |
146 | |
147 | return (FunctionName + 5); |
148 | } |
149 | |
150 | return (FunctionName); |
151 | } |
152 | |
153 | |
154 | /******************************************************************************* |
155 | * |
156 | * FUNCTION: AcpiDebugPrint |
157 | * |
158 | * PARAMETERS: RequestedDebugLevel - Requested debug print level |
159 | * LineNumber - Caller's line number (for error output) |
160 | * FunctionName - Caller's procedure name |
161 | * ModuleName - Caller's module name |
162 | * ComponentId - Caller's component ID |
163 | * Format - Printf format field |
164 | * ... - Optional printf arguments |
165 | * |
166 | * RETURN: None |
167 | * |
168 | * DESCRIPTION: Print error message with prefix consisting of the module name, |
169 | * line number, and component ID. |
170 | * |
171 | ******************************************************************************/ |
172 | |
173 | void ACPI_INTERNAL_VAR_XFACE |
174 | AcpiDebugPrint ( |
175 | UINT32 RequestedDebugLevel, |
176 | UINT32 LineNumber, |
177 | const char *FunctionName, |
178 | const char *ModuleName, |
179 | UINT32 ComponentId, |
180 | const char *Format, |
181 | ...) |
182 | { |
183 | ACPI_THREAD_ID ThreadId; |
184 | va_list args; |
185 | |
186 | |
187 | /* Check if debug output enabled */ |
188 | |
189 | if (!ACPI_IS_DEBUG_ENABLED (RequestedDebugLevel, ComponentId)) |
190 | { |
191 | return; |
192 | } |
193 | |
194 | /* |
195 | * Thread tracking and context switch notification |
196 | */ |
197 | ThreadId = AcpiOsGetThreadId (); |
198 | if (ThreadId != AcpiGbl_PreviousThreadId) |
199 | { |
200 | if (ACPI_LV_THREADS & AcpiDbgLevel) |
201 | { |
202 | AcpiOsPrintf ( |
203 | "\n**** Context Switch from TID %u to TID %u ****\n\n" , |
204 | (UINT32) AcpiGbl_PreviousThreadId, (UINT32) ThreadId); |
205 | } |
206 | |
207 | AcpiGbl_PreviousThreadId = ThreadId; |
208 | AcpiGbl_NestingLevel = 0; |
209 | } |
210 | |
211 | /* |
212 | * Display the module name, current line number, thread ID (if requested), |
213 | * current procedure nesting level, and the current procedure name |
214 | */ |
215 | AcpiOsPrintf ("%9s-%04ld " , ModuleName, LineNumber); |
216 | |
217 | #ifdef ACPI_APPLICATION |
218 | /* |
219 | * For AcpiExec/iASL only, emit the thread ID and nesting level. |
220 | * Note: nesting level is really only useful during a single-thread |
221 | * execution. Otherwise, multiple threads will keep resetting the |
222 | * level. |
223 | */ |
224 | if (ACPI_LV_THREADS & AcpiDbgLevel) |
225 | { |
226 | AcpiOsPrintf ("[%u] " , (UINT32) ThreadId); |
227 | } |
228 | |
229 | AcpiOsPrintf ("[%02ld] " , AcpiGbl_NestingLevel); |
230 | #endif |
231 | |
232 | AcpiOsPrintf ("%-22.22s: " , AcpiUtTrimFunctionName (FunctionName)); |
233 | |
234 | va_start (args, Format); |
235 | AcpiOsVprintf (Format, args); |
236 | va_end (args); |
237 | } |
238 | |
239 | ACPI_EXPORT_SYMBOL (AcpiDebugPrint) |
240 | |
241 | |
242 | /******************************************************************************* |
243 | * |
244 | * FUNCTION: AcpiDebugPrintRaw |
245 | * |
246 | * PARAMETERS: RequestedDebugLevel - Requested debug print level |
247 | * LineNumber - Caller's line number |
248 | * FunctionName - Caller's procedure name |
249 | * ModuleName - Caller's module name |
250 | * ComponentId - Caller's component ID |
251 | * Format - Printf format field |
252 | * ... - Optional printf arguments |
253 | * |
254 | * RETURN: None |
255 | * |
256 | * DESCRIPTION: Print message with no headers. Has same interface as |
257 | * DebugPrint so that the same macros can be used. |
258 | * |
259 | ******************************************************************************/ |
260 | |
261 | void ACPI_INTERNAL_VAR_XFACE |
262 | AcpiDebugPrintRaw ( |
263 | UINT32 RequestedDebugLevel, |
264 | UINT32 LineNumber, |
265 | const char *FunctionName, |
266 | const char *ModuleName, |
267 | UINT32 ComponentId, |
268 | const char *Format, |
269 | ...) |
270 | { |
271 | va_list args; |
272 | |
273 | |
274 | /* Check if debug output enabled */ |
275 | |
276 | if (!ACPI_IS_DEBUG_ENABLED (RequestedDebugLevel, ComponentId)) |
277 | { |
278 | return; |
279 | } |
280 | |
281 | va_start (args, Format); |
282 | AcpiOsVprintf (Format, args); |
283 | va_end (args); |
284 | } |
285 | |
286 | ACPI_EXPORT_SYMBOL (AcpiDebugPrintRaw) |
287 | |
288 | |
289 | /******************************************************************************* |
290 | * |
291 | * FUNCTION: AcpiUtTrace |
292 | * |
293 | * PARAMETERS: LineNumber - Caller's line number |
294 | * FunctionName - Caller's procedure name |
295 | * ModuleName - Caller's module name |
296 | * ComponentId - Caller's component ID |
297 | * |
298 | * RETURN: None |
299 | * |
300 | * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is |
301 | * set in DebugLevel |
302 | * |
303 | ******************************************************************************/ |
304 | |
305 | void |
306 | AcpiUtTrace ( |
307 | UINT32 LineNumber, |
308 | const char *FunctionName, |
309 | const char *ModuleName, |
310 | UINT32 ComponentId) |
311 | { |
312 | |
313 | AcpiGbl_NestingLevel++; |
314 | AcpiUtTrackStackPtr (); |
315 | |
316 | /* Check if enabled up-front for performance */ |
317 | |
318 | if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) |
319 | { |
320 | AcpiDebugPrint (ACPI_LV_FUNCTIONS, |
321 | LineNumber, FunctionName, ModuleName, ComponentId, |
322 | "%s\n" , AcpiGbl_FunctionEntryPrefix); |
323 | } |
324 | } |
325 | |
326 | ACPI_EXPORT_SYMBOL (AcpiUtTrace) |
327 | |
328 | |
329 | /******************************************************************************* |
330 | * |
331 | * FUNCTION: AcpiUtTracePtr |
332 | * |
333 | * PARAMETERS: LineNumber - Caller's line number |
334 | * FunctionName - Caller's procedure name |
335 | * ModuleName - Caller's module name |
336 | * ComponentId - Caller's component ID |
337 | * Pointer - Pointer to display |
338 | * |
339 | * RETURN: None |
340 | * |
341 | * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is |
342 | * set in DebugLevel |
343 | * |
344 | ******************************************************************************/ |
345 | |
346 | void |
347 | AcpiUtTracePtr ( |
348 | UINT32 LineNumber, |
349 | const char *FunctionName, |
350 | const char *ModuleName, |
351 | UINT32 ComponentId, |
352 | const void *Pointer) |
353 | { |
354 | |
355 | AcpiGbl_NestingLevel++; |
356 | AcpiUtTrackStackPtr (); |
357 | |
358 | /* Check if enabled up-front for performance */ |
359 | |
360 | if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) |
361 | { |
362 | AcpiDebugPrint (ACPI_LV_FUNCTIONS, |
363 | LineNumber, FunctionName, ModuleName, ComponentId, |
364 | "%s %p\n" , AcpiGbl_FunctionEntryPrefix, Pointer); |
365 | } |
366 | } |
367 | |
368 | |
369 | /******************************************************************************* |
370 | * |
371 | * FUNCTION: AcpiUtTraceStr |
372 | * |
373 | * PARAMETERS: LineNumber - Caller's line number |
374 | * FunctionName - Caller's procedure name |
375 | * ModuleName - Caller's module name |
376 | * ComponentId - Caller's component ID |
377 | * String - Additional string to display |
378 | * |
379 | * RETURN: None |
380 | * |
381 | * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is |
382 | * set in DebugLevel |
383 | * |
384 | ******************************************************************************/ |
385 | |
386 | void |
387 | AcpiUtTraceStr ( |
388 | UINT32 LineNumber, |
389 | const char *FunctionName, |
390 | const char *ModuleName, |
391 | UINT32 ComponentId, |
392 | const char *String) |
393 | { |
394 | |
395 | AcpiGbl_NestingLevel++; |
396 | AcpiUtTrackStackPtr (); |
397 | |
398 | /* Check if enabled up-front for performance */ |
399 | |
400 | if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) |
401 | { |
402 | AcpiDebugPrint (ACPI_LV_FUNCTIONS, |
403 | LineNumber, FunctionName, ModuleName, ComponentId, |
404 | "%s %s\n" , AcpiGbl_FunctionEntryPrefix, String); |
405 | } |
406 | } |
407 | |
408 | |
409 | /******************************************************************************* |
410 | * |
411 | * FUNCTION: AcpiUtTraceU32 |
412 | * |
413 | * PARAMETERS: LineNumber - Caller's line number |
414 | * FunctionName - Caller's procedure name |
415 | * ModuleName - Caller's module name |
416 | * ComponentId - Caller's component ID |
417 | * Integer - Integer to display |
418 | * |
419 | * RETURN: None |
420 | * |
421 | * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is |
422 | * set in DebugLevel |
423 | * |
424 | ******************************************************************************/ |
425 | |
426 | void |
427 | AcpiUtTraceU32 ( |
428 | UINT32 LineNumber, |
429 | const char *FunctionName, |
430 | const char *ModuleName, |
431 | UINT32 ComponentId, |
432 | UINT32 Integer) |
433 | { |
434 | |
435 | AcpiGbl_NestingLevel++; |
436 | AcpiUtTrackStackPtr (); |
437 | |
438 | /* Check if enabled up-front for performance */ |
439 | |
440 | if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) |
441 | { |
442 | AcpiDebugPrint (ACPI_LV_FUNCTIONS, |
443 | LineNumber, FunctionName, ModuleName, ComponentId, |
444 | "%s %08X\n" , AcpiGbl_FunctionEntryPrefix, Integer); |
445 | } |
446 | } |
447 | |
448 | |
449 | /******************************************************************************* |
450 | * |
451 | * FUNCTION: AcpiUtExit |
452 | * |
453 | * PARAMETERS: LineNumber - Caller's line number |
454 | * FunctionName - Caller's procedure name |
455 | * ModuleName - Caller's module name |
456 | * ComponentId - Caller's component ID |
457 | * |
458 | * RETURN: None |
459 | * |
460 | * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is |
461 | * set in DebugLevel |
462 | * |
463 | ******************************************************************************/ |
464 | |
465 | void |
466 | AcpiUtExit ( |
467 | UINT32 LineNumber, |
468 | const char *FunctionName, |
469 | const char *ModuleName, |
470 | UINT32 ComponentId) |
471 | { |
472 | |
473 | /* Check if enabled up-front for performance */ |
474 | |
475 | if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) |
476 | { |
477 | AcpiDebugPrint (ACPI_LV_FUNCTIONS, |
478 | LineNumber, FunctionName, ModuleName, ComponentId, |
479 | "%s\n" , AcpiGbl_FunctionExitPrefix); |
480 | } |
481 | |
482 | if (AcpiGbl_NestingLevel) |
483 | { |
484 | AcpiGbl_NestingLevel--; |
485 | } |
486 | } |
487 | |
488 | ACPI_EXPORT_SYMBOL (AcpiUtExit) |
489 | |
490 | |
491 | /******************************************************************************* |
492 | * |
493 | * FUNCTION: AcpiUtStatusExit |
494 | * |
495 | * PARAMETERS: LineNumber - Caller's line number |
496 | * FunctionName - Caller's procedure name |
497 | * ModuleName - Caller's module name |
498 | * ComponentId - Caller's component ID |
499 | * Status - Exit status code |
500 | * |
501 | * RETURN: None |
502 | * |
503 | * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is |
504 | * set in DebugLevel. Prints exit status also. |
505 | * |
506 | ******************************************************************************/ |
507 | |
508 | void |
509 | AcpiUtStatusExit ( |
510 | UINT32 LineNumber, |
511 | const char *FunctionName, |
512 | const char *ModuleName, |
513 | UINT32 ComponentId, |
514 | ACPI_STATUS Status) |
515 | { |
516 | |
517 | /* Check if enabled up-front for performance */ |
518 | |
519 | if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) |
520 | { |
521 | if (ACPI_SUCCESS (Status)) |
522 | { |
523 | AcpiDebugPrint (ACPI_LV_FUNCTIONS, |
524 | LineNumber, FunctionName, ModuleName, ComponentId, |
525 | "%s %s\n" , AcpiGbl_FunctionExitPrefix, |
526 | AcpiFormatException (Status)); |
527 | } |
528 | else |
529 | { |
530 | AcpiDebugPrint (ACPI_LV_FUNCTIONS, |
531 | LineNumber, FunctionName, ModuleName, ComponentId, |
532 | "%s ****Exception****: %s\n" , AcpiGbl_FunctionExitPrefix, |
533 | AcpiFormatException (Status)); |
534 | } |
535 | } |
536 | |
537 | if (AcpiGbl_NestingLevel) |
538 | { |
539 | AcpiGbl_NestingLevel--; |
540 | } |
541 | } |
542 | |
543 | ACPI_EXPORT_SYMBOL (AcpiUtStatusExit) |
544 | |
545 | |
546 | /******************************************************************************* |
547 | * |
548 | * FUNCTION: AcpiUtValueExit |
549 | * |
550 | * PARAMETERS: LineNumber - Caller's line number |
551 | * FunctionName - Caller's procedure name |
552 | * ModuleName - Caller's module name |
553 | * ComponentId - Caller's component ID |
554 | * Value - Value to be printed with exit msg |
555 | * |
556 | * RETURN: None |
557 | * |
558 | * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is |
559 | * set in DebugLevel. Prints exit value also. |
560 | * |
561 | ******************************************************************************/ |
562 | |
563 | void |
564 | AcpiUtValueExit ( |
565 | UINT32 LineNumber, |
566 | const char *FunctionName, |
567 | const char *ModuleName, |
568 | UINT32 ComponentId, |
569 | UINT64 Value) |
570 | { |
571 | |
572 | /* Check if enabled up-front for performance */ |
573 | |
574 | if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) |
575 | { |
576 | AcpiDebugPrint (ACPI_LV_FUNCTIONS, |
577 | LineNumber, FunctionName, ModuleName, ComponentId, |
578 | "%s %8.8X%8.8X\n" , AcpiGbl_FunctionExitPrefix, |
579 | ACPI_FORMAT_UINT64 (Value)); |
580 | } |
581 | |
582 | if (AcpiGbl_NestingLevel) |
583 | { |
584 | AcpiGbl_NestingLevel--; |
585 | } |
586 | } |
587 | |
588 | ACPI_EXPORT_SYMBOL (AcpiUtValueExit) |
589 | |
590 | |
591 | /******************************************************************************* |
592 | * |
593 | * FUNCTION: AcpiUtPtrExit |
594 | * |
595 | * PARAMETERS: LineNumber - Caller's line number |
596 | * FunctionName - Caller's procedure name |
597 | * ModuleName - Caller's module name |
598 | * ComponentId - Caller's component ID |
599 | * Ptr - Pointer to display |
600 | * |
601 | * RETURN: None |
602 | * |
603 | * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is |
604 | * set in DebugLevel. Prints exit value also. |
605 | * |
606 | ******************************************************************************/ |
607 | |
608 | void |
609 | AcpiUtPtrExit ( |
610 | UINT32 LineNumber, |
611 | const char *FunctionName, |
612 | const char *ModuleName, |
613 | UINT32 ComponentId, |
614 | UINT8 *Ptr) |
615 | { |
616 | |
617 | /* Check if enabled up-front for performance */ |
618 | |
619 | if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) |
620 | { |
621 | AcpiDebugPrint (ACPI_LV_FUNCTIONS, |
622 | LineNumber, FunctionName, ModuleName, ComponentId, |
623 | "%s %p\n" , AcpiGbl_FunctionExitPrefix, Ptr); |
624 | } |
625 | |
626 | if (AcpiGbl_NestingLevel) |
627 | { |
628 | AcpiGbl_NestingLevel--; |
629 | } |
630 | } |
631 | |
632 | |
633 | /******************************************************************************* |
634 | * |
635 | * FUNCTION: AcpiUtStrExit |
636 | * |
637 | * PARAMETERS: LineNumber - Caller's line number |
638 | * FunctionName - Caller's procedure name |
639 | * ModuleName - Caller's module name |
640 | * ComponentId - Caller's component ID |
641 | * String - String to display |
642 | * |
643 | * RETURN: None |
644 | * |
645 | * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is |
646 | * set in DebugLevel. Prints exit value also. |
647 | * |
648 | ******************************************************************************/ |
649 | |
650 | void |
651 | AcpiUtStrExit ( |
652 | UINT32 LineNumber, |
653 | const char *FunctionName, |
654 | const char *ModuleName, |
655 | UINT32 ComponentId, |
656 | const char *String) |
657 | { |
658 | |
659 | /* Check if enabled up-front for performance */ |
660 | |
661 | if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId)) |
662 | { |
663 | AcpiDebugPrint (ACPI_LV_FUNCTIONS, |
664 | LineNumber, FunctionName, ModuleName, ComponentId, |
665 | "%s %s\n" , AcpiGbl_FunctionExitPrefix, String); |
666 | } |
667 | |
668 | if (AcpiGbl_NestingLevel) |
669 | { |
670 | AcpiGbl_NestingLevel--; |
671 | } |
672 | } |
673 | |
674 | |
675 | /******************************************************************************* |
676 | * |
677 | * FUNCTION: AcpiTracePoint |
678 | * |
679 | * PARAMETERS: Type - Trace event type |
680 | * Begin - TRUE if before execution |
681 | * Aml - Executed AML address |
682 | * Pathname - Object path |
683 | * Pointer - Pointer to the related object |
684 | * |
685 | * RETURN: None |
686 | * |
687 | * DESCRIPTION: Interpreter execution trace. |
688 | * |
689 | ******************************************************************************/ |
690 | |
691 | void |
692 | AcpiTracePoint ( |
693 | ACPI_TRACE_EVENT_TYPE Type, |
694 | BOOLEAN Begin, |
695 | UINT8 *Aml, |
696 | char *Pathname) |
697 | { |
698 | |
699 | ACPI_FUNCTION_ENTRY (); |
700 | |
701 | AcpiExTracePoint (Type, Begin, Aml, Pathname); |
702 | |
703 | #ifdef ACPI_USE_SYSTEM_TRACER |
704 | AcpiOsTracePoint (Type, Begin, Aml, Pathname); |
705 | #endif |
706 | } |
707 | |
708 | ACPI_EXPORT_SYMBOL (AcpiTracePoint) |
709 | |
710 | #endif |
711 | |