Lines Matching refs:qp

665 				       struct ocrdma_qp *qp)
670 if (qp == NULL)
672 ocrdma_qp_state_change(qp, new_ib_qps, &old_ib_qps);
678 struct ocrdma_qp *qp = NULL;
691 * Some FW version returns wrong qp or cq ids in CQEs.
697 qp = dev->qp_tbl[qpid];
698 if (qp == NULL) {
733 ib_evt.element.qp = &qp->ibqp;
735 ocrdma_process_qpcat_error(dev, qp);
738 ib_evt.element.qp = &qp->ibqp;
742 ib_evt.element.qp = &qp->ibqp;
746 ib_evt.element.qp = &qp->ibqp;
756 ib_evt.element.srq = &qp->srq->ibsrq;
762 ib_evt.element.srq = &qp->srq->ibsrq;
768 ib_evt.element.qp = &qp->ibqp;
784 if (qp->ibqp.event_handler)
785 qp->ibqp.event_handler(&ib_evt, qp->ibqp.qp_context);
790 if (qp->srq->ibsrq.event_handler)
791 qp->srq->ibsrq.event_handler(&ib_evt,
792 qp->srq->ibsrq.
905 struct ocrdma_qp *qp;
912 qp = list_entry(cur, struct ocrdma_qp, sq_entry);
914 qp = list_entry(cur, struct ocrdma_qp, rq_entry);
916 if (qp->srq)
921 if (qp->sq_cq == qp->rq_cq)
926 if (qp->sq_cq == cq)
927 bcq = qp->rq_cq;
929 bcq = qp->sq_cq;
2078 bool ocrdma_is_qp_in_sq_flushlist(struct ocrdma_cq *cq, struct ocrdma_qp *qp)
2083 if (qp == tmp) {
2091 bool ocrdma_is_qp_in_rq_flushlist(struct ocrdma_cq *cq, struct ocrdma_qp *qp)
2096 if (qp == tmp) {
2104 void ocrdma_flush_qp(struct ocrdma_qp *qp)
2108 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device);
2111 found = ocrdma_is_qp_in_sq_flushlist(qp->sq_cq, qp);
2113 list_add_tail(&qp->sq_entry, &qp->sq_cq->sq_head);
2114 if (!qp->srq) {
2115 found = ocrdma_is_qp_in_rq_flushlist(qp->rq_cq, qp);
2117 list_add_tail(&qp->rq_entry, &qp->rq_cq->rq_head);
2122 static void ocrdma_init_hwq_ptr(struct ocrdma_qp *qp)
2124 qp->sq.head = 0;
2125 qp->sq.tail = 0;
2126 qp->rq.head = 0;
2127 qp->rq.tail = 0;
2130 int ocrdma_qp_state_change(struct ocrdma_qp *qp, enum ib_qp_state new_ib_state,
2138 spin_lock_irqsave(&qp->q_lock, flags);
2141 *old_ib_state = get_ibqp_state(qp->state);
2142 if (new_state == qp->state) {
2143 spin_unlock_irqrestore(&qp->q_lock, flags);
2149 ocrdma_init_hwq_ptr(qp);
2150 ocrdma_del_flush_qp(qp);
2152 ocrdma_flush_qp(qp);
2155 qp->state = new_state;
2157 spin_unlock_irqrestore(&qp->q_lock, flags);
2161 static u32 ocrdma_set_create_qp_mbx_access_flags(struct ocrdma_qp *qp)
2164 if (qp->cap_flags & OCRDMA_QP_INB_RD)
2166 if (qp->cap_flags & OCRDMA_QP_INB_WR)
2168 if (qp->cap_flags & OCRDMA_QP_MW_BIND)
2170 if (qp->cap_flags & OCRDMA_QP_LKEY0)
2172 if (qp->cap_flags & OCRDMA_QP_FAST_REG)
2179 struct ocrdma_qp *qp)
2184 struct ocrdma_pd *pd = qp->pd;
2201 qp->sq.max_cnt = max_wqe_allocated;
2204 qp->sq.va = dma_alloc_coherent(&pdev->dev, len, &pa, GFP_KERNEL);
2205 if (!qp->sq.va)
2207 qp->sq.len = len;
2208 qp->sq.pa = pa;
2209 qp->sq.entry_size = dev->attr.wqe_size;
2223 cmd->max_wqe_rqe |= (ilog2(qp->sq.max_cnt) <<
2234 struct ocrdma_qp *qp)
2239 struct ocrdma_pd *pd = qp->pd;
2251 qp->rq.max_cnt = max_rqe_allocated;
2254 qp->rq.va = dma_alloc_coherent(&pdev->dev, len, &pa, GFP_KERNEL);
2255 if (!qp->rq.va)
2257 qp->rq.pa = pa;
2258 qp->rq.len = len;
2259 qp->rq.entry_size = dev->attr.rqe_size;
2270 cmd->max_wqe_rqe |= (ilog2(qp->rq.max_cnt) <<
2281 struct ocrdma_qp *qp,
2285 qp->dpp_enabled = true;
2296 struct ocrdma_qp *qp)
2298 struct ocrdma_pd *pd = qp->pd;
2310 qp->ird_q_va = dma_alloc_coherent(&pdev->dev, ird_q_len, &pa,
2312 if (!qp->ird_q_va)
2317 rqe = (struct ocrdma_hdr_wqe *)(qp->ird_q_va +
2329 struct ocrdma_qp *qp,
2334 qp->id = rsp->qp_id & OCRDMA_CREATE_QP_RSP_QP_ID_MASK;
2335 qp->rq.dbid = rsp->sq_rq_id & OCRDMA_CREATE_QP_RSP_RQ_ID_MASK;
2336 qp->sq.dbid = rsp->sq_rq_id >> OCRDMA_CREATE_QP_RSP_SQ_ID_SHIFT;
2337 qp->max_ird = rsp->max_ord_ird & OCRDMA_CREATE_QP_RSP_MAX_IRD_MASK;
2338 qp->max_ord = (rsp->max_ord_ird >> OCRDMA_CREATE_QP_RSP_MAX_ORD_SHIFT);
2339 qp->dpp_enabled = false;
2341 qp->dpp_enabled = true;
2354 qp->sq.max_cnt = max_wqe_allocated;
2355 qp->sq.max_wqe_idx = max_wqe_allocated - 1;
2358 qp->rq.max_cnt = max_rqe_allocated;
2359 qp->rq.max_wqe_idx = max_rqe_allocated - 1;
2363 int ocrdma_mbx_create_qp(struct ocrdma_qp *qp, struct ib_qp_init_attr *attrs,
2369 struct ocrdma_pd *pd = qp->pd;
2396 status = ocrdma_set_create_qp_sq_cmd(cmd, attrs, qp);
2404 qp->srq = srq;
2406 status = ocrdma_set_create_qp_rq_cmd(cmd, attrs, qp);
2411 status = ocrdma_set_create_qp_ird_cmd(cmd, qp);
2418 flags = ocrdma_set_create_qp_mbx_access_flags(qp);
2430 qp->sq_cq = cq;
2434 qp->rq_cq = cq;
2438 ocrdma_set_create_qp_dpp_cmd(cmd, pd, qp, enable_dpp_cq,
2446 ocrdma_get_create_qp_rsp(rsp, qp, attrs, dpp_offset, dpp_credit_lmt);
2447 qp->state = OCRDMA_QPS_RST;
2451 if (qp->rq.va)
2452 dma_free_coherent(&pdev->dev, qp->rq.len, qp->rq.va, qp->rq.pa);
2455 dma_free_coherent(&pdev->dev, qp->sq.len, qp->sq.va, qp->sq.pa);
2462 int ocrdma_mbx_query_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp,
2472 cmd->qp_id = qp->id;
2483 static int ocrdma_set_av_params(struct ocrdma_qp *qp,
2497 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device);
2524 qp->sgid_idx = grh->sgid_index;
2569 static int ocrdma_set_qp_params(struct ocrdma_qp *qp,
2574 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device);
2582 qp->qkey = attrs->qkey;
2587 status = ocrdma_set_av_params(qp, cmd, attrs, attr_mask);
2590 } else if (qp->qp_type == IB_QPT_GSI || qp->qp_type == IB_QPT_UD) {
2660 qp->max_ord = attrs->max_rd_atomic;
2668 qp->max_ird = attrs->max_dest_rd_atomic;
2671 cmd->params.max_ord_ird = (qp->max_ord <<
2673 (qp->max_ird & OCRDMA_QP_PARAMS_MAX_IRD_MASK);
2678 int ocrdma_mbx_modify_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp,
2688 cmd->params.id = qp->id;
2698 (qp->state << OCRDMA_QP_PARAMS_STATE_SHIFT) &
2702 status = ocrdma_set_qp_params(qp, cmd, attrs, attr_mask);
2714 int ocrdma_mbx_destroy_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp)
2723 cmd->qp_id = qp->id;
2730 if (qp->sq.va)
2731 dma_free_coherent(&pdev->dev, qp->sq.len, qp->sq.va, qp->sq.pa);
2732 if (!qp->srq && qp->rq.va)
2733 dma_free_coherent(&pdev->dev, qp->rq.len, qp->rq.va, qp->rq.pa);
2734 if (qp->dpp_enabled)
2735 qp->pd->num_dpp_qp++;