Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
Linus Torvalds [Mon, 30 Jul 2007 00:22:03 +0000 (17:22 -0700)]
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6: (28 commits)
  [SCSI] mpt fusion: Changes in mptctl.c for logging support
  [SCSI] mpt fusion: Changes in mptfc.c mptlan.c mptsas.c and mptspi.c for logging support
  [SCSI] mpt fusion: Changes in mptscsih.c for logging support
  [SCSI] mpt fusion: Changes in mptbase.c for logging support
  [SCSI] mpt fusion: logging support in Kconfig, Makefile, mptbase.h and addition of mptdebug.h
  [SCSI] libsas: Fix potential NULL dereference in sas_smp_get_phy_events()
  [SCSI] bsg: Fix build for CONFIG_BLOCK=n
  [SCSI] aacraid: fix Sunrise Lake reset handling
  [SCSI] aacraid: add SCSI SYNCHONIZE_CACHE range checking
  [SCSI] add easyRAID to the no report luns blacklist
  [SCSI] advansys: lindent and other large, uninteresting changes
  [SCSI] aic79xx, aic7xxx: Fix incorrect width setting
  [SCSI] qla2xxx: fix to honor ignored parameters in sysfs attributes
  [SCSI] aacraid: draw line in sand, sundry cleanup and version update
  [SCSI] iscsi_tcp: Turn off bounce buffers
  [SCSI] libiscsi: fix cmd seqeunce number checking
  [SCSI] iscsi_tcp, ib_iser Enable module refcounting for iscsi host template
  [SCSI] libiscsi: make sure session is not blocked when removing host
  [SCSI] libsas: Remove PCI dependencies
  [SCSI] simscsi: convert to use the data buffer accessors
  ...

39 files changed:
arch/ia64/hp/sim/simscsi.c
block/bsg.c
drivers/infiniband/ulp/iser/iscsi_iser.c
drivers/message/fusion/Kconfig
drivers/message/fusion/Makefile
drivers/message/fusion/mptbase.c
drivers/message/fusion/mptbase.h
drivers/message/fusion/mptctl.c
drivers/message/fusion/mptdebug.h [new file with mode: 0644]
drivers/message/fusion/mptfc.c
drivers/message/fusion/mptlan.c
drivers/message/fusion/mptsas.c
drivers/message/fusion/mptscsih.c
drivers/message/fusion/mptspi.c
drivers/scsi/aacraid/aachba.c
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/linit.c
drivers/scsi/aacraid/nark.c
drivers/scsi/aacraid/rkt.c
drivers/scsi/aacraid/rx.c
drivers/scsi/advansys.c
drivers/scsi/aic7xxx/aic79xx_osm.c
drivers/scsi/aic7xxx/aic7xxx_osm.c
drivers/scsi/aic94xx/aic94xx_init.c
drivers/scsi/iscsi_tcp.c
drivers/scsi/libiscsi.c
drivers/scsi/libsas/sas_ata.c
drivers/scsi/libsas/sas_discover.c
drivers/scsi/libsas/sas_dump.c
drivers/scsi/libsas/sas_expander.c
drivers/scsi/qla2xxx/qla_attr.c
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_isr.c
drivers/scsi/scsi_devinfo.c
drivers/scsi/sym53c8xx_2/sym_glue.c
include/linux/bsg.h
include/scsi/libiscsi.h
include/scsi/libsas.h

index 64248b5..e62694f 100644 (file)
@@ -122,48 +122,22 @@ simscsi_biosparam (struct scsi_device *sdev, struct block_device *n,
 }
 
 static void
-simscsi_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset, unsigned long len)
-{
-       struct disk_stat stat;
-       struct disk_req req;
-
-       req.addr = __pa(sc->request_buffer);
-       req.len  = len;                 /* # of bytes to transfer */
-
-       if (sc->request_bufflen < req.len)
-               return;
-
-       stat.fd = desc[sc->device->id];
-       if (DBG)
-               printk("simscsi_%s @ %lx (off %lx)\n",
-                      mode == SSC_READ ? "read":"write", req.addr, offset);
-       ia64_ssc(stat.fd, 1, __pa(&req), offset, mode);
-       ia64_ssc(__pa(&stat), 0, 0, 0, SSC_WAIT_COMPLETION);
-
-       if (stat.count == req.len) {
-               sc->result = GOOD;
-       } else {
-               sc->result = DID_ERROR << 16;
-       }
-}
-
-static void
 simscsi_sg_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset)
 {
-       int list_len = sc->use_sg;
-       struct scatterlist *sl = (struct scatterlist *)sc->request_buffer;
+       int i;
+       struct scatterlist *sl;
        struct disk_stat stat;
        struct disk_req req;
 
        stat.fd = desc[sc->device->id];
 
-       while (list_len) {
+       scsi_for_each_sg(sc, sl, scsi_sg_count(sc), i) {
                req.addr = __pa(page_address(sl->page) + sl->offset);
                req.len  = sl->length;
                if (DBG)
                        printk("simscsi_sg_%s @ %lx (off %lx) use_sg=%d len=%d\n",
                               mode == SSC_READ ? "read":"write", req.addr, offset,
-                              list_len, sl->length);
+                              scsi_sg_count(sc) - i, sl->length);
                ia64_ssc(stat.fd, 1, __pa(&req), offset, mode);
                ia64_ssc(__pa(&stat), 0, 0, 0, SSC_WAIT_COMPLETION);
 
@@ -173,8 +147,6 @@ simscsi_sg_readwrite (struct scsi_cmnd *sc, int mode, unsigned long offset)
                        return;
                }
                offset +=  sl->length;
-               sl++;
-               list_len--;
        }
        sc->result = GOOD;
 }
@@ -190,10 +162,7 @@ simscsi_readwrite6 (struct scsi_cmnd *sc, int mode)
        unsigned long offset;
 
        offset = (((sc->cmnd[1] & 0x1f) << 16) | (sc->cmnd[2] << 8) | sc->cmnd[3])*512;
-       if (sc->use_sg > 0)
-               simscsi_sg_readwrite(sc, mode, offset);
-       else
-               simscsi_readwrite(sc, mode, offset, sc->cmnd[4]*512);
+       simscsi_sg_readwrite(sc, mode, offset);
 }
 
 static size_t
@@ -230,26 +199,21 @@ simscsi_readwrite10 (struct scsi_cmnd *sc, int mode)
                | ((unsigned long)sc->cmnd[3] << 16)
                | ((unsigned long)sc->cmnd[4] <<  8) 
                | ((unsigned long)sc->cmnd[5] <<  0))*512UL;
-       if (sc->use_sg > 0)
-               simscsi_sg_readwrite(sc, mode, offset);
-       else
-               simscsi_readwrite(sc, mode, offset, ((sc->cmnd[7] << 8) | sc->cmnd[8])*512);
+       simscsi_sg_readwrite(sc, mode, offset);
 }
 
 static void simscsi_fillresult(struct scsi_cmnd *sc, char *buf, unsigned len)
 {
 
-       int scatterlen = sc->use_sg;
+       int i;
+       unsigned thislen;
        struct scatterlist *slp;
 
-       if (scatterlen == 0)
-               memcpy(sc->request_buffer, buf, len);
-       else for (slp = (struct scatterlist *)sc->request_buffer;
-                 scatterlen-- > 0 && len > 0; slp++) {
-               unsigned thislen = min(len, slp->length);
-
+       scsi_for_each_sg(sc, slp, scsi_sg_count(sc), i) {
+               if (!len)
+                       break;
+               thislen = min(len, slp->length);
                memcpy(page_address(slp->page) + slp->offset, buf, thislen);
-               slp++;
                len -= thislen;
        }
 }
@@ -275,7 +239,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
        if (target_id <= 15 && sc->device->lun == 0) {
                switch (sc->cmnd[0]) {
                      case INQUIRY:
-                       if (sc->request_bufflen < 35) {
+                       if (scsi_bufflen(sc) < 35) {
                                break;
                        }
                        sprintf (fname, "%s%c", simscsi_root, 'a' + target_id);
@@ -328,7 +292,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
                        break;
 
                      case READ_CAPACITY:
-                       if (desc[target_id] < 0 || sc->request_bufflen < 8) {
+                       if (desc[target_id] < 0 || scsi_bufflen(sc) < 8) {
                                break;
                        }
                        buf = localbuf;
@@ -350,7 +314,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
                      case MODE_SENSE:
                      case MODE_SENSE_10:
                        /* sd.c uses this to determine whether disk does write-caching. */
-                       simscsi_fillresult(sc, (char *)empty_zero_page, sc->request_bufflen);
+                       simscsi_fillresult(sc, (char *)empty_zero_page, scsi_bufflen(sc));
                        sc->result = GOOD;
                        break;
 
index 3b2f052..d60eee5 100644 (file)
@@ -9,13 +9,6 @@
  *  archive for more details.
  *
  */
-/*
- * TODO
- *     - Should this get merged, block/scsi_ioctl.c will be migrated into
- *       this file. To keep maintenance down, it's easier to have them
- *       seperated right now.
- *
- */
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/file.h>
@@ -24,6 +17,7 @@
 #include <linux/cdev.h>
 #include <linux/percpu.h>
 #include <linux/uio.h>
+#include <linux/idr.h>
 #include <linux/bsg.h>
 
 #include <scsi/scsi.h>
@@ -70,13 +64,12 @@ enum {
 #endif
 
 static DEFINE_MUTEX(bsg_mutex);
-static int bsg_device_nr, bsg_minor_idx;
+static DEFINE_IDR(bsg_minor_idr);
 
 #define BSG_LIST_ARRAY_SIZE    8
 static struct hlist_head bsg_device_list[BSG_LIST_ARRAY_SIZE];
 
 static struct class *bsg_class;
-static LIST_HEAD(bsg_class_list);
 static int bsg_major;
 
 static struct kmem_cache *bsg_cmd_cachep;
@@ -92,7 +85,6 @@ struct bsg_command {
        struct bio *bidi_bio;
        int err;
        struct sg_io_v4 hdr;
-       struct sg_io_v4 __user *uhdr;
        char sense[SCSI_SENSE_BUFFERSIZE];
 };
 
@@ -620,7 +612,6 @@ static int __bsg_write(struct bsg_device *bd, const char __user *buf,
                        break;
                }
 
-               bc->uhdr = (struct sg_io_v4 __user *) buf;
                if (copy_from_user(&bc->hdr, buf, sizeof(bc->hdr))) {
                        ret = -EFAULT;
                        break;
@@ -781,23 +772,18 @@ static struct bsg_device *__bsg_get_device(int minor)
 
 static struct bsg_device *bsg_get_device(struct inode *inode, struct file *file)
 {
-       struct bsg_device *bd = __bsg_get_device(iminor(inode));
-       struct bsg_class_device *bcd, *__bcd;
+       struct bsg_device *bd;
+       struct bsg_class_device *bcd;
 
+       bd = __bsg_get_device(iminor(inode));
        if (bd)
                return bd;
 
        /*
         * find the class device
         */
-       bcd = NULL;
        mutex_lock(&bsg_mutex);
-       list_for_each_entry(__bcd, &bsg_class_list, list) {
-               if (__bcd->minor == iminor(inode)) {
-                       bcd = __bcd;
-                       break;
-               }
-       }
+       bcd = idr_find(&bsg_minor_idr, iminor(inode));
        mutex_unlock(&bsg_mutex);
 
        if (!bcd)
@@ -936,13 +922,12 @@ void bsg_unregister_queue(struct request_queue *q)
                return;
 
        mutex_lock(&bsg_mutex);
+       idr_remove(&bsg_minor_idr, bcd->minor);
        sysfs_remove_link(&q->kobj, "bsg");
        class_device_unregister(bcd->class_dev);
        put_device(bcd->dev);
        bcd->class_dev = NULL;
        bcd->dev = NULL;
-       list_del_init(&bcd->list);
-       bsg_device_nr--;
        mutex_unlock(&bsg_mutex);
 }
 EXPORT_SYMBOL_GPL(bsg_unregister_queue);
@@ -950,9 +935,9 @@ EXPORT_SYMBOL_GPL(bsg_unregister_queue);
 int bsg_register_queue(struct request_queue *q, struct device *gdev,
                       const char *name)
 {
-       struct bsg_class_device *bcd, *__bcd;
+       struct bsg_class_device *bcd;
        dev_t dev;
-       int ret = -EMFILE;
+       int ret, minor;
        struct class_device *class_dev = NULL;
        const char *devname;
 
@@ -969,28 +954,26 @@ int bsg_register_queue(struct request_queue *q, struct device *gdev,
 
        bcd = &q->bsg_dev;
        memset(bcd, 0, sizeof(*bcd));
-       INIT_LIST_HEAD(&bcd->list);
 
        mutex_lock(&bsg_mutex);
-       if (bsg_device_nr == BSG_MAX_DEVS) {
-               printk(KERN_ERR "bsg: too many bsg devices\n");
-               goto err;
-       }
 
-retry:
-       list_for_each_entry(__bcd, &bsg_class_list, list) {
-               if (__bcd->minor == bsg_minor_idx) {
-                       bsg_minor_idx++;
-                       if (bsg_minor_idx == BSG_MAX_DEVS)
-                               bsg_minor_idx = 0;
-                       goto retry;
-               }
+       ret = idr_pre_get(&bsg_minor_idr, GFP_KERNEL);
+       if (!ret) {
+               ret = -ENOMEM;
+               goto unlock;
        }
 
-       bcd->minor = bsg_minor_idx++;
-       if (bsg_minor_idx == BSG_MAX_DEVS)
-               bsg_minor_idx = 0;
+       ret = idr_get_new(&bsg_minor_idr, bcd, &minor);
+       if (ret < 0)
+               goto unlock;
 
+       if (minor >= BSG_MAX_DEVS) {
+               printk(KERN_ERR "bsg: too many bsg devices\n");
+               ret = -EINVAL;
+               goto remove_idr;
+       }
+
+       bcd->minor = minor;
        bcd->queue = q;
        bcd->dev = get_device(gdev);
        dev = MKDEV(bsg_major, bcd->minor);
@@ -998,27 +981,26 @@ retry:
                                        devname);
        if (IS_ERR(class_dev)) {
                ret = PTR_ERR(class_dev);
-               goto err_put;
+               goto put_dev;
        }
        bcd->class_dev = class_dev;
 
        if (q->kobj.sd) {
                ret = sysfs_create_link(&q->kobj, &bcd->class_dev->kobj, "bsg");
                if (ret)
-                       goto err_unregister;
+                       goto unregister_class_dev;
        }
 
-       list_add_tail(&bcd->list, &bsg_class_list);
-       bsg_device_nr++;
-
        mutex_unlock(&bsg_mutex);
        return 0;
 
-err_unregister:
+unregister_class_dev:
        class_device_unregister(class_dev);
-err_put:
+put_dev:
        put_device(gdev);
-err:
+remove_idr:
+       idr_remove(&bsg_minor_idr, minor);
+unlock:
        mutex_unlock(&bsg_mutex);
        return ret;
 }
index 5db3143..bad8dac 100644 (file)
@@ -548,6 +548,7 @@ iscsi_iser_ep_disconnect(__u64 ep_handle)
 }
 
 static struct scsi_host_template iscsi_iser_sht = {
+       .module                 = THIS_MODULE,
        .name                   = "iSCSI Initiator over iSER, v." DRV_VER,
        .queuecommand           = iscsi_queuecommand,
        .can_queue              = ISCSI_DEF_XMIT_CMDS_MAX - 1,
index 4494e0f..f55cc03 100644 (file)
@@ -102,4 +102,18 @@ config FUSION_LAN
 
          If unsure whether you really want or need this, say N.
 
+config FUSION_LOGGING
+       bool "Fusion MPT logging facility"
+       depends on FUSION
+       ---help---
+         This turns on a logging facility that can be used to debug a number
+         of Fusion MPT related problems.
+
+         The debug level can be programmed on the fly via SysFS (hex values)
+
+         echo [level] > /sys/class/scsi_host/host#/debug_level
+
+         There are various debug levels that an be found in the source:
+         file:drivers/message/fusion/mptdebug.h
+
 endmenu
index 6003b46..95c9532 100644 (file)
@@ -1,39 +1,8 @@
 # Fusion MPT drivers; recognized debug defines...
-#  MPT general:
-#EXTRA_CFLAGS += -DMPT_DEBUG
-#EXTRA_CFLAGS += -DMPT_DEBUG_MSG_FRAME
-#EXTRA_CFLAGS += -DMPT_DEBUG_SG
-#EXTRA_CFLAGS += -DMPT_DEBUG_EVENTS
-#EXTRA_CFLAGS += -DMPT_DEBUG_VERBOSE_EVENTS
-#EXTRA_CFLAGS += -DMPT_DEBUG_INIT
-#EXTRA_CFLAGS += -DMPT_DEBUG_EXIT
-#EXTRA_CFLAGS += -DMPT_DEBUG_FAIL
-#EXTRA_CFLAGS += -DMPT_DEBUG_DV
-#EXTRA_CFLAGS += -DMPT_DEBUG_TM
-#EXTRA_CFLAGS += -DMPT_DEBUG_REPLY
 
-#
-# driver/module specifics...
-#
-#  For mptbase:
-#CFLAGS_mptbase.o += -DMPT_DEBUG_HANDSHAKE
-#CFLAGS_mptbase.o += -DMPT_DEBUG_CONFIG
-#CFLAGS_mptbase.o += -DMPT_DEBUG_DL
-#CFLAGS_mptbase.o += -DMPT_DEBUG_IRQ
-#CFLAGS_mptbase.o += -DMPT_DEBUG_RESET
-#
-#  For mptscsih:
-#CFLAGS_mptscsih.o += -DMPT_DEBUG_SCSI
-#
-#  For mptctl:
-#CFLAGS_mptctl.o += -DMPT_DEBUG_IOCTL
-#
-#  For mptfc:
-#CFLAGS_mptfc.o += -DMPT_DEBUG_FC
-
-#  For mptsas:
-#CFLAGS_mptsas.o += -DMPT_DEBUG_SAS
-#CFLAGS_mptsas.o += -DMPT_DEBUG_SAS_WIDE
+# enable verbose logging
+# CONFIG_FUSION_LOGGING needs to be enabled in Kconfig
+#EXTRA_CFLAGS += -DMPT_DEBUG_VERBOSE
 
 
 #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-} LSI_LOGIC
index 04f75e2..e866dac 100644 (file)
@@ -87,6 +87,10 @@ static int mpt_channel_mapping;
 module_param(mpt_channel_mapping, int, 0);
 MODULE_PARM_DESC(mpt_channel_mapping, " Mapping id's to channels (default=0)");
 
+static int mpt_debug_level;
+module_param(mpt_debug_level, int, 0);
+MODULE_PARM_DESC(mpt_debug_level, " debug level - refer to mptdebug.h - (default=0)");
+
 #ifdef MFCNT
 static int mfcounter = 0;
 #define PRINT_MF_COUNT 20000
@@ -179,9 +183,7 @@ static void mpt_get_fw_exp_ver(char *buf, MPT_ADAPTER *ioc);
 
 //int          mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag);
 static int     ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *evReply, int *evHandlers);
-#ifdef MPT_DEBUG_REPLY
 static void    mpt_iocstatus_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf);
-#endif
 static void    mpt_fc_log_info(MPT_ADAPTER *ioc, u32 log_info);
 static void    mpt_spi_log_info(MPT_ADAPTER *ioc, u32 log_info);
 static void    mpt_sas_log_info(MPT_ADAPTER *ioc, u32 log_info);
@@ -229,7 +231,7 @@ mpt_turbo_reply(MPT_ADAPTER *ioc, u32 pa)
        int req_idx = 0;
        int cb_idx;
 
-       dmfprintk((MYIOC_s_INFO_FMT "Got TURBO reply req_idx=%08x\n",
+       dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Got TURBO reply req_idx=%08x\n",
                                ioc->name, pa));
 
        switch (pa >> MPI_CONTEXT_REPLY_TYPE_SHIFT) {
@@ -312,9 +314,9 @@ mpt_reply(MPT_ADAPTER *ioc, u32 pa)
        cb_idx = mr->u.frame.hwhdr.msgctxu.fld.cb_idx;
        mf = MPT_INDEX_2_MFPTR(ioc, req_idx);
 
-       dmfprintk((MYIOC_s_INFO_FMT "Got non-TURBO reply=%p req_idx=%x cb_idx=%x Function=%x\n",
+       dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Got non-TURBO reply=%p req_idx=%x cb_idx=%x Function=%x\n",
                        ioc->name, mr, req_idx, cb_idx, mr->u.hdr.Function));
-       DBG_DUMP_REPLY_FRAME(mr)
+       DBG_DUMP_REPLY_FRAME(ioc, (u32 *)mr)
 
         /*  Check/log IOC log info
         */
@@ -329,10 +331,8 @@ mpt_reply(MPT_ADAPTER *ioc, u32 pa)
                        mpt_sas_log_info(ioc, log_info);
        }
 
-#ifdef MPT_DEBUG_REPLY
        if (ioc_stat & MPI_IOCSTATUS_MASK)
                mpt_iocstatus_info(ioc, (u32)ioc_stat, mf);
-#endif
 
        /*  Check for (valid) IO callback!  */
        if (cb_idx < 1 || cb_idx >= MPT_MAX_PROTOCOL_DRIVERS ||
@@ -414,17 +414,17 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply)
        int freereq = 1;
        u8 func;
 
-       dmfprintk((MYIOC_s_INFO_FMT "mpt_base_reply() called\n", ioc->name));
-
-#if defined(MPT_DEBUG_MSG_FRAME)
-       if (!(reply->u.hdr.MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY)) {
-               dmfprintk((KERN_INFO MYNAM ": Original request frame (@%p) header\n", mf));
-               DBG_DUMP_REQUEST_FRAME_HDR(mf)
+       dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_base_reply() called\n", ioc->name));
+#ifdef CONFIG_FUSION_LOGGING
+       if ((ioc->debug_level & MPT_DEBUG_MSG_FRAME) &&
+                       !(reply->u.hdr.MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY)) {
+               dmfprintk(ioc, printk(KERN_INFO MYNAM ": Original request frame (@%p) header\n", mf));
+               DBG_DUMP_REQUEST_FRAME_HDR(ioc, (u32 *)mf)
        }
 #endif
 
        func = reply->u.hdr.Function;
-       dmfprintk((MYIOC_s_INFO_FMT "mpt_base_reply, Function=%02Xh\n",
+       dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_base_reply, Function=%02Xh\n",
                        ioc->name, func));
 
        if (func == MPI_FUNCTION_EVENT_NOTIFICATION) {
@@ -435,7 +435,7 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply)
                results = ProcessEventNotification(ioc, pEvReply, &evHandlers);
                if (results != evHandlers) {
                        /* CHECKME! Any special handling needed here? */
-                       devtverboseprintk((MYIOC_s_WARN_FMT "Called %d event handlers, sum results = %d\n",
+                       devtverboseprintk(ioc, printk(MYIOC_s_WARN_FMT "Called %d event handlers, sum results = %d\n",
                                        ioc->name, evHandlers, results));
                }
 
@@ -446,7 +446,7 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply)
                if (pEvReply->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY) {
                        freereq = 0;
                } else {
-                       devtverboseprintk((MYIOC_s_WARN_FMT "EVENT_NOTIFICATION reply %p returns Request frame\n",
+                       devtverboseprintk(ioc, printk(MYIOC_s_WARN_FMT "EVENT_NOTIFICATION reply %p returns Request frame\n",
                                ioc->name, pEvReply));
                }
 
@@ -455,13 +455,13 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply)
 #endif
 
        } else if (func == MPI_FUNCTION_EVENT_ACK) {
-               dprintk((MYIOC_s_INFO_FMT "mpt_base_reply, EventAck reply received\n",
+               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_base_reply, EventAck reply received\n",
                                ioc->name));
        } else if (func == MPI_FUNCTION_CONFIG) {
                CONFIGPARMS *pCfg;
                unsigned long flags;
 
-               dcprintk((MYIOC_s_INFO_FMT "config_complete (mf=%p,mr=%p)\n",
+               dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "config_complete (mf=%p,mr=%p)\n",
                                ioc->name, mf, reply));
 
                pCfg = * ((CONFIGPARMS **)((u8 *) mf + ioc->req_sz - sizeof(void *)));
@@ -484,7 +484,7 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply)
                                u16              status;
 
                                status = le16_to_cpu(pReply->IOCStatus) & MPI_IOCSTATUS_MASK;
-                               dcprintk((KERN_NOTICE "  IOCStatus=%04xh, IOCLogInfo=%08xh\n",
+                               dcprintk(ioc, printk(KERN_NOTICE "  IOCStatus=%04xh, IOCLogInfo=%08xh\n",
                                     status, le32_to_cpu(pReply->IOCLogInfo)));
 
                                pCfg->status = status;
@@ -789,7 +789,7 @@ mpt_get_msg_frame(int handle, MPT_ADAPTER *ioc)
                printk(KERN_INFO "MF Count 0x%x Max 0x%x \n", ioc->mfcnt, ioc->req_depth);
 #endif
 
-       dmfprintk((KERN_INFO MYNAM ": %s: mpt_get_msg_frame(%d,%d), got mf=%p\n",
+       dmfprintk(ioc, printk(KERN_INFO MYNAM ": %s: mpt_get_msg_frame(%d,%d), got mf=%p\n",
                        ioc->name, handle, ioc->id, mf));
        return mf;
 }
@@ -820,27 +820,10 @@ mpt_put_msg_frame(int handle, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)
        mf->u.frame.hwhdr.msgctxu.fld.req_idx = cpu_to_le16(req_idx);
        mf->u.frame.hwhdr.msgctxu.fld.rsvd = 0;
 
-#ifdef MPT_DEBUG_MSG_FRAME
-       {
-               u32     *m = mf->u.frame.hwhdr.__hdr;
-               int      ii, n;
-
-               printk(KERN_INFO MYNAM ": %s: About to Put msg frame @ %p:\n" KERN_INFO " ",
-                               ioc->name, m);
-               n = ioc->req_sz/4 - 1;
-               while (m[n] == 0)
-                       n--;
-               for (ii=0; ii<=n; ii++) {
-                       if (ii && ((ii%8)==0))
-                               printk("\n" KERN_INFO " ");
-                       printk(" %08x", le32_to_cpu(m[ii]));
-               }
-               printk("\n");
-       }
-#endif
+       DBG_DUMP_PUT_MSG_FRAME(ioc, (u32 *)mf);
 
        mf_dma_addr = (ioc->req_frames_low_dma + req_offset) | ioc->RequestNB[req_idx];
-       dsgprintk((MYIOC_s_INFO_FMT "mf_dma_addr=%x req_idx=%d RequestNB=%x\n", ioc->name, mf_dma_addr, req_idx, ioc->RequestNB[req_idx]));
+       dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mf_dma_addr=%x req_idx=%d RequestNB=%x\n", ioc->name, mf_dma_addr, req_idx, ioc->RequestNB[req_idx]));
        CHIPREG_WRITE32(&ioc->chip->RequestFifo, mf_dma_addr);
 }
 
@@ -955,7 +938,7 @@ mpt_send_handshake_request(int handle, MPT_ADAPTER *ioc, int reqBytes, u32 *req,
        if (!(CHIPREG_READ32(&ioc->chip->Doorbell) & MPI_DOORBELL_ACTIVE))
                return -5;
 
-       dhsprintk((KERN_INFO MYNAM ": %s: mpt_send_handshake_request start, WaitCnt=%d\n",
+       dhsprintk(ioc, printk(KERN_INFO MYNAM ": %s: mpt_send_handshake_request start, WaitCnt=%d\n",
                ioc->name, ii));
 
        CHIPREG_WRITE32(&ioc->chip->IntStatus, 0);
@@ -1066,7 +1049,7 @@ mpt_host_page_alloc(MPT_ADAPTER *ioc, pIOCInit_t ioc_init)
                            host_page_buffer_sz,
                            &ioc->HostPageBuffer_dma)) != NULL) {
 
-                               dinitprintk((MYIOC_s_INFO_FMT
+                               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                                    "host_page_buffer @ %p, dma @ %x, sz=%d bytes\n",
                                    ioc->name, ioc->HostPageBuffer,
                                    (u32)ioc->HostPageBuffer_dma,
@@ -1410,31 +1393,37 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
        struct proc_dir_entry *dent, *ent;
 #endif
 
+       ioc = kzalloc(sizeof(MPT_ADAPTER), GFP_ATOMIC);
+       if (ioc == NULL) {
+               printk(KERN_ERR MYNAM ": ERROR - Insufficient memory to add adapter!\n");
+               return -ENOMEM;
+       }
+
+       ioc->debug_level = mpt_debug_level;
+       if (mpt_debug_level)
+               printk(KERN_INFO MYNAM ": mpt_debug_level=%xh\n", mpt_debug_level);
+
        if (pci_enable_device(pdev))
                return r;
 
-       dinitprintk((KERN_WARNING MYNAM ": mpt_adapter_install\n"));
+       dinitprintk(ioc, printk(KERN_WARNING MYNAM ": mpt_adapter_install\n"));
 
        if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
-               dprintk((KERN_INFO MYNAM
+               dprintk(ioc, printk(KERN_INFO MYNAM
                        ": 64 BIT PCI BUS DMA ADDRESSING SUPPORTED\n"));
        } else if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) {
                printk(KERN_WARNING MYNAM ": 32 BIT PCI BUS DMA ADDRESSING NOT SUPPORTED\n");
                return r;
        }
 
-       if (!pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK))
-               dprintk((KERN_INFO MYNAM
+       if (!pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) {
+               dprintk(ioc, printk(KERN_INFO MYNAM
                        ": Using 64 bit consistent mask\n"));
-       else
-               dprintk((KERN_INFO MYNAM
+       } else {
+               dprintk(ioc, printk(KERN_INFO MYNAM
                        ": Not using 64 bit consistent mask\n"));
-
-       ioc = kzalloc(sizeof(MPT_ADAPTER), GFP_ATOMIC);
-       if (ioc == NULL) {
-               printk(KERN_ERR MYNAM ": ERROR - Insufficient memory to add adapter!\n");
-               return -ENOMEM;
        }
+
        ioc->alloc_total = sizeof(MPT_ADAPTER);
        ioc->req_sz = MPT_DEFAULT_FRAME_SIZE;           /* avoid div by zero! */
        ioc->reply_sz = MPT_REPLY_FRAME_SIZE;
@@ -1502,9 +1491,9 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
                return -EINVAL;
        }
        ioc->memmap = mem;
-       dinitprintk((KERN_INFO MYNAM ": mem = %p, mem_phys = %lx\n", mem, mem_phys));
+       dinitprintk(ioc, printk(KERN_INFO MYNAM ": mem = %p, mem_phys = %lx\n", mem, mem_phys));
 
-       dinitprintk((KERN_INFO MYNAM ": facts @ %p, pfacts[0] @ %p\n",
+       dinitprintk(ioc, printk(KERN_INFO MYNAM ": facts @ %p, pfacts[0] @ %p\n",
                        &ioc->facts, &ioc->pfacts[0]));
 
        ioc->mem_phys = mem_phys;
@@ -1830,6 +1819,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
        int      ret = 0;
        int      reset_alt_ioc_active = 0;
        int      irq_allocated = 0;
+       u8      *a;
 
        printk(KERN_INFO MYNAM ": Initiating %s %s\n",
                        ioc->name, reason==MPT_HOSTEVENT_IOC_BRINGUP ? "bringup" : "recovery");
@@ -1858,7 +1848,8 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
 
                        if (reset_alt_ioc_active && ioc->alt_ioc) {
                                /* (re)Enable alt-IOC! (reply interrupt, FreeQ) */
-                               dprintk((KERN_INFO MYNAM ": alt-%s reply irq re-enabled\n",
+                               dprintk(ioc, printk(KERN_INFO MYNAM
+                                       ": alt-%s reply irq re-enabled\n",
                                                ioc->alt_ioc->name));
                                CHIPREG_WRITE32(&ioc->alt_ioc->chip->IntMask, MPI_HIM_DIM);
                                ioc->alt_ioc->active = 1;
@@ -1891,7 +1882,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
 
 
        if (ii == 5) {
-               dinitprintk((MYIOC_s_INFO_FMT "Retry IocFacts failed rc=%x\n", ioc->name, rc));
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Retry IocFacts failed rc=%x\n", ioc->name, rc));
                ret = -2;
        } else if (reason == MPT_HOSTEVENT_IOC_BRINGUP) {
                MptDisplayIocCapabilities(ioc);
@@ -1899,13 +1890,15 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
 
        if (alt_ioc_ready) {
                if ((rc = GetIocFacts(ioc->alt_ioc, sleepFlag, reason)) != 0) {
-                       dinitprintk((MYIOC_s_INFO_FMT "Initial Alt IocFacts failed rc=%x\n", ioc->name, rc));
+                       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                               "Initial Alt IocFacts failed rc=%x\n", ioc->name, rc));
                        /* Retry - alt IOC was initialized once
                         */
                        rc = GetIocFacts(ioc->alt_ioc, sleepFlag, reason);
                }
                if (rc) {
-                       dinitprintk((MYIOC_s_INFO_FMT "Retry Alt IocFacts failed rc=%x\n", ioc->name, rc));
+                       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                               "Retry Alt IocFacts failed rc=%x\n", ioc->name, rc));
                        alt_ioc_ready = 0;
                        reset_alt_ioc_active = 0;
                } else if (reason == MPT_HOSTEVENT_IOC_BRINGUP) {
@@ -1938,7 +1931,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
                        ioc->pci_irq = ioc->pcidev->irq;
                        pci_set_master(ioc->pcidev);            /* ?? */
                        pci_set_drvdata(ioc->pcidev, ioc);
-                       dprintk((KERN_INFO MYNAM ": %s installed at interrupt "
+                       dprintk(ioc, printk(KERN_INFO MYNAM ": %s installed at interrupt "
                                "%d\n", ioc->name, ioc->pcidev->irq));
                }
        }
@@ -1976,7 +1969,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
 
        if (reason == MPT_HOSTEVENT_IOC_BRINGUP){
                if (ioc->upload_fw) {
-                       ddlprintk((MYIOC_s_INFO_FMT
+                       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                                "firmware upload required!\n", ioc->name));
 
                        /* Controller is not operational, cannot do upload
@@ -1992,7 +1985,8 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
                                                 * chips (mpt_adapter_disable,
                                                 * mpt_diag_reset)
                                                 */
-                                               ddlprintk((MYIOC_s_INFO_FMT ": mpt_upload:  alt_%s has cached_fw=%p \n",
+                                               ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                                       ": mpt_upload:  alt_%s has cached_fw=%p \n",
                                                        ioc->name, ioc->alt_ioc->name, ioc->alt_ioc->cached_fw));
                                                ioc->alt_ioc->cached_fw = NULL;
                                        }
@@ -2012,7 +2006,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
 
        if (reset_alt_ioc_active && ioc->alt_ioc) {
                /* (re)Enable alt-IOC! (reply interrupt) */
-               dinitprintk((KERN_INFO MYNAM ": alt-%s reply irq re-enabled\n",
+               dinitprintk(ioc, printk(KERN_INFO MYNAM ": alt-%s reply irq re-enabled\n",
                                ioc->alt_ioc->name));
                CHIPREG_WRITE32(&ioc->alt_ioc->chip->IntMask, MPI_HIM_DIM);
                ioc->alt_ioc->active = 1;
@@ -2064,13 +2058,13 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
                                 *  (LANPage1_t stuff)
                                 */
                                (void) GetLanConfigPages(ioc);
-#ifdef MPT_DEBUG
-                               {
-                                       u8 *a = (u8*)&ioc->lan_cnfg_page1.HardwareAddressLow;
-                                       dprintk((MYIOC_s_INFO_FMT "LanAddr = %02X:%02X:%02X:%02X:%02X:%02X\n",
-                                                       ioc->name, a[5], a[4], a[3], a[2], a[1], a[0] ));
-                               }
-#endif
+                               a = (u8*)&ioc->lan_cnfg_page1.HardwareAddressLow;
+                               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                       "LanAddr = %02X:%02X:%02X:"
+                                       "%02X:%02X:%02X\n",
+                                       ioc->name, a[5], a[4],
+                                       a[3], a[2], a[1], a[0] ));
+
                        }
                } else {
                        /* Get NVRAM and adapter maximums from SPP 0 and 2
@@ -2107,15 +2101,17 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
                rc = handlers = 0;
                for (ii=MPT_MAX_PROTOCOL_DRIVERS-1; ii; ii--) {
                        if ((ret == 0) && MptResetHandlers[ii]) {
-                               dprintk((MYIOC_s_INFO_FMT "Calling IOC post_reset handler #%d\n",
-                                               ioc->name, ii));
+                               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                       "Calling IOC post_reset handler #%d\n",
+                                       ioc->name, ii));
                                rc += mpt_signal_reset(ii, ioc, MPT_IOC_POST_RESET);
                                handlers++;
                        }
 
                        if (alt_ioc_ready && MptResetHandlers[ii]) {
-                               drsprintk((MYIOC_s_INFO_FMT "Calling alt-%s post_reset handler #%d\n",
-                                               ioc->name, ioc->alt_ioc->name, ii));
+                               drsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                       "Calling alt-%s post_reset handler #%d\n",
+                                       ioc->name, ioc->alt_ioc->name, ii));
                                rc += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_POST_RESET);
                                handlers++;
                        }
@@ -2153,7 +2149,7 @@ mpt_detect_bound_ports(MPT_ADAPTER *ioc, struct pci_dev *pdev)
        unsigned int func = PCI_FUNC(pdev->devfn);
        MPT_ADAPTER *ioc_srch;
 
-       dprintk((MYIOC_s_INFO_FMT "PCI device %s devfn=%x/%x,"
+       dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "PCI device %s devfn=%x/%x,"
            " searching for devfn match on %x or %x\n",
                ioc->name, pci_name(pdev), pdev->bus->number,
                pdev->devfn, func-1, func+1));
@@ -2178,7 +2174,7 @@ mpt_detect_bound_ports(MPT_ADAPTER *ioc, struct pci_dev *pdev)
                                        ioc_srch->name, ioc_srch->alt_ioc->name);
                                break;
                        }
-                       dprintk((KERN_INFO MYNAM ": FOUND! binding %s <==> %s\n",
+                       dprintk(ioc, printk(KERN_INFO MYNAM ": FOUND! binding %s <==> %s\n",
                                ioc->name, ioc_srch->name));
                        ioc_srch->alt_ioc = ioc;
                        ioc->alt_ioc = ioc_srch;
@@ -2199,7 +2195,7 @@ mpt_adapter_disable(MPT_ADAPTER *ioc)
        int ret;
 
        if (ioc->cached_fw != NULL) {
-               ddlprintk((KERN_INFO MYNAM ": mpt_adapter_disable: Pushing FW onto adapter\n"));
+               ddlprintk(ioc, printk(KERN_INFO MYNAM ": mpt_adapter_disable: Pushing FW onto adapter\n"));
                if ((ret = mpt_downloadboot(ioc, (MpiFwHeader_t *)ioc->cached_fw, NO_SLEEP)) < 0) {
                        printk(KERN_WARNING MYNAM
                                ": firmware downloadboot failure (%d)!\n", ret);
@@ -2214,7 +2210,7 @@ mpt_adapter_disable(MPT_ADAPTER *ioc)
 
        if (ioc->alloc != NULL) {
                sz = ioc->alloc_sz;
-               dexitprintk((KERN_INFO MYNAM ": %s.free  @ %p, sz=%d bytes\n",
+               dexitprintk(ioc, printk(KERN_INFO MYNAM ": %s.free  @ %p, sz=%d bytes\n",
                        ioc->name, ioc->alloc, ioc->alloc_sz));
                pci_free_consistent(ioc->pcidev, sz,
                                ioc->alloc, ioc->alloc_dma);
@@ -2256,7 +2252,7 @@ mpt_adapter_disable(MPT_ADAPTER *ioc)
 
        if (ioc->spi_data.pIocPg4 != NULL) {
                sz = ioc->spi_data.IocPg4Sz;
-               pci_free_consistent(ioc->pcidev, sz, 
+               pci_free_consistent(ioc->pcidev, sz,
                        ioc->spi_data.pIocPg4,
                        ioc->spi_data.IocPg4_dma);
                ioc->spi_data.pIocPg4 = NULL;
@@ -2279,7 +2275,7 @@ mpt_adapter_disable(MPT_ADAPTER *ioc)
                           ": %s: host page buffers free failed (%d)!\n",
                            __FUNCTION__, ret);
                }
-               dexitprintk((KERN_INFO MYNAM ": %s HostPageBuffer free  @ %p, sz=%d bytes\n",
+               dexitprintk(ioc, printk(KERN_INFO MYNAM ": %s HostPageBuffer free  @ %p, sz=%d bytes\n",
                        ioc->name, ioc->HostPageBuffer, ioc->HostPageBuffer_sz));
                pci_free_consistent(ioc->pcidev, ioc->HostPageBuffer_sz,
                                ioc->HostPageBuffer,
@@ -2325,7 +2321,7 @@ mpt_adapter_dispose(MPT_ADAPTER *ioc)
 #if defined(CONFIG_MTRR) && 0
        if (ioc->mtrr_reg > 0) {
                mtrr_del(ioc->mtrr_reg, 0, 0);
-               dprintk((KERN_INFO MYNAM ": %s: MTRR region de-registered\n", ioc->name));
+               dprintk(ioc, printk(KERN_INFO MYNAM ": %s: MTRR region de-registered\n", ioc->name));
        }
 #endif
 
@@ -2333,7 +2329,7 @@ mpt_adapter_dispose(MPT_ADAPTER *ioc)
        list_del(&ioc->list);
 
        sz_last = ioc->alloc_total;
-       dprintk((KERN_INFO MYNAM ": %s: free'd %d of %d bytes\n",
+       dprintk(ioc, printk(KERN_INFO MYNAM ": %s: free'd %d of %d bytes\n",
                        ioc->name, sz_first-sz_last+(int)sizeof(*ioc), sz_first));
 
        if (ioc->alt_ioc)
@@ -2413,7 +2409,7 @@ MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag)
 
        /* Get current [raw] IOC state  */
        ioc_state = mpt_GetIocState(ioc, 0);
-       dhsprintk((KERN_INFO MYNAM "::MakeIocReady, %s [raw] state=%08x\n", ioc->name, ioc_state));
+       dhsprintk(ioc, printk(KERN_INFO MYNAM "::MakeIocReady, %s [raw] state=%08x\n", ioc->name, ioc_state));
 
        /*
         *      Check to see if IOC got left/stuck in doorbell handshake
@@ -2444,7 +2440,7 @@ MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag)
         *      Hmmm...  Did it get left operational?
         */
        if ((ioc_state & MPI_IOC_STATE_MASK) == MPI_IOC_STATE_OPERATIONAL) {
-               dinitprintk((MYIOC_s_INFO_FMT "IOC operational unexpected\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "IOC operational unexpected\n",
                                ioc->name));
 
                /* Check WhoInit.
@@ -2453,7 +2449,7 @@ MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag)
                 * Else, fall through to KickStart case
                 */
                whoinit = (ioc_state & MPI_DOORBELL_WHO_INIT_MASK) >> MPI_DOORBELL_WHO_INIT_SHIFT;
-               dinitprintk((KERN_INFO MYNAM
+               dinitprintk(ioc, printk(KERN_INFO MYNAM
                        ": whoinit 0x%x statefault %d force %d\n",
                        whoinit, statefault, force));
                if (whoinit == MPI_WHOINIT_PCI_PEER)
@@ -2589,7 +2585,7 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason)
        get_facts.Function = MPI_FUNCTION_IOC_FACTS;
        /* Assert: All other get_facts fields are zero! */
 
-       dinitprintk((MYIOC_s_INFO_FMT
+       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT
            "Sending get IocFacts request req_sz=%d reply_sz=%d\n",
            ioc->name, req_sz, reply_sz));
 
@@ -2691,8 +2687,9 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason)
                        sz = sz >> 1;
                }
                ioc->NBShiftFactor  = shiftFactor;
-               dinitprintk((MYIOC_s_INFO_FMT "NB_for_64_byte_frame=%x NBShiftFactor=%x BlockSize=%x\n",
-                                       ioc->name, vv, shiftFactor, r));
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                       "NB_for_64_byte_frame=%x NBShiftFactor=%x BlockSize=%x\n",
+                       ioc->name, vv, shiftFactor, r));
 
                if (reason == MPT_HOSTEVENT_IOC_BRINGUP) {
                        /*
@@ -2704,9 +2701,9 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason)
                        ioc->reply_sz = MPT_REPLY_FRAME_SIZE;
                        ioc->reply_depth = min_t(int, MPT_DEFAULT_REPLY_DEPTH, facts->ReplyQueueDepth);
 
-                       dinitprintk((MYIOC_s_INFO_FMT "reply_sz=%3d, reply_depth=%4d\n",
+                       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "reply_sz=%3d, reply_depth=%4d\n",
                                ioc->name, ioc->reply_sz, ioc->reply_depth));
-                       dinitprintk((MYIOC_s_INFO_FMT "req_sz  =%3d, req_depth  =%4d\n",
+                       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "req_sz  =%3d, req_depth  =%4d\n",
                                ioc->name, ioc->req_sz, ioc->req_depth));
 
                        /* Get port facts! */
@@ -2765,7 +2762,7 @@ GetPortFacts(MPT_ADAPTER *ioc, int portnum, int sleepFlag)
        get_pfacts.PortNumber = portnum;
        /* Assert: All other get_pfacts fields are zero! */
 
-       dinitprintk((MYIOC_s_INFO_FMT "Sending get PortFacts(%d) request\n",
+       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending get PortFacts(%d) request\n",
                        ioc->name, portnum));
 
        /* No non-zero fields in the get_pfacts request are greater than
@@ -2841,12 +2838,12 @@ SendIocInit(MPT_ADAPTER *ioc, int sleepFlag)
                ioc->upload_fw = 1;
        else
                ioc->upload_fw = 0;
-       ddlprintk((MYIOC_s_INFO_FMT "upload_fw %d facts.Flags=%x\n",
+       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "upload_fw %d facts.Flags=%x\n",
                   ioc->name, ioc->upload_fw, ioc->facts.Flags));
 
        ioc_init.MaxDevices = (U8)ioc->devices_per_bus;
        ioc_init.MaxBuses = (U8)ioc->number_of_buses;
-       dinitprintk((MYIOC_s_INFO_FMT "facts.MsgVersion=%x\n",
+       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "facts.MsgVersion=%x\n",
                   ioc->name, ioc->facts.MsgVersion));
        if (ioc->facts.MsgVersion >= MPI_VERSION_01_05) {
                // set MsgVersion and HeaderVersion host driver was built with
@@ -2877,7 +2874,7 @@ SendIocInit(MPT_ADAPTER *ioc, int sleepFlag)
        ioc->facts.MaxDevices = ioc_init.MaxDevices;
        ioc->facts.MaxBuses = ioc_init.MaxBuses;
 
-       dhsprintk((MYIOC_s_INFO_FMT "Sending IOCInit (req @ %p)\n",
+       dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending IOCInit (req @ %p)\n",
                        ioc->name, &ioc_init));
 
        r = mpt_handshake_req_reply_wait(ioc, sizeof(IOCInit_t), (u32*)&ioc_init,
@@ -2891,7 +2888,7 @@ SendIocInit(MPT_ADAPTER *ioc, int sleepFlag)
         * since we don't even look at its contents.
         */
 
-       dhsprintk((MYIOC_s_INFO_FMT "Sending PortEnable (req @ %p)\n",
+       dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending PortEnable (req @ %p)\n",
                        ioc->name, &ioc_init));
 
        if ((r = SendPortEnable(ioc, 0, sleepFlag)) != 0) {
@@ -2922,7 +2919,7 @@ SendIocInit(MPT_ADAPTER *ioc, int sleepFlag)
                state = mpt_GetIocState(ioc, 1);
                count++;
        }
-       dinitprintk((MYIOC_s_INFO_FMT "INFO - Wait IOC_OPERATIONAL state (cnt=%d)\n",
+       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "INFO - Wait IOC_OPERATIONAL state (cnt=%d)\n",
                        ioc->name, count));
 
        ioc->aen_event_read_flag=0;
@@ -2962,7 +2959,7 @@ SendPortEnable(MPT_ADAPTER *ioc, int portnum, int sleepFlag)
 /*     port_enable.MsgFlags = 0;               */
 /*     port_enable.MsgContext = 0;             */
 
-       dinitprintk((MYIOC_s_INFO_FMT "Sending Port(%d)Enable (req @ %p)\n",
+       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending Port(%d)Enable (req @ %p)\n",
                        ioc->name, portnum, &port_enable));
 
        /* RAID FW may take a long time to enable
@@ -3015,7 +3012,7 @@ mpt_free_fw_memory(MPT_ADAPTER *ioc)
        int sz;
 
        sz = ioc->facts.FWImageSize;
-       dinitprintk((KERN_INFO MYNAM "free_fw_memory: FW Image  @ %p[%p], sz=%d[%x] bytes\n",
+       dinitprintk(ioc, printk(KERN_INFO MYNAM "free_fw_memory: FW Image  @ %p[%p], sz=%d[%x] bytes\n",
                 ioc->cached_fw, (void *)(ulong)ioc->cached_fw_dma, sz, sz));
        pci_free_consistent(ioc->pcidev, sz,
                        ioc->cached_fw, ioc->cached_fw_dma);
@@ -3059,7 +3056,7 @@ mpt_do_upload(MPT_ADAPTER *ioc, int sleepFlag)
 
        mpt_alloc_fw_memory(ioc, sz);
 
-       dinitprintk((KERN_INFO MYNAM ": FW Image  @ %p[%p], sz=%d[%x] bytes\n",
+       dinitprintk(ioc, printk(KERN_INFO MYNAM ": FW Image  @ %p[%p], sz=%d[%x] bytes\n",
                 ioc->cached_fw, (void *)(ulong)ioc->cached_fw_dma, sz, sz));
 
        if (ioc->cached_fw == NULL) {
@@ -3091,14 +3088,14 @@ mpt_do_upload(MPT_ADAPTER *ioc, int sleepFlag)
        mpt_add_sge(&request[sgeoffset], flagsLength, ioc->cached_fw_dma);
 
        sgeoffset += sizeof(u32) + sizeof(dma_addr_t);
-       dinitprintk((KERN_INFO MYNAM ": Sending FW Upload (req @ %p) sgeoffset=%d \n",
+       dinitprintk(ioc, printk(KERN_INFO MYNAM ": Sending FW Upload (req @ %p) sgeoffset=%d \n",
                        prequest, sgeoffset));
-       DBG_DUMP_FW_REQUEST_FRAME(prequest)
+       DBG_DUMP_FW_REQUEST_FRAME(ioc, (u32 *)prequest)
 
        ii = mpt_handshake_req_reply_wait(ioc, sgeoffset, (u32*)prequest,
                                reply_sz, (u16*)preply, 65 /*seconds*/, sleepFlag);
 
-       dinitprintk((KERN_INFO MYNAM ": FW Upload completed rc=%x \n", ii));
+       dinitprintk(ioc, printk(KERN_INFO MYNAM ": FW Upload completed rc=%x \n", ii));
 
        cmdStatus = -EFAULT;
        if (ii == 0) {
@@ -3113,13 +3110,13 @@ mpt_do_upload(MPT_ADAPTER *ioc, int sleepFlag)
                                cmdStatus = 0;
                }
        }
-       dinitprintk((MYIOC_s_INFO_FMT ": do_upload cmdStatus=%d \n",
+       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": do_upload cmdStatus=%d \n",
                        ioc->name, cmdStatus));
 
 
        if (cmdStatus) {
 
-               ddlprintk((MYIOC_s_INFO_FMT ": fw upload failed, freeing image \n",
+               ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": fw upload failed, freeing image \n",
                        ioc->name));
                mpt_free_fw_memory(ioc);
        }
@@ -3154,7 +3151,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
        u32                      load_addr;
        u32                      ioc_state=0;
 
-       ddlprintk((MYIOC_s_INFO_FMT "downloadboot: fw size 0x%x (%d), FW Ptr %p\n",
+       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "downloadboot: fw size 0x%x (%d), FW Ptr %p\n",
                                ioc->name, pFwHeader->ImageSize, pFwHeader->ImageSize, pFwHeader));
 
        CHIPREG_WRITE32(&ioc->chip->WriteSequence, 0xFF);
@@ -3179,7 +3176,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
        for (count = 0; count < 30; count ++) {
                diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic);
                if (!(diag0val & MPI_DIAG_RESET_ADAPTER)) {
-                       ddlprintk((MYIOC_s_INFO_FMT "RESET_ADAPTER cleared, count=%d\n",
+                       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "RESET_ADAPTER cleared, count=%d\n",
                                ioc->name, count));
                        break;
                }
@@ -3192,7 +3189,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
        }
 
        if ( count == 30 ) {
-               ddlprintk((MYIOC_s_INFO_FMT "downloadboot failed! "
+               ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "downloadboot failed! "
                "Unable to get MPI_DIAG_DRWE mode, diag0val=%x\n",
                ioc->name, diag0val));
                return -3;
@@ -3218,10 +3215,10 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
                pci_enable_io_access(ioc->pcidev);
 
        CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwAddress, pFwHeader->LoadStartAddress);
-       ddlprintk((MYIOC_s_INFO_FMT "LoadStart addr written 0x%x \n",
+       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "LoadStart addr written 0x%x \n",
                ioc->name, pFwHeader->LoadStartAddress));
 
-       ddlprintk((MYIOC_s_INFO_FMT "Write FW Image: 0x%x bytes @ %p\n",
+       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Write FW Image: 0x%x bytes @ %p\n",
                                ioc->name, fwSize*4, ptrFw));
        while (fwSize--) {
                CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwData, *ptrFw++);
@@ -3236,7 +3233,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
                fwSize = (pExtImage->ImageSize + 3) >> 2;
                ptrFw = (u32 *)pExtImage;
 
-               ddlprintk((MYIOC_s_INFO_FMT "Write Ext Image: 0x%x (%d) bytes @ %p load_addr=%x\n",
+               ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Write Ext Image: 0x%x (%d) bytes @ %p load_addr=%x\n",
                                                ioc->name, fwSize*4, fwSize*4, ptrFw, load_addr));
                CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwAddress, load_addr);
 
@@ -3247,11 +3244,11 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
        }
 
        /* Write the IopResetVectorRegAddr */
-       ddlprintk((MYIOC_s_INFO_FMT "Write IopResetVector Addr=%x! \n", ioc->name,      pFwHeader->IopResetRegAddr));
+       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Write IopResetVector Addr=%x! \n", ioc->name,  pFwHeader->IopResetRegAddr));
        CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwAddress, pFwHeader->IopResetRegAddr);
 
        /* Write the IopResetVectorValue */
-       ddlprintk((MYIOC_s_INFO_FMT "Write IopResetVector Value=%x! \n", ioc->name, pFwHeader->IopResetVectorValue));
+       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Write IopResetVector Value=%x! \n", ioc->name, pFwHeader->IopResetVectorValue));
        CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwData, pFwHeader->IopResetVectorValue);
 
        /* Clear the internal flash bad bit - autoincrementing register,
@@ -3285,11 +3282,11 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
                pci_disable_io_access(ioc->pcidev);
 
        diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic);
-       ddlprintk((MYIOC_s_INFO_FMT "downloadboot diag0val=%x, "
+       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "downloadboot diag0val=%x, "
                "turning off PREVENT_IOC_BOOT, DISABLE_ARM, RW_ENABLE\n",
                ioc->name, diag0val));
        diag0val &= ~(MPI_DIAG_PREVENT_IOC_BOOT | MPI_DIAG_DISABLE_ARM | MPI_DIAG_RW_ENABLE);
-       ddlprintk((MYIOC_s_INFO_FMT "downloadboot now diag0val=%x\n",
+       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "downloadboot now diag0val=%x\n",
                ioc->name, diag0val));
        CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val);
 
@@ -3300,7 +3297,7 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
                ioc_state = mpt_GetIocState(ioc, 0);
                if ( (GetIocFacts(ioc, sleepFlag,
                                MPT_HOSTEVENT_IOC_BRINGUP)) != 0 ) {
-                       ddlprintk((MYIOC_s_INFO_FMT "GetIocFacts failed: IocState=%x\n",
+                       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "GetIocFacts failed: IocState=%x\n",
                                        ioc->name, ioc_state));
                        return -EFAULT;
                }
@@ -3308,17 +3305,20 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
 
        for (count=0; count<HZ*20; count++) {
                if ((ioc_state = mpt_GetIocState(ioc, 0)) & MPI_IOC_STATE_READY) {
-                       ddlprintk((MYIOC_s_INFO_FMT "downloadboot successful! (count=%d) IocState=%x\n",
-                                       ioc->name, count, ioc_state));
+                       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                               "downloadboot successful! (count=%d) IocState=%x\n",
+                               ioc->name, count, ioc_state));
                        if (ioc->bus_type == SAS) {
                                return 0;
                        }
                        if ((SendIocInit(ioc, sleepFlag)) != 0) {
-                               ddlprintk((MYIOC_s_INFO_FMT "downloadboot: SendIocInit failed\n",
+                               ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                       "downloadboot: SendIocInit failed\n",
                                        ioc->name));
                                return -EFAULT;
                        }
-                       ddlprintk((MYIOC_s_INFO_FMT "downloadboot: SendIocInit successful\n",
+                       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                       "downloadboot: SendIocInit successful\n",
                                        ioc->name));
                        return 0;
                }
@@ -3328,8 +3328,8 @@ mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag)
                        mdelay (10);
                }
        }
-       ddlprintk((MYIOC_s_INFO_FMT "downloadboot failed! IocState=%x\n",
-               ioc->name, ioc_state));
+       ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+               "downloadboot failed! IocState=%x\n",ioc->name, ioc_state));
        return -EFAULT;
 }
 
@@ -3366,7 +3366,7 @@ KickStart(MPT_ADAPTER *ioc, int force, int sleepFlag)
        u32 ioc_state=0;
        int cnt,cntdn;
 
-       dinitprintk((KERN_WARNING MYNAM ": KickStarting %s!\n", ioc->name));
+       dinitprintk(ioc, printk(KERN_WARNING MYNAM ": KickStarting %s!\n", ioc->name));
        if (ioc->bus_type == SPI) {
                /* Always issue a Msg Unit Reset first. This will clear some
                 * SCSI bus hang conditions.
@@ -3384,14 +3384,14 @@ KickStart(MPT_ADAPTER *ioc, int force, int sleepFlag)
        if (hard_reset_done < 0)
                return hard_reset_done;
 
-       dinitprintk((MYIOC_s_INFO_FMT "Diagnostic reset successful!\n",
+       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Diagnostic reset successful!\n",
                        ioc->name));
 
        cntdn = ((sleepFlag == CAN_SLEEP) ? HZ : 1000) * 2;     /* 2 seconds */
        for (cnt=0; cnt<cntdn; cnt++) {
                ioc_state = mpt_GetIocState(ioc, 1);
                if ((ioc_state == MPI_IOC_STATE_READY) || (ioc_state == MPI_IOC_STATE_OPERATIONAL)) {
-                       dinitprintk((MYIOC_s_INFO_FMT "KickStart successful! (cnt=%d)\n",
+                       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "KickStart successful! (cnt=%d)\n",
                                        ioc->name, cnt));
                        return hard_reset_done;
                }
@@ -3434,15 +3434,13 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
        u32 doorbell;
        int hard_reset_done = 0;
        int count = 0;
-#ifdef MPT_DEBUG
        u32 diag1val = 0;
-#endif
 
        /* Clear any existing interrupts */
        CHIPREG_WRITE32(&ioc->chip->IntStatus, 0);
 
        if (ioc->pcidev->device == MPI_MANUFACTPAGE_DEVID_SAS1078) {
-               drsprintk((MYIOC_s_WARN_FMT "%s: Doorbell=%p; 1078 reset "
+               drsprintk(ioc, printk(MYIOC_s_WARN_FMT "%s: Doorbell=%p; 1078 reset "
                        "address=%p\n",  ioc->name, __FUNCTION__,
                        &ioc->chip->Doorbell, &ioc->chip->Reset_1078));
                CHIPREG_WRITE32(&ioc->chip->Reset_1078, 0x07);
@@ -3455,7 +3453,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
                        doorbell = CHIPREG_READ32(&ioc->chip->Doorbell);
                        doorbell &= MPI_IOC_STATE_MASK;
 
-                       drsprintk((MYIOC_s_INFO_FMT
+                       drsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                                "looking for READY STATE: doorbell=%x"
                                " count=%d\n",
                                ioc->name, doorbell, count));
@@ -3475,12 +3473,12 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
        /* Use "Diagnostic reset" method! (only thing available!) */
        diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic);
 
-#ifdef MPT_DEBUG
-       if (ioc->alt_ioc)
-               diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic);
-       dprintk((MYIOC_s_INFO_FMT "DbG1: diag0=%08x, diag1=%08x\n",
+       if (ioc->debug_level & MPT_DEBUG) {
+               if (ioc->alt_ioc)
+                       diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic);
+               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "DbG1: diag0=%08x, diag1=%08x\n",
                        ioc->name, diag0val, diag1val));
-#endif
+       }
 
        /* Do the reset if we are told to ignore the reset history
         * or if the reset history is 0
@@ -3514,16 +3512,16 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
 
                        diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic);
 
-                       dprintk((MYIOC_s_INFO_FMT "Wrote magic DiagWriteEn sequence (%x)\n",
+                       dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Wrote magic DiagWriteEn sequence (%x)\n",
                                        ioc->name, diag0val));
                }
 
-#ifdef MPT_DEBUG
-               if (ioc->alt_ioc)
-                       diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic);
-               dprintk((MYIOC_s_INFO_FMT "DbG2: diag0=%08x, diag1=%08x\n",
+               if (ioc->debug_level & MPT_DEBUG) {
+                       if (ioc->alt_ioc)
+                               diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic);
+                       dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "DbG2: diag0=%08x, diag1=%08x\n",
                                ioc->name, diag0val, diag1val));
-#endif
+               }
                /*
                 * Disable the ARM (Bug fix)
                 *
@@ -3537,7 +3535,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
                 */
                CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val | MPI_DIAG_RESET_ADAPTER);
                hard_reset_done = 1;
-               dprintk((MYIOC_s_INFO_FMT "Diagnostic reset performed\n",
+               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Diagnostic reset performed\n",
                                ioc->name));
 
                /*
@@ -3552,12 +3550,14 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
 
                        for (ii=MPT_MAX_PROTOCOL_DRIVERS-1; ii; ii--) {
                                if (MptResetHandlers[ii]) {
-                                       dprintk((MYIOC_s_INFO_FMT "Calling IOC pre_reset handler #%d\n",
-                                                       ioc->name, ii));
+                                       dprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                               "Calling IOC pre_reset handler #%d\n",
+                                               ioc->name, ii));
                                        r += mpt_signal_reset(ii, ioc, MPT_IOC_PRE_RESET);
                                        if (ioc->alt_ioc) {
-                                               dprintk((MYIOC_s_INFO_FMT "Calling alt-%s pre_reset handler #%d\n",
-                                                               ioc->name, ioc->alt_ioc->name, ii));
+                                               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                                       "Calling alt-%s pre_reset handler #%d\n",
+                                                       ioc->name, ioc->alt_ioc->name, ii));
                                                r += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_PRE_RESET);
                                        }
                                }
@@ -3580,7 +3580,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
                                        break;
                                }
 
-                               dprintk((MYIOC_s_INFO_FMT "cached_fw: diag0val=%x count=%d\n",
+                               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "cached_fw: diag0val=%x count=%d\n",
                                        iocp->name, diag0val, count));
                                /* wait 1 sec */
                                if (sleepFlag == CAN_SLEEP) {
@@ -3621,12 +3621,12 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
        }
 
        diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic);
-#ifdef MPT_DEBUG
-       if (ioc->alt_ioc)
-               diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic);
-       dprintk((MYIOC_s_INFO_FMT "DbG3: diag0=%08x, diag1=%08x\n",
-               ioc->name, diag0val, diag1val));
-#endif
+       if (ioc->debug_level & MPT_DEBUG) {
+               if (ioc->alt_ioc)
+                       diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic);
+               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "DbG3: diag0=%08x, diag1=%08x\n",
+                       ioc->name, diag0val, diag1val));
+       }
 
        /* Clear RESET_HISTORY bit!  Place board in the
         * diagnostic mode to update the diag register.
@@ -3680,12 +3680,12 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
                return -3;
        }
 
-#ifdef MPT_DEBUG
-       if (ioc->alt_ioc)
-               diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic);
-       dprintk((MYIOC_s_INFO_FMT "DbG4: diag0=%08x, diag1=%08x\n",
+       if (ioc->debug_level & MPT_DEBUG) {
+               if (ioc->alt_ioc)
+                       diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic);
+               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "DbG4: diag0=%08x, diag1=%08x\n",
                        ioc->name, diag0val, diag1val));
-#endif
+       }
 
        /*
         * Reset flag that says we've enabled event notification
@@ -3717,7 +3717,7 @@ SendIocReset(MPT_ADAPTER *ioc, u8 reset_type, int sleepFlag)
        u32 state;
        int cntdn, count;
 
-       drsprintk((KERN_INFO MYNAM ": %s: Sending IOC reset(0x%02x)!\n",
+       drsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending IOC reset(0x%02x)!\n",
                        ioc->name, reset_type));
        CHIPREG_WRITE32(&ioc->chip->Doorbell, reset_type<<MPI_DOORBELL_FUNCTION_SHIFT);
        if ((r = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0)
@@ -3782,14 +3782,14 @@ initChainBuffers(MPT_ADAPTER *ioc)
                        return -1;
 
                ioc->ReqToChain = (int *) mem;
-               dinitprintk((KERN_INFO MYNAM ": %s ReqToChain alloc  @ %p, sz=%d bytes\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ReqToChain alloc  @ %p, sz=%d bytes\n",
                                ioc->name, mem, sz));
                mem = kmalloc(sz, GFP_ATOMIC);
                if (mem == NULL)
                        return -1;
 
                ioc->RequestNB = (int *) mem;
-               dinitprintk((KERN_INFO MYNAM ": %s RequestNB alloc  @ %p, sz=%d bytes\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "RequestNB alloc  @ %p, sz=%d bytes\n",
                                ioc->name, mem, sz));
        }
        for (ii = 0; ii < ioc->req_depth; ii++) {
@@ -3819,7 +3819,7 @@ initChainBuffers(MPT_ADAPTER *ioc)
                numSGE = 1 + (scale - 1) * (ioc->facts.MaxChainDepth-1) + scale +
                        (ioc->req_sz - 64) / (sizeof(dma_addr_t) + sizeof(u32));
        }
-       dinitprintk((KERN_INFO MYNAM ": %s num_sge=%d numSGE=%d\n",
+       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "num_sge=%d numSGE=%d\n",
                ioc->name, num_sge, numSGE));
 
        if ( numSGE > MPT_SCSI_SG_DEPTH )
@@ -3832,7 +3832,7 @@ initChainBuffers(MPT_ADAPTER *ioc)
        }
        num_chain++;
 
-       dinitprintk((KERN_INFO MYNAM ": %s Now numSGE=%d num_sge=%d num_chain=%d\n",
+       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Now numSGE=%d num_sge=%d num_chain=%d\n",
                ioc->name, numSGE, num_sge, num_chain));
 
        if (ioc->bus_type == SPI)
@@ -3849,7 +3849,7 @@ initChainBuffers(MPT_ADAPTER *ioc)
                        return -1;
 
                ioc->ChainToChain = (int *) mem;
-               dinitprintk((KERN_INFO MYNAM ": %s ChainToChain alloc @ %p, sz=%d bytes\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ChainToChain alloc @ %p, sz=%d bytes\n",
                                ioc->name, mem, sz));
        } else {
                mem = (u8 *) ioc->ChainToChain;
@@ -3885,22 +3885,22 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
                        return -1;
 
                total_size = reply_sz = (ioc->reply_sz * ioc->reply_depth);
-               dinitprintk((KERN_INFO MYNAM ": %s.ReplyBuffer sz=%d bytes, ReplyDepth=%d\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ReplyBuffer sz=%d bytes, ReplyDepth=%d\n",
                                ioc->name, ioc->reply_sz, ioc->reply_depth));
-               dinitprintk((KERN_INFO MYNAM ": %s.ReplyBuffer sz=%d[%x] bytes\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ReplyBuffer sz=%d[%x] bytes\n",
                                ioc->name, reply_sz, reply_sz));
 
                sz = (ioc->req_sz * ioc->req_depth);
-               dinitprintk((KERN_INFO MYNAM ": %s.RequestBuffer sz=%d bytes, RequestDepth=%d\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "RequestBuffer sz=%d bytes, RequestDepth=%d\n",
                                ioc->name, ioc->req_sz, ioc->req_depth));
-               dinitprintk((KERN_INFO MYNAM ": %s.RequestBuffer sz=%d[%x] bytes\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "RequestBuffer sz=%d[%x] bytes\n",
                                ioc->name, sz, sz));
                total_size += sz;
 
                sz = num_chain * ioc->req_sz; /* chain buffer pool size */
-               dinitprintk((KERN_INFO MYNAM ": %s.ChainBuffer sz=%d bytes, ChainDepth=%d\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ChainBuffer sz=%d bytes, ChainDepth=%d\n",
                                ioc->name, ioc->req_sz, num_chain));
-               dinitprintk((KERN_INFO MYNAM ": %s.ChainBuffer sz=%d[%x] bytes num_chain=%d\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ChainBuffer sz=%d[%x] bytes num_chain=%d\n",
                                ioc->name, sz, sz, num_chain));
 
                total_size += sz;
@@ -3911,7 +3911,7 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
                        goto out_fail;
                }
 
-               dinitprintk((KERN_INFO MYNAM ": %s.Total alloc @ %p[%p], sz=%d[%x] bytes\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Total alloc @ %p[%p], sz=%d[%x] bytes\n",
                                ioc->name, mem, (void *)(ulong)alloc_dma, total_size, total_size));
 
                memset(mem, 0, total_size);
@@ -3922,7 +3922,7 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
                ioc->reply_frames = (MPT_FRAME_HDR *) mem;
                ioc->reply_frames_low_dma = (u32) (alloc_dma & 0xFFFFFFFF);
 
-               dinitprintk((KERN_INFO MYNAM ": %s ReplyBuffers @ %p[%p]\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ReplyBuffers @ %p[%p]\n",
                        ioc->name, ioc->reply_frames, (void *)(ulong)alloc_dma));
 
                alloc_dma += reply_sz;
@@ -3933,7 +3933,7 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
                ioc->req_frames = (MPT_FRAME_HDR *) mem;
                ioc->req_frames_dma = alloc_dma;
 
-               dinitprintk((KERN_INFO MYNAM ": %s RequestBuffers @ %p[%p]\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "RequestBuffers @ %p[%p]\n",
                                ioc->name, mem, (void *)(ulong)alloc_dma));
 
                ioc->req_frames_low_dma = (u32) (alloc_dma & 0xFFFFFFFF);
@@ -3947,7 +3947,7 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
                ioc->mtrr_reg = mtrr_add(ioc->req_frames_dma,
                                         sz,
                                         MTRR_TYPE_WRCOMB, 1);
-               dprintk((MYIOC_s_INFO_FMT "MTRR region registered (base:size=%08x:%x)\n",
+               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "MTRR region registered (base:size=%08x:%x)\n",
                                ioc->name, ioc->req_frames_dma, sz));
 #endif
 
@@ -3959,7 +3959,7 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
                ioc->ChainBuffer = mem;
                ioc->ChainBufferDMA = alloc_dma;
 
-               dinitprintk((KERN_INFO MYNAM " :%s ChainBuffers @ %p(%p)\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ChainBuffers @ %p(%p)\n",
                        ioc->name, ioc->ChainBuffer, (void *)(ulong)ioc->ChainBufferDMA));
 
                /* Initialize the free chain Q.
@@ -4004,7 +4004,7 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
 
                ioc->sense_buf_low_dma = (u32) (ioc->sense_buf_pool_dma & 0xFFFFFFFF);
                ioc->alloc_total += sz;
-               dinitprintk((KERN_INFO MYNAM ": %s.SenseBuffers @ %p[%p]\n",
+               dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SenseBuffers @ %p[%p]\n",
                        ioc->name, ioc->sense_buf_pool, (void *)(ulong)ioc->sense_buf_pool_dma));
 
        }
@@ -4012,7 +4012,7 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
        /* Post Reply frames to FIFO
         */
        alloc_dma = ioc->alloc_dma;
-       dinitprintk((KERN_INFO MYNAM ": %s.ReplyBuffers @ %p[%p]\n",
+       dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ReplyBuffers @ %p[%p]\n",
                ioc->name, ioc->reply_frames, (void *)(ulong)alloc_dma));
 
        for (i = 0; i < ioc->reply_depth; i++) {
@@ -4093,7 +4093,7 @@ mpt_handshake_req_reply_wait(MPT_ADAPTER *ioc, int reqBytes, u32 *req,
        if ((t = WaitForDoorbellInt(ioc, 5, sleepFlag)) < 0)
                failcnt++;
 
-       dhsprintk((MYIOC_s_INFO_FMT "HandShake request start reqBytes=%d, WaitCnt=%d%s\n",
+       dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "HandShake request start reqBytes=%d, WaitCnt=%d%s\n",
                        ioc->name, reqBytes, t, failcnt ? " - MISSING DOORBELL HANDSHAKE!" : ""));
 
        /* Read doorbell and check for active bit */
@@ -4128,10 +4128,10 @@ mpt_handshake_req_reply_wait(MPT_ADAPTER *ioc, int reqBytes, u32 *req,
                                failcnt++;
                }
 
-               dhsprintk((KERN_INFO MYNAM ": Handshake request frame (@%p) header\n", req));
-               DBG_DUMP_REQUEST_FRAME_HDR(req)
+               dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Handshake request frame (@%p) header\n", ioc->name, req));
+               DBG_DUMP_REQUEST_FRAME_HDR(ioc, (u32 *)req)
 
-               dhsprintk((MYIOC_s_INFO_FMT "HandShake request post done, WaitCnt=%d%s\n",
+               dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "HandShake request post done, WaitCnt=%d%s\n",
                                ioc->name, t, failcnt ? " - MISSING DOORBELL ACK!" : ""));
 
                /*
@@ -4140,7 +4140,7 @@ mpt_handshake_req_reply_wait(MPT_ADAPTER *ioc, int reqBytes, u32 *req,
                if (!failcnt && (t = WaitForDoorbellReply(ioc, maxwait, sleepFlag)) < 0)
                        failcnt++;
 
-               dhsprintk((MYIOC_s_INFO_FMT "HandShake reply count=%d%s\n",
+               dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "HandShake reply count=%d%s\n",
                                ioc->name, t, failcnt ? " - MISSING DOORBELL REPLY!" : ""));
 
                /*
@@ -4196,7 +4196,7 @@ WaitForDoorbellAck(MPT_ADAPTER *ioc, int howlong, int sleepFlag)
        }
 
        if (cntdn) {
-               dprintk((MYIOC_s_INFO_FMT "WaitForDoorbell ACK (count=%d)\n",
+               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "WaitForDoorbell ACK (count=%d)\n",
                                ioc->name, count));
                return count;
        }
@@ -4245,7 +4245,7 @@ WaitForDoorbellInt(MPT_ADAPTER *ioc, int howlong, int sleepFlag)
        }
 
        if (cntdn) {
-               dprintk((MYIOC_s_INFO_FMT "WaitForDoorbell INT (cnt=%d) howlong=%d\n",
+               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "WaitForDoorbell INT (cnt=%d) howlong=%d\n",
                                ioc->name, count, howlong));
                return count;
        }
@@ -4297,7 +4297,7 @@ WaitForDoorbellReply(MPT_ADAPTER *ioc, int howlong, int sleepFlag)
                }
        }
 
-       dhsprintk((MYIOC_s_INFO_FMT "WaitCnt=%d First handshake reply word=%08x%s\n",
+       dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "WaitCnt=%d First handshake reply word=%08x%s\n",
                        ioc->name, t, le32_to_cpu(*(u32 *)hs_reply),
                        failcnt ? " - MISSING DOORBELL HANDSHAKE!" : ""));
 
@@ -4333,10 +4333,10 @@ WaitForDoorbellReply(MPT_ADAPTER *ioc, int howlong, int sleepFlag)
        }
 #endif
 
-       dhsprintk((MYIOC_s_INFO_FMT "Got Handshake reply:\n", ioc->name));
-       DBG_DUMP_REPLY_FRAME(mptReply)
+       dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Got Handshake reply:\n", ioc->name));
+       DBG_DUMP_REPLY_FRAME(ioc, (u32 *)mptReply)
 
-       dhsprintk((MYIOC_s_INFO_FMT "WaitForDoorbell REPLY WaitCnt=%d (sz=%d)\n",
+       dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "WaitForDoorbell REPLY WaitCnt=%d (sz=%d)\n",
                        ioc->name, t, u16cnt/2));
        return u16cnt/2;
 }
@@ -4761,7 +4761,7 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
 
                ioc->spi_data.nvram = (int *) mem;
 
-               dprintk((MYIOC_s_INFO_FMT "SCSI device NVRAM settings @ %p, sz=%d\n",
+               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SCSI device NVRAM settings @ %p, sz=%d\n",
                        ioc->name, ioc->spi_data.nvram, sz));
        }
 
@@ -4797,7 +4797,8 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
                                ioc->spi_data.minSyncFactor = MPT_ASYNC;
                                ioc->spi_data.busType = MPT_HOST_BUS_UNKNOWN;
                                rc = 1;
-                               ddvprintk((MYIOC_s_INFO_FMT "Unable to read PortPage0 minSyncFactor=%x\n",
+                               ddvprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                       "Unable to read PortPage0 minSyncFactor=%x\n",
                                        ioc->name, ioc->spi_data.minSyncFactor));
                        } else {
                                /* Save the Port Page 0 data
@@ -4808,7 +4809,8 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
 
                                if ( (pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_QAS) == 0 ) {
                                        ioc->spi_data.noQas |= MPT_TARGET_NO_NEGO_QAS;
-                                       ddvprintk((KERN_INFO MYNAM " :%s noQas due to Capabilities=%x\n",
+                                       ddvprintk(ioc, printk(KERN_INFO MYNAM
+                                               " :%s noQas due to Capabilities=%x\n",
                                                ioc->name, pPP0->Capabilities));
                                }
                                ioc->spi_data.maxBusWidth = pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_WIDE ? 1 : 0;
@@ -4817,7 +4819,8 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
                                        ioc->spi_data.maxSyncOffset = (u8) (data >> 16);
                                        data = pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_MIN_SYNC_PERIOD_MASK;
                                        ioc->spi_data.minSyncFactor = (u8) (data >> 8);
-                                       ddvprintk((MYIOC_s_INFO_FMT "PortPage0 minSyncFactor=%x\n",
+                                       ddvprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                               "PortPage0 minSyncFactor=%x\n",
                                                ioc->name, ioc->spi_data.minSyncFactor));
                                } else {
                                        ioc->spi_data.maxSyncOffset = 0;
@@ -4833,7 +4836,8 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
 
                                        if (ioc->spi_data.minSyncFactor < MPT_ULTRA) {
                                                ioc->spi_data.minSyncFactor = MPT_ULTRA;
-                                               ddvprintk((MYIOC_s_INFO_FMT "HVD or SE detected, minSyncFactor=%x\n",
+                                               ddvprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                                       "HVD or SE detected, minSyncFactor=%x\n",
                                                        ioc->name, ioc->spi_data.minSyncFactor));
                                        }
                                }
@@ -4949,10 +4953,10 @@ mpt_readScsiDevicePageHeaders(MPT_ADAPTER *ioc, int portnum)
        ioc->spi_data.sdp0version = cfg.cfghdr.hdr->PageVersion;
        ioc->spi_data.sdp0length = cfg.cfghdr.hdr->PageLength;
 
-       dcprintk((MYIOC_s_INFO_FMT "Headers: 0: version %d length %d\n",
+       dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Headers: 0: version %d length %d\n",
                        ioc->name, ioc->spi_data.sdp0version, ioc->spi_data.sdp0length));
 
-       dcprintk((MYIOC_s_INFO_FMT "Headers: 1: version %d length %d\n",
+       dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Headers: 1: version %d length %d\n",
                        ioc->name, ioc->spi_data.sdp1version, ioc->spi_data.sdp1length));
        return 0;
 }
@@ -5361,12 +5365,12 @@ mpt_read_ioc_pg_1(MPT_ADAPTER *ioc)
        cfg.physAddr = ioc1_dma;
        cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
        if (mpt_config(ioc, &cfg) == 0) {
-               
+
                tmp = le32_to_cpu(pIoc1->Flags) & MPI_IOCPAGE1_REPLY_COALESCING;
                if (tmp == MPI_IOCPAGE1_REPLY_COALESCING) {
                        tmp = le32_to_cpu(pIoc1->CoalescingTimeout);
 
-                       dprintk((MYIOC_s_INFO_FMT "Coalescing Enabled Timeout = %d\n",
+                       dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Coalescing Enabled Timeout = %d\n",
                                        ioc->name, tmp));
 
                        if (tmp > MPT_COALESCING_TIMEOUT) {
@@ -5377,26 +5381,29 @@ mpt_read_ioc_pg_1(MPT_ADAPTER *ioc)
                                cfg.dir = 1;
                                cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT;
                                if (mpt_config(ioc, &cfg) == 0) {
-                                       dprintk((MYIOC_s_INFO_FMT "Reset Current Coalescing Timeout to = %d\n",
+                                       dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Reset Current Coalescing Timeout to = %d\n",
                                                        ioc->name, MPT_COALESCING_TIMEOUT));
 
                                        cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_NVRAM;
                                        if (mpt_config(ioc, &cfg) == 0) {
-                                               dprintk((MYIOC_s_INFO_FMT "Reset NVRAM Coalescing Timeout to = %d\n",
+                                               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                                               "Reset NVRAM Coalescing Timeout to = %d\n",
                                                                ioc->name, MPT_COALESCING_TIMEOUT));
                                        } else {
-                                               dprintk((MYIOC_s_INFO_FMT "Reset NVRAM Coalescing Timeout Failed\n",
-                                                                       ioc->name));
+                                               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                                               "Reset NVRAM Coalescing Timeout Failed\n",
+                                                               ioc->name));
                                        }
 
                                } else {
-                                       dprintk((MYIOC_s_WARN_FMT "Reset of Current Coalescing Timeout Failed!\n",
-                                                               ioc->name));
+                                       dprintk(ioc, printk(MYIOC_s_WARN_FMT
+                                               "Reset of Current Coalescing Timeout Failed!\n",
+                                               ioc->name));
                                }
                        }
 
                } else {
-                       dprintk((MYIOC_s_WARN_FMT "Coalescing Disabled\n", ioc->name));
+                       dprintk(ioc, printk(MYIOC_s_WARN_FMT "Coalescing Disabled\n", ioc->name));
                }
        }
 
@@ -5461,13 +5468,13 @@ SendEventNotification(MPT_ADAPTER *ioc, u8 EvSwitch)
 
        evnp = (EventNotification_t *) mpt_get_msg_frame(mpt_base_index, ioc);
        if (evnp == NULL) {
-               devtverboseprintk((MYIOC_s_WARN_FMT "Unable to allocate event request frame!\n",
+               devtverboseprintk(ioc, printk(MYIOC_s_WARN_FMT "Unable to allocate event request frame!\n",
                                ioc->name));
                return 0;
        }
        memset(evnp, 0, sizeof(*evnp));
 
-       devtverboseprintk((MYIOC_s_INFO_FMT "Sending EventNotification (%d) request %p\n", ioc->name, EvSwitch, evnp));
+       devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending EventNotification (%d) request %p\n", ioc->name, EvSwitch, evnp));
 
        evnp->Function = MPI_FUNCTION_EVENT_NOTIFICATION;
        evnp->ChainOffset = 0;
@@ -5491,12 +5498,12 @@ SendEventAck(MPT_ADAPTER *ioc, EventNotificationReply_t *evnp)
        EventAck_t      *pAck;
 
        if ((pAck = (EventAck_t *) mpt_get_msg_frame(mpt_base_index, ioc)) == NULL) {
-               dfailprintk((MYIOC_s_WARN_FMT "%s, no msg frames!!\n",
+               dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s, no msg frames!!\n",
                    ioc->name,__FUNCTION__));
                return -1;
        }
 
-       devtverboseprintk((MYIOC_s_INFO_FMT "Sending EventAck\n", ioc->name));
+       devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending EventAck\n", ioc->name));
 
        pAck->Function     = MPI_FUNCTION_EVENT_ACK;
        pAck->ChainOffset  = 0;
@@ -5541,7 +5548,7 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
         */
        in_isr = in_interrupt();
        if (in_isr) {
-               dcprintk((MYIOC_s_WARN_FMT "Config request not allowed in ISR context!\n",
+               dcprintk(ioc, printk(MYIOC_s_WARN_FMT "Config request not allowed in ISR context!\n",
                                ioc->name));
                return -EPERM;
        }
@@ -5549,7 +5556,7 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
        /* Get and Populate a free Frame
         */
        if ((mf = mpt_get_msg_frame(mpt_base_index, ioc)) == NULL) {
-               dcprintk((MYIOC_s_WARN_FMT "mpt_config: no msg frames!\n",
+               dcprintk(ioc, printk(MYIOC_s_WARN_FMT "mpt_config: no msg frames!\n",
                                ioc->name));
                return -EAGAIN;
        }
@@ -5594,13 +5601,13 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
        if ((pCfg->cfghdr.hdr->PageType & MPI_CONFIG_PAGETYPE_MASK) == MPI_CONFIG_PAGETYPE_EXTENDED) {
                flagsLength |= pExtHdr->ExtPageLength * 4;
 
-               dcprintk((MYIOC_s_INFO_FMT "Sending Config request type %d, page %d and action %d\n",
+               dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending Config request type %d, page %d and action %d\n",
                        ioc->name, pReq->ExtPageType, pReq->Header.PageNumber, pReq->Action));
        }
        else {
                flagsLength |= pCfg->cfghdr.hdr->PageLength * 4;
 
-               dcprintk((MYIOC_s_INFO_FMT "Sending Config request type %d, page %d and action %d\n",
+               dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending Config request type %d, page %d and action %d\n",
                        ioc->name, pReq->Header.PageType, pReq->Header.PageNumber, pReq->Action));
        }
 
@@ -5650,7 +5657,7 @@ mpt_timer_expired(unsigned long data)
 {
        MPT_ADAPTER *ioc = (MPT_ADAPTER *) data;
 
-       dcprintk((MYIOC_s_WARN_FMT "mpt_timer_expired! \n", ioc->name));
+       dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_timer_expired! \n", ioc->name));
 
        /* Perform a FW reload */
        if (mpt_HardResetHandler(ioc, NO_SLEEP) < 0)
@@ -5660,7 +5667,7 @@ mpt_timer_expired(unsigned long data)
         * Hard reset clean-up will wake up
         * process and free all resources.
         */
-       dcprintk((MYIOC_s_WARN_FMT "mpt_timer_expired complete!\n", ioc->name));
+       dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_timer_expired complete!\n", ioc->name));
 
        return;
 }
@@ -5679,7 +5686,7 @@ mpt_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
        CONFIGPARMS *pCfg;
        unsigned long flags;
 
-       dprintk((KERN_WARNING MYNAM
+       dprintk(ioc, printk(KERN_DEBUG MYNAM
                        ": IOC %s_reset routed to MPT base driver!\n",
                        reset_phase==MPT_IOC_SETUP_RESET ? "setup" : (
                        reset_phase==MPT_IOC_PRE_RESET ? "pre" : "post")));
@@ -6050,7 +6057,7 @@ mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag)
        int              rc;
        unsigned long    flags;
 
-       dtmprintk((MYIOC_s_INFO_FMT "HardResetHandler Entered!\n", ioc->name));
+       dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "HardResetHandler Entered!\n", ioc->name));
 #ifdef MFCNT
        printk(MYIOC_s_INFO_FMT "HardResetHandler Entered!\n", ioc->name);
        printk("MF count 0x%x !\n", ioc->mfcnt);
@@ -6082,11 +6089,11 @@ mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag)
 
                for (ii=MPT_MAX_PROTOCOL_DRIVERS-1; ii; ii--) {
                        if (MptResetHandlers[ii]) {
-                               dtmprintk((MYIOC_s_INFO_FMT "Calling IOC reset_setup handler #%d\n",
+                               dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Calling IOC reset_setup handler #%d\n",
                                                ioc->name, ii));
                                r += mpt_signal_reset(ii, ioc, MPT_IOC_SETUP_RESET);
                                if (ioc->alt_ioc) {
-                                       dtmprintk((MYIOC_s_INFO_FMT "Calling alt-%s setup reset handler #%d\n",
+                                       dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Calling alt-%s setup reset handler #%d\n",
                                                        ioc->name, ioc->alt_ioc->name, ii));
                                        r += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_SETUP_RESET);
                                }
@@ -6108,7 +6115,7 @@ mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag)
                ioc->alt_ioc->diagPending = 0;
        spin_unlock_irqrestore(&ioc->diagLock, flags);
 
-       dtmprintk((MYIOC_s_INFO_FMT "HardResetHandler rc = %d!\n", ioc->name, rc));
+       dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "HardResetHandler rc = %d!\n", ioc->name, rc));
 
        return rc;
 }
@@ -6509,16 +6516,18 @@ ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply
        }
 
        EventDescriptionStr(event, evData0, evStr);
-       devtprintk((MYIOC_s_INFO_FMT "MPT event:(%02Xh) : %s\n",
+       devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "MPT event:(%02Xh) : %s\n",
                        ioc->name,
                        event,
                        evStr));
 
-#if defined(MPT_DEBUG) || defined(MPT_DEBUG_VERBOSE_EVENTS)
-       printk(KERN_INFO MYNAM ": Event data:\n" KERN_INFO);
+#ifdef CONFIG_FUSION_LOGGING
+       devtverboseprintk(ioc, printk(KERN_DEBUG MYNAM
+           ": Event data:\n"));
        for (ii = 0; ii < evDataLen; ii++)
-               printk(" %08x", le32_to_cpu(pEventReply->Data[ii]));
-       printk("\n");
+               devtverboseprintk(ioc, printk(" %08x",
+                   le32_to_cpu(pEventReply->Data[ii])));
+       devtverboseprintk(ioc, printk(KERN_DEBUG "\n"));
 #endif
 
        /*
@@ -6573,7 +6582,7 @@ ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply
         */
        for (ii=MPT_MAX_PROTOCOL_DRIVERS-1; ii; ii--) {
                if (MptEvHandlers[ii]) {
-                       devtverboseprintk((MYIOC_s_INFO_FMT "Routing Event to event handler #%d\n",
+                       devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Routing Event to event handler #%d\n",
                                        ioc->name, ii));
                        r += (*(MptEvHandlers[ii]))(ioc, pEventReply);
                        handlers++;
@@ -6585,10 +6594,10 @@ ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply
         *  If needed, send (a single) EventAck.
         */
        if (pEventReply->AckRequired == MPI_EVENT_NOTIFICATION_ACK_REQUIRED) {
-               devtverboseprintk((MYIOC_s_WARN_FMT
+               devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                        "EventAck required\n",ioc->name));
                if ((ii = SendEventAck(ioc, pEventReply)) != 0) {
-                       devtverboseprintk((MYIOC_s_WARN_FMT "SendEventAck returned %d\n",
+                       devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SendEventAck returned %d\n",
                                        ioc->name, ii));
                }
        }
@@ -6935,7 +6944,6 @@ union loginfo_type {
                        sas_loginfo.dw.code, sas_loginfo.dw.subcode);
 }
 
-#ifdef MPT_DEBUG_REPLY
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
 /**
  *     mpt_iocstatus_info_config - IOCSTATUS information for config pages
@@ -7240,7 +7248,6 @@ mpt_iocstatus_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf)
 
        printk(MYIOC_s_INFO_FMT "IOCStatus(0x%04X): %s\n", ioc->name, status, desc);
 }
-#endif
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
 EXPORT_SYMBOL(mpt_attach);
@@ -7305,11 +7312,7 @@ fusion_init(void)
 
        /* Register for hard reset handling callbacks.
         */
-       if (mpt_reset_register(mpt_base_index, mpt_ioc_reset) == 0) {
-               dprintk((KERN_INFO MYNAM ": Register for IOC reset notification\n"));
-       } else {
-               /* FIXME! */
-       }
+       mpt_reset_register(mpt_base_index, mpt_ioc_reset);
 
 #ifdef CONFIG_PROC_FS
        (void) procmpt_create();
@@ -7328,8 +7331,6 @@ static void __exit
 fusion_exit(void)
 {
 
-       dexitprintk((KERN_INFO MYNAM ": fusion_exit() called!\n"));
-
        mpt_reset_deregister(mpt_base_index);
 
 #ifdef CONFIG_PROC_FS
index 98eb9c6..15ff226 100644 (file)
  * MPT drivers.  NOTE: Users of these macro defs must
  * themselves define their own MYNAM.
  */
+#define MYIOC_s_DEBUG_FMT              KERN_DEBUG MYNAM ": %s: "
 #define MYIOC_s_INFO_FMT               KERN_INFO MYNAM ": %s: "
 #define MYIOC_s_NOTE_FMT               KERN_NOTICE MYNAM ": %s: "
 #define MYIOC_s_WARN_FMT               KERN_WARNING MYNAM ": %s: WARNING - "
@@ -543,6 +544,7 @@ typedef struct _MPT_ADAPTER
        char                     board_tracer[16];
        u16                      nvdata_version_persistent;
        u16                      nvdata_version_default;
+       int                      debug_level;
        u8                       io_missing_delay;
        u8                       device_missing_delay;
        SYSIF_REGS __iomem      *chip;          /* == c8817000 (mmap) */
@@ -718,171 +720,7 @@ typedef struct _mpt_sge {
 /*
  *  Funky (private) macros...
  */
-#ifdef MPT_DEBUG
-#define dprintk(x)  printk x
-#else
-#define dprintk(x)
-#endif
-
-#ifdef MPT_DEBUG_INIT
-#define dinitprintk(x)  printk x
-#define DBG_DUMP_FW_REQUEST_FRAME(mfp) \
-       {       int  i, n = 10;                                         \
-               u32 *m = (u32 *)(mfp);                                  \
-               printk(KERN_INFO " ");                                  \
-               for (i=0; i<n; i++)                                     \
-                       printk(" %08x", le32_to_cpu(m[i]));             \
-               printk("\n");                                           \
-       }
-#else
-#define dinitprintk(x)
-#define DBG_DUMP_FW_REQUEST_FRAME(mfp)
-#endif
-
-#ifdef MPT_DEBUG_EXIT
-#define dexitprintk(x)  printk x
-#else
-#define dexitprintk(x)
-#endif
-
-#if defined MPT_DEBUG_FAIL || defined (MPT_DEBUG_SG)
-#define dfailprintk(x) printk x
-#else
-#define dfailprintk(x)
-#endif
-
-#ifdef MPT_DEBUG_HANDSHAKE
-#define dhsprintk(x)  printk x
-#else
-#define dhsprintk(x)
-#endif
-
-#if defined(MPT_DEBUG_EVENTS) || defined(MPT_DEBUG_VERBOSE_EVENTS)
-#define devtprintk(x)  printk x
-#else
-#define devtprintk(x)
-#endif
-
-#ifdef MPT_DEBUG_VERBOSE_EVENTS
-#define devtverboseprintk(x)  printk x
-#else
-#define devtverboseprintk(x)
-#endif
-
-#ifdef MPT_DEBUG_RESET
-#define drsprintk(x)  printk x
-#else
-#define drsprintk(x)
-#endif
-
-//#if defined(MPT_DEBUG) || defined(MPT_DEBUG_MSG_FRAME)
-#if defined(MPT_DEBUG_MSG_FRAME)
-#define dmfprintk(x)  printk x
-#define DBG_DUMP_REQUEST_FRAME(mfp) \
-       {       int  i, n = 24;                                         \
-               u32 *m = (u32 *)(mfp);                                  \
-               for (i=0; i<n; i++) {                                   \
-                       if (i && ((i%8)==0))                            \
-                               printk("\n");                           \
-                       printk("%08x ", le32_to_cpu(m[i]));             \
-               }                                                       \
-               printk("\n");                                           \
-       }
-#else
-#define dmfprintk(x)
-#define DBG_DUMP_REQUEST_FRAME(mfp)
-#endif
-
-#ifdef MPT_DEBUG_IRQ
-#define dirqprintk(x)  printk x
-#else
-#define dirqprintk(x)
-#endif
-
-#ifdef MPT_DEBUG_SG
-#define dsgprintk(x)  printk x
-#else
-#define dsgprintk(x)
-#endif
-
-#if defined(MPT_DEBUG_DL) || defined(MPT_DEBUG)
-#define ddlprintk(x)  printk x
-#else
-#define ddlprintk(x)
-#endif
-
-#ifdef MPT_DEBUG_DV
-#define ddvprintk(x)  printk x
-#else
-#define ddvprintk(x)
-#endif
-
-#if defined(MPT_DEBUG_DV) || defined(MPT_DEBUG_DV_TINY)
-#define ddvtprintk(x)  printk x
-#else
-#define ddvtprintk(x)
-#endif
-
-#ifdef MPT_DEBUG_IOCTL
-#define dctlprintk(x) printk x
-#else
-#define dctlprintk(x)
-#endif
-
-#ifdef MPT_DEBUG_REPLY
-#define dreplyprintk(x) printk x
-#else
-#define dreplyprintk(x)
-#endif
-
-#ifdef DMPT_DEBUG_FC
-#define dfcprintk(x) printk x
-#else
-#define dfcprintk(x)
-#endif
-
-#ifdef MPT_DEBUG_TM
-#define dtmprintk(x) printk x
-#define DBG_DUMP_TM_REQUEST_FRAME(mfp) \
-       {       u32 *m = (u32 *)(mfp);                                  \
-               int  i, n = 13;                                         \
-               printk("TM_REQUEST:\n");                                \
-               for (i=0; i<n; i++) {                                   \
-                       if (i && ((i%8)==0))                            \
-                               printk("\n");                           \
-                       printk("%08x ", le32_to_cpu(m[i]));             \
-               }                                                       \
-               printk("\n");                                           \
-       }
-#define DBG_DUMP_TM_REPLY_FRAME(mfp) \
-       {       u32 *m = (u32 *)(mfp);                                  \
-               int  i, n = (le32_to_cpu(m[0]) & 0x00FF0000) >> 16;     \
-               printk("TM_REPLY MessageLength=%d:\n", n);              \
-               for (i=0; i<n; i++) {                                   \
-                       if (i && ((i%8)==0))                            \
-                               printk("\n");                           \
-                       printk(" %08x", le32_to_cpu(m[i]));             \
-               }                                                       \
-               printk("\n");                                           \
-       }
-#else
-#define dtmprintk(x)
-#define DBG_DUMP_TM_REQUEST_FRAME(mfp)
-#define DBG_DUMP_TM_REPLY_FRAME(mfp)
-#endif
-
-#if defined(MPT_DEBUG_CONFIG) || defined(MPT_DEBUG)
-#define dcprintk(x) printk x
-#else
-#define dcprintk(x)
-#endif
-
-#if defined(MPT_DEBUG_SCSI) || defined(MPT_DEBUG) || defined(MPT_DEBUG_MSG_FRAME)
-#define dsprintk(x) printk x
-#else
-#define dsprintk(x)
-#endif
-
+#include "mptdebug.h"
 
 #define MPT_INDEX_2_MFPTR(ioc,idx) \
        (MPT_FRAME_HDR*)( (u8*)(ioc)->req_frames + (ioc)->req_sz * (idx) )
@@ -893,36 +731,6 @@ typedef struct _mpt_sge {
 #define MPT_INDEX_2_RFPTR(ioc,idx) \
        (MPT_FRAME_HDR*)( (u8*)(ioc)->reply_frames + (ioc)->req_sz * (idx) )
 
-#if defined(MPT_DEBUG) || defined(MPT_DEBUG_MSG_FRAME)
-#define DBG_DUMP_REPLY_FRAME(mfp) \
-       {       u32 *m = (u32 *)(mfp);                                  \
-               int  i, n = (le32_to_cpu(m[0]) & 0x00FF0000) >> 16;     \
-               printk(KERN_INFO " ");                                  \
-               for (i=0; i<n; i++)                                     \
-                       printk(" %08x", le32_to_cpu(m[i]));             \
-               printk("\n");                                           \
-       }
-#define DBG_DUMP_REQUEST_FRAME_HDR(mfp) \
-       {       int  i, n = 3;                                          \
-               u32 *m = (u32 *)(mfp);                                  \
-               printk(KERN_INFO " ");                                  \
-               for (i=0; i<n; i++)                                     \
-                       printk(" %08x", le32_to_cpu(m[i]));             \
-               printk("\n");                                           \
-       }
-#else
-#define DBG_DUMP_REPLY_FRAME(mfp)
-#define DBG_DUMP_REQUEST_FRAME_HDR(mfp)
-#endif
-
-// debug sas wide ports
-#ifdef MPT_DEBUG_SAS_WIDE
-#define dsaswideprintk(x) printk x
-#else
-#define dsaswideprintk(x)
-#endif
-
-
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
 
 #define SCSI_STD_SENSE_BYTES    18
index 58e6c31..89695e7 100644 (file)
@@ -181,7 +181,7 @@ static inline int
 mptctl_syscall_down(MPT_ADAPTER *ioc, int nonblock)
 {
        int rc = 0;
-       dctlprintk((KERN_INFO MYNAM "::mptctl_syscall_down(%p,%d) called\n", ioc, nonblock));
+//     dctlprintk(ioc, printk(KERN_DEBUG MYNAM "::mptctl_syscall_down(%p,%d) called\n", ioc, nonblock));
 
        if (nonblock) {
                if (!mutex_trylock(&ioc->ioctl->ioctl_mutex))
@@ -190,7 +190,7 @@ mptctl_syscall_down(MPT_ADAPTER *ioc, int nonblock)
                if (mutex_lock_interruptible(&ioc->ioctl->ioctl_mutex))
                        rc = -ERESTARTSYS;
        }
-       dctlprintk((KERN_INFO MYNAM "::mptctl_syscall_down return %d\n", rc));
+//     dctlprintk(ioc, printk(KERN_DEBUG MYNAM "::mptctl_syscall_down return %d\n", rc));
        return rc;
 }
 
@@ -209,18 +209,19 @@ mptctl_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply)
        u16 iocStatus;
        u8 cmd;
 
-       dctlprintk(("mptctl_reply()!\n"));
        if (req)
                 cmd = req->u.hdr.Function;
        else
                return 1;
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "\tcompleting mpi function (0x%02X), req=%p, "
+           "reply=%p\n", ioc->name,  req->u.hdr.Function, req, reply));
 
        if (ioc->ioctl) {
 
                if (reply==NULL) {
 
-                       dctlprintk(("mptctl_reply() NULL Reply "
-                               "Function=%x!\n", cmd));
+                       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_reply() NULL Reply "
+                               "Function=%x!\n", ioc->name, cmd));
 
                        ioc->ioctl->status |= MPT_IOCTL_STATUS_COMMAND_GOOD;
                        ioc->ioctl->reset &= ~MPTCTL_RESET_OK;
@@ -233,14 +234,9 @@ mptctl_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply)
 
                }
 
-               dctlprintk(("mptctl_reply() with req=%p "
-                       "reply=%p Function=%x!\n", req, reply, cmd));
-
                /* Copy the reply frame (which much exist
                 * for non-SCSI I/O) to the IOC structure.
                 */
-               dctlprintk(("Copying Reply Frame @%p to ioc%d!\n",
-                       reply, ioc->id));
                memcpy(ioc->ioctl->ReplyFrame, reply,
                        min(ioc->reply_sz, 4*reply->u.reply.MsgLength));
                ioc->ioctl->status |= MPT_IOCTL_STATUS_RF_VALID;
@@ -252,8 +248,24 @@ mptctl_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply)
                if (iocStatus  == MPI_IOCSTATUS_SUCCESS)
                        ioc->ioctl->status |= MPT_IOCTL_STATUS_COMMAND_GOOD;
 
+               if (iocStatus || reply->u.reply.IOCLogInfo)
+                       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "\tiocstatus (0x%04X), "
+                               "loginfo (0x%08X)\n", ioc->name,
+                               iocStatus,
+                               le32_to_cpu(reply->u.reply.IOCLogInfo)));
+
                if ((cmd == MPI_FUNCTION_SCSI_IO_REQUEST) ||
                        (cmd == MPI_FUNCTION_RAID_SCSI_IO_PASSTHROUGH)) {
+
+                       if (reply->u.sreply.SCSIStatus || reply->u.sreply.SCSIState)
+                               dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                                       "\tscsi_status (0x%02x), scsi_state (0x%02x), "
+                                       "tag = (0x%04x), transfer_count (0x%08x)\n", ioc->name,
+                                       reply->u.sreply.SCSIStatus,
+                                       reply->u.sreply.SCSIState,
+                                       le16_to_cpu(reply->u.sreply.TaskTag),
+                                       le32_to_cpu(reply->u.sreply.TransferCount)));
+
                        ioc->ioctl->reset &= ~MPTCTL_RESET_OK;
 
                        if ((iocStatus == MPI_IOCSTATUS_SCSI_DATA_UNDERRUN) ||
@@ -298,8 +310,8 @@ static void mptctl_timeout_expired (MPT_IOCTL *ioctl)
 {
        int rc = 1;
 
-       dctlprintk((KERN_NOTICE MYNAM ": Timeout Expired! Host %d\n",
-                               ioctl->ioc->id));
+       dctlprintk(ioctl->ioc, printk(MYIOC_s_DEBUG_FMT ": Timeout Expired! Host %d\n",
+                               ioctl->ioc->name, ioctl->ioc->id));
        if (ioctl == NULL)
                return;
 
@@ -311,7 +323,7 @@ static void mptctl_timeout_expired (MPT_IOCTL *ioctl)
                /* Issue a reset for this device.
                 * The IOC is not responding.
                 */
-               dctlprintk((MYIOC_s_INFO_FMT "Calling HardReset! \n",
+               dctlprintk(ioctl->ioc, printk(MYIOC_s_DEBUG_FMT "Calling HardReset! \n",
                         ioctl->ioc->name));
                mpt_HardResetHandler(ioctl->ioc, CAN_SLEEP);
        }
@@ -350,14 +362,14 @@ static int mptctl_bus_reset(MPT_IOCTL *ioctl)
        /* Send request
         */
        if ((mf = mpt_get_msg_frame(mptctl_id, ioctl->ioc)) == NULL) {
-               dctlprintk((MYIOC_s_WARN_FMT "IssueTaskMgmt, no msg frames!!\n",
+               dtmprintk(ioctl->ioc, printk(MYIOC_s_DEBUG_FMT "IssueTaskMgmt, no msg frames!!\n",
                                ioctl->ioc->name));
 
                mptctl_free_tm_flags(ioctl->ioc);
                return -ENOMEM;
        }
 
-       dtmprintk((MYIOC_s_INFO_FMT "IssueTaskMgmt request @ %p\n",
+       dtmprintk(ioctl->ioc, printk(MYIOC_s_DEBUG_FMT "IssueTaskMgmt request @ %p\n",
                        ioctl->ioc->name, mf));
 
        pScsiTm = (SCSITaskMgmt_t *) mf;
@@ -377,15 +389,15 @@ static int mptctl_bus_reset(MPT_IOCTL *ioctl)
                pScsiTm->Reserved2[ii] = 0;
 
        pScsiTm->TaskMsgContext = 0;
-       dtmprintk((MYIOC_s_INFO_FMT
+       dtmprintk(ioctl->ioc, printk(MYIOC_s_DEBUG_FMT
                "mptctl_bus_reset: issued.\n", ioctl->ioc->name));
 
-       DBG_DUMP_TM_REQUEST_FRAME((u32 *)mf);
+       DBG_DUMP_TM_REQUEST_FRAME(ioctl->ioc, (u32 *)mf);
 
        ioctl->wait_done=0;
        if ((retval = mpt_send_handshake_request(mptctl_id, ioctl->ioc,
             sizeof(SCSITaskMgmt_t), (u32*)pScsiTm, CAN_SLEEP)) != 0) {
-               dfailprintk((MYIOC_s_ERR_FMT "_send_handshake FAILED!"
+               dfailprintk(ioctl->ioc, printk(MYIOC_s_ERR_FMT "_send_handshake FAILED!"
                        " (hd %p, ioc %p, mf %p) \n", hd->ioc->name, hd,
                        hd->ioc, mf));
                goto mptctl_bus_reset_done;
@@ -456,7 +468,7 @@ static int
 mptctl_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
 {
        MPT_IOCTL *ioctl = ioc->ioctl;
-       dctlprintk((KERN_INFO MYNAM ": IOC %s_reset routed to IOCTL driver!\n",
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": IOC %s_reset routed to IOCTL driver!\n",ioc->name,
                reset_phase==MPT_IOC_SETUP_RESET ? "setup" : (
                reset_phase==MPT_IOC_PRE_RESET ? "pre" : "post")));
 
@@ -487,7 +499,8 @@ mptctl_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
 
        event = le32_to_cpu(pEvReply->Event) & 0xFF;
 
-       dctlprintk(("%s() called\n", __FUNCTION__));
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s() called\n",
+           ioc->name, __FUNCTION__));
        if(async_queue == NULL)
                return 1;
 
@@ -497,8 +510,10 @@ mptctl_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
         */
         if (event == 0x21 ) {
                ioc->aen_event_read_flag=1;
-               dctlprintk(("Raised SIGIO to application\n"));
-               devtverboseprintk(("Raised SIGIO to application\n"));
+               dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Raised SIGIO to application\n",
+                   ioc->name));
+               devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                   "Raised SIGIO to application\n", ioc->name));
                kill_fasync(&async_queue, SIGIO, POLL_IN);
                return 1;
         }
@@ -515,8 +530,10 @@ mptctl_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
         */
        if (ioc->events && (ioc->eventTypes & ( 1 << event))) {
                ioc->aen_event_read_flag=1;
-               dctlprintk(("Raised SIGIO to application\n"));
-               devtverboseprintk(("Raised SIGIO to application\n"));
+               dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                   "Raised SIGIO to application\n", ioc->name));
+               devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                   "Raised SIGIO to application\n", ioc->name));
                kill_fasync(&async_queue, SIGIO, POLL_IN);
        }
        return 1;
@@ -530,14 +547,12 @@ mptctl_fasync(int fd, struct file *filep, int mode)
        list_for_each_entry(ioc, &ioc_list, list)
                ioc->aen_event_read_flag=0;
 
-       dctlprintk(("%s() called\n", __FUNCTION__));
        return fasync_helper(fd, filep, mode, &async_queue);
 }
 
 static int
 mptctl_release(struct inode *inode, struct file *filep)
 {
-       dctlprintk(("%s() called\n", __FUNCTION__));
        return fasync_helper(-1, filep, 0, &async_queue);
 }
 
@@ -558,8 +573,6 @@ __mptctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
        int ret;
        MPT_ADAPTER *iocp = NULL;
 
-       dctlprintk(("mptctl_ioctl() called\n"));
-
        if (copy_from_user(&khdr, uhdr, sizeof(khdr))) {
                printk(KERN_ERR "%s::mptctl_ioctl() @%d - "
                                "Unable to copy mpt_ioctl_header data @ %p\n",
@@ -574,13 +587,13 @@ __mptctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
        iocnumX = khdr.iocnum & 0xFF;
        if (((iocnum = mpt_verify_adapter(iocnumX, &iocp)) < 0) ||
            (iocp == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_ioctl() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnumX));
+               printk(KERN_DEBUG "%s::mptctl_ioctl() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnumX);
                return -ENODEV;
        }
 
        if (!iocp->active) {
-               printk(KERN_ERR "%s::mptctl_ioctl() @%d - Controller disabled.\n",
+               printk(KERN_DEBUG "%s::mptctl_ioctl() @%d - Controller disabled.\n",
                                __FILE__, __LINE__);
                return -EFAULT;
        }
@@ -612,8 +625,6 @@ __mptctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
        if ((ret = mptctl_syscall_down(iocp, nonblock)) != 0)
                return ret;
 
-       dctlprintk((MYIOC_s_INFO_FMT ": mptctl_ioctl()\n", iocp->name));
-
        if (cmd == MPTFWDOWNLOAD)
                ret = mptctl_fw_download(arg);
        else if (cmd == MPTCOMMAND)
@@ -648,8 +659,6 @@ static int mptctl_do_reset(unsigned long arg)
        struct mpt_ioctl_diag_reset krinfo;
        MPT_ADAPTER             *iocp;
 
-       dctlprintk((KERN_INFO "mptctl_do_reset called.\n"));
-
        if (copy_from_user(&krinfo, urinfo, sizeof(struct mpt_ioctl_diag_reset))) {
                printk(KERN_ERR "%s@%d::mptctl_do_reset - "
                                "Unable to copy mpt_ioctl_diag_reset struct @ %p\n",
@@ -658,11 +667,14 @@ static int mptctl_do_reset(unsigned long arg)
        }
 
        if (mpt_verify_adapter(krinfo.hdr.iocnum, &iocp) < 0) {
-               dctlprintk((KERN_ERR "%s@%d::mptctl_do_reset - ioc%d not found!\n",
-                               __FILE__, __LINE__, krinfo.hdr.iocnum));
+               printk(KERN_DEBUG "%s@%d::mptctl_do_reset - ioc%d not found!\n",
+                               __FILE__, __LINE__, krinfo.hdr.iocnum);
                return -ENODEV; /* (-6) No such device or address */
        }
 
+       dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "mptctl_do_reset called.\n",
+           iocp->name));
+
        if (mpt_HardResetHandler(iocp, CAN_SLEEP) != 0) {
                printk (KERN_ERR "%s@%d::mptctl_do_reset - reset failed.\n",
                        __FILE__, __LINE__);
@@ -695,7 +707,6 @@ mptctl_fw_download(unsigned long arg)
        struct mpt_fw_xfer __user *ufwdl = (void __user *) arg;
        struct mpt_fw_xfer       kfwdl;
 
-       dctlprintk((KERN_INFO "mptctl_fwdl called. mptctl_id = %xh\n", mptctl_id)); //tc
        if (copy_from_user(&kfwdl, ufwdl, sizeof(struct mpt_fw_xfer))) {
                printk(KERN_ERR "%s@%d::_ioctl_fwdl - "
                                "Unable to copy mpt_fw_xfer struct @ %p\n",
@@ -744,15 +755,8 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen)
        u16                      iocstat;
        pFWDownloadReply_t       ReplyMsg = NULL;
 
-       dctlprintk(("mptctl_do_fwdl called. mptctl_id = %xh.\n", mptctl_id));
-
-       dctlprintk(("DbG: kfwdl.bufp  = %p\n", ufwbuf));
-       dctlprintk(("DbG: kfwdl.fwlen = %d\n", (int)fwlen));
-       dctlprintk(("DbG: kfwdl.ioc   = %04xh\n", ioc));
-
        if (mpt_verify_adapter(ioc, &iocp) < 0) {
-               dctlprintk(("ioctl_fwdl - ioc%d not found!\n",
-                                ioc));
+               printk(KERN_DEBUG "ioctl_fwdl - ioc%d not found!\n",                             ioc);
                return -ENODEV; /* (-6) No such device or address */
        } else {
 
@@ -761,6 +765,16 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen)
                if ((mf = mpt_get_msg_frame(mptctl_id, iocp)) == NULL)
                        return -EAGAIN;
        }
+
+       dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT
+           "mptctl_do_fwdl called. mptctl_id = %xh.\n", iocp->name, mptctl_id));
+       dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.bufp  = %p\n",
+           iocp->name, ufwbuf));
+       dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.fwlen = %d\n",
+           iocp->name, (int)fwlen));
+       dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.ioc   = %04xh\n",
+           iocp->name, ioc));
+
        dlmsg = (FWDownload_t*) mf;
        ptsge = (FWDownloadTCSGE_t *) &dlmsg->SGL;
        sgOut = (char *) (ptsge + 1);
@@ -829,7 +843,8 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen)
                goto fwdl_out;
        }
 
-       dctlprintk(("DbG: sgl buffer  = %p, sgfrags = %d\n", sgl, numfrags));
+       dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: sgl buffer = %p, sgfrags = %d\n",
+           iocp->name, sgl, numfrags));
 
        /*
         * Parse SG list, copying sgl itself,
@@ -865,15 +880,7 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen)
                sgOut += (sizeof(dma_addr_t) + sizeof(u32));
        }
 
-#ifdef MPT_DEBUG
-       {
-               u32 *m = (u32 *)mf;
-               printk(KERN_INFO MYNAM ": F/W download request:\n" KERN_INFO " ");
-               for (i=0; i < 7+numfrags*2; i++)
-                       printk(" %08x", le32_to_cpu(m[i]));
-               printk("\n");
-       }
-#endif
+       DBG_DUMP_FW_DOWNLOAD(iocp, (u32 *)mf, numfrags);
 
        /*
         * Finally, perform firmware download.
@@ -1049,13 +1056,11 @@ kbuf_alloc_2_sgl(int bytes, u32 sgdir, int sge_offset, int *frags,
        *frags = numfrags;
        *blp = buflist;
 
-       dctlprintk((KERN_INFO MYNAM "-SG: kbuf_alloc_2_sgl() - "
-                          "%d SG frags generated!\n",
-                          numfrags));
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "-SG: kbuf_alloc_2_sgl() - "
+          "%d SG frags generated!\n", ioc->name, numfrags));
 
-       dctlprintk((KERN_INFO MYNAM "-SG: kbuf_alloc_2_sgl() - "
-                          "last (big) alloc_sz=%d\n",
-                          alloc_sz));
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "-SG: kbuf_alloc_2_sgl() - "
+          "last (big) alloc_sz=%d\n", ioc->name, alloc_sz));
 
        return sglbuf;
 
@@ -1139,7 +1144,8 @@ kfree_sgl(MptSge_t *sgl, dma_addr_t sgl_dma, struct buflist *buflist, MPT_ADAPTE
 
        pci_free_consistent(ioc->pcidev, MAX_SGL_BYTES, sgl, sgl_dma);
        kfree(buflist);
-       dctlprintk((KERN_INFO MYNAM "-SG: Free'd 1 SGL buf + %d kbufs!\n", n));
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "-SG: Free'd 1 SGL buf + %d kbufs!\n",
+           ioc->name, n));
 }
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
@@ -1166,7 +1172,6 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size)
        struct scsi_device      *sdev;
        VirtDevice              *vdev;
 
-       dctlprintk((": mptctl_getiocinfo called.\n"));
        /* Add of PCI INFO results in unaligned access for
         * IA64 and Sparc. Reset long to int. Return no PCI
         * data for obsolete format.
@@ -1199,8 +1204,8 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size)
 
        if (((iocnum = mpt_verify_adapter(karg->hdr.iocnum, &ioc)) < 0) ||
            (ioc == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_getiocinfo() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnum));
+               printk(KERN_DEBUG "%s::mptctl_getiocinfo() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnum);
                kfree(karg);
                return -ENODEV;
        }
@@ -1214,6 +1219,9 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size)
                return -EFAULT;
        }
 
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_getiocinfo called.\n",
+           ioc->name));
+
        /* Fill in the data and return the structure to the calling
         * program
         */
@@ -1320,7 +1328,6 @@ mptctl_gettargetinfo (unsigned long arg)
        u8                      port;
        struct scsi_device      *sdev;
 
-       dctlprintk(("mptctl_gettargetinfo called.\n"));
        if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_targetinfo))) {
                printk(KERN_ERR "%s@%d::mptctl_gettargetinfo - "
                        "Unable to read in mpt_ioctl_targetinfo struct @ %p\n",
@@ -1330,11 +1337,13 @@ mptctl_gettargetinfo (unsigned long arg)
 
        if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
            (ioc == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_gettargetinfo() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnum));
+               printk(KERN_DEBUG "%s::mptctl_gettargetinfo() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnum);
                return -ENODEV;
        }
 
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_gettargetinfo called.\n",
+           ioc->name));
        /* Get the port number and set the maximum number of bytes
         * in the returned structure.
         * Ignore the port setting.
@@ -1434,7 +1443,6 @@ mptctl_readtest (unsigned long arg)
        MPT_ADAPTER *ioc;
        int iocnum;
 
-       dctlprintk(("mptctl_readtest called.\n"));
        if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_test))) {
                printk(KERN_ERR "%s@%d::mptctl_readtest - "
                        "Unable to read in mpt_ioctl_test struct @ %p\n",
@@ -1444,11 +1452,13 @@ mptctl_readtest (unsigned long arg)
 
        if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
            (ioc == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_readtest() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnum));
+               printk(KERN_DEBUG "%s::mptctl_readtest() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnum);
                return -ENODEV;
        }
 
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_readtest called.\n",
+           ioc->name));
        /* Fill in the data and return the structure to the calling
         * program
         */
@@ -1494,7 +1504,6 @@ mptctl_eventquery (unsigned long arg)
        MPT_ADAPTER *ioc;
        int iocnum;
 
-       dctlprintk(("mptctl_eventquery called.\n"));
        if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventquery))) {
                printk(KERN_ERR "%s@%d::mptctl_eventquery - "
                        "Unable to read in mpt_ioctl_eventquery struct @ %p\n",
@@ -1504,11 +1513,13 @@ mptctl_eventquery (unsigned long arg)
 
        if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
            (ioc == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_eventquery() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnum));
+               printk(KERN_DEBUG "%s::mptctl_eventquery() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnum);
                return -ENODEV;
        }
 
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventquery called.\n",
+           ioc->name));
        karg.eventEntries = MPTCTL_EVENT_LOG_SIZE;
        karg.eventTypes = ioc->eventTypes;
 
@@ -1532,7 +1543,6 @@ mptctl_eventenable (unsigned long arg)
        MPT_ADAPTER *ioc;
        int iocnum;
 
-       dctlprintk(("mptctl_eventenable called.\n"));
        if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventenable))) {
                printk(KERN_ERR "%s@%d::mptctl_eventenable - "
                        "Unable to read in mpt_ioctl_eventenable struct @ %p\n",
@@ -1542,11 +1552,13 @@ mptctl_eventenable (unsigned long arg)
 
        if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
            (ioc == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_eventenable() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnum));
+               printk(KERN_DEBUG "%s::mptctl_eventenable() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnum);
                return -ENODEV;
        }
 
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventenable called.\n",
+           ioc->name));
        if (ioc->events == NULL) {
                /* Have not yet allocated memory - do so now.
                 */
@@ -1579,7 +1591,6 @@ mptctl_eventreport (unsigned long arg)
        int                      iocnum;
        int                      numBytes, maxEvents, max;
 
-       dctlprintk(("mptctl_eventreport called.\n"));
        if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventreport))) {
                printk(KERN_ERR "%s@%d::mptctl_eventreport - "
                        "Unable to read in mpt_ioctl_eventreport struct @ %p\n",
@@ -1589,10 +1600,12 @@ mptctl_eventreport (unsigned long arg)
 
        if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
            (ioc == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_eventreport() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnum));
+               printk(KERN_DEBUG "%s::mptctl_eventreport() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnum);
                return -ENODEV;
        }
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventreport called.\n",
+           ioc->name));
 
        numBytes = karg.hdr.maxDataSize - sizeof(mpt_ioctl_header);
        maxEvents = numBytes/sizeof(MPT_IOCTL_EVENTS);
@@ -1632,7 +1645,6 @@ mptctl_replace_fw (unsigned long arg)
        int                      iocnum;
        int                      newFwSize;
 
-       dctlprintk(("mptctl_replace_fw called.\n"));
        if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_replace_fw))) {
                printk(KERN_ERR "%s@%d::mptctl_replace_fw - "
                        "Unable to read in mpt_ioctl_replace_fw struct @ %p\n",
@@ -1642,11 +1654,13 @@ mptctl_replace_fw (unsigned long arg)
 
        if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
            (ioc == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_replace_fw() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnum));
+               printk(KERN_DEBUG "%s::mptctl_replace_fw() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnum);
                return -ENODEV;
        }
 
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_replace_fw called.\n",
+           ioc->name));
        /* If caching FW, Free the old FW image
         */
        if (ioc->cached_fw == NULL)
@@ -1704,7 +1718,6 @@ mptctl_mpt_command (unsigned long arg)
        int             iocnum;
        int             rc;
 
-       dctlprintk(("mptctl_command called.\n"));
 
        if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_command))) {
                printk(KERN_ERR "%s@%d::mptctl_mpt_command - "
@@ -1715,8 +1728,8 @@ mptctl_mpt_command (unsigned long arg)
 
        if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
            (ioc == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_mpt_command() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnum));
+               printk(KERN_DEBUG "%s::mptctl_mpt_command() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnum);
                return -ENODEV;
        }
 
@@ -1756,13 +1769,12 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr)
        ulong           timeout;
        struct scsi_device *sdev;
 
-       dctlprintk(("mptctl_do_mpt_command called.\n"));
        bufIn.kptr = bufOut.kptr = NULL;
 
        if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
            (ioc == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_do_mpt_command() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnum));
+               printk(KERN_DEBUG "%s::mptctl_do_mpt_command() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnum);
                return -ENODEV;
        }
        if (!ioc->ioctl) {
@@ -1816,6 +1828,9 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr)
 
        /* Verify that this request is allowed.
         */
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "sending mpi function (0x%02X), req=%p\n",
+           ioc->name, hdr->Function, mf));
+
        switch (hdr->Function) {
        case MPI_FUNCTION_IOC_FACTS:
        case MPI_FUNCTION_PORT_FACTS:
@@ -1823,6 +1838,18 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr)
                break;
 
        case MPI_FUNCTION_CONFIG:
+       {
+               Config_t *config_frame;
+               config_frame = (Config_t *)mf;
+               dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "\ttype=0x%02x ext_type=0x%02x "
+                   "number=0x%02x action=0x%02x\n", ioc->name,
+                   config_frame->Header.PageType,
+                   config_frame->ExtPageType,
+                   config_frame->Header.PageNumber,
+                   config_frame->Action));
+               break;
+       }
+
        case MPI_FUNCTION_FC_COMMON_TRANSPORT_SEND:
        case MPI_FUNCTION_FC_EX_LINK_SRVC_SEND:
        case MPI_FUNCTION_FW_UPLOAD:
@@ -2158,12 +2185,12 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr)
        ioc->ioctl->wait_done = 0;
        if (hdr->Function == MPI_FUNCTION_SCSI_TASK_MGMT) {
 
-               DBG_DUMP_TM_REQUEST_FRAME((u32 *)mf);
+               DBG_DUMP_TM_REQUEST_FRAME(ioc, (u32 *)mf);
 
                if (mpt_send_handshake_request(mptctl_id, ioc,
                        sizeof(SCSITaskMgmt_t), (u32*)mf,
                        CAN_SLEEP) != 0) {
-                       dfailprintk((MYIOC_s_ERR_FMT "_send_handshake FAILED!"
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT "_send_handshake FAILED!"
                                " (ioc %p, mf %p) \n", ioc->name,
                                ioc, mf));
                        mptctl_free_tm_flags(ioc);
@@ -2303,7 +2330,6 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)
        MPT_FRAME_HDR           *mf = NULL;
        MPIHeader_t             *mpi_hdr;
 
-       dctlprintk((": mptctl_hp_hostinfo called.\n"));
        /* Reset long to int. Should affect IA64 and SPARC only
         */
        if (data_size == sizeof(hp_host_info_t))
@@ -2322,10 +2348,12 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)
 
        if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
            (ioc == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_hp_hostinfo() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnum));
+               printk(KERN_DEBUG "%s::mptctl_hp_hostinfo() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnum);
                return -ENODEV;
        }
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": mptctl_hp_hostinfo called.\n",
+           ioc->name));
 
        /* Fill in the data and return the structure to the calling
         * program
@@ -2441,7 +2469,7 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)
         * Gather ISTWI(Industry Standard Two Wire Interface) Data
         */
        if ((mf = mpt_get_msg_frame(mptctl_id, ioc)) == NULL) {
-               dfailprintk((MYIOC_s_WARN_FMT "%s, no msg frames!!\n",
+               dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s, no msg frames!!\n",
                    ioc->name,__FUNCTION__));
                goto out;
        }
@@ -2474,7 +2502,7 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)
             HZ*MPT_IOCTL_DEFAULT_TIMEOUT /* 10 sec */);
 
        if(rc <=0 && (ioc->ioctl->wait_done != 1 )) {
-               /* 
+               /*
                 * Now we need to reset the board
                 */
                mpt_free_msg_frame(ioc, mf);
@@ -2482,7 +2510,7 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)
                goto out;
        }
 
-       /* 
+       /*
         *ISTWI Data Definition
         * pbuf[0] = FW_VERSION = 0x4
         * pbuf[1] = Bay Count = 6 or 4 or 2, depending on
@@ -2538,7 +2566,6 @@ mptctl_hp_targetinfo(unsigned long arg)
        ConfigPageHeader_t      hdr;
        int                     tmp, np, rc = 0;
 
-       dctlprintk((": mptctl_hp_targetinfo called.\n"));
        if (copy_from_user(&karg, uarg, sizeof(hp_target_info_t))) {
                printk(KERN_ERR "%s@%d::mptctl_hp_targetinfo - "
                        "Unable to read in hp_host_targetinfo struct @ %p\n",
@@ -2548,10 +2575,12 @@ mptctl_hp_targetinfo(unsigned long arg)
 
        if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
                (ioc == NULL)) {
-               dctlprintk((KERN_ERR "%s::mptctl_hp_targetinfo() @%d - ioc%d not found!\n",
-                               __FILE__, __LINE__, iocnum));
+               printk(KERN_DEBUG "%s::mptctl_hp_targetinfo() @%d - ioc%d not found!\n",
+                               __FILE__, __LINE__, iocnum);
                return -ENODEV;
        }
+       dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": mptctl_hp_targetinfo called.\n",
+           ioc->name));
 
        /*  There is nothing to do for FCP parts.
         */
@@ -2694,7 +2723,6 @@ compat_mptfwxfer_ioctl(struct file *filp, unsigned int cmd,
        int nonblock = (filp->f_flags & O_NONBLOCK);
        int ret;
 
-       dctlprintk((KERN_INFO MYNAM "::compat_mptfwxfer_ioctl() called\n"));
 
        if (copy_from_user(&kfw32, (char __user *)arg, sizeof(kfw32)))
                return -EFAULT;
@@ -2703,14 +2731,16 @@ compat_mptfwxfer_ioctl(struct file *filp, unsigned int cmd,
        iocnumX = kfw32.iocnum & 0xFF;
        if (((iocnum = mpt_verify_adapter(iocnumX, &iocp)) < 0) ||
            (iocp == NULL)) {
-               dctlprintk((KERN_ERR MYNAM "::compat_mptfwxfer_ioctl @%d - ioc%d not found!\n",
-                               __LINE__, iocnumX));
+               printk(KERN_DEBUG MYNAM "::compat_mptfwxfer_ioctl @%d - ioc%d not found!\n",
+                               __LINE__, iocnumX);
                return -ENODEV;
        }
 
        if ((ret = mptctl_syscall_down(iocp, nonblock)) != 0)
                return ret;
 
+       dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "compat_mptfwxfer_ioctl() called\n",
+           iocp->name));
        kfw.iocnum = iocnum;
        kfw.fwlen = kfw32.fwlen;
        kfw.bufp = compat_ptr(kfw32.bufp);
@@ -2734,8 +2764,6 @@ compat_mpt_command(struct file *filp, unsigned int cmd,
        int nonblock = (filp->f_flags & O_NONBLOCK);
        int ret;
 
-       dctlprintk((KERN_INFO MYNAM "::compat_mpt_command() called\n"));
-
        if (copy_from_user(&karg32, (char __user *)arg, sizeof(karg32)))
                return -EFAULT;
 
@@ -2743,14 +2771,16 @@ compat_mpt_command(struct file *filp, unsigned int cmd,
        iocnumX = karg32.hdr.iocnum & 0xFF;
        if (((iocnum = mpt_verify_adapter(iocnumX, &iocp)) < 0) ||
            (iocp == NULL)) {
-               dctlprintk((KERN_ERR MYNAM "::compat_mpt_command @%d - ioc%d not found!\n",
-                               __LINE__, iocnumX));
+               printk(KERN_DEBUG MYNAM "::compat_mpt_command @%d - ioc%d not found!\n",
+                               __LINE__, iocnumX);
                return -ENODEV;
        }
 
        if ((ret = mptctl_syscall_down(iocp, nonblock)) != 0)
                return ret;
 
+       dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "compat_mpt_command() called\n",
+           iocp->name));
        /* Copy data to karg */
        karg.hdr.iocnum = karg32.hdr.iocnum;
        karg.hdr.port = karg32.hdr.port;
@@ -2878,11 +2908,7 @@ static int __init mptctl_init(void)
 
        show_mptmod_ver(my_NAME, my_VERSION);
 
-       if(mpt_device_driver_register(&mptctl_driver,
-         MPTCTL_DRIVER) != 0 ) {
-               dprintk((KERN_INFO MYNAM
-               ": failed to register dd callbacks\n"));
-       }
+       mpt_device_driver_register(&mptctl_driver, MPTCTL_DRIVER);
 
        /* Register this device */
        err = misc_register(&mptctl_miscdev);
@@ -2905,16 +2931,8 @@ static int __init mptctl_init(void)
                goto out_fail;
        }
 
-       if (mpt_reset_register(mptctl_id, mptctl_ioc_reset) == 0) {
-               dprintk((KERN_INFO MYNAM ": Registered for IOC reset notifications\n"));
-       } else {
-               /* FIXME! */
-       }
-
-       if (mpt_event_register(mptctl_id, mptctl_event_process) == 0) {
-               devtverboseprintk((KERN_INFO MYNAM
-                 ": Registered for IOC event notifications\n"));
-       }
+       mpt_reset_register(mptctl_id, mptctl_ioc_reset);
+       mpt_event_register(mptctl_id, mptctl_event_process);
 
        return 0;
 
@@ -2934,11 +2952,9 @@ static void mptctl_exit(void)
 
        /* De-register reset handler from base module */
        mpt_reset_deregister(mptctl_id);
-       dprintk((KERN_INFO MYNAM ": Deregistered for IOC reset notifications\n"));
 
        /* De-register callback handler from base module */
        mpt_deregister(mptctl_id);
-       printk(KERN_INFO MYNAM ": Deregistered from Fusion MPT base driver\n");
 
         mpt_device_driver_deregister(MPTCTL_DRIVER);
 
diff --git a/drivers/message/fusion/mptdebug.h b/drivers/message/fusion/mptdebug.h
new file mode 100644 (file)
index 0000000..ffdb0a6
--- /dev/null
@@ -0,0 +1,288 @@
+/*
+ *  linux/drivers/message/fusion/mptdebug.h
+ *      For use with LSI PCI chip/adapter(s)
+ *      running LSI Fusion MPT (Message Passing Technology) firmware.
+ *
+ *  Copyright (c) 1999-2007 LSI Corporation
+ *  (mailto:DL-MPTFusionLinux@lsi.com)
+ *
+ */
+/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
+
+#ifndef MPTDEBUG_H_INCLUDED
+#define MPTDEBUG_H_INCLUDED
+
+/*
+ * debug level can be programmed on the fly via SysFS (hex values)
+ *
+ * Example:  (programming for MPT_DEBUG_EVENTS on host 5)
+ *
+ * echo 8 > /sys/class/scsi_host/host5/debug_level
+ *
+ * --------------------------------------------------------
+ * mpt_debug_level - command line parameter
+ * this allow enabling debug at driver load time (for all iocs)
+ *
+ * Example  (programming for MPT_DEBUG_EVENTS)
+ *
+ * insmod mptbase.ko mpt_debug_level=8
+ *
+ * --------------------------------------------------------
+ * CONFIG_FUSION_LOGGING - enables compiling debug into driver
+ * this can be enabled in the driver Makefile
+ *
+ *
+ * --------------------------------------------------------
+ * Please note most debug prints are set to logging priority = debug
+ * This is the lowest level, and most verbose.  Please refer to manual
+ * pages for syslogd or syslogd-ng on how to configure this.
+ */
+
+#define MPT_DEBUG                      0x00000001
+#define MPT_DEBUG_MSG_FRAME            0x00000002
+#define MPT_DEBUG_SG                   0x00000004
+#define MPT_DEBUG_EVENTS               0x00000008
+#define MPT_DEBUG_VERBOSE_EVENTS       0x00000010
+#define MPT_DEBUG_INIT                 0x00000020
+#define MPT_DEBUG_EXIT                 0x00000040
+#define MPT_DEBUG_FAIL                 0x00000080
+#define MPT_DEBUG_TM                   0x00000100
+#define MPT_DEBUG_DV                   0x00000200
+#define MPT_DEBUG_REPLY                        0x00000400
+#define MPT_DEBUG_HANDSHAKE            0x00000800
+#define MPT_DEBUG_CONFIG               0x00001000
+#define MPT_DEBUG_DL                   0x00002000
+#define MPT_DEBUG_RESET                        0x00008000
+#define MPT_DEBUG_SCSI                 0x00010000
+#define MPT_DEBUG_IOCTL                        0x00020000
+#define MPT_DEBUG_FC                   0x00080000
+#define MPT_DEBUG_SAS                  0x00100000
+#define MPT_DEBUG_SAS_WIDE             0x00200000
+
+/*
+ * CONFIG_FUSION_LOGGING - enabled in Kconfig
+ */
+
+#ifdef CONFIG_FUSION_LOGGING
+#define MPT_CHECK_LOGGING(IOC, CMD, BITS)                      \
+{                                                              \
+       if (IOC->debug_level & BITS)                            \
+               CMD;                                            \
+}
+#else
+#define MPT_CHECK_LOGGING(IOC, CMD, BITS)
+#endif
+
+
+/*
+ * debug macros
+ */
+
+#define dprintk(IOC, CMD)                      \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG)
+
+#define dsgprintk(IOC, CMD)                    \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SG)
+
+#define devtprintk(IOC, CMD)                   \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EVENTS)
+
+#define devtverboseprintk(IOC, CMD)            \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_VERBOSE_EVENTS)
+
+#define dinitprintk(IOC, CMD)                  \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_INIT)
+
+#define dexitprintk(IOC, CMD)                  \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EXIT)
+
+#define dfailprintk(IOC, CMD)                  \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FAIL)
+
+#define dtmprintk(IOC, CMD)                    \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_TM)
+
+#define ddvprintk(IOC, CMD)                    \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DV)
+
+#define dreplyprintk(IOC, CMD)                 \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_REPLY)
+
+#define dhsprintk(IOC, CMD)                    \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_HANDSHAKE)
+
+#define dcprintk(IOC, CMD)                     \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_CONFIG)
+
+#define ddlprintk(IOC, CMD)                    \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DL)
+
+#define drsprintk(IOC, CMD)                    \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_RESET)
+
+#define dsprintk(IOC, CMD)                     \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SCSI)
+
+#define dctlprintk(IOC, CMD)                   \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_IOCTL)
+
+#define dfcprintk(IOC, CMD)                    \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FC)
+
+#define dsasprintk(IOC, CMD)                   \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS)
+
+#define dsaswideprintk(IOC, CMD)               \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS_WIDE)
+
+
+
+/*
+ * Verbose logging
+ */
+#if defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING)
+static inline void
+DBG_DUMP_FW_DOWNLOAD(MPT_ADAPTER *ioc, u32  *mfp, int numfrags)
+{
+       int i;
+
+       if (!(ioc->debug_level & MPT_DEBUG))
+               return;
+       printk(KERN_DEBUG "F/W download request:\n");
+       for (i=0; i < 7+numfrags*2; i++)
+               printk(" %08x", le32_to_cpu(mfp[i]));
+       printk("\n");
+}
+
+static inline void
+DBG_DUMP_PUT_MSG_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
+{
+       int      ii, n;
+
+       if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
+               return;
+       printk(KERN_DEBUG "%s: About to Put msg frame @ %p:\n",
+               ioc->name, mfp);
+       n = ioc->req_sz/4 - 1;
+       while (mfp[n] == 0)
+               n--;
+       for (ii=0; ii<=n; ii++) {
+               if (ii && ((ii%8)==0))
+                       printk("\n");
+               printk(" %08x", le32_to_cpu(mfp[ii]));
+       }
+       printk("\n");
+}
+
+static inline void
+DBG_DUMP_FW_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
+{
+       int  i, n;
+
+       if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
+               return;
+       n = 10;
+       printk(KERN_INFO " ");
+       for (i = 0; i < n; i++)
+               printk(" %08x", le32_to_cpu(mfp[i]));
+       printk("\n");
+}
+
+static inline void
+DBG_DUMP_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
+{
+       int  i, n;
+
+       if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
+               return;
+       n = 24;
+       for (i=0; i<n; i++) {
+               if (i && ((i%8)==0))
+                       printk("\n");
+               printk("%08x ", le32_to_cpu(mfp[i]));
+       }
+       printk("\n");
+}
+
+static inline void
+DBG_DUMP_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
+{
+       int  i, n;
+
+       if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
+               return;
+       n = (le32_to_cpu(mfp[0]) & 0x00FF0000) >> 16;
+       printk(KERN_INFO " ");
+       for (i=0; i<n; i++)
+               printk(" %08x", le32_to_cpu(mfp[i]));
+       printk("\n");
+}
+
+static inline void
+DBG_DUMP_REQUEST_FRAME_HDR(MPT_ADAPTER *ioc, u32 *mfp)
+{
+       int  i, n;
+
+       if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
+               return;
+       n = 3;
+       printk(KERN_INFO " ");
+       for (i=0; i<n; i++)
+               printk(" %08x", le32_to_cpu(mfp[i]));
+       printk("\n");
+}
+
+static inline void
+DBG_DUMP_TM_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
+{
+       int  i, n;
+
+       if (!(ioc->debug_level & MPT_DEBUG_TM))
+               return;
+       n = 13;
+       printk(KERN_DEBUG "TM_REQUEST:\n");
+       for (i=0; i<n; i++) {
+               if (i && ((i%8)==0))
+                       printk("\n");
+               printk("%08x ", le32_to_cpu(mfp[i]));
+       }
+       printk("\n");
+}
+
+static inline void
+DBG_DUMP_TM_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
+{
+       int  i, n;
+
+       if (!(ioc->debug_level & MPT_DEBUG_TM))
+               return;
+       n = (le32_to_cpu(mfp[0]) & 0x00FF0000) >> 16;
+       printk(KERN_DEBUG "TM_REPLY MessageLength=%d:\n", n);
+       for (i=0; i<n; i++) {
+               if (i && ((i%8)==0))
+                       printk("\n");
+               printk(" %08x", le32_to_cpu(mfp[i]));
+       }
+       printk("\n");
+}
+
+#define dmfprintk(IOC, CMD)                    \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME)
+
+# else /* ifdef MPT_DEBUG_MF */
+
+#define DBG_DUMP_FW_DOWNLOAD(IOC, mfp, numfrags)
+#define DBG_DUMP_PUT_MSG_FRAME(IOC, mfp)
+#define DBG_DUMP_FW_REQUEST_FRAME(IOC, mfp)
+#define DBG_DUMP_REQUEST_FRAME(IOC, mfp)
+#define DBG_DUMP_REPLY_FRAME(IOC, mfp)
+#define DBG_DUMP_REQUEST_FRAME_HDR(IOC, mfp)
+#define DBG_DUMP_TM_REQUEST_FRAME(IOC, mfp)
+#define DBG_DUMP_TM_REPLY_FRAME(IOC, mfp)
+
+#define dmfprintk(IOC, CMD)                    \
+       MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME)
+
+#endif /* defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING) */
+
+#endif /* ifndef MPTDEBUG_H_INCLUDED */
index f2ebaa9..8422c25 100644 (file)
@@ -188,16 +188,18 @@ mptfc_block_error_handler(struct scsi_cmnd *SCpnt,
                          int (*func)(struct scsi_cmnd *SCpnt),
                          const char *caller)
 {
+       MPT_SCSI_HOST           *hd;
        struct scsi_device      *sdev = SCpnt->device;
        struct Scsi_Host        *shost = sdev->host;
        struct fc_rport         *rport = starget_to_rport(scsi_target(sdev));
        unsigned long           flags;
        int                     ready;
 
+       hd = (MPT_SCSI_HOST *) SCpnt->device->host->hostdata;
        spin_lock_irqsave(shost->host_lock, flags);
        while ((ready = fc_remote_port_chkready(rport) >> 16) == DID_IMM_RETRY) {
                spin_unlock_irqrestore(shost->host_lock, flags);
-               dfcprintk ((MYIOC_s_INFO_FMT
+               dfcprintk (hd->ioc, printk(MYIOC_s_DEBUG_FMT
                        "mptfc_block_error_handler.%d: %d:%d, port status is "
                        "DID_IMM_RETRY, deferring %s recovery.\n",
                        ((MPT_SCSI_HOST *) shost->hostdata)->ioc->name,
@@ -209,7 +211,7 @@ mptfc_block_error_handler(struct scsi_cmnd *SCpnt,
        spin_unlock_irqrestore(shost->host_lock, flags);
 
        if (ready == DID_NO_CONNECT || !SCpnt->device->hostdata) {
-               dfcprintk ((MYIOC_s_INFO_FMT
+               dfcprintk (hd->ioc, printk(MYIOC_s_DEBUG_FMT
                        "%s.%d: %d:%d, failing recovery, "
                        "port state %d, vdev %p.\n", caller,
                        ((MPT_SCSI_HOST *) shost->hostdata)->ioc->name,
@@ -218,7 +220,7 @@ mptfc_block_error_handler(struct scsi_cmnd *SCpnt,
                        SCpnt->device->hostdata));
                return FAILED;
        }
-       dfcprintk ((MYIOC_s_INFO_FMT
+       dfcprintk (hd->ioc, printk(MYIOC_s_DEBUG_FMT
                "%s.%d: %d:%d, executing recovery.\n", caller,
                ((MPT_SCSI_HOST *) shost->hostdata)->ioc->name,
                ((MPT_SCSI_HOST *) shost->hostdata)->ioc->sh->host_no,
@@ -483,7 +485,7 @@ mptfc_register_dev(MPT_ADAPTER *ioc, int channel, FCDevicePage0_t *pg0)
 
                        pn = (u64)ri->pg0.WWPN.High << 32 | (u64)ri->pg0.WWPN.Low;
                        nn = (u64)ri->pg0.WWNN.High << 32 | (u64)ri->pg0.WWNN.Low;
-                       dfcprintk ((MYIOC_s_INFO_FMT
+                       dfcprintk (ioc, printk(MYIOC_s_DEBUG_FMT
                                "mptfc_reg_dev.%d: %x, %llx / %llx, tid %d, "
                                "rport tid %d, tmo %d\n",
                                        ioc->name,
@@ -559,6 +561,35 @@ mptfc_target_alloc(struct scsi_target *starget)
 
        return rc;
 }
+/*
+ *     mptfc_dump_lun_info
+ *     @ioc
+ *     @rport
+ *     @sdev
+ *
+ */
+static void
+mptfc_dump_lun_info(MPT_ADAPTER *ioc, struct fc_rport *rport, struct scsi_device *sdev,
+               VirtTarget *vtarget)
+{
+       u64 nn, pn;
+       struct mptfc_rport_info *ri;
+
+       ri = *((struct mptfc_rport_info **)rport->dd_data);
+       pn = (u64)ri->pg0.WWPN.High << 32 | (u64)ri->pg0.WWPN.Low;
+       nn = (u64)ri->pg0.WWNN.High << 32 | (u64)ri->pg0.WWNN.Low;
+       dfcprintk (ioc, printk(MYIOC_s_DEBUG_FMT
+               "mptfc_slv_alloc.%d: num_luns %d, sdev.id %d, "
+               "CurrentTargetID %d, %x %llx %llx\n",
+               ioc->name,
+               sdev->host->host_no,
+               vtarget->num_luns,
+               sdev->id, ri->pg0.CurrentTargetID,
+               ri->pg0.PortIdentifier,
+               (unsigned long long)pn,
+               (unsigned long long)nn));
+}
+
 
 /*
  *     OS entry point to allow host driver to alloc memory
@@ -606,25 +637,7 @@ mptfc_slave_alloc(struct scsi_device *sdev)
        vtarget->num_luns++;
 
 
-#ifdef DMPT_DEBUG_FC
-       {
-       u64 nn, pn;
-       struct mptfc_rport_info *ri;
-       ri = *((struct mptfc_rport_info **)rport->dd_data);
-       pn = (u64)ri->pg0.WWPN.High << 32 | (u64)ri->pg0.WWPN.Low;
-       nn = (u64)ri->pg0.WWNN.High << 32 | (u64)ri->pg0.WWNN.Low;
-       dfcprintk ((MYIOC_s_INFO_FMT
-               "mptfc_slv_alloc.%d: num_luns %d, sdev.id %d, "
-               "CurrentTargetID %d, %x %llx %llx\n",
-               hd->ioc->name,
-               sdev->host->host_no,
-               vtarget->num_luns,
-               sdev->id, ri->pg0.CurrentTargetID,
-               ri->pg0.PortIdentifier,
-               (unsigned long long)pn,
-               (unsigned long long)nn));
-       }
-#endif
+       mptfc_dump_lun_info(hd->ioc, rport, sdev, vtarget);
 
        return 0;
 }
@@ -653,27 +666,12 @@ mptfc_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
        /* dd_data is null until finished adding target */
        ri = *((struct mptfc_rport_info **)rport->dd_data);
        if (unlikely(!ri)) {
-               dfcprintk ((MYIOC_s_INFO_FMT
-                       "mptfc_qcmd.%d: %d:%d, dd_data is null.\n",
-                       ((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->name,
-                       ((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->sh->host_no,
-                       SCpnt->device->id,SCpnt->device->lun));
                SCpnt->result = DID_IMM_RETRY << 16;
                done(SCpnt);
                return 0;
        }
 
-       err = mptscsih_qcmd(SCpnt,done);
-#ifdef DMPT_DEBUG_FC
-       if (unlikely(err)) {
-               dfcprintk ((MYIOC_s_INFO_FMT
-                       "mptfc_qcmd.%d: %d:%d, mptscsih_qcmd returns non-zero, (%x).\n",
-                       ((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->name,
-                       ((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->sh->host_no,
-                       SCpnt->device->id,SCpnt->device->lun,err));
-       }
-#endif
-       return err;
+       return mptscsih_qcmd(SCpnt,done);
 }
 
 /*
@@ -1041,7 +1039,7 @@ mptfc_setup_reset(struct work_struct *work)
 
                        pn = (u64)ri->pg0.WWPN.High << 32 |
                             (u64)ri->pg0.WWPN.Low;
-                       dfcprintk ((MYIOC_s_INFO_FMT
+                       dfcprintk (ioc, printk(MYIOC_s_DEBUG_FMT
                                "mptfc_setup_reset.%d: %llx deleted\n",
                                ioc->name,
                                ioc->sh->host_no,
@@ -1088,7 +1086,7 @@ mptfc_rescan_devices(struct work_struct *work)
 
                        pn = (u64)ri->pg0.WWPN.High << 32 |
                             (u64)ri->pg0.WWPN.Low;
-                       dfcprintk ((MYIOC_s_INFO_FMT
+                       dfcprintk (ioc, printk(MYIOC_s_DEBUG_FMT
                                "mptfc_rescan.%d: %llx deleted\n",
                                ioc->name,
                                ioc->sh->host_no,
@@ -1212,7 +1210,7 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
        if (numSGE < sh->sg_tablesize) {
                /* Reset this value */
-               dprintk((MYIOC_s_INFO_FMT
+               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                  "Resetting sg_tablesize to %d from %d\n",
                  ioc->name, numSGE, sh->sg_tablesize));
                sh->sg_tablesize = numSGE;
@@ -1232,7 +1230,7 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
                goto out_mptfc_probe;
        }
 
-       dprintk((MYIOC_s_INFO_FMT "ScsiLookup @ %p\n",
+       dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ScsiLookup @ %p\n",
                 ioc->name, hd->ScsiLookup));
 
        /* Clear the TM flags
@@ -1264,7 +1262,7 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        sh->transportt = mptfc_transport_template;
        error = scsi_add_host (sh, &ioc->pcidev->dev);
        if(error) {
-               dprintk((KERN_ERR MYNAM
+               dprintk(ioc, printk(KERN_ERR MYNAM
                  "scsi_add_host failed\n"));
                goto out_mptfc_probe;
        }
@@ -1323,7 +1321,7 @@ mptfc_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
        unsigned long flags;
        int rc=1;
 
-       devtverboseprintk((MYIOC_s_INFO_FMT "MPT event (=%02Xh) routed to SCSI host driver!\n",
+       devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT "MPT event (=%02Xh) routed to SCSI host driver!\n",
                        ioc->name, event));
 
        if (ioc->sh == NULL ||
@@ -1357,8 +1355,8 @@ mptfc_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
                return rc;
 
 
-       dtmprintk((KERN_WARNING MYNAM
-               ": IOC %s_reset routed to FC host driver!\n",
+       dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+               ": IOC %s_reset routed to FC host driver!\n",ioc->name,
                reset_phase==MPT_IOC_SETUP_RESET ? "setup" : (
                reset_phase==MPT_IOC_PRE_RESET ? "pre" : "post")));
 
@@ -1413,15 +1411,8 @@ mptfc_init(void)
        mptfcTaskCtx = mpt_register(mptscsih_taskmgmt_complete, MPTFC_DRIVER);
        mptfcInternalCtx = mpt_register(mptscsih_scandv_complete, MPTFC_DRIVER);
 
-       if (mpt_event_register(mptfcDoneCtx, mptfc_event_process) == 0) {
-               devtverboseprintk((KERN_INFO MYNAM
-                 ": Registered for IOC event notifications\n"));
-       }
-
-       if (mpt_reset_register(mptfcDoneCtx, mptfc_ioc_reset) == 0) {
-               dprintk((KERN_INFO MYNAM
-                 ": Registered for IOC reset notifications\n"));
-       }
+       mpt_event_register(mptfcDoneCtx, mptfc_event_process);
+       mpt_reset_register(mptfcDoneCtx, mptfc_ioc_reset);
 
        error = pci_register_driver(&mptfc_driver);
        if (error)
@@ -1486,12 +1477,7 @@ mptfc_exit(void)
        fc_release_transport(mptfc_transport_template);
 
        mpt_reset_deregister(mptfcDoneCtx);
-       dprintk((KERN_INFO MYNAM
-         ": Deregistered for IOC reset notifications\n"));
-
        mpt_event_deregister(mptfcDoneCtx);
-       dprintk((KERN_INFO MYNAM
-         ": Deregistered for IOC event notifications\n"));
 
        mpt_deregister(mptfcInternalCtx);
        mpt_deregister(mptfcTaskCtx);
index 7e8a90c..01fc397 100644 (file)
@@ -1524,8 +1524,7 @@ static int __init mpt_lan_init (void)
 
        dlprintk((KERN_INFO MYNAM ": Registered for IOC reset notifications\n"));
        
-       if (mpt_device_driver_register(&mptlan_driver, MPTLAN_DRIVER))
-               dprintk((KERN_INFO MYNAM ": failed to register dd callbacks\n"));
+       mpt_device_driver_register(&mptlan_driver, MPTLAN_DRIVER);
        return 0;
 }
 
index d506646..29add83 100644 (file)
@@ -201,103 +201,91 @@ struct mptsas_enclosure {
        u8      sep_channel;            /* SEP channel logical channel id */
 };
 
-#ifdef MPT_DEBUG_SAS
-static void mptsas_print_phy_data(MPI_SAS_IO_UNIT0_PHY_DATA *phy_data)
-{
-       printk("---- IO UNIT PAGE 0 ------------\n");
-       printk("Handle=0x%X\n",
-               le16_to_cpu(phy_data->AttachedDeviceHandle));
-       printk("Controller Handle=0x%X\n",
-               le16_to_cpu(phy_data->ControllerDevHandle));
-       printk("Port=0x%X\n", phy_data->Port);
-       printk("Port Flags=0x%X\n", phy_data->PortFlags);
-       printk("PHY Flags=0x%X\n", phy_data->PhyFlags);
-       printk("Negotiated Link Rate=0x%X\n", phy_data->NegotiatedLinkRate);
-       printk("Controller PHY Device Info=0x%X\n",
-               le32_to_cpu(phy_data->ControllerPhyDeviceInfo));
-       printk("DiscoveryStatus=0x%X\n",
-               le32_to_cpu(phy_data->DiscoveryStatus));
-       printk("\n");
+static void mptsas_print_phy_data(MPT_ADAPTER *ioc,
+                                       MPI_SAS_IO_UNIT0_PHY_DATA *phy_data)
+{
+       dsasprintk(ioc, printk(KERN_DEBUG "---- IO UNIT PAGE 0 ------------\n"));
+       dsasprintk(ioc, printk(KERN_DEBUG "Handle=0x%X\n",
+               le16_to_cpu(phy_data->AttachedDeviceHandle)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Controller Handle=0x%X\n",
+               le16_to_cpu(phy_data->ControllerDevHandle)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Port=0x%X\n", phy_data->Port));
+       dsasprintk(ioc, printk(KERN_DEBUG "Port Flags=0x%X\n", phy_data->PortFlags));
+       dsasprintk(ioc, printk(KERN_DEBUG "PHY Flags=0x%X\n", phy_data->PhyFlags));
+       dsasprintk(ioc, printk(KERN_DEBUG "Negotiated Link Rate=0x%X\n", phy_data->NegotiatedLinkRate));
+       dsasprintk(ioc, printk(KERN_DEBUG "Controller PHY Device Info=0x%X\n",
+               le32_to_cpu(phy_data->ControllerPhyDeviceInfo)));
+       dsasprintk(ioc, printk(KERN_DEBUG "DiscoveryStatus=0x%X\n\n",
+               le32_to_cpu(phy_data->DiscoveryStatus)));
 }
 
-static void mptsas_print_phy_pg0(SasPhyPage0_t *pg0)
+static void mptsas_print_phy_pg0(MPT_ADAPTER *ioc, SasPhyPage0_t *pg0)
 {
        __le64 sas_address;
 
        memcpy(&sas_address, &pg0->SASAddress, sizeof(__le64));
 
-       printk("---- SAS PHY PAGE 0 ------------\n");
-       printk("Attached Device Handle=0x%X\n",
-                       le16_to_cpu(pg0->AttachedDevHandle));
-       printk("SAS Address=0x%llX\n",
-                       (unsigned long long)le64_to_cpu(sas_address));
-       printk("Attached PHY Identifier=0x%X\n", pg0->AttachedPhyIdentifier);
-       printk("Attached Device Info=0x%X\n",
-                       le32_to_cpu(pg0->AttachedDeviceInfo));
-       printk("Programmed Link Rate=0x%X\n", pg0->ProgrammedLinkRate);
-       printk("Change Count=0x%X\n", pg0->ChangeCount);
-       printk("PHY Info=0x%X\n", le32_to_cpu(pg0->PhyInfo));
-       printk("\n");
+       dsasprintk(ioc, printk(KERN_DEBUG "---- SAS PHY PAGE 0 ------------\n"));
+       dsasprintk(ioc, printk(KERN_DEBUG "Attached Device Handle=0x%X\n",
+                       le16_to_cpu(pg0->AttachedDevHandle)));
+       dsasprintk(ioc, printk(KERN_DEBUG "SAS Address=0x%llX\n",
+                       (unsigned long long)le64_to_cpu(sas_address)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Attached PHY Identifier=0x%X\n", pg0->AttachedPhyIdentifier));
+       dsasprintk(ioc, printk(KERN_DEBUG "Attached Device Info=0x%X\n",
+                       le32_to_cpu(pg0->AttachedDeviceInfo)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Programmed Link Rate=0x%X\n", pg0->ProgrammedLinkRate));
+       dsasprintk(ioc, printk(KERN_DEBUG "Change Count=0x%X\n", pg0->ChangeCount));
+       dsasprintk(ioc, printk(KERN_DEBUG "PHY Info=0x%X\n\n", le32_to_cpu(pg0->PhyInfo)));
 }
 
-static void mptsas_print_phy_pg1(SasPhyPage1_t *pg1)
+static void mptsas_print_phy_pg1(MPT_ADAPTER *ioc, SasPhyPage1_t *pg1)
 {
-       printk("---- SAS PHY PAGE 1 ------------\n");
-       printk("Invalid Dword Count=0x%x\n", pg1->InvalidDwordCount);
-       printk("Running Disparity Error Count=0x%x\n",
-                       pg1->RunningDisparityErrorCount);
-       printk("Loss Dword Synch Count=0x%x\n", pg1->LossDwordSynchCount);
-       printk("PHY Reset Problem Count=0x%x\n", pg1->PhyResetProblemCount);
-       printk("\n");
+       dsasprintk(ioc, printk(KERN_DEBUG "---- SAS PHY PAGE 1 ------------\n"));
+       dsasprintk(ioc, printk(KERN_DEBUG "Invalid Dword Count=0x%x\n", pg1->InvalidDwordCount));
+       dsasprintk(ioc, printk(KERN_DEBUG "Running Disparity Error Count=0x%x\n",
+                       pg1->RunningDisparityErrorCount));
+       dsasprintk(ioc, printk(KERN_DEBUG "Loss Dword Synch Count=0x%x\n", pg1->LossDwordSynchCount));
+       dsasprintk(ioc, printk(KERN_DEBUG "PHY Reset Problem Count=0x%x\n\n", pg1->PhyResetProblemCount));
 }
 
-static void mptsas_print_device_pg0(SasDevicePage0_t *pg0)
+static void mptsas_print_device_pg0(MPT_ADAPTER *ioc, SasDevicePage0_t *pg0)
 {
        __le64 sas_address;
 
        memcpy(&sas_address, &pg0->SASAddress, sizeof(__le64));
 
-       printk("---- SAS DEVICE PAGE 0 ---------\n");
-       printk("Handle=0x%X\n" ,le16_to_cpu(pg0->DevHandle));
-       printk("Parent Handle=0x%X\n" ,le16_to_cpu(pg0->ParentDevHandle));
-       printk("Enclosure Handle=0x%X\n", le16_to_cpu(pg0->EnclosureHandle));
-       printk("Slot=0x%X\n", le16_to_cpu(pg0->Slot));
-       printk("SAS Address=0x%llX\n", (unsigned long long)
-           le64_to_cpu(sas_address));
-       printk("Target ID=0x%X\n", pg0->TargetID);
-       printk("Bus=0x%X\n", pg0->Bus);
+       dsasprintk(ioc, printk(KERN_DEBUG "---- SAS DEVICE PAGE 0 ---------\n"));
+       dsasprintk(ioc, printk(KERN_DEBUG "Handle=0x%X\n" ,le16_to_cpu(pg0->DevHandle)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Parent Handle=0x%X\n" ,le16_to_cpu(pg0->ParentDevHandle)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Enclosure Handle=0x%X\n", le16_to_cpu(pg0->EnclosureHandle)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Slot=0x%X\n", le16_to_cpu(pg0->Slot)));
+       dsasprintk(ioc, printk(KERN_DEBUG "SAS Address=0x%llX\n", (unsigned long long)
+           le64_to_cpu(sas_address)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Target ID=0x%X\n", pg0->TargetID));
+       dsasprintk(ioc, printk(KERN_DEBUG "Bus=0x%X\n", pg0->Bus));
        /* The PhyNum field specifies the PHY number of the parent
         * device this device is linked to
         */
-       printk("Parent Phy Num=0x%X\n", pg0->PhyNum);
-       printk("Access Status=0x%X\n", le16_to_cpu(pg0->AccessStatus));
-       printk("Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo));
-       printk("Flags=0x%X\n", le16_to_cpu(pg0->Flags));
-       printk("Physical Port=0x%X\n", pg0->PhysicalPort);
-       printk("\n");
+       dsasprintk(ioc, printk(KERN_DEBUG "Parent Phy Num=0x%X\n", pg0->PhyNum));
+       dsasprintk(ioc, printk(KERN_DEBUG "Access Status=0x%X\n", le16_to_cpu(pg0->AccessStatus)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Flags=0x%X\n", le16_to_cpu(pg0->Flags)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Physical Port=0x%X\n\n", pg0->PhysicalPort));
 }
 
-static void mptsas_print_expander_pg1(SasExpanderPage1_t *pg1)
-{
-       printk("---- SAS EXPANDER PAGE 1 ------------\n");
-
-       printk("Physical Port=0x%X\n", pg1->PhysicalPort);
-       printk("PHY Identifier=0x%X\n", pg1->PhyIdentifier);
-       printk("Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate);
-       printk("Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate);
-       printk("Hardware Link Rate=0x%X\n", pg1->HwLinkRate);
-       printk("Owner Device Handle=0x%X\n",
-                       le16_to_cpu(pg1->OwnerDevHandle));
-       printk("Attached Device Handle=0x%X\n",
-                       le16_to_cpu(pg1->AttachedDevHandle));
+static void mptsas_print_expander_pg1(MPT_ADAPTER *ioc, SasExpanderPage1_t *pg1)
+{
+       dsasprintk(ioc, printk(KERN_DEBUG "---- SAS EXPANDER PAGE 1 ------------\n"));
+       dsasprintk(ioc, printk(KERN_DEBUG "Physical Port=0x%X\n", pg1->PhysicalPort));
+       dsasprintk(ioc, printk(KERN_DEBUG "PHY Identifier=0x%X\n", pg1->PhyIdentifier));
+       dsasprintk(ioc, printk(KERN_DEBUG "Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate));
+       dsasprintk(ioc, printk(KERN_DEBUG "Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate));
+       dsasprintk(ioc, printk(KERN_DEBUG "Hardware Link Rate=0x%X\n", pg1->HwLinkRate));
+       dsasprintk(ioc, printk(KERN_DEBUG "Owner Device Handle=0x%X\n",
+                       le16_to_cpu(pg1->OwnerDevHandle)));
+       dsasprintk(ioc, printk(KERN_DEBUG "Attached Device Handle=0x%X\n\n",
+                       le16_to_cpu(pg1->AttachedDevHandle)));
 }
-#else
-#define mptsas_print_phy_data(phy_data)                do { } while (0)
-#define mptsas_print_phy_pg0(pg0)              do { } while (0)
-#define mptsas_print_phy_pg1(pg1)              do { } while (0)
-#define mptsas_print_device_pg0(pg0)           do { } while (0)
-#define mptsas_print_expander_pg1(pg1)         do { } while (0)
-#endif
 
 static inline MPT_ADAPTER *phy_to_ioc(struct sas_phy *phy)
 {
@@ -354,7 +342,7 @@ mptsas_is_end_device(struct mptsas_devinfo * attached)
 
 /* no mutex */
 static void
-mptsas_port_delete(struct mptsas_portinfo_details * port_details)
+mptsas_port_delete(MPT_ADAPTER *ioc, struct mptsas_portinfo_details * port_details)
 {
        struct mptsas_portinfo *port_info;
        struct mptsas_phyinfo *phy_info;
@@ -366,7 +354,7 @@ mptsas_port_delete(struct mptsas_portinfo_details * port_details)
        port_info = port_details->port_info;
        phy_info = port_info->phy_info;
 
-       dsaswideprintk((KERN_DEBUG "%s: [%p]: num_phys=%02d "
+       dsaswideprintk(ioc, printk(KERN_DEBUG "%s: [%p]: num_phys=%02d "
            "bitmask=0x%016llX\n", __FUNCTION__, port_details,
            port_details->num_phys, (unsigned long long)
            port_details->phy_bitmask));
@@ -390,20 +378,19 @@ mptsas_get_rphy(struct mptsas_phyinfo *phy_info)
 }
 
 static inline void
-mptsas_set_rphy(struct mptsas_phyinfo *phy_info, struct sas_rphy *rphy)
+mptsas_set_rphy(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, struct sas_rphy *rphy)
 {
        if (phy_info->port_details) {
                phy_info->port_details->rphy = rphy;
-               dsaswideprintk((KERN_DEBUG "sas_rphy_add: rphy=%p\n", rphy));
+               dsaswideprintk(ioc, printk(KERN_DEBUG "sas_rphy_add: rphy=%p\n", rphy));
        }
 
-#ifdef MPT_DEBUG_SAS_WIDE
        if (rphy) {
-               dev_printk(KERN_DEBUG, &rphy->dev, "add:");
-               printk("rphy=%p release=%p\n",
-                       rphy, rphy->dev.release);
+               dsaswideprintk(ioc, dev_printk(KERN_DEBUG,
+                   &rphy->dev, "add:"));
+               dsaswideprintk(ioc, printk(KERN_DEBUG "rphy=%p release=%p\n",
+                       rphy, rphy->dev.release));
        }
-#endif
 }
 
 static inline struct sas_port *
@@ -416,18 +403,17 @@ mptsas_get_port(struct mptsas_phyinfo *phy_info)
 }
 
 static inline void
-mptsas_set_port(struct mptsas_phyinfo *phy_info, struct sas_port *port)
+mptsas_set_port(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, struct sas_port *port)
 {
        if (phy_info->port_details)
                phy_info->port_details->port = port;
 
-#ifdef MPT_DEBUG_SAS_WIDE
        if (port) {
-               dev_printk(KERN_DEBUG, &port->dev, "add: ");
-               printk("port=%p release=%p\n",
-                       port, port->dev.release);
+               dsaswideprintk(ioc, dev_printk(KERN_DEBUG,
+                   &port->dev, "add:"));
+               dsaswideprintk(ioc, printk(KERN_DEBUG "port=%p release=%p\n",
+                       port, port->dev.release));
        }
-#endif
 }
 
 static inline struct scsi_target *
@@ -477,7 +463,7 @@ mptsas_setup_wide_ports(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
                 * Removing a phy from a port, letting the last
                 * phy be removed by firmware events.
                 */
-               dsaswideprintk((KERN_DEBUG
+               dsaswideprintk(ioc, printk(KERN_DEBUG
                        "%s: [%p]: deleting phy = %d\n",
                        __FUNCTION__, port_details, i));
                port_details->num_phys--;
@@ -493,7 +479,7 @@ mptsas_setup_wide_ports(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
        phy_info = port_info->phy_info;
        for (i = 0 ; i < port_info->num_phys ; i++, phy_info++) {
                sas_address = phy_info->attached.sas_address;
-               dsaswideprintk((KERN_DEBUG "phy_id=%d sas_address=0x%018llX\n",
+               dsaswideprintk(ioc, printk(KERN_DEBUG "phy_id=%d sas_address=0x%018llX\n",
                    i, (unsigned long long)sas_address));
                if (!sas_address)
                        continue;
@@ -512,7 +498,7 @@ mptsas_setup_wide_ports(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
                                port_details->phy_bitmask |=
                                    (1 << phy_info->phy_id);
                        phy_info->sas_port_add_phy=1;
-                       dsaswideprintk((KERN_DEBUG "\t\tForming port\n\t\t"
+                       dsaswideprintk(ioc, printk(KERN_DEBUG "\t\tForming port\n\t\t"
                            "phy_id=%d sas_address=0x%018llX\n",
                            i, (unsigned long long)sas_address));
                        phy_info->port_details = port_details;
@@ -529,7 +515,7 @@ mptsas_setup_wide_ports(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
                                continue;
                        if (phy_info_cmp->port_details == port_details )
                                continue;
-                       dsaswideprintk((KERN_DEBUG
+                       dsaswideprintk(ioc, printk(KERN_DEBUG
                            "\t\tphy_id=%d sas_address=0x%018llX\n",
                            j, (unsigned long long)
                            phy_info_cmp->attached.sas_address));
@@ -559,21 +545,19 @@ mptsas_setup_wide_ports(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
 
  out:
 
-#ifdef MPT_DEBUG_SAS_WIDE
        for (i = 0; i < port_info->num_phys; i++) {
                port_details = port_info->phy_info[i].port_details;
                if (!port_details)
                        continue;
-               dsaswideprintk((KERN_DEBUG
+               dsaswideprintk(ioc, printk(KERN_DEBUG
                    "%s: [%p]: phy_id=%02d num_phys=%02d "
                    "bitmask=0x%016llX\n", __FUNCTION__,
                    port_details, i, port_details->num_phys,
                    (unsigned long long)port_details->phy_bitmask));
-               dsaswideprintk((KERN_DEBUG"\t\tport = %p rphy=%p\n",
+               dsaswideprintk(ioc, printk(KERN_DEBUG"\t\tport = %p rphy=%p\n",
                        port_details->port, port_details->rphy));
        }
-       dsaswideprintk((KERN_DEBUG"\n"));
-#endif
+       dsaswideprintk(ioc, printk(KERN_DEBUG"\n"));
        mutex_unlock(&ioc->sas_topology_mutex);
 }
 
@@ -622,7 +606,7 @@ mptsas_target_reset(MPT_ADAPTER *ioc, u8 channel, u8 id)
        SCSITaskMgmt_t  *pScsiTm;
 
        if ((mf = mpt_get_msg_frame(ioc->TaskCtx, ioc)) == NULL) {
-               dfailprintk((MYIOC_s_WARN_FMT "%s, no msg frames @%d!!\n",
+               dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s, no msg frames @%d!!\n",
                    ioc->name,__FUNCTION__, __LINE__));
                return 0;
        }
@@ -637,12 +621,12 @@ mptsas_target_reset(MPT_ADAPTER *ioc, u8 channel, u8 id)
        pScsiTm->TaskType = MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET;
        pScsiTm->MsgFlags = MPI_SCSITASKMGMT_MSGFLAGS_LIPRESET_RESET_OPTION;
 
-       DBG_DUMP_TM_REQUEST_FRAME(mf);
+       DBG_DUMP_TM_REQUEST_FRAME(ioc, (u32 *)mf);
 
        if (mpt_send_handshake_request(ioc->TaskCtx, ioc,
            sizeof(SCSITaskMgmt_t), (u32 *)mf, NO_SLEEP)) {
                mpt_free_msg_frame(ioc, mf);
-               dfailprintk((MYIOC_s_WARN_FMT "%s, tm handshake failed @%d!!\n",
+               dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s, tm handshake failed @%d!!\n",
                    ioc->name,__FUNCTION__, __LINE__));
                return 0;
        }
@@ -681,7 +665,7 @@ mptsas_target_reset_queue(MPT_ADAPTER *ioc,
        target_reset_list = kzalloc(sizeof(*target_reset_list),
            GFP_ATOMIC);
        if (!target_reset_list) {
-               dfailprintk((MYIOC_s_WARN_FMT "%s, failed to allocate mem @%d..!!\n",
+               dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s, failed to allocate mem @%d..!!\n",
                    ioc->name,__FUNCTION__, __LINE__));
                return;
        }
@@ -748,7 +732,7 @@ mptsas_dev_reset_complete(MPT_ADAPTER *ioc)
 
        ev = kzalloc(sizeof(*ev), GFP_ATOMIC);
        if (!ev) {
-               dfailprintk((MYIOC_s_WARN_FMT "%s, failed to allocate mem @%d..!!\n",
+               dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s, failed to allocate mem @%d..!!\n",
                    ioc->name,__FUNCTION__, __LINE__));
                return;
        }
@@ -1168,7 +1152,7 @@ static int mptsas_get_linkerrors(struct sas_phy *phy)
        if (error)
                goto out_free_consistent;
 
-       mptsas_print_phy_pg1(buffer);
+       mptsas_print_phy_pg1(ioc, buffer);
 
        phy->invalid_dword_count = le32_to_cpu(buffer->InvalidDwordCount);
        phy->running_disparity_error_count =
@@ -1397,7 +1381,7 @@ mptsas_sas_io_unit_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
            le16_to_cpu(buffer->NvdataVersionDefault);
 
        for (i = 0; i < port_info->num_phys; i++) {
-               mptsas_print_phy_data(&buffer->PhyData[i]);
+               mptsas_print_phy_data(ioc, &buffer->PhyData[i]);
                port_info->phy_info[i].phy_id = i;
                port_info->phy_info[i].port_id =
                    buffer->PhyData[i].Port;
@@ -1522,7 +1506,7 @@ mptsas_sas_phy_pg0(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info,
        if (error)
                goto out_free_consistent;
 
-       mptsas_print_phy_pg0(buffer);
+       mptsas_print_phy_pg0(ioc, buffer);
 
        phy_info->hw_link_rate = buffer->HwLinkRate;
        phy_info->programmed_link_rate = buffer->ProgrammedLinkRate;
@@ -1589,7 +1573,7 @@ mptsas_sas_device_pg0(MPT_ADAPTER *ioc, struct mptsas_devinfo *device_info,
        if (error)
                goto out_free_consistent;
 
-       mptsas_print_device_pg0(buffer);
+       mptsas_print_device_pg0(ioc, buffer);
 
        device_info->handle = le16_to_cpu(buffer->DevHandle);
        device_info->handle_parent = le16_to_cpu(buffer->ParentDevHandle);
@@ -1737,7 +1721,7 @@ mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info,
                goto out_free_consistent;
 
 
-       mptsas_print_expander_pg1(buffer);
+       mptsas_print_expander_pg1(ioc, buffer);
 
        /* save config data */
        phy_info->phy_id = buffer->PhyIdentifier;
@@ -1946,17 +1930,17 @@ static int mptsas_probe_one_phy(struct device *dev,
                        }
                        error = sas_port_add(port);
                        if (error) {
-                               dfailprintk((MYIOC_s_ERR_FMT
+                               dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                        "%s: exit at line=%d\n", ioc->name,
                                        __FUNCTION__, __LINE__));
                                goto out;
                        }
-                       mptsas_set_port(phy_info, port);
-                       dsaswideprintk((KERN_DEBUG
+                       mptsas_set_port(ioc, phy_info, port);
+                       dsaswideprintk(ioc, printk(KERN_DEBUG
                            "sas_port_alloc: port=%p dev=%p port_id=%d\n",
                            port, dev, port->port_identifier));
                }
-               dsaswideprintk((KERN_DEBUG "sas_port_add_phy: phy_id=%d\n",
+               dsaswideprintk(ioc, printk(KERN_DEBUG "sas_port_add_phy: phy_id=%d\n",
                    phy_info->phy_id));
                sas_port_add_phy(port, phy_info->phy);
                phy_info->sas_port_add_phy = 0;
@@ -2017,7 +2001,7 @@ static int mptsas_probe_one_phy(struct device *dev,
                        break;
                }
                if (!rphy) {
-                       dfailprintk((MYIOC_s_ERR_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                "%s: exit at line=%d\n", ioc->name,
                                __FUNCTION__, __LINE__));
                        goto out;
@@ -2026,13 +2010,13 @@ static int mptsas_probe_one_phy(struct device *dev,
                rphy->identify = identify;
                error = sas_rphy_add(rphy);
                if (error) {
-                       dfailprintk((MYIOC_s_ERR_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                "%s: exit at line=%d\n", ioc->name,
                                __FUNCTION__, __LINE__));
                        sas_rphy_free(rphy);
                        goto out;
                }
-               mptsas_set_rphy(phy_info, rphy);
+               mptsas_set_rphy(ioc, phy_info, rphy);
        }
 
  out:
@@ -2258,18 +2242,17 @@ mptsas_delete_expander_phys(MPT_ADAPTER *ioc)
                                if (phy_info->attached.sas_address !=
                                        expander_sas_address)
                                        continue;
-#ifdef MPT_DEBUG_SAS_WIDE
-                               dev_printk(KERN_DEBUG, &port->dev,
-                                   "delete port (%d)\n", port->port_identifier);
-#endif
+                               dsaswideprintk(ioc,
+                                       dev_printk(KERN_DEBUG, &port->dev,
+                                       "delete port (%d)\n", port->port_identifier));
                                sas_port_delete(port);
-                               mptsas_port_delete(phy_info->port_details);
+                               mptsas_port_delete(ioc, phy_info->port_details);
                        }
  next_port:
 
                        phy_info = port_info->phy_info;
                        for (i = 0; i < port_info->num_phys; i++, phy_info++)
-                               mptsas_port_delete(phy_info->port_details);
+                               mptsas_port_delete(ioc, phy_info->port_details);
 
                        list_del(&port_info->list);
                        kfree(port_info->phy_info);
@@ -2555,7 +2538,7 @@ mptsas_hotplug_work(struct work_struct *work)
                                    (MPI_SAS_DEVICE_PGAD_FORM_BUS_TARGET_ID <<
                                     MPI_SAS_DEVICE_PGAD_FORM_SHIFT),
                                    (ev->channel << 8) + ev->id)) {
-                                       dfailprintk((MYIOC_s_ERR_FMT
+                                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                        "%s: exit at line=%d\n", ioc->name,
                                                __FUNCTION__, __LINE__));
                                        break;
@@ -2575,20 +2558,20 @@ mptsas_hotplug_work(struct work_struct *work)
                 * Sanity checks, for non-existing phys and remote rphys.
                 */
                if (!phy_info){
-                       dfailprintk((MYIOC_s_ERR_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                "%s: exit at line=%d\n", ioc->name,
                                __FUNCTION__, __LINE__));
                        break;
                }
                if (!phy_info->port_details) {
-                       dfailprintk((MYIOC_s_ERR_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                "%s: exit at line=%d\n", ioc->name,
                                __FUNCTION__, __LINE__));
                        break;
                }
                rphy = mptsas_get_rphy(phy_info);
                if (!rphy) {
-                       dfailprintk((MYIOC_s_ERR_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                "%s: exit at line=%d\n", ioc->name,
                                __FUNCTION__, __LINE__));
                        break;
@@ -2596,7 +2579,7 @@ mptsas_hotplug_work(struct work_struct *work)
 
                port = mptsas_get_port(phy_info);
                if (!port) {
-                       dfailprintk((MYIOC_s_ERR_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                "%s: exit at line=%d\n", ioc->name,
                                __FUNCTION__, __LINE__));
                        break;
@@ -2607,7 +2590,7 @@ mptsas_hotplug_work(struct work_struct *work)
                        vtarget = starget->hostdata;
 
                        if (!vtarget) {
-                               dfailprintk((MYIOC_s_ERR_FMT
+                               dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                        "%s: exit at line=%d\n", ioc->name,
                                        __FUNCTION__, __LINE__));
                                break;
@@ -2645,12 +2628,10 @@ mptsas_hotplug_work(struct work_struct *work)
                printk(MYIOC_s_INFO_FMT
                       "removing %s device, channel %d, id %d, phy %d\n",
                       ioc->name, ds, ev->channel, ev->id, phy_info->phy_id);
-#ifdef MPT_DEBUG_SAS_WIDE
                dev_printk(KERN_DEBUG, &port->dev,
                    "delete port (%d)\n", port->port_identifier);
-#endif
                sas_port_delete(port);
-               mptsas_port_delete(phy_info->port_details);
+               mptsas_port_delete(ioc, phy_info->port_details);
                break;
        case MPTSAS_ADD_DEVICE:
 
@@ -2664,7 +2645,7 @@ mptsas_hotplug_work(struct work_struct *work)
                    (MPI_SAS_DEVICE_PGAD_FORM_BUS_TARGET_ID <<
                     MPI_SAS_DEVICE_PGAD_FORM_SHIFT),
                        (ev->channel << 8) + ev->id)) {
-                               dfailprintk((MYIOC_s_ERR_FMT
+                               dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                        "%s: exit at line=%d\n", ioc->name,
                                        __FUNCTION__, __LINE__));
                        break;
@@ -2676,7 +2657,7 @@ mptsas_hotplug_work(struct work_struct *work)
                                sas_device.sas_address);
 
                if (!phy_info || !phy_info->port_details) {
-                       dfailprintk((MYIOC_s_ERR_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                "%s: exit at line=%d\n", ioc->name,
                                __FUNCTION__, __LINE__));
                        break;
@@ -2688,7 +2669,7 @@ mptsas_hotplug_work(struct work_struct *work)
                        vtarget = starget->hostdata;
 
                        if (!vtarget) {
-                               dfailprintk((MYIOC_s_ERR_FMT
+                               dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                        "%s: exit at line=%d\n", ioc->name,
                                        __FUNCTION__, __LINE__));
                                break;
@@ -2711,7 +2692,7 @@ mptsas_hotplug_work(struct work_struct *work)
                }
 
                if (mptsas_get_rphy(phy_info)) {
-                       dfailprintk((MYIOC_s_ERR_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                "%s: exit at line=%d\n", ioc->name,
                                __FUNCTION__, __LINE__));
                        if (ev->channel) printk("%d\n", __LINE__);
@@ -2720,7 +2701,7 @@ mptsas_hotplug_work(struct work_struct *work)
 
                port = mptsas_get_port(phy_info);
                if (!port) {
-                       dfailprintk((MYIOC_s_ERR_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                "%s: exit at line=%d\n", ioc->name,
                                __FUNCTION__, __LINE__));
                        break;
@@ -2745,7 +2726,7 @@ mptsas_hotplug_work(struct work_struct *work)
                mptsas_parse_device_info(&identify, &phy_info->attached);
                rphy = sas_end_device_alloc(port);
                if (!rphy) {
-                       dfailprintk((MYIOC_s_ERR_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                "%s: exit at line=%d\n", ioc->name,
                                __FUNCTION__, __LINE__));
                        break; /* non-fatal: an rphy can be added later */
@@ -2753,13 +2734,13 @@ mptsas_hotplug_work(struct work_struct *work)
 
                rphy->identify = identify;
                if (sas_rphy_add(rphy)) {
-                       dfailprintk((MYIOC_s_ERR_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
                                "%s: exit at line=%d\n", ioc->name,
                                __FUNCTION__, __LINE__));
                        sas_rphy_free(rphy);
                        break;
                }
-               mptsas_set_rphy(phy_info, rphy);
+               mptsas_set_rphy(ioc, phy_info, rphy);
                break;
        case MPTSAS_ADD_RAID:
                sdev = scsi_device_lookup(ioc->sh, MPTSAS_RAID_CHANNEL,
@@ -3175,7 +3156,7 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
        if (numSGE < sh->sg_tablesize) {
                /* Reset this value */
-               dprintk((MYIOC_s_INFO_FMT
+               dprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                  "Resetting sg_tablesize to %d from %d\n",
                  ioc->name, numSGE, sh->sg_tablesize));
                sh->sg_tablesize = numSGE;
@@ -3193,7 +3174,7 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
                goto out_mptsas_probe;
        }
 
-       dprintk((MYIOC_s_INFO_FMT "ScsiLookup @ %p\n",
+       dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ScsiLookup @ %p\n",
                 ioc->name, hd->ScsiLookup));
 
        /* Clear the TM flags
@@ -3233,7 +3214,7 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
        error = scsi_add_host(sh, &ioc->pcidev->dev);
        if (error) {
-               dprintk((KERN_ERR MYNAM
+               dprintk(ioc, printk(KERN_ERR MYNAM
                  "scsi_add_host failed\n"));
                goto out_mptsas_probe;
        }
@@ -3261,7 +3242,7 @@ static void __devexit mptsas_remove(struct pci_dev *pdev)
        list_for_each_entry_safe(p, n, &ioc->sas_topology, list) {
                list_del(&p->list);
                for (i = 0 ; i < p->num_phys ; i++)
-                       mptsas_port_delete(p->phy_info[i].port_details);
+                       mptsas_port_delete(ioc, p->phy_info[i].port_details);
                kfree(p->phy_info);
                kfree(p);
        }
@@ -3316,15 +3297,8 @@ mptsas_init(void)
                mpt_register(mptscsih_scandv_complete, MPTSAS_DRIVER);
        mptsasMgmtCtx = mpt_register(mptsas_mgmt_done, MPTSAS_DRIVER);
 
-       if (mpt_event_register(mptsasDoneCtx, mptsas_event_process) == 0) {
-               devtverboseprintk((KERN_INFO MYNAM
-                 ": Registered for IOC event notifications\n"));
-       }
-
-       if (mpt_reset_register(mptsasDoneCtx, mptsas_ioc_reset) == 0) {
-               dprintk((KERN_INFO MYNAM
-                 ": Registered for IOC reset notifications\n"));
-       }
+       mpt_event_register(mptsasDoneCtx, mptsas_event_process);
+       mpt_reset_register(mptsasDoneCtx, mptsas_ioc_reset);
 
        error = pci_register_driver(&mptsas_driver);
        if (error)
index fd3aa26..5431529 100644 (file)
@@ -191,7 +191,7 @@ mptscsih_getFreeChainBuffer(MPT_ADAPTER *ioc, int *retIndex)
        int rc;
        int chain_idx;
 
-       dsgprintk((MYIOC_s_INFO_FMT "getFreeChainBuffer called\n",
+       dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "getFreeChainBuffer called\n",
                        ioc->name));
        spin_lock_irqsave(&ioc->FreeQlock, flags);
        if (!list_empty(&ioc->FreeChainQ)) {
@@ -203,12 +203,12 @@ mptscsih_getFreeChainBuffer(MPT_ADAPTER *ioc, int *retIndex)
                offset = (u8 *)chainBuf - (u8 *)ioc->ChainBuffer;
                chain_idx = offset / ioc->req_sz;
                rc = SUCCESS;
-               dsgprintk((MYIOC_s_ERR_FMT "getFreeChainBuffer chainBuf=%p ChainBuffer=%p offset=%d chain_idx=%d\n",
+               dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "getFreeChainBuffer chainBuf=%p ChainBuffer=%p offset=%d chain_idx=%d\n",
                        ioc->name, chainBuf, ioc->ChainBuffer, offset, chain_idx));
        } else {
                rc = FAILED;
                chain_idx = MPT_HOST_NO_CHAIN;
-               dfailprintk((MYIOC_s_INFO_FMT "getFreeChainBuffer failed\n",
+               dfailprintk(ioc, printk(MYIOC_s_DEBUG_FMT "getFreeChainBuffer failed\n",
                        ioc->name));
        }
        spin_unlock_irqrestore(&ioc->FreeQlock, flags);
@@ -337,7 +337,7 @@ nextSGEset:
                         */
                        pReq->ChainOffset = 0;
                        RequestNB = (((sgeOffset - 1) >> ioc->NBShiftFactor)  + 1) & 0x03;
-                       dsgprintk((MYIOC_s_INFO_FMT
+                       dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                            "Single Buffer RequestNB=%x, sgeOffset=%d\n", ioc->name, RequestNB, sgeOffset));
                        ioc->RequestNB[req_idx] = RequestNB;
                }
@@ -353,7 +353,7 @@ nextSGEset:
                 * Loop until done.
                 */
 
-               dsgprintk((MYIOC_s_INFO_FMT "SG: Chain Required! sg done %d\n",
+               dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SG: Chain Required! sg done %d\n",
                                ioc->name, sg_done));
 
                /* Set LAST_ELEMENT flag for last non-chain element
@@ -386,7 +386,7 @@ nextSGEset:
                         */
                        pReq->ChainOffset = (u8) (sgeOffset >> 2);
                        RequestNB = (((sgeOffset - 1) >> ioc->NBShiftFactor)  + 1) & 0x03;
-                       dsgprintk((MYIOC_s_ERR_FMT "Chain Buffer Needed, RequestNB=%x sgeOffset=%d\n", ioc->name, RequestNB, sgeOffset));
+                       dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Chain Buffer Needed, RequestNB=%x sgeOffset=%d\n", ioc->name, RequestNB, sgeOffset));
                        ioc->RequestNB[req_idx] = RequestNB;
                }
 
@@ -397,7 +397,7 @@ nextSGEset:
                 * in current buffer. Get a chain buffer.
                 */
                if ((mptscsih_getFreeChainBuffer(ioc, &newIndex)) == FAILED) {
-                       dfailprintk((MYIOC_s_INFO_FMT
+                       dfailprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                            "getFreeChainBuffer FAILED SCSI cmd=%02x (%p)\n",
                            ioc->name, pReq->CDB[0], SCpnt));
                        return FAILED;
@@ -419,7 +419,7 @@ nextSGEset:
                 *   out the Address and Flags fields.
                 */
                chainSge = (char *) psge;
-               dsgprintk((KERN_INFO "  Current buff @ %p (index 0x%x)",
+               dsgprintk(ioc, printk(KERN_DEBUG "  Current buff @ %p (index 0x%x)",
                                psge, req_idx));
 
                /* Start the SGE for the next buffer
@@ -428,7 +428,7 @@ nextSGEset:
                sgeOffset = 0;
                sg_done = 0;
 
-               dsgprintk((KERN_INFO "  Chain buff @ %p (index 0x%x)\n",
+               dsgprintk(ioc, printk(KERN_DEBUG "  Chain buff @ %p (index 0x%x)\n",
                                psge, chain_idx));
 
                /* Start the SGE for the next buffer
@@ -456,7 +456,7 @@ mptscsih_issue_sep_command(MPT_ADAPTER *ioc, VirtTarget *vtarget,
                return;
 
        if ((mf = mpt_get_msg_frame(ioc->InternalCtx, ioc)) == NULL) {
-               dfailprintk((MYIOC_s_WARN_FMT "%s: no msg frames!!\n",
+               dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s: no msg frames!!\n",
                    ioc->name,__FUNCTION__));
                return;
        }
@@ -467,93 +467,158 @@ mptscsih_issue_sep_command(MPT_ADAPTER *ioc, VirtTarget *vtarget,
        SEPMsg->TargetID = vtarget->id;
        SEPMsg->Action = MPI_SEP_REQ_ACTION_WRITE_STATUS;
        SEPMsg->SlotStatus = SlotStatus;
-       devtverboseprintk((MYIOC_s_WARN_FMT
+       devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT
            "Sending SEP cmd=%x channel=%d id=%d\n",
            ioc->name, SlotStatus, SEPMsg->Bus, SEPMsg->TargetID));
        mpt_put_msg_frame(ioc->DoneCtx, ioc, mf);
 }
 
-#ifdef MPT_DEBUG_REPLY
+#ifdef CONFIG_FUSION_LOGGING
 /**
- *     mptscsih_iocstatus_info_scsiio - IOCSTATUS information for SCSIIO
+ *     mptscsih_info_scsiio - debug print info on reply frame
  *     @ioc: Pointer to MPT_ADAPTER structure
- *     @ioc_status: U32 IOCStatus word from IOC
- *     @scsi_status: U8 sam status from target
- *     @scsi_state: U8 scsi state
  *     @sc: original scsi cmnd pointer
- *     @mf: Pointer to MPT request frame
+ *     @pScsiReply: Pointer to MPT reply frame
+ *
+ *     MPT_DEBUG_REPLY needs to be enabled to obtain this info
  *
  *     Refer to lsi/mpi.h.
  **/
 static void
-mptscsih_iocstatus_info_scsiio(MPT_ADAPTER *ioc, u32 ioc_status,
-    u8 scsi_status, u8 scsi_state, struct scsi_cmnd *sc)
+mptscsih_info_scsiio(MPT_ADAPTER *ioc, struct scsi_cmnd *sc, SCSIIOReply_t * pScsiReply)
 {
-       char extend_desc[EVENT_DESCR_STR_SZ];
-       char *desc = NULL;
+       char    *desc = NULL;
+       char    *desc1 = NULL;
+       u16     ioc_status;
+       u8      skey, asc, ascq;
+
+       ioc_status = le16_to_cpu(pScsiReply->IOCStatus) & MPI_IOCSTATUS_MASK;
 
        switch (ioc_status) {
 
-       case MPI_IOCSTATUS_SCSI_INVALID_BUS: /* 0x0041 */
-               desc = "SCSI Invalid Bus";
+       case MPI_IOCSTATUS_SUCCESS:
+               desc = "success";
                break;
-
-       case MPI_IOCSTATUS_SCSI_INVALID_TARGETID: /* 0x0042 */
-               desc = "SCSI Invalid TargetID";
+       case MPI_IOCSTATUS_SCSI_INVALID_BUS:
+               desc = "invalid bus";
                break;
-
-       case MPI_IOCSTATUS_SCSI_DEVICE_NOT_THERE: /* 0x0043 */
-               /*
-                * Inquiry is issued for device scanning
-                */
-               if (sc->cmnd[0] != 0x12)
-                       desc = "SCSI Device Not There";
+       case MPI_IOCSTATUS_SCSI_INVALID_TARGETID:
+               desc = "invalid target_id";
                break;
-
-       case MPI_IOCSTATUS_SCSI_DATA_OVERRUN: /* 0x0044 */
-               desc = "SCSI Data Overrun";
+       case MPI_IOCSTATUS_SCSI_DEVICE_NOT_THERE:
+               desc = "device not there";
                break;
-
-       case MPI_IOCSTATUS_SCSI_IO_DATA_ERROR: /* 0x0046 */
-               desc = "SCSI I/O Data Error";
+       case MPI_IOCSTATUS_SCSI_DATA_OVERRUN:
+               desc = "data overrun";
                break;
-
-       case MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR: /* 0x0047 */
-               desc = "SCSI Protocol Error";
+       case MPI_IOCSTATUS_SCSI_DATA_UNDERRUN:
+               desc = "data underrun";
                break;
-
-       case MPI_IOCSTATUS_SCSI_TASK_TERMINATED: /* 0x0048 */
-               desc = "SCSI Task Terminated";
+       case MPI_IOCSTATUS_SCSI_IO_DATA_ERROR:
+               desc = "I/O data error";
                break;
-
-       case MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH: /* 0x0049 */
-               desc = "SCSI Residual Mismatch";
+       case MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR:
+               desc = "protocol error";
                break;
-
-       case MPI_IOCSTATUS_SCSI_TASK_MGMT_FAILED: /* 0x004A */
-               desc = "SCSI Task Management Failed";
+       case MPI_IOCSTATUS_SCSI_TASK_TERMINATED:
+               desc = "task terminated";
                break;
-
-       case MPI_IOCSTATUS_SCSI_IOC_TERMINATED: /* 0x004B */
-               desc = "SCSI IOC Terminated";
+       case MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH:
+               desc = "residual mismatch";
+               break;
+       case MPI_IOCSTATUS_SCSI_TASK_MGMT_FAILED:
+               desc = "task management failed";
+               break;
+       case MPI_IOCSTATUS_SCSI_IOC_TERMINATED:
+               desc = "IOC terminated";
+               break;
+       case MPI_IOCSTATUS_SCSI_EXT_TERMINATED:
+               desc = "ext terminated";
                break;
+       default:
+               desc = "";
+               break;
+       }
+
+       switch (pScsiReply->SCSIStatus)
+       {
 
-       case MPI_IOCSTATUS_SCSI_EXT_TERMINATED: /* 0x004C */
-               desc = "SCSI Ext Terminated";
+       case MPI_SCSI_STATUS_SUCCESS:
+               desc1 = "success";
+               break;
+       case MPI_SCSI_STATUS_CHECK_CONDITION:
+               desc1 = "check condition";
+               break;
+       case MPI_SCSI_STATUS_CONDITION_MET:
+               desc1 = "condition met";
+               break;
+       case MPI_SCSI_STATUS_BUSY:
+               desc1 = "busy";
+               break;
+       case MPI_SCSI_STATUS_INTERMEDIATE:
+               desc1 = "intermediate";
+               break;
+       case MPI_SCSI_STATUS_INTERMEDIATE_CONDMET:
+               desc1 = "intermediate condmet";
+               break;
+       case MPI_SCSI_STATUS_RESERVATION_CONFLICT:
+               desc1 = "reservation conflict";
+               break;
+       case MPI_SCSI_STATUS_COMMAND_TERMINATED:
+               desc1 = "command terminated";
+               break;
+       case MPI_SCSI_STATUS_TASK_SET_FULL:
+               desc1 = "task set full";
+               break;
+       case MPI_SCSI_STATUS_ACA_ACTIVE:
+               desc1 = "aca active";
+               break;
+       case MPI_SCSI_STATUS_FCPEXT_DEVICE_LOGGED_OUT:
+               desc1 = "fcpext device logged out";
+               break;
+       case MPI_SCSI_STATUS_FCPEXT_NO_LINK:
+               desc1 = "fcpext no link";
+               break;
+       case MPI_SCSI_STATUS_FCPEXT_UNASSIGNED:
+               desc1 = "fcpext unassigned";
+               break;
+       default:
+               desc1 = "";
                break;
        }
 
-       if (!desc)
-               return;
+       scsi_print_command(sc);
+       printk(KERN_DEBUG "\tfw_channel = %d, fw_id = %d\n",
+           pScsiReply->Bus, pScsiReply->TargetID);
+       printk(KERN_DEBUG "\trequest_len = %d, underflow = %d, resid = %d\n",
+           scsi_bufflen(sc), sc->underflow, scsi_get_resid(sc));
+       printk(KERN_DEBUG "\ttag = %d, transfer_count = %d, sc->result = %08X\n",
+           le16_to_cpu(pScsiReply->TaskTag),
+           le32_to_cpu(pScsiReply->TransferCount), sc->result);
 
-       snprintf(extend_desc, EVENT_DESCR_STR_SZ,
-           "[%d:%d:%d:%d] cmd=%02Xh, sam_status=%02Xh state=%02Xh",
-               sc->device->host->host_no,
-               sc->device->channel, sc->device->id, sc->device->lun,
-               sc->cmnd[0], scsi_status, scsi_state);
+       printk(KERN_DEBUG "\tiocstatus = %s (0x%04x), "
+           "scsi_status = %s (0x%02x), scsi_state = (0x%02x)\n",
+           desc, ioc_status,
+           desc1, pScsiReply->SCSIStatus,
+           pScsiReply->SCSIState);
 
-       printk(MYIOC_s_INFO_FMT "IOCStatus(0x%04X): %s: %s\n",
-           ioc->name, ioc_status, desc, extend_desc);
+       if (pScsiReply->SCSIState & MPI_SCSI_STATE_AUTOSENSE_VALID) {
+               skey = sc->sense_buffer[2] & 0x0F;
+               asc = sc->sense_buffer[12];
+               ascq = sc->sense_buffer[13];
+
+               printk(KERN_DEBUG "\t[sense_key,asc,ascq]: "
+                   "[0x%02x,0x%02x,0x%02x]\n",
+                   skey, asc, ascq);
+       }
+
+       /*
+        *  Look for + dump FCP ResponseInfo[]!
+        */
+       if (pScsiReply->SCSIState & MPI_SCSI_STATE_RESPONSE_INFO_VALID &&
+           pScsiReply->ResponseInfo)
+               printk(KERN_DEBUG "response_info = %08xh\n",
+                   le32_to_cpu(pScsiReply->ResponseInfo));
 }
 #endif
 
@@ -627,11 +692,11 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
        pScsiReply = (SCSIIOReply_t *) mr;
 
        if((ioc->facts.MsgVersion >= MPI_VERSION_01_05) && pScsiReply){
-               dmfprintk((MYIOC_s_INFO_FMT
+               dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                        "ScsiDone (mf=%p,mr=%p,sc=%p,idx=%d,task-tag=%d)\n",
                        ioc->name, mf, mr, sc, req_idx, pScsiReply->TaskTag));
        }else{
-               dmfprintk((MYIOC_s_INFO_FMT
+               dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                        "ScsiDone (mf=%p,mr=%p,sc=%p,idx=%d)\n",
                        ioc->name, mf, mr, sc, req_idx));
        }
@@ -759,7 +824,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                                sc->result=DID_SOFT_ERROR << 16;
                        else /* Sufficient data transfer occurred */
                                sc->result = (DID_OK << 16) | scsi_status;
-                       dreplyprintk((KERN_NOTICE
+                       dreplyprintk(ioc, printk(KERN_DEBUG
                            "RESIDUAL_MISMATCH: result=%x on channel=%d id=%d\n",
                            sc->result, sc->device->channel, sc->device->id));
                        break;
@@ -792,9 +857,11 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                                }
                        }
 
-                       dreplyprintk((KERN_NOTICE "  sc->underflow={report ERR if < %02xh bytes xfer'd}\n",
+
+                       dreplyprintk(ioc, printk(KERN_DEBUG "  sc->underflow={report ERR if < %02xh bytes xfer'd}\n",
                                        sc->underflow));
-                       dreplyprintk((KERN_NOTICE "  ActBytesXferd=%02xh\n", xfer_cnt));
+                       dreplyprintk(ioc, printk(KERN_DEBUG "  ActBytesXferd=%02xh\n", xfer_cnt));
+
                        /* Report Queue Full
                         */
                        if (scsi_status == MPI_SCSI_STATUS_TASK_SET_FULL)
@@ -871,27 +938,9 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
 
                }       /* switch(status) */
 
-#ifdef MPT_DEBUG_REPLY
-               if (sc->result) {
-
-                       mptscsih_iocstatus_info_scsiio(ioc, status,
-                           scsi_status, scsi_state, sc);
-
-                       dreplyprintk(("%s: [%d:%d:%d:%d] cmd=0x%02x "
-                           "result=0x%08x\n\tiocstatus=0x%04X "
-                           "scsi_state=0x%02X scsi_status=0x%02X "
-                           "loginfo=0x%08X\n", __FUNCTION__,
-                           sc->device->host->host_no, sc->device->channel, sc->device->id,
-                           sc->device->lun, sc->cmnd[0], sc->result, status,
-                           scsi_state, scsi_status, log_info));
-
-                       dreplyprintk(("%s: [%d:%d:%d:%d] resid=%d "
-                                     "bufflen=%d xfer_cnt=%d\n", __FUNCTION__,
-                                     sc->device->host->host_no,
-                                     sc->device->channel, sc->device->id,
-                                     sc->device->lun, scsi_get_resid(sc),
-                                     scsi_bufflen(sc), xfer_cnt));
-               }
+#ifdef CONFIG_FUSION_LOGGING
+               if (sc->result && (ioc->debug_level & MPT_DEBUG_REPLY))
+                       mptscsih_info_scsiio(ioc, sc, pScsiReply);
 #endif
 
        } /* end of address reply case */
@@ -925,7 +974,7 @@ mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd)
        int              ii;
        int              max = ioc->req_depth;
 
-       dprintk((KERN_INFO MYNAM ": flush_ScsiLookup called\n"));
+       dprintk(ioc, printk(KERN_DEBUG MYNAM ": flush_ScsiLookup called\n"));
        for (ii= 0; ii < max; ii++) {
                if ((SCpnt = hd->ScsiLookup[ii]) != NULL) {
 
@@ -937,7 +986,7 @@ mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd)
                        hd->ScsiLookup[ii] = NULL;
 
                        mf = MPT_INDEX_2_MFPTR(ioc, ii);
-                       dmfprintk(( "flush: ScsiDone (mf=%p,sc=%p)\n",
+                       dmfprintk(ioc, printk(KERN_DEBUG MYNAM ": flush: ScsiDone (mf=%p,sc=%p)\n",
                                        mf, SCpnt));
 
                        /* Free Chain buffers */
@@ -987,7 +1036,7 @@ mptscsih_search_running_cmds(MPT_SCSI_HOST *hd, VirtDevice *vdevice)
        struct scsi_cmnd *sc;
        struct scsi_lun  lun;
 
-       dsprintk((KERN_INFO MYNAM ": search_running channel %d id %d lun %d max %d\n",
+       dsprintk(hd->ioc, printk(KERN_DEBUG MYNAM ": search_running channel %d id %d lun %d max %d\n",
            vdevice->vtarget->channel, vdevice->vtarget->id, vdevice->lun, max));
 
        for (ii=0; ii < max; ii++) {
@@ -1020,9 +1069,9 @@ mptscsih_search_running_cmds(MPT_SCSI_HOST *hd, VirtDevice *vdevice)
                        scsi_dma_unmap(sc);
                        sc->host_scribble = NULL;
                        sc->result = DID_NO_CONNECT << 16;
-                       dsprintk(( "search_running: found (sc=%p, mf = %p) "
-                           "channel %d id %d, lun %d \n", sc, mf,
-                           vdevice->vtarget->channel, vdevice->vtarget->id, vdevice->lun));
+                       sdev_printk(KERN_INFO, sc->device, "completing cmds: fw_channel %d,"
+                          "fw_id %d, sc=%p, mf = %p, idx=%x\n", vdevice->vtarget->channel,
+                          vdevice->vtarget->id, sc, mf, ii);
                        sc->scsi_done(sc);
                }
        }
@@ -1057,7 +1106,7 @@ mptscsih_report_queue_full(struct scsi_cmnd *sc, SCSIIOReply_t *pScsiReply, SCSI
                return;
 
        if (time - hd->last_queue_full > 10 * HZ) {
-               dprintk((MYIOC_s_WARN_FMT "Device (%d:%d:%d) reported QUEUE_FULL!\n",
+               dprintk(hd->ioc, printk(MYIOC_s_WARN_FMT "Device (%d:%d:%d) reported QUEUE_FULL!\n",
                                hd->ioc->name, 0, sc->device->id, sc->device->lun));
                hd->last_queue_full = time;
        }
@@ -1098,7 +1147,7 @@ mptscsih_remove(struct pci_dev *pdev)
                hd->ScsiLookup = NULL;
        }
 
-       dprintk((MYIOC_s_INFO_FMT
+       dprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT
            "Free'd ScsiLookup (%d) memory\n",
            hd->ioc->name, sz1));
 
@@ -1317,17 +1366,19 @@ mptscsih_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
        u32      cmd_len;
        int      my_idx;
        int      ii;
+       MPT_ADAPTER *ioc;
 
        hd = (MPT_SCSI_HOST *) SCpnt->device->host->hostdata;
+       ioc = hd->ioc;
        lun = SCpnt->device->lun;
        SCpnt->scsi_done = done;
 
-       dmfprintk((MYIOC_s_INFO_FMT "qcmd: SCpnt=%p, done()=%p\n",
-                       (hd && hd->ioc) ? hd->ioc->name : "ioc?", SCpnt, done));
+       dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "qcmd: SCpnt=%p, done()=%p\n",
+               ioc->name, SCpnt, done));
 
        if (hd->resetPending) {
-               dtmprintk((MYIOC_s_WARN_FMT "qcmd: SCpnt=%p timeout + 60HZ\n",
-                       (hd && hd->ioc) ? hd->ioc->name : "ioc?", SCpnt));
+               dtmprintk(ioc, printk(MYIOC_s_WARN_FMT "qcmd: SCpnt=%p timeout + 60HZ\n",
+                       ioc->name, SCpnt));
                return SCSI_MLQUEUE_HOST_BUSY;
        }
 
@@ -1335,8 +1386,8 @@ mptscsih_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
         *  Put together a MPT SCSI request...
         */
        if ((mf = mpt_get_msg_frame(hd->ioc->DoneCtx, hd->ioc)) == NULL) {
-               dprintk((MYIOC_s_WARN_FMT "QueueCmd, no msg frames!!\n",
-                               hd->ioc->name));
+               dprintk(ioc, printk(MYIOC_s_WARN_FMT "QueueCmd, no msg frames!!\n",
+                               ioc->name));
                return SCSI_MLQUEUE_HOST_BUSY;
        }
 
@@ -1422,9 +1473,9 @@ mptscsih_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
        hd->ScsiLookup[my_idx] = SCpnt;
 
        mpt_put_msg_frame(hd->ioc->DoneCtx, hd->ioc, mf);
-       dmfprintk((MYIOC_s_INFO_FMT "Issued SCSI cmd (%p) mf=%p idx=%d\n",
-                       hd->ioc->name, SCpnt, mf, my_idx));
-       DBG_DUMP_REQUEST_FRAME(mf)
+       dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Issued SCSI cmd (%p) mf=%p idx=%d\n",
+                       ioc->name, SCpnt, mf, my_idx));
+       DBG_DUMP_REQUEST_FRAME(ioc, (u32 *)mf)
        return 0;
 
  fail:
@@ -1475,7 +1526,7 @@ mptscsih_freeChainBuffers(MPT_ADAPTER *ioc, int req_idx)
                list_add_tail(&chain->u.frame.linkage.list, &ioc->FreeChainQ);
                spin_unlock_irqrestore(&ioc->FreeQlock, flags);
 
-               dmfprintk((MYIOC_s_INFO_FMT "FreeChainBuffers (index %d)\n",
+               dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "FreeChainBuffers (index %d)\n",
                                ioc->name, chain_idx));
 
                /* handle next */
@@ -1519,7 +1570,7 @@ mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun, int c
        unsigned long    flags;
 
        ioc = hd->ioc;
-       dtmprintk((MYIOC_s_INFO_FMT "TMHandler Entered!\n", ioc->name));
+       dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TMHandler Entered!\n", ioc->name));
 
        // SJR - CHECKME - Can we avoid this here?
        // (mpt_HardResetHandler has this check...)
@@ -1539,20 +1590,20 @@ mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun, int c
         */
        if (mptscsih_tm_pending_wait(hd) == FAILED) {
                if (type == MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK) {
-                       dtmprintk((KERN_INFO MYNAM ": %s: TMHandler abort: "
+                       dtmprintk(ioc, printk(KERN_DEBUG MYNAM ": %s: TMHandler abort: "
                           "Timed out waiting for last TM (%d) to complete! \n",
-                          hd->ioc->name, hd->tmPending));
+                          ioc->name, hd->tmPending));
                        return FAILED;
                } else if (type == MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET) {
-                       dtmprintk((KERN_INFO MYNAM ": %s: TMHandler target "
+                       dtmprintk(ioc, printk(KERN_DEBUG MYNAM ": %s: TMHandler target "
                                "reset: Timed out waiting for last TM (%d) "
-                               "to complete! \n", hd->ioc->name,
+                               "to complete! \n", ioc->name,
                                hd->tmPending));
                        return FAILED;
                } else if (type == MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS) {
-                       dtmprintk((KERN_INFO MYNAM ": %s: TMHandler bus reset: "
+                       dtmprintk(ioc, printk(KERN_DEBUG MYNAM ": %s: TMHandler bus reset: "
                           "Timed out waiting for last TM (%d) to complete! \n",
-                          hd->ioc->name, hd->tmPending));
+                         ioc->name, hd->tmPending));
                        return FAILED;
                }
        } else {
@@ -1591,12 +1642,13 @@ mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun, int c
            ctx2abort, timeout);
        if (rc)
                printk(MYIOC_s_INFO_FMT "Issue of TaskMgmt failed!\n",
-                      hd->ioc->name);
+                      ioc->name);
        else
-               dtmprintk((MYIOC_s_INFO_FMT "Issue of TaskMgmt Successful!\n",
-                          hd->ioc->name));
+               dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Issue of TaskMgmt Successful!\n",
+                          ioc->name));
 
-       dtmprintk((MYIOC_s_INFO_FMT "TMHandler rc = %d!\n", hd->ioc->name, rc));
+       dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
+                       "TMHandler rc = %d!\n", ioc->name, rc));
 
        return rc;
 }
@@ -1632,11 +1684,11 @@ mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun, i
        /* Return Fail to calling function if no message frames available.
         */
        if ((mf = mpt_get_msg_frame(hd->ioc->TaskCtx, hd->ioc)) == NULL) {
-               dfailprintk((MYIOC_s_ERR_FMT "IssueTaskMgmt, no msg frames!!\n",
+               dfailprintk(hd->ioc, printk(MYIOC_s_ERR_FMT "IssueTaskMgmt, no msg frames!!\n",
                                hd->ioc->name));
                return FAILED;
        }
-       dtmprintk((MYIOC_s_INFO_FMT "IssueTaskMgmt request @ %p\n",
+       dtmprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "IssueTaskMgmt request @ %p\n",
                        hd->ioc->name, mf));
 
        /* Format the Request
@@ -1660,27 +1712,27 @@ mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun, i
 
        pScsiTm->TaskMsgContext = ctx2abort;
 
-       dtmprintk((MYIOC_s_INFO_FMT "IssueTaskMgmt: ctx2abort (0x%08x) "
+       dtmprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "IssueTaskMgmt: ctx2abort (0x%08x) "
                "type=%d\n", hd->ioc->name, ctx2abort, type));
 
-       DBG_DUMP_TM_REQUEST_FRAME((u32 *)pScsiTm);
+       DBG_DUMP_TM_REQUEST_FRAME(ioc, (u32 *)pScsiTm);
 
        if ((retval = mpt_send_handshake_request(hd->ioc->TaskCtx, hd->ioc,
                sizeof(SCSITaskMgmt_t), (u32*)pScsiTm, CAN_SLEEP)) != 0) {
-               dfailprintk((MYIOC_s_ERR_FMT "send_handshake FAILED!"
+               dfailprintk(hd->ioc, printk(MYIOC_s_ERR_FMT "send_handshake FAILED!"
                        " (hd %p, ioc %p, mf %p, rc=%d) \n", hd->ioc->name, hd,
                        hd->ioc, mf, retval));
                goto fail_out;
        }
 
        if(mptscsih_tm_wait_for_completion(hd, timeout) == FAILED) {
-               dfailprintk((MYIOC_s_ERR_FMT "task management request TIMED OUT!"
+               dfailprintk(hd->ioc, printk(MYIOC_s_ERR_FMT "task management request TIMED OUT!"
                        " (hd %p, ioc %p, mf %p) \n", hd->ioc->name, hd,
                        hd->ioc, mf));
-               dtmprintk((MYIOC_s_INFO_FMT "Calling HardReset! \n",
+               dtmprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "Calling HardReset! \n",
                         hd->ioc->name));
                retval = mpt_HardResetHandler(hd->ioc, CAN_SLEEP);
-               dtmprintk((MYIOC_s_INFO_FMT "rc=%d \n",
+               dtmprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "rc=%d \n",
                         hd->ioc->name, retval));
                goto fail_out;
        }
@@ -1748,8 +1800,8 @@ mptscsih_abort(struct scsi_cmnd * SCpnt)
        if ((hd = (MPT_SCSI_HOST *) SCpnt->device->host->hostdata) == NULL) {
                SCpnt->result = DID_RESET << 16;
                SCpnt->scsi_done(SCpnt);
-               dfailprintk((KERN_INFO MYNAM ": mptscsih_abort: Can't locate "
-                   "host! (sc=%p)\n", SCpnt));
+               printk(KERN_DEBUG MYNAM ": mptscsih_abort: Can't locate "
+                   "host! (sc=%p)\n", SCpnt);
                return FAILED;
        }
 
@@ -1760,7 +1812,7 @@ mptscsih_abort(struct scsi_cmnd * SCpnt)
 
        vdevice = SCpnt->device->hostdata;
        if (!vdevice || !vdevice->vtarget) {
-               dtmprintk((MYIOC_s_DEBUG_FMT "task abort: device has been "
+               dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "task abort: device has been "
                    "deleted (sc=%p)\n", ioc->name, SCpnt));
                SCpnt->result = DID_NO_CONNECT << 16;
                SCpnt->scsi_done(SCpnt);
@@ -1771,7 +1823,7 @@ mptscsih_abort(struct scsi_cmnd * SCpnt)
        /* Task aborts are not supported for hidden raid components.
         */
        if (vdevice->vtarget->tflags & MPT_TARGET_FLAGS_RAID_COMPONENT) {
-               dtmprintk((MYIOC_s_DEBUG_FMT "task abort: hidden raid "
+               dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "task abort: hidden raid "
                    "component (sc=%p)\n", ioc->name, SCpnt));
                SCpnt->result = DID_RESET << 16;
                retval = FAILED;
@@ -1785,7 +1837,7 @@ mptscsih_abort(struct scsi_cmnd * SCpnt)
                 * Do OS callback.
                 */
                SCpnt->result = DID_RESET << 16;
-               dtmprintk((KERN_INFO MYNAM ": %s: mptscsih_abort: "
+               dtmprintk(ioc, printk(KERN_DEBUG MYNAM ": %s: mptscsih_abort: "
                   "Command not in the active list! (sc=%p)\n", ioc->name,
                   SCpnt));
                retval = 0;
@@ -1850,8 +1902,8 @@ mptscsih_dev_reset(struct scsi_cmnd * SCpnt)
        /* If we can't locate our host adapter structure, return FAILED status.
         */
        if ((hd = (MPT_SCSI_HOST *) SCpnt->device->host->hostdata) == NULL){
-               dtmprintk((KERN_INFO MYNAM ": mptscsih_dev_reset: Can't "
-                   "locate host! (sc=%p)\n", SCpnt));
+               printk(KERN_DEBUG MYNAM ": mptscsih_dev_reset: Can't "
+                   "locate host! (sc=%p)\n", SCpnt);
                return FAILED;
        }
 
@@ -1913,8 +1965,8 @@ mptscsih_bus_reset(struct scsi_cmnd * SCpnt)
        /* If we can't locate our host adapter structure, return FAILED status.
         */
        if ((hd = (MPT_SCSI_HOST *) SCpnt->device->host->hostdata) == NULL){
-               dtmprintk((KERN_INFO MYNAM ": mptscsih_bus_reset: Can't "
-                   "locate host! (sc=%p)\n", SCpnt ));
+               printk(KERN_DEBUG MYNAM ": mptscsih_bus_reset: Can't "
+                   "locate host! (sc=%p)\n", SCpnt );
                return FAILED;
        }
 
@@ -1957,8 +2009,8 @@ mptscsih_host_reset(struct scsi_cmnd *SCpnt)
 
        /*  If we can't locate the host to reset, then we failed. */
        if ((hd = (MPT_SCSI_HOST *) SCpnt->device->host->hostdata) == NULL){
-               dtmprintk( ( KERN_INFO MYNAM ": mptscsih_host_reset: Can't "
-                   "locate host! (sc=%p)\n", SCpnt));
+               printk( KERN_DEBUG MYNAM ": mptscsih_host_reset: Can't "
+                   "locate host! (sc=%p)\n", SCpnt);
                return FAILED;
        }
 
@@ -2106,16 +2158,16 @@ mptscsih_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *m
        u8                       tmType;
        u32                      termination_count;
 
-       dtmprintk((MYIOC_s_WARN_FMT "TaskMgmt completed (mf=%p,mr=%p)\n",
+       dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt completed (mf=%p,mr=%p)\n",
            ioc->name, mf, mr));
        if (!ioc->sh) {
-               dtmprintk((MYIOC_s_WARN_FMT
+               dtmprintk(ioc, printk(MYIOC_s_WARN_FMT
                    "TaskMgmt Complete: NULL Scsi Host Ptr\n", ioc->name));
                return 1;
        }
 
        if (mr == NULL) {
-               dtmprintk((MYIOC_s_WARN_FMT
+               dtmprintk(ioc, printk(MYIOC_s_WARN_FMT
                    "ERROR! TaskMgmt Reply: NULL Request %p\n", ioc->name, mf));
                return 1;
        }
@@ -2131,19 +2183,21 @@ mptscsih_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *m
            pScsiTmReply->ResponseCode)
                mptscsih_taskmgmt_response_code(ioc,
                    pScsiTmReply->ResponseCode);
-       DBG_DUMP_TM_REPLY_FRAME((u32 *)pScsiTmReply);
-
-#if defined(MPT_DEBUG_REPLY) || defined(MPT_DEBUG_TM)
-       printk("%s: ha=%d [%d:%d:0] task_type=0x%02X "
-           "iocstatus=0x%04X\n\tloginfo=0x%08X response_code=0x%02X "
-           "term_cmnds=%d\n", __FUNCTION__, ioc->id, pScsiTmReply->Bus,
-           pScsiTmReply->TargetID, pScsiTmReq->TaskType,
-           le16_to_cpu(pScsiTmReply->IOCStatus),
-           le32_to_cpu(pScsiTmReply->IOCLogInfo),pScsiTmReply->ResponseCode,
-           le32_to_cpu(pScsiTmReply->TerminationCount));
+       DBG_DUMP_TM_REPLY_FRAME(ioc, (u32 *)pScsiTmReply);
+
+#ifdef CONFIG_FUSION_LOGGING
+       if ((ioc->debug_level & MPT_DEBUG_REPLY) ||
+                               (ioc->debug_level & MPT_DEBUG_TM ))
+               printk("%s: ha=%d [%d:%d:0] task_type=0x%02X "
+                       "iocstatus=0x%04X\n\tloginfo=0x%08X response_code=0x%02X "
+                       "term_cmnds=%d\n", __FUNCTION__, ioc->id, pScsiTmReply->Bus,
+                        pScsiTmReply->TargetID, pScsiTmReq->TaskType,
+                       le16_to_cpu(pScsiTmReply->IOCStatus),
+                       le32_to_cpu(pScsiTmReply->IOCLogInfo),pScsiTmReply->ResponseCode,
+                       le32_to_cpu(pScsiTmReply->TerminationCount));
 #endif
        if (!iocstatus) {
-               dtmprintk((MYIOC_s_WARN_FMT " TaskMgmt SUCCESS\n", ioc->name));
+               dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT " TaskMgmt SUCCESS\n", ioc->name));
                        hd->abortSCpnt = NULL;
                goto out;
        }
@@ -2224,10 +2278,6 @@ mptscsih_bios_param(struct scsi_device * sdev, struct block_device *bdev,
        geom[1] = sectors;
        geom[2] = cylinders;
 
-       dprintk((KERN_NOTICE
-               ": bios_param: Id=%i Lun=%i Channel=%i CHS=%i/%i/%i\n",
-               sdev->id, sdev->lun, sdev->channel, (int)cylinders, heads, sectors));
-
        return 0;
 }
 
@@ -2393,11 +2443,11 @@ mptscsih_slave_configure(struct scsi_device *sdev)
        vtarget = starget->hostdata;
        vdevice = sdev->hostdata;
 
-       dsprintk((MYIOC_s_INFO_FMT
+       dsprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT
                "device @ %p, channel=%d, id=%d, lun=%d\n",
                hd->ioc->name, sdev, sdev->channel, sdev->id, sdev->lun));
        if (hd->ioc->bus_type == SPI)
-               dsprintk((MYIOC_s_INFO_FMT
+               dsprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT
                    "sdtr %d wdtr %d ppr %d inq length=%d\n",
                    hd->ioc->name, sdev->sdtr, sdev->wdtr,
                    sdev->ppr, sdev->inquiry_len));
@@ -2411,19 +2461,19 @@ mptscsih_slave_configure(struct scsi_device *sdev)
        vdevice->configured_lun = 1;
        mptscsih_change_queue_depth(sdev, MPT_SCSI_CMD_PER_DEV_HIGH);
 
-       dsprintk((MYIOC_s_INFO_FMT
+       dsprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT
                "Queue depth=%d, tflags=%x\n",
                hd->ioc->name, sdev->queue_depth, vtarget->tflags));
 
        if (hd->ioc->bus_type == SPI)
-               dsprintk((MYIOC_s_INFO_FMT
+               dsprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT
                    "negoFlags=%x, maxOffset=%x, SyncFactor=%x\n",
                    hd->ioc->name, vtarget->negoFlags, vtarget->maxOffset,
                    vtarget->minSyncFactor));
 
 slave_configure_exit:
 
-       dsprintk((MYIOC_s_INFO_FMT
+       dsprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT
                "tagged %d, simple %d, ordered %d\n",
                hd->ioc->name,sdev->tagged_supported, sdev->simple_tags,
                sdev->ordered_tags));
@@ -2490,7 +2540,7 @@ mptscsih_copy_sense_data(struct scsi_cmnd *sc, MPT_SCSI_HOST *hd, MPT_FRAME_HDR
                        }
                }
        } else {
-               dprintk((MYIOC_s_INFO_FMT "Hmmm... SenseData len=0! (?)\n",
+               dprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "Hmmm... SenseData len=0! (?)\n",
                                hd->ioc->name));
        }
 }
@@ -2520,7 +2570,7 @@ mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
        unsigned long    flags;
        int             ii;
 
-       dtmprintk((KERN_WARNING MYNAM
+       dtmprintk(ioc, printk(KERN_DEBUG MYNAM
                        ": IOC %s_reset routed to SCSI host driver!\n",
                        reset_phase==MPT_IOC_SETUP_RESET ? "setup" : (
                        reset_phase==MPT_IOC_PRE_RESET ? "pre" : "post")));
@@ -2535,7 +2585,7 @@ mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
                hd = (MPT_SCSI_HOST *) ioc->sh->hostdata;
 
        if (reset_phase == MPT_IOC_SETUP_RESET) {
-               dtmprintk((MYIOC_s_WARN_FMT "Setup-Diag Reset\n", ioc->name));
+               dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Setup-Diag Reset\n", ioc->name));
 
                /* Clean Up:
                 * 1. Set Hard Reset Pending Flag
@@ -2544,7 +2594,7 @@ mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
                hd->resetPending = 1;
 
        } else if (reset_phase == MPT_IOC_PRE_RESET) {
-               dtmprintk((MYIOC_s_WARN_FMT "Pre-Diag Reset\n", ioc->name));
+               dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Pre-Diag Reset\n", ioc->name));
 
                /* 2. Flush running commands
                 *      Clean ScsiLookup (and associated memory)
@@ -2564,10 +2614,10 @@ mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
                        mpt_free_msg_frame(ioc, hd->cmdPtr);
                }
 
-               dtmprintk((MYIOC_s_WARN_FMT "Pre-Reset complete.\n", ioc->name));
+               dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Pre-Reset complete.\n", ioc->name));
 
        } else {
-               dtmprintk((MYIOC_s_WARN_FMT "Post-Diag Reset\n", ioc->name));
+               dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Post-Diag Reset\n", ioc->name));
 
                /* Once a FW reload begins, all new OS commands are
                 * redirected to the doneQ w/ a reset status.
@@ -2607,7 +2657,7 @@ mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
                        hd->cmdPtr = NULL;
                }
 
-               dtmprintk((MYIOC_s_WARN_FMT "Post-Reset complete.\n", ioc->name));
+               dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Post-Reset complete.\n", ioc->name));
 
        }
 
@@ -2621,7 +2671,7 @@ mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
        MPT_SCSI_HOST *hd;
        u8 event = le32_to_cpu(pEvReply->Event) & 0xFF;
 
-       devtverboseprintk((MYIOC_s_INFO_FMT "MPT event (=%02Xh) routed to SCSI host driver!\n",
+       devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT "MPT event (=%02Xh) routed to SCSI host driver!\n",
                        ioc->name, event));
 
        if (ioc->sh == NULL ||
@@ -2663,7 +2713,7 @@ mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
        case MPI_EVENT_STATE_CHANGE:                    /* 02 */
        case MPI_EVENT_EVENT_CHANGE:                    /* 0A */
        default:
-               dprintk((KERN_INFO "  Ignoring event (=%02Xh)\n", event));
+               dprintk(ioc, printk(KERN_DEBUG MYNAM ": Ignoring event (=%02Xh)\n", event));
                break;
        }
 
@@ -2724,7 +2774,7 @@ mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
        }
        hd->cmdPtr = NULL;
 
-       ddvprintk((MYIOC_s_INFO_FMT "ScanDvComplete (mf=%p,mr=%p,idx=%d)\n",
+       ddvprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ScanDvComplete (mf=%p,mr=%p,idx=%d)\n",
                        hd->ioc->name, mf, mr, req_idx));
 
        hd->pLocal = &hd->localReply;
@@ -2744,9 +2794,6 @@ mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                status = le16_to_cpu(pReply->IOCStatus) & MPI_IOCSTATUS_MASK;
                scsi_status = pReply->SCSIStatus;
 
-               ddvtprintk((KERN_NOTICE "  IOCStatus=%04xh, SCSIState=%02xh, SCSIStatus=%02xh, IOCLogInfo=%08xh\n",
-                            status, pReply->SCSIState, scsi_status,
-                            le32_to_cpu(pReply->IOCLogInfo)));
 
                switch(status) {
 
@@ -2799,7 +2846,7 @@ mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                                                        SCSI_STD_SENSE_BYTES);
                                memcpy(hd->pLocal->sense, sense_data, sz);
 
-                               ddvprintk((KERN_NOTICE "  Check Condition, sense ptr %p\n",
+                               ddvprintk(ioc, printk(KERN_DEBUG "  Check Condition, sense ptr %p\n",
                                                sense_data));
                        } else if (pReply->SCSIState & MPI_SCSI_STATE_AUTOSENSE_FAILED) {
                                if (pReq->CDB[0] == INQUIRY)
@@ -2830,8 +2877,6 @@ mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
 
                }       /* switch(status) */
 
-               ddvtprintk((KERN_NOTICE "  completionCode set to %08xh\n",
-                               completionCode));
        } /* end of address reply case */
 
        hd->pLocal->completion = completionCode;
@@ -2862,7 +2907,7 @@ mptscsih_timer_expired(unsigned long data)
 {
        MPT_SCSI_HOST *hd = (MPT_SCSI_HOST *) data;
 
-       ddvprintk((MYIOC_s_WARN_FMT "Timer Expired! Cmd %p\n", hd->ioc->name, hd->cmdPtr));
+       ddvprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "Timer Expired! Cmd %p\n", hd->ioc->name, hd->cmdPtr));
 
        if (hd->cmdPtr) {
                MPIHeader_t *cmd = (MPIHeader_t *)hd->cmdPtr;
@@ -2874,7 +2919,6 @@ mptscsih_timer_expired(unsigned long data)
                         * If new eh code, do nothing. Wait for OS cmd timeout
                         *      for bus reset.
                         */
-                       ddvtprintk((MYIOC_s_NOTE_FMT "DV Cmd Timeout: NoOp\n", hd->ioc->name));
                } else {
                        /* Perform a FW reload */
                        if (mpt_HardResetHandler(hd->ioc, NO_SLEEP) < 0) {
@@ -2891,7 +2935,7 @@ mptscsih_timer_expired(unsigned long data)
         * The FW will reply to all outstanding commands, callback will finish cleanup.
         * Hard reset clean-up will free all resources.
         */
-       ddvprintk((MYIOC_s_WARN_FMT "Timer Expired Complete!\n", hd->ioc->name));
+       ddvprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "Timer Expired Complete!\n", hd->ioc->name));
 
        return;
 }
@@ -2932,7 +2976,7 @@ mptscsih_do_cmd(MPT_SCSI_HOST *hd, INTERNAL_CMD *io)
 
        in_isr = in_interrupt();
        if (in_isr) {
-               dprintk((MYIOC_s_WARN_FMT "Internal SCSI IO request not allowed in ISR context!\n",
+               dprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "Internal SCSI IO request not allowed in ISR context!\n",
                                        hd->ioc->name));
                return -EPERM;
        }
@@ -3035,7 +3079,7 @@ mptscsih_do_cmd(MPT_SCSI_HOST *hd, INTERNAL_CMD *io)
        /* Get and Populate a free Frame
         */
        if ((mf = mpt_get_msg_frame(hd->ioc->InternalCtx, hd->ioc)) == NULL) {
-               ddvprintk((MYIOC_s_WARN_FMT "No msg frames!\n",
+               ddvprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "No msg frames!\n",
                                        hd->ioc->name));
                return -EBUSY;
        }
@@ -3075,7 +3119,7 @@ mptscsih_do_cmd(MPT_SCSI_HOST *hd, INTERNAL_CMD *io)
 
        if (cmd == REQUEST_SENSE) {
                pScsiReq->Control = cpu_to_le32(dir | MPI_SCSIIO_CONTROL_UNTAGGED);
-               ddvprintk((MYIOC_s_INFO_FMT "Untagged! 0x%2x\n",
+               ddvprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "Untagged! 0x%2x\n",
                        hd->ioc->name, cmd));
        }
 
@@ -3086,7 +3130,7 @@ mptscsih_do_cmd(MPT_SCSI_HOST *hd, INTERNAL_CMD *io)
        pScsiReq->SenseBufferLowAddr = cpu_to_le32(hd->ioc->sense_buf_low_dma
                                           + (my_idx * MPT_SENSE_BUFFER_ALLOC));
 
-       ddvprintk((MYIOC_s_INFO_FMT "Sending Command 0x%x for (%d:%d:%d)\n",
+       ddvprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "Sending Command 0x%x for (%d:%d:%d)\n",
                        hd->ioc->name, cmd, io->channel, io->id, io->lun));
 
        if (dir == MPI_SCSIIO_CONTROL_READ) {
@@ -3138,7 +3182,7 @@ mptscsih_do_cmd(MPT_SCSI_HOST *hd, INTERNAL_CMD *io)
        } else {
                rc = -EFAULT;
                /* This should never happen. */
-               ddvprintk((MYIOC_s_INFO_FMT "_do_cmd: Null pLocal!!!\n",
+               ddvprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "_do_cmd: Null pLocal!!!\n",
                                hd->ioc->name));
        }
 
@@ -3324,6 +3368,35 @@ mptscsih_device_delay_show(struct class_device *cdev, char *buf)
 static CLASS_DEVICE_ATTR(device_delay, S_IRUGO,
     mptscsih_device_delay_show, NULL);
 
+static ssize_t
+mptscsih_debug_level_show(struct class_device *cdev, char *buf)
+{
+       struct Scsi_Host *host = class_to_shost(cdev);
+       MPT_SCSI_HOST   *hd = (MPT_SCSI_HOST *)host->hostdata;
+       MPT_ADAPTER *ioc = hd->ioc;
+
+       return snprintf(buf, PAGE_SIZE, "%08xh\n", ioc->debug_level);
+}
+static ssize_t
+mptscsih_debug_level_store(struct class_device *cdev, const char *buf,
+                                                               size_t count)
+{
+       struct Scsi_Host *host = class_to_shost(cdev);
+       MPT_SCSI_HOST   *hd = (MPT_SCSI_HOST *)host->hostdata;
+       MPT_ADAPTER *ioc = hd->ioc;
+       int val = 0;
+
+       if (sscanf(buf, "%x", &val) != 1)
+               return -EINVAL;
+
+       ioc->debug_level = val;
+       printk(MYIOC_s_INFO_FMT "debug_level=%08xh\n",
+                               ioc->name, ioc->debug_level);
+       return strlen(buf);
+}
+static CLASS_DEVICE_ATTR(debug_level, S_IRUGO | S_IWUSR,
+    mptscsih_debug_level_show, mptscsih_debug_level_store);
+
 struct class_device_attribute *mptscsih_host_attrs[] = {
        &class_device_attr_version_fw,
        &class_device_attr_version_bios,
@@ -3336,6 +3409,7 @@ struct class_device_attribute *mptscsih_host_attrs[] = {
        &class_device_attr_board_tracer,
        &class_device_attr_io_delay,
        &class_device_attr_device_delay,
+       &class_device_attr_debug_level,
        NULL,
 };
 EXPORT_SYMBOL(mptscsih_host_attrs);
index 947fe29..8c98420 100644 (file)
@@ -138,7 +138,9 @@ mptspi_setTargetNegoParms(MPT_SCSI_HOST *hd, VirtTarget *target,
                                else {
                                        factor = MPT_ULTRA320;
                                        if (scsi_device_qas(sdev)) {
-                                               ddvprintk((KERN_INFO "Enabling QAS due to byte56=%02x on id=%d!\n", scsi_device_qas(sdev), id));
+                                               ddvprintk(hd->ioc,
+                                               printk(KERN_DEBUG "Enabling QAS due to "
+                                               "byte56=%02x on id=%d!\n", scsi_device_qas(sdev), id));
                                                noQas = 0;
                                        }
                                        if (sdev->type == TYPE_TAPE &&
@@ -225,7 +227,8 @@ mptspi_setTargetNegoParms(MPT_SCSI_HOST *hd, VirtTarget *target,
                /* Disable QAS in a mixed configuration case
                 */
 
-               ddvprintk((KERN_INFO "Disabling QAS due to noQas=%02x on id=%d!\n", noQas, id));
+               ddvprintk(hd->ioc, printk(KERN_DEBUG
+                       "Disabling QAS due to noQas=%02x on id=%d!\n", noQas, id));
        }
 }
 
@@ -256,8 +259,8 @@ mptspi_writeIOCPage4(MPT_SCSI_HOST *hd, u8 channel , u8 id)
        /* Get a MF for this command.
         */
        if ((mf = mpt_get_msg_frame(ioc->DoneCtx, ioc)) == NULL) {
-               dfailprintk((MYIOC_s_WARN_FMT "writeIOCPage4 : no msg frames!\n",
-                                       ioc->name));
+               dfailprintk(ioc, printk(MYIOC_s_WARN_FMT
+                               "writeIOCPage4 : no msg frames!\n",ioc->name));
                return -EAGAIN;
        }
 
@@ -297,7 +300,7 @@ mptspi_writeIOCPage4(MPT_SCSI_HOST *hd, u8 channel , u8 id)
 
        mpt_add_sge((char *)&pReq->PageBufferSGE, flagsLength, dataDma);
 
-       ddvprintk((MYIOC_s_INFO_FMT
+       ddvprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                "writeIOCPage4: MaxSEP=%d ActiveSEP=%d id=%d bus=%d\n",
                        ioc->name, IOCPage4Ptr->MaxSEP, IOCPage4Ptr->ActiveSEP, id, channel));
 
@@ -422,7 +425,7 @@ static int mptspi_target_alloc(struct scsi_target *starget)
        if (starget->channel == 0 &&
            mptspi_is_raid(hd, starget->id)) {
                vtarget->raidVolume = 1;
-               ddvprintk((KERN_INFO
+               ddvprintk(hd->ioc, printk(KERN_DEBUG
                    "RAID Volume @ channel=%d id=%d\n", starget->channel,
                    starget->id));
        }
@@ -462,7 +465,7 @@ mptspi_target_destroy(struct scsi_target *starget)
 static void
 mptspi_print_write_nego(struct _MPT_SCSI_HOST *hd, struct scsi_target *starget, u32 ii)
 {
-       ddvprintk((MYIOC_s_INFO_FMT "id=%d Requested = 0x%08x"
+       ddvprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "id=%d Requested = 0x%08x"
            " ( %s factor = 0x%02x @ offset = 0x%02x %s%s%s%s%s%s%s%s)\n",
            hd->ioc->name, starget->id, ii,
            ii & MPI_SCSIDEVPAGE0_NP_WIDE ? "Wide ": "",
@@ -487,7 +490,7 @@ mptspi_print_write_nego(struct _MPT_SCSI_HOST *hd, struct scsi_target *starget,
 static void
 mptspi_print_read_nego(struct _MPT_SCSI_HOST *hd, struct scsi_target *starget, u32 ii)
 {
-       ddvprintk((MYIOC_s_INFO_FMT "id=%d Read = 0x%08x"
+       ddvprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "id=%d Read = 0x%08x"
            " ( %s factor = 0x%02x @ offset = 0x%02x %s%s%s%s%s%s%s%s)\n",
            hd->ioc->name, starget->id, ii,
            ii & MPI_SCSIDEVPAGE0_NP_WIDE ? "Wide ": "",
@@ -613,7 +616,7 @@ mptscsih_quiesce_raid(MPT_SCSI_HOST *hd, int quiesce, u8 channel, u8 id)
        /* Get and Populate a free Frame
         */
        if ((mf = mpt_get_msg_frame(hd->ioc->InternalCtx, hd->ioc)) == NULL) {
-               ddvprintk((MYIOC_s_WARN_FMT "_do_raid: no msg frames!\n",
+               ddvprintk(hd->ioc, printk(MYIOC_s_WARN_FMT "_do_raid: no msg frames!\n",
                                        hd->ioc->name));
                return -EAGAIN;
        }
@@ -635,7 +638,7 @@ mptscsih_quiesce_raid(MPT_SCSI_HOST *hd, int quiesce, u8 channel, u8 id)
        mpt_add_sge((char *)&pReq->ActionDataSGE,
                MPT_SGE_FLAGS_SSIMPLE_READ | 0, (dma_addr_t) -1);
 
-       ddvprintk((MYIOC_s_INFO_FMT "RAID Volume action=%x channel=%d id=%d\n",
+       ddvprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "RAID Volume action=%x channel=%d id=%d\n",
                        hd->ioc->name, pReq->Action, channel, id));
 
        hd->pLocal = NULL;
@@ -735,7 +738,7 @@ static int mptspi_slave_configure(struct scsi_device *sdev)
        if (ret)
                return ret;
 
-       ddvprintk((MYIOC_s_INFO_FMT "id=%d min_period=0x%02x"
+       ddvprintk(hd->ioc, printk(MYIOC_s_DEBUG_FMT "id=%d min_period=0x%02x"
                " max_offset=0x%02x max_width=%d\n", hd->ioc->name,
                sdev->id, spi_min_period(scsi_target(sdev)),
                spi_max_offset(scsi_target(sdev)),
@@ -768,10 +771,8 @@ mptspi_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
                return 0;
        }
 
-#ifdef MPT_DEBUG_DV
        if (spi_dv_pending(scsi_target(SCpnt->device)))
-               scsi_print_command(SCpnt);
-#endif
+               ddvprintk(hd->ioc, scsi_print_command(SCpnt));
 
        return mptscsih_qcmd(SCpnt,done);
 }
@@ -1415,7 +1416,7 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
        if (numSGE < sh->sg_tablesize) {
                /* Reset this value */
-               dprintk((MYIOC_s_INFO_FMT
+               dprintk(ioc, printk(MYIOC_s_INFO_FMT
                  "Resetting sg_tablesize to %d from %d\n",
                  ioc->name, numSGE, sh->sg_tablesize));
                sh->sg_tablesize = numSGE;
@@ -1435,7 +1436,7 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
                goto out_mptspi_probe;
        }
 
-       dprintk((MYIOC_s_INFO_FMT "ScsiLookup @ %p\n",
+       dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ScsiLookup @ %p\n",
                 ioc->name, hd->ScsiLookup));
 
        /* Clear the TM flags
@@ -1463,7 +1464,7 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        ioc->spi_data.Saf_Te = mpt_saf_te;
 
        hd->negoNvram = MPT_SCSICFG_USE_NVRAM;
-       ddvprintk((MYIOC_s_INFO_FMT
+       ddvprintk(ioc, printk(MYIOC_s_DEBUG_FMT
                "saf_te %x\n",
                ioc->name,
                mpt_saf_te));
@@ -1481,7 +1482,7 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
        error = scsi_add_host (sh, &ioc->pcidev->dev);
        if(error) {
-               dprintk((KERN_ERR MYNAM
+               dprintk(ioc, printk(KERN_ERR MYNAM
                  "scsi_add_host failed\n"));
                goto out_mptspi_probe;
        }
@@ -1536,15 +1537,8 @@ mptspi_init(void)
        mptspiTaskCtx = mpt_register(mptscsih_taskmgmt_complete, MPTSPI_DRIVER);
        mptspiInternalCtx = mpt_register(mptscsih_scandv_complete, MPTSPI_DRIVER);
 
-       if (mpt_event_register(mptspiDoneCtx, mptspi_event_process) == 0) {
-               devtverboseprintk((KERN_INFO MYNAM
-                 ": Registered for IOC event notifications\n"));
-       }
-
-       if (mpt_reset_register(mptspiDoneCtx, mptspi_ioc_reset) == 0) {
-               dprintk((KERN_INFO MYNAM
-                 ": Registered for IOC reset notifications\n"));
-       }
+       mpt_event_register(mptspiDoneCtx, mptspi_event_process);
+       mpt_reset_register(mptspiDoneCtx, mptspi_ioc_reset);
 
        error = pci_register_driver(&mptspi_driver);
        if (error)
@@ -1564,12 +1558,7 @@ mptspi_exit(void)
        pci_unregister_driver(&mptspi_driver);
 
        mpt_reset_deregister(mptspiDoneCtx);
-       dprintk((KERN_INFO MYNAM
-         ": Deregistered for IOC reset notifications\n"));
-
        mpt_event_deregister(mptspiDoneCtx);
-       dprintk((KERN_INFO MYNAM
-         ": Deregistered for IOC event notifications\n"));
 
        mpt_deregister(mptspiInternalCtx);
        mpt_deregister(mptspiTaskCtx);
index a26baab..6800e57 100644 (file)
@@ -194,8 +194,7 @@ static inline int aac_valid_context(struct scsi_cmnd *scsicmd,
        struct scsi_device *device;
 
        if (unlikely(!scsicmd || !scsicmd->scsi_done )) {
-               dprintk((KERN_WARNING "aac_valid_context: scsi command corrupt\n"))
-;
+               dprintk((KERN_WARNING "aac_valid_context: scsi command corrupt\n"));
                 aac_fib_complete(fibptr);
                 aac_fib_free(fibptr);
                 return 0;
@@ -1689,23 +1688,23 @@ static void synchronize_callback(void *context, struct fib *fibptr)
        if (!aac_valid_context(cmd, fibptr))
                return;
 
-       dprintk((KERN_DEBUG "synchronize_callback[cpu %d]: t = %ld.\n", 
+       dprintk((KERN_DEBUG "synchronize_callback[cpu %d]: t = %ld.\n",
                                smp_processor_id(), jiffies));
        BUG_ON(fibptr == NULL);
 
 
        synchronizereply = fib_data(fibptr);
        if (le32_to_cpu(synchronizereply->status) == CT_OK)
-               cmd->result = DID_OK << 16 | 
+               cmd->result = DID_OK << 16 |
                        COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
        else {
                struct scsi_device *sdev = cmd->device;
                struct aac_dev *dev = fibptr->dev;
                u32 cid = sdev_id(sdev);
-               printk(KERN_WARNING 
+               printk(KERN_WARNING
                     "synchronize_callback: synchronize failed, status = %d\n",
                     le32_to_cpu(synchronizereply->status));
-               cmd->result = DID_OK << 16 | 
+               cmd->result = DID_OK << 16 |
                        COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
                set_sense((u8 *)&dev->fsa_dev[cid].sense_data,
                                    HARDWARE_ERROR,
@@ -1713,7 +1712,7 @@ static void synchronize_callback(void *context, struct fib *fibptr)
                                    ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0,
                                    0, 0);
                memcpy(cmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
-                 min(sizeof(dev->fsa_dev[cid].sense_data), 
+                 min(sizeof(dev->fsa_dev[cid].sense_data),
                          sizeof(cmd->sense_buffer)));
        }
 
@@ -1731,6 +1730,9 @@ static int aac_synchronize(struct scsi_cmnd *scsicmd)
        struct scsi_device *sdev = scsicmd->device;
        int active = 0;
        struct aac_dev *aac;
+       u64 lba = ((u64)scsicmd->cmnd[2] << 24) | (scsicmd->cmnd[3] << 16) |
+               (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];
+       u32 count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8];
        unsigned long flags;
 
        /*
@@ -1739,7 +1741,51 @@ static int aac_synchronize(struct scsi_cmnd *scsicmd)
         */
        spin_lock_irqsave(&sdev->list_lock, flags);
        list_for_each_entry(cmd, &sdev->cmd_list, list)
-               if (cmd != scsicmd && cmd->SCp.phase == AAC_OWNER_FIRMWARE) {
+               if (cmd->SCp.phase == AAC_OWNER_FIRMWARE) {
+                       u64 cmnd_lba;
+                       u32 cmnd_count;
+
+                       if (cmd->cmnd[0] == WRITE_6) {
+                               cmnd_lba = ((cmd->cmnd[1] & 0x1F) << 16) |
+                                       (cmd->cmnd[2] << 8) |
+                                       cmd->cmnd[3];
+                               cmnd_count = cmd->cmnd[4];
+                               if (cmnd_count == 0)
+                                       cmnd_count = 256;
+                       } else if (cmd->cmnd[0] == WRITE_16) {
+                               cmnd_lba = ((u64)cmd->cmnd[2] << 56) |
+                                       ((u64)cmd->cmnd[3] << 48) |
+                                       ((u64)cmd->cmnd[4] << 40) |
+                                       ((u64)cmd->cmnd[5] << 32) |
+                                       ((u64)cmd->cmnd[6] << 24) |
+                                       (cmd->cmnd[7] << 16) |
+                                       (cmd->cmnd[8] << 8) |
+                                       cmd->cmnd[9];
+                               cmnd_count = (cmd->cmnd[10] << 24) |
+                                       (cmd->cmnd[11] << 16) |
+                                       (cmd->cmnd[12] << 8) |
+                                       cmd->cmnd[13];
+                       } else if (cmd->cmnd[0] == WRITE_12) {
+                               cmnd_lba = ((u64)cmd->cmnd[2] << 24) |
+                                       (cmd->cmnd[3] << 16) |
+                                       (cmd->cmnd[4] << 8) |
+                                       cmd->cmnd[5];
+                               cmnd_count = (cmd->cmnd[6] << 24) |
+                                       (cmd->cmnd[7] << 16) |
+                                       (cmd->cmnd[8] << 8) |
+                                       cmd->cmnd[9];
+                       } else if (cmd->cmnd[0] == WRITE_10) {
+                               cmnd_lba = ((u64)cmd->cmnd[2] << 24) |
+                                       (cmd->cmnd[3] << 16) |
+                                       (cmd->cmnd[4] << 8) |
+                                       cmd->cmnd[5];
+                               cmnd_count = (cmd->cmnd[7] << 8) |
+                                       cmd->cmnd[8];
+                       } else
+                               continue;
+                       if (((cmnd_lba + cmnd_count) < lba) ||
+                         (count && ((lba + count) < cmnd_lba)))
+                               continue;
                        ++active;
                        break;
                }
@@ -1768,7 +1814,7 @@ static int aac_synchronize(struct scsi_cmnd *scsicmd)
        synchronizecmd->command = cpu_to_le32(VM_ContainerConfig);
        synchronizecmd->type = cpu_to_le32(CT_FLUSH_CACHE);
        synchronizecmd->cid = cpu_to_le32(scmd_id(scsicmd));
-       synchronizecmd->count = 
+       synchronizecmd->count =
             cpu_to_le32(sizeof(((struct aac_synchronize_reply *)NULL)->data));
 
        /*
@@ -1790,7 +1836,7 @@ static int aac_synchronize(struct scsi_cmnd *scsicmd)
                return 0;
        }
 
-       printk(KERN_WARNING 
+       printk(KERN_WARNING
                "aac_synchronize: aac_fib_send failed with status: %d.\n", status);
        aac_fib_complete(cmd_fibcontext);
        aac_fib_free(cmd_fibcontext);
index 400d034..94727b9 100644 (file)
@@ -12,7 +12,7 @@
  *----------------------------------------------------------------------------*/
 
 #ifndef AAC_DRIVER_BUILD
-# define AAC_DRIVER_BUILD 2447
+# define AAC_DRIVER_BUILD 2449
 # define AAC_DRIVER_BRANCH "-ms"
 #endif
 #define MAXIMUM_NUM_CONTAINERS 32
@@ -1807,10 +1807,10 @@ struct aac_aifcmd {
  *     accounting for the fact capacity could be a 64 bit value
  *
  */
-static inline u32 cap_to_cyls(sector_t capacity, u32 divisor)
+static inline unsigned int cap_to_cyls(sector_t capacity, unsigned divisor)
 {
        sector_div(capacity, divisor);
-       return (u32)capacity;
+       return capacity;
 }
 
 /* SCp.phase values */
index c709dc8..813556c 100644 (file)
@@ -826,7 +826,7 @@ static ssize_t aac_show_reset_adapter(struct class_device *class_dev,
        tmp = aac_adapter_check_health(dev);
        if ((tmp == 0) && dev->in_reset)
                tmp = -EBUSY;
-       len = snprintf(buf, PAGE_SIZE, "0x%x", tmp);
+       len = snprintf(buf, PAGE_SIZE, "0x%x\n", tmp);
        return len;
 }
 
@@ -1126,9 +1126,8 @@ static int __devinit aac_probe_one(struct pci_dev *pdev,
 static void aac_shutdown(struct pci_dev *dev)
 {
        struct Scsi_Host *shost = pci_get_drvdata(dev);
-       struct aac_dev *aac = (struct aac_dev *)shost->hostdata;
        scsi_block_requests(shost);
-       __aac_shutdown(aac);
+       __aac_shutdown((struct aac_dev *)shost->hostdata);
 }
 
 static void __devexit aac_remove_one(struct pci_dev *pdev)
index a8ace56..c55f7c8 100644 (file)
@@ -1,11 +1,10 @@
 /*
  *     Adaptec AAC series RAID controller driver
- *     (c) Copyright 2001 Red Hat Inc. <alan@redhat.com>
  *
  * based on the old aacraid driver that is..
  * Adaptec aacraid device driver for Linux.
  *
- * Copyright (c) 2000 Adaptec, Inc. (aacraid@adaptec.com)
+ * Copyright (c) 2006-2007 Adaptec, Inc. (aacraid@adaptec.com)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 9c5fcfb..8cd6588 100644 (file)
@@ -5,7 +5,7 @@
  * based on the old aacraid driver that is..
  * Adaptec aacraid device driver for Linux.
  *
- * Copyright (c) 2000 Adaptec, Inc. (aacraid@adaptec.com)
+ * Copyright (c) 2000-2007 Adaptec, Inc. (aacraid@adaptec.com)
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index ebc65b9..73eef3d 100644 (file)
@@ -472,7 +472,7 @@ static int aac_rx_restart_adapter(struct aac_dev *dev, int bled)
                else {
                        bled = aac_adapter_sync_cmd(dev, IOP_RESET_ALWAYS,
                          0, 0, 0, 0, 0, 0, &var, NULL, NULL, NULL, NULL);
-                       if (!bled && (var != 0x00000001))
+                       if (!bled && (var != 0x00000001) && (var != 0x3803000F))
                                bled = -EINVAL;
                }
                if (bled && (bled != -ETIMEDOUT))
index 2b66897..79c0b6e 100644 (file)
@@ -1,4 +1,4 @@
-#define ASC_VERSION "3.3K"    /* AdvanSys Driver Version */
+#define ASC_VERSION "3.3K"     /* AdvanSys Driver Version */
 
 /*
  * advansys.c - Linux Host Driver for AdvanSys SCSI Adapters
 #include <linux/pci.h>
 #endif /* CONFIG_PCI */
 
-
 /*
  * --- Driver Options
  */
 /* Enable driver tracing. */
 /* #define ADVANSYS_DEBUG */
 
-
-/*
- * --- Debugging Header
- */
-
-#ifdef ADVANSYS_DEBUG
-#define STATIC
-#else /* ADVANSYS_DEBUG */
-#define STATIC static
-#endif /* ADVANSYS_DEBUG */
-
-
 /*
  * --- Asc Library Constants and Macros
  */
  * are all consistent at 8, 16, and 32 bits respectively. Pointers
  * and long types are 64 bits on Alpha and UltraSPARC.
  */
-#define ASC_PADDR __u32         /* Physical/Bus address data type. */
-#define ASC_VADDR __u32         /* Virtual address data type. */
-#define ASC_DCNT  __u32         /* Unsigned Data count type. */
-#define ASC_SDCNT __s32         /* Signed Data count type. */
+#define ASC_PADDR __u32                /* Physical/Bus address data type. */
+#define ASC_VADDR __u32                /* Virtual address data type. */
+#define ASC_DCNT  __u32                /* Unsigned Data count type. */
+#define ASC_SDCNT __s32                /* Signed Data count type. */
 
 /*
  * These macros are used to convert a virtual address to a
@@ -911,7 +898,7 @@ typedef unsigned char uchar;
 #define CC_VERY_LONG_SG_LIST 0
 #define ASC_SRB2SCSIQ(srb_ptr)  (srb_ptr)
 
-#define PortAddr                 unsigned short    /* port address size  */
+#define PortAddr                 unsigned short        /* port address size  */
 #define inp(port)                inb(port)
 #define outp(port, byte)         outb((byte), (port))
 
@@ -1038,17 +1025,17 @@ typedef unsigned char uchar;
 #define ASC_INQ_CLOCKING(inq)       (((inq)->info & 0x0c) >> 2)
 
 typedef struct {
-    uchar               periph;
-    uchar               devtype;
-    uchar               ver;
-    uchar               byte3;
-    uchar               add_len;
-    uchar               res1;
-    uchar               res2;
-    uchar               flags;
-    uchar               vendor_id[8];
-    uchar               product_id[16];
-    uchar               product_rev_level[4];
+       uchar periph;
+       uchar devtype;
+       uchar ver;
+       uchar byte3;
+       uchar add_len;
+       uchar res1;
+       uchar res2;
+       uchar flags;
+       uchar vendor_id[8];
+       uchar product_id[16];
+       uchar product_rev_level[4];
 } ASC_SCSI_INQUIRY;
 
 #define ASC_SG_LIST_PER_Q   7
@@ -1165,139 +1152,139 @@ typedef struct {
 #define ASC_QNO_TO_QADDR(q_no)      ((ASC_QADR_BEG)+((int)(q_no) << 6))
 
 typedef struct asc_scsiq_1 {
-    uchar               status;
-    uchar               q_no;
-    uchar               cntl;
-    uchar               sg_queue_cnt;
-    uchar               target_id;
-    uchar               target_lun;
-    ASC_PADDR           data_addr;
-    ASC_DCNT            data_cnt;
-    ASC_PADDR           sense_addr;
-    uchar               sense_len;
-    uchar               extra_bytes;
+       uchar status;
+       uchar q_no;
+       uchar cntl;
+       uchar sg_queue_cnt;
+       uchar target_id;
+       uchar target_lun;
+       ASC_PADDR data_addr;
+       ASC_DCNT data_cnt;
+       ASC_PADDR sense_addr;
+       uchar sense_len;
+       uchar extra_bytes;
 } ASC_SCSIQ_1;
 
 typedef struct asc_scsiq_2 {
-    ASC_VADDR           srb_ptr;
-    uchar               target_ix;
-    uchar               flag;
-    uchar               cdb_len;
-    uchar               tag_code;
-    ushort              vm_id;
+       ASC_VADDR srb_ptr;
+       uchar target_ix;
+       uchar flag;
+       uchar cdb_len;
+       uchar tag_code;
+       ushort vm_id;
 } ASC_SCSIQ_2;
 
 typedef struct asc_scsiq_3 {
-    uchar               done_stat;
-    uchar               host_stat;
-    uchar               scsi_stat;
-    uchar               scsi_msg;
+       uchar done_stat;
+       uchar host_stat;
+       uchar scsi_stat;
+       uchar scsi_msg;
 } ASC_SCSIQ_3;
 
 typedef struct asc_scsiq_4 {
-    uchar               cdb[ASC_MAX_CDB_LEN];
-    uchar               y_first_sg_list_qp;
-    uchar               y_working_sg_qp;
-    uchar               y_working_sg_ix;
-    uchar               y_res;
-    ushort              x_req_count;
-    ushort              x_reconnect_rtn;
-    ASC_PADDR           x_saved_data_addr;
-    ASC_DCNT            x_saved_data_cnt;
+       uchar cdb[ASC_MAX_CDB_LEN];
+       uchar y_first_sg_list_qp;
+       uchar y_working_sg_qp;
+       uchar y_working_sg_ix;
+       uchar y_res;
+       ushort x_req_count;
+       ushort x_reconnect_rtn;
+       ASC_PADDR x_saved_data_addr;
+       ASC_DCNT x_saved_data_cnt;
 } ASC_SCSIQ_4;
 
 typedef struct asc_q_done_info {
-    ASC_SCSIQ_2         d2;
-    ASC_SCSIQ_3         d3;
-    uchar               q_status;
-    uchar               q_no;
-    uchar               cntl;
-    uchar               sense_len;
-    uchar               extra_bytes;
-    uchar               res;
-    ASC_DCNT            remain_bytes;
+       ASC_SCSIQ_2 d2;
+       ASC_SCSIQ_3 d3;
+       uchar q_status;
+       uchar q_no;
+       uchar cntl;
+       uchar sense_len;
+       uchar extra_bytes;
+       uchar res;
+       ASC_DCNT remain_bytes;
 } ASC_QDONE_INFO;
 
 typedef struct asc_sg_list {
-    ASC_PADDR           addr;
-    ASC_DCNT            bytes;
+       ASC_PADDR addr;
+       ASC_DCNT bytes;
 } ASC_SG_LIST;
 
 typedef struct asc_sg_head {
-    ushort              entry_cnt;
-    ushort              queue_cnt;
-    ushort              entry_to_copy;
-    ushort              res;
-    ASC_SG_LIST         sg_list[ASC_MAX_SG_LIST];
+       ushort entry_cnt;
+       ushort queue_cnt;
+       ushort entry_to_copy;
+       ushort res;
+       ASC_SG_LIST sg_list[ASC_MAX_SG_LIST];
 } ASC_SG_HEAD;
 
 #define ASC_MIN_SG_LIST   2
 
 typedef struct asc_min_sg_head {
-    ushort              entry_cnt;
-    ushort              queue_cnt;
-    ushort              entry_to_copy;
-    ushort              res;
-    ASC_SG_LIST         sg_list[ASC_MIN_SG_LIST];
+       ushort entry_cnt;
+       ushort queue_cnt;
+       ushort entry_to_copy;
+       ushort res;
+       ASC_SG_LIST sg_list[ASC_MIN_SG_LIST];
 } ASC_MIN_SG_HEAD;
 
 #define QCX_SORT        (0x0001)
 #define QCX_COALEASE    (0x0002)
 
 typedef struct asc_scsi_q {
-    ASC_SCSIQ_1         q1;
-    ASC_SCSIQ_2         q2;
-    uchar               *cdbptr;
-    ASC_SG_HEAD         *sg_head;
-    ushort              remain_sg_entry_cnt;
-    ushort              next_sg_index;
+       ASC_SCSIQ_1 q1;
+       ASC_SCSIQ_2 q2;
+       uchar *cdbptr;
+       ASC_SG_HEAD *sg_head;
+       ushort remain_sg_entry_cnt;
+       ushort next_sg_index;
 } ASC_SCSI_Q;
 
 typedef struct asc_scsi_req_q {
-    ASC_SCSIQ_1         r1;
-    ASC_SCSIQ_2         r2;
-    uchar               *cdbptr;
-    ASC_SG_HEAD         *sg_head;
-    uchar               *sense_ptr;
-    ASC_SCSIQ_3         r3;
-    uchar               cdb[ASC_MAX_CDB_LEN];
-    uchar               sense[ASC_MIN_SENSE_LEN];
+       ASC_SCSIQ_1 r1;
+       ASC_SCSIQ_2 r2;
+       uchar *cdbptr;
+       ASC_SG_HEAD *sg_head;
+       uchar *sense_ptr;
+       ASC_SCSIQ_3 r3;
+       uchar cdb[ASC_MAX_CDB_LEN];
+       uchar sense[ASC_MIN_SENSE_LEN];
 } ASC_SCSI_REQ_Q;
 
 typedef struct asc_scsi_bios_req_q {
-    ASC_SCSIQ_1         r1;
-    ASC_SCSIQ_2         r2;
-    uchar               *cdbptr;
-    ASC_SG_HEAD         *sg_head;
-    uchar               *sense_ptr;
-    ASC_SCSIQ_3         r3;
-    uchar               cdb[ASC_MAX_CDB_LEN];
-    uchar               sense[ASC_MIN_SENSE_LEN];
+       ASC_SCSIQ_1 r1;
+       ASC_SCSIQ_2 r2;
+       uchar *cdbptr;
+       ASC_SG_HEAD *sg_head;
+       uchar *sense_ptr;
+       ASC_SCSIQ_3 r3;
+       uchar cdb[ASC_MAX_CDB_LEN];
+       uchar sense[ASC_MIN_SENSE_LEN];
 } ASC_SCSI_BIOS_REQ_Q;
 
 typedef struct asc_risc_q {
-    uchar               fwd;
-    uchar               bwd;
-    ASC_SCSIQ_1         i1;
-    ASC_SCSIQ_2         i2;
-    ASC_SCSIQ_3         i3;
-    ASC_SCSIQ_4         i4;
+       uchar fwd;
+       uchar bwd;
+       ASC_SCSIQ_1 i1;
+       ASC_SCSIQ_2 i2;
+       ASC_SCSIQ_3 i3;
+       ASC_SCSIQ_4 i4;
 } ASC_RISC_Q;
 
 typedef struct asc_sg_list_q {
-    uchar               seq_no;
-    uchar               q_no;
-    uchar               cntl;
-    uchar               sg_head_qp;
-    uchar               sg_list_cnt;
-    uchar               sg_cur_list_cnt;
+       uchar seq_no;
+       uchar q_no;
+       uchar cntl;
+       uchar sg_head_qp;
+       uchar sg_list_cnt;
+       uchar sg_cur_list_cnt;
 } ASC_SG_LIST_Q;
 
 typedef struct asc_risc_sg_list_q {
-    uchar               fwd;
-    uchar               bwd;
-    ASC_SG_LIST_Q       sg;
-    ASC_SG_LIST         sg_list[7];
+       uchar fwd;
+       uchar bwd;
+       ASC_SG_LIST_Q sg;
+       ASC_SG_LIST sg_list[7];
 } ASC_RISC_SG_LIST_Q;
 
 #define ASC_EXE_SCSI_IO_MAX_IDLE_LOOP  0x1000000UL
@@ -1431,25 +1418,25 @@ typedef struct asc_risc_sg_list_q {
 #define SYN_ULTRA_XFER_NS_15  107
 
 typedef struct ext_msg {
-    uchar               msg_type;
-    uchar               msg_len;
-    uchar               msg_req;
-    union {
-        struct {
-            uchar               sdtr_xfer_period;
-            uchar               sdtr_req_ack_offset;
-        } sdtr;
-        struct {
-            uchar               wdtr_width;
-        } wdtr;
-        struct {
-            uchar               mdp_b3;
-            uchar               mdp_b2;
-            uchar               mdp_b1;
-            uchar               mdp_b0;
-        } mdp;
-    } u_ext_msg;
-    uchar               res;
+       uchar msg_type;
+       uchar msg_len;
+       uchar msg_req;
+       union {
+               struct {
+                       uchar sdtr_xfer_period;
+                       uchar sdtr_req_ack_offset;
+               } sdtr;
+               struct {
+                       uchar wdtr_width;
+               } wdtr;
+               struct {
+                       uchar mdp_b3;
+                       uchar mdp_b2;
+                       uchar mdp_b1;
+                       uchar mdp_b0;
+               } mdp;
+       } u_ext_msg;
+       uchar res;
 } EXT_MSG;
 
 #define xfer_period     u_ext_msg.sdtr.sdtr_xfer_period
@@ -1461,24 +1448,24 @@ typedef struct ext_msg {
 #define mdp_b0          u_ext_msg.mdp_b0
 
 typedef struct asc_dvc_cfg {
-    ASC_SCSI_BIT_ID_TYPE can_tagged_qng;
-    ASC_SCSI_BIT_ID_TYPE cmd_qng_enabled;
-    ASC_SCSI_BIT_ID_TYPE disc_enable;
-    ASC_SCSI_BIT_ID_TYPE sdtr_enable;
-    uchar               chip_scsi_id;
-    uchar               isa_dma_speed;
-    uchar               isa_dma_channel;
-    uchar               chip_version;
-    ushort              lib_serial_no;
-    ushort              lib_version;
-    ushort              mcode_date;
-    ushort              mcode_version;
-    uchar               max_tag_qng[ASC_MAX_TID + 1];
-    uchar               *overrun_buf;
-    uchar               sdtr_period_offset[ASC_MAX_TID + 1];
-    ushort              pci_slot_info;
-    uchar               adapter_info[6];
-    struct device      *dev;
+       ASC_SCSI_BIT_ID_TYPE can_tagged_qng;
+       ASC_SCSI_BIT_ID_TYPE cmd_qng_enabled;
+       ASC_SCSI_BIT_ID_TYPE disc_enable;
+       ASC_SCSI_BIT_ID_TYPE sdtr_enable;
+       uchar chip_scsi_id;
+       uchar isa_dma_speed;
+       uchar isa_dma_channel;
+       uchar chip_version;
+       ushort lib_serial_no;
+       ushort lib_version;
+       ushort mcode_date;
+       ushort mcode_version;
+       uchar max_tag_qng[ASC_MAX_TID + 1];
+       uchar *overrun_buf;
+       uchar sdtr_period_offset[ASC_MAX_TID + 1];
+       ushort pci_slot_info;
+       uchar adapter_info[6];
+       struct device *dev;
 } ASC_DVC_CFG;
 
 #define ASC_DEF_DVC_CNTL       0xFFFF
@@ -1501,64 +1488,64 @@ typedef struct asc_dvc_cfg {
 #define ASC_MIN_TAGGED_CMD  7
 #define ASC_MAX_SCSI_RESET_WAIT      30
 
-struct asc_dvc_var;   &nbs