NOTICE OF RELOCATION
[keystone-rtos/fvid2.git] / src / trace.c
1 /*
2  *  Copyright (c) Texas Instruments Incorporated 2018
3  *
4  *  Redistribution and use in source and binary forms, with or without
5  *  modification, are permitted provided that the following conditions
6  *  are met:
7  *
8  *    Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  *
11  *    Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the
14  *    distribution.
15  *
16  *    Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
33 /**
34  *  \file       trace.c
35  *
36  *  \brief      Trace implementation.
37  *
38  *              This abstracts and implements the definitions for
39  *              user side traces statements and also details
40  *              of variable traces supported in existing
41  *              implementation.
42  *
43  */
45 /* ========================================================================== */
46 /*                             Include Files                                  */
47 /* ========================================================================== */
49 #include <stdint.h>
51 #include <ti/csl/tistdtypes.h>
52 #include <ti/drv/fvid2/fvid2.h>
54 /* ========================================================================== */
55 /*                           Macros & Typedefs                                */
56 /* ========================================================================== */
58 /* None */
60 /* ========================================================================== */
61 /*                         Structure Declarations                             */
62 /* ========================================================================== */
64 /* None */
66 /* ========================================================================== */
67 /*                          Function Declarations                             */
68 /* ========================================================================== */
70 /* None */
72 /* ========================================================================== */
73 /*                            Global Variables                                */
74 /* ========================================================================== */
76 /* None */
78 /* ========================================================================== */
79 /*                          Function Definitions                              */
80 /* ========================================================================== */
82 #if defined (FVID2_CFG_TRACE_ENABLE)
83 /**
84  *  \brief      Function to log the trace with zero parameters and just
85  *              information string.
86  *  \param      mask type of traces.
87  *  \param      classType One of three classes where this trace need
88  *              to be enabed.
89  *  \param      fileName    Where the condition has occured.
90  *  \param      lineNum     Line number of the current file where this failure
91  *                          has occured.
92  *  \param      The debug string.
93  */
94 void
95 GT_trace0(uint32_t      maskType,
96           GT_TraceClass classType,
97           const char   *fileName,
98           int32_t       lineNum,
99           const char   *infoString)
101     /* Check if trace is enabled. */
102     if (((maskType & GT_TRACESTATE_MASK) >> GT_TRACESTATE_SHIFT)
103         == GT_TraceState_Enable)
104     {
105         /* Check if specified class is enabled. */
106         if ((maskType & GT_TRACECLASS_MASK) >= classType)
107         {
108             /* Print if specified class is greater than or equal to class
109              * for this specific print.
110              */
111             if (!((classType == GT_INFO) || (classType == GT_INFO1)))
112             {
113                 Fvid2_printf("%s @ Line %d: ", fileName, lineNum);
114             }
115             Fvid2_printf((const char *) infoString);
116         }
117     }
120 /**
121  *  \brief      Function to log the trace with one additional parameter
122  *  \param      mask type of traces
123  *  \param      classType One of three classes where this trace
124  *              need to be enabed.
125  *  \param      fileName    Where the condition has occured.
126  *  \param      lineNum     Line number of the current file where this failure
127  *                          has occured.
128  *  \param      The debug string.
129  *  \param      param The additional parameter which needs to be logged.
130  */
131 void
132 GT_trace1(uint32_t      maskType,
133           GT_TraceClass classType,
134           const char   *fileName,
135           int32_t       lineNum,
136           const char   *infoString,
137           uintptr_t     param0)
139     /* Check if trace is enabled. */
140     if (((maskType & GT_TRACESTATE_MASK) >> GT_TRACESTATE_SHIFT)
141         == GT_TraceState_Enable)
142     {
143         /* Check if specified class is enabled. */
144         if ((maskType & GT_TRACECLASS_MASK) >= classType)
145         {
146             /* Print if specified class is greater than or equal to class
147              * for this specific print.
148              */
149             if (!((classType == GT_INFO) || (classType == GT_INFO1)))
150             {
151                 Fvid2_printf("%s @ Line %d: ", fileName, lineNum);
152             }
153             Fvid2_printf((const char *) infoString, param0);
154         }
155     }
158 /**
159  *  \brief      Function to log the trace with two additional parameters
160  *  \param      mask type of traces
161  *  \param      classType One of three classes where this trace
162  *              need to be enabed.
163  *  \param      fileName    Where the condition has occured.
164  *  \param      lineNum     Line number of the current file where this failure
165  *                          has occured.
166  *  \param      The debug string.
167  *  \param      param0 The first parameter which needs to be logged.
168  *  \param      param1 The second parameter which needs to be logged.
169  */
170 void
171 GT_trace2(uint32_t      maskType,
172           GT_TraceClass classType,
173           const char   *fileName,
174           int32_t       lineNum,
175           const char   *infoString,
176           uintptr_t     param0,
177           uintptr_t     param1)
179     /* Check if trace is enabled. */
180     if (((maskType & GT_TRACESTATE_MASK) >> GT_TRACESTATE_SHIFT)
181         == GT_TraceState_Enable)
182     {
183         /* Check if specified class is enabled. */
184         if ((maskType & GT_TRACECLASS_MASK) >= classType)
185         {
186             /* Print if specified class is greater than or equal to class
187              * for this specific print.
188              */
189             if (!((classType == GT_INFO) || (classType == GT_INFO1)))
190             {
191                 Fvid2_printf("%s @ Line %d: ", fileName, lineNum);
192             }
193             Fvid2_printf((const char *) infoString, param0, param1);
194         }
195     }
198 /**
199  *  \brief      Function to log the trace with three parameters.
200  *  \param      mask type of traces
201  *  \param      classType One of three classes where this trace
202  *              need to be enabed.
203  *  \param      fileName    Where the condition has occured.
204  *  \param      lineNum     Line number of the current file where this failure
205  *                          has occured.
206  *  \param      The debug string.
207  *  \param      param0 The first parameter which needs to be logged.
208  *  \param      param1 The second parameter which needs to be logged.
209  *  \param      param2 The third parameter which needs to be logged.
210  */
211 void
212 GT_trace3(uint32_t      maskType,
213           GT_TraceClass classType,
214           const char   *fileName,
215           int32_t       lineNum,
216           const char   *infoString,
217           uintptr_t     param0,
218           uintptr_t     param1,
219           uintptr_t     param2)
221     /* Check if trace is enabled. */
222     if (((maskType & GT_TRACESTATE_MASK) >> GT_TRACESTATE_SHIFT)
223         == GT_TraceState_Enable)
224     {
225         /* Check if specified class is enabled. */
226         if ((maskType & GT_TRACECLASS_MASK) >= classType)
227         {
228             /* Print if specified class is greater than or equal to class
229              * for this specific print.
230              */
231             if (!((classType == GT_INFO) || (classType == GT_INFO1)))
232             {
233                 Fvid2_printf("%s @ Line %d: ", fileName, lineNum);
234             }
235             Fvid2_printf((const char *) infoString, param0, param1, param2);
236         }
237     }
240 /**
241  *  \brief      Function to log the trace with four parameters.
242  *  \param      mask type of traces
243  *  \param      classType One of three classes where this trace
244  *              need to be enabed.
245  *  \param      fileName    Where the condition has occured.
246  *  \param      lineNum     Line number of the current file where this failure
247  *                          has occured.
248  *  \param      The debug string.
249  *  \param      param0 The first parameter which needs to be logged.
250  *  \param      param1 The second parameter which needs to be logged.
251  *  \param      param2 The third parameter which needs to be logged.
252  *  \param      param3 The fourth parameter which needs to be logged.
253  */
254 void
255 GT_trace4(uint32_t      maskType,
256           GT_TraceClass classType,
257           const char   *fileName,
258           int32_t       lineNum,
259           const char   *infoString,
260           uintptr_t     param0,
261           uintptr_t     param1,
262           uintptr_t     param2,
263           uintptr_t     param3)
265     /* Check if trace is enabled. */
266     if (((maskType & GT_TRACESTATE_MASK) >> GT_TRACESTATE_SHIFT)
267         == GT_TraceState_Enable)
268     {
269         /* Check if specified class is enabled. */
270         if ((maskType & GT_TRACECLASS_MASK) >= classType)
271         {
272             /* Print if specified class is greater than or equal to class
273              * for this specific print.
274              */
275             if (!((classType == GT_INFO) || (classType == GT_INFO1)))
276             {
277                 Fvid2_printf("%s @ Line %d: ", fileName, lineNum);
278             }
279             Fvid2_printf(
280                 (const char *) infoString, param0, param1, param2, param3);
281         }
282     }
285 /**
286  *  \brief      Function to log the trace with five parameters.
287  *  \param      mask type of traces
288  *  \param      classType One of three classes where this trace
289  *              need to be enabed.
290  *  \param      fileName    Where the condition has occured.
291  *  \param      lineNum     Line number of the current file where this failure
292  *                          has occured.
293  *  \param      The debug string.
294  *  \param      param0 The first parameter which needs to be logged.
295  *  \param      param1 The second parameter which needs to be logged.
296  *  \param      param2 The third parameter which needs to be logged.
297  *  \param      param3 The fourth parameter which needs to be logged.
298  *  \param      param4 The fifth parameter which needs to be logged.
299  */
300 void
301 GT_trace5(uint32_t      maskType,
302           GT_TraceClass classType,
303           const char   *fileName,
304           int32_t       lineNum,
305           const char   *infoString,
306           uintptr_t     param0,
307           uintptr_t     param1,
308           uintptr_t     param2,
309           uintptr_t     param3,
310           uintptr_t     param4)
312     /* Check if trace is enabled. */
313     if (((maskType & GT_TRACESTATE_MASK) >> GT_TRACESTATE_SHIFT)
314         == GT_TraceState_Enable)
315     {
316         /* Check if specified class is enabled. */
317         if ((maskType & GT_TRACECLASS_MASK) >= classType)
318         {
319             /* Print if specified class is greater than or equal to class
320              * for this specific print.
321              */
322             if (!((classType == GT_INFO) || (classType == GT_INFO1)))
323             {
324                 Fvid2_printf("%s @ Line %d: ", fileName, lineNum);
325             }
326             Fvid2_printf(
327                 (const char *) infoString,
328                 param0, param1, param2, param3, param4);
329         }
330     }
333 /**
334  *  \brief      Function to log the trace with six parameters.
335  *  \param      mask type of traces
336  *  \param      classType One of three classes where this trace
337  *              need to be enabed.
338  *  \param      fileName    Where the condition has occured.
339  *  \param      lineNum     Line number of the current file where this failure
340  *                          has occured.
341  *  \param      The debug string.
342  *  \param      param0 The first parameter which needs to be logged.
343  *  \param      param1 The second parameter which needs to be logged.
344  *  \param      param2 The third parameter which needs to be logged.
345  *  \param      param3 The fourth parameter which needs to be logged.
346  *  \param      param4 The fifth parameter which needs to be logged.
347  *  \param      param5 The sixth parameter which needs to be logged.
348  */
349 void
350 GT_trace6(uint32_t      maskType,
351           GT_TraceClass classType,
352           const char   *fileName,
353           int32_t       lineNum,
354           const char   *infoString,
355           uintptr_t     param0,
356           uintptr_t     param1,
357           uintptr_t     param2,
358           uintptr_t     param3,
359           uintptr_t     param4,
360           uintptr_t     param5)
362     /* Check if trace is enabled. */
363     if (((maskType & GT_TRACESTATE_MASK) >> GT_TRACESTATE_SHIFT)
364         == GT_TraceState_Enable)
365     {
366         /* Check if specified class is enabled. */
367         if ((maskType & GT_TRACECLASS_MASK) >= classType)
368         {
369             /* Print if specified class is greater than or equal to class
370              * for this specific print.
371              */
372             if (!((classType == GT_INFO) || (classType == GT_INFO1)))
373             {
374                 Fvid2_printf("%s @ Line %d: ", fileName, lineNum);
375             }
376             Fvid2_printf(
377                 (const char *) infoString,
378                 param0, param1, param2, param3, param4, param5);
379         }
380     }
383 /**
384  *  \brief      Function to log the trace with seven parameters.
385  *  \param      mask type of traces
386  *  \param      classType One of three classes where this trace
387  *              need to be enabed.
388  *  \param      fileName    Where the condition has occured.
389  *  \param      lineNum     Line number of the current file where this failure
390  *                          has occured.
391  *  \param      The debug string.
392  *  \param      param0 The first parameter which needs to be logged.
393  *  \param      param1 The second parameter which needs to be logged.
394  *  \param      param2 The third parameter which needs to be logged.
395  *  \param      param3 The fourth parameter which needs to be logged.
396  *  \param      param4 The fifth parameter which needs to be logged.
397  *  \param      param5 The sixth parameter which needs to be logged.
398  *  \param      param6 The sixth parameter which needs to be logged.
399  */
400 void
401 GT_trace7(uint32_t      maskType,
402           GT_TraceClass classType,
403           const char   *fileName,
404           int32_t       lineNum,
405           const char   *infoString,
406           uintptr_t     param0,
407           uintptr_t     param1,
408           uintptr_t     param2,
409           uintptr_t     param3,
410           uintptr_t     param4,
411           uintptr_t     param5,
412           uintptr_t     param6)
414     /* Check if trace is enabled. */
415     if (((maskType & GT_TRACESTATE_MASK) >> GT_TRACESTATE_SHIFT)
416         == GT_TraceState_Enable)
417     {
418         /* Check if specified class is enabled. */
419         if ((maskType & GT_TRACECLASS_MASK) >= classType)
420         {
421             /* Print if specified class is greater than or equal to class
422              * for this specific print.
423              */
424             if (!((classType == GT_INFO) || (classType == GT_INFO1)))
425             {
426                 Fvid2_printf("%s @ Line %d: ", fileName, lineNum);
427             }
428             Fvid2_printf(
429                 (const char *) infoString,
430                 param0, param1, param2, param3, param4, param5, param6);
431         }
432     }
434 #endif
436 #if defined (FVID2_CFG_ASSERT_ENABLE)
437 void GT_assertLocal(uint32_t    enableMask,
438                     uint32_t    condition,
439                     const char *str,
440                     const char *fileName,
441                     int32_t     lineNum)
443     volatile uint32_t loop = 1U;
444     if (condition == 0U)
445     {
446         GT_3trace(
447             Fvid2Trace, GT_ERR,
448             " Assertion @ Line: %d in %s: %s : failed !!!\n",
449             lineNum, fileName, str);
450         while (loop == 1U)
451         {
452             ;
453         }
454     }
456     return;
458 #endif  /* if defined(FVID2_CFG_ASSERT_ENABLE) */