| // SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) |
| /* |
| * Copyright(c) 2018 Intel Corporation. |
| * |
| */ |
| |
| #include "hfi.h" |
| #include "verbs.h" |
| #include "tid_rdma.h" |
| |
| /** |
| * qp_to_rcd - determine the receive context used by a qp |
| * @qp - the qp |
| * |
| * This routine returns the receive context associated |
| * with a a qp's qpn. |
| * |
| * Returns the context. |
| */ |
| static struct hfi1_ctxtdata *qp_to_rcd(struct rvt_dev_info *rdi, |
| struct rvt_qp *qp) |
| { |
| struct hfi1_ibdev *verbs_dev = container_of(rdi, |
| struct hfi1_ibdev, |
| rdi); |
| struct hfi1_devdata *dd = container_of(verbs_dev, |
| struct hfi1_devdata, |
| verbs_dev); |
| unsigned int ctxt; |
| |
| if (qp->ibqp.qp_num == 0) |
| ctxt = 0; |
| else |
| ctxt = ((qp->ibqp.qp_num >> dd->qos_shift) % |
| (dd->n_krcv_queues - 1)) + 1; |
| |
| return dd->rcd[ctxt]; |
| } |
| |
| int hfi1_qp_priv_init(struct rvt_dev_info *rdi, struct rvt_qp *qp, |
| struct ib_qp_init_attr *init_attr) |
| { |
| struct hfi1_qp_priv *qpriv = qp->priv; |
| |
| qpriv->rcd = qp_to_rcd(rdi, qp); |
| |
| return 0; |
| } |