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