1 /* 2 * linux/drivers/message/fusion/mptdebug.h 3 * For use with LSI PCI chip/adapter(s) 4 * running LSI Fusion MPT (Message Passing Technology) firmware. 5 * 6 * Copyright (c) 1999-2008 LSI Corporation 7 * (mailto:DL-MPTFusionLinux@lsi.com) 8 * 9 */ 10 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 11 12 #ifndef MPTDEBUG_H_INCLUDED 13 #define MPTDEBUG_H_INCLUDED 14 15 /* 16 * debug level can be programmed on the fly via SysFS (hex values) 17 * 18 * Example: (programming for MPT_DEBUG_EVENTS on host 5) 19 * 20 * echo 8 > /sys/class/scsi_host/host5/debug_level 21 * 22 * -------------------------------------------------------- 23 * mpt_debug_level - command line parameter 24 * this allow enabling debug at driver load time (for all iocs) 25 * 26 * Example (programming for MPT_DEBUG_EVENTS) 27 * 28 * insmod mptbase.ko mpt_debug_level=8 29 * 30 * -------------------------------------------------------- 31 * CONFIG_FUSION_LOGGING - enables compiling debug into driver 32 * this can be enabled in the driver Makefile 33 * 34 * 35 * -------------------------------------------------------- 36 * Please note most debug prints are set to logging priority = debug 37 * This is the lowest level, and most verbose. Please refer to manual 38 * pages for syslogd or syslogd-ng on how to configure this. 39 */ 40 41 #define MPT_DEBUG 0x00000001 42 #define MPT_DEBUG_MSG_FRAME 0x00000002 43 #define MPT_DEBUG_SG 0x00000004 44 #define MPT_DEBUG_EVENTS 0x00000008 45 #define MPT_DEBUG_VERBOSE_EVENTS 0x00000010 46 #define MPT_DEBUG_INIT 0x00000020 47 #define MPT_DEBUG_EXIT 0x00000040 48 #define MPT_DEBUG_FAIL 0x00000080 49 #define MPT_DEBUG_TM 0x00000100 50 #define MPT_DEBUG_DV 0x00000200 51 #define MPT_DEBUG_REPLY 0x00000400 52 #define MPT_DEBUG_HANDSHAKE 0x00000800 53 #define MPT_DEBUG_CONFIG 0x00001000 54 #define MPT_DEBUG_DL 0x00002000 55 #define MPT_DEBUG_RESET 0x00008000 56 #define MPT_DEBUG_SCSI 0x00010000 57 #define MPT_DEBUG_IOCTL 0x00020000 58 #define MPT_DEBUG_FC 0x00080000 59 #define MPT_DEBUG_SAS 0x00100000 60 #define MPT_DEBUG_SAS_WIDE 0x00200000 61 #define MPT_DEBUG_36GB_MEM 0x00400000 62 63 /* 64 * CONFIG_FUSION_LOGGING - enabled in Kconfig 65 */ 66 67 #ifdef CONFIG_FUSION_LOGGING 68 #define MPT_CHECK_LOGGING(IOC, CMD, BITS) \ 69 { \ 70 if (IOC->debug_level & BITS) \ 71 CMD; \ 72 } 73 #else 74 #define MPT_CHECK_LOGGING(IOC, CMD, BITS) 75 #endif 76 77 78 /* 79 * debug macros 80 */ 81 82 #define dprintk(IOC, CMD) \ 83 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG) 84 85 #define dsgprintk(IOC, CMD) \ 86 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SG) 87 88 #define devtprintk(IOC, CMD) \ 89 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EVENTS) 90 91 #define devtverboseprintk(IOC, CMD) \ 92 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_VERBOSE_EVENTS) 93 94 #define dinitprintk(IOC, CMD) \ 95 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_INIT) 96 97 #define dexitprintk(IOC, CMD) \ 98 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EXIT) 99 100 #define dfailprintk(IOC, CMD) \ 101 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FAIL) 102 103 #define dtmprintk(IOC, CMD) \ 104 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_TM) 105 106 #define ddvprintk(IOC, CMD) \ 107 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DV) 108 109 #define dreplyprintk(IOC, CMD) \ 110 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_REPLY) 111 112 #define dhsprintk(IOC, CMD) \ 113 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_HANDSHAKE) 114 115 #define dcprintk(IOC, CMD) \ 116 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_CONFIG) 117 118 #define ddlprintk(IOC, CMD) \ 119 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DL) 120 121 #define drsprintk(IOC, CMD) \ 122 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_RESET) 123 124 #define dsprintk(IOC, CMD) \ 125 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SCSI) 126 127 #define dctlprintk(IOC, CMD) \ 128 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_IOCTL) 129 130 #define dfcprintk(IOC, CMD) \ 131 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FC) 132 133 #define dsasprintk(IOC, CMD) \ 134 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS) 135 136 #define dsaswideprintk(IOC, CMD) \ 137 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS_WIDE) 138 139 #define d36memprintk(IOC, CMD) \ 140 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_36GB_MEM) 141 142 143 /* 144 * Verbose logging 145 */ 146 #if defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING) 147 static inline void 148 DBG_DUMP_FW_DOWNLOAD(MPT_ADAPTER *ioc, u32 *mfp, int numfrags) 149 { 150 int i; 151 152 if (!(ioc->debug_level & MPT_DEBUG)) 153 return; 154 printk(KERN_DEBUG "F/W download request:\n"); 155 for (i=0; i < 7+numfrags*2; i++) 156 printk(" %08x", le32_to_cpu(mfp[i])); 157 printk("\n"); 158 } 159 160 static inline void 161 DBG_DUMP_PUT_MSG_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 162 { 163 int ii, n; 164 165 if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) 166 return; 167 printk(KERN_DEBUG "%s: About to Put msg frame @ %p:\n", 168 ioc->name, mfp); 169 n = ioc->req_sz/4 - 1; 170 while (mfp[n] == 0) 171 n--; 172 for (ii=0; ii<=n; ii++) { 173 if (ii && ((ii%8)==0)) 174 printk("\n"); 175 printk(" %08x", le32_to_cpu(mfp[ii])); 176 } 177 printk("\n"); 178 } 179 180 static inline void 181 DBG_DUMP_FW_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 182 { 183 int i, n; 184 185 if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) 186 return; 187 n = 10; 188 printk(KERN_INFO " "); 189 for (i = 0; i < n; i++) 190 printk(" %08x", le32_to_cpu(mfp[i])); 191 printk("\n"); 192 } 193 194 static inline void 195 DBG_DUMP_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 196 { 197 int i, n; 198 199 if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) 200 return; 201 n = 24; 202 for (i=0; i<n; i++) { 203 if (i && ((i%8)==0)) 204 printk("\n"); 205 printk("%08x ", le32_to_cpu(mfp[i])); 206 } 207 printk("\n"); 208 } 209 210 static inline void 211 DBG_DUMP_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 212 { 213 int i, n; 214 215 if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) 216 return; 217 n = (le32_to_cpu(mfp[0]) & 0x00FF0000) >> 16; 218 printk(KERN_INFO " "); 219 for (i=0; i<n; i++) 220 printk(" %08x", le32_to_cpu(mfp[i])); 221 printk("\n"); 222 } 223 224 static inline void 225 DBG_DUMP_REQUEST_FRAME_HDR(MPT_ADAPTER *ioc, u32 *mfp) 226 { 227 int i, n; 228 229 if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) 230 return; 231 n = 3; 232 printk(KERN_INFO " "); 233 for (i=0; i<n; i++) 234 printk(" %08x", le32_to_cpu(mfp[i])); 235 printk("\n"); 236 } 237 238 static inline void 239 DBG_DUMP_TM_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 240 { 241 int i, n; 242 243 if (!(ioc->debug_level & MPT_DEBUG_TM)) 244 return; 245 n = 13; 246 printk(KERN_DEBUG "TM_REQUEST:\n"); 247 for (i=0; i<n; i++) { 248 if (i && ((i%8)==0)) 249 printk("\n"); 250 printk("%08x ", le32_to_cpu(mfp[i])); 251 } 252 printk("\n"); 253 } 254 255 static inline void 256 DBG_DUMP_TM_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 257 { 258 int i, n; 259 260 if (!(ioc->debug_level & MPT_DEBUG_TM)) 261 return; 262 n = (le32_to_cpu(mfp[0]) & 0x00FF0000) >> 16; 263 printk(KERN_DEBUG "TM_REPLY MessageLength=%d:\n", n); 264 for (i=0; i<n; i++) { 265 if (i && ((i%8)==0)) 266 printk("\n"); 267 printk(" %08x", le32_to_cpu(mfp[i])); 268 } 269 printk("\n"); 270 } 271 272 #define dmfprintk(IOC, CMD) \ 273 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME) 274 275 # else /* ifdef MPT_DEBUG_MF */ 276 277 #define DBG_DUMP_FW_DOWNLOAD(IOC, mfp, numfrags) 278 #define DBG_DUMP_PUT_MSG_FRAME(IOC, mfp) 279 #define DBG_DUMP_FW_REQUEST_FRAME(IOC, mfp) 280 #define DBG_DUMP_REQUEST_FRAME(IOC, mfp) 281 #define DBG_DUMP_REPLY_FRAME(IOC, mfp) 282 #define DBG_DUMP_REQUEST_FRAME_HDR(IOC, mfp) 283 #define DBG_DUMP_TM_REQUEST_FRAME(IOC, mfp) 284 #define DBG_DUMP_TM_REPLY_FRAME(IOC, mfp) 285 286 #define dmfprintk(IOC, CMD) \ 287 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME) 288 289 #endif /* defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING) */ 290 291 #endif /* ifndef MPTDEBUG_H_INCLUDED */ 292