xref: /freebsd/sys/dev/pms/RefTisa/sallsdk/spc/mpidebug.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
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 /*******************************************************************************/
25*4e1bc9a0SAchim Leubner /*! \file mpidebug.h
26*4e1bc9a0SAchim Leubner  *  \brief The file defines the debug constants and structures
27*4e1bc9a0SAchim Leubner  *
28*4e1bc9a0SAchim Leubner  */
29*4e1bc9a0SAchim Leubner /*******************************************************************************/
30*4e1bc9a0SAchim Leubner 
31*4e1bc9a0SAchim Leubner #ifndef __MPIDEBUG_H__
32*4e1bc9a0SAchim Leubner #define __MPIDEBUG_H__
33*4e1bc9a0SAchim Leubner 
34*4e1bc9a0SAchim Leubner /*******************************************************************************/
35*4e1bc9a0SAchim Leubner #define MPI_DEBUG_TRACE_BUFFER_MAX  1024
36*4e1bc9a0SAchim Leubner #define MPI_DEBUG_TRACE_OB_IOMB_SIZE   128 /* 64 */
37*4e1bc9a0SAchim Leubner #define MPI_DEBUG_TRACE_IB_IOMB_SIZE   128 /* 64 */
38*4e1bc9a0SAchim Leubner #define MPI_DEBUG_TRACE_IBQ   1
39*4e1bc9a0SAchim Leubner #define MPI_DEBUG_TRACE_OBQ   0
40*4e1bc9a0SAchim Leubner #define MPI_DEBUG_TRACE_QNUM_ERROR   100 /* Added to Qnumber to indicate error */
41*4e1bc9a0SAchim Leubner 
42*4e1bc9a0SAchim Leubner typedef struct mpiObDebugTraceEntry_s
43*4e1bc9a0SAchim Leubner {
44*4e1bc9a0SAchim Leubner   bit64       Time;
45*4e1bc9a0SAchim Leubner   bit32       QNum;
46*4e1bc9a0SAchim Leubner   bit32       pici;
47*4e1bc9a0SAchim Leubner   void *      pEntry;
48*4e1bc9a0SAchim Leubner   bit32       Iomb[MPI_DEBUG_TRACE_OB_IOMB_SIZE/4];
49*4e1bc9a0SAchim Leubner } mpiDebugObTraceEntry_t;
50*4e1bc9a0SAchim Leubner 
51*4e1bc9a0SAchim Leubner typedef struct mpiIbDebugTraceEntry_s
52*4e1bc9a0SAchim Leubner {
53*4e1bc9a0SAchim Leubner   bit64       Time;
54*4e1bc9a0SAchim Leubner   bit32       QNum;
55*4e1bc9a0SAchim Leubner   bit32       pici;
56*4e1bc9a0SAchim Leubner   void *      pEntry;
57*4e1bc9a0SAchim Leubner   bit32       Iomb[MPI_DEBUG_TRACE_IB_IOMB_SIZE/4];
58*4e1bc9a0SAchim Leubner } mpiDebugIbTraceEntry_t;
59*4e1bc9a0SAchim Leubner 
60*4e1bc9a0SAchim Leubner typedef struct mpiIbDebugTrace_s
61*4e1bc9a0SAchim Leubner {
62*4e1bc9a0SAchim Leubner   bit32                 Idx;
63*4e1bc9a0SAchim Leubner   bit32                 Pad;
64*4e1bc9a0SAchim Leubner   mpiDebugIbTraceEntry_t  Data[MPI_DEBUG_TRACE_BUFFER_MAX];
65*4e1bc9a0SAchim Leubner } mpiDebugIbTrace_t;
66*4e1bc9a0SAchim Leubner 
67*4e1bc9a0SAchim Leubner typedef struct mpiObDebugTrace_s
68*4e1bc9a0SAchim Leubner {
69*4e1bc9a0SAchim Leubner   bit32                 Idx;
70*4e1bc9a0SAchim Leubner   bit32                 Pad;
71*4e1bc9a0SAchim Leubner   mpiDebugObTraceEntry_t  Data[MPI_DEBUG_TRACE_BUFFER_MAX];
72*4e1bc9a0SAchim Leubner } mpiDebugObTrace_t;
73*4e1bc9a0SAchim Leubner 
74*4e1bc9a0SAchim Leubner void mpiTraceInit(void);
75*4e1bc9a0SAchim Leubner void mpiTraceAdd(bit32 q,bit32 pici,bit32 ib, void *iomb, bit32 numBytes);
76*4e1bc9a0SAchim Leubner 
77*4e1bc9a0SAchim Leubner #endif /* __MPIDEBUG_H__ */
78*4e1bc9a0SAchim Leubner 
79*4e1bc9a0SAchim Leubner 
80*4e1bc9a0SAchim Leubner 
81*4e1bc9a0SAchim Leubner 
82*4e1bc9a0SAchim Leubner /********************************************************************
83*4e1bc9a0SAchim Leubner **  File that contains debug-specific APIs ( driver tracing etc )
84*4e1bc9a0SAchim Leubner *********************************************************************/
85*4e1bc9a0SAchim Leubner 
86*4e1bc9a0SAchim Leubner #ifndef __SPCDEBUG_H__
87*4e1bc9a0SAchim Leubner #define __SPCDEBUG_H__
88*4e1bc9a0SAchim Leubner 
89*4e1bc9a0SAchim Leubner 
90*4e1bc9a0SAchim Leubner /*
91*4e1bc9a0SAchim Leubner ** console and trace levels
92*4e1bc9a0SAchim Leubner */
93*4e1bc9a0SAchim Leubner 
94*4e1bc9a0SAchim Leubner #define  hpDBG_ALWAYS     0x0000ffff
95*4e1bc9a0SAchim Leubner #define  hpDBG_IOMB       0x00000040
96*4e1bc9a0SAchim Leubner #define  hpDBG_REGISTERS  0x00000020
97*4e1bc9a0SAchim Leubner #define  hpDBG_TICK_INT   0x00000010
98*4e1bc9a0SAchim Leubner #define  hpDBG_SCREAM     0x00000008
99*4e1bc9a0SAchim Leubner #define  hpDBG_VERY_LOUD  0x00000004
100*4e1bc9a0SAchim Leubner #define  hpDBG_LOUD       0x00000002
101*4e1bc9a0SAchim Leubner #define  hpDBG_ERROR      0x00000001
102*4e1bc9a0SAchim Leubner #define  hpDBG_NEVER      0x00000000
103*4e1bc9a0SAchim Leubner 
104*4e1bc9a0SAchim Leubner #define smTraceDestBuffer    0x00000001
105*4e1bc9a0SAchim Leubner #define smTraceDestRegister  0x00000002
106*4e1bc9a0SAchim Leubner #define smTraceDestDebugger  0x00000004
107*4e1bc9a0SAchim Leubner 
108*4e1bc9a0SAchim Leubner 
109*4e1bc9a0SAchim Leubner #define siTraceDestMask     (smTraceDestBuffer    |  \
110*4e1bc9a0SAchim Leubner                              smTraceDestRegister  |  \
111*4e1bc9a0SAchim Leubner                              smTraceDestDebugger)
112*4e1bc9a0SAchim Leubner 
113*4e1bc9a0SAchim Leubner /* Trace buffer will continuously  */
114*4e1bc9a0SAchim Leubner /* trace and wrap-around on itself */
115*4e1bc9a0SAchim Leubner /* when it reaches the end         */
116*4e1bc9a0SAchim Leubner #define hpDBG_TraceBufferWrapAround   0x80000000
117*4e1bc9a0SAchim Leubner /* This features enables logging of trace time       */
118*4e1bc9a0SAchim Leubner /* stamps.  Only certain key routines use this       */
119*4e1bc9a0SAchim Leubner /* feature because it tends to clog up the trace     */
120*4e1bc9a0SAchim Leubner /* buffer.                                           */
121*4e1bc9a0SAchim Leubner #define hpDBG_TraceBufferUseTimeStamp 0x40000000
122*4e1bc9a0SAchim Leubner /* This features enables logging of trace sequential */
123*4e1bc9a0SAchim Leubner /* stamps.  Only certain key routines use this       */
124*4e1bc9a0SAchim Leubner /* feature because it tends to clog up the trace     */
125*4e1bc9a0SAchim Leubner /* buffer.                                           */
126*4e1bc9a0SAchim Leubner #define hpDBG_TraceBufferUseSequenceStamp 0x20000000
127*4e1bc9a0SAchim Leubner 
128*4e1bc9a0SAchim Leubner /* Trace IDs of various state machines */
129*4e1bc9a0SAchim Leubner #define fiTraceSmChip   'C'
130*4e1bc9a0SAchim Leubner #define fiTraceSmPort   'P'
131*4e1bc9a0SAchim Leubner #define fiTraceSmLogin  'L'
132*4e1bc9a0SAchim Leubner #define fiTraceSmXchg   'X'
133*4e1bc9a0SAchim Leubner #define fiTraceSmFabr   'F'
134*4e1bc9a0SAchim Leubner #define fiTraceDiscFab  'D'
135*4e1bc9a0SAchim Leubner #define fiTraceDiscLoop 'M'
136*4e1bc9a0SAchim Leubner #define fiTraceFc2      'A'
137*4e1bc9a0SAchim Leubner #define fiTraceTgtState 'S'
138*4e1bc9a0SAchim Leubner #define fiTraceIniState 'I'
139*4e1bc9a0SAchim Leubner 
140*4e1bc9a0SAchim Leubner /* Trace IDs of various queues  */
141*4e1bc9a0SAchim Leubner #define fiSfsFreeList   'Z'
142*4e1bc9a0SAchim Leubner #define fiSestFreeList  'W'
143*4e1bc9a0SAchim Leubner #define fiOsSfsFreeList 'G'
144*4e1bc9a0SAchim Leubner #define fiLgnFreeList   'K'
145*4e1bc9a0SAchim Leubner #define fiPortalFreeList  'l'
146*4e1bc9a0SAchim Leubner #define fiBusyList      'N'
147*4e1bc9a0SAchim Leubner #define fiOsSfsAllocList     'B'
148*4e1bc9a0SAchim Leubner #define fiTimerList         'V'
149*4e1bc9a0SAchim Leubner #define fiSfsWaitForRspList 'I'
150*4e1bc9a0SAchim Leubner #define fiLgnBusyList   'J'
151*4e1bc9a0SAchim Leubner #define fiPortalBusyList  'g'
152*4e1bc9a0SAchim Leubner #define fiWait4ErqList  'o'
153*4e1bc9a0SAchim Leubner #define fiXchgAbortList   'U'
154*4e1bc9a0SAchim Leubner #define fiXchgWaitList 'b'
155*4e1bc9a0SAchim Leubner 
156*4e1bc9a0SAchim Leubner /* not used right now */
157*4e1bc9a0SAchim Leubner #define fiSfsDeferFreeList  'q'
158*4e1bc9a0SAchim Leubner #define fiDeferBusyList     'm'
159*4e1bc9a0SAchim Leubner #define fiInvalidList   'X'
160*4e1bc9a0SAchim Leubner #define fiInvalidatedList   'a'
161*4e1bc9a0SAchim Leubner #define fiTmpXchList    'n'
162*4e1bc9a0SAchim Leubner 
163*4e1bc9a0SAchim Leubner #define TMP_TRACE_BUFF_SIZE  32
164*4e1bc9a0SAchim Leubner #define FC_TRACE_LINE_SIZE   70
165*4e1bc9a0SAchim Leubner /******************************************************************************/
166*4e1bc9a0SAchim Leubner /* Macro Conventions:  we are assuming that the macros will be called inside  */
167*4e1bc9a0SAchim Leubner /*                     a function that already has a workable saRoot variable */
168*4e1bc9a0SAchim Leubner /******************************************************************************/
169*4e1bc9a0SAchim Leubner 
170*4e1bc9a0SAchim Leubner /******************************************************************************/
171*4e1bc9a0SAchim Leubner /* fiTraceState : ==>        _!n_        _ss: XXXXXXXX       _se: XXXXXXXX    */
172*4e1bc9a0SAchim Leubner /*              statemachine --^     currentstate--^    triggerevent--^       */
173*4e1bc9a0SAchim Leubner /*              NOTE: shorthand forms available as macros below.              */
174*4e1bc9a0SAchim Leubner /******************************************************************************/
175*4e1bc9a0SAchim Leubner #ifdef SA_ENABLE_TRACE_FUNCTIONS
176*4e1bc9a0SAchim Leubner 
177*4e1bc9a0SAchim Leubner 
178*4e1bc9a0SAchim Leubner void siResetTraceBuffer(agsaRoot_t  *agRoot);
179*4e1bc9a0SAchim Leubner void siTraceFuncEnter(agsaRoot_t  *agRoot, bit32 mask, bit32 fileid, char *funcid);
180*4e1bc9a0SAchim Leubner 
181*4e1bc9a0SAchim Leubner 
182*4e1bc9a0SAchim Leubner GLOBAL void siTraceFuncExit(   agsaRoot_t  *agRoot,  bit32   mask, char  fileid, char  * funcid, char  exitId );
183*4e1bc9a0SAchim Leubner 
184*4e1bc9a0SAchim Leubner 
185*4e1bc9a0SAchim Leubner void siTrace(agsaRoot_t  *agRoot, bit32 mask, char *uId, bit32 value, bit32 dataSizeInBits);
186*4e1bc9a0SAchim Leubner void siTrace64(agsaRoot_t  *agRoot, bit32 mask, char *uId, bit64 value, bit32 dataSizeInBits);
187*4e1bc9a0SAchim Leubner bit32 siGetCurrentTraceIndex(agsaRoot_t  *agRoot);
188*4e1bc9a0SAchim Leubner void siTraceListRemove(agsaRoot_t  *agRoot, bit32 mask, char listId, bitptr exchangeId);
189*4e1bc9a0SAchim Leubner void siTraceListAdd(agsaRoot_t  *agRoot, bit32 mask, char listId, bitptr exchangeId);
190*4e1bc9a0SAchim Leubner void siTraceState(agsaRoot_t  *agRoot, bit32 mask, bit32 statemachine, bit32 currentstate, bit32 triggerevent);
191*4e1bc9a0SAchim Leubner 
192*4e1bc9a0SAchim Leubner #define smTraceState(L,S,C,T)     siTraceState(agRoot,L,S,C,T)
193*4e1bc9a0SAchim Leubner #define smTraceChipState(L,C,T)   siTraceState(agRoot,L,fiTraceSmChip,C,T)
194*4e1bc9a0SAchim Leubner #define smTraceFabricState(L,C,T) siTraceState(agRoot,L,fiTraceSmFabr,C,T)
195*4e1bc9a0SAchim Leubner #define smTracePortState(L,C,T)   siTraceState(agRoot,L,fiTraceSmPort,C,T)
196*4e1bc9a0SAchim Leubner #define smTraceLoginState(L,C,T)  siTraceState(agRoot,L,fiTraceSmLogin,C,T)
197*4e1bc9a0SAchim Leubner #define smTraceXchgState(L,C,T)   siTraceState(agRoot,L,fiTraceSmXchg,C,T)
198*4e1bc9a0SAchim Leubner #define smTraceDiscFabState(L,C,T)    siTraceState(agRoot,L,fiTraceDiscFab,C,T)
199*4e1bc9a0SAchim Leubner #define smTraceDiscLoopState(L,C,T)   siTraceState(agRoot,L,fiTraceDiscLoop,C,T)
200*4e1bc9a0SAchim Leubner #define smTraceFc2State(L,C,T)    siTraceState(agRoot,L,fiTraceFc2,C,T)
201*4e1bc9a0SAchim Leubner #define smTraceScsiTgtState(L,C,T)    siTraceState(agRoot,L,fiTraceTgtState,C,T)
202*4e1bc9a0SAchim Leubner #define smTraceScsiIniState(L,C,T)    siTraceState(agRoot,L,fiTraceIniState,C,T)
203*4e1bc9a0SAchim Leubner 
204*4e1bc9a0SAchim Leubner #define smResetTraceBuffer(L)   siResetTraceBuffer(L)
205*4e1bc9a0SAchim Leubner #define smTraceFuncEnter(L,I)  siTraceFuncEnter(agRoot,L,siTraceFileID,I)
206*4e1bc9a0SAchim Leubner #define smTraceFuncExit(L,S,I)  siTraceFuncExit(agRoot,L,siTraceFileID,I,S)
207*4e1bc9a0SAchim Leubner #define smGetCurrentTraceIndex(L)   siGetCurrentTraceIndex(L)
208*4e1bc9a0SAchim Leubner #define smTraceListRemove(R,L,I,V)   siTraceListRemove(R,L,I,V)
209*4e1bc9a0SAchim Leubner #define smTraceListAdd(R,L,I,V)   siTraceListAdd(R,L,I,V)
210*4e1bc9a0SAchim Leubner 
211*4e1bc9a0SAchim Leubner #define smTrace(L,I,V)                                        \
212*4e1bc9a0SAchim Leubner     /*lint -e506 */                                           \
213*4e1bc9a0SAchim Leubner     /*lint -e774 */                                           \
214*4e1bc9a0SAchim Leubner     if (sizeof(V) == 8) {siTrace64(agRoot,L,I,(bit64)V,64);}  \
215*4e1bc9a0SAchim Leubner     else {siTrace(agRoot,L,I,(bit32)V,32);}                   \
216*4e1bc9a0SAchim Leubner     /*lint +e506 */                                           \
217*4e1bc9a0SAchim Leubner     /*lint +e774 */
218*4e1bc9a0SAchim Leubner 
219*4e1bc9a0SAchim Leubner 
220*4e1bc9a0SAchim Leubner #else
221*4e1bc9a0SAchim Leubner 
222*4e1bc9a0SAchim Leubner #define siTraceState(agRoot,L,fiTraceSmXchg,C,T)
223*4e1bc9a0SAchim Leubner 
224*4e1bc9a0SAchim Leubner #define smTraceState(L,S,C,T)
225*4e1bc9a0SAchim Leubner #define smTraceChipState(L,C,T)
226*4e1bc9a0SAchim Leubner #define smTraceFabricState(L,C,T)
227*4e1bc9a0SAchim Leubner #define smTracePortState(L,C,T)
228*4e1bc9a0SAchim Leubner #define smTraceLoginState(L,C,T)
229*4e1bc9a0SAchim Leubner #define smTraceXchgState(L,C,T)
230*4e1bc9a0SAchim Leubner #define smTraceDiscFabState(L,C,T)
231*4e1bc9a0SAchim Leubner #define smTraceDiscLoopState(L,C,T)
232*4e1bc9a0SAchim Leubner #define smTraceFc2State(L,C,T)
233*4e1bc9a0SAchim Leubner #define smTraceScsiTgtState(L,C,T)
234*4e1bc9a0SAchim Leubner #define smTraceScsiIniState(L,C,T)
235*4e1bc9a0SAchim Leubner 
236*4e1bc9a0SAchim Leubner #define smResetTraceBuffer(agRoot)
237*4e1bc9a0SAchim Leubner #define smTraceFuncEnter(L,I)
238*4e1bc9a0SAchim Leubner #define smTraceFuncExit(L,S,I)
239*4e1bc9a0SAchim Leubner #define smGetCurrentTraceIndex(L)
240*4e1bc9a0SAchim Leubner #define smTraceListRemove(L,I,V)
241*4e1bc9a0SAchim Leubner #define smTraceListAdd(L,I,V)
242*4e1bc9a0SAchim Leubner 
243*4e1bc9a0SAchim Leubner #define smTrace(L,I,V)
244*4e1bc9a0SAchim Leubner 
245*4e1bc9a0SAchim Leubner #endif
246*4e1bc9a0SAchim Leubner 
247*4e1bc9a0SAchim Leubner struct hpTraceBufferParms_s {
248*4e1bc9a0SAchim Leubner   bit32 TraceCompiled;
249*4e1bc9a0SAchim Leubner   bit32 BufferSize;
250*4e1bc9a0SAchim Leubner   bit32 CurrentTraceIndexWrapCount;
251*4e1bc9a0SAchim Leubner   bit32 CurrentIndex;
252*4e1bc9a0SAchim Leubner   bit32 TraceWrap;
253*4e1bc9a0SAchim Leubner   bit8  * pTrace;
254*4e1bc9a0SAchim Leubner   bit32 * pCurrentTraceIndex;
255*4e1bc9a0SAchim Leubner   bit32 * pTraceIndexWrapCount;
256*4e1bc9a0SAchim Leubner   bit32 * pTraceMask;
257*4e1bc9a0SAchim Leubner };
258*4e1bc9a0SAchim Leubner typedef struct hpTraceBufferParms_s
259*4e1bc9a0SAchim Leubner                hpTraceBufferParms_t;
260*4e1bc9a0SAchim Leubner 
261*4e1bc9a0SAchim Leubner #ifdef SA_ENABLE_TRACE_FUNCTIONS
262*4e1bc9a0SAchim Leubner 
263*4e1bc9a0SAchim Leubner GLOBAL void siTraceGetInfo(agsaRoot_t  *agRoot, hpTraceBufferParms_t * pBParms);
264*4e1bc9a0SAchim Leubner 
265*4e1bc9a0SAchim Leubner #define smTraceGetInfo(R,P)  siTraceGetInfo(R,P)
266*4e1bc9a0SAchim Leubner #else
267*4e1bc9a0SAchim Leubner #define smTraceGetInfo(R,P)
268*4e1bc9a0SAchim Leubner #endif
269*4e1bc9a0SAchim Leubner 
270*4e1bc9a0SAchim Leubner 
271*4e1bc9a0SAchim Leubner void siEnableTracing ( agsaRoot_t  *agRoot );
272*4e1bc9a0SAchim Leubner #ifdef SA_ENABLE_TRACE_FUNCTIONS
273*4e1bc9a0SAchim Leubner 
274*4e1bc9a0SAchim Leubner GLOBAL void siTraceSetMask(agsaRoot_t  *agRoot, bit32 TraceMask  );
275*4e1bc9a0SAchim Leubner 
276*4e1bc9a0SAchim Leubner #define smTraceSetMask(R,P)  siTraceSetMask(R,P)
277*4e1bc9a0SAchim Leubner #else
278*4e1bc9a0SAchim Leubner #define smTraceSetMask(R,P)
279*4e1bc9a0SAchim Leubner #endif /* SA_ENABLE_TRACE_FUNCTIONS */
280*4e1bc9a0SAchim Leubner 
281*4e1bc9a0SAchim Leubner #endif /* #ifndef __SPCDEBUG_H__ */
282*4e1bc9a0SAchim Leubner 
283