mpidebug.h revision 285809
1/*******************************************************************************
2*Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved.
3*
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
7*following disclaimer.
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.
11*
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
20*
21* $FreeBSD$
22*
23********************************************************************************/
24
25/*******************************************************************************/
26/*! \file mpidebug.h
27 *  \brief The file defines the debug constants and structures
28 *
29 */
30/*******************************************************************************/
31
32#ifndef __MPIDEBUG_H__
33#define __MPIDEBUG_H__
34
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 */
42
43typedef struct mpiObDebugTraceEntry_s
44{
45  bit64       Time;
46  bit32       QNum;
47  bit32       pici;
48  void *      pEntry;
49  bit32       Iomb[MPI_DEBUG_TRACE_OB_IOMB_SIZE/4];
50} mpiDebugObTraceEntry_t;
51
52typedef struct mpiIbDebugTraceEntry_s
53{
54  bit64       Time;
55  bit32       QNum;
56  bit32       pici;
57  void *      pEntry;
58  bit32       Iomb[MPI_DEBUG_TRACE_IB_IOMB_SIZE/4];
59} mpiDebugIbTraceEntry_t;
60
61typedef struct mpiIbDebugTrace_s
62{
63  bit32                 Idx;
64  bit32                 Pad;
65  mpiDebugIbTraceEntry_t  Data[MPI_DEBUG_TRACE_BUFFER_MAX];
66} mpiDebugIbTrace_t;
67
68typedef struct mpiObDebugTrace_s
69{
70  bit32                 Idx;
71  bit32                 Pad;
72  mpiDebugObTraceEntry_t  Data[MPI_DEBUG_TRACE_BUFFER_MAX];
73} mpiDebugObTrace_t;
74
75void mpiTraceInit(void);
76void mpiTraceAdd(bit32 q,bit32 pici,bit32 ib, void *iomb, bit32 numBytes);
77
78#endif /* __MPIDEBUG_H__ */
79
80
81
82
83/********************************************************************
84**  File that contains debug-specific APIs ( driver tracing etc )
85*********************************************************************/
86
87#ifndef __SPCDEBUG_H__
88#define __SPCDEBUG_H__
89
90
91/*
92** console and trace levels
93*/
94
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
104
105#define smTraceDestBuffer    0x00000001
106#define smTraceDestRegister  0x00000002
107#define smTraceDestDebugger  0x00000004
108
109
110#define siTraceDestMask     (smTraceDestBuffer    |  \
111                             smTraceDestRegister  |  \
112                             smTraceDestDebugger)
113
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     */
121/* buffer.                                           */
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     */
126/* buffer.                                           */
127#define hpDBG_TraceBufferUseSequenceStamp 0x20000000
128
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'
140
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'
156
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'
163
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/******************************************************************************/
170
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
177
178
179void siResetTraceBuffer(agsaRoot_t  *agRoot);
180void siTraceFuncEnter(agsaRoot_t  *agRoot, bit32 mask, bit32 fileid, char *funcid);
181
182
183GLOBAL void siTraceFuncExit(   agsaRoot_t  *agRoot,  bit32   mask, char  fileid, char  * funcid, char  exitId );
184
185
186void siTrace(agsaRoot_t  *agRoot, bit32 mask, char *uId, bit32 value, bit32 dataSizeInBits);
187void siTrace64(agsaRoot_t  *agRoot, bit32 mask, char *uId, bit64 value, bit32 dataSizeInBits);
188bit32 siGetCurrentTraceIndex(agsaRoot_t  *agRoot);
189void siTraceListRemove(agsaRoot_t  *agRoot, bit32 mask, char listId, bitptr exchangeId);
190void siTraceListAdd(agsaRoot_t  *agRoot, bit32 mask, char listId, bitptr exchangeId);
191void siTraceState(agsaRoot_t  *agRoot, bit32 mask, bit32 statemachine, bit32 currentstate, bit32 triggerevent);
192
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)
204
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)
211
212#define smTrace(L,I,V)                                        \
213    /*lint -e506 */                                           \
214    /*lint -e774 */                                           \
215    if (sizeof(V) == 8) {siTrace64(agRoot,L,I,(bit64)V,64);}  \
216    else {siTrace(agRoot,L,I,(bit32)V,32);}                   \
217    /*lint +e506 */                                           \
218    /*lint +e774 */
219
220
221#else
222
223#define siTraceState(agRoot,L,fiTraceSmXchg,C,T)
224
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)
236
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)
243
244#define smTrace(L,I,V)
245
246#endif
247
248struct hpTraceBufferParms_s {
249  bit32 TraceCompiled;
250  bit32 BufferSize;
251  bit32 CurrentTraceIndexWrapCount;
252  bit32 CurrentIndex;
253  bit32 TraceWrap;
254  bit8  * pTrace;
255  bit32 * pCurrentTraceIndex;
256  bit32 * pTraceIndexWrapCount;
257  bit32 * pTraceMask;
258};
259typedef struct hpTraceBufferParms_s
260               hpTraceBufferParms_t;
261
262#ifdef SA_ENABLE_TRACE_FUNCTIONS
263
264GLOBAL void siTraceGetInfo(agsaRoot_t  *agRoot, hpTraceBufferParms_t * pBParms);
265
266#define smTraceGetInfo(R,P)  siTraceGetInfo(R,P)
267#else
268#define smTraceGetInfo(R,P)
269#endif
270
271
272void siEnableTracing ( agsaRoot_t  *agRoot );
273#ifdef SA_ENABLE_TRACE_FUNCTIONS
274
275GLOBAL void siTraceSetMask(agsaRoot_t  *agRoot, bit32 TraceMask  );
276
277#define smTraceSetMask(R,P)  siTraceSetMask(R,P)
278#else
279#define smTraceSetMask(R,P)
280#endif /* SA_ENABLE_TRACE_FUNCTIONS */
281
282#endif /* #ifndef __SPCDEBUG_H__ */
283
284