From 2766023fccf8f3f2ea8fb22f801cc2693de80256 Mon Sep 17 00:00:00 2001 From: Bhanu Prakash Gollapudi Date: Wed, 27 Jul 2011 11:32:12 -0700 Subject: [PATCH] --- yaml --- r: 261724 b: refs/heads/master c: 3c75108fce9be6c72c45e50973b3cbb0fcdb4f19 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/scsi/bnx2fc/bnx2fc_hwi.c | 29 +++++++++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 769edca2590d..1659a1a1b115 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fd08bd622d255252095a7d5b20b8305916c6f64e +refs/heads/master: 3c75108fce9be6c72c45e50973b3cbb0fcdb4f19 diff --git a/trunk/drivers/scsi/bnx2fc/bnx2fc_hwi.c b/trunk/drivers/scsi/bnx2fc/bnx2fc_hwi.c index 357a63d192e2..ec893594a127 100644 --- a/trunk/drivers/scsi/bnx2fc/bnx2fc_hwi.c +++ b/trunk/drivers/scsi/bnx2fc/bnx2fc_hwi.c @@ -1711,18 +1711,33 @@ void bnx2fc_init_task(struct bnx2fc_cmd *io_req, task_type = FCOE_TASK_TYPE_READ; /* Tx only */ + bd_count = bd_tbl->bd_valid; if (task_type == FCOE_TASK_TYPE_WRITE) { - task->txwr_only.sgl_ctx.sgl.mul_sgl.cur_sge_addr.lo = - (u32)bd_tbl->bd_tbl_dma; - task->txwr_only.sgl_ctx.sgl.mul_sgl.cur_sge_addr.hi = - (u32)((u64)bd_tbl->bd_tbl_dma >> 32); - task->txwr_only.sgl_ctx.sgl.mul_sgl.sgl_size = - bd_tbl->bd_valid; + if ((dev_type == TYPE_DISK) && (bd_count == 1)) { + struct fcoe_bd_ctx *fcoe_bd_tbl = bd_tbl->bd_tbl; + + task->txwr_only.sgl_ctx.cached_sge.cur_buf_addr.lo = + fcoe_bd_tbl->buf_addr_lo; + task->txwr_only.sgl_ctx.cached_sge.cur_buf_addr.hi = + fcoe_bd_tbl->buf_addr_hi; + task->txwr_only.sgl_ctx.cached_sge.cur_buf_rem = + fcoe_bd_tbl->buf_len; + + task->txwr_rxrd.const_ctx.init_flags |= 1 << + FCOE_TCE_TX_WR_RX_RD_CONST_CACHED_SGE_SHIFT; + } else { + task->txwr_only.sgl_ctx.sgl.mul_sgl.cur_sge_addr.lo = + (u32)bd_tbl->bd_tbl_dma; + task->txwr_only.sgl_ctx.sgl.mul_sgl.cur_sge_addr.hi = + (u32)((u64)bd_tbl->bd_tbl_dma >> 32); + task->txwr_only.sgl_ctx.sgl.mul_sgl.sgl_size = + bd_tbl->bd_valid; + } } /*Tx Write Rx Read */ /* Init state to NORMAL */ - task->txwr_rxrd.const_ctx.init_flags = task_type << + task->txwr_rxrd.const_ctx.init_flags |= task_type << FCOE_TCE_TX_WR_RX_RD_CONST_TASK_TYPE_SHIFT; if (dev_type == TYPE_TAPE) task->txwr_rxrd.const_ctx.init_flags |=