utdebug.c revision 306536
1132179Sdavidxu/******************************************************************************
2132179Sdavidxu *
3132179Sdavidxu * Module Name: utdebug - Debug print/trace routines
4132179Sdavidxu *
5132179Sdavidxu *****************************************************************************/
6132179Sdavidxu
7132179Sdavidxu/*
8132179Sdavidxu * Copyright (C) 2000 - 2016, Intel Corp.
9132179Sdavidxu * All rights reserved.
10132179Sdavidxu *
11132179Sdavidxu * Redistribution and use in source and binary forms, with or without
12132179Sdavidxu * modification, are permitted provided that the following conditions
13132179Sdavidxu * are met:
14132179Sdavidxu * 1. Redistributions of source code must retain the above copyright
15132179Sdavidxu *    notice, this list of conditions, and the following disclaimer,
16132179Sdavidxu *    without modification.
17132179Sdavidxu * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18132179Sdavidxu *    substantially similar to the "NO WARRANTY" disclaimer below
19132179Sdavidxu *    ("Disclaimer") and any redistribution must be conditioned upon
20132179Sdavidxu *    including a substantially similar Disclaimer requirement for further
21132179Sdavidxu *    binary redistribution.
22134147Sdavidxu * 3. Neither the names of the above-listed copyright holders nor the names
23134147Sdavidxu *    of any contributors may be used to endorse or promote products derived
24134147Sdavidxu *    from this software without specific prior written permission.
25155379Sdavidxu *
26132179Sdavidxu * Alternatively, this software may be distributed under the terms of the
27132179Sdavidxu * GNU General Public License ("GPL") version 2 as published by the Free
28132179Sdavidxu * Software Foundation.
29132179Sdavidxu *
30134147Sdavidxu * NO WARRANTY
31132179Sdavidxu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32134147Sdavidxu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33134147Sdavidxu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34134147Sdavidxu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35132179Sdavidxu * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36132179Sdavidxu * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37134147Sdavidxu * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38134147Sdavidxu * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39132179Sdavidxu * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40132179Sdavidxu * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41132179Sdavidxu * POSSIBILITY OF SUCH DAMAGES.
42132179Sdavidxu */
43133345Sdavidxu
44132179Sdavidxu#define EXPORT_ACPI_INTERFACES
45218822Sdim
46218822Sdim#include <contrib/dev/acpica/include/acpi.h>
47218822Sdim#include <contrib/dev/acpica/include/accommon.h>
48218822Sdim#include <contrib/dev/acpica/include/acinterp.h>
49132179Sdavidxu
50132179Sdavidxu#define _COMPONENT          ACPI_UTILITIES
51132179Sdavidxu        ACPI_MODULE_NAME    ("utdebug")
52132179Sdavidxu
53132179Sdavidxu
54132179Sdavidxu#ifdef ACPI_DEBUG_OUTPUT
55132179Sdavidxu
56132179Sdavidxustatic ACPI_THREAD_ID       AcpiGbl_PreviousThreadId = (ACPI_THREAD_ID) 0xFFFFFFFF;
57134147Sdavidxustatic const char           *AcpiGbl_FunctionEntryPrefix = "----Entry";
58134147Sdavidxustatic const char           *AcpiGbl_FunctionExitPrefix  = "----Exit-";
59132179Sdavidxu
60132179Sdavidxu
61134152Sdavidxu/*******************************************************************************
62134147Sdavidxu *
63134147Sdavidxu * FUNCTION:    AcpiUtInitStackPtrTrace
64132179Sdavidxu *
65134147Sdavidxu * PARAMETERS:  None
66134147Sdavidxu *
67134147Sdavidxu * RETURN:      None
68134147Sdavidxu *
69132179Sdavidxu * DESCRIPTION: Save the current CPU stack pointer at subsystem startup
70132179Sdavidxu *
71132179Sdavidxu ******************************************************************************/
72134147Sdavidxu
73134147Sdavidxuvoid
74134147SdavidxuAcpiUtInitStackPtrTrace (
75132179Sdavidxu    void)
76134147Sdavidxu{
77132179Sdavidxu    ACPI_SIZE               CurrentSp;
78134147Sdavidxu
79134147Sdavidxu
80134147Sdavidxu    AcpiGbl_EntryStackPointer = &CurrentSp;
81132179Sdavidxu}
82132179Sdavidxu
83132179Sdavidxu
84132179Sdavidxu/*******************************************************************************
85132179Sdavidxu *
86132179Sdavidxu * FUNCTION:    AcpiUtTrackStackPtr
87132179Sdavidxu *
88132179Sdavidxu * PARAMETERS:  None
89132179Sdavidxu *
90132179Sdavidxu * RETURN:      None
91132179Sdavidxu *
92132179Sdavidxu * DESCRIPTION: Save the current CPU stack pointer
93132179Sdavidxu *
94132179Sdavidxu ******************************************************************************/
95132179Sdavidxu
96132179Sdavidxuvoid
97132179SdavidxuAcpiUtTrackStackPtr (
98132179Sdavidxu    void)
99132179Sdavidxu{
100134147Sdavidxu    ACPI_SIZE               CurrentSp;
101132179Sdavidxu
102132179Sdavidxu
103132179Sdavidxu    if (&CurrentSp < AcpiGbl_LowestStackPointer)
104132179Sdavidxu    {
105132179Sdavidxu        AcpiGbl_LowestStackPointer = &CurrentSp;
106132179Sdavidxu    }
107132179Sdavidxu
108132179Sdavidxu    if (AcpiGbl_NestingLevel > AcpiGbl_DeepestNesting)
109132179Sdavidxu    {
110132179Sdavidxu        AcpiGbl_DeepestNesting = AcpiGbl_NestingLevel;
111132179Sdavidxu    }
112132179Sdavidxu}
113132179Sdavidxu
114132179Sdavidxu
115132179Sdavidxu/*******************************************************************************
116132179Sdavidxu *
117132179Sdavidxu * FUNCTION:    AcpiUtTrimFunctionName
118146818Sdfr *
119146818Sdfr * PARAMETERS:  FunctionName        - Ascii string containing a procedure name
120146818Sdfr *
121146818Sdfr * RETURN:      Updated pointer to the function name
122132179Sdavidxu *
123132179Sdavidxu * DESCRIPTION: Remove the "Acpi" prefix from the function name, if present.
124132179Sdavidxu *              This allows compiler macros such as __FUNCTION__ to be used
125132179Sdavidxu *              with no change to the debug output.
126146818Sdfr *
127146818Sdfr ******************************************************************************/
128146818Sdfr
129146818Sdfrstatic const char *
130132179SdavidxuAcpiUtTrimFunctionName (
131132179Sdavidxu    const char              *FunctionName)
132132179Sdavidxu{
133132179Sdavidxu
134132179Sdavidxu    /* All Function names are longer than 4 chars, check is safe */
135132179Sdavidxu
136132179Sdavidxu    if (*(ACPI_CAST_PTR (UINT32, FunctionName)) == ACPI_PREFIX_MIXED)
137132179Sdavidxu    {
138132179Sdavidxu        /* This is the case where the original source has not been modified */
139132179Sdavidxu
140133345Sdavidxu        return (FunctionName + 4);
141133345Sdavidxu    }
142133345Sdavidxu
143132179Sdavidxu    if (*(ACPI_CAST_PTR (UINT32, FunctionName)) == ACPI_PREFIX_LOWER)
144132179Sdavidxu    {
145132179Sdavidxu        /* This is the case where the source has been 'linuxized' */
146144923Sdavidxu
147144923Sdavidxu        return (FunctionName + 5);
148144923Sdavidxu    }
149144923Sdavidxu
150144923Sdavidxu    return (FunctionName);
151132179Sdavidxu}
152132179Sdavidxu
153133345Sdavidxu
154144923Sdavidxu/*******************************************************************************
155144923Sdavidxu *
156144923Sdavidxu * FUNCTION:    AcpiDebugPrint
157132179Sdavidxu *
158132179Sdavidxu * PARAMETERS:  RequestedDebugLevel - Requested debug print level
159132179Sdavidxu *              LineNumber          - Caller's line number (for error output)
160132179Sdavidxu *              FunctionName        - Caller's procedure name
161132179Sdavidxu *              ModuleName          - Caller's module name
162132179Sdavidxu *              ComponentId         - Caller's component ID
163132179Sdavidxu *              Format              - Printf format field
164132179Sdavidxu *              ...                 - Optional printf arguments
165132179Sdavidxu *
166132179Sdavidxu * RETURN:      None
167132179Sdavidxu *
168132179Sdavidxu * DESCRIPTION: Print error message with prefix consisting of the module name,
169132179Sdavidxu *              line number, and component ID.
170132179Sdavidxu *
171132179Sdavidxu ******************************************************************************/
172132179Sdavidxu
173132179Sdavidxuvoid  ACPI_INTERNAL_VAR_XFACE
174132179SdavidxuAcpiDebugPrint (
175132179Sdavidxu    UINT32                  RequestedDebugLevel,
176132179Sdavidxu    UINT32                  LineNumber,
177132179Sdavidxu    const char              *FunctionName,
178132179Sdavidxu    const char              *ModuleName,
179132179Sdavidxu    UINT32                  ComponentId,
180132179Sdavidxu    const char              *Format,
181132179Sdavidxu    ...)
182132179Sdavidxu{
183132179Sdavidxu    ACPI_THREAD_ID          ThreadId;
184132179Sdavidxu    va_list                 args;
185132179Sdavidxu
186132179Sdavidxu
187132179Sdavidxu    /* Check if debug output enabled */
188132179Sdavidxu
189132179Sdavidxu    if (!ACPI_IS_DEBUG_ENABLED (RequestedDebugLevel, ComponentId))
190132179Sdavidxu    {
191132179Sdavidxu        return;
192132179Sdavidxu    }
193132179Sdavidxu
194132179Sdavidxu    /*
195132179Sdavidxu     * Thread tracking and context switch notification
196132179Sdavidxu     */
197132179Sdavidxu    ThreadId = AcpiOsGetThreadId ();
198132179Sdavidxu    if (ThreadId != AcpiGbl_PreviousThreadId)
199132179Sdavidxu    {
200132179Sdavidxu        if (ACPI_LV_THREADS & AcpiDbgLevel)
201132179Sdavidxu        {
202132179Sdavidxu            AcpiOsPrintf (
203132179Sdavidxu                "\n**** Context Switch from TID %u to TID %u ****\n\n",
204132179Sdavidxu                (UINT32) AcpiGbl_PreviousThreadId, (UINT32) ThreadId);
205132179Sdavidxu        }
206132179Sdavidxu
207132179Sdavidxu        AcpiGbl_PreviousThreadId = ThreadId;
208132179Sdavidxu        AcpiGbl_NestingLevel = 0;
209132179Sdavidxu    }
210132179Sdavidxu
211132179Sdavidxu    /*
212132179Sdavidxu     * Display the module name, current line number, thread ID (if requested),
213132179Sdavidxu     * current procedure nesting level, and the current procedure name
214132179Sdavidxu     */
215132179Sdavidxu    AcpiOsPrintf ("%9s-%04ld ", ModuleName, LineNumber);
216132179Sdavidxu
217132179Sdavidxu#ifdef ACPI_APPLICATION
218132179Sdavidxu    /*
219132179Sdavidxu     * For AcpiExec/iASL only, emit the thread ID and nesting level.
220132179Sdavidxu     * Note: nesting level is really only useful during a single-thread
221132179Sdavidxu     * execution. Otherwise, multiple threads will keep resetting the
222132179Sdavidxu     * level.
223132179Sdavidxu     */
224132179Sdavidxu    if (ACPI_LV_THREADS & AcpiDbgLevel)
225132179Sdavidxu    {
226132179Sdavidxu        AcpiOsPrintf ("[%u] ", (UINT32) ThreadId);
227132179Sdavidxu    }
228132179Sdavidxu
229132179Sdavidxu    AcpiOsPrintf ("[%02ld] ", AcpiGbl_NestingLevel);
230132179Sdavidxu#endif
231132179Sdavidxu
232132179Sdavidxu    AcpiOsPrintf ("%-22.22s: ", AcpiUtTrimFunctionName (FunctionName));
233132179Sdavidxu
234132179Sdavidxu    va_start (args, Format);
235132179Sdavidxu    AcpiOsVprintf (Format, args);
236132179Sdavidxu    va_end (args);
237132179Sdavidxu}
238132179Sdavidxu
239132179SdavidxuACPI_EXPORT_SYMBOL (AcpiDebugPrint)
240132179Sdavidxu
241132179Sdavidxu
242132179Sdavidxu/*******************************************************************************
243132179Sdavidxu *
244132179Sdavidxu * FUNCTION:    AcpiDebugPrintRaw
245132179Sdavidxu *
246132179Sdavidxu * PARAMETERS:  RequestedDebugLevel - Requested debug print level
247132179Sdavidxu *              LineNumber          - Caller's line number
248132179Sdavidxu *              FunctionName        - Caller's procedure name
249132179Sdavidxu *              ModuleName          - Caller's module name
250132179Sdavidxu *              ComponentId         - Caller's component ID
251132179Sdavidxu *              Format              - Printf format field
252144923Sdavidxu *              ...                 - Optional printf arguments
253132179Sdavidxu *
254132179Sdavidxu * RETURN:      None
255132179Sdavidxu *
256132179Sdavidxu * DESCRIPTION: Print message with no headers. Has same interface as
257132179Sdavidxu *              DebugPrint so that the same macros can be used.
258134147Sdavidxu *
259132179Sdavidxu ******************************************************************************/
260144923Sdavidxu
261134147Sdavidxuvoid  ACPI_INTERNAL_VAR_XFACE
262134147SdavidxuAcpiDebugPrintRaw (
263144923Sdavidxu    UINT32                  RequestedDebugLevel,
264134147Sdavidxu    UINT32                  LineNumber,
265134147Sdavidxu    const char              *FunctionName,
266144923Sdavidxu    const char              *ModuleName,
267134147Sdavidxu    UINT32                  ComponentId,
268132179Sdavidxu    const char              *Format,
269132179Sdavidxu    ...)
270132179Sdavidxu{
271132179Sdavidxu    va_list                 args;
272132179Sdavidxu
273132179Sdavidxu
274134147Sdavidxu    /* Check if debug output enabled */
275134147Sdavidxu
276134147Sdavidxu    if (!ACPI_IS_DEBUG_ENABLED (RequestedDebugLevel, ComponentId))
277134147Sdavidxu    {
278134147Sdavidxu        return;
279134147Sdavidxu    }
280134147Sdavidxu
281134147Sdavidxu    va_start (args, Format);
282134147Sdavidxu    AcpiOsVprintf (Format, args);
283134147Sdavidxu    va_end (args);
284134147Sdavidxu}
285134147Sdavidxu
286132179SdavidxuACPI_EXPORT_SYMBOL (AcpiDebugPrintRaw)
287132179Sdavidxu
288132179Sdavidxu
289132179Sdavidxu/*******************************************************************************
290134147Sdavidxu *
291132179Sdavidxu * FUNCTION:    AcpiUtTrace
292134147Sdavidxu *
293134147Sdavidxu * PARAMETERS:  LineNumber          - Caller's line number
294134147Sdavidxu *              FunctionName        - Caller's procedure name
295134147Sdavidxu *              ModuleName          - Caller's module name
296134147Sdavidxu *              ComponentId         - Caller's component ID
297134147Sdavidxu *
298132179Sdavidxu * RETURN:      None
299132179Sdavidxu *
300132179Sdavidxu * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
301132179Sdavidxu *              set in DebugLevel
302132179Sdavidxu *
303132179Sdavidxu ******************************************************************************/
304132179Sdavidxu
305132179Sdavidxuvoid
306132179SdavidxuAcpiUtTrace (
307144923Sdavidxu    UINT32                  LineNumber,
308144923Sdavidxu    const char              *FunctionName,
309132179Sdavidxu    const char              *ModuleName,
310132179Sdavidxu    UINT32                  ComponentId)
311132179Sdavidxu{
312132179Sdavidxu
313132179Sdavidxu    AcpiGbl_NestingLevel++;
314144923Sdavidxu    AcpiUtTrackStackPtr ();
315132179Sdavidxu
316132179Sdavidxu    /* Check if enabled up-front for performance */
317144923Sdavidxu
318132179Sdavidxu    if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId))
319137731Sdavidxu    {
320132179Sdavidxu        AcpiDebugPrint (ACPI_LV_FUNCTIONS,
321132179Sdavidxu            LineNumber, FunctionName, ModuleName, ComponentId,
322144923Sdavidxu            "%s\n", AcpiGbl_FunctionEntryPrefix);
323144923Sdavidxu    }
324144923Sdavidxu}
325144923Sdavidxu
326144923SdavidxuACPI_EXPORT_SYMBOL (AcpiUtTrace)
327144923Sdavidxu
328144923Sdavidxu
329144923Sdavidxu/*******************************************************************************
330144923Sdavidxu *
331144923Sdavidxu * FUNCTION:    AcpiUtTracePtr
332144923Sdavidxu *
333144923Sdavidxu * PARAMETERS:  LineNumber          - Caller's line number
334144923Sdavidxu *              FunctionName        - Caller's procedure name
335155379Sdavidxu *              ModuleName          - Caller's module name
336155379Sdavidxu *              ComponentId         - Caller's component ID
337144923Sdavidxu *              Pointer             - Pointer to display
338144923Sdavidxu *
339144923Sdavidxu * RETURN:      None
340144923Sdavidxu *
341144923Sdavidxu * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
342132179Sdavidxu *              set in DebugLevel
343144923Sdavidxu *
344144923Sdavidxu ******************************************************************************/
345144923Sdavidxu
346144923Sdavidxuvoid
347144923SdavidxuAcpiUtTracePtr (
348144923Sdavidxu    UINT32                  LineNumber,
349144923Sdavidxu    const char              *FunctionName,
350144923Sdavidxu    const char              *ModuleName,
351144923Sdavidxu    UINT32                  ComponentId,
352144923Sdavidxu    const void              *Pointer)
353144923Sdavidxu{
354144923Sdavidxu
355144923Sdavidxu    AcpiGbl_NestingLevel++;
356144923Sdavidxu    AcpiUtTrackStackPtr ();
357144923Sdavidxu
358144923Sdavidxu    /* Check if enabled up-front for performance */
359144923Sdavidxu
360144923Sdavidxu    if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId))
361144923Sdavidxu    {
362144923Sdavidxu        AcpiDebugPrint (ACPI_LV_FUNCTIONS,
363144923Sdavidxu            LineNumber, FunctionName, ModuleName, ComponentId,
364144923Sdavidxu            "%s %p\n", AcpiGbl_FunctionEntryPrefix, Pointer);
365144923Sdavidxu    }
366144923Sdavidxu}
367144923Sdavidxu
368144923Sdavidxu
369144923Sdavidxu/*******************************************************************************
370144923Sdavidxu *
371144923Sdavidxu * FUNCTION:    AcpiUtTraceStr
372144923Sdavidxu *
373144923Sdavidxu * PARAMETERS:  LineNumber          - Caller's line number
374144923Sdavidxu *              FunctionName        - Caller's procedure name
375144923Sdavidxu *              ModuleName          - Caller's module name
376144923Sdavidxu *              ComponentId         - Caller's component ID
377144923Sdavidxu *              String              - Additional string to display
378144923Sdavidxu *
379144923Sdavidxu * RETURN:      None
380144923Sdavidxu *
381144923Sdavidxu * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
382144923Sdavidxu *              set in DebugLevel
383144923Sdavidxu *
384144923Sdavidxu ******************************************************************************/
385144923Sdavidxu
386144923Sdavidxuvoid
387144923SdavidxuAcpiUtTraceStr (
388144923Sdavidxu    UINT32                  LineNumber,
389144923Sdavidxu    const char              *FunctionName,
390144923Sdavidxu    const char              *ModuleName,
391144923Sdavidxu    UINT32                  ComponentId,
392144923Sdavidxu    const char              *String)
393144923Sdavidxu{
394144923Sdavidxu
395144923Sdavidxu    AcpiGbl_NestingLevel++;
396144923Sdavidxu    AcpiUtTrackStackPtr ();
397144923Sdavidxu
398144923Sdavidxu    /* Check if enabled up-front for performance */
399144923Sdavidxu
400144923Sdavidxu    if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId))
401144923Sdavidxu    {
402144923Sdavidxu        AcpiDebugPrint (ACPI_LV_FUNCTIONS,
403144923Sdavidxu            LineNumber, FunctionName, ModuleName, ComponentId,
404144923Sdavidxu            "%s %s\n", AcpiGbl_FunctionEntryPrefix, String);
405144923Sdavidxu    }
406144923Sdavidxu}
407144923Sdavidxu
408144923Sdavidxu
409134147Sdavidxu/*******************************************************************************
410134147Sdavidxu *
411134147Sdavidxu * FUNCTION:    AcpiUtTraceU32
412134147Sdavidxu *
413144923Sdavidxu * PARAMETERS:  LineNumber          - Caller's line number
414144923Sdavidxu *              FunctionName        - Caller's procedure name
415134147Sdavidxu *              ModuleName          - Caller's module name
416134147Sdavidxu *              ComponentId         - Caller's component ID
417134147Sdavidxu *              Integer             - Integer to display
418134147Sdavidxu *
419134147Sdavidxu * RETURN:      None
420134147Sdavidxu *
421134147Sdavidxu * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is
422144923Sdavidxu *              set in DebugLevel
423144923Sdavidxu *
424134147Sdavidxu ******************************************************************************/
425134147Sdavidxu
426134147Sdavidxuvoid
427134147SdavidxuAcpiUtTraceU32 (
428134147Sdavidxu    UINT32                  LineNumber,
429134147Sdavidxu    const char              *FunctionName,
430134147Sdavidxu    const char              *ModuleName,
431134147Sdavidxu    UINT32                  ComponentId,
432134147Sdavidxu    UINT32                  Integer)
433215679Sattilio{
434215679Sattilio
435215679Sattilio    AcpiGbl_NestingLevel++;
436215679Sattilio    AcpiUtTrackStackPtr ();
437215679Sattilio
438215679Sattilio    /* Check if enabled up-front for performance */
439215679Sattilio
440215679Sattilio    if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId))
441215679Sattilio    {
442215679Sattilio        AcpiDebugPrint (ACPI_LV_FUNCTIONS,
443215679Sattilio            LineNumber, FunctionName, ModuleName, ComponentId,
444215679Sattilio            "%s %08X\n", AcpiGbl_FunctionEntryPrefix, Integer);
445215679Sattilio    }
446215679Sattilio}
447215679Sattilio
448215679Sattilio
449215679Sattilio/*******************************************************************************
450215679Sattilio *
451215679Sattilio * FUNCTION:    AcpiUtExit
452215679Sattilio *
453215679Sattilio * PARAMETERS:  LineNumber          - Caller's line number
454215679Sattilio *              FunctionName        - Caller's procedure name
455215679Sattilio *              ModuleName          - Caller's module name
456215679Sattilio *              ComponentId         - Caller's component ID
457215679Sattilio *
458215679Sattilio * RETURN:      None
459215679Sattilio *
460215679Sattilio * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
461215679Sattilio *              set in DebugLevel
462215679Sattilio *
463215679Sattilio ******************************************************************************/
464215679Sattilio
465215679Sattiliovoid
466215679SattilioAcpiUtExit (
467215679Sattilio    UINT32                  LineNumber,
468215679Sattilio    const char              *FunctionName,
469215679Sattilio    const char              *ModuleName,
470215679Sattilio    UINT32                  ComponentId)
471215679Sattilio{
472215679Sattilio
473134147Sdavidxu    /* Check if enabled up-front for performance */
474132179Sdavidxu
475132179Sdavidxu    if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId))
476132179Sdavidxu    {
477132179Sdavidxu        AcpiDebugPrint (ACPI_LV_FUNCTIONS,
478134147Sdavidxu            LineNumber, FunctionName, ModuleName, ComponentId,
479132179Sdavidxu            "%s\n", AcpiGbl_FunctionExitPrefix);
480132179Sdavidxu    }
481132179Sdavidxu
482134147Sdavidxu    if (AcpiGbl_NestingLevel)
483132179Sdavidxu    {
484132179Sdavidxu        AcpiGbl_NestingLevel--;
485134147Sdavidxu    }
486132179Sdavidxu}
487132179Sdavidxu
488132179SdavidxuACPI_EXPORT_SYMBOL (AcpiUtExit)
489132179Sdavidxu
490132179Sdavidxu
491134147Sdavidxu/*******************************************************************************
492134147Sdavidxu *
493134147Sdavidxu * FUNCTION:    AcpiUtStatusExit
494134152Sdavidxu *
495134152Sdavidxu * PARAMETERS:  LineNumber          - Caller's line number
496134147Sdavidxu *              FunctionName        - Caller's procedure name
497132179Sdavidxu *              ModuleName          - Caller's module name
498132179Sdavidxu *              ComponentId         - Caller's component ID
499132179Sdavidxu *              Status              - Exit status code
500132179Sdavidxu *
501132179Sdavidxu * RETURN:      None
502132179Sdavidxu *
503132179Sdavidxu * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
504132179Sdavidxu *              set in DebugLevel. Prints exit status also.
505132179Sdavidxu *
506132179Sdavidxu ******************************************************************************/
507132179Sdavidxu
508132179Sdavidxuvoid
509132179SdavidxuAcpiUtStatusExit (
510132179Sdavidxu    UINT32                  LineNumber,
511132179Sdavidxu    const char              *FunctionName,
512132179Sdavidxu    const char              *ModuleName,
513132179Sdavidxu    UINT32                  ComponentId,
514134147Sdavidxu    ACPI_STATUS             Status)
515132179Sdavidxu{
516132179Sdavidxu
517132179Sdavidxu    /* Check if enabled up-front for performance */
518132179Sdavidxu
519134147Sdavidxu    if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId))
520132179Sdavidxu    {
521134147Sdavidxu        if (ACPI_SUCCESS (Status))
522134147Sdavidxu        {
523132179Sdavidxu            AcpiDebugPrint (ACPI_LV_FUNCTIONS,
524132179Sdavidxu                LineNumber, FunctionName, ModuleName, ComponentId,
525134147Sdavidxu                "%s %s\n", AcpiGbl_FunctionExitPrefix,
526134147Sdavidxu                AcpiFormatException (Status));
527134147Sdavidxu        }
528134147Sdavidxu        else
529132179Sdavidxu        {
530132179Sdavidxu            AcpiDebugPrint (ACPI_LV_FUNCTIONS,
531132179Sdavidxu                LineNumber, FunctionName, ModuleName, ComponentId,
532132179Sdavidxu                "%s ****Exception****: %s\n", AcpiGbl_FunctionExitPrefix,
533132179Sdavidxu                AcpiFormatException (Status));
534132179Sdavidxu        }
535132179Sdavidxu    }
536132179Sdavidxu
537132179Sdavidxu    if (AcpiGbl_NestingLevel)
538132179Sdavidxu    {
539132179Sdavidxu        AcpiGbl_NestingLevel--;
540132179Sdavidxu    }
541132179Sdavidxu}
542132179Sdavidxu
543132179SdavidxuACPI_EXPORT_SYMBOL (AcpiUtStatusExit)
544132179Sdavidxu
545134147Sdavidxu
546134147Sdavidxu/*******************************************************************************
547132179Sdavidxu *
548132179Sdavidxu * FUNCTION:    AcpiUtValueExit
549134147Sdavidxu *
550134147Sdavidxu * PARAMETERS:  LineNumber          - Caller's line number
551132179Sdavidxu *              FunctionName        - Caller's procedure name
552134147Sdavidxu *              ModuleName          - Caller's module name
553134147Sdavidxu *              ComponentId         - Caller's component ID
554134147Sdavidxu *              Value               - Value to be printed with exit msg
555132179Sdavidxu *
556134147Sdavidxu * RETURN:      None
557134147Sdavidxu *
558134147Sdavidxu * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
559134147Sdavidxu *              set in DebugLevel. Prints exit value also.
560134147Sdavidxu *
561134147Sdavidxu ******************************************************************************/
562134147Sdavidxu
563134147Sdavidxuvoid
564134147SdavidxuAcpiUtValueExit (
565134147Sdavidxu    UINT32                  LineNumber,
566132179Sdavidxu    const char              *FunctionName,
567132179Sdavidxu    const char              *ModuleName,
568132179Sdavidxu    UINT32                  ComponentId,
569132179Sdavidxu    UINT64                  Value)
570132179Sdavidxu{
571134147Sdavidxu
572134147Sdavidxu    /* Check if enabled up-front for performance */
573134147Sdavidxu
574134147Sdavidxu    if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId))
575134147Sdavidxu    {
576134147Sdavidxu        AcpiDebugPrint (ACPI_LV_FUNCTIONS,
577134147Sdavidxu            LineNumber, FunctionName, ModuleName, ComponentId,
578134147Sdavidxu            "%s %8.8X%8.8X\n", AcpiGbl_FunctionExitPrefix,
579134147Sdavidxu            ACPI_FORMAT_UINT64 (Value));
580132179Sdavidxu    }
581132179Sdavidxu
582132179Sdavidxu    if (AcpiGbl_NestingLevel)
583132179Sdavidxu    {
584132179Sdavidxu        AcpiGbl_NestingLevel--;
585132179Sdavidxu    }
586132179Sdavidxu}
587133345Sdavidxu
588133345SdavidxuACPI_EXPORT_SYMBOL (AcpiUtValueExit)
589134147Sdavidxu
590133345Sdavidxu
591132179Sdavidxu/*******************************************************************************
592132179Sdavidxu *
593132179Sdavidxu * FUNCTION:    AcpiUtPtrExit
594132179Sdavidxu *
595132179Sdavidxu * PARAMETERS:  LineNumber          - Caller's line number
596133345Sdavidxu *              FunctionName        - Caller's procedure name
597133345Sdavidxu *              ModuleName          - Caller's module name
598134147Sdavidxu *              ComponentId         - Caller's component ID
599133345Sdavidxu *              Ptr                 - Pointer to display
600132179Sdavidxu *
601132179Sdavidxu * RETURN:      None
602132179Sdavidxu *
603132179Sdavidxu * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
604132179Sdavidxu *              set in DebugLevel. Prints exit value also.
605132179Sdavidxu *
606132179Sdavidxu ******************************************************************************/
607132179Sdavidxu
608132179Sdavidxuvoid
609132179SdavidxuAcpiUtPtrExit (
610132179Sdavidxu    UINT32                  LineNumber,
611134147Sdavidxu    const char              *FunctionName,
612132179Sdavidxu    const char              *ModuleName,
613134147Sdavidxu    UINT32                  ComponentId,
614132179Sdavidxu    UINT8                   *Ptr)
615132179Sdavidxu{
616132179Sdavidxu
617132179Sdavidxu    /* Check if enabled up-front for performance */
618132179Sdavidxu
619132179Sdavidxu    if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId))
620132179Sdavidxu    {
621132179Sdavidxu        AcpiDebugPrint (ACPI_LV_FUNCTIONS,
622132179Sdavidxu            LineNumber, FunctionName, ModuleName, ComponentId,
623132179Sdavidxu            "%s %p\n", AcpiGbl_FunctionExitPrefix, Ptr);
624132179Sdavidxu    }
625132179Sdavidxu
626132179Sdavidxu    if (AcpiGbl_NestingLevel)
627132179Sdavidxu    {
628132179Sdavidxu        AcpiGbl_NestingLevel--;
629132179Sdavidxu    }
630132179Sdavidxu}
631132179Sdavidxu
632132179Sdavidxu
633132179Sdavidxu/*******************************************************************************
634132179Sdavidxu *
635132179Sdavidxu * FUNCTION:    AcpiUtStrExit
636134152Sdavidxu *
637134152Sdavidxu * PARAMETERS:  LineNumber          - Caller's line number
638134152Sdavidxu *              FunctionName        - Caller's procedure name
639134152Sdavidxu *              ModuleName          - Caller's module name
640134152Sdavidxu *              ComponentId         - Caller's component ID
641134152Sdavidxu *              String              - String to display
642132179Sdavidxu *
643132179Sdavidxu * RETURN:      None
644132179Sdavidxu *
645132179Sdavidxu * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
646132179Sdavidxu *              set in DebugLevel. Prints exit value also.
647132179Sdavidxu *
648132179Sdavidxu ******************************************************************************/
649132179Sdavidxu
650132179Sdavidxuvoid
651132179SdavidxuAcpiUtStrExit (
652132179Sdavidxu    UINT32                  LineNumber,
653132179Sdavidxu    const char              *FunctionName,
654132179Sdavidxu    const char              *ModuleName,
655132179Sdavidxu    UINT32                  ComponentId,
656132179Sdavidxu    const char              *String)
657132179Sdavidxu{
658132179Sdavidxu
659132179Sdavidxu    /* Check if enabled up-front for performance */
660132179Sdavidxu
661132179Sdavidxu    if (ACPI_IS_DEBUG_ENABLED (ACPI_LV_FUNCTIONS, ComponentId))
662132179Sdavidxu    {
663132179Sdavidxu        AcpiDebugPrint (ACPI_LV_FUNCTIONS,
664132179Sdavidxu            LineNumber, FunctionName, ModuleName, ComponentId,
665132179Sdavidxu            "%s %s\n", AcpiGbl_FunctionExitPrefix, String);
666132179Sdavidxu    }
667132179Sdavidxu
668132179Sdavidxu    if (AcpiGbl_NestingLevel)
669132179Sdavidxu    {
670132179Sdavidxu        AcpiGbl_NestingLevel--;
671132179Sdavidxu    }
672132179Sdavidxu}
673132179Sdavidxu
674132179Sdavidxu
675132179Sdavidxu/*******************************************************************************
676132179Sdavidxu *
677132179Sdavidxu * FUNCTION:    AcpiTracePoint
678132179Sdavidxu *
679132179Sdavidxu * PARAMETERS:  Type                - Trace event type
680132179Sdavidxu *              Begin               - TRUE if before execution
681132179Sdavidxu *              Aml                 - Executed AML address
682132179Sdavidxu *              Pathname            - Object path
683132179Sdavidxu *              Pointer             - Pointer to the related object
684132179Sdavidxu *
685132179Sdavidxu * RETURN:      None
686132179Sdavidxu *
687132179Sdavidxu * DESCRIPTION: Interpreter execution trace.
688132179Sdavidxu *
689132179Sdavidxu ******************************************************************************/
690132179Sdavidxu
691132179Sdavidxuvoid
692132179SdavidxuAcpiTracePoint (
693132179Sdavidxu    ACPI_TRACE_EVENT_TYPE   Type,
694132179Sdavidxu    BOOLEAN                 Begin,
695132179Sdavidxu    UINT8                   *Aml,
696132179Sdavidxu    char                    *Pathname)
697132179Sdavidxu{
698144923Sdavidxu
699144923Sdavidxu    ACPI_FUNCTION_ENTRY ();
700144923Sdavidxu
701144923Sdavidxu    AcpiExTracePoint (Type, Begin, Aml, Pathname);
702144923Sdavidxu
703144923Sdavidxu#ifdef ACPI_USE_SYSTEM_TRACER
704144923Sdavidxu    AcpiOsTracePoint (Type, Begin, Aml, Pathname);
705144923Sdavidxu#endif
706144923Sdavidxu}
707144923Sdavidxu
708144923SdavidxuACPI_EXPORT_SYMBOL (AcpiTracePoint)
709144923Sdavidxu
710144923Sdavidxu#endif
711144923Sdavidxu
712144923Sdavidxu
713144923Sdavidxu#ifdef ACPI_APPLICATION
714144923Sdavidxu/*******************************************************************************
715144923Sdavidxu *
716145960Sdavidxu * FUNCTION:    AcpiLogError
717145960Sdavidxu *
718144923Sdavidxu * PARAMETERS:  Format              - Printf format field
719144923Sdavidxu *              ...                 - Optional printf arguments
720144923Sdavidxu *
721144923Sdavidxu * RETURN:      None
722144923Sdavidxu *
723144923Sdavidxu * DESCRIPTION: Print error message to the console, used by applications.
724144923Sdavidxu *
725144923Sdavidxu ******************************************************************************/
726144923Sdavidxu
727144923Sdavidxuvoid  ACPI_INTERNAL_VAR_XFACE
728144923SdavidxuAcpiLogError (
729144923Sdavidxu    const char              *Format,
730144923Sdavidxu    ...)
731144923Sdavidxu{
732144923Sdavidxu    va_list                 Args;
733144923Sdavidxu
734144923Sdavidxu    va_start (Args, Format);
735144923Sdavidxu    (void) AcpiUtFileVprintf (ACPI_FILE_ERR, Format, Args);
736144923Sdavidxu    va_end (Args);
737144923Sdavidxu}
738144923Sdavidxu
739144923SdavidxuACPI_EXPORT_SYMBOL (AcpiLogError)
740144923Sdavidxu#endif
741144923Sdavidxu