Lines Matching refs:qp

644 				       struct ocrdma_qp *qp)  in ocrdma_process_qpcat_error()  argument
649 if (qp == NULL) in ocrdma_process_qpcat_error()
651 ocrdma_qp_state_change(qp, new_ib_qps, &old_ib_qps); in ocrdma_process_qpcat_error()
657 struct ocrdma_qp *qp = NULL; in ocrdma_dispatch_ibevent() local
668 qp = dev->qp_tbl[cqe->qpvalid_qpid & OCRDMA_AE_MCQE_QPID_MASK]; in ocrdma_dispatch_ibevent()
690 ib_evt.element.qp = &qp->ibqp; in ocrdma_dispatch_ibevent()
692 ocrdma_process_qpcat_error(dev, qp); in ocrdma_dispatch_ibevent()
695 ib_evt.element.qp = &qp->ibqp; in ocrdma_dispatch_ibevent()
699 ib_evt.element.qp = &qp->ibqp; in ocrdma_dispatch_ibevent()
703 ib_evt.element.qp = &qp->ibqp; in ocrdma_dispatch_ibevent()
713 ib_evt.element.srq = &qp->srq->ibsrq; in ocrdma_dispatch_ibevent()
719 ib_evt.element.srq = &qp->srq->ibsrq; in ocrdma_dispatch_ibevent()
725 ib_evt.element.qp = &qp->ibqp; in ocrdma_dispatch_ibevent()
741 if (qp->ibqp.event_handler) in ocrdma_dispatch_ibevent()
742 qp->ibqp.event_handler(&ib_evt, qp->ibqp.qp_context); in ocrdma_dispatch_ibevent()
747 if (qp->srq->ibsrq.event_handler) in ocrdma_dispatch_ibevent()
748 qp->srq->ibsrq.event_handler(&ib_evt, in ocrdma_dispatch_ibevent()
749 qp->srq->ibsrq. in ocrdma_dispatch_ibevent()
840 struct ocrdma_qp *qp; in _ocrdma_qp_buddy_cq_handler() local
847 qp = list_entry(cur, struct ocrdma_qp, sq_entry); in _ocrdma_qp_buddy_cq_handler()
849 qp = list_entry(cur, struct ocrdma_qp, rq_entry); in _ocrdma_qp_buddy_cq_handler()
851 if (qp->srq) in _ocrdma_qp_buddy_cq_handler()
856 if (qp->sq_cq == qp->rq_cq) in _ocrdma_qp_buddy_cq_handler()
861 if (qp->sq_cq == cq) in _ocrdma_qp_buddy_cq_handler()
862 bcq = qp->rq_cq; in _ocrdma_qp_buddy_cq_handler()
864 bcq = qp->sq_cq; in _ocrdma_qp_buddy_cq_handler()
2019 bool ocrdma_is_qp_in_sq_flushlist(struct ocrdma_cq *cq, struct ocrdma_qp *qp) in ocrdma_is_qp_in_sq_flushlist() argument
2024 if (qp == tmp) { in ocrdma_is_qp_in_sq_flushlist()
2032 bool ocrdma_is_qp_in_rq_flushlist(struct ocrdma_cq *cq, struct ocrdma_qp *qp) in ocrdma_is_qp_in_rq_flushlist() argument
2037 if (qp == tmp) { in ocrdma_is_qp_in_rq_flushlist()
2045 void ocrdma_flush_qp(struct ocrdma_qp *qp) in ocrdma_flush_qp() argument
2049 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device); in ocrdma_flush_qp()
2052 found = ocrdma_is_qp_in_sq_flushlist(qp->sq_cq, qp); in ocrdma_flush_qp()
2054 list_add_tail(&qp->sq_entry, &qp->sq_cq->sq_head); in ocrdma_flush_qp()
2055 if (!qp->srq) { in ocrdma_flush_qp()
2056 found = ocrdma_is_qp_in_rq_flushlist(qp->rq_cq, qp); in ocrdma_flush_qp()
2058 list_add_tail(&qp->rq_entry, &qp->rq_cq->rq_head); in ocrdma_flush_qp()
2063 static void ocrdma_init_hwq_ptr(struct ocrdma_qp *qp) in ocrdma_init_hwq_ptr() argument
2065 qp->sq.head = 0; in ocrdma_init_hwq_ptr()
2066 qp->sq.tail = 0; in ocrdma_init_hwq_ptr()
2067 qp->rq.head = 0; in ocrdma_init_hwq_ptr()
2068 qp->rq.tail = 0; in ocrdma_init_hwq_ptr()
2071 int ocrdma_qp_state_change(struct ocrdma_qp *qp, enum ib_qp_state new_ib_state, in ocrdma_qp_state_change() argument
2080 spin_lock_irqsave(&qp->q_lock, flags); in ocrdma_qp_state_change()
2083 *old_ib_state = get_ibqp_state(qp->state); in ocrdma_qp_state_change()
2084 if (new_state == qp->state) { in ocrdma_qp_state_change()
2085 spin_unlock_irqrestore(&qp->q_lock, flags); in ocrdma_qp_state_change()
2091 ocrdma_init_hwq_ptr(qp); in ocrdma_qp_state_change()
2092 ocrdma_del_flush_qp(qp); in ocrdma_qp_state_change()
2094 ocrdma_flush_qp(qp); in ocrdma_qp_state_change()
2097 qp->state = new_state; in ocrdma_qp_state_change()
2099 spin_unlock_irqrestore(&qp->q_lock, flags); in ocrdma_qp_state_change()
2103 static u32 ocrdma_set_create_qp_mbx_access_flags(struct ocrdma_qp *qp) in ocrdma_set_create_qp_mbx_access_flags() argument
2106 if (qp->cap_flags & OCRDMA_QP_INB_RD) in ocrdma_set_create_qp_mbx_access_flags()
2108 if (qp->cap_flags & OCRDMA_QP_INB_WR) in ocrdma_set_create_qp_mbx_access_flags()
2110 if (qp->cap_flags & OCRDMA_QP_MW_BIND) in ocrdma_set_create_qp_mbx_access_flags()
2112 if (qp->cap_flags & OCRDMA_QP_LKEY0) in ocrdma_set_create_qp_mbx_access_flags()
2114 if (qp->cap_flags & OCRDMA_QP_FAST_REG) in ocrdma_set_create_qp_mbx_access_flags()
2121 struct ocrdma_qp *qp) in ocrdma_set_create_qp_sq_cmd() argument
2126 struct ocrdma_pd *pd = qp->pd; in ocrdma_set_create_qp_sq_cmd()
2143 qp->sq.max_cnt = max_wqe_allocated; in ocrdma_set_create_qp_sq_cmd()
2146 qp->sq.va = dma_alloc_coherent(&pdev->dev, len, &pa, GFP_KERNEL); in ocrdma_set_create_qp_sq_cmd()
2147 if (!qp->sq.va) in ocrdma_set_create_qp_sq_cmd()
2149 memset(qp->sq.va, 0, len); in ocrdma_set_create_qp_sq_cmd()
2150 qp->sq.len = len; in ocrdma_set_create_qp_sq_cmd()
2151 qp->sq.pa = pa; in ocrdma_set_create_qp_sq_cmd()
2152 qp->sq.entry_size = dev->attr.wqe_size; in ocrdma_set_create_qp_sq_cmd()
2166 cmd->max_wqe_rqe |= (ilog2(qp->sq.max_cnt) << in ocrdma_set_create_qp_sq_cmd()
2177 struct ocrdma_qp *qp) in ocrdma_set_create_qp_rq_cmd() argument
2182 struct ocrdma_pd *pd = qp->pd; in ocrdma_set_create_qp_rq_cmd()
2194 qp->rq.max_cnt = max_rqe_allocated; in ocrdma_set_create_qp_rq_cmd()
2197 qp->rq.va = dma_alloc_coherent(&pdev->dev, len, &pa, GFP_KERNEL); in ocrdma_set_create_qp_rq_cmd()
2198 if (!qp->rq.va) in ocrdma_set_create_qp_rq_cmd()
2200 memset(qp->rq.va, 0, len); in ocrdma_set_create_qp_rq_cmd()
2201 qp->rq.pa = pa; in ocrdma_set_create_qp_rq_cmd()
2202 qp->rq.len = len; in ocrdma_set_create_qp_rq_cmd()
2203 qp->rq.entry_size = dev->attr.rqe_size; in ocrdma_set_create_qp_rq_cmd()
2214 cmd->max_wqe_rqe |= (ilog2(qp->rq.max_cnt) << in ocrdma_set_create_qp_rq_cmd()
2225 struct ocrdma_qp *qp, in ocrdma_set_create_qp_dpp_cmd() argument
2229 qp->dpp_enabled = true; in ocrdma_set_create_qp_dpp_cmd()
2240 struct ocrdma_qp *qp) in ocrdma_set_create_qp_ird_cmd() argument
2242 struct ocrdma_pd *pd = qp->pd; in ocrdma_set_create_qp_ird_cmd()
2254 qp->ird_q_va = dma_alloc_coherent(&pdev->dev, ird_q_len, in ocrdma_set_create_qp_ird_cmd()
2256 if (!qp->ird_q_va) in ocrdma_set_create_qp_ird_cmd()
2258 memset(qp->ird_q_va, 0, ird_q_len); in ocrdma_set_create_qp_ird_cmd()
2262 rqe = (struct ocrdma_hdr_wqe *)(qp->ird_q_va + in ocrdma_set_create_qp_ird_cmd()
2274 struct ocrdma_qp *qp, in ocrdma_get_create_qp_rsp() argument
2279 qp->id = rsp->qp_id & OCRDMA_CREATE_QP_RSP_QP_ID_MASK; in ocrdma_get_create_qp_rsp()
2280 qp->rq.dbid = rsp->sq_rq_id & OCRDMA_CREATE_QP_RSP_RQ_ID_MASK; in ocrdma_get_create_qp_rsp()
2281 qp->sq.dbid = rsp->sq_rq_id >> OCRDMA_CREATE_QP_RSP_SQ_ID_SHIFT; in ocrdma_get_create_qp_rsp()
2282 qp->max_ird = rsp->max_ord_ird & OCRDMA_CREATE_QP_RSP_MAX_IRD_MASK; in ocrdma_get_create_qp_rsp()
2283 qp->max_ord = (rsp->max_ord_ird >> OCRDMA_CREATE_QP_RSP_MAX_ORD_SHIFT); in ocrdma_get_create_qp_rsp()
2284 qp->dpp_enabled = false; in ocrdma_get_create_qp_rsp()
2286 qp->dpp_enabled = true; in ocrdma_get_create_qp_rsp()
2299 qp->sq.max_cnt = max_wqe_allocated; in ocrdma_get_create_qp_rsp()
2300 qp->sq.max_wqe_idx = max_wqe_allocated - 1; in ocrdma_get_create_qp_rsp()
2303 qp->rq.max_cnt = max_rqe_allocated; in ocrdma_get_create_qp_rsp()
2304 qp->rq.max_wqe_idx = max_rqe_allocated - 1; in ocrdma_get_create_qp_rsp()
2308 int ocrdma_mbx_create_qp(struct ocrdma_qp *qp, struct ib_qp_init_attr *attrs, in ocrdma_mbx_create_qp() argument
2314 struct ocrdma_pd *pd = qp->pd; in ocrdma_mbx_create_qp()
2341 status = ocrdma_set_create_qp_sq_cmd(cmd, attrs, qp); in ocrdma_mbx_create_qp()
2349 qp->srq = srq; in ocrdma_mbx_create_qp()
2351 status = ocrdma_set_create_qp_rq_cmd(cmd, attrs, qp); in ocrdma_mbx_create_qp()
2356 status = ocrdma_set_create_qp_ird_cmd(cmd, qp); in ocrdma_mbx_create_qp()
2363 flags = ocrdma_set_create_qp_mbx_access_flags(qp); in ocrdma_mbx_create_qp()
2375 qp->sq_cq = cq; in ocrdma_mbx_create_qp()
2379 qp->rq_cq = cq; in ocrdma_mbx_create_qp()
2383 ocrdma_set_create_qp_dpp_cmd(cmd, pd, qp, enable_dpp_cq, in ocrdma_mbx_create_qp()
2391 ocrdma_get_create_qp_rsp(rsp, qp, attrs, dpp_offset, dpp_credit_lmt); in ocrdma_mbx_create_qp()
2392 qp->state = OCRDMA_QPS_RST; in ocrdma_mbx_create_qp()
2396 if (qp->rq.va) in ocrdma_mbx_create_qp()
2397 dma_free_coherent(&pdev->dev, qp->rq.len, qp->rq.va, qp->rq.pa); in ocrdma_mbx_create_qp()
2400 dma_free_coherent(&pdev->dev, qp->sq.len, qp->sq.va, qp->sq.pa); in ocrdma_mbx_create_qp()
2407 int ocrdma_mbx_query_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp, in ocrdma_mbx_query_qp() argument
2417 cmd->qp_id = qp->id; in ocrdma_mbx_query_qp()
2428 static int ocrdma_set_av_params(struct ocrdma_qp *qp, in ocrdma_set_av_params() argument
2438 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device); in ocrdma_set_av_params()
2463 qp->sgid_idx = ah_attr->grh.sgid_index; in ocrdma_set_av_params()
2495 static int ocrdma_set_qp_params(struct ocrdma_qp *qp, in ocrdma_set_qp_params() argument
2500 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device); in ocrdma_set_qp_params()
2508 qp->qkey = attrs->qkey; in ocrdma_set_qp_params()
2513 status = ocrdma_set_av_params(qp, cmd, attrs, attr_mask); in ocrdma_set_qp_params()
2516 } else if (qp->qp_type == IB_QPT_GSI || qp->qp_type == IB_QPT_UD) { in ocrdma_set_qp_params()
2586 qp->max_ord = attrs->max_rd_atomic; in ocrdma_set_qp_params()
2594 qp->max_ird = attrs->max_dest_rd_atomic; in ocrdma_set_qp_params()
2597 cmd->params.max_ord_ird = (qp->max_ord << in ocrdma_set_qp_params()
2599 (qp->max_ird & OCRDMA_QP_PARAMS_MAX_IRD_MASK); in ocrdma_set_qp_params()
2604 int ocrdma_mbx_modify_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp, in ocrdma_mbx_modify_qp() argument
2614 cmd->params.id = qp->id; in ocrdma_mbx_modify_qp()
2624 (qp->state << OCRDMA_QP_PARAMS_STATE_SHIFT) & in ocrdma_mbx_modify_qp()
2628 status = ocrdma_set_qp_params(qp, cmd, attrs, attr_mask); in ocrdma_mbx_modify_qp()
2640 int ocrdma_mbx_destroy_qp(struct ocrdma_dev *dev, struct ocrdma_qp *qp) in ocrdma_mbx_destroy_qp() argument
2649 cmd->qp_id = qp->id; in ocrdma_mbx_destroy_qp()
2656 if (qp->sq.va) in ocrdma_mbx_destroy_qp()
2657 dma_free_coherent(&pdev->dev, qp->sq.len, qp->sq.va, qp->sq.pa); in ocrdma_mbx_destroy_qp()
2658 if (!qp->srq && qp->rq.va) in ocrdma_mbx_destroy_qp()
2659 dma_free_coherent(&pdev->dev, qp->rq.len, qp->rq.va, qp->rq.pa); in ocrdma_mbx_destroy_qp()
2660 if (qp->dpp_enabled) in ocrdma_mbx_destroy_qp()
2661 qp->pd->num_dpp_qp++; in ocrdma_mbx_destroy_qp()