[SCSI] qla2xxx: Implement FCP priority tagging for 82xx adapters.
authorSaurav Kashyap <saurav.kashyap@qlogic.com>
Fri, 18 Nov 2011 17:03:19 +0000 (09:03 -0800)
committerJames Bottomley <JBottomley@Parallels.com>
Thu, 15 Dec 2011 06:55:10 +0000 (10:55 +0400)
This provides a capability to set a priority in the FCP packet.

Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/qla2xxx/qla_bsg.c
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_iocb.c

index 371d0de7e30bfff8eb66c5bb16ca20324ce5a3a5..c0bc0c6f084d69f6474d2c75e19bd046aa92639a 100644 (file)
@@ -102,7 +102,7 @@ qla24xx_proc_fcp_prio_cfg_cmd(struct fc_bsg_job *bsg_job)
 
        bsg_job->reply->reply_payload_rcv_len = 0;
 
-       if (!(IS_QLA24XX_TYPE(ha) || IS_QLA25XX(ha))) {
+       if (!(IS_QLA24XX_TYPE(ha) || IS_QLA25XX(ha) || IS_QLA82XX(ha))) {
                ret = -EINVAL;
                goto exit_fcp_prio_cfg;
        }
index ec73cc191273b6a89fa2cb8fc23447f17a91499e..05931e6469aaac1d89da6a24fb2bc4944e1f4f03 100644 (file)
@@ -5642,6 +5642,11 @@ qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport)
        if (priority < 0)
                return QLA_FUNCTION_FAILED;
 
+       if (IS_QLA82XX(vha->hw)) {
+               fcport->fcp_prio = priority & 0xf;
+               return QLA_SUCCESS;
+       }
+
        ret = qla24xx_set_fcp_prio(vha, fcport->loop_id, priority, mb);
        if (ret == QLA_SUCCESS) {
                if (fcport->fcp_prio != priority)
@@ -5650,7 +5655,7 @@ qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport)
                            "port_id=%02x%02x%02x.\n", priority,
                            fcport->loop_id, fcport->d_id.b.domain,
                            fcport->d_id.b.area, fcport->d_id.b.al_pa);
-               fcport->fcp_prio = priority;
+               fcport->fcp_prio = priority & 0xf;
        } else
                ql_dbg(ql_dbg_user, vha, 0x704f,
                    "Unable to update FCP_CMND priority - ret=0x%x for "
index d2cc0ccfc202a948f6e7f8a25a300afc4b20768f..841ffb34d416bab94df364d0bc9c16d061f1f800 100644 (file)
@@ -2432,6 +2432,11 @@ sufficient_dsds:
                        }
                }
 
+               /* Populate the FCP_PRIO. */
+               if (ha->flags.fcp_prio_enabled)
+                       ctx->fcp_cmnd->task_attribute |=
+                           sp->fcport->fcp_prio << 3;
+
                memcpy(ctx->fcp_cmnd->cdb, cmd->cmnd, cmd->cmd_len);
 
                fcp_dl = (uint32_t *)(ctx->fcp_cmnd->cdb + 16 +
@@ -2501,6 +2506,10 @@ sufficient_dsds:
                        }
                }
 
+               /* Populate the FCP_PRIO. */
+               if (ha->flags.fcp_prio_enabled)
+                       cmd_pkt->task |= sp->fcport->fcp_prio << 3;
+
                /* Load SCSI command packet. */
                memcpy(cmd_pkt->fcp_cdb, cmd->cmnd, cmd->cmd_len);
                host_to_fcp_swap(cmd_pkt->fcp_cdb, sizeof(cmd_pkt->fcp_cdb));