Lines Matching refs:qp
662 struct ocrdma_qp *qp) in ocrdma_process_qpcat_error() argument
667 if (qp == NULL) in ocrdma_process_qpcat_error()
669 ocrdma_qp_state_change(qp, new_ib_qps, &old_ib_qps); in ocrdma_process_qpcat_error()
675 struct ocrdma_qp *qp = NULL; in ocrdma_dispatch_ibevent() local
694 qp = dev->qp_tbl[qpid]; in ocrdma_dispatch_ibevent()
695 if (qp == NULL) { in ocrdma_dispatch_ibevent()
730 ib_evt.element.qp = &qp->ibqp; in ocrdma_dispatch_ibevent()
732 ocrdma_process_qpcat_error(dev, qp); in ocrdma_dispatch_ibevent()
735 ib_evt.element.qp = &qp->ibqp; in ocrdma_dispatch_ibevent()
739 ib_evt.element.qp = &qp->ibqp; in ocrdma_dispatch_ibevent()
743 ib_evt.element.qp = &qp->ibqp; in ocrdma_dispatch_ibevent()
753 ib_evt.element.srq = &qp->srq->ibsrq; in ocrdma_dispatch_ibevent()
759 ib_evt.element.srq = &qp->srq->ibsrq; in ocrdma_dispatch_ibevent()
765 ib_evt.element.qp = &qp->ibqp; in ocrdma_dispatch_ibevent()
781 if (qp->ibqp.event_handler) in ocrdma_dispatch_ibevent()
782 qp->ibqp.event_handler(&ib_evt, qp->ibqp.qp_context); in ocrdma_dispatch_ibevent()
787 if (qp->srq->ibsrq.event_handler) in ocrdma_dispatch_ibevent()
788 qp->srq->ibsrq.event_handler(&ib_evt, in ocrdma_dispatch_ibevent()
789 qp->srq->ibsrq. in ocrdma_dispatch_ibevent()
902 struct ocrdma_qp *qp; in _ocrdma_qp_buddy_cq_handler() local
909 qp = list_entry(cur, struct ocrdma_qp, sq_entry); in _ocrdma_qp_buddy_cq_handler()
911 qp = list_entry(cur, struct ocrdma_qp, rq_entry); in _ocrdma_qp_buddy_cq_handler()
913 if (qp->srq) in _ocrdma_qp_buddy_cq_handler()
918 if (qp->sq_cq == qp->rq_cq) in _ocrdma_qp_buddy_cq_handler()
923 if (qp->sq_cq == cq) in _ocrdma_qp_buddy_cq_handler()
924 bcq = qp->rq_cq; in _ocrdma_qp_buddy_cq_handler()
926 bcq = qp->sq_cq; in _ocrdma_qp_buddy_cq_handler()
2085 bool ocrdma_is_qp_in_sq_flushlist(struct ocrdma_cq *cq, struct ocrdma_qp *qp) in ocrdma_is_qp_in_sq_flushlist() argument
2090 if (qp == tmp) { in ocrdma_is_qp_in_sq_flushlist()
2098 bool ocrdma_is_qp_in_rq_flushlist(struct ocrdma_cq *cq, struct ocrdma_qp *qp) in ocrdma_is_qp_in_rq_flushlist() argument
2103 if (qp == tmp) { in ocrdma_is_qp_in_rq_flushlist()
2111 void ocrdma_flush_qp(struct ocrdma_qp *qp) in ocrdma_flush_qp() argument
2115 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device); in ocrdma_flush_qp()
2118 found = ocrdma_is_qp_in_sq_flushlist(qp->sq_cq, qp); in ocrdma_flush_qp()
2120 list_add_tail(&qp->sq_entry, &qp->sq_cq->sq_head); in ocrdma_flush_qp()
2121 if (!qp->srq) { in ocrdma_flush_qp()
2122 found = ocrdma_is_qp_in_rq_flushlist(qp->rq_cq, qp); in ocrdma_flush_qp()
2124 list_add_tail(&qp->rq_entry, &qp->rq_cq->rq_head); in ocrdma_flush_qp()
2129 static void ocrdma_init_hwq_ptr(struct ocrdma_qp *qp) in ocrdma_init_hwq_ptr() argument
2131 qp->sq.head = 0; in ocrdma_init_hwq_ptr()
2132 qp->sq.tail = 0; in ocrdma_init_hwq_ptr()
2133 qp->rq.head = 0; in ocrdma_init_hwq_ptr()
2134 qp->rq.tail = 0; in ocrdma_init_hwq_ptr()
2137 int ocrdma_qp_state_change(struct ocrdma_qp *qp, enum ib_qp_state new_ib_state, in ocrdma_qp_state_change() argument
2146 spin_lock_irqsave(&qp->q_lock, flags); in ocrdma_qp_state_change()
2149 *old_ib_state = get_ibqp_state(qp->state); in ocrdma_qp_state_change()
2150 if (new_state == qp->state) { in ocrdma_qp_state_change()
2151 spin_unlock_irqrestore(&qp->q_lock, flags); in ocrdma_qp_state_change()
2157 ocrdma_init_hwq_ptr(qp); in ocrdma_qp_state_change()
2158 ocrdma_del_flush_qp(qp); in ocrdma_qp_state_change()
2160 ocrdma_flush_qp(qp); in ocrdma_qp_state_change()
2163 qp->state = new_state; in ocrdma_qp_state_change()
2165 spin_unlock_irqrestore(&qp->q_lock, flags); in ocrdma_qp_state_change()
2169 static u32 ocrdma_set_create_qp_mbx_access_flags(struct ocrdma_qp *qp) in ocrdma_set_create_qp_mbx_access_flags() argument
2172 if (qp->cap_flags & OCRDMA_QP_INB_RD) in ocrdma_set_create_qp_mbx_access_flags()
2174 if (qp->cap_flags & OCRDMA_QP_INB_WR) in ocrdma_set_create_qp_mbx_access_flags()
2176 if (qp->cap_flags & OCRDMA_QP_MW_BIND) in ocrdma_set_create_qp_mbx_access_flags()
2178 if (qp->cap_flags & OCRDMA_QP_LKEY0) in ocrdma_set_create_qp_mbx_access_flags()
2180 if (qp->cap_flags & OCRDMA_QP_FAST_REG) in ocrdma_set_create_qp_mbx_access_flags()
2187 struct ocrdma_qp *qp) in ocrdma_set_create_qp_sq_cmd() argument
2192 struct ocrdma_pd *pd = qp->pd; in ocrdma_set_create_qp_sq_cmd()
2209 qp->sq.max_cnt = max_wqe_allocated; in ocrdma_set_create_qp_sq_cmd()
2212 qp->sq.va = dma_alloc_coherent(&pdev->dev, len, &pa, GFP_KERNEL); in ocrdma_set_create_qp_sq_cmd()
2213 if (!qp->sq.va) in ocrdma_set_create_qp_sq_cmd()
2215 memset(qp->sq.va, 0, len); in ocrdma_set_create_qp_sq_cmd()
2216 qp->sq.len = len; in ocrdma_set_create_qp_sq_cmd()
2217 qp->sq.pa = pa; in ocrdma_set_create_qp_sq_cmd()
2218 qp->sq.entry_size = dev->attr.wqe_size; in ocrdma_set_create_qp_sq_cmd()
2232 cmd->max_wqe_rqe |= (ilog2(qp->sq.max_cnt) << in ocrdma_set_create_qp_sq_cmd()
2243 struct ocrdma_qp *qp) in ocrdma_set_create_qp_rq_cmd() argument
2248 struct ocrdma_pd *pd = qp->pd; in ocrdma_set_create_qp_rq_cmd()
2260 qp->rq.max_cnt = max_rqe_allocated; in ocrdma_set_create_qp_rq_cmd()
2263 qp->rq.va = dma_alloc_coherent(&pdev->dev, len, &pa, GFP_KERNEL); in ocrdma_set_create_qp_rq_cmd()
2264 if (!qp->rq.va) in ocrdma_set_create_qp_rq_cmd()
2266 memset(qp->rq.va, 0, len); in ocrdma_set_create_qp_rq_cmd()
2267 qp->rq.pa = pa; in ocrdma_set_create_qp_rq_cmd()
2268 qp->rq.len = len; in ocrdma_set_create_qp_rq_cmd()
2269 qp->rq.entry_size = dev->attr.rqe_size; in ocrdma_set_create_qp_rq_cmd()
2280 cmd->max_wqe_rqe |= (ilog2(qp->rq.max_cnt) << in ocrdma_set_create_qp_rq_cmd()
2291 struct ocrdma_qp *qp, in ocrdma_set_create_qp_dpp_cmd() argument
2295 qp->dpp_enabled = true; in ocrdma_set_create_qp_dpp_cmd()
2306 struct ocrdma_qp *qp) in ocrdma_set_create_qp_ird_cmd() argument
2308 struct ocrdma_pd *pd = qp->pd; in ocrdma_set_create_qp_ird_cmd()
2320 qp->ird_q_va = dma_alloc_coherent(&pdev->dev, ird_q_len, in ocrdma_set_create_qp_ird_cmd()
2322 if (!qp->ird_q_va) in ocrdma_set_create_qp_ird_cmd()
2324 memset(qp->ird_q_va, 0, ird_q_len); in ocrdma_set_create_qp_ird_cmd()
2328 rqe = (struct ocrdma_hdr_wqe *)(qp->ird_q_va + in ocrdma_set_create_qp_ird_cmd()
2340 struct ocrdma_qp *qp, in ocrdma_get_create_qp_rsp() argument
2345 qp->id = rsp->qp_id & OCRDMA_CREATE_QP_RSP_QP_ID_MASK; in ocrdma_get_create_qp_rsp()
2346 qp->rq.dbid = rsp->sq_rq_id & OCRDMA_CREATE_QP_RSP_RQ_ID_MASK; in ocrdma_get_create_qp_rsp()
2347 qp->sq.dbid = rsp->sq_rq_id >> OCRDMA_CREATE_QP_RSP_SQ_ID_SHIFT; in ocrdma_get_create_qp_rsp()
2348 qp->max_ird = rsp->max_ord_ird & OCRDMA_CREATE_QP_RSP_MAX_IRD_MASK; in ocrdma_get_create_qp_rsp()
2349 qp->max_ord = (rsp->max_ord_ird >> OCRDMA_CREATE_QP_RSP_MAX_ORD_SHIFT); in ocrdma_get_create_qp_rsp()
2350 qp->dpp_enabled = false; in ocrdma_get_create_qp_rsp()
2352 qp->dpp_enabled = true; in ocrdma_get_create_qp_rsp()
2365 qp->sq.max_cnt = max_wqe_allocated; in ocrdma_get_create_qp_rsp()
2366 qp->sq.max_wqe_idx = max_wqe_allocated - 1; in ocrdma_get_create_qp_rsp()
2369 qp->rq.max_cnt = max_rqe_allocated; in ocrdma_get_create_qp_rsp()
2370 qp->rq.max_wqe_idx = max_rqe_allocated - 1; in ocrdma_get_create_qp_rsp()
2374 int ocrdma_mbx_create_qp(struct ocrdma_qp *qp, struct ib_qp_init_attr *attrs, in ocrdma_mbx_create_qp() argument
2380 struct ocrdma_pd *pd = qp->pd; in ocrdma_mbx_create_qp()
2407 status = ocrdma_set_create_qp_sq_cmd(cmd, attrs, qp); in ocrdma_mbx_create_qp()
2415 qp->srq = srq; in ocrdma_mbx_create_qp()
2417 status = ocrdma_set_create_qp_rq_cmd(cmd, attrs, qp); in ocrdma_mbx_create_qp()
2422 status = ocrdma_set_create_qp_ird_cmd(cmd, qp); in ocrdma_mbx_create_qp()
2429 flags = ocrdma_set_create_qp_mbx_access_flags(qp); in ocrdma_mbx_create_qp()
2441 qp->sq_cq = cq; in ocrdma_mbx_create_qp()
2445 qp->rq_cq = cq; in ocrdma_mbx_create_qp()
2449 ocrdma_set_create_qp_dpp_cmd(cmd, pd, qp, enable_dpp_cq, in ocrdma_mbx_create_qp()
2457 ocrdma_get_create_qp_rsp(rsp, qp, attrs, dpp_offset, dpp_credit_lmt); in ocrdma_mbx_create_qp()
2458 qp->state = OCRDMA_QPS_RST; in ocrdma_mbx_create_qp()
2462 if (qp->rq.va) in ocrdma_mbx_create_qp()
2463 dma_free_coherent(&pdev->dev, qp->rq.len, qp->rq.va, qp->rq.pa); in ocrdma_mbx_create_qp()
2466 dma_free_coherent(&pdev->dev, qp->sq.len, qp->sq.va, qp->sq.pa); in ocrdma_mbx_create_qp()
2473 int ocrdma_mbx_query_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp, in ocrdma_mbx_query_qp() argument
2483 cmd->qp_id = qp->id; in ocrdma_mbx_query_qp()
2494 static int ocrdma_set_av_params(struct ocrdma_qp *qp, in ocrdma_set_av_params() argument
2505 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device); in ocrdma_set_av_params()
2534 qp->sgid_idx = ah_attr->grh.sgid_index; in ocrdma_set_av_params()
2565 static int ocrdma_set_qp_params(struct ocrdma_qp *qp, in ocrdma_set_qp_params() argument
2570 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device); in ocrdma_set_qp_params()
2578 qp->qkey = attrs->qkey; in ocrdma_set_qp_params()
2583 status = ocrdma_set_av_params(qp, cmd, attrs, attr_mask); in ocrdma_set_qp_params()
2586 } else if (qp->qp_type == IB_QPT_GSI || qp->qp_type == IB_QPT_UD) { in ocrdma_set_qp_params()
2656 qp->max_ord = attrs->max_rd_atomic; in ocrdma_set_qp_params()
2664 qp->max_ird = attrs->max_dest_rd_atomic; in ocrdma_set_qp_params()
2667 cmd->params.max_ord_ird = (qp->max_ord << in ocrdma_set_qp_params()
2669 (qp->max_ird & OCRDMA_QP_PARAMS_MAX_IRD_MASK); in ocrdma_set_qp_params()
2674 int ocrdma_mbx_modify_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp, in ocrdma_mbx_modify_qp() argument
2684 cmd->params.id = qp->id; in ocrdma_mbx_modify_qp()
2694 (qp->state << OCRDMA_QP_PARAMS_STATE_SHIFT) & in ocrdma_mbx_modify_qp()
2698 status = ocrdma_set_qp_params(qp, cmd, attrs, attr_mask); in ocrdma_mbx_modify_qp()
2710 int ocrdma_mbx_destroy_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp) in ocrdma_mbx_destroy_qp() argument
2719 cmd->qp_id = qp->id; in ocrdma_mbx_destroy_qp()
2726 if (qp->sq.va) in ocrdma_mbx_destroy_qp()
2727 dma_free_coherent(&pdev->dev, qp->sq.len, qp->sq.va, qp->sq.pa); in ocrdma_mbx_destroy_qp()
2728 if (!qp->srq && qp->rq.va) in ocrdma_mbx_destroy_qp()
2729 dma_free_coherent(&pdev->dev, qp->rq.len, qp->rq.va, qp->rq.pa); in ocrdma_mbx_destroy_qp()
2730 if (qp->dpp_enabled) in ocrdma_mbx_destroy_qp()
2731 qp->pd->num_dpp_qp++; in ocrdma_mbx_destroy_qp()