@ -212,13 +212,23 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
wq - > db = rdev - > lldi . db_reg ;
wq - > gts = rdev - > lldi . gts_reg ;
if ( user ) {
wq - > sq . udb = ( u64 ) pci_resource_start ( rdev - > lldi . pdev , 2 ) +
( wq - > sq . qid < < rdev - > qpshift ) ;
wq - > sq . udb & = PAGE_MASK ;
wq - > rq . udb = ( u64 ) pci_resource_start ( rdev - > lldi . pdev , 2 ) +
( wq - > rq . qid < < rdev - > qpshift ) ;
wq - > rq . udb & = PAGE_MASK ;
if ( user | | is_t5 ( rdev - > lldi . adapter_type ) ) {
u32 off ;
off = ( wq - > sq . qid < < rdev - > qpshift ) & PAGE_MASK ;
if ( user ) {
wq - > sq . udb = ( u64 __iomem * ) ( rdev - > bar2_pa + off ) ;
} else {
off + = 128 * ( wq - > sq . qid & rdev - > qpmask ) + 8 ;
wq - > sq . udb = ( u64 __iomem * ) ( rdev - > bar2_kva + off ) ;
}
off = ( wq - > rq . qid < < rdev - > qpshift ) & PAGE_MASK ;
if ( user ) {
wq - > rq . udb = ( u64 __iomem * ) ( rdev - > bar2_pa + off ) ;
} else {
off + = 128 * ( wq - > rq . qid & rdev - > qpmask ) + 8 ;
wq - > rq . udb = ( u64 __iomem * ) ( rdev - > bar2_kva + off ) ;
}
}
wq - > rdev = rdev ;
wq - > rq . msn = 1 ;
@ -299,9 +309,10 @@ static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq,
if ( ret )
goto free_dma ;
PDBG ( " %s sqid 0x%x rqid 0x%x kdb 0x%p squdb 0x%ll x rqudb 0x%l lx \n " ,
PDBG ( " %s sqid 0x%x rqid 0x%x kdb 0x%p squdb 0x%lx rqudb 0x%lx \n " ,
__func__ , wq - > sq . qid , wq - > rq . qid , wq - > db ,
( unsigned long long ) wq - > sq . udb , ( unsigned long long ) wq - > rq . udb ) ;
( __force unsigned long ) wq - > sq . udb ,
( __force unsigned long ) wq - > rq . udb ) ;
return 0 ;
free_dma :
@ -650,9 +661,10 @@ static int ring_kernel_sq_db(struct c4iw_qp *qhp, u16 inc)
spin_lock_irqsave ( & qhp - > rhp - > lock , flags ) ;
spin_lock ( & qhp - > lock ) ;
if ( qhp - > rhp - > db_state = = NORMAL ) {
t4_ring_sq_db ( & qhp - > wq , inc ) ;
} else {
if ( qhp - > rhp - > db_state = = NORMAL )
t4_ring_sq_db ( & qhp - > wq , inc ,
is_t5 ( qhp - > rhp - > rdev . lldi . adapter_type ) , NULL ) ;
else {
add_to_fc_list ( & qhp - > rhp - > db_fc_list , & qhp - > db_fc_entry ) ;
qhp - > wq . sq . wq_pidx_inc + = inc ;
}
@ -667,9 +679,10 @@ static int ring_kernel_rq_db(struct c4iw_qp *qhp, u16 inc)
spin_lock_irqsave ( & qhp - > rhp - > lock , flags ) ;
spin_lock ( & qhp - > lock ) ;
if ( qhp - > rhp - > db_state = = NORMAL ) {
t4_ring_rq_db ( & qhp - > wq , inc ) ;
} else {
if ( qhp - > rhp - > db_state = = NORMAL )
t4_ring_rq_db ( & qhp - > wq , inc ,
is_t5 ( qhp - > rhp - > rdev . lldi . adapter_type ) , NULL ) ;
else {
add_to_fc_list ( & qhp - > rhp - > db_fc_list , & qhp - > db_fc_entry ) ;
qhp - > wq . rq . wq_pidx_inc + = inc ;
}
@ -686,7 +699,7 @@ int c4iw_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
enum fw_wr_opcodes fw_opcode = 0 ;
enum fw_ri_wr_flags fw_flags ;
struct c4iw_qp * qhp ;
union t4_wr * wqe ;
union t4_wr * wqe = NULL ;
u32 num_wrs ;
struct t4_swsqe * swsqe ;
unsigned long flag ;
@ -792,7 +805,8 @@ int c4iw_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
idx + = DIV_ROUND_UP ( len16 * 16 , T4_EQ_ENTRY_SIZE ) ;
}
if ( ! qhp - > rhp - > rdev . status_page - > db_off ) {
t4_ring_sq_db ( & qhp - > wq , idx ) ;
t4_ring_sq_db ( & qhp - > wq , idx ,
is_t5 ( qhp - > rhp - > rdev . lldi . adapter_type ) , wqe ) ;
spin_unlock_irqrestore ( & qhp - > lock , flag ) ;
} else {
spin_unlock_irqrestore ( & qhp - > lock , flag ) ;
@ -806,7 +820,7 @@ int c4iw_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
{
int err = 0 ;
struct c4iw_qp * qhp ;
union t4_recv_wr * wqe ;
union t4_recv_wr * wqe = NULL ;
u32 num_wrs ;
u8 len16 = 0 ;
unsigned long flag ;
@ -858,7 +872,8 @@ int c4iw_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
num_wrs - - ;
}
if ( ! qhp - > rhp - > rdev . status_page - > db_off ) {
t4_ring_rq_db ( & qhp - > wq , idx ) ;
t4_ring_rq_db ( & qhp - > wq , idx ,
is_t5 ( qhp - > rhp - > rdev . lldi . adapter_type ) , wqe ) ;
spin_unlock_irqrestore ( & qhp - > lock , flag ) ;
} else {
spin_unlock_irqrestore ( & qhp - > lock , flag ) ;
@ -1677,11 +1692,11 @@ struct ib_qp *c4iw_create_qp(struct ib_pd *pd, struct ib_qp_init_attr *attrs,
mm2 - > len = PAGE_ALIGN ( qhp - > wq . rq . memsize ) ;
insert_mmap ( ucontext , mm2 ) ;
mm3 - > key = uresp . sq_db_gts_key ;
mm3 - > addr = qhp - > wq . sq . udb ;
mm3 - > addr = ( __force unsigned long ) qhp - > wq . sq . udb ;
mm3 - > len = PAGE_SIZE ;
insert_mmap ( ucontext , mm3 ) ;
mm4 - > key = uresp . rq_db_gts_key ;
mm4 - > addr = qhp - > wq . rq . udb ;
mm4 - > addr = ( __force unsigned long ) qhp - > wq . rq . udb ;
mm4 - > len = PAGE_SIZE ;
insert_mmap ( ucontext , mm4 ) ;
if ( mm5 ) {