Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
* 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 ...
This commit is contained in:
commit
a6ce22a5f6
|
@ -121,49 +121,23 @@ simscsi_biosparam (struct scsi_device *sdev, struct block_device *n,
|
|||
return 0;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
|
|
80
block/bsg.c
80
block/bsg.c
|
@ -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) {
|
||||
|
||||
ret = idr_pre_get(&bsg_minor_idr, GFP_KERNEL);
|
||||
if (!ret) {
|
||||
ret = -ENOMEM;
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
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");
|
||||
goto err;
|
||||
ret = -EINVAL;
|
||||
goto remove_idr;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
bcd->minor = bsg_minor_idx++;
|
||||
if (bsg_minor_idx == BSG_MAX_DEVS)
|
||||
bsg_minor_idx = 0;
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -186,6 +186,7 @@
|
|||
* 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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 */
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
static void mptsas_print_phy_data(MPT_ADAPTER *ioc,
|
||||
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");
|
||||
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)
|
||||
static void mptsas_print_expander_pg1(MPT_ADAPTER *ioc, 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));
|
||||
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)
|
||||
|
|
|
@ -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_EXT_TERMINATED: /* 0x004C */
|
||||
desc = "SCSI Ext Terminated";
|
||||
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;
|
||||
}
|
||||
|
||||
if (!desc)
|
||||
return;
|
||||
switch (pScsiReply->SCSIStatus)
|
||||
{
|
||||
|
||||
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);
|
||||
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;
|
||||
}
|
||||
|
||||
printk(MYIOC_s_INFO_FMT "IOCStatus(0x%04X): %s: %s\n",
|
||||
ioc->name, ioc_status, desc, extend_desc);
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
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);
|
||||
DBG_DUMP_TM_REPLY_FRAME(ioc, (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));
|
||||
#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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
27083
drivers/scsi/advansys.c
27083
drivers/scsi/advansys.c
File diff suppressed because it is too large
Load Diff
|
@ -2284,9 +2284,12 @@ static void ahd_linux_set_period(struct scsi_target *starget, int period)
|
|||
if (period < 8)
|
||||
period = 8;
|
||||
if (period < 10) {
|
||||
ppr_options |= MSG_EXT_PPR_DT_REQ;
|
||||
if (period == 8)
|
||||
ppr_options |= MSG_EXT_PPR_IU_REQ;
|
||||
if (spi_max_width(starget)) {
|
||||
ppr_options |= MSG_EXT_PPR_DT_REQ;
|
||||
if (period == 8)
|
||||
ppr_options |= MSG_EXT_PPR_IU_REQ;
|
||||
} else
|
||||
period = 10;
|
||||
}
|
||||
|
||||
dt = ppr_options & MSG_EXT_PPR_DT_REQ;
|
||||
|
@ -2365,7 +2368,7 @@ static void ahd_linux_set_dt(struct scsi_target *starget, int dt)
|
|||
printf("%s: %s DT\n", ahd_name(ahd),
|
||||
dt ? "enabling" : "disabling");
|
||||
#endif
|
||||
if (dt) {
|
||||
if (dt && spi_max_width(starget)) {
|
||||
ppr_options |= MSG_EXT_PPR_DT_REQ;
|
||||
if (!width)
|
||||
ahd_linux_set_width(starget, 1);
|
||||
|
@ -2447,7 +2450,7 @@ static void ahd_linux_set_iu(struct scsi_target *starget, int iu)
|
|||
iu ? "enabling" : "disabling");
|
||||
#endif
|
||||
|
||||
if (iu) {
|
||||
if (iu && spi_max_width(starget)) {
|
||||
ppr_options |= MSG_EXT_PPR_IU_REQ;
|
||||
ppr_options |= MSG_EXT_PPR_DT_REQ; /* IU requires DT */
|
||||
}
|
||||
|
@ -2487,7 +2490,7 @@ static void ahd_linux_set_rd_strm(struct scsi_target *starget, int rdstrm)
|
|||
rdstrm ? "enabling" : "disabling");
|
||||
#endif
|
||||
|
||||
if (rdstrm)
|
||||
if (rdstrm && spi_max_width(starget))
|
||||
ppr_options |= MSG_EXT_PPR_RD_STRM;
|
||||
|
||||
ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
|
||||
|
@ -2523,7 +2526,7 @@ static void ahd_linux_set_wr_flow(struct scsi_target *starget, int wrflow)
|
|||
wrflow ? "enabling" : "disabling");
|
||||
#endif
|
||||
|
||||
if (wrflow)
|
||||
if (wrflow && spi_max_width(starget))
|
||||
ppr_options |= MSG_EXT_PPR_WR_FLOW;
|
||||
|
||||
ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
|
||||
|
@ -2567,7 +2570,7 @@ static void ahd_linux_set_rti(struct scsi_target *starget, int rti)
|
|||
rti ? "enabling" : "disabling");
|
||||
#endif
|
||||
|
||||
if (rti)
|
||||
if (rti && spi_max_width(starget))
|
||||
ppr_options |= MSG_EXT_PPR_RTI;
|
||||
|
||||
ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
|
||||
|
@ -2603,7 +2606,7 @@ static void ahd_linux_set_pcomp_en(struct scsi_target *starget, int pcomp)
|
|||
pcomp ? "Enable" : "Disable");
|
||||
#endif
|
||||
|
||||
if (pcomp) {
|
||||
if (pcomp && spi_max_width(starget)) {
|
||||
uint8_t precomp;
|
||||
|
||||
if (ahd->unit < ARRAY_SIZE(aic79xx_iocell_info)) {
|
||||
|
@ -2647,7 +2650,7 @@ static void ahd_linux_set_hold_mcs(struct scsi_target *starget, int hold)
|
|||
unsigned int dt = ppr_options & MSG_EXT_PPR_DT_REQ;
|
||||
unsigned long flags;
|
||||
|
||||
if (hold)
|
||||
if (hold && spi_max_width(starget))
|
||||
ppr_options |= MSG_EXT_PPR_HOLD_MCS;
|
||||
|
||||
ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
|
||||
|
|
|
@ -2317,8 +2317,13 @@ static void ahc_linux_set_period(struct scsi_target *starget, int period)
|
|||
|
||||
if (period < 9)
|
||||
period = 9; /* 12.5ns is our minimum */
|
||||
if (period == 9)
|
||||
ppr_options |= MSG_EXT_PPR_DT_REQ;
|
||||
if (period == 9) {
|
||||
if (spi_max_width(starget))
|
||||
ppr_options |= MSG_EXT_PPR_DT_REQ;
|
||||
else
|
||||
/* need wide for DT and need DT for 12.5 ns */
|
||||
period = 10;
|
||||
}
|
||||
|
||||
ahc_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
|
||||
starget->channel + 'A', ROLE_INITIATOR);
|
||||
|
@ -2381,7 +2386,7 @@ static void ahc_linux_set_dt(struct scsi_target *starget, int dt)
|
|||
unsigned long flags;
|
||||
struct ahc_syncrate *syncrate;
|
||||
|
||||
if (dt) {
|
||||
if (dt && spi_max_width(starget)) {
|
||||
ppr_options |= MSG_EXT_PPR_DT_REQ;
|
||||
if (!width)
|
||||
ahc_linux_set_width(starget, 1);
|
||||
|
|
|
@ -586,7 +586,7 @@ static int __devinit asd_pci_probe(struct pci_dev *dev,
|
|||
goto Err;
|
||||
}
|
||||
asd_ha->pcidev = dev;
|
||||
asd_ha->sas_ha.pcidev = asd_ha->pcidev;
|
||||
asd_ha->sas_ha.dev = &asd_ha->pcidev->dev;
|
||||
asd_ha->sas_ha.lldd_ha = asd_ha;
|
||||
|
||||
asd_ha->name = asd_dev->name;
|
||||
|
@ -605,8 +605,6 @@ static int __devinit asd_pci_probe(struct pci_dev *dev,
|
|||
goto Err_free;
|
||||
}
|
||||
|
||||
|
||||
|
||||
err = asd_dev->setup(asd_ha);
|
||||
if (err)
|
||||
goto Err_free;
|
||||
|
|
|
@ -2216,11 +2216,13 @@ static void iscsi_tcp_session_destroy(struct iscsi_cls_session *cls_session)
|
|||
|
||||
static int iscsi_tcp_slave_configure(struct scsi_device *sdev)
|
||||
{
|
||||
blk_queue_bounce_limit(sdev->request_queue, BLK_BOUNCE_ANY);
|
||||
blk_queue_dma_alignment(sdev->request_queue, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct scsi_host_template iscsi_sht = {
|
||||
.module = THIS_MODULE,
|
||||
.name = "iSCSI Initiator over TCP/IP",
|
||||
.queuecommand = iscsi_queuecommand,
|
||||
.change_queue_depth = iscsi_change_queue_depth,
|
||||
|
|
|
@ -596,9 +596,16 @@ static void iscsi_prep_mtask(struct iscsi_conn *conn,
|
|||
nop->cmdsn = cpu_to_be32(session->cmdsn);
|
||||
if (hdr->itt != RESERVED_ITT) {
|
||||
hdr->itt = build_itt(mtask->itt, conn->id, session->age);
|
||||
/*
|
||||
* TODO: We always use immediate, so we never hit this.
|
||||
* If we start to send tmfs or nops as non-immediate then
|
||||
* we should start checking the cmdsn numbers for mgmt tasks.
|
||||
*/
|
||||
if (conn->c_stage == ISCSI_CONN_STARTED &&
|
||||
!(hdr->opcode & ISCSI_OP_IMMEDIATE))
|
||||
!(hdr->opcode & ISCSI_OP_IMMEDIATE)) {
|
||||
session->queued_cmdsn++;
|
||||
session->cmdsn++;
|
||||
}
|
||||
}
|
||||
|
||||
if (session->tt->init_mgmt_task)
|
||||
|
@ -641,9 +648,11 @@ static int iscsi_check_cmdsn_window_closed(struct iscsi_conn *conn)
|
|||
/*
|
||||
* Check for iSCSI window and take care of CmdSN wrap-around
|
||||
*/
|
||||
if (!iscsi_sna_lte(session->cmdsn, session->max_cmdsn)) {
|
||||
debug_scsi("iSCSI CmdSN closed. MaxCmdSN %u CmdSN %u\n",
|
||||
session->max_cmdsn, session->cmdsn);
|
||||
if (!iscsi_sna_lte(session->queued_cmdsn, session->max_cmdsn)) {
|
||||
debug_scsi("iSCSI CmdSN closed. ExpCmdSn %u MaxCmdSN %u "
|
||||
"CmdSN %u/%u\n", session->exp_cmdsn,
|
||||
session->max_cmdsn, session->cmdsn,
|
||||
session->queued_cmdsn);
|
||||
return -ENOSPC;
|
||||
}
|
||||
return 0;
|
||||
|
@ -722,11 +731,6 @@ check_mgmt:
|
|||
|
||||
/* process command queue */
|
||||
while (!list_empty(&conn->xmitqueue)) {
|
||||
rc = iscsi_check_cmdsn_window_closed(conn);
|
||||
if (rc) {
|
||||
spin_unlock_bh(&conn->session->lock);
|
||||
return rc;
|
||||
}
|
||||
/*
|
||||
* iscsi tcp may readd the task to the xmitqueue to send
|
||||
* write data
|
||||
|
@ -834,12 +838,6 @@ int iscsi_queuecommand(struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
|
|||
goto fault;
|
||||
}
|
||||
|
||||
/*
|
||||
* We check this here and in data xmit, because if we get to the point
|
||||
* that this check is hitting the window then we have enough IO in
|
||||
* flight and enough IO waiting to be transmitted it is better
|
||||
* to let the scsi/block layer queue up.
|
||||
*/
|
||||
if (iscsi_check_cmdsn_window_closed(conn)) {
|
||||
reason = FAILURE_WINDOW_CLOSED;
|
||||
goto reject;
|
||||
|
@ -850,6 +848,8 @@ int iscsi_queuecommand(struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
|
|||
reason = FAILURE_OOM;
|
||||
goto reject;
|
||||
}
|
||||
session->queued_cmdsn++;
|
||||
|
||||
sc->SCp.phase = session->age;
|
||||
sc->SCp.ptr = (char *)ctask;
|
||||
|
||||
|
@ -1140,7 +1140,13 @@ static void fail_command(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
|
|||
if (!sc)
|
||||
return;
|
||||
|
||||
if (ctask->state != ISCSI_TASK_PENDING)
|
||||
if (ctask->state == ISCSI_TASK_PENDING)
|
||||
/*
|
||||
* cmd never made it to the xmit thread, so we should not count
|
||||
* the cmd in the sequencing
|
||||
*/
|
||||
conn->session->queued_cmdsn--;
|
||||
else
|
||||
conn->session->tt->cleanup_cmd_task(conn, ctask);
|
||||
iscsi_ctask_mtask_cleanup(ctask);
|
||||
|
||||
|
@ -1392,7 +1398,7 @@ iscsi_session_setup(struct iscsi_transport *iscsit,
|
|||
session->state = ISCSI_STATE_FREE;
|
||||
session->mgmtpool_max = ISCSI_MGMT_CMDS_MAX;
|
||||
session->cmds_max = cmds_max;
|
||||
session->cmdsn = initial_cmdsn;
|
||||
session->queued_cmdsn = session->cmdsn = initial_cmdsn;
|
||||
session->exp_cmdsn = initial_cmdsn + 1;
|
||||
session->max_cmdsn = initial_cmdsn + 1;
|
||||
session->max_r2t = 1;
|
||||
|
@ -1473,6 +1479,7 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session)
|
|||
struct iscsi_session *session = iscsi_hostdata(shost->hostdata);
|
||||
struct module *owner = cls_session->transport->owner;
|
||||
|
||||
iscsi_unblock_session(cls_session);
|
||||
scsi_remove_host(shost);
|
||||
|
||||
iscsi_pool_free(&session->mgmtpool, (void**)session->mgmt_cmds);
|
||||
|
@ -1615,11 +1622,8 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)
|
|||
kfree(conn->persistent_address);
|
||||
__kfifo_put(session->mgmtpool.queue, (void*)&conn->login_mtask,
|
||||
sizeof(void*));
|
||||
if (session->leadconn == conn) {
|
||||
if (session->leadconn == conn)
|
||||
session->leadconn = NULL;
|
||||
/* no connections exits.. reset sequencing */
|
||||
session->cmdsn = session->max_cmdsn = session->exp_cmdsn = 1;
|
||||
}
|
||||
spin_unlock_bh(&session->lock);
|
||||
|
||||
kfifo_free(conn->mgmtqueue);
|
||||
|
@ -1649,6 +1653,7 @@ int iscsi_conn_start(struct iscsi_cls_conn *cls_conn)
|
|||
spin_lock_bh(&session->lock);
|
||||
conn->c_stage = ISCSI_CONN_STARTED;
|
||||
session->state = ISCSI_STATE_LOGGED_IN;
|
||||
session->queued_cmdsn = session->cmdsn;
|
||||
|
||||
switch(conn->stop_stage) {
|
||||
case STOP_CONN_RECOVER:
|
||||
|
|
|
@ -382,7 +382,7 @@ int sas_ata_init_host_and_port(struct domain_device *found_dev,
|
|||
struct ata_port *ap;
|
||||
|
||||
ata_host_init(&found_dev->sata_dev.ata_host,
|
||||
&ha->pcidev->dev,
|
||||
ha->dev,
|
||||
sata_port_info.flags,
|
||||
&sas_sata_ops);
|
||||
ap = ata_sas_port_alloc(&found_dev->sata_dev.ata_host,
|
||||
|
@ -448,10 +448,10 @@ static void sas_disc_task_done(struct sas_task *task)
|
|||
* @task: the task to be executed
|
||||
* @buffer: pointer to buffer to do I/O
|
||||
* @size: size of @buffer
|
||||
* @pci_dma_dir: PCI_DMA_...
|
||||
* @dma_dir: DMA direction. DMA_xxx
|
||||
*/
|
||||
static int sas_execute_task(struct sas_task *task, void *buffer, int size,
|
||||
int pci_dma_dir)
|
||||
enum dma_data_direction dma_dir)
|
||||
{
|
||||
int res = 0;
|
||||
struct scatterlist *scatter = NULL;
|
||||
|
@ -461,7 +461,7 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size,
|
|||
struct sas_internal *i =
|
||||
to_sas_internal(task->dev->port->ha->core.shost->transportt);
|
||||
|
||||
if (pci_dma_dir != PCI_DMA_NONE) {
|
||||
if (dma_dir != DMA_NONE) {
|
||||
scatter = kzalloc(sizeof(*scatter), GFP_KERNEL);
|
||||
if (!scatter)
|
||||
goto out;
|
||||
|
@ -474,11 +474,11 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size,
|
|||
task->scatter = scatter;
|
||||
task->num_scatter = num_scatter;
|
||||
task->total_xfer_len = size;
|
||||
task->data_dir = pci_dma_dir;
|
||||
task->data_dir = dma_dir;
|
||||
task->task_done = sas_disc_task_done;
|
||||
if (pci_dma_dir != PCI_DMA_NONE &&
|
||||
if (dma_dir != DMA_NONE &&
|
||||
sas_protocol_ata(task->task_proto)) {
|
||||
task->num_scatter = pci_map_sg(task->dev->port->ha->pcidev,
|
||||
task->num_scatter = dma_map_sg(task->dev->port->ha->dev,
|
||||
task->scatter,
|
||||
task->num_scatter,
|
||||
task->data_dir);
|
||||
|
@ -565,9 +565,9 @@ static int sas_execute_task(struct sas_task *task, void *buffer, int size,
|
|||
}
|
||||
}
|
||||
ex_err:
|
||||
if (pci_dma_dir != PCI_DMA_NONE) {
|
||||
if (dma_dir != DMA_NONE) {
|
||||
if (sas_protocol_ata(task->task_proto))
|
||||
pci_unmap_sg(task->dev->port->ha->pcidev,
|
||||
dma_unmap_sg(task->dev->port->ha->dev,
|
||||
task->scatter, task->num_scatter,
|
||||
task->data_dir);
|
||||
kfree(scatter);
|
||||
|
@ -628,11 +628,11 @@ static void sas_get_ata_command_set(struct domain_device *dev)
|
|||
* @features: the features register
|
||||
* @buffer: pointer to buffer to do I/O
|
||||
* @size: size of @buffer
|
||||
* @pci_dma_dir: PCI_DMA_...
|
||||
* @dma_dir: DMA direction. DMA_xxx
|
||||
*/
|
||||
static int sas_issue_ata_cmd(struct domain_device *dev, u8 command,
|
||||
u8 features, void *buffer, int size,
|
||||
int pci_dma_dir)
|
||||
enum dma_data_direction dma_dir)
|
||||
{
|
||||
int res = 0;
|
||||
struct sas_task *task;
|
||||
|
@ -652,7 +652,7 @@ static int sas_issue_ata_cmd(struct domain_device *dev, u8 command,
|
|||
task->ata_task.fis.device = d2h_fis->device;
|
||||
task->ata_task.retry_count = 1;
|
||||
|
||||
res = sas_execute_task(task, buffer, size, pci_dma_dir);
|
||||
res = sas_execute_task(task, buffer, size, dma_dir);
|
||||
|
||||
sas_free_task(task);
|
||||
out:
|
||||
|
@ -707,7 +707,7 @@ static int sas_discover_sata_dev(struct domain_device *dev)
|
|||
}
|
||||
|
||||
res = sas_issue_ata_cmd(dev, command, 0, identify_x, 512,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
DMA_FROM_DEVICE);
|
||||
if (res)
|
||||
goto out_err;
|
||||
|
||||
|
@ -720,13 +720,13 @@ static int sas_discover_sata_dev(struct domain_device *dev)
|
|||
goto cont1;
|
||||
res = sas_issue_ata_cmd(dev, ATA_SET_FEATURES,
|
||||
ATA_FEATURE_PUP_STBY_SPIN_UP,
|
||||
NULL, 0, PCI_DMA_NONE);
|
||||
NULL, 0, DMA_NONE);
|
||||
if (res)
|
||||
goto cont1;
|
||||
|
||||
schedule_timeout_interruptible(5*HZ); /* More time? */
|
||||
res = sas_issue_ata_cmd(dev, command, 0, identify_x, 512,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
DMA_FROM_DEVICE);
|
||||
if (res)
|
||||
goto out_err;
|
||||
}
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/pci.h>
|
||||
#include <linux/scatterlist.h>
|
||||
#include <scsi/scsi_host.h>
|
||||
#include <scsi/scsi_eh.h>
|
||||
|
@ -170,7 +169,7 @@ int sas_notify_lldd_dev_found(struct domain_device *dev)
|
|||
if (res) {
|
||||
printk("sas: driver on pcidev %s cannot handle "
|
||||
"device %llx, error:%d\n",
|
||||
pci_name(sas_ha->pcidev),
|
||||
sas_ha->dev->bus_id,
|
||||
SAS_ADDR(dev->sas_addr), res);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ void sas_dprint_phye(int phyid, enum phy_event pe)
|
|||
|
||||
void sas_dprint_hae(struct sas_ha_struct *sas_ha, enum ha_event he)
|
||||
{
|
||||
SAS_DPRINTK("ha %s: %s event\n", pci_name(sas_ha->pcidev),
|
||||
SAS_DPRINTK("ha %s: %s event\n", sas_ha->dev->bus_id,
|
||||
sas_hae_str[he]);
|
||||
}
|
||||
|
||||
|
|
|
@ -507,14 +507,21 @@ static int sas_dev_present_in_domain(struct asd_sas_port *port,
|
|||
int sas_smp_get_phy_events(struct sas_phy *phy)
|
||||
{
|
||||
int res;
|
||||
u8 *req;
|
||||
u8 *resp;
|
||||
struct sas_rphy *rphy = dev_to_rphy(phy->dev.parent);
|
||||
struct domain_device *dev = sas_find_dev_by_rphy(rphy);
|
||||
u8 *req = alloc_smp_req(RPEL_REQ_SIZE);
|
||||
u8 *resp = kzalloc(RPEL_RESP_SIZE, GFP_KERNEL);
|
||||
|
||||
if (!resp)
|
||||
req = alloc_smp_req(RPEL_REQ_SIZE);
|
||||
if (!req)
|
||||
return -ENOMEM;
|
||||
|
||||
resp = alloc_smp_resp(RPEL_RESP_SIZE);
|
||||
if (!resp) {
|
||||
kfree(req);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
req[1] = SMP_REPORT_PHY_ERR_LOG;
|
||||
req[9] = phy->number;
|
||||
|
||||
|
@ -1879,7 +1886,7 @@ int sas_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
|
|||
struct request *req)
|
||||
{
|
||||
struct domain_device *dev;
|
||||
int ret, type = rphy->identify.device_type;
|
||||
int ret, type;
|
||||
struct request *rsp = req->next_rq;
|
||||
|
||||
if (!rsp) {
|
||||
|
@ -1888,12 +1895,13 @@ int sas_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* seems aic94xx doesn't support */
|
||||
/* no rphy means no smp target support (ie aic94xx host) */
|
||||
if (!rphy) {
|
||||
printk("%s: can we send a smp request to a host?\n",
|
||||
__FUNCTION__);
|
||||
return -EINVAL;
|
||||
}
|
||||
type = rphy->identify.device_type;
|
||||
|
||||
if (type != SAS_EDGE_EXPANDER_DEVICE &&
|
||||
type != SAS_FANOUT_EXPANDER_DEVICE) {
|
||||
|
|
|
@ -91,18 +91,20 @@ qla2x00_sysfs_read_nvram(struct kobject *kobj,
|
|||
{
|
||||
struct scsi_qla_host *ha = to_qla_host(dev_to_shost(container_of(kobj,
|
||||
struct device, kobj)));
|
||||
unsigned long flags;
|
||||
int size = ha->nvram_size;
|
||||
char *nvram_cache = ha->nvram;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN) || off != 0)
|
||||
if (!capable(CAP_SYS_ADMIN) || off > size || count == 0)
|
||||
return 0;
|
||||
if (off + count > size) {
|
||||
size -= off;
|
||||
count = size;
|
||||
}
|
||||
|
||||
/* Read NVRAM. */
|
||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||
ha->isp_ops->read_nvram(ha, (uint8_t *)buf, ha->nvram_base,
|
||||
ha->nvram_size);
|
||||
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
||||
/* Read NVRAM data from cache. */
|
||||
memcpy(buf, &nvram_cache[off], count);
|
||||
|
||||
return ha->nvram_size;
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
|
@ -144,6 +146,8 @@ qla2x00_sysfs_write_nvram(struct kobject *kobj,
|
|||
/* Write NVRAM. */
|
||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||
ha->isp_ops->write_nvram(ha, (uint8_t *)buf, ha->nvram_base, count);
|
||||
ha->isp_ops->read_nvram(ha, (uint8_t *)&ha->nvram, ha->nvram_base,
|
||||
count);
|
||||
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
||||
|
||||
set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
|
||||
|
@ -298,18 +302,20 @@ qla2x00_sysfs_read_vpd(struct kobject *kobj,
|
|||
{
|
||||
struct scsi_qla_host *ha = to_qla_host(dev_to_shost(container_of(kobj,
|
||||
struct device, kobj)));
|
||||
unsigned long flags;
|
||||
int size = ha->vpd_size;
|
||||
char *vpd_cache = ha->vpd;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN) || off != 0)
|
||||
if (!capable(CAP_SYS_ADMIN) || off > size || count == 0)
|
||||
return 0;
|
||||
if (off + count > size) {
|
||||
size -= off;
|
||||
count = size;
|
||||
}
|
||||
|
||||
/* Read NVRAM. */
|
||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||
ha->isp_ops->read_nvram(ha, (uint8_t *)buf, ha->vpd_base,
|
||||
ha->vpd_size);
|
||||
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
||||
/* Read NVRAM data from cache. */
|
||||
memcpy(buf, &vpd_cache[off], count);
|
||||
|
||||
return ha->vpd_size;
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
|
@ -327,6 +333,7 @@ qla2x00_sysfs_write_vpd(struct kobject *kobj,
|
|||
/* Write NVRAM. */
|
||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||
ha->isp_ops->write_nvram(ha, (uint8_t *)buf, ha->vpd_base, count);
|
||||
ha->isp_ops->read_nvram(ha, (uint8_t *)ha->vpd, ha->vpd_base, count);
|
||||
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
||||
|
||||
return count;
|
||||
|
|
|
@ -2340,10 +2340,14 @@ typedef struct scsi_qla_host {
|
|||
uint8_t serial2;
|
||||
|
||||
/* NVRAM configuration data */
|
||||
#define MAX_NVRAM_SIZE 4096
|
||||
#define VPD_OFFSET MAX_NVRAM_SIZE / 2
|
||||
uint16_t nvram_size;
|
||||
uint16_t nvram_base;
|
||||
void *nvram;
|
||||
uint16_t vpd_size;
|
||||
uint16_t vpd_base;
|
||||
void *vpd;
|
||||
|
||||
uint16_t loop_reset_delay;
|
||||
uint8_t retry_count;
|
||||
|
|
|
@ -1461,8 +1461,8 @@ qla2x00_nvram_config(scsi_qla_host_t *ha)
|
|||
uint16_t cnt;
|
||||
uint8_t *dptr1, *dptr2;
|
||||
init_cb_t *icb = ha->init_cb;
|
||||
nvram_t *nv = (nvram_t *)ha->request_ring;
|
||||
uint8_t *ptr = (uint8_t *)ha->request_ring;
|
||||
nvram_t *nv = ha->nvram;
|
||||
uint8_t *ptr = ha->nvram;
|
||||
struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
|
||||
|
||||
rval = QLA_SUCCESS;
|
||||
|
@ -1480,8 +1480,7 @@ qla2x00_nvram_config(scsi_qla_host_t *ha)
|
|||
chksum += *ptr++;
|
||||
|
||||
DEBUG5(printk("scsi(%ld): Contents of NVRAM\n", ha->host_no));
|
||||
DEBUG5(qla2x00_dump_buffer((uint8_t *)ha->request_ring,
|
||||
ha->nvram_size));
|
||||
DEBUG5(qla2x00_dump_buffer((uint8_t *)nv, ha->nvram_size));
|
||||
|
||||
/* Bad NVRAM data, set defaults parameters. */
|
||||
if (chksum || nv->id[0] != 'I' || nv->id[1] != 'S' ||
|
||||
|
@ -3500,7 +3499,7 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
|
|||
|
||||
rval = QLA_SUCCESS;
|
||||
icb = (struct init_cb_24xx *)ha->init_cb;
|
||||
nv = (struct nvram_24xx *)ha->request_ring;
|
||||
nv = ha->nvram;
|
||||
|
||||
/* Determine NVRAM starting address. */
|
||||
ha->nvram_size = sizeof(struct nvram_24xx);
|
||||
|
@ -3512,7 +3511,12 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
|
|||
ha->vpd_base = FA_NVRAM_VPD1_ADDR;
|
||||
}
|
||||
|
||||
/* Get NVRAM data and calculate checksum. */
|
||||
/* Get VPD data into cache */
|
||||
ha->vpd = ha->nvram + VPD_OFFSET;
|
||||
ha->isp_ops->read_nvram(ha, (uint8_t *)ha->vpd,
|
||||
ha->nvram_base - FA_NVRAM_FUNC0_ADDR, FA_NVRAM_VPD_SIZE * 4);
|
||||
|
||||
/* Get NVRAM data into cache and calculate checksum. */
|
||||
dptr = (uint32_t *)nv;
|
||||
ha->isp_ops->read_nvram(ha, (uint8_t *)dptr, ha->nvram_base,
|
||||
ha->nvram_size);
|
||||
|
@ -3520,8 +3524,7 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
|
|||
chksum += le32_to_cpu(*dptr++);
|
||||
|
||||
DEBUG5(printk("scsi(%ld): Contents of NVRAM\n", ha->host_no));
|
||||
DEBUG5(qla2x00_dump_buffer((uint8_t *)ha->request_ring,
|
||||
ha->nvram_size));
|
||||
DEBUG5(qla2x00_dump_buffer((uint8_t *)nv, ha->nvram_size));
|
||||
|
||||
/* Bad NVRAM data, set defaults parameters. */
|
||||
if (chksum || nv->id[0] != 'I' || nv->id[1] != 'S' || nv->id[2] != 'P'
|
||||
|
|
|
@ -1068,7 +1068,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
|
|||
* values.
|
||||
*/
|
||||
if (resid &&
|
||||
((unsigned)(cp->request_bufflen - resid) <
|
||||
((unsigned)(scsi_bufflen(cp) - resid) <
|
||||
cp->underflow)) {
|
||||
DEBUG2(qla_printk(KERN_INFO, ha,
|
||||
"scsi(%ld:%d:%d:%d): Mid-layer underflow "
|
||||
|
@ -1076,7 +1076,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
|
|||
"error status.\n", ha->host_no,
|
||||
cp->device->channel, cp->device->id,
|
||||
cp->device->lun, resid,
|
||||
cp->request_bufflen));
|
||||
scsi_bufflen(cp)));
|
||||
|
||||
cp->result = DID_ERROR << 16 | lscsi_status;
|
||||
}
|
||||
|
|
|
@ -154,6 +154,9 @@ static struct {
|
|||
{"EMC", "Invista", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
|
||||
{"EMC", "SYMMETRIX", NULL, BLIST_SPARSELUN | BLIST_LARGELUN | BLIST_FORCELUN},
|
||||
{"EMULEX", "MD21/S2 ESDI", NULL, BLIST_SINGLELUN},
|
||||
{"easyRAID", "16P", NULL, BLIST_NOREPORTLUN},
|
||||
{"easyRAID", "X6P", NULL, BLIST_NOREPORTLUN},
|
||||
{"easyRAID", "F8", NULL, BLIST_NOREPORTLUN},
|
||||
{"FSC", "CentricStor", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
|
||||
{"Generic", "USB SD Reader", "1.00", BLIST_FORCELUN | BLIST_INQUIRY_36},
|
||||
{"Generic", "USB Storage-SMC", "0180", BLIST_FORCELUN | BLIST_INQUIRY_36},
|
||||
|
|
|
@ -2033,7 +2033,7 @@ static struct pci_device_id sym2_id_table[] __devinitdata = {
|
|||
{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C875,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
|
||||
{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_NCR_53C1510,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, /* new */
|
||||
PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_SCSI<<8, 0xffff00, 0UL }, /* new */
|
||||
{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_53C895A,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
|
||||
{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_53C875A,
|
||||
|
|
|
@ -53,15 +53,19 @@ struct bsg_class_device {
|
|||
struct class_device *class_dev;
|
||||
struct device *dev;
|
||||
int minor;
|
||||
struct list_head list;
|
||||
struct request_queue *queue;
|
||||
};
|
||||
|
||||
extern int bsg_register_queue(struct request_queue *, struct device *, const char *);
|
||||
extern void bsg_unregister_queue(struct request_queue *);
|
||||
#else
|
||||
#define bsg_register_queue(disk, dev, name) (0)
|
||||
#define bsg_unregister_queue(disk) do { } while (0)
|
||||
static inline int bsg_register_queue(struct request_queue * rq, struct device *dev, const char *name)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void bsg_unregister_queue(struct request_queue *rq)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
@ -210,6 +210,9 @@ struct iscsi_session {
|
|||
uint32_t exp_cmdsn;
|
||||
uint32_t max_cmdsn;
|
||||
|
||||
/* This tracks the reqs queued into the initiator */
|
||||
uint32_t queued_cmdsn;
|
||||
|
||||
/* configuration */
|
||||
int initial_r2t_en;
|
||||
unsigned max_r2t;
|
||||
|
|
|
@ -348,7 +348,7 @@ struct sas_ha_struct {
|
|||
|
||||
/* public: */
|
||||
char *sas_ha_name;
|
||||
struct pci_dev *pcidev; /* should be set */
|
||||
struct device *dev; /* should be set */
|
||||
struct module *lldd_module; /* should be set */
|
||||
|
||||
u8 *sas_addr; /* must be set */
|
||||
|
|
Loading…
Reference in New Issue