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.
 
   6  *  Copyright (c) 1999-2008 LSI Corporation
 
   7  *  (mailto:DL-MPTFusionLinux@lsi.com)
 
  10 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
 
  12 #ifndef MPTDEBUG_H_INCLUDED
 
  13 #define MPTDEBUG_H_INCLUDED
 
  16  * debug level can be programmed on the fly via SysFS (hex values)
 
  18  * Example:  (programming for MPT_DEBUG_EVENTS on host 5)
 
  20  * echo 8 > /sys/class/scsi_host/host5/debug_level
 
  22  * --------------------------------------------------------
 
  23  * mpt_debug_level - command line parameter
 
  24  * this allow enabling debug at driver load time (for all iocs)
 
  26  * Example  (programming for MPT_DEBUG_EVENTS)
 
  28  * insmod mptbase.ko mpt_debug_level=8
 
  30  * --------------------------------------------------------
 
  31  * CONFIG_FUSION_LOGGING - enables compiling debug into driver
 
  32  * this can be enabled in the driver Makefile
 
  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.
 
  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
 
  63  * CONFIG_FUSION_LOGGING - enabled in Kconfig
 
  66 #ifdef CONFIG_FUSION_LOGGING
 
  67 #define MPT_CHECK_LOGGING(IOC, CMD, BITS)                       \
 
  69         if (IOC->debug_level & BITS)                            \
 
  73 #define MPT_CHECK_LOGGING(IOC, CMD, BITS)
 
  81 #define dprintk(IOC, CMD)                       \
 
  82         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG)
 
  84 #define dsgprintk(IOC, CMD)                     \
 
  85         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SG)
 
  87 #define devtprintk(IOC, CMD)                    \
 
  88         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EVENTS)
 
  90 #define devtverboseprintk(IOC, CMD)             \
 
  91         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_VERBOSE_EVENTS)
 
  93 #define dinitprintk(IOC, CMD)                   \
 
  94         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_INIT)
 
  96 #define dexitprintk(IOC, CMD)                   \
 
  97         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EXIT)
 
  99 #define dfailprintk(IOC, CMD)                   \
 
 100         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FAIL)
 
 102 #define dtmprintk(IOC, CMD)                     \
 
 103         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_TM)
 
 105 #define ddvprintk(IOC, CMD)                     \
 
 106         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DV)
 
 108 #define dreplyprintk(IOC, CMD)                  \
 
 109         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_REPLY)
 
 111 #define dhsprintk(IOC, CMD)                     \
 
 112         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_HANDSHAKE)
 
 114 #define dcprintk(IOC, CMD)                      \
 
 115         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_CONFIG)
 
 117 #define ddlprintk(IOC, CMD)                     \
 
 118         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DL)
 
 120 #define drsprintk(IOC, CMD)                     \
 
 121         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_RESET)
 
 123 #define dsprintk(IOC, CMD)                      \
 
 124         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SCSI)
 
 126 #define dctlprintk(IOC, CMD)                    \
 
 127         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_IOCTL)
 
 129 #define dfcprintk(IOC, CMD)                     \
 
 130         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FC)
 
 132 #define dsasprintk(IOC, CMD)                    \
 
 133         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS)
 
 135 #define dsaswideprintk(IOC, CMD)                \
 
 136         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS_WIDE)
 
 143 #if defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING)
 
 145 DBG_DUMP_FW_DOWNLOAD(MPT_ADAPTER *ioc, u32  *mfp, int numfrags)
 
 149         if (!(ioc->debug_level & MPT_DEBUG))
 
 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]));
 
 158 DBG_DUMP_PUT_MSG_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
 
 162         if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
 
 164         printk(KERN_DEBUG "%s: About to Put msg frame @ %p:\n",
 
 166         n = ioc->req_sz/4 - 1;
 
 169         for (ii=0; ii<=n; ii++) {
 
 170                 if (ii && ((ii%8)==0))
 
 172                 printk(" %08x", le32_to_cpu(mfp[ii]));
 
 178 DBG_DUMP_FW_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
 
 182         if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
 
 185         printk(KERN_INFO " ");
 
 186         for (i = 0; i < n; i++)
 
 187                 printk(" %08x", le32_to_cpu(mfp[i]));
 
 192 DBG_DUMP_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
 
 196         if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
 
 199         for (i=0; i<n; i++) {
 
 202                 printk("%08x ", le32_to_cpu(mfp[i]));
 
 208 DBG_DUMP_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
 
 212         if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
 
 214         n = (le32_to_cpu(mfp[0]) & 0x00FF0000) >> 16;
 
 215         printk(KERN_INFO " ");
 
 217                 printk(" %08x", le32_to_cpu(mfp[i]));
 
 222 DBG_DUMP_REQUEST_FRAME_HDR(MPT_ADAPTER *ioc, u32 *mfp)
 
 226         if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
 
 229         printk(KERN_INFO " ");
 
 231                 printk(" %08x", le32_to_cpu(mfp[i]));
 
 236 DBG_DUMP_TM_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
 
 240         if (!(ioc->debug_level & MPT_DEBUG_TM))
 
 243         printk(KERN_DEBUG "TM_REQUEST:\n");
 
 244         for (i=0; i<n; i++) {
 
 247                 printk("%08x ", le32_to_cpu(mfp[i]));
 
 253 DBG_DUMP_TM_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
 
 257         if (!(ioc->debug_level & MPT_DEBUG_TM))
 
 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++) {
 
 264                 printk(" %08x", le32_to_cpu(mfp[i]));
 
 269 #define dmfprintk(IOC, CMD)                     \
 
 270         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME)
 
 272 # else /* ifdef MPT_DEBUG_MF */
 
 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)
 
 283 #define dmfprintk(IOC, CMD)                     \
 
 284         MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME)
 
 286 #endif /* defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING) */
 
 288 #endif /* ifndef MPTDEBUG_H_INCLUDED */