mptdebug.h revision 5c1b91b9923d1b3d33576e391ff7b587bdff7a3e
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-2007 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 62/* 63 * CONFIG_FUSION_LOGGING - enabled in Kconfig 64 */ 65 66#ifdef CONFIG_FUSION_LOGGING 67#define MPT_CHECK_LOGGING(IOC, CMD, BITS) \ 68{ \ 69 if (IOC->debug_level & BITS) \ 70 CMD; \ 71} 72#else 73#define MPT_CHECK_LOGGING(IOC, CMD, BITS) 74#endif 75 76 77/* 78 * debug macros 79 */ 80 81#define dprintk(IOC, CMD) \ 82 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG) 83 84#define dsgprintk(IOC, CMD) \ 85 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SG) 86 87#define devtprintk(IOC, CMD) \ 88 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EVENTS) 89 90#define devtverboseprintk(IOC, CMD) \ 91 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_VERBOSE_EVENTS) 92 93#define dinitprintk(IOC, CMD) \ 94 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_INIT) 95 96#define dexitprintk(IOC, CMD) \ 97 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EXIT) 98 99#define dfailprintk(IOC, CMD) \ 100 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FAIL) 101 102#define dtmprintk(IOC, CMD) \ 103 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_TM) 104 105#define ddvprintk(IOC, CMD) \ 106 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DV) 107 108#define dreplyprintk(IOC, CMD) \ 109 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_REPLY) 110 111#define dhsprintk(IOC, CMD) \ 112 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_HANDSHAKE) 113 114#define dcprintk(IOC, CMD) \ 115 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_CONFIG) 116 117#define ddlprintk(IOC, CMD) \ 118 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DL) 119 120#define drsprintk(IOC, CMD) \ 121 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_RESET) 122 123#define dsprintk(IOC, CMD) \ 124 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SCSI) 125 126#define dctlprintk(IOC, CMD) \ 127 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_IOCTL) 128 129#define dfcprintk(IOC, CMD) \ 130 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FC) 131 132#define dsasprintk(IOC, CMD) \ 133 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS) 134 135#define dsaswideprintk(IOC, CMD) \ 136 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS_WIDE) 137 138 139 140/* 141 * Verbose logging 142 */ 143#if defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING) 144static inline void 145DBG_DUMP_FW_DOWNLOAD(MPT_ADAPTER *ioc, u32 *mfp, int numfrags) 146{ 147 int i; 148 149 if (!(ioc->debug_level & MPT_DEBUG)) 150 return; 151 printk(KERN_DEBUG "F/W download request:\n"); 152 for (i=0; i < 7+numfrags*2; i++) 153 printk(" %08x", le32_to_cpu(mfp[i])); 154 printk("\n"); 155} 156 157static inline void 158DBG_DUMP_PUT_MSG_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 159{ 160 int ii, n; 161 162 if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) 163 return; 164 printk(KERN_DEBUG "%s: About to Put msg frame @ %p:\n", 165 ioc->name, mfp); 166 n = ioc->req_sz/4 - 1; 167 while (mfp[n] == 0) 168 n--; 169 for (ii=0; ii<=n; ii++) { 170 if (ii && ((ii%8)==0)) 171 printk("\n"); 172 printk(" %08x", le32_to_cpu(mfp[ii])); 173 } 174 printk("\n"); 175} 176 177static inline void 178DBG_DUMP_FW_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 179{ 180 int i, n; 181 182 if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) 183 return; 184 n = 10; 185 printk(KERN_INFO " "); 186 for (i = 0; i < n; i++) 187 printk(" %08x", le32_to_cpu(mfp[i])); 188 printk("\n"); 189} 190 191static inline void 192DBG_DUMP_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 193{ 194 int i, n; 195 196 if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) 197 return; 198 n = 24; 199 for (i=0; i<n; i++) { 200 if (i && ((i%8)==0)) 201 printk("\n"); 202 printk("%08x ", le32_to_cpu(mfp[i])); 203 } 204 printk("\n"); 205} 206 207static inline void 208DBG_DUMP_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 209{ 210 int i, n; 211 212 if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) 213 return; 214 n = (le32_to_cpu(mfp[0]) & 0x00FF0000) >> 16; 215 printk(KERN_INFO " "); 216 for (i=0; i<n; i++) 217 printk(" %08x", le32_to_cpu(mfp[i])); 218 printk("\n"); 219} 220 221static inline void 222DBG_DUMP_REQUEST_FRAME_HDR(MPT_ADAPTER *ioc, u32 *mfp) 223{ 224 int i, n; 225 226 if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) 227 return; 228 n = 3; 229 printk(KERN_INFO " "); 230 for (i=0; i<n; i++) 231 printk(" %08x", le32_to_cpu(mfp[i])); 232 printk("\n"); 233} 234 235static inline void 236DBG_DUMP_TM_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 237{ 238 int i, n; 239 240 if (!(ioc->debug_level & MPT_DEBUG_TM)) 241 return; 242 n = 13; 243 printk(KERN_DEBUG "TM_REQUEST:\n"); 244 for (i=0; i<n; i++) { 245 if (i && ((i%8)==0)) 246 printk("\n"); 247 printk("%08x ", le32_to_cpu(mfp[i])); 248 } 249 printk("\n"); 250} 251 252static inline void 253DBG_DUMP_TM_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp) 254{ 255 int i, n; 256 257 if (!(ioc->debug_level & MPT_DEBUG_TM)) 258 return; 259 n = (le32_to_cpu(mfp[0]) & 0x00FF0000) >> 16; 260 printk(KERN_DEBUG "TM_REPLY MessageLength=%d:\n", n); 261 for (i=0; i<n; i++) { 262 if (i && ((i%8)==0)) 263 printk("\n"); 264 printk(" %08x", le32_to_cpu(mfp[i])); 265 } 266 printk("\n"); 267} 268 269#define dmfprintk(IOC, CMD) \ 270 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME) 271 272# else /* ifdef MPT_DEBUG_MF */ 273 274#define DBG_DUMP_FW_DOWNLOAD(IOC, mfp, numfrags) 275#define DBG_DUMP_PUT_MSG_FRAME(IOC, mfp) 276#define DBG_DUMP_FW_REQUEST_FRAME(IOC, mfp) 277#define DBG_DUMP_REQUEST_FRAME(IOC, mfp) 278#define DBG_DUMP_REPLY_FRAME(IOC, mfp) 279#define DBG_DUMP_REQUEST_FRAME_HDR(IOC, mfp) 280#define DBG_DUMP_TM_REQUEST_FRAME(IOC, mfp) 281#define DBG_DUMP_TM_REPLY_FRAME(IOC, mfp) 282 283#define dmfprintk(IOC, CMD) \ 284 MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME) 285 286#endif /* defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING) */ 287 288#endif /* ifndef MPTDEBUG_H_INCLUDED */ 289