[PATCH 4/8] qla2xxx: Merge load data segments functions in qla_target.c.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Madhuranath Iyengar <mni@xxxxxxxxxxxxxxx>

The two functions, qla_tgt_2xxx_load_data_segments() and
qla_tgt_24xx_load_data_segments() are merged into a single
function called, qla_tgt_load_data_segments().

Signed-off-by: Madhuranath Iyengar <mni@xxxxxxxxxxxxxxx>
---
 drivers/scsi/qla2xxx/qla_target.c |   96 ++++++++++++-------------------------
 1 files changed, 31 insertions(+), 65 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index c82ee02..4f9123d 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -1978,78 +1978,46 @@ static void qla_tgt_load_cont_data_segments(struct qla_tgt_prm *prm, struct scsi
  * ha->hardware_lock supposed to be held on entry. We have already made sure
  * that there is sufficient amount of request entries to not drop it.
  */
-static void qla_tgt_2xxx_load_data_segments(struct qla_tgt_prm *prm,
+static void qla_tgt_load_data_segments(struct qla_tgt_prm *prm,
 	struct scsi_qla_host *vha)
 {
+	struct qla_hw_data *ha = vha->hw;
 	int cnt;
 	uint32_t *dword_ptr;
 	int enable_64bit_addressing = prm->tgt->tgt_enable_64bit_addr;
-	ctio_to_2xxx_entry_t *pkt = (ctio_to_2xxx_entry_t *)prm->pkt;
-
-	ql_dbg(ql_dbg_tgt_pkt, vha, 0xe204, "iocb->scsi_status=%x, iocb->flags=%x\n",
-	      le16_to_cpu(pkt->scsi_status), le16_to_cpu(pkt->flags));
-
-	pkt->transfer_length = cpu_to_le32(prm->cmd->bufflen);
-
-	/* Setup packet address segment pointer */
-	dword_ptr = &pkt->dseg_0_address;
-
-	if (prm->seg_cnt == 0) {
-		/* No data transfer */
-		*dword_ptr++ = 0;
-		*dword_ptr = 0;
-		return;
-	}
 
-	/* Set total data segment count */
-	pkt->dseg_count = cpu_to_le16(prm->seg_cnt);
+	if (IS_FWI2_CAPABLE(ha)) {
+		ctio7_to_24xx_entry_t *pkt24 = (ctio7_to_24xx_entry_t *)prm->pkt;
 
-	/* If scatter gather */
-	ql_dbg(ql_dbg_tgt_sgl, vha, 0xe301, "Building S/G data segments...");
-	/* Load command entry data segments */
-	for (cnt = 0;
-	     (cnt < prm->tgt->datasegs_per_cmd) && prm->seg_cnt;
-	     cnt++, prm->seg_cnt--) {
-		*dword_ptr++ =
-		    cpu_to_le32(pci_dma_lo32(sg_dma_address(prm->sg)));
-		if (enable_64bit_addressing) {
-			*dword_ptr++ =
-			    cpu_to_le32(pci_dma_hi32
-					(sg_dma_address(prm->sg)));
-		}
-		*dword_ptr++ = cpu_to_le32(sg_dma_len(prm->sg));
+		ql_dbg(ql_dbg_tgt, vha, 0xe00f,
+			"iocb->scsi_status=%x, iocb->flags=%x\n",
+			le16_to_cpu(pkt24->u.status0.scsi_status),
+			le16_to_cpu(pkt24->u.status0.flags));
 
-		ql_dbg(ql_dbg_tgt_sgl, vha, 0xe302, "S/G Segment phys_addr=%llx:%llx, len=%d\n",
-		      (long long unsigned int)pci_dma_hi32(sg_dma_address(prm->sg)),
-		      (long long unsigned int)pci_dma_lo32(sg_dma_address(prm->sg)),
-		      (int)sg_dma_len(prm->sg));
+		pkt24->u.status0.transfer_length = cpu_to_le32(prm->cmd->bufflen);
 
-		prm->sg = sg_next(prm->sg);
-	}
+		/* Setup packet address segment pointer */
+		dword_ptr = pkt24->u.status0.dseg_0_address;
 
-	qla_tgt_load_cont_data_segments(prm, vha);
-}
+		/* Set total data segment count */
+		if (prm->seg_cnt)
+			pkt24->dseg_count = cpu_to_le16(prm->seg_cnt);
+	} else {
+		ctio_to_2xxx_entry_t *pkt2x = (ctio_to_2xxx_entry_t *)prm->pkt;
 
-/*
- * ha->hardware_lock supposed to be held on entry. We have already made sure
- * that there is sufficient amount of request entries to not drop it.
- */
-static void qla_tgt_24xx_load_data_segments(struct qla_tgt_prm *prm,
-	struct scsi_qla_host *vha)
-{
-	int cnt;
-	uint32_t *dword_ptr;
-	int enable_64bit_addressing = prm->tgt->tgt_enable_64bit_addr;
-	ctio7_to_24xx_entry_t *pkt = (ctio7_to_24xx_entry_t *)prm->pkt;
+		ql_dbg(ql_dbg_tgt_pkt, vha, 0xe204,
+			"iocb->scsi_status=%x, iocb->flags=%x\n",
+			le16_to_cpu(pkt2x->scsi_status), le16_to_cpu(pkt2x->flags));
 
-	ql_dbg(ql_dbg_tgt, vha, 0xe00f, "iocb->scsi_status=%x, iocb->flags=%x\n",
-		le16_to_cpu(pkt->u.status0.scsi_status),
-		le16_to_cpu(pkt->u.status0.flags));
+		pkt2x->transfer_length = cpu_to_le32(prm->cmd->bufflen);
 
-	pkt->u.status0.transfer_length = cpu_to_le32(prm->cmd->bufflen);
+		/* Setup packet address segment pointer */
+		dword_ptr = &pkt2x->dseg_0_address;
 
-	/* Setup packet address segment pointer */
-	dword_ptr = pkt->u.status0.dseg_0_address;
+		/* Set total data segment count */
+		if (prm->seg_cnt)
+			pkt2x->dseg_count = cpu_to_le16(prm->seg_cnt);
+	}
 
 	if (prm->seg_cnt == 0) {
 		/* No data transfer */
@@ -2058,11 +2026,9 @@ static void qla_tgt_24xx_load_data_segments(struct qla_tgt_prm *prm,
 		return;
 	}
 
-	/* Set total data segment count */
-	pkt->dseg_count = cpu_to_le16(prm->seg_cnt);
-
 	/* If scatter gather */
 	ql_dbg(ql_dbg_tgt_sgl, vha, 0xe303, "%s", "Building S/G data segments...");
+
 	/* Load command entry data segments */
 	for (cnt = 0;
 	     (cnt < prm->tgt->datasegs_per_cmd) && prm->seg_cnt;
@@ -2276,7 +2242,7 @@ static int __qla_tgt_2xxx_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type,
 		pkt->flags |= __constant_cpu_to_le16(OF_FAST_POST | OF_DATA_IN);
 		pkt->flags |= __constant_cpu_to_le16(OF_INC_RC);
 
-		qla_tgt_2xxx_load_data_segments(&prm, vha);
+		qla_tgt_load_data_segments(&prm, vha);
 
 		if (prm.add_status_pkt == 0) {
 			if (xmit_type & QLA_TGT_XMIT_STATUS) {
@@ -2534,7 +2500,7 @@ static int __qla_tgt_24xx_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type,
 		pkt->u.status0.flags |= __constant_cpu_to_le16(CTIO7_FLAGS_DATA_IN |
 				CTIO7_FLAGS_STATUS_MODE_0);
 
-		qla_tgt_24xx_load_data_segments(&prm, vha);
+		qla_tgt_load_data_segments(&prm, vha);
 
 		if (prm.add_status_pkt == 0) {
 			if (xmit_type & QLA_TGT_XMIT_STATUS) {
@@ -2639,13 +2605,13 @@ int qla_tgt_rdy_to_xfer(struct qla_tgt_cmd *cmd)
 		pkt = (ctio7_to_24xx_entry_t *)prm.pkt;
 		pkt->u.status0.flags |= __constant_cpu_to_le16(CTIO7_FLAGS_DATA_OUT |
 				CTIO7_FLAGS_STATUS_MODE_0);
-		qla_tgt_24xx_load_data_segments(&prm, vha);
+		qla_tgt_load_data_segments(&prm, vha);
 	} else {
 		ctio_to_2xxx_entry_t *pkt;
 		qla_tgt_2xxx_build_ctio_pkt(&prm, vha);
 		pkt = (ctio_to_2xxx_entry_t *)prm.pkt;
 		pkt->flags = __constant_cpu_to_le16(OF_FAST_POST | OF_DATA_OUT);
-		qla_tgt_2xxx_load_data_segments(&prm, vha);
+		qla_tgt_load_data_segments(&prm, vha);
 	}
 
 	cmd->state = QLA_TGT_STATE_NEED_DATA;
-- 
1.7.7

--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux