[SCSI] bfa: Introduced generic address len pair to represent DMA memory chunk.
authorKrishna Gudipati <kgudipat@brocade.com>
Mon, 13 Jun 2011 22:39:36 +0000 (15:39 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Wed, 29 Jun 2011 20:24:46 +0000 (15:24 -0500)
- Avoid the use of hardware defined structure bfi_sge_s for DMA
  requests in host.

- Defined a generic address len pair to represent a DMA memory chunk
  (bfi_alen_s).

Signed-off-by: Krishna Gudipati <kgudipat@brocade.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/bfa/bfa_ioc.h
drivers/scsi/bfa/bfa_svc.c
drivers/scsi/bfa/bfi.h
drivers/scsi/bfa/bfi_ms.h

index c85182a..62318d2 100644 (file)
@@ -112,18 +112,6 @@ struct bfa_dma_s {
 #define BFI_SMEM_CB_SIZE       0x200000U       /* ! 2MB for crossbow   */
 #define BFI_SMEM_CT_SIZE       0x280000U       /* ! 2.5MB for catapult */
 
-
-#define bfa_dma_addr_set(dma_addr, pa) \
-               __bfa_dma_addr_set(&dma_addr, (u64)pa)
-
-static inline void
-__bfa_dma_addr_set(union bfi_addr_u *dma_addr, u64 pa)
-{
-       dma_addr->a32.addr_lo = (__be32) pa;
-       dma_addr->a32.addr_hi = (__be32) (pa >> 32);
-}
-
-
 #define bfa_dma_be_addr_set(dma_addr, pa)      \
                __bfa_dma_be_addr_set(&dma_addr, (u64)pa)
 static inline void
@@ -133,6 +121,16 @@ __bfa_dma_be_addr_set(union bfi_addr_u *dma_addr, u64 pa)
        dma_addr->a32.addr_hi = cpu_to_be32(pa >> 32);
 }
 
+#define bfa_alen_set(__alen, __len, __pa)      \
+       __bfa_alen_set(__alen, __len, (u64)__pa)
+
+static inline void
+__bfa_alen_set(struct bfi_alen_s *alen, u32 len, u64 pa)
+{
+       alen->al_len = cpu_to_be32(len);
+       bfa_dma_be_addr_set(alen->al_addr, pa);
+}
+
 struct bfa_ioc_regs_s {
        void __iomem *hfn_mbox_cmd;
        void __iomem *hfn_mbox;
index 16d9a5f..d1674c6 100644 (file)
@@ -749,23 +749,6 @@ hal_fcxp_send_comp(struct bfa_s *bfa, struct bfi_fcxp_send_rsp_s *fcxp_rsp)
        }
 }
 
-static void
-hal_fcxp_set_local_sges(struct bfi_sge_s *sge, u32 reqlen, u64 req_pa)
-{
-       union bfi_addr_u      sga_zero = { {0} };
-
-       sge->sg_len = reqlen;
-       sge->flags = BFI_SGE_DATA_LAST;
-       bfa_dma_addr_set(sge[0].sga, req_pa);
-       bfa_sge_to_be(sge);
-       sge++;
-
-       sge->sga = sga_zero;
-       sge->sg_len = reqlen;
-       sge->flags = BFI_SGE_PGDLEN;
-       bfa_sge_to_be(sge);
-}
-
 static void
 hal_fcxp_tx_plog(struct bfa_s *bfa, u32 reqlen, struct bfa_fcxp_s *fcxp,
                 struct fchs_s *fchs)
@@ -873,18 +856,16 @@ bfa_fcxp_queue(struct bfa_fcxp_s *fcxp, struct bfi_fcxp_send_req_s *send_req)
         * setup req sgles
         */
        if (fcxp->use_ireqbuf == 1) {
-               hal_fcxp_set_local_sges(send_req->req_sge, reqi->req_tot_len,
+               bfa_alen_set(&send_req->req_alen, reqi->req_tot_len,
                                        BFA_FCXP_REQ_PLD_PA(fcxp));
        } else {
                if (fcxp->nreq_sgles > 0) {
                        WARN_ON(fcxp->nreq_sgles != 1);
-                       hal_fcxp_set_local_sges(send_req->req_sge,
-                                               reqi->req_tot_len,
-                                               fcxp->req_sga_cbfn(fcxp->caller,
-                                                                  0));
+                       bfa_alen_set(&send_req->req_alen, reqi->req_tot_len,
+                               fcxp->req_sga_cbfn(fcxp->caller, 0));
                } else {
                        WARN_ON(reqi->req_tot_len != 0);
-                       hal_fcxp_set_local_sges(send_req->rsp_sge, 0, 0);
+                       bfa_alen_set(&send_req->rsp_alen, 0, 0);
                }
        }
 
@@ -894,19 +875,17 @@ bfa_fcxp_queue(struct bfa_fcxp_s *fcxp, struct bfi_fcxp_send_req_s *send_req)
        if (fcxp->use_irspbuf == 1) {
                WARN_ON(rspi->rsp_maxlen > BFA_FCXP_MAX_LBUF_SZ);
 
-               hal_fcxp_set_local_sges(send_req->rsp_sge, rspi->rsp_maxlen,
+               bfa_alen_set(&send_req->rsp_alen, rspi->rsp_maxlen,
                                        BFA_FCXP_RSP_PLD_PA(fcxp));
-
        } else {
                if (fcxp->nrsp_sgles > 0) {
                        WARN_ON(fcxp->nrsp_sgles != 1);
-                       hal_fcxp_set_local_sges(send_req->rsp_sge,
-                                               rspi->rsp_maxlen,
-                                               fcxp->rsp_sga_cbfn(fcxp->caller,
-                                                                  0));
+                       bfa_alen_set(&send_req->rsp_alen, rspi->rsp_maxlen,
+                               fcxp->rsp_sga_cbfn(fcxp->caller, 0));
+
                } else {
                        WARN_ON(rspi->rsp_maxlen != 0);
-                       hal_fcxp_set_local_sges(send_req->rsp_sge, 0, 0);
+                       bfa_alen_set(&send_req->rsp_alen, 0, 0);
                }
        }
 
@@ -4801,8 +4780,6 @@ static void
 claim_uf_post_msgs(struct bfa_uf_mod_s *ufm, struct bfa_meminfo_s *mi)
 {
        struct bfi_uf_buf_post_s *uf_bp_msg;
-       struct bfi_sge_s      *sge;
-       union bfi_addr_u      sga_zero = { {0} };
        u16 i;
        u16 buf_len;
 
@@ -4818,17 +4795,7 @@ claim_uf_post_msgs(struct bfa_uf_mod_s *ufm, struct bfa_meminfo_s *mi)
                uf_bp_msg->buf_len = cpu_to_be16(buf_len);
                bfi_h2i_set(uf_bp_msg->mh, BFI_MC_UF, BFI_UF_H2I_BUF_POST,
                            bfa_lpuid(ufm->bfa));
-
-               sge = uf_bp_msg->sge;
-               sge[0].sg_len = buf_len;
-               sge[0].flags = BFI_SGE_DATA_LAST;
-               bfa_dma_addr_set(sge[0].sga, ufm_pbs_pa(ufm, i));
-               bfa_sge_to_be(sge);
-
-               sge[1].sg_len = buf_len;
-               sge[1].flags = BFI_SGE_PGDLEN;
-               sge[1].sga = sga_zero;
-               bfa_sge_to_be(&sge[1]);
+               bfa_alen_set(&uf_bp_msg->alen, buf_len, ufm_pbs_pa(ufm, i));
        }
 
        /*
index 72b69a0..6ef1ba5 100644 (file)
@@ -101,7 +101,7 @@ union bfi_addr_u {
 };
 
 /*
- * Scatter Gather Element
+ * Scatter Gather Element used for fast-path IO requests
  */
 struct bfi_sge_s {
 #ifdef __BIG_ENDIAN
@@ -116,6 +116,14 @@ struct bfi_sge_s {
        union bfi_addr_u sga;
 };
 
+/**
+ * Generic DMA addr-len pair.
+ */
+struct bfi_alen_s {
+       union bfi_addr_u        al_addr;        /* DMA addr of buffer   */
+       u32                     al_len;         /* length of buffer     */
+};
+
 /*
  * Scatter Gather Page
  */
index 19e888a..a29d905 100644 (file)
@@ -297,8 +297,8 @@ struct bfi_fcxp_send_req_s {
        struct fchs_s   fchs;   /*  request FC header structure    */
        __be32  req_len;        /*  request payload length          */
        __be32  rsp_maxlen;     /*  max response length expected   */
-       struct bfi_sge_s   req_sge[BFA_FCXP_MAX_SGES];  /*  request buf    */
-       struct bfi_sge_s   rsp_sge[BFA_FCXP_MAX_SGES];  /*  response buf   */
+       struct bfi_alen_s req_alen;     /* request buffer       */
+       struct bfi_alen_s rsp_alen;     /* response buffer      */
 };
 
 /*
@@ -328,7 +328,7 @@ struct bfi_uf_buf_post_s {
        struct bfi_mhdr_s  mh;          /*  Common msg header           */
        u16     buf_tag;        /*  buffer tag                  */
        __be16  buf_len;        /*  total buffer length */
-       struct bfi_sge_s   sge[BFA_UF_MAX_SGES]; /*  buffer DMA SGEs    */
+       struct bfi_alen_s alen; /* buffer address/len pair      */
 };
 
 struct bfi_uf_frm_rcvd_s {