diff options
Diffstat (limited to 'sys/dev/pms/RefTisa/sallsdk/spc/mpidebug.h')
-rw-r--r-- | sys/dev/pms/RefTisa/sallsdk/spc/mpidebug.h | 283 |
1 files changed, 283 insertions, 0 deletions
diff --git a/sys/dev/pms/RefTisa/sallsdk/spc/mpidebug.h b/sys/dev/pms/RefTisa/sallsdk/spc/mpidebug.h new file mode 100644 index 0000000..e62a80c --- /dev/null +++ b/sys/dev/pms/RefTisa/sallsdk/spc/mpidebug.h @@ -0,0 +1,283 @@ +/******************************************************************************* +*Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved. +* +*Redistribution and use in source and binary forms, with or without modification, are permitted provided +*that the following conditions are met: +*1. Redistributions of source code must retain the above copyright notice, this list of conditions and the +*following disclaimer. +*2. Redistributions in binary form must reproduce the above copyright notice, +*this list of conditions and the following disclaimer in the documentation and/or other materials provided +*with the distribution. +* +*THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED +*WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +*FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +*FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +*NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +*BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +*LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +*SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE +* +* $FreeBSD$ +* +********************************************************************************/ + +/*******************************************************************************/ +/*! \file mpidebug.h + * \brief The file defines the debug constants and structures + * + */ +/*******************************************************************************/ + +#ifndef __MPIDEBUG_H__ +#define __MPIDEBUG_H__ + +/*******************************************************************************/ +#define MPI_DEBUG_TRACE_BUFFER_MAX 1024 +#define MPI_DEBUG_TRACE_OB_IOMB_SIZE 128 /* 64 */ +#define MPI_DEBUG_TRACE_IB_IOMB_SIZE 128 /* 64 */ +#define MPI_DEBUG_TRACE_IBQ 1 +#define MPI_DEBUG_TRACE_OBQ 0 +#define MPI_DEBUG_TRACE_QNUM_ERROR 100 /* Added to Qnumber to indicate error */ + +typedef struct mpiObDebugTraceEntry_s +{ + bit64 Time; + bit32 QNum; + bit32 pici; + void * pEntry; + bit32 Iomb[MPI_DEBUG_TRACE_OB_IOMB_SIZE/4]; +} mpiDebugObTraceEntry_t; + +typedef struct mpiIbDebugTraceEntry_s +{ + bit64 Time; + bit32 QNum; + bit32 pici; + void * pEntry; + bit32 Iomb[MPI_DEBUG_TRACE_IB_IOMB_SIZE/4]; +} mpiDebugIbTraceEntry_t; + +typedef struct mpiIbDebugTrace_s +{ + bit32 Idx; + bit32 Pad; + mpiDebugIbTraceEntry_t Data[MPI_DEBUG_TRACE_BUFFER_MAX]; +} mpiDebugIbTrace_t; + +typedef struct mpiObDebugTrace_s +{ + bit32 Idx; + bit32 Pad; + mpiDebugObTraceEntry_t Data[MPI_DEBUG_TRACE_BUFFER_MAX]; +} mpiDebugObTrace_t; + +void mpiTraceInit(void); +void mpiTraceAdd(bit32 q,bit32 pici,bit32 ib, void *iomb, bit32 numBytes); + +#endif /* __MPIDEBUG_H__ */ + + + + +/******************************************************************** +** File that contains debug-specific APIs ( driver tracing etc ) +*********************************************************************/ + +#ifndef __SPCDEBUG_H__ +#define __SPCDEBUG_H__ + + +/* +** console and trace levels +*/ + +#define hpDBG_ALWAYS 0x0000ffff +#define hpDBG_IOMB 0x00000040 +#define hpDBG_REGISTERS 0x00000020 +#define hpDBG_TICK_INT 0x00000010 +#define hpDBG_SCREAM 0x00000008 +#define hpDBG_VERY_LOUD 0x00000004 +#define hpDBG_LOUD 0x00000002 +#define hpDBG_ERROR 0x00000001 +#define hpDBG_NEVER 0x00000000 + +#define smTraceDestBuffer 0x00000001 +#define smTraceDestRegister 0x00000002 +#define smTraceDestDebugger 0x00000004 + + +#define siTraceDestMask (smTraceDestBuffer | \ + smTraceDestRegister | \ + smTraceDestDebugger) + +/* Trace buffer will continuously */ +/* trace and wrap-around on itself */ +/* when it reaches the end */ +#define hpDBG_TraceBufferWrapAround 0x80000000 +/* This features enables logging of trace time */ +/* stamps. Only certain key routines use this */ +/* feature because it tends to clog up the trace */ +/* buffer. */ +#define hpDBG_TraceBufferUseTimeStamp 0x40000000 +/* This features enables logging of trace sequential */ +/* stamps. Only certain key routines use this */ +/* feature because it tends to clog up the trace */ +/* buffer. */ +#define hpDBG_TraceBufferUseSequenceStamp 0x20000000 + +/* Trace IDs of various state machines */ +#define fiTraceSmChip 'C' +#define fiTraceSmPort 'P' +#define fiTraceSmLogin 'L' +#define fiTraceSmXchg 'X' +#define fiTraceSmFabr 'F' +#define fiTraceDiscFab 'D' +#define fiTraceDiscLoop 'M' +#define fiTraceFc2 'A' +#define fiTraceTgtState 'S' +#define fiTraceIniState 'I' + +/* Trace IDs of various queues */ +#define fiSfsFreeList 'Z' +#define fiSestFreeList 'W' +#define fiOsSfsFreeList 'G' +#define fiLgnFreeList 'K' +#define fiPortalFreeList 'l' +#define fiBusyList 'N' +#define fiOsSfsAllocList 'B' +#define fiTimerList 'V' +#define fiSfsWaitForRspList 'I' +#define fiLgnBusyList 'J' +#define fiPortalBusyList 'g' +#define fiWait4ErqList 'o' +#define fiXchgAbortList 'U' +#define fiXchgWaitList 'b' + +/* not used right now */ +#define fiSfsDeferFreeList 'q' +#define fiDeferBusyList 'm' +#define fiInvalidList 'X' +#define fiInvalidatedList 'a' +#define fiTmpXchList 'n' + +#define TMP_TRACE_BUFF_SIZE 32 +#define FC_TRACE_LINE_SIZE 70 +/******************************************************************************/ +/* Macro Conventions: we are assuming that the macros will be called inside */ +/* a function that already has a workable saRoot variable */ +/******************************************************************************/ + +/******************************************************************************/ +/* fiTraceState : ==> _!n_ _ss: XXXXXXXX _se: XXXXXXXX */ +/* statemachine --^ currentstate--^ triggerevent--^ */ +/* NOTE: shorthand forms available as macros below. */ +/******************************************************************************/ +#ifdef SA_ENABLE_TRACE_FUNCTIONS + + +void siResetTraceBuffer(agsaRoot_t *agRoot); +void siTraceFuncEnter(agsaRoot_t *agRoot, bit32 mask, bit32 fileid, char *funcid); + + +GLOBAL void siTraceFuncExit( agsaRoot_t *agRoot, bit32 mask, char fileid, char * funcid, char exitId ); + + +void siTrace(agsaRoot_t *agRoot, bit32 mask, char *uId, bit32 value, bit32 dataSizeInBits); +void siTrace64(agsaRoot_t *agRoot, bit32 mask, char *uId, bit64 value, bit32 dataSizeInBits); +bit32 siGetCurrentTraceIndex(agsaRoot_t *agRoot); +void siTraceListRemove(agsaRoot_t *agRoot, bit32 mask, char listId, bitptr exchangeId); +void siTraceListAdd(agsaRoot_t *agRoot, bit32 mask, char listId, bitptr exchangeId); +void siTraceState(agsaRoot_t *agRoot, bit32 mask, bit32 statemachine, bit32 currentstate, bit32 triggerevent); + +#define smTraceState(L,S,C,T) siTraceState(agRoot,L,S,C,T) +#define smTraceChipState(L,C,T) siTraceState(agRoot,L,fiTraceSmChip,C,T) +#define smTraceFabricState(L,C,T) siTraceState(agRoot,L,fiTraceSmFabr,C,T) +#define smTracePortState(L,C,T) siTraceState(agRoot,L,fiTraceSmPort,C,T) +#define smTraceLoginState(L,C,T) siTraceState(agRoot,L,fiTraceSmLogin,C,T) +#define smTraceXchgState(L,C,T) siTraceState(agRoot,L,fiTraceSmXchg,C,T) +#define smTraceDiscFabState(L,C,T) siTraceState(agRoot,L,fiTraceDiscFab,C,T) +#define smTraceDiscLoopState(L,C,T) siTraceState(agRoot,L,fiTraceDiscLoop,C,T) +#define smTraceFc2State(L,C,T) siTraceState(agRoot,L,fiTraceFc2,C,T) +#define smTraceScsiTgtState(L,C,T) siTraceState(agRoot,L,fiTraceTgtState,C,T) +#define smTraceScsiIniState(L,C,T) siTraceState(agRoot,L,fiTraceIniState,C,T) + +#define smResetTraceBuffer(L) siResetTraceBuffer(L) +#define smTraceFuncEnter(L,I) siTraceFuncEnter(agRoot,L,siTraceFileID,I) +#define smTraceFuncExit(L,S,I) siTraceFuncExit(agRoot,L,siTraceFileID,I,S) +#define smGetCurrentTraceIndex(L) siGetCurrentTraceIndex(L) +#define smTraceListRemove(R,L,I,V) siTraceListRemove(R,L,I,V) +#define smTraceListAdd(R,L,I,V) siTraceListAdd(R,L,I,V) + +#define smTrace(L,I,V) \ + /*lint -e506 */ \ + /*lint -e774 */ \ + if (sizeof(V) == 8) {siTrace64(agRoot,L,I,(bit64)V,64);} \ + else {siTrace(agRoot,L,I,(bit32)V,32);} \ + /*lint +e506 */ \ + /*lint +e774 */ + + +#else + +#define siTraceState(agRoot,L,fiTraceSmXchg,C,T) + +#define smTraceState(L,S,C,T) +#define smTraceChipState(L,C,T) +#define smTraceFabricState(L,C,T) +#define smTracePortState(L,C,T) +#define smTraceLoginState(L,C,T) +#define smTraceXchgState(L,C,T) +#define smTraceDiscFabState(L,C,T) +#define smTraceDiscLoopState(L,C,T) +#define smTraceFc2State(L,C,T) +#define smTraceScsiTgtState(L,C,T) +#define smTraceScsiIniState(L,C,T) + +#define smResetTraceBuffer(agRoot) +#define smTraceFuncEnter(L,I) +#define smTraceFuncExit(L,S,I) +#define smGetCurrentTraceIndex(L) +#define smTraceListRemove(L,I,V) +#define smTraceListAdd(L,I,V) + +#define smTrace(L,I,V) + +#endif + +struct hpTraceBufferParms_s { + bit32 TraceCompiled; + bit32 BufferSize; + bit32 CurrentTraceIndexWrapCount; + bit32 CurrentIndex; + bit32 TraceWrap; + bit8 * pTrace; + bit32 * pCurrentTraceIndex; + bit32 * pTraceIndexWrapCount; + bit32 * pTraceMask; +}; +typedef struct hpTraceBufferParms_s + hpTraceBufferParms_t; + +#ifdef SA_ENABLE_TRACE_FUNCTIONS + +GLOBAL void siTraceGetInfo(agsaRoot_t *agRoot, hpTraceBufferParms_t * pBParms); + +#define smTraceGetInfo(R,P) siTraceGetInfo(R,P) +#else +#define smTraceGetInfo(R,P) +#endif + + +void siEnableTracing ( agsaRoot_t *agRoot ); +#ifdef SA_ENABLE_TRACE_FUNCTIONS + +GLOBAL void siTraceSetMask(agsaRoot_t *agRoot, bit32 TraceMask ); + +#define smTraceSetMask(R,P) siTraceSetMask(R,P) +#else +#define smTraceSetMask(R,P) +#endif /* SA_ENABLE_TRACE_FUNCTIONS */ + +#endif /* #ifndef __SPCDEBUG_H__ */ + |