aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx
diff options
context:
space:
mode:
authorSantosh Vernekar <santosh.vernekar@qlogic.com>2009-08-25 14:36:16 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-09-12 10:35:20 -0400
commit8474f3a02a18e18459663ad88951822c62a45068 (patch)
treeb002647f04d0a2711d84c0f9dafba754a3ce36f7 /drivers/scsi/qla2xxx
parente7a51997dad4e17395be1209970e18d2e9305b24 (diff)
[SCSI] qla2xxx: Correctly set FCF_TAPE_PRESENT flag based on scsi-device.
In fabric-login based on iop BIT_8 firmware notifies presence of a FCP2 device and not necessarily a TAPE device. So instead of setting FCF_TAPE_PRESENT flag there we set it using scsi_device->type after mid-layer scan recognises "type" of the device. It also adds a new flag FCF_FCP2_DEVICE for any future use. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r--drivers/scsi/qla2xxx/qla_def.h1
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c2
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c4
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c3
4 files changed, 7 insertions, 3 deletions
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index efdfb1eb26ba..215061861794 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -1590,6 +1590,7 @@ typedef struct fc_port {
1590#define FCF_FABRIC_DEVICE BIT_0 1590#define FCF_FABRIC_DEVICE BIT_0
1591#define FCF_LOGIN_NEEDED BIT_1 1591#define FCF_LOGIN_NEEDED BIT_1
1592#define FCF_TAPE_PRESENT BIT_2 1592#define FCF_TAPE_PRESENT BIT_2
1593#define FCF_FCP2_DEVICE BIT_3
1593 1594
1594/* No loop ID flag. */ 1595/* No loop ID flag. */
1595#define FC_NO_LOOP_ID 0x1000 1596#define FC_NO_LOOP_ID 0x1000
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 37c99a27874c..51f81b272776 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -3341,7 +3341,7 @@ qla2x00_fabric_login(scsi_qla_host_t *vha, fc_port_t *fcport,
3341 } else { 3341 } else {
3342 fcport->port_type = FCT_TARGET; 3342 fcport->port_type = FCT_TARGET;
3343 if (mb[1] & BIT_1) { 3343 if (mb[1] & BIT_1) {
3344 fcport->flags |= FCF_TAPE_PRESENT; 3344 fcport->flags |= FCF_FCP2_DEVICE;
3345 } 3345 }
3346 } 3346 }
3347 3347
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index c0fec6914b96..27db6246ca3e 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1013,7 +1013,7 @@ qla2x00_mbx_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
1013 1013
1014 data[0] = MBS_COMMAND_COMPLETE; 1014 data[0] = MBS_COMMAND_COMPLETE;
1015 if (lio->ctx.type == SRB_LOGIN_CMD && le16_to_cpu(mbx->mb1) & BIT_1) 1015 if (lio->ctx.type == SRB_LOGIN_CMD && le16_to_cpu(mbx->mb1) & BIT_1)
1016 fcport->flags |= FCF_TAPE_PRESENT; 1016 fcport->flags |= FCF_FCP2_DEVICE;
1017 1017
1018 goto done_post_logio_done_work; 1018 goto done_post_logio_done_work;
1019 } 1019 }
@@ -1112,7 +1112,7 @@ qla24xx_logio_entry(scsi_qla_host_t *vha, struct req_que *req,
1112 if (iop[0] & BIT_4) { 1112 if (iop[0] & BIT_4) {
1113 fcport->port_type = FCT_TARGET; 1113 fcport->port_type = FCT_TARGET;
1114 if (iop[0] & BIT_8) 1114 if (iop[0] & BIT_8)
1115 fcport->flags |= FCF_TAPE_PRESENT; 1115 fcport->flags |= FCF_FCP2_DEVICE;
1116 } 1116 }
1117 if (iop[0] & BIT_5) 1117 if (iop[0] & BIT_5)
1118 fcport->port_type = FCT_INITIATOR; 1118 fcport->port_type = FCT_INITIATOR;
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 5fd7adbff30b..649fd75d37b6 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -1216,6 +1216,7 @@ qla2xxx_slave_configure(struct scsi_device *sdev)
1216 scsi_qla_host_t *vha = shost_priv(sdev->host); 1216 scsi_qla_host_t *vha = shost_priv(sdev->host);
1217 struct qla_hw_data *ha = vha->hw; 1217 struct qla_hw_data *ha = vha->hw;
1218 struct fc_rport *rport = starget_to_rport(sdev->sdev_target); 1218 struct fc_rport *rport = starget_to_rport(sdev->sdev_target);
1219 fc_port_t *fcport = *(fc_port_t **)rport->dd_data;
1219 struct req_que *req = vha->req; 1220 struct req_que *req = vha->req;
1220 1221
1221 if (sdev->tagged_supported) 1222 if (sdev->tagged_supported)
@@ -1224,6 +1225,8 @@ qla2xxx_slave_configure(struct scsi_device *sdev)
1224 scsi_deactivate_tcq(sdev, req->max_q_depth); 1225 scsi_deactivate_tcq(sdev, req->max_q_depth);
1225 1226
1226 rport->dev_loss_tmo = ha->port_down_retry_count; 1227 rport->dev_loss_tmo = ha->port_down_retry_count;
1228 if (sdev->type == TYPE_TAPE)
1229 fcport->flags |= FCF_TAPE_PRESENT;
1227 1230
1228 return 0; 1231 return 0;
1229} 1232}