mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-03 09:34:42 +00:00
[SCSI] bfa: Introduced generic address len pair to represent DMA memory chunk.
- 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>
This commit is contained in:
parent
4d08e731bd
commit
85ce928dbb
@ -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;
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user