1*eef4f27bSRobert Mustacchi /* 2*eef4f27bSRobert Mustacchi * Copyright 2014-2017 Cavium, Inc. 3*eef4f27bSRobert Mustacchi * The contents of this file are subject to the terms of the Common Development 4*eef4f27bSRobert Mustacchi * and Distribution License, v.1, (the "License"). 5*eef4f27bSRobert Mustacchi * 6*eef4f27bSRobert Mustacchi * You may not use this file except in compliance with the License. 7*eef4f27bSRobert Mustacchi * 8*eef4f27bSRobert Mustacchi * You can obtain a copy of the License at available 9*eef4f27bSRobert Mustacchi * at http://opensource.org/licenses/CDDL-1.0 10*eef4f27bSRobert Mustacchi * 11*eef4f27bSRobert Mustacchi * See the License for the specific language governing permissions and 12*eef4f27bSRobert Mustacchi * limitations under the License. 13*eef4f27bSRobert Mustacchi */ 14*eef4f27bSRobert Mustacchi 15*eef4f27bSRobert Mustacchi /* 16*eef4f27bSRobert Mustacchi * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 17*eef4f27bSRobert Mustacchi */ 18*eef4f27bSRobert Mustacchi 19*eef4f27bSRobert Mustacchi #ifndef _DEBUG_H 20*eef4f27bSRobert Mustacchi #define _DEBUG_H 21*eef4f27bSRobert Mustacchi 22*eef4f27bSRobert Mustacchi 23*eef4f27bSRobert Mustacchi 24*eef4f27bSRobert Mustacchi /* 25*eef4f27bSRobert Mustacchi * Debug break and output routines. 26*eef4f27bSRobert Mustacchi */ 27*eef4f27bSRobert Mustacchi 28*eef4f27bSRobert Mustacchi void 29*eef4f27bSRobert Mustacchi debug_break(void *ctx); 30*eef4f27bSRobert Mustacchi 31*eef4f27bSRobert Mustacchi void debug_msg(void *ctx, unsigned long level, char *file, unsigned long line, 32*eef4f27bSRobert Mustacchi char *msg, ...); 33*eef4f27bSRobert Mustacchi 34*eef4f27bSRobert Mustacchi void debug_msgx(void *ctx, unsigned long level, char *msg, ...); 35*eef4f27bSRobert Mustacchi 36*eef4f27bSRobert Mustacchi 37*eef4f27bSRobert Mustacchi 38*eef4f27bSRobert Mustacchi /* 39*eef4f27bSRobert Mustacchi * Debug macros 40*eef4f27bSRobert Mustacchi */ 41*eef4f27bSRobert Mustacchi 42*eef4f27bSRobert Mustacchi /* Code paths. */ 43*eef4f27bSRobert Mustacchi #define CP_INIT 0x010000 /* Initialization */ 44*eef4f27bSRobert Mustacchi #define CP_SEND 0x020000 /* Transmit */ 45*eef4f27bSRobert Mustacchi #define CP_RCV 0x040000 /* Recieve */ 46*eef4f27bSRobert Mustacchi #define CP_INT 0x080000 /* Interrupt */ 47*eef4f27bSRobert Mustacchi #define CP_UINIT 0x100000 /* Unload */ 48*eef4f27bSRobert Mustacchi #define CP_RESET 0x200000 /* Reset */ 49*eef4f27bSRobert Mustacchi #define CP_GEN_BUF 0x400000 /* Generic buffer. */ 50*eef4f27bSRobert Mustacchi #define CP_ALL 0xffff0000 /* All code path */ 51*eef4f27bSRobert Mustacchi 52*eef4f27bSRobert Mustacchi #define CP_MASK 0xffff0000 53*eef4f27bSRobert Mustacchi 54*eef4f27bSRobert Mustacchi 55*eef4f27bSRobert Mustacchi /* Mess ge levels. */ 56*eef4f27bSRobert Mustacchi #define LV_VERBOSE 0x03 57*eef4f27bSRobert Mustacchi #define LV_INFORM 0x02 58*eef4f27bSRobert Mustacchi #define LV_WARN 0x01 59*eef4f27bSRobert Mustacchi #define LV_FATAL 0x00 60*eef4f27bSRobert Mustacchi 61*eef4f27bSRobert Mustacchi #define LV_MASK 0xffff 62*eef4f27bSRobert Mustacchi 63*eef4f27bSRobert Mustacchi 64*eef4f27bSRobert Mustacchi /* 65*eef4f27bSRobert Mustacchi * Code path and messsage level combined. These are the first argument 66*eef4f27bSRobert Mustacchi * of the DbgMessage macro. 67*eef4f27bSRobert Mustacchi */ 68*eef4f27bSRobert Mustacchi 69*eef4f27bSRobert Mustacchi #define VERBOSEi (CP_INIT | LV_VERBOSE) 70*eef4f27bSRobert Mustacchi #define INFORMi (CP_INIT | LV_INFORM) 71*eef4f27bSRobert Mustacchi #define WARNi (CP_INIT | LV_WARN) 72*eef4f27bSRobert Mustacchi 73*eef4f27bSRobert Mustacchi #define VERBOSEtx (CP_SEND | LV_VERBOSE) 74*eef4f27bSRobert Mustacchi #define INFORMtx (CP_SEND | LV_INFORM) 75*eef4f27bSRobert Mustacchi #define WARNtx (CP_SEND | LV_WARN) 76*eef4f27bSRobert Mustacchi 77*eef4f27bSRobert Mustacchi #define VERBOSErx (CP_RCV | LV_VERBOSE) 78*eef4f27bSRobert Mustacchi #define INFORMrx (CP_RCV | LV_INFORM) 79*eef4f27bSRobert Mustacchi #define WARNrx (CP_RCV | LV_WARN) 80*eef4f27bSRobert Mustacchi 81*eef4f27bSRobert Mustacchi #define VERBOSEint (CP_INT | LV_VERBOSE) 82*eef4f27bSRobert Mustacchi #define INFORMint (CP_INT | LV_INFORM) 83*eef4f27bSRobert Mustacchi #define WARNint (CP_INT | LV_WARN) 84*eef4f27bSRobert Mustacchi 85*eef4f27bSRobert Mustacchi #define VERBOSEu (CP_UINIT | LV_VERBOSE) 86*eef4f27bSRobert Mustacchi #define INFORMu (CP_UINIT | LV_INFORM) 87*eef4f27bSRobert Mustacchi #define WARNu (CP_UINIT | LV_WARN) 88*eef4f27bSRobert Mustacchi 89*eef4f27bSRobert Mustacchi #define VERBOSErs (CP_RESET | LV_VERBOSE) 90*eef4f27bSRobert Mustacchi #define INFORMrs (CP_RESET | LV_INFORM) 91*eef4f27bSRobert Mustacchi #define WARNrs (CP_RESET | LV_WARN) 92*eef4f27bSRobert Mustacchi 93*eef4f27bSRobert Mustacchi #define VERBOSEgb (CP_GEN_BUF | LV_VERBOSE) 94*eef4f27bSRobert Mustacchi #define INFORMgb (CP_GEN_BUF | LV_INFORM) 95*eef4f27bSRobert Mustacchi #define WARNgb (CP_GEN_BUF | LV_WARN) 96*eef4f27bSRobert Mustacchi 97*eef4f27bSRobert Mustacchi 98*eef4f27bSRobert Mustacchi #define FATAL (CP_ALL | LV_FATAL) 99*eef4f27bSRobert Mustacchi #define WARN (CP_ALL | LV_WARN) 100*eef4f27bSRobert Mustacchi #define INFORM (CP_ALL | LV_INFORM) 101*eef4f27bSRobert Mustacchi #define VERBOSE (CP_ALL | LV_VERBOSE) 102*eef4f27bSRobert Mustacchi 103*eef4f27bSRobert Mustacchi 104*eef4f27bSRobert Mustacchi #if DBG 105*eef4f27bSRobert Mustacchi 106*eef4f27bSRobert Mustacchi /* 107*eef4f27bSRobert Mustacchi * These constants control the output of messages. 108*eef4f27bSRobert Mustacchi * Set your debug message output level and code path here. 109*eef4f27bSRobert Mustacchi */ 110*eef4f27bSRobert Mustacchi #ifndef DBG_MSG_CP 111*eef4f27bSRobert Mustacchi #define DBG_MSG_CP CP_ALL /* Where to output messages. */ 112*eef4f27bSRobert Mustacchi #endif 113*eef4f27bSRobert Mustacchi 114*eef4f27bSRobert Mustacchi #ifndef DBG_MSG_LV 115*eef4f27bSRobert Mustacchi #define DBG_MSG_LV LV_VERBOSE /* Level of message output. */ 116*eef4f27bSRobert Mustacchi #endif 117*eef4f27bSRobert Mustacchi 118*eef4f27bSRobert Mustacchi 119*eef4f27bSRobert Mustacchi /* CSTYLED */ 120*eef4f27bSRobert Mustacchi #define STATIC 121*eef4f27bSRobert Mustacchi #define DbgBreak(_c) debug_break(_c) 122*eef4f27bSRobert Mustacchi 123*eef4f27bSRobert Mustacchi 124*eef4f27bSRobert Mustacchi #define CODE_PATH(_m) ((_m) & DBG_MSG_CP) 125*eef4f27bSRobert Mustacchi #define MSG_LEVEL(_m) ((_m) & LV_MASK) 126*eef4f27bSRobert Mustacchi #define LOG_MSG(_m) (CODE_PATH(_m) && \ 127*eef4f27bSRobert Mustacchi MSG_LEVEL(_m) <= DBG_MSG_LV) 128*eef4f27bSRobert Mustacchi 129*eef4f27bSRobert Mustacchi 130*eef4f27bSRobert Mustacchi /* BEGIN CSTYLED */ 131*eef4f27bSRobert Mustacchi #define DbgMessage(_c, _m, _s) \ 132*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 133*eef4f27bSRobert Mustacchi { \ 134*eef4f27bSRobert Mustacchi debug_msg(_c, _m, __FILE__, __LINE__, _s); \ 135*eef4f27bSRobert Mustacchi } 136*eef4f27bSRobert Mustacchi #define DbgMessage1(_c, _m, _s, _d1) \ 137*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 138*eef4f27bSRobert Mustacchi { \ 139*eef4f27bSRobert Mustacchi debug_msg(_c, _m, __FILE__, __LINE__, _s, _d1); \ 140*eef4f27bSRobert Mustacchi } 141*eef4f27bSRobert Mustacchi #define DbgMessage2(_c, _m, _s, _d1, _d2) \ 142*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 143*eef4f27bSRobert Mustacchi { \ 144*eef4f27bSRobert Mustacchi debug_msg(_c, _m, __FILE__, __LINE__, _s, _d1, _d2); \ 145*eef4f27bSRobert Mustacchi } 146*eef4f27bSRobert Mustacchi #define DbgMessage3(_c, _m, _s, _d1, _d2, _d3) \ 147*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 148*eef4f27bSRobert Mustacchi { \ 149*eef4f27bSRobert Mustacchi debug_msg(_c, _m, __FILE__, __LINE__, _s, _d1, _d2, _d3); \ 150*eef4f27bSRobert Mustacchi } 151*eef4f27bSRobert Mustacchi #define DbgMessage4(_c, _m, _s, _d1, _d2, _d3, _d4) \ 152*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 153*eef4f27bSRobert Mustacchi { \ 154*eef4f27bSRobert Mustacchi debug_msg(_c, _m, __FILE__, __LINE__, _s, _d1, _d2, _d3, _d4); \ 155*eef4f27bSRobert Mustacchi } 156*eef4f27bSRobert Mustacchi #define DbgMessage5(_c, _m, _s, _d1, _d2, _d3, _d4, _d5) \ 157*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 158*eef4f27bSRobert Mustacchi { \ 159*eef4f27bSRobert Mustacchi debug_msg(_c, _m, __FILE__, __LINE__, _s, _d1, _d2, _d3, _d4, _d5); \ 160*eef4f27bSRobert Mustacchi } 161*eef4f27bSRobert Mustacchi #define DbgMessage6(_c, _m, _s, _d1, _d2, _d3, _d4, _d5, _d6) \ 162*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 163*eef4f27bSRobert Mustacchi { \ 164*eef4f27bSRobert Mustacchi debug_msg(_c, _m, __FILE__, __LINE__, _s, _d1,_d2,_d3,_d4,_d5,_d6); \ 165*eef4f27bSRobert Mustacchi } 166*eef4f27bSRobert Mustacchi 167*eef4f27bSRobert Mustacchi #define DbgMessageX(_c, _m, _s) \ 168*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 169*eef4f27bSRobert Mustacchi { \ 170*eef4f27bSRobert Mustacchi debug_msgx(_c, _m, _s); \ 171*eef4f27bSRobert Mustacchi } 172*eef4f27bSRobert Mustacchi #define DbgMessageX1(_c, _m, _s, _d1) \ 173*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 174*eef4f27bSRobert Mustacchi { \ 175*eef4f27bSRobert Mustacchi debug_msgx(_c, _m, _s, _d1); \ 176*eef4f27bSRobert Mustacchi } 177*eef4f27bSRobert Mustacchi #define DbgMessageX2(_c, _m, _s, _d1, _d2) \ 178*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 179*eef4f27bSRobert Mustacchi { \ 180*eef4f27bSRobert Mustacchi debug_msgx(_c, _m, _s, _d1, _d2); \ 181*eef4f27bSRobert Mustacchi } 182*eef4f27bSRobert Mustacchi #define DbgMessageX3(_c, _m, _s, _d1, _d2, _d3) \ 183*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 184*eef4f27bSRobert Mustacchi { \ 185*eef4f27bSRobert Mustacchi debug_msgx(_c, _m, _s, _d1, _d2, _d3); \ 186*eef4f27bSRobert Mustacchi } 187*eef4f27bSRobert Mustacchi #define DbgMessageX4(_c, _m, _s, _d1, _d2, _d3, _d4) \ 188*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 189*eef4f27bSRobert Mustacchi { \ 190*eef4f27bSRobert Mustacchi debug_msgx(_c, _m, _s, _d1, _d2, _d3, _d4); \ 191*eef4f27bSRobert Mustacchi } 192*eef4f27bSRobert Mustacchi #define DbgMessageX5(_c, _m, _s, _d1, _d2, _d3, _d4, _d5) \ 193*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 194*eef4f27bSRobert Mustacchi { \ 195*eef4f27bSRobert Mustacchi debug_msgx(_c, _m, _s, _d1, _d2, _d3, _d4, _d5); \ 196*eef4f27bSRobert Mustacchi } 197*eef4f27bSRobert Mustacchi #define DbgMessageX6(_c, _m, _s, _d1, _d2, _d3, _d4, _d5, _d6) \ 198*eef4f27bSRobert Mustacchi if (LOG_MSG(_m)) \ 199*eef4f27bSRobert Mustacchi { \ 200*eef4f27bSRobert Mustacchi debug_msgx(_c, _m, _s, _d1,_d2,_d3,_d4,_d5,_d6); \ 201*eef4f27bSRobert Mustacchi } 202*eef4f27bSRobert Mustacchi 203*eef4f27bSRobert Mustacchi #define DbgBreakIf(_c) \ 204*eef4f27bSRobert Mustacchi if (_c) \ 205*eef4f27bSRobert Mustacchi { \ 206*eef4f27bSRobert Mustacchi debug_msg(NULL, FATAL, __FILE__, __LINE__, "if("#_c##")\n"); \ 207*eef4f27bSRobert Mustacchi debug_break(NULL); \ 208*eef4f27bSRobert Mustacchi } 209*eef4f27bSRobert Mustacchi 210*eef4f27bSRobert Mustacchi #define DbgBreakMsg(_m) debug_msg(NULL, FATAL, __FILE__, __LINE__, _m); \ 211*eef4f27bSRobert Mustacchi debug_break(NULL) 212*eef4f27bSRobert Mustacchi /* END CSTYLED */ 213*eef4f27bSRobert Mustacchi 214*eef4f27bSRobert Mustacchi 215*eef4f27bSRobert Mustacchi #else 216*eef4f27bSRobert Mustacchi 217*eef4f27bSRobert Mustacchi /* CSTYLED */ 218*eef4f27bSRobert Mustacchi #define STATIC static 219*eef4f27bSRobert Mustacchi 220*eef4f27bSRobert Mustacchi #define DbgBreak(_c) 221*eef4f27bSRobert Mustacchi 222*eef4f27bSRobert Mustacchi #define DbgMessage(_c, _m, _s) 223*eef4f27bSRobert Mustacchi #define DbgMessage1(_c, _m, _s, _d1) 224*eef4f27bSRobert Mustacchi #define DbgMessage2(_c, _m, _s, _d1, _d2) 225*eef4f27bSRobert Mustacchi #define DbgMessage3(_c, _m, _s, _d1, _d2, _d3) 226*eef4f27bSRobert Mustacchi #define DbgMessage4(_c, _m, _s, _d1, _d2, _d3, _d4) 227*eef4f27bSRobert Mustacchi #define DbgMessage5(_c, _m, _s, _d1, _d2, _d3, _d4, _d5) 228*eef4f27bSRobert Mustacchi #define DbgMessage6(_c, _m, _s, _d1, _d2, _d3, _d4, _d5, _d6) 229*eef4f27bSRobert Mustacchi 230*eef4f27bSRobert Mustacchi #define DbgMessageX(_c, _m, _s) 231*eef4f27bSRobert Mustacchi #define DbgMessageX1(_c, _m, _s, _d1) 232*eef4f27bSRobert Mustacchi #define DbgMessageX2(_c, _m, _s, _d1, _d2) 233*eef4f27bSRobert Mustacchi #define DbgMessageX3(_c, _m, _s, _d1, _d2, _d3) 234*eef4f27bSRobert Mustacchi #define DbgMessageX4(_c, _m, _s, _d1, _d2, _d3, _d4) 235*eef4f27bSRobert Mustacchi #define DbgMessageX5(_c, _m, _s, _d1, _d2, _d3, _d4, _d5) 236*eef4f27bSRobert Mustacchi #define DbgMessageX6(_c, _m, _s, _d1, _d2, _d3, _d4, _d5, _d6) 237*eef4f27bSRobert Mustacchi 238*eef4f27bSRobert Mustacchi #define DbgBreakIf(_c) 239*eef4f27bSRobert Mustacchi #define DbgBreakMsg(_m) 240*eef4f27bSRobert Mustacchi 241*eef4f27bSRobert Mustacchi #endif 242*eef4f27bSRobert Mustacchi 243*eef4f27bSRobert Mustacchi #endif /* _DEBUG_H */ 244