1 /*******************************************************************************
2 *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved.
4 *Redistribution and use in source and binary forms, with or without modification, are permitted provided
5 *that the following conditions are met:
6 *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
8 *2. Redistributions in binary form must reproduce the above copyright notice,
9 *this list of conditions and the following disclaimer in the documentation and/or other materials provided
10 *with the distribution.
12 *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
13 *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14 *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
15 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
16 *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
17 *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18 *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19 *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
23 ********************************************************************************/
25 /*******************************************************************************/
27 * \brief The file defines the debug constants and structures
30 /*******************************************************************************/
32 #ifndef __MPIDEBUG_H__
33 #define __MPIDEBUG_H__
35 /*******************************************************************************/
36 #define MPI_DEBUG_TRACE_BUFFER_MAX 1024
37 #define MPI_DEBUG_TRACE_OB_IOMB_SIZE 128 /* 64 */
38 #define MPI_DEBUG_TRACE_IB_IOMB_SIZE 128 /* 64 */
39 #define MPI_DEBUG_TRACE_IBQ 1
40 #define MPI_DEBUG_TRACE_OBQ 0
41 #define MPI_DEBUG_TRACE_QNUM_ERROR 100 /* Added to Qnumber to indicate error */
43 typedef struct mpiObDebugTraceEntry_s
49 bit32 Iomb[MPI_DEBUG_TRACE_OB_IOMB_SIZE/4];
50 } mpiDebugObTraceEntry_t;
52 typedef struct mpiIbDebugTraceEntry_s
58 bit32 Iomb[MPI_DEBUG_TRACE_IB_IOMB_SIZE/4];
59 } mpiDebugIbTraceEntry_t;
61 typedef struct mpiIbDebugTrace_s
65 mpiDebugIbTraceEntry_t Data[MPI_DEBUG_TRACE_BUFFER_MAX];
68 typedef struct mpiObDebugTrace_s
72 mpiDebugObTraceEntry_t Data[MPI_DEBUG_TRACE_BUFFER_MAX];
75 void mpiTraceInit(void);
76 void mpiTraceAdd(bit32 q,bit32 pici,bit32 ib, void *iomb, bit32 numBytes);
78 #endif /* __MPIDEBUG_H__ */
83 /********************************************************************
84 ** File that contains debug-specific APIs ( driver tracing etc )
85 *********************************************************************/
87 #ifndef __SPCDEBUG_H__
88 #define __SPCDEBUG_H__
92 ** console and trace levels
95 #define hpDBG_ALWAYS 0x0000ffff
96 #define hpDBG_IOMB 0x00000040
97 #define hpDBG_REGISTERS 0x00000020
98 #define hpDBG_TICK_INT 0x00000010
99 #define hpDBG_SCREAM 0x00000008
100 #define hpDBG_VERY_LOUD 0x00000004
101 #define hpDBG_LOUD 0x00000002
102 #define hpDBG_ERROR 0x00000001
103 #define hpDBG_NEVER 0x00000000
105 #define smTraceDestBuffer 0x00000001
106 #define smTraceDestRegister 0x00000002
107 #define smTraceDestDebugger 0x00000004
110 #define siTraceDestMask (smTraceDestBuffer | \
111 smTraceDestRegister | \
114 /* Trace buffer will continuously */
115 /* trace and wrap-around on itself */
116 /* when it reaches the end */
117 #define hpDBG_TraceBufferWrapAround 0x80000000
118 /* This features enables logging of trace time */
119 /* stamps. Only certain key routines use this */
120 /* feature because it tends to clog up the trace */
122 #define hpDBG_TraceBufferUseTimeStamp 0x40000000
123 /* This features enables logging of trace sequential */
124 /* stamps. Only certain key routines use this */
125 /* feature because it tends to clog up the trace */
127 #define hpDBG_TraceBufferUseSequenceStamp 0x20000000
129 /* Trace IDs of various state machines */
130 #define fiTraceSmChip 'C'
131 #define fiTraceSmPort 'P'
132 #define fiTraceSmLogin 'L'
133 #define fiTraceSmXchg 'X'
134 #define fiTraceSmFabr 'F'
135 #define fiTraceDiscFab 'D'
136 #define fiTraceDiscLoop 'M'
137 #define fiTraceFc2 'A'
138 #define fiTraceTgtState 'S'
139 #define fiTraceIniState 'I'
141 /* Trace IDs of various queues */
142 #define fiSfsFreeList 'Z'
143 #define fiSestFreeList 'W'
144 #define fiOsSfsFreeList 'G'
145 #define fiLgnFreeList 'K'
146 #define fiPortalFreeList 'l'
147 #define fiBusyList 'N'
148 #define fiOsSfsAllocList 'B'
149 #define fiTimerList 'V'
150 #define fiSfsWaitForRspList 'I'
151 #define fiLgnBusyList 'J'
152 #define fiPortalBusyList 'g'
153 #define fiWait4ErqList 'o'
154 #define fiXchgAbortList 'U'
155 #define fiXchgWaitList 'b'
157 /* not used right now */
158 #define fiSfsDeferFreeList 'q'
159 #define fiDeferBusyList 'm'
160 #define fiInvalidList 'X'
161 #define fiInvalidatedList 'a'
162 #define fiTmpXchList 'n'
164 #define TMP_TRACE_BUFF_SIZE 32
165 #define FC_TRACE_LINE_SIZE 70
166 /******************************************************************************/
167 /* Macro Conventions: we are assuming that the macros will be called inside */
168 /* a function that already has a workable saRoot variable */
169 /******************************************************************************/
171 /******************************************************************************/
172 /* fiTraceState : ==> _!n_ _ss: XXXXXXXX _se: XXXXXXXX */
173 /* statemachine --^ currentstate--^ triggerevent--^ */
174 /* NOTE: shorthand forms available as macros below. */
175 /******************************************************************************/
176 #ifdef SA_ENABLE_TRACE_FUNCTIONS
179 void siResetTraceBuffer(agsaRoot_t *agRoot);
180 void siTraceFuncEnter(agsaRoot_t *agRoot, bit32 mask, bit32 fileid, char *funcid);
183 GLOBAL void siTraceFuncExit( agsaRoot_t *agRoot, bit32 mask, char fileid, char * funcid, char exitId );
186 void siTrace(agsaRoot_t *agRoot, bit32 mask, char *uId, bit32 value, bit32 dataSizeInBits);
187 void siTrace64(agsaRoot_t *agRoot, bit32 mask, char *uId, bit64 value, bit32 dataSizeInBits);
188 bit32 siGetCurrentTraceIndex(agsaRoot_t *agRoot);
189 void siTraceListRemove(agsaRoot_t *agRoot, bit32 mask, char listId, bitptr exchangeId);
190 void siTraceListAdd(agsaRoot_t *agRoot, bit32 mask, char listId, bitptr exchangeId);
191 void siTraceState(agsaRoot_t *agRoot, bit32 mask, bit32 statemachine, bit32 currentstate, bit32 triggerevent);
193 #define smTraceState(L,S,C,T) siTraceState(agRoot,L,S,C,T)
194 #define smTraceChipState(L,C,T) siTraceState(agRoot,L,fiTraceSmChip,C,T)
195 #define smTraceFabricState(L,C,T) siTraceState(agRoot,L,fiTraceSmFabr,C,T)
196 #define smTracePortState(L,C,T) siTraceState(agRoot,L,fiTraceSmPort,C,T)
197 #define smTraceLoginState(L,C,T) siTraceState(agRoot,L,fiTraceSmLogin,C,T)
198 #define smTraceXchgState(L,C,T) siTraceState(agRoot,L,fiTraceSmXchg,C,T)
199 #define smTraceDiscFabState(L,C,T) siTraceState(agRoot,L,fiTraceDiscFab,C,T)
200 #define smTraceDiscLoopState(L,C,T) siTraceState(agRoot,L,fiTraceDiscLoop,C,T)
201 #define smTraceFc2State(L,C,T) siTraceState(agRoot,L,fiTraceFc2,C,T)
202 #define smTraceScsiTgtState(L,C,T) siTraceState(agRoot,L,fiTraceTgtState,C,T)
203 #define smTraceScsiIniState(L,C,T) siTraceState(agRoot,L,fiTraceIniState,C,T)
205 #define smResetTraceBuffer(L) siResetTraceBuffer(L)
206 #define smTraceFuncEnter(L,I) siTraceFuncEnter(agRoot,L,siTraceFileID,I)
207 #define smTraceFuncExit(L,S,I) siTraceFuncExit(agRoot,L,siTraceFileID,I,S)
208 #define smGetCurrentTraceIndex(L) siGetCurrentTraceIndex(L)
209 #define smTraceListRemove(R,L,I,V) siTraceListRemove(R,L,I,V)
210 #define smTraceListAdd(R,L,I,V) siTraceListAdd(R,L,I,V)
212 #define smTrace(L,I,V) \
215 if (sizeof(V) == 8) {siTrace64(agRoot,L,I,(bit64)V,64);} \
216 else {siTrace(agRoot,L,I,(bit32)V,32);} \
223 #define siTraceState(agRoot,L,fiTraceSmXchg,C,T)
225 #define smTraceState(L,S,C,T)
226 #define smTraceChipState(L,C,T)
227 #define smTraceFabricState(L,C,T)
228 #define smTracePortState(L,C,T)
229 #define smTraceLoginState(L,C,T)
230 #define smTraceXchgState(L,C,T)
231 #define smTraceDiscFabState(L,C,T)
232 #define smTraceDiscLoopState(L,C,T)
233 #define smTraceFc2State(L,C,T)
234 #define smTraceScsiTgtState(L,C,T)
235 #define smTraceScsiIniState(L,C,T)
237 #define smResetTraceBuffer(agRoot)
238 #define smTraceFuncEnter(L,I)
239 #define smTraceFuncExit(L,S,I)
240 #define smGetCurrentTraceIndex(L)
241 #define smTraceListRemove(L,I,V)
242 #define smTraceListAdd(L,I,V)
244 #define smTrace(L,I,V)
248 struct hpTraceBufferParms_s {
251 bit32 CurrentTraceIndexWrapCount;
255 bit32 * pCurrentTraceIndex;
256 bit32 * pTraceIndexWrapCount;
259 typedef struct hpTraceBufferParms_s
260 hpTraceBufferParms_t;
262 #ifdef SA_ENABLE_TRACE_FUNCTIONS
264 GLOBAL void siTraceGetInfo(agsaRoot_t *agRoot, hpTraceBufferParms_t * pBParms);
266 #define smTraceGetInfo(R,P) siTraceGetInfo(R,P)
268 #define smTraceGetInfo(R,P)
272 void siEnableTracing ( agsaRoot_t *agRoot );
273 #ifdef SA_ENABLE_TRACE_FUNCTIONS
275 GLOBAL void siTraceSetMask(agsaRoot_t *agRoot, bit32 TraceMask );
277 #define smTraceSetMask(R,P) siTraceSetMask(R,P)
279 #define smTraceSetMask(R,P)
280 #endif /* SA_ENABLE_TRACE_FUNCTIONS */
282 #endif /* #ifndef __SPCDEBUG_H__ */