xref: /freebsd/sys/dev/pms/RefTisa/sallsdk/spc/mpidebug.c (revision 685dc743dc3b5645e34836464128e1c0558b404b)
1*4e1bc9a0SAchim Leubner /*******************************************************************************
2*4e1bc9a0SAchim Leubner *Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved.
3*4e1bc9a0SAchim Leubner *
4*4e1bc9a0SAchim Leubner *Redistribution and use in source and binary forms, with or without modification, are permitted provided
5*4e1bc9a0SAchim Leubner *that the following conditions are met:
6*4e1bc9a0SAchim Leubner *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
7*4e1bc9a0SAchim Leubner *following disclaimer.
8*4e1bc9a0SAchim Leubner *2. Redistributions in binary form must reproduce the above copyright notice,
9*4e1bc9a0SAchim Leubner *this list of conditions and the following disclaimer in the documentation and/or other materials provided
10*4e1bc9a0SAchim Leubner *with the distribution.
11*4e1bc9a0SAchim Leubner *
12*4e1bc9a0SAchim Leubner *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
13*4e1bc9a0SAchim Leubner *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14*4e1bc9a0SAchim Leubner *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
15*4e1bc9a0SAchim Leubner *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
16*4e1bc9a0SAchim Leubner *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
17*4e1bc9a0SAchim Leubner *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18*4e1bc9a0SAchim Leubner *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19*4e1bc9a0SAchim Leubner *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
20*4e1bc9a0SAchim Leubner 
21*4e1bc9a0SAchim Leubner ********************************************************************************/
22*4e1bc9a0SAchim Leubner 
23*4e1bc9a0SAchim Leubner /*******************************************************************************/
24*4e1bc9a0SAchim Leubner /*! \file mpidebug.c
25*4e1bc9a0SAchim Leubner  *  \brief The file is a MPI Libraries to implement the MPI debug and trace functions
26*4e1bc9a0SAchim Leubner  *
27*4e1bc9a0SAchim Leubner  * The file implements the MPI functions.
28*4e1bc9a0SAchim Leubner  *
29*4e1bc9a0SAchim Leubner  */
30*4e1bc9a0SAchim Leubner /*******************************************************************************/
31*4e1bc9a0SAchim Leubner #include <sys/cdefs.h>
32*4e1bc9a0SAchim Leubner #include <dev/pms/config.h>
33*4e1bc9a0SAchim Leubner 
34*4e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/sallsdk/spc/saglobal.h>
35*4e1bc9a0SAchim Leubner #ifdef MPI_DEBUG_TRACE_ENABLE /* enable with CCBUILD_MPI_TRACE*/
36*4e1bc9a0SAchim Leubner 
37*4e1bc9a0SAchim Leubner /*******************************************************************************/
38*4e1bc9a0SAchim Leubner 
39*4e1bc9a0SAchim Leubner #ifdef OSLAYER_USE_HI_RES_TIMER
40*4e1bc9a0SAchim Leubner unsigned __int64
41*4e1bc9a0SAchim Leubner GetHiResTimeStamp(void);
42*4e1bc9a0SAchim Leubner #endif /* OSLAYER_USE_HI_RES_TIMER */
43*4e1bc9a0SAchim Leubner /*******************************************************************************/
44*4e1bc9a0SAchim Leubner /*******************************************************************************/
45*4e1bc9a0SAchim Leubner /* FUNCTIONS                                                                   */
46*4e1bc9a0SAchim Leubner /*******************************************************************************/
47*4e1bc9a0SAchim Leubner mpiDebugObTrace_t obTraceData;
48*4e1bc9a0SAchim Leubner mpiDebugIbTrace_t ibTraceData;
49*4e1bc9a0SAchim Leubner 
mpiTraceInit(void)50*4e1bc9a0SAchim Leubner void mpiTraceInit(void)
51*4e1bc9a0SAchim Leubner {
52*4e1bc9a0SAchim Leubner 
53*4e1bc9a0SAchim Leubner   SA_DBG1(("mpiTraceInit:obTraceData @ %p\n",&obTraceData ));
54*4e1bc9a0SAchim Leubner   SA_DBG1(("mpiTraceInit:ibTraceData @ %p\n",&ibTraceData ));
55*4e1bc9a0SAchim Leubner   SA_DBG1(("mpiTraceInit: num enties %d Ib Iomb size %d Ob Iomb size %d\n",
56*4e1bc9a0SAchim Leubner                MPI_DEBUG_TRACE_BUFFER_MAX,
57*4e1bc9a0SAchim Leubner                MPI_DEBUG_TRACE_IB_IOMB_SIZE,
58*4e1bc9a0SAchim Leubner                MPI_DEBUG_TRACE_OB_IOMB_SIZE ));
59*4e1bc9a0SAchim Leubner 
60*4e1bc9a0SAchim Leubner   si_memset(&obTraceData, 0, sizeof(obTraceData));
61*4e1bc9a0SAchim Leubner   si_memset(&ibTraceData, 0, sizeof(ibTraceData));
62*4e1bc9a0SAchim Leubner }
63*4e1bc9a0SAchim Leubner 
mpiTraceAdd(bit32 q,bit32 pici,bit32 ib,void * iomb,bit32 numBytes)64*4e1bc9a0SAchim Leubner void mpiTraceAdd( bit32 q,bit32 pici,bit32 ib, void *iomb, bit32 numBytes)
65*4e1bc9a0SAchim Leubner {
66*4e1bc9a0SAchim Leubner   bit32                  curIdx;
67*4e1bc9a0SAchim Leubner   mpiDebugIbTraceEntry_t *curIbTrace;
68*4e1bc9a0SAchim Leubner   mpiDebugObTraceEntry_t *curObTrace;
69*4e1bc9a0SAchim Leubner 
70*4e1bc9a0SAchim Leubner   mpiDebugIbTrace_t * ibTrace = &ibTraceData;
71*4e1bc9a0SAchim Leubner   mpiDebugObTrace_t * obTrace = &obTraceData;
72*4e1bc9a0SAchim Leubner 
73*4e1bc9a0SAchim Leubner   if (ib)
74*4e1bc9a0SAchim Leubner   {
75*4e1bc9a0SAchim Leubner     if(ibTrace->Idx >= MPI_DEBUG_TRACE_BUFFER_MAX)
76*4e1bc9a0SAchim Leubner     {
77*4e1bc9a0SAchim Leubner       ibTrace->Idx = 0;
78*4e1bc9a0SAchim Leubner     }
79*4e1bc9a0SAchim Leubner     curIdx = ibTrace->Idx;
80*4e1bc9a0SAchim Leubner 
81*4e1bc9a0SAchim Leubner     curIbTrace = &ibTrace->Data[curIdx];
82*4e1bc9a0SAchim Leubner     curIbTrace->pEntry =  iomb;
83*4e1bc9a0SAchim Leubner     curIbTrace->QNum = q;
84*4e1bc9a0SAchim Leubner     curIbTrace->pici = pici;
85*4e1bc9a0SAchim Leubner #ifdef OSLAYER_USE_HI_RES_TIMER
86*4e1bc9a0SAchim Leubner #ifdef SA_64BIT_TIMESTAMP
87*4e1bc9a0SAchim Leubner   curIbTrace->Time = ossaTimeStamp64(agNULL);
88*4e1bc9a0SAchim Leubner #else /* SA_64BIT_TIMESTAMP */
89*4e1bc9a0SAchim Leubner   curIbTrace->Time = ossaTimeStamp(agNULL);
90*4e1bc9a0SAchim Leubner #endif /* SA_64BIT_TIMESTAMP */
91*4e1bc9a0SAchim Leubner #else /* OSLAYER_USE_HI_RES_TIMER */
92*4e1bc9a0SAchim Leubner   curIbTrace->Time = 0;
93*4e1bc9a0SAchim Leubner #endif
94*4e1bc9a0SAchim Leubner     si_memcpy(curIbTrace->Iomb, iomb, MIN(numBytes, MPI_DEBUG_TRACE_IB_IOMB_SIZE));
95*4e1bc9a0SAchim Leubner     ibTrace->Idx++;
96*4e1bc9a0SAchim Leubner   }
97*4e1bc9a0SAchim Leubner   else
98*4e1bc9a0SAchim Leubner   {
99*4e1bc9a0SAchim Leubner     if(obTrace->Idx >= MPI_DEBUG_TRACE_BUFFER_MAX )
100*4e1bc9a0SAchim Leubner     {
101*4e1bc9a0SAchim Leubner       obTrace->Idx = 0;
102*4e1bc9a0SAchim Leubner     }
103*4e1bc9a0SAchim Leubner     curIdx = obTrace->Idx;
104*4e1bc9a0SAchim Leubner     curObTrace = &obTrace->Data[curIdx];
105*4e1bc9a0SAchim Leubner     curObTrace->pEntry =  iomb;
106*4e1bc9a0SAchim Leubner     curObTrace->QNum = q;
107*4e1bc9a0SAchim Leubner     curObTrace->pici = pici;
108*4e1bc9a0SAchim Leubner #ifdef OSLAYER_USE_HI_RES_TIMER
109*4e1bc9a0SAchim Leubner #ifdef SA_64BIT_TIMESTAMP
110*4e1bc9a0SAchim Leubner     curObTrace->Time = ossaTimeStamp64(agNULL);
111*4e1bc9a0SAchim Leubner #else /* SA_64BIT_TIMESTAMP */
112*4e1bc9a0SAchim Leubner     curObTrace->Time = ossaTimeStamp(agNULL);
113*4e1bc9a0SAchim Leubner #endif /* SA_64BIT_TIMESTAMP */
114*4e1bc9a0SAchim Leubner #else /* OSLAYER_USE_HI_RES_TIMER */
115*4e1bc9a0SAchim Leubner     curObTrace->Time = 0;
116*4e1bc9a0SAchim Leubner #endif
117*4e1bc9a0SAchim Leubner     si_memcpy(curObTrace->Iomb, iomb, MIN(numBytes, MPI_DEBUG_TRACE_OB_IOMB_SIZE));
118*4e1bc9a0SAchim Leubner     obTrace->Idx++;
119*4e1bc9a0SAchim Leubner   }
120*4e1bc9a0SAchim Leubner 
121*4e1bc9a0SAchim Leubner 
122*4e1bc9a0SAchim Leubner   return;
123*4e1bc9a0SAchim Leubner }
124*4e1bc9a0SAchim Leubner 
125*4e1bc9a0SAchim Leubner #endif /* MPI_DEBUG_TRACE_ENABLE */
126*4e1bc9a0SAchim Leubner 
127*4e1bc9a0SAchim Leubner 
128*4e1bc9a0SAchim Leubner 
129*4e1bc9a0SAchim Leubner #ifdef SA_ENABLE_TRACE_FUNCTIONS
130*4e1bc9a0SAchim Leubner 
131*4e1bc9a0SAchim Leubner /**
132*4e1bc9a0SAchim Leubner  * fiEnableTracing
133*4e1bc9a0SAchim Leubner  *
134*4e1bc9a0SAchim Leubner  *    This fucntion is called to initialize tracing of FC layer.
135*4e1bc9a0SAchim Leubner  *
136*4e1bc9a0SAchim Leubner  */
siEnableTracing(agsaRoot_t * agRoot)137*4e1bc9a0SAchim Leubner void siEnableTracing (agsaRoot_t  *agRoot)
138*4e1bc9a0SAchim Leubner {
139*4e1bc9a0SAchim Leubner 
140*4e1bc9a0SAchim Leubner   agsaLLRoot_t      *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
141*4e1bc9a0SAchim Leubner   agsaSwConfig_t    *swC  = &saRoot->swConfig;
142*4e1bc9a0SAchim Leubner   bit32 count;
143*4e1bc9a0SAchim Leubner 
144*4e1bc9a0SAchim Leubner   OS_ASSERT(saRoot != NULL, "");
145*4e1bc9a0SAchim Leubner 
146*4e1bc9a0SAchim Leubner   if( saRoot->TraceBlockReInit != 0)
147*4e1bc9a0SAchim Leubner   {
148*4e1bc9a0SAchim Leubner     return;
149*4e1bc9a0SAchim Leubner   }
150*4e1bc9a0SAchim Leubner 
151*4e1bc9a0SAchim Leubner 
152*4e1bc9a0SAchim Leubner   /* Initialize tracing first */
153*4e1bc9a0SAchim Leubner 
154*4e1bc9a0SAchim Leubner   for (count = 0; count < 10; count++)
155*4e1bc9a0SAchim Leubner   {
156*4e1bc9a0SAchim Leubner       saRoot->traceBuffLookup[count] = (bit8)('0' + count);
157*4e1bc9a0SAchim Leubner   }
158*4e1bc9a0SAchim Leubner   for (count = 0; count < 6; count++)
159*4e1bc9a0SAchim Leubner   {
160*4e1bc9a0SAchim Leubner       saRoot->traceBuffLookup[(bitptr)count + 10] = (bit8)('a' + count);
161*4e1bc9a0SAchim Leubner   }
162*4e1bc9a0SAchim Leubner 
163*4e1bc9a0SAchim Leubner 
164*4e1bc9a0SAchim Leubner   saRoot->TraceDestination = swC->TraceDestination;
165*4e1bc9a0SAchim Leubner   saRoot->TraceMask = swC->TraceMask;
166*4e1bc9a0SAchim Leubner   saRoot->CurrentTraceIndexWrapCount = 0;
167*4e1bc9a0SAchim Leubner   saRoot->CurrentTraceIndex = 0;
168*4e1bc9a0SAchim Leubner   saRoot->TraceBlockReInit = 1;
169*4e1bc9a0SAchim Leubner 
170*4e1bc9a0SAchim Leubner 
171*4e1bc9a0SAchim Leubner   SA_DBG1(("siEnableTracing: \n" ));
172*4e1bc9a0SAchim Leubner 
173*4e1bc9a0SAchim Leubner   SA_DBG1 (("      length       = %08x\n", saRoot->TraceBufferLength ));
174*4e1bc9a0SAchim Leubner   SA_DBG1 (("      virt         = %p\n",   saRoot->TraceBuffer ));
175*4e1bc9a0SAchim Leubner   SA_DBG1 (("    traceMask        = %08x @ %p\n", saRoot->TraceMask, &saRoot->TraceMask));
176*4e1bc9a0SAchim Leubner   SA_DBG1 (("    last trace entry @ %p\n", &saRoot->CurrentTraceIndex));
177*4e1bc9a0SAchim Leubner   SA_DBG1 (("    TraceWrapAround  = %x\n", saRoot->TraceMask & hpDBG_TraceBufferWrapAround ? 1 : 0));
178*4e1bc9a0SAchim Leubner   SA_DBG1 (("    da %p l %x\n",saRoot->TraceBuffer ,saRoot->TraceBufferLength));
179*4e1bc9a0SAchim Leubner 
180*4e1bc9a0SAchim Leubner #ifdef SA_PRINTOUT_IN_WINDBG
181*4e1bc9a0SAchim Leubner #ifndef DBG
182*4e1bc9a0SAchim Leubner   DbgPrint("siTraceEnable: \n" );
183*4e1bc9a0SAchim Leubner 
184*4e1bc9a0SAchim Leubner   DbgPrint("      length       = %08x\n", saRoot->TraceBufferLength );
185*4e1bc9a0SAchim Leubner   DbgPrint("      virt         = %p\n",   saRoot->TraceBuffer );
186*4e1bc9a0SAchim Leubner   DbgPrint("    last trace entry @ %p\n", &saRoot->CurrentTraceIndex);
187*4e1bc9a0SAchim Leubner   DbgPrint("    traceMask      = %08x @ %p\n", saRoot->TraceMask, &saRoot->TraceMask);
188*4e1bc9a0SAchim Leubner   DbgPrint("    da %p l %x\n",saRoot->TraceBuffer ,saRoot->TraceBufferLength);
189*4e1bc9a0SAchim Leubner #endif /* DBG  */
190*4e1bc9a0SAchim Leubner #endif /* SA_PRINTOUT_IN_WINDBG  */
191*4e1bc9a0SAchim Leubner   /*
192*4e1bc9a0SAchim Leubner   ** Init trace buffer with all spaces
193*4e1bc9a0SAchim Leubner   */
194*4e1bc9a0SAchim Leubner   for (count = 0; count < saRoot->TraceBufferLength; count++)
195*4e1bc9a0SAchim Leubner   {
196*4e1bc9a0SAchim Leubner       saRoot->TraceBuffer[count] = (bit8)' ';
197*4e1bc9a0SAchim Leubner   }
198*4e1bc9a0SAchim Leubner 
199*4e1bc9a0SAchim Leubner }
200*4e1bc9a0SAchim Leubner 
201*4e1bc9a0SAchim Leubner 
202*4e1bc9a0SAchim Leubner 
203*4e1bc9a0SAchim Leubner /**
204*4e1bc9a0SAchim Leubner  * IF_DO_TRACE
205*4e1bc9a0SAchim Leubner  *
206*4e1bc9a0SAchim Leubner  * PURPOSE:     convenience macro for the "to output or not to output" logic
207*4e1bc9a0SAchim Leubner  *
208*4e1bc9a0SAchim Leubner  * PARAMETERS:
209*4e1bc9a0SAchim Leubner  *
210*4e1bc9a0SAchim Leubner  * CALLS:
211*4e1bc9a0SAchim Leubner  *
212*4e1bc9a0SAchim Leubner  * SIDE EFFECTS & CAVEATS:
213*4e1bc9a0SAchim Leubner  *
214*4e1bc9a0SAchim Leubner  * ALGORITHM:
215*4e1bc9a0SAchim Leubner  *
216*4e1bc9a0SAchim Leubner  *
217*4e1bc9a0SAchim Leubner  *
218*4e1bc9a0SAchim Leubner  *     MODIFICATION HISTORY     ***********************
219*4e1bc9a0SAchim Leubner  *
220*4e1bc9a0SAchim Leubner  * ENGINEER NAME      DATE     DESCRIPTION
221*4e1bc9a0SAchim Leubner  * -------------    --------   -----------
222*4e1bc9a0SAchim Leubner  */
223*4e1bc9a0SAchim Leubner 
224*4e1bc9a0SAchim Leubner #define IF_DO_TRACE                                     \
225*4e1bc9a0SAchim Leubner   if ( (saRoot != NULL) &&                              \
226*4e1bc9a0SAchim Leubner        (saRoot->TraceDestination & siTraceDestMask) &&  \
227*4e1bc9a0SAchim Leubner        (mask & saRoot->TraceMask) )                     \
228*4e1bc9a0SAchim Leubner 
229*4e1bc9a0SAchim Leubner 
230*4e1bc9a0SAchim Leubner /* #define TRACE_ENTER_LOCK  ossaSingleThreadedEnter(agRoot, LL_TRACE_LOCK); */
231*4e1bc9a0SAchim Leubner /* #define TRACE_LEAVE_LOCK  ossaSingleThreadedLeave(agRoot, LL_TRACE_LOCK); */
232*4e1bc9a0SAchim Leubner #define TRACE_ENTER_LOCK
233*4e1bc9a0SAchim Leubner #define TRACE_LEAVE_LOCK
234*4e1bc9a0SAchim Leubner /**
235*4e1bc9a0SAchim Leubner  * BUFFER_WRAP_CHECK
236*4e1bc9a0SAchim Leubner  *
237*4e1bc9a0SAchim Leubner  * PURPOSE: Checks if the tracing buffer tracing index is too high.  If it is,
238*4e1bc9a0SAchim Leubner  *          the buffer index gets reset to 0 or tracing stops..
239*4e1bc9a0SAchim Leubner  */
240*4e1bc9a0SAchim Leubner #define BUFFER_WRAP_CHECK                                           \
241*4e1bc9a0SAchim Leubner     if( (saRoot->CurrentTraceIndex + TMP_TRACE_BUFF_SIZE)               \
242*4e1bc9a0SAchim Leubner                            >= saRoot->TraceBufferLength )               \
243*4e1bc9a0SAchim Leubner     {                                                                   \
244*4e1bc9a0SAchim Leubner         /* Trace wrap-Around is enabled.  */                            \
245*4e1bc9a0SAchim Leubner         if( saRoot->TraceMask & hpDBG_TraceBufferWrapAround )           \
246*4e1bc9a0SAchim Leubner         {                                                               \
247*4e1bc9a0SAchim Leubner             /* Fill the end of the buffer with spaces */                \
248*4e1bc9a0SAchim Leubner             for( i = saRoot->CurrentTraceIndex;                         \
249*4e1bc9a0SAchim Leubner                      i < saRoot->TraceBufferLength; i++ )               \
250*4e1bc9a0SAchim Leubner             {                                                           \
251*4e1bc9a0SAchim Leubner                 saRoot->TraceBuffer[i] = (bit8)' ';                     \
252*4e1bc9a0SAchim Leubner             }                                                           \
253*4e1bc9a0SAchim Leubner             /* Wrap the current trace index back to 0.. */              \
254*4e1bc9a0SAchim Leubner             saRoot->CurrentTraceIndex = 0;                              \
255*4e1bc9a0SAchim Leubner             saRoot->CurrentTraceIndexWrapCount++;                       \
256*4e1bc9a0SAchim Leubner         }                                                               \
257*4e1bc9a0SAchim Leubner         else                                                            \
258*4e1bc9a0SAchim Leubner         {                                                               \
259*4e1bc9a0SAchim Leubner             /* Don't do anything -- trace buffer is filled up */        \
260*4e1bc9a0SAchim Leubner             return;                                                     \
261*4e1bc9a0SAchim Leubner         }                                                               \
262*4e1bc9a0SAchim Leubner     }
263*4e1bc9a0SAchim Leubner 
264*4e1bc9a0SAchim Leubner /**
265*4e1bc9a0SAchim Leubner  * LOCAL_OS_LOG_DEBUG_STRING
266*4e1bc9a0SAchim Leubner  *
267*4e1bc9a0SAchim Leubner  * PURPOSE:     protects against a change in the api for this function
268*4e1bc9a0SAchim Leubner  *
269*4e1bc9a0SAchim Leubner  * PARAMETERS:
270*4e1bc9a0SAchim Leubner  *
271*4e1bc9a0SAchim Leubner  * CALLS:
272*4e1bc9a0SAchim Leubner  *
273*4e1bc9a0SAchim Leubner  * SIDE EFFECTS & CAVEATS:
274*4e1bc9a0SAchim Leubner  *
275*4e1bc9a0SAchim Leubner  * ALGORITHM:
276*4e1bc9a0SAchim Leubner  *
277*4e1bc9a0SAchim Leubner  *
278*4e1bc9a0SAchim Leubner  *
279*4e1bc9a0SAchim Leubner  *     MODIFICATION HISTORY     ***********************
280*4e1bc9a0SAchim Leubner  *
281*4e1bc9a0SAchim Leubner  * ENGINEER NAME      DATE     DESCRIPTION
282*4e1bc9a0SAchim Leubner  * -------------    --------   -----------
283*4e1bc9a0SAchim Leubner  * Laurent Chavey   03/09/00   - changed cast of 3rd parameter to (char *)
284*4e1bc9a0SAchim Leubner  */
285*4e1bc9a0SAchim Leubner     #define LOCAL_OS_LOG_DEBUG_STRING(H,S)  \
286*4e1bc9a0SAchim Leubner             osLogDebugString(H,hpDBG_ALWAYS,(char *)(S))
287*4e1bc9a0SAchim Leubner 
288*4e1bc9a0SAchim Leubner /******************************************************************************
289*4e1bc9a0SAchim Leubner *******************************************************************************
290*4e1bc9a0SAchim Leubner **
291*4e1bc9a0SAchim Leubner ** copyHex
292*4e1bc9a0SAchim Leubner **
293*4e1bc9a0SAchim Leubner ** PURPOSE:  Copies a hex version of a bit32 into a bit8 buffer
294*4e1bc9a0SAchim Leubner **
295*4e1bc9a0SAchim Leubner *******************************************************************************
296*4e1bc9a0SAchim Leubner ******************************************************************************/
297*4e1bc9a0SAchim Leubner #define copyHex(bit32Val, bitSize)                                     \
298*4e1bc9a0SAchim Leubner {                                                                      \
299*4e1bc9a0SAchim Leubner   bit32 nibbleLen = bitSize / 4;                                       \
300*4e1bc9a0SAchim Leubner   bit32 scratch = 0;                                                   \
301*4e1bc9a0SAchim Leubner   for( i = 0; i < nibbleLen; i++ )                                     \
302*4e1bc9a0SAchim Leubner   {                                                                    \
303*4e1bc9a0SAchim Leubner     bPtr[pos++] =                                                      \
304*4e1bc9a0SAchim Leubner         saRoot->traceBuffLookup[0xf & (bit32Val >> ((bitSize - 4) - (i << 2)))];  \
305*4e1bc9a0SAchim Leubner     i++;                                                               \
306*4e1bc9a0SAchim Leubner     bPtr[pos++] =                                                      \
307*4e1bc9a0SAchim Leubner     saRoot->traceBuffLookup[0xf & (bit32Val >> ((bitSize - 4) - (i << 2)))]; \
308*4e1bc9a0SAchim Leubner     /* Skip leading 0-s to save memory buffer space */                 \
309*4e1bc9a0SAchim Leubner     if( !scratch                                                       \
310*4e1bc9a0SAchim Leubner           && (bPtr[pos-2] == '0')                                      \
311*4e1bc9a0SAchim Leubner           && (bPtr[pos-1] == '0') )                                    \
312*4e1bc9a0SAchim Leubner     {                                                                  \
313*4e1bc9a0SAchim Leubner       pos -= 2;                                                        \
314*4e1bc9a0SAchim Leubner       continue;                                                        \
315*4e1bc9a0SAchim Leubner     }                                                                  \
316*4e1bc9a0SAchim Leubner     else                                                               \
317*4e1bc9a0SAchim Leubner     {                                                                  \
318*4e1bc9a0SAchim Leubner       scratch = 1;                                                     \
319*4e1bc9a0SAchim Leubner     }                                                                  \
320*4e1bc9a0SAchim Leubner   }                                                                    \
321*4e1bc9a0SAchim Leubner   if( scratch == 0 )                                                   \
322*4e1bc9a0SAchim Leubner   {                                                                    \
323*4e1bc9a0SAchim Leubner     /* The value is 0 and nothing got put in the buffer.  Do       */  \
324*4e1bc9a0SAchim Leubner     /* print at least two zeros.                                   */  \
325*4e1bc9a0SAchim Leubner     bPtr[pos++] = '0';                                                 \
326*4e1bc9a0SAchim Leubner     bPtr[pos++] = '0';                                                 \
327*4e1bc9a0SAchim Leubner   }                                                                    \
328*4e1bc9a0SAchim Leubner }
329*4e1bc9a0SAchim Leubner 
330*4e1bc9a0SAchim Leubner 
331*4e1bc9a0SAchim Leubner /**
332*4e1bc9a0SAchim Leubner  * TRACE_OTHER_DEST
333*4e1bc9a0SAchim Leubner  *
334*4e1bc9a0SAchim Leubner  * PURPOSE:  Check if any other destinations are enabled.  If yes, use them
335*4e1bc9a0SAchim Leubner  *           for debug log.
336*4e1bc9a0SAchim Leubner  */
337*4e1bc9a0SAchim Leubner #define TRACE_OTHER_DEST                                                \
338*4e1bc9a0SAchim Leubner     {                                                                   \
339*4e1bc9a0SAchim Leubner     bit32 bitptrscratch;                                                \
340*4e1bc9a0SAchim Leubner     if( saRoot->TraceDestination & smTraceDestDebugger )                \
341*4e1bc9a0SAchim Leubner     {                                                                   \
342*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)'\n';                                       \
343*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)0;                                          \
344*4e1bc9a0SAchim Leubner         LOCAL_OS_LOG_DEBUG_STRING(hpRoot, (char *)bPtr);                \
345*4e1bc9a0SAchim Leubner     }                                                                   \
346*4e1bc9a0SAchim Leubner     if( saRoot->TraceDestination & smTraceDestRegister )                \
347*4e1bc9a0SAchim Leubner     {                                                                   \
348*4e1bc9a0SAchim Leubner         while( (pos & 0x3) != 0x3 )                                     \
349*4e1bc9a0SAchim Leubner         {                                                               \
350*4e1bc9a0SAchim Leubner             bPtr[pos++] = (bit8)' ';                                    \
351*4e1bc9a0SAchim Leubner         }                                                               \
352*4e1bc9a0SAchim Leubner         bPtr[pos] = ' ';                                                \
353*4e1bc9a0SAchim Leubner         for( i = 0; i < pos; i = i + 4 )                                \
354*4e1bc9a0SAchim Leubner         {                                                               \
355*4e1bc9a0SAchim Leubner             bitptrscratch =  bPtr[i+0];                                 \
356*4e1bc9a0SAchim Leubner             bitptrscratch <<= 8;                                        \
357*4e1bc9a0SAchim Leubner             bitptrscratch |= bPtr[i+1];                                 \
358*4e1bc9a0SAchim Leubner             bitptrscratch <<= 8;                                        \
359*4e1bc9a0SAchim Leubner             bitptrscratch |= bPtr[i+2];                                 \
360*4e1bc9a0SAchim Leubner             bitptrscratch <<= 8;                                        \
361*4e1bc9a0SAchim Leubner             bitptrscratch |= bPtr[i+3];                                 \
362*4e1bc9a0SAchim Leubner             osChipRegWrite(hpRoot,                                      \
363*4e1bc9a0SAchim Leubner                  FC_rFMReceivedALPA, (bit32)bitptrscratch );            \
364*4e1bc9a0SAchim Leubner         }                                                               \
365*4e1bc9a0SAchim Leubner     }                                                                   \
366*4e1bc9a0SAchim Leubner     }
367*4e1bc9a0SAchim Leubner 
368*4e1bc9a0SAchim Leubner 
369*4e1bc9a0SAchim Leubner 
370*4e1bc9a0SAchim Leubner /**
371*4e1bc9a0SAchim Leubner  * siGetCurrentTraceIndex()
372*4e1bc9a0SAchim Leubner  *
373*4e1bc9a0SAchim Leubner  * PURPOSE:     Returns the current tracing index ( if tracing buffer is
374*4e1bc9a0SAchim Leubner  *              used ).
375*4e1bc9a0SAchim Leubner  *
376*4e1bc9a0SAchim Leubner  * PARAMETERS:
377*4e1bc9a0SAchim Leubner  *
378*4e1bc9a0SAchim Leubner  * CALLS:
379*4e1bc9a0SAchim Leubner  *
380*4e1bc9a0SAchim Leubner  * SIDE EFFECTS & CAVEATS:
381*4e1bc9a0SAchim Leubner  *
382*4e1bc9a0SAchim Leubner  * ALGORITHM:
383*4e1bc9a0SAchim Leubner  *
384*4e1bc9a0SAchim Leubner  *
385*4e1bc9a0SAchim Leubner  *     MODIFICATION HISTORY     ***********************
386*4e1bc9a0SAchim Leubner  *
387*4e1bc9a0SAchim Leubner  * ENGINEER NAME      DATE     DESCRIPTION
388*4e1bc9a0SAchim Leubner  * -------------    --------   -----------
389*4e1bc9a0SAchim Leubner  * Tom Nalepa       02/27/03
390*4e1bc9a0SAchim Leubner  *
391*4e1bc9a0SAchim Leubner  * @param hpRoot
392*4e1bc9a0SAchim Leubner  *
393*4e1bc9a0SAchim Leubner  * @return
394*4e1bc9a0SAchim Leubner  */
siGetCurrentTraceIndex(agsaRoot_t * agRoot)395*4e1bc9a0SAchim Leubner GLOBAL bit32 siGetCurrentTraceIndex(agsaRoot_t  *agRoot)
396*4e1bc9a0SAchim Leubner {
397*4e1bc9a0SAchim Leubner     agsaLLRoot_t      *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
398*4e1bc9a0SAchim Leubner     return(saRoot->CurrentTraceIndex);
399*4e1bc9a0SAchim Leubner }
400*4e1bc9a0SAchim Leubner 
401*4e1bc9a0SAchim Leubner 
402*4e1bc9a0SAchim Leubner 
403*4e1bc9a0SAchim Leubner 
404*4e1bc9a0SAchim Leubner /**
405*4e1bc9a0SAchim Leubner  * siResetTraceBuffer
406*4e1bc9a0SAchim Leubner  *
407*4e1bc9a0SAchim Leubner  * PURPOSE:     Sets saRoot->CurrentTraceIndex to 0.
408*4e1bc9a0SAchim Leubner  *
409*4e1bc9a0SAchim Leubner  * @param hpRoot
410*4e1bc9a0SAchim Leubner  *
411*4e1bc9a0SAchim Leubner  * @return
412*4e1bc9a0SAchim Leubner  */
siResetTraceBuffer(agsaRoot_t * agRoot)413*4e1bc9a0SAchim Leubner GLOBAL void siResetTraceBuffer(agsaRoot_t  *agRoot)
414*4e1bc9a0SAchim Leubner {
415*4e1bc9a0SAchim Leubner     bit32 count;
416*4e1bc9a0SAchim Leubner     agsaLLRoot_t      *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
417*4e1bc9a0SAchim Leubner     saRoot->CurrentTraceIndex = 0;
418*4e1bc9a0SAchim Leubner 
419*4e1bc9a0SAchim Leubner     for ( count = 0; count < saRoot->TraceBufferLength; count++ )
420*4e1bc9a0SAchim Leubner     {
421*4e1bc9a0SAchim Leubner         saRoot->TraceBuffer[count] = (bit8)' ';
422*4e1bc9a0SAchim Leubner     }
423*4e1bc9a0SAchim Leubner }
424*4e1bc9a0SAchim Leubner 
425*4e1bc9a0SAchim Leubner 
426*4e1bc9a0SAchim Leubner /**
427*4e1bc9a0SAchim Leubner  * siTraceFuncEnter
428*4e1bc9a0SAchim Leubner  *
429*4e1bc9a0SAchim Leubner  * PURPOSE:     Format a function entry trace and post it to the appropriate
430*4e1bc9a0SAchim Leubner  *              destination.
431*4e1bc9a0SAchim Leubner  *
432*4e1bc9a0SAchim Leubner  * PARAMETERS:
433*4e1bc9a0SAchim Leubner  *
434*4e1bc9a0SAchim Leubner  * CALLS:
435*4e1bc9a0SAchim Leubner  *
436*4e1bc9a0SAchim Leubner  * SIDE EFFECTS & CAVEATS:
437*4e1bc9a0SAchim Leubner  *
438*4e1bc9a0SAchim Leubner  * ALGORITHM:
439*4e1bc9a0SAchim Leubner  *
440*4e1bc9a0SAchim Leubner  * siTraceFuncEnter  :    _[Xxxxx_
441*4e1bc9a0SAchim Leubner  *                 fileid---^  ^------funcid
442*4e1bc9a0SAchim Leubner  *
443*4e1bc9a0SAchim Leubner  *
444*4e1bc9a0SAchim Leubner  *     MODIFICATION HISTORY     ***********************
445*4e1bc9a0SAchim Leubner  *
446*4e1bc9a0SAchim Leubner  * ENGINEER NAME      DATE     DESCRIPTION
447*4e1bc9a0SAchim Leubner  * -------------    --------   -----------
448*4e1bc9a0SAchim Leubner  *
449*4e1bc9a0SAchim Leubner  * @param hpRoot
450*4e1bc9a0SAchim Leubner  * @param mask
451*4e1bc9a0SAchim Leubner  * @param fileid
452*4e1bc9a0SAchim Leubner  * @param funcid
453*4e1bc9a0SAchim Leubner  *
454*4e1bc9a0SAchim Leubner  * @return
455*4e1bc9a0SAchim Leubner  */
456*4e1bc9a0SAchim Leubner 
457*4e1bc9a0SAchim Leubner #define TMP_TRACE_BUFF_SIZE 32
458*4e1bc9a0SAchim Leubner 
459*4e1bc9a0SAchim Leubner 
siTraceFuncEnter(agsaRoot_t * agRoot,bit32 mask,bit32 fileid,char * funcid)460*4e1bc9a0SAchim Leubner GLOBAL void siTraceFuncEnter( agsaRoot_t  *agRoot,
461*4e1bc9a0SAchim Leubner                              bit32        mask,
462*4e1bc9a0SAchim Leubner                              bit32        fileid,
463*4e1bc9a0SAchim Leubner                              char       * funcid)
464*4e1bc9a0SAchim Leubner {
465*4e1bc9a0SAchim Leubner agsaLLRoot_t      *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
466*4e1bc9a0SAchim Leubner     bitptr         i;
467*4e1bc9a0SAchim Leubner     bit8           tmpB[TMP_TRACE_BUFF_SIZE];
468*4e1bc9a0SAchim Leubner     bit8          *bPtr;
469*4e1bc9a0SAchim Leubner     bit8           pos = 0;
470*4e1bc9a0SAchim Leubner 
471*4e1bc9a0SAchim Leubner     IF_DO_TRACE
472*4e1bc9a0SAchim Leubner     {
473*4e1bc9a0SAchim Leubner       TRACE_ENTER_LOCK
474*4e1bc9a0SAchim Leubner       if ( saRoot->TraceDestination & smTraceDestBuffer )
475*4e1bc9a0SAchim Leubner       {
476*4e1bc9a0SAchim Leubner         BUFFER_WRAP_CHECK
477*4e1bc9a0SAchim Leubner         bPtr = &saRoot->TraceBuffer[saRoot->CurrentTraceIndex];
478*4e1bc9a0SAchim Leubner       }
479*4e1bc9a0SAchim Leubner       else
480*4e1bc9a0SAchim Leubner       {
481*4e1bc9a0SAchim Leubner         bPtr = tmpB;
482*4e1bc9a0SAchim Leubner       }
483*4e1bc9a0SAchim Leubner       bPtr[pos++] = (bit8)'[';
484*4e1bc9a0SAchim Leubner 
485*4e1bc9a0SAchim Leubner #ifndef FC_DO_NOT_INCLUDE_FILE_NAME_TAGS_IN_ENTER_EXIT_TRACE
486*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)fileid;
487*4e1bc9a0SAchim Leubner #endif
488*4e1bc9a0SAchim Leubner 
489*4e1bc9a0SAchim Leubner         for ( i=0; i<4; i++ )
490*4e1bc9a0SAchim Leubner         {
491*4e1bc9a0SAchim Leubner             if ( funcid[i] == 0 )
492*4e1bc9a0SAchim Leubner             {
493*4e1bc9a0SAchim Leubner                 break;
494*4e1bc9a0SAchim Leubner             }
495*4e1bc9a0SAchim Leubner             bPtr[pos++] = (bit8)funcid[i];
496*4e1bc9a0SAchim Leubner         }
497*4e1bc9a0SAchim Leubner         bPtr[pos++] = ' ';
498*4e1bc9a0SAchim Leubner         if ( saRoot->traceLineFeedCnt > FC_TRACE_LINE_SIZE )
499*4e1bc9a0SAchim Leubner         {
500*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\r';
501*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\n';
502*4e1bc9a0SAchim Leubner             saRoot->traceLineFeedCnt = 0;
503*4e1bc9a0SAchim Leubner         }
504*4e1bc9a0SAchim Leubner         saRoot->CurrentTraceIndex += pos;
505*4e1bc9a0SAchim Leubner //        TRACE_OTHER_DEST
506*4e1bc9a0SAchim Leubner     TRACE_LEAVE_LOCK
507*4e1bc9a0SAchim Leubner 
508*4e1bc9a0SAchim Leubner     }
509*4e1bc9a0SAchim Leubner     return;
510*4e1bc9a0SAchim Leubner }
511*4e1bc9a0SAchim Leubner 
512*4e1bc9a0SAchim Leubner 
513*4e1bc9a0SAchim Leubner /**
514*4e1bc9a0SAchim Leubner  * siTraceFuncExit
515*4e1bc9a0SAchim Leubner  *
516*4e1bc9a0SAchim Leubner  * PURPOSE:     Format a function exit trace and post it to the appropriate
517*4e1bc9a0SAchim Leubner  *              destination.
518*4e1bc9a0SAchim Leubner  *
519*4e1bc9a0SAchim Leubner  * PARAMETERS:
520*4e1bc9a0SAchim Leubner  *
521*4e1bc9a0SAchim Leubner  * CALLS:
522*4e1bc9a0SAchim Leubner  *
523*4e1bc9a0SAchim Leubner  * SIDE EFFECTS & CAVEATS:
524*4e1bc9a0SAchim Leubner  *
525*4e1bc9a0SAchim Leubner  * ALGORITHM:
526*4e1bc9a0SAchim Leubner  *
527*4e1bc9a0SAchim Leubner  * siTraceFuncExit         _Xxxxx]_
528*4e1bc9a0SAchim Leubner  *                 fileid---^  ^------funcid
529*4e1bc9a0SAchim Leubner  *
530*4e1bc9a0SAchim Leubner  *
531*4e1bc9a0SAchim Leubner  *     MODIFICATION HISTORY     ***********************
532*4e1bc9a0SAchim Leubner  *
533*4e1bc9a0SAchim Leubner  * ENGINEER NAME      DATE     DESCRIPTION
534*4e1bc9a0SAchim Leubner  * -------------    --------   -----------
535*4e1bc9a0SAchim Leubner  *
536*4e1bc9a0SAchim Leubner  * @param hpRoot
537*4e1bc9a0SAchim Leubner  * @param mask
538*4e1bc9a0SAchim Leubner  * @param fileid
539*4e1bc9a0SAchim Leubner  * @param funcid
540*4e1bc9a0SAchim Leubner  * @param exitId
541*4e1bc9a0SAchim Leubner  *
542*4e1bc9a0SAchim Leubner  * @return
543*4e1bc9a0SAchim Leubner  */
siTraceFuncExit(agsaRoot_t * agRoot,bit32 mask,char fileid,char * funcid,char exitId)544*4e1bc9a0SAchim Leubner GLOBAL void siTraceFuncExit(   agsaRoot_t  *agRoot,  bit32   mask, char  fileid, char  * funcid, char  exitId )
545*4e1bc9a0SAchim Leubner {
546*4e1bc9a0SAchim Leubner     bitptr         i;
547*4e1bc9a0SAchim Leubner     bit8           tmpB[TMP_TRACE_BUFF_SIZE];
548*4e1bc9a0SAchim Leubner     bit8          *bPtr;
549*4e1bc9a0SAchim Leubner     bit8           pos = 0;
550*4e1bc9a0SAchim Leubner 
551*4e1bc9a0SAchim Leubner     agsaLLRoot_t      *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
552*4e1bc9a0SAchim Leubner 
553*4e1bc9a0SAchim Leubner     IF_DO_TRACE
554*4e1bc9a0SAchim Leubner     {
555*4e1bc9a0SAchim Leubner       TRACE_ENTER_LOCK
556*4e1bc9a0SAchim Leubner       if ( saRoot->TraceDestination & smTraceDestBuffer )
557*4e1bc9a0SAchim Leubner       {
558*4e1bc9a0SAchim Leubner         BUFFER_WRAP_CHECK
559*4e1bc9a0SAchim Leubner         bPtr = &saRoot->TraceBuffer[saRoot->CurrentTraceIndex];
560*4e1bc9a0SAchim Leubner       }
561*4e1bc9a0SAchim Leubner       else
562*4e1bc9a0SAchim Leubner       {
563*4e1bc9a0SAchim Leubner         bPtr = tmpB;
564*4e1bc9a0SAchim Leubner       }
565*4e1bc9a0SAchim Leubner 
566*4e1bc9a0SAchim Leubner #ifndef FC_DO_NOT_INCLUDE_FILE_NAME_TAGS_IN_ENTER_EXIT_TRACE
567*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)fileid;
568*4e1bc9a0SAchim Leubner #endif
569*4e1bc9a0SAchim Leubner 
570*4e1bc9a0SAchim Leubner         for ( i=0; i<4; i++ )
571*4e1bc9a0SAchim Leubner         {
572*4e1bc9a0SAchim Leubner             if ( funcid[i] == 0 )
573*4e1bc9a0SAchim Leubner             {
574*4e1bc9a0SAchim Leubner                 break;
575*4e1bc9a0SAchim Leubner             }
576*4e1bc9a0SAchim Leubner             bPtr[pos++] = (bit8)funcid[i];
577*4e1bc9a0SAchim Leubner         }
578*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)exitId;
579*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)']';
580*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)' ';
581*4e1bc9a0SAchim Leubner         if ( saRoot->traceLineFeedCnt > FC_TRACE_LINE_SIZE )
582*4e1bc9a0SAchim Leubner         {
583*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\r';
584*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\n';
585*4e1bc9a0SAchim Leubner             saRoot->traceLineFeedCnt = 0;
586*4e1bc9a0SAchim Leubner         }
587*4e1bc9a0SAchim Leubner         saRoot->CurrentTraceIndex += pos;
588*4e1bc9a0SAchim Leubner //        TRACE_OTHER_DEST
589*4e1bc9a0SAchim Leubner     TRACE_LEAVE_LOCK
590*4e1bc9a0SAchim Leubner     }
591*4e1bc9a0SAchim Leubner     return;
592*4e1bc9a0SAchim Leubner }
593*4e1bc9a0SAchim Leubner 
594*4e1bc9a0SAchim Leubner /**
595*4e1bc9a0SAchim Leubner  * siTraceListRemove
596*4e1bc9a0SAchim Leubner  *
597*4e1bc9a0SAchim Leubner  * PURPOSE:     Adds a trace tag for an exchange that is removed from a list
598*4e1bc9a0SAchim Leubner  *
599*4e1bc9a0SAchim Leubner  * PARAMETERS:
600*4e1bc9a0SAchim Leubner  *
601*4e1bc9a0SAchim Leubner  * CALLS:
602*4e1bc9a0SAchim Leubner  *
603*4e1bc9a0SAchim Leubner  * SIDE EFFECTS & CAVEATS:
604*4e1bc9a0SAchim Leubner  *
605*4e1bc9a0SAchim Leubner  * ALGORITHM:
606*4e1bc9a0SAchim Leubner  *
607*4e1bc9a0SAchim Leubner  *
608*4e1bc9a0SAchim Leubner  *     MODIFICATION HISTORY     ***********************
609*4e1bc9a0SAchim Leubner  *
610*4e1bc9a0SAchim Leubner  * ENGINEER NAME      DATE     DESCRIPTION
611*4e1bc9a0SAchim Leubner  * -------------    --------   -----------
612*4e1bc9a0SAchim Leubner  * Tom Nalepa       12/16/02   Initial Developmet
613*4e1bc9a0SAchim Leubner  *
614*4e1bc9a0SAchim Leubner  * @param hpRoot
615*4e1bc9a0SAchim Leubner  * @param mask
616*4e1bc9a0SAchim Leubner  * @param listId
617*4e1bc9a0SAchim Leubner  * @param exchangeId
618*4e1bc9a0SAchim Leubner  *
619*4e1bc9a0SAchim Leubner  * @return
620*4e1bc9a0SAchim Leubner  */
siTraceListRemove(agsaRoot_t * agRoot,bit32 mask,char listId,bitptr exchangeId)621*4e1bc9a0SAchim Leubner GLOBAL void siTraceListRemove(agsaRoot_t  *agRoot,
622*4e1bc9a0SAchim Leubner                               bit32        mask,
623*4e1bc9a0SAchim Leubner                               char         listId,
624*4e1bc9a0SAchim Leubner                               bitptr       exchangeId)
625*4e1bc9a0SAchim Leubner {
626*4e1bc9a0SAchim Leubner     agsaLLRoot_t      *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
627*4e1bc9a0SAchim Leubner     bitptr         i;
628*4e1bc9a0SAchim Leubner     bit8           tmpB[TMP_TRACE_BUFF_SIZE];
629*4e1bc9a0SAchim Leubner     bit8          *bPtr;
630*4e1bc9a0SAchim Leubner     bit8           pos = 0;
631*4e1bc9a0SAchim Leubner 
632*4e1bc9a0SAchim Leubner     IF_DO_TRACE
633*4e1bc9a0SAchim Leubner     {
634*4e1bc9a0SAchim Leubner      TRACE_ENTER_LOCK
635*4e1bc9a0SAchim Leubner         if ( saRoot->TraceDestination & smTraceDestBuffer )
636*4e1bc9a0SAchim Leubner         {
637*4e1bc9a0SAchim Leubner             BUFFER_WRAP_CHECK
638*4e1bc9a0SAchim Leubner             bPtr = &saRoot->TraceBuffer[saRoot->CurrentTraceIndex];
639*4e1bc9a0SAchim Leubner         }
640*4e1bc9a0SAchim Leubner         else
641*4e1bc9a0SAchim Leubner         {
642*4e1bc9a0SAchim Leubner             bPtr = tmpB;
643*4e1bc9a0SAchim Leubner         }
644*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)'<';
645*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)listId;
646*4e1bc9a0SAchim Leubner         copyHex(exchangeId, 32);
647*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)' ';
648*4e1bc9a0SAchim Leubner         if ( saRoot->traceLineFeedCnt > FC_TRACE_LINE_SIZE )
649*4e1bc9a0SAchim Leubner         {
650*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\r';
651*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\n';
652*4e1bc9a0SAchim Leubner             saRoot->traceLineFeedCnt = 0;
653*4e1bc9a0SAchim Leubner         }
654*4e1bc9a0SAchim Leubner         saRoot->CurrentTraceIndex += pos;
655*4e1bc9a0SAchim Leubner //        TRACE_OTHER_DEST
656*4e1bc9a0SAchim Leubner     TRACE_LEAVE_LOCK
657*4e1bc9a0SAchim Leubner     }
658*4e1bc9a0SAchim Leubner     return;
659*4e1bc9a0SAchim Leubner }
660*4e1bc9a0SAchim Leubner 
661*4e1bc9a0SAchim Leubner /**
662*4e1bc9a0SAchim Leubner  * siTraceListAdd
663*4e1bc9a0SAchim Leubner  *
664*4e1bc9a0SAchim Leubner  * PURPOSE:     Adds a trace tag for an exchange that is added to a list
665*4e1bc9a0SAchim Leubner  *
666*4e1bc9a0SAchim Leubner  * PARAMETERS:
667*4e1bc9a0SAchim Leubner  *
668*4e1bc9a0SAchim Leubner  * CALLS:
669*4e1bc9a0SAchim Leubner  *
670*4e1bc9a0SAchim Leubner  * SIDE EFFECTS & CAVEATS:
671*4e1bc9a0SAchim Leubner  *
672*4e1bc9a0SAchim Leubner  * ALGORITHM:
673*4e1bc9a0SAchim Leubner  *
674*4e1bc9a0SAchim Leubner  *
675*4e1bc9a0SAchim Leubner  *     MODIFICATION HISTORY     ***********************
676*4e1bc9a0SAchim Leubner  *
677*4e1bc9a0SAchim Leubner  * ENGINEER NAME      DATE     DESCRIPTION
678*4e1bc9a0SAchim Leubner  * -------------    --------   -----------
679*4e1bc9a0SAchim Leubner  * Tom Nalepa       12/16/02   Initial Developmet
680*4e1bc9a0SAchim Leubner  *
681*4e1bc9a0SAchim Leubner  * @param hpRoot
682*4e1bc9a0SAchim Leubner  * @param mask
683*4e1bc9a0SAchim Leubner  * @param listId
684*4e1bc9a0SAchim Leubner  * @param exchangeId
685*4e1bc9a0SAchim Leubner  *
686*4e1bc9a0SAchim Leubner  * @return
687*4e1bc9a0SAchim Leubner  */
siTraceListAdd(agsaRoot_t * agRoot,bit32 mask,char listId,bitptr exchangeId)688*4e1bc9a0SAchim Leubner GLOBAL void siTraceListAdd(agsaRoot_t      *agRoot,
689*4e1bc9a0SAchim Leubner                            bit32        mask,
690*4e1bc9a0SAchim Leubner                            char         listId,
691*4e1bc9a0SAchim Leubner                            bitptr       exchangeId)
692*4e1bc9a0SAchim Leubner {
693*4e1bc9a0SAchim Leubner 
694*4e1bc9a0SAchim Leubner   agsaLLRoot_t          *saRoot = (agsaLLRoot_t *) (agRoot->sdkData);
695*4e1bc9a0SAchim Leubner 
696*4e1bc9a0SAchim Leubner     bitptr         i;
697*4e1bc9a0SAchim Leubner     bit8           tmpB[TMP_TRACE_BUFF_SIZE];
698*4e1bc9a0SAchim Leubner     bit8          *bPtr;
699*4e1bc9a0SAchim Leubner     bit8           pos = 0;
700*4e1bc9a0SAchim Leubner 
701*4e1bc9a0SAchim Leubner     IF_DO_TRACE
702*4e1bc9a0SAchim Leubner     {
703*4e1bc9a0SAchim Leubner         if ( saRoot->TraceDestination & smTraceDestBuffer )
704*4e1bc9a0SAchim Leubner         {
705*4e1bc9a0SAchim Leubner             BUFFER_WRAP_CHECK
706*4e1bc9a0SAchim Leubner             bPtr = &saRoot->TraceBuffer[saRoot->CurrentTraceIndex];
707*4e1bc9a0SAchim Leubner         }
708*4e1bc9a0SAchim Leubner         else
709*4e1bc9a0SAchim Leubner         {
710*4e1bc9a0SAchim Leubner             bPtr = tmpB;
711*4e1bc9a0SAchim Leubner         }
712*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)'>';
713*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)listId;
714*4e1bc9a0SAchim Leubner         copyHex(exchangeId, 32);
715*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)' ';
716*4e1bc9a0SAchim Leubner         if ( saRoot->traceLineFeedCnt > FC_TRACE_LINE_SIZE )
717*4e1bc9a0SAchim Leubner         {
718*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\r';
719*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\n';
720*4e1bc9a0SAchim Leubner             saRoot->traceLineFeedCnt = 0;
721*4e1bc9a0SAchim Leubner         }
722*4e1bc9a0SAchim Leubner         saRoot->CurrentTraceIndex += pos;
723*4e1bc9a0SAchim Leubner //        TRACE_OTHER_DEST
724*4e1bc9a0SAchim Leubner     }
725*4e1bc9a0SAchim Leubner     return;
726*4e1bc9a0SAchim Leubner }
727*4e1bc9a0SAchim Leubner 
728*4e1bc9a0SAchim Leubner /**
729*4e1bc9a0SAchim Leubner  * siTrace64
730*4e1bc9a0SAchim Leubner  *
731*4e1bc9a0SAchim Leubner  * PURPOSE:     Format a function parameter trace and post it to the appropriate
732*4e1bc9a0SAchim Leubner  *              destination.
733*4e1bc9a0SAchim Leubner  *
734*4e1bc9a0SAchim Leubner  * PARAMETERS:
735*4e1bc9a0SAchim Leubner  *
736*4e1bc9a0SAchim Leubner  * CALLS:
737*4e1bc9a0SAchim Leubner  *
738*4e1bc9a0SAchim Leubner  * SIDE EFFECTS & CAVEATS:
739*4e1bc9a0SAchim Leubner  *
740*4e1bc9a0SAchim Leubner  * ALGORITHM:
741*4e1bc9a0SAchim Leubner  *
742*4e1bc9a0SAchim Leubner  * siTrace : index is 0 for return value, 1 for first parm after "("
743*4e1bc9a0SAchim Leubner  *           produces:   _nn" XXXXXXXXXX
744*4e1bc9a0SAchim Leubner  *           index-----^    value--^
745*4e1bc9a0SAchim Leubner  *
746*4e1bc9a0SAchim Leubner  *
747*4e1bc9a0SAchim Leubner  *     MODIFICATION HISTORY     ***********************
748*4e1bc9a0SAchim Leubner  *
749*4e1bc9a0SAchim Leubner  * ENGINEER NAME      DATE     DESCRIPTION
750*4e1bc9a0SAchim Leubner  * -------------    --------   -----------
751*4e1bc9a0SAchim Leubner  *
752*4e1bc9a0SAchim Leubner  * @param hpRoot
753*4e1bc9a0SAchim Leubner  * @param mask
754*4e1bc9a0SAchim Leubner  * @param uId
755*4e1bc9a0SAchim Leubner  * @param value
756*4e1bc9a0SAchim Leubner  *
757*4e1bc9a0SAchim Leubner  * @return
758*4e1bc9a0SAchim Leubner  */
siTrace64(agsaRoot_t * agRoot,bit32 mask,char * uId,bit64 value,bit32 dataSizeInBits)759*4e1bc9a0SAchim Leubner GLOBAL void siTrace64(agsaRoot_t      *agRoot,
760*4e1bc9a0SAchim Leubner                       bit32        mask,
761*4e1bc9a0SAchim Leubner                       char       * uId,
762*4e1bc9a0SAchim Leubner                       bit64        value,
763*4e1bc9a0SAchim Leubner                       bit32        dataSizeInBits)
764*4e1bc9a0SAchim Leubner {
765*4e1bc9a0SAchim Leubner 
766*4e1bc9a0SAchim Leubner     agsaLLRoot_t  *saRoot = (agsaLLRoot_t *) (agRoot->sdkData);
767*4e1bc9a0SAchim Leubner     bitptr         i;
768*4e1bc9a0SAchim Leubner     bit8           tmpB[TMP_TRACE_BUFF_SIZE];
769*4e1bc9a0SAchim Leubner     bit8          *bPtr;
770*4e1bc9a0SAchim Leubner     bit8           pos = 0;
771*4e1bc9a0SAchim Leubner 
772*4e1bc9a0SAchim Leubner     IF_DO_TRACE
773*4e1bc9a0SAchim Leubner     {
774*4e1bc9a0SAchim Leubner         if ( saRoot->TraceDestination & smTraceDestBuffer )
775*4e1bc9a0SAchim Leubner         {
776*4e1bc9a0SAchim Leubner             BUFFER_WRAP_CHECK
777*4e1bc9a0SAchim Leubner             bPtr = &saRoot->TraceBuffer[saRoot->CurrentTraceIndex];
778*4e1bc9a0SAchim Leubner         }
779*4e1bc9a0SAchim Leubner         else
780*4e1bc9a0SAchim Leubner         {
781*4e1bc9a0SAchim Leubner             bPtr = tmpB;
782*4e1bc9a0SAchim Leubner         }
783*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)'"';
784*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)uId[0];
785*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)uId[1];
786*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)':';
787*4e1bc9a0SAchim Leubner         copyHex(value, dataSizeInBits);
788*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)' ';
789*4e1bc9a0SAchim Leubner         if ( saRoot->traceLineFeedCnt > FC_TRACE_LINE_SIZE )
790*4e1bc9a0SAchim Leubner         {
791*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\r';
792*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\n';
793*4e1bc9a0SAchim Leubner             saRoot->traceLineFeedCnt = 0;
794*4e1bc9a0SAchim Leubner         }
795*4e1bc9a0SAchim Leubner         saRoot->CurrentTraceIndex += pos;
796*4e1bc9a0SAchim Leubner //        TRACE_OTHER_DEST
797*4e1bc9a0SAchim Leubner     }
798*4e1bc9a0SAchim Leubner     return;
799*4e1bc9a0SAchim Leubner }
800*4e1bc9a0SAchim Leubner 
801*4e1bc9a0SAchim Leubner 
802*4e1bc9a0SAchim Leubner 
803*4e1bc9a0SAchim Leubner /**
804*4e1bc9a0SAchim Leubner  * siTrace
805*4e1bc9a0SAchim Leubner  *
806*4e1bc9a0SAchim Leubner  * PURPOSE:     Format a function parameter trace and post it to the appropriate
807*4e1bc9a0SAchim Leubner  *              destination.
808*4e1bc9a0SAchim Leubner  *
809*4e1bc9a0SAchim Leubner  * PARAMETERS:
810*4e1bc9a0SAchim Leubner  *
811*4e1bc9a0SAchim Leubner  * CALLS:
812*4e1bc9a0SAchim Leubner  *
813*4e1bc9a0SAchim Leubner  * SIDE EFFECTS & CAVEATS:
814*4e1bc9a0SAchim Leubner  *
815*4e1bc9a0SAchim Leubner  * ALGORITHM:
816*4e1bc9a0SAchim Leubner  *
817*4e1bc9a0SAchim Leubner  * fiTrace : index is 0 for return value, 1 for first parm after "("
818*4e1bc9a0SAchim Leubner  *           produces:   _nn" XXXXXXXXXX
819*4e1bc9a0SAchim Leubner  *           index-----^    value--^
820*4e1bc9a0SAchim Leubner  *
821*4e1bc9a0SAchim Leubner  *
822*4e1bc9a0SAchim Leubner  *     MODIFICATION HISTORY     ***********************
823*4e1bc9a0SAchim Leubner  *
824*4e1bc9a0SAchim Leubner  * ENGINEER NAME      DATE     DESCRIPTION
825*4e1bc9a0SAchim Leubner  * -------------    --------   -----------
826*4e1bc9a0SAchim Leubner  *
827*4e1bc9a0SAchim Leubner  * @param hpRoot
828*4e1bc9a0SAchim Leubner  * @param mask
829*4e1bc9a0SAchim Leubner  * @param uId
830*4e1bc9a0SAchim Leubner  * @param value
831*4e1bc9a0SAchim Leubner  *
832*4e1bc9a0SAchim Leubner  * @return
833*4e1bc9a0SAchim Leubner  */
siTrace(agsaRoot_t * agRoot,bit32 mask,char * uId,bit32 value,bit32 dataSizeInBits)834*4e1bc9a0SAchim Leubner GLOBAL void siTrace( agsaRoot_t      *agRoot,
835*4e1bc9a0SAchim Leubner                     bit32        mask,
836*4e1bc9a0SAchim Leubner                     char       * uId,
837*4e1bc9a0SAchim Leubner                     bit32        value,
838*4e1bc9a0SAchim Leubner                     bit32        dataSizeInBits)
839*4e1bc9a0SAchim Leubner {
840*4e1bc9a0SAchim Leubner 
841*4e1bc9a0SAchim Leubner    agsaLLRoot_t   *saRoot = (agsaLLRoot_t *) (agRoot->sdkData);
842*4e1bc9a0SAchim Leubner 
843*4e1bc9a0SAchim Leubner     bitptr         i;
844*4e1bc9a0SAchim Leubner     bit8           tmpB[TMP_TRACE_BUFF_SIZE];
845*4e1bc9a0SAchim Leubner     bit8          *bPtr;
846*4e1bc9a0SAchim Leubner     bit8           pos = 0;
847*4e1bc9a0SAchim Leubner 
848*4e1bc9a0SAchim Leubner     IF_DO_TRACE
849*4e1bc9a0SAchim Leubner     {
850*4e1bc9a0SAchim Leubner         if ( saRoot->TraceDestination & smTraceDestBuffer )
851*4e1bc9a0SAchim Leubner         {
852*4e1bc9a0SAchim Leubner             BUFFER_WRAP_CHECK
853*4e1bc9a0SAchim Leubner             bPtr = &saRoot->TraceBuffer[saRoot->CurrentTraceIndex];
854*4e1bc9a0SAchim Leubner         }
855*4e1bc9a0SAchim Leubner         else
856*4e1bc9a0SAchim Leubner         {
857*4e1bc9a0SAchim Leubner             bPtr = tmpB;
858*4e1bc9a0SAchim Leubner         }
859*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)'"';
860*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)uId[0];
861*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)uId[1];
862*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)':';
863*4e1bc9a0SAchim Leubner         copyHex(value, dataSizeInBits);
864*4e1bc9a0SAchim Leubner         bPtr[pos++] = (bit8)' ';
865*4e1bc9a0SAchim Leubner         if ( saRoot->traceLineFeedCnt > FC_TRACE_LINE_SIZE )
866*4e1bc9a0SAchim Leubner         {
867*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\r';
868*4e1bc9a0SAchim Leubner             bPtr[pos++] = '\n';
869*4e1bc9a0SAchim Leubner             saRoot->traceLineFeedCnt = 0;
870*4e1bc9a0SAchim Leubner         }
871*4e1bc9a0SAchim Leubner         saRoot->CurrentTraceIndex += pos;
872*4e1bc9a0SAchim Leubner //        TRACE_OTHER_DEST
873*4e1bc9a0SAchim Leubner     }
874*4e1bc9a0SAchim Leubner     return;
875*4e1bc9a0SAchim Leubner }
876*4e1bc9a0SAchim Leubner 
877*4e1bc9a0SAchim Leubner 
878*4e1bc9a0SAchim Leubner /*Set Wrap 0 for Wrapping non zero stops when full  */
879*4e1bc9a0SAchim Leubner 
880*4e1bc9a0SAchim Leubner 
siTraceGetInfo(agsaRoot_t * agRoot,hpTraceBufferParms_t * pBParms)881*4e1bc9a0SAchim Leubner GLOBAL void siTraceGetInfo(agsaRoot_t  *agRoot, hpTraceBufferParms_t * pBParms)
882*4e1bc9a0SAchim Leubner {
883*4e1bc9a0SAchim Leubner     agsaLLRoot_t  *saRoot = (agsaLLRoot_t *)agRoot->sdkData;
884*4e1bc9a0SAchim Leubner 
885*4e1bc9a0SAchim Leubner     pBParms->TraceCompiled  =  TRUE;
886*4e1bc9a0SAchim Leubner 
887*4e1bc9a0SAchim Leubner     pBParms->TraceWrap                  = saRoot->TraceMask & 0x80000000;
888*4e1bc9a0SAchim Leubner     pBParms->CurrentTraceIndexWrapCount = saRoot->CurrentTraceIndexWrapCount;
889*4e1bc9a0SAchim Leubner     pBParms->BufferSize                 = saRoot->TraceBufferLength;
890*4e1bc9a0SAchim Leubner     pBParms->CurrentIndex               = saRoot->CurrentTraceIndex;
891*4e1bc9a0SAchim Leubner     pBParms->pTrace                     = saRoot->TraceBuffer;
892*4e1bc9a0SAchim Leubner     pBParms->pTraceIndexWrapCount       = &saRoot->CurrentTraceIndexWrapCount;
893*4e1bc9a0SAchim Leubner     pBParms->pTraceMask                 = &saRoot->TraceMask;
894*4e1bc9a0SAchim Leubner     pBParms->pCurrentTraceIndex         = &saRoot->CurrentTraceIndex;
895*4e1bc9a0SAchim Leubner }
896*4e1bc9a0SAchim Leubner /**/
897*4e1bc9a0SAchim Leubner 
siTraceSetMask(agsaRoot_t * agRoot,bit32 TraceMask)898*4e1bc9a0SAchim Leubner GLOBAL void siTraceSetMask(agsaRoot_t  *agRoot, bit32 TraceMask  )
899*4e1bc9a0SAchim Leubner {
900*4e1bc9a0SAchim Leubner     agsaLLRoot_t  *saRoot = (agsaLLRoot_t *)agRoot->sdkData;
901*4e1bc9a0SAchim Leubner     saRoot->TraceMask = TraceMask;
902*4e1bc9a0SAchim Leubner }
903*4e1bc9a0SAchim Leubner 
904*4e1bc9a0SAchim Leubner 
905*4e1bc9a0SAchim Leubner 
906*4e1bc9a0SAchim Leubner #endif
907*4e1bc9a0SAchim Leubner 
908*4e1bc9a0SAchim Leubner 
909