Lines Matching +refs:dev +refs:id +refs:attrs

70 	struct ocrdma_dev *dev = get_ocrdma_dev(ibdev);  in ocrdma_query_device()  local
76 memcpy(&attr->fw_ver, &dev->attr.fw_ver[0], in ocrdma_query_device()
77 min(sizeof(dev->attr.fw_ver), sizeof(attr->fw_ver))); in ocrdma_query_device()
79 dev->nic_info.mac_addr); in ocrdma_query_device()
80 attr->max_mr_size = dev->attr.max_mr_size; in ocrdma_query_device()
82 attr->vendor_id = dev->nic_info.pdev->vendor; in ocrdma_query_device()
83 attr->vendor_part_id = dev->nic_info.pdev->device; in ocrdma_query_device()
84 attr->hw_ver = dev->asic_id; in ocrdma_query_device()
85 attr->max_qp = dev->attr.max_qp; in ocrdma_query_device()
87 attr->max_qp_wr = dev->attr.max_wqe; in ocrdma_query_device()
95 attr->max_send_sge = dev->attr.max_send_sge; in ocrdma_query_device()
96 attr->max_recv_sge = dev->attr.max_recv_sge; in ocrdma_query_device()
97 attr->max_sge_rd = dev->attr.max_rdma_sge; in ocrdma_query_device()
98 attr->max_cq = dev->attr.max_cq; in ocrdma_query_device()
99 attr->max_cqe = dev->attr.max_cqe; in ocrdma_query_device()
100 attr->max_mr = dev->attr.max_mr; in ocrdma_query_device()
101 attr->max_mw = dev->attr.max_mw; in ocrdma_query_device()
102 attr->max_pd = dev->attr.max_pd; in ocrdma_query_device()
105 min(dev->attr.max_ord_per_qp, dev->attr.max_ird_per_qp); in ocrdma_query_device()
106 attr->max_qp_init_rd_atom = dev->attr.max_ord_per_qp; in ocrdma_query_device()
107 attr->max_srq = dev->attr.max_srq; in ocrdma_query_device()
108 attr->max_srq_sge = dev->attr.max_srq_sge; in ocrdma_query_device()
109 attr->max_srq_wr = dev->attr.max_rqe; in ocrdma_query_device()
110 attr->local_ca_ack_delay = dev->attr.local_ca_ack_delay; in ocrdma_query_device()
111 attr->max_fast_reg_page_list_len = dev->attr.max_pages_per_frmr; in ocrdma_query_device()
116 static inline void get_link_speed_and_width(struct ocrdma_dev *dev, in get_link_speed_and_width() argument
122 status = ocrdma_mbx_get_link_speed(dev, &speed, NULL); in get_link_speed_and_width()
158 struct ocrdma_dev *dev; in ocrdma_query_port() local
162 dev = get_ocrdma_dev(ibdev); in ocrdma_query_port()
163 netdev = dev->nic_info.netdev; in ocrdma_query_port()
186 get_link_speed_and_width(dev, &props->active_speed, in ocrdma_query_port()
247 static u16 _ocrdma_pd_mgr_get_bitmap(struct ocrdma_dev *dev, bool dpp_pool) in _ocrdma_pd_mgr_get_bitmap() argument
253 pd_bitmap = dev->pd_mgr->pd_dpp_bitmap; in _ocrdma_pd_mgr_get_bitmap()
255 dev->pd_mgr->max_dpp_pd); in _ocrdma_pd_mgr_get_bitmap()
257 dev->pd_mgr->pd_dpp_count++; in _ocrdma_pd_mgr_get_bitmap()
258 if (dev->pd_mgr->pd_dpp_count > dev->pd_mgr->pd_dpp_thrsh) in _ocrdma_pd_mgr_get_bitmap()
259 dev->pd_mgr->pd_dpp_thrsh = dev->pd_mgr->pd_dpp_count; in _ocrdma_pd_mgr_get_bitmap()
261 pd_bitmap = dev->pd_mgr->pd_norm_bitmap; in _ocrdma_pd_mgr_get_bitmap()
263 dev->pd_mgr->max_normal_pd); in _ocrdma_pd_mgr_get_bitmap()
265 dev->pd_mgr->pd_norm_count++; in _ocrdma_pd_mgr_get_bitmap()
266 if (dev->pd_mgr->pd_norm_count > dev->pd_mgr->pd_norm_thrsh) in _ocrdma_pd_mgr_get_bitmap()
267 dev->pd_mgr->pd_norm_thrsh = dev->pd_mgr->pd_norm_count; in _ocrdma_pd_mgr_get_bitmap()
272 static int _ocrdma_pd_mgr_put_bitmap(struct ocrdma_dev *dev, u16 pd_id, in _ocrdma_pd_mgr_put_bitmap() argument
278 pd_count = dpp_pool ? dev->pd_mgr->pd_dpp_count : in _ocrdma_pd_mgr_put_bitmap()
279 dev->pd_mgr->pd_norm_count; in _ocrdma_pd_mgr_put_bitmap()
284 pd_bit_index = pd_id - dev->pd_mgr->pd_dpp_start; in _ocrdma_pd_mgr_put_bitmap()
285 if (pd_bit_index >= dev->pd_mgr->max_dpp_pd) { in _ocrdma_pd_mgr_put_bitmap()
288 __clear_bit(pd_bit_index, dev->pd_mgr->pd_dpp_bitmap); in _ocrdma_pd_mgr_put_bitmap()
289 dev->pd_mgr->pd_dpp_count--; in _ocrdma_pd_mgr_put_bitmap()
292 pd_bit_index = pd_id - dev->pd_mgr->pd_norm_start; in _ocrdma_pd_mgr_put_bitmap()
293 if (pd_bit_index >= dev->pd_mgr->max_normal_pd) { in _ocrdma_pd_mgr_put_bitmap()
296 __clear_bit(pd_bit_index, dev->pd_mgr->pd_norm_bitmap); in _ocrdma_pd_mgr_put_bitmap()
297 dev->pd_mgr->pd_norm_count--; in _ocrdma_pd_mgr_put_bitmap()
304 static int ocrdma_put_pd_num(struct ocrdma_dev *dev, u16 pd_id, in ocrdma_put_pd_num() argument
309 mutex_lock(&dev->dev_lock); in ocrdma_put_pd_num()
310 status = _ocrdma_pd_mgr_put_bitmap(dev, pd_id, dpp_pool); in ocrdma_put_pd_num()
311 mutex_unlock(&dev->dev_lock); in ocrdma_put_pd_num()
315 static int ocrdma_get_pd_num(struct ocrdma_dev *dev, struct ocrdma_pd *pd) in ocrdma_get_pd_num() argument
320 mutex_lock(&dev->dev_lock); in ocrdma_get_pd_num()
323 if (dev->pd_mgr->pd_dpp_count < dev->pd_mgr->max_dpp_pd) { in ocrdma_get_pd_num()
324 pd_idx = _ocrdma_pd_mgr_get_bitmap(dev, true); in ocrdma_get_pd_num()
325 pd->id = dev->pd_mgr->pd_dpp_start + pd_idx; in ocrdma_get_pd_num()
326 pd->dpp_page = dev->pd_mgr->dpp_page_index + pd_idx; in ocrdma_get_pd_num()
327 } else if (dev->pd_mgr->pd_norm_count < in ocrdma_get_pd_num()
328 dev->pd_mgr->max_normal_pd) { in ocrdma_get_pd_num()
329 pd_idx = _ocrdma_pd_mgr_get_bitmap(dev, false); in ocrdma_get_pd_num()
330 pd->id = dev->pd_mgr->pd_norm_start + pd_idx; in ocrdma_get_pd_num()
336 if (dev->pd_mgr->pd_norm_count < dev->pd_mgr->max_normal_pd) { in ocrdma_get_pd_num()
337 pd_idx = _ocrdma_pd_mgr_get_bitmap(dev, false); in ocrdma_get_pd_num()
338 pd->id = dev->pd_mgr->pd_norm_start + pd_idx; in ocrdma_get_pd_num()
343 mutex_unlock(&dev->dev_lock); in ocrdma_get_pd_num()
357 static int _ocrdma_alloc_pd(struct ocrdma_dev *dev, struct ocrdma_pd *pd, in _ocrdma_alloc_pd() argument
363 if (udata && uctx && dev->attr.max_dpp_pds) { in _ocrdma_alloc_pd()
365 ocrdma_get_asic_type(dev) == OCRDMA_ASIC_GEN_SKH_R; in _ocrdma_alloc_pd()
367 pd->dpp_enabled ? (dev->nic_info.db_page_size / in _ocrdma_alloc_pd()
368 dev->attr.wqe_size) : 0; in _ocrdma_alloc_pd()
371 if (dev->pd_mgr->pd_prealloc_valid) in _ocrdma_alloc_pd()
372 return ocrdma_get_pd_num(dev, pd); in _ocrdma_alloc_pd()
375 status = ocrdma_mbx_alloc_pd(dev, pd); in _ocrdma_alloc_pd()
394 static void _ocrdma_dealloc_pd(struct ocrdma_dev *dev, in _ocrdma_dealloc_pd() argument
397 if (dev->pd_mgr->pd_prealloc_valid) in _ocrdma_dealloc_pd()
398 ocrdma_put_pd_num(dev, pd->id, pd->dpp_enabled); in _ocrdma_dealloc_pd()
400 ocrdma_mbx_dealloc_pd(dev, pd); in _ocrdma_dealloc_pd()
403 static int ocrdma_alloc_ucontext_pd(struct ocrdma_dev *dev, in ocrdma_alloc_ucontext_pd() argument
407 struct ib_device *ibdev = &dev->ibdev; in ocrdma_alloc_ucontext_pd()
418 status = _ocrdma_alloc_pd(dev, uctx->cntxt_pd, uctx, udata); in ocrdma_alloc_ucontext_pd()
425 uctx->cntxt_pd->ibpd.device = &dev->ibdev; in ocrdma_alloc_ucontext_pd()
433 struct ocrdma_dev *dev = get_ocrdma_dev(pd->ibpd.device); in ocrdma_dealloc_ucontext_pd() local
437 __func__, dev->id, pd->id); in ocrdma_dealloc_ucontext_pd()
440 _ocrdma_dealloc_pd(dev, pd); in ocrdma_dealloc_ucontext_pd()
471 struct ocrdma_dev *dev = get_ocrdma_dev(ibdev); in ocrdma_alloc_ucontext() local
472 struct pci_dev *pdev = dev->nic_info.pdev; in ocrdma_alloc_ucontext()
480 ctx->ah_tbl.va = dma_alloc_coherent(&pdev->dev, map_len, in ocrdma_alloc_ucontext()
494 status = ocrdma_alloc_ucontext_pd(dev, ctx, udata); in ocrdma_alloc_ucontext()
498 resp.dev_id = dev->id; in ocrdma_alloc_ucontext()
499 resp.max_inline_data = dev->attr.max_inline_data; in ocrdma_alloc_ucontext()
500 resp.wqe_size = dev->attr.wqe_size; in ocrdma_alloc_ucontext()
501 resp.rqe_size = dev->attr.rqe_size; in ocrdma_alloc_ucontext()
502 resp.dpp_wqe_size = dev->attr.wqe_size; in ocrdma_alloc_ucontext()
504 memcpy(resp.fw_ver, dev->attr.fw_ver, sizeof(resp.fw_ver)); in ocrdma_alloc_ucontext()
515 dma_free_coherent(&pdev->dev, ctx->ah_tbl.len, ctx->ah_tbl.va, in ocrdma_alloc_ucontext()
524 struct ocrdma_dev *dev = get_ocrdma_dev(ibctx->device); in ocrdma_dealloc_ucontext() local
525 struct pci_dev *pdev = dev->nic_info.pdev; in ocrdma_dealloc_ucontext()
530 dma_free_coherent(&pdev->dev, uctx->ah_tbl.len, uctx->ah_tbl.va, in ocrdma_dealloc_ucontext()
542 struct ocrdma_dev *dev = get_ocrdma_dev(context->device); in ocrdma_mmap() local
544 u64 unmapped_db = (u64) dev->nic_info.unmapped_db; in ocrdma_mmap()
556 dev->nic_info.db_total_size)) && in ocrdma_mmap()
557 (len <= dev->nic_info.db_page_size)) { in ocrdma_mmap()
564 } else if (dev->nic_info.dpp_unmapped_len && in ocrdma_mmap()
565 (vm_page >= (u64) dev->nic_info.dpp_unmapped_addr) && in ocrdma_mmap()
566 (vm_page <= (u64) (dev->nic_info.dpp_unmapped_addr + in ocrdma_mmap()
567 dev->nic_info.dpp_unmapped_len)) && in ocrdma_mmap()
568 (len <= dev->nic_info.dpp_unmapped_len)) { in ocrdma_mmap()
582 static int ocrdma_copy_pd_uresp(struct ocrdma_dev *dev, struct ocrdma_pd *pd, in ocrdma_copy_pd_uresp() argument
594 rsp.id = pd->id; in ocrdma_copy_pd_uresp()
596 db_page_addr = ocrdma_get_db_addr(dev, pd->id); in ocrdma_copy_pd_uresp()
597 db_page_size = dev->nic_info.db_page_size; in ocrdma_copy_pd_uresp()
604 dpp_page_addr = dev->nic_info.dpp_unmapped_addr + in ocrdma_copy_pd_uresp()
605 (pd->id * PAGE_SIZE); in ocrdma_copy_pd_uresp()
632 struct ocrdma_dev *dev = get_ocrdma_dev(ibdev); in ocrdma_alloc_pd() local
648 status = _ocrdma_alloc_pd(dev, pd, uctx, udata); in ocrdma_alloc_pd()
654 status = ocrdma_copy_pd_uresp(dev, pd, udata); in ocrdma_alloc_pd()
664 _ocrdma_dealloc_pd(dev, pd); in ocrdma_alloc_pd()
672 struct ocrdma_dev *dev = get_ocrdma_dev(ibpd->device); in ocrdma_dealloc_pd() local
678 u64 dpp_db = dev->nic_info.dpp_unmapped_addr + in ocrdma_dealloc_pd()
679 (pd->id * PAGE_SIZE); in ocrdma_dealloc_pd()
682 usr_db = ocrdma_get_db_addr(dev, pd->id); in ocrdma_dealloc_pd()
683 ocrdma_del_mmap(pd->uctx, usr_db, dev->nic_info.db_page_size); in ocrdma_dealloc_pd()
690 _ocrdma_dealloc_pd(dev, pd); in ocrdma_dealloc_pd()
694 static int ocrdma_alloc_lkey(struct ocrdma_dev *dev, struct ocrdma_mr *mr, in ocrdma_alloc_lkey() argument
708 status = ocrdma_mbx_alloc_lkey(dev, &mr->hwmr, pdid, addr_check); in ocrdma_alloc_lkey()
723 struct ocrdma_dev *dev = get_ocrdma_dev(ibpd->device); in ocrdma_get_dma_mr() local
734 status = ocrdma_alloc_lkey(dev, mr, pd->id, acc, 0, in ocrdma_get_dma_mr()
744 static void ocrdma_free_mr_pbl_tbl(struct ocrdma_dev *dev, in ocrdma_free_mr_pbl_tbl() argument
747 struct pci_dev *pdev = dev->nic_info.pdev; in ocrdma_free_mr_pbl_tbl()
754 dma_free_coherent(&pdev->dev, mr->pbl_size, in ocrdma_free_mr_pbl_tbl()
763 static int ocrdma_get_pbl_info(struct ocrdma_dev *dev, struct ocrdma_mr *mr, in ocrdma_get_pbl_info() argument
780 } while (num_pbls >= dev->attr.max_num_mr_pbl); in ocrdma_get_pbl_info()
788 static int ocrdma_build_pbl_tbl(struct ocrdma_dev *dev, struct ocrdma_hw_mr *mr) in ocrdma_build_pbl_tbl() argument
793 struct pci_dev *pdev = dev->nic_info.pdev; in ocrdma_build_pbl_tbl()
804 va = dma_alloc_coherent(&pdev->dev, dma_len, &pa, GFP_KERNEL); in ocrdma_build_pbl_tbl()
806 ocrdma_free_mr_pbl_tbl(dev, mr); in ocrdma_build_pbl_tbl()
816 static void build_user_pbes(struct ocrdma_dev *dev, struct ocrdma_mr *mr) in build_user_pbes() argument
853 struct ocrdma_dev *dev = get_ocrdma_dev(ibpd->device); in ocrdma_reg_user_mr() local
871 dev, mr, ib_umem_num_dma_blocks(mr->umem, PAGE_SIZE)); in ocrdma_reg_user_mr()
883 status = ocrdma_build_pbl_tbl(dev, &mr->hwmr); in ocrdma_reg_user_mr()
886 build_user_pbes(dev, mr); in ocrdma_reg_user_mr()
887 status = ocrdma_reg_mr(dev, &mr->hwmr, pd->id, acc); in ocrdma_reg_user_mr()
897 ocrdma_free_mr_pbl_tbl(dev, &mr->hwmr); in ocrdma_reg_user_mr()
906 struct ocrdma_dev *dev = get_ocrdma_dev(ib_mr->device); in ocrdma_dereg_mr() local
908 (void) ocrdma_mbx_dealloc_lkey(dev, mr->hwmr.fr_mr, mr->hwmr.lkey); in ocrdma_dereg_mr()
911 ocrdma_free_mr_pbl_tbl(dev, &mr->hwmr); in ocrdma_dereg_mr()
918 if (dev->mqe_ctx.fw_error_state) { in ocrdma_dereg_mr()
920 __func__, dev->id); in ocrdma_dereg_mr()
925 static int ocrdma_copy_cq_uresp(struct ocrdma_dev *dev, struct ocrdma_cq *cq, in ocrdma_copy_cq_uresp() argument
938 uresp.cq_id = cq->id; in ocrdma_copy_cq_uresp()
943 uresp.db_page_addr = ocrdma_get_db_addr(dev, uctx->cntxt_pd->id); in ocrdma_copy_cq_uresp()
944 uresp.db_page_size = dev->nic_info.db_page_size; in ocrdma_copy_cq_uresp()
949 __func__, dev->id, cq->id); in ocrdma_copy_cq_uresp()
971 struct ocrdma_dev *dev = get_ocrdma_dev(ibdev); in ocrdma_create_cq() local
993 pd_id = uctx->cntxt_pd->id; in ocrdma_create_cq()
995 status = ocrdma_mbx_create_cq(dev, cq, entries, ureq.dpp_cq, pd_id); in ocrdma_create_cq()
1000 status = ocrdma_copy_cq_uresp(dev, cq, udata); in ocrdma_create_cq()
1005 dev->cq_tbl[cq->id] = cq; in ocrdma_create_cq()
1009 ocrdma_mbx_destroy_cq(dev, cq); in ocrdma_create_cq()
1033 struct ocrdma_dev *dev = get_ocrdma_dev(cq->ibcq.device); in ocrdma_flush_cq() local
1049 ocrdma_ring_cq_db(dev, cq->id, false, false, valid_count); in ocrdma_flush_cq()
1057 struct ocrdma_dev *dev = get_ocrdma_dev(ibcq->device); in ocrdma_destroy_cq() local
1061 dev->cq_tbl[cq->id] = NULL; in ocrdma_destroy_cq()
1062 indx = ocrdma_get_eq_table_index(dev, cq->eqn); in ocrdma_destroy_cq()
1064 eq = &dev->eq_tbl[indx]; in ocrdma_destroy_cq()
1065 irq = ocrdma_get_irq(dev, eq); in ocrdma_destroy_cq()
1069 ocrdma_mbx_destroy_cq(dev, cq); in ocrdma_destroy_cq()
1071 pdid = cq->ucontext->cntxt_pd->id; in ocrdma_destroy_cq()
1075 ocrdma_get_db_addr(dev, pdid), in ocrdma_destroy_cq()
1076 dev->nic_info.db_page_size); in ocrdma_destroy_cq()
1081 static int ocrdma_add_qpn_map(struct ocrdma_dev *dev, struct ocrdma_qp *qp) in ocrdma_add_qpn_map() argument
1085 if (qp->id < OCRDMA_MAX_QP && dev->qp_tbl[qp->id] == NULL) { in ocrdma_add_qpn_map()
1086 dev->qp_tbl[qp->id] = qp; in ocrdma_add_qpn_map()
1092 static void ocrdma_del_qpn_map(struct ocrdma_dev *dev, struct ocrdma_qp *qp) in ocrdma_del_qpn_map() argument
1094 dev->qp_tbl[qp->id] = NULL; in ocrdma_del_qpn_map()
1097 static int ocrdma_check_qp_params(struct ib_pd *ibpd, struct ocrdma_dev *dev, in ocrdma_check_qp_params() argument
1098 struct ib_qp_init_attr *attrs, in ocrdma_check_qp_params() argument
1101 if ((attrs->qp_type != IB_QPT_GSI) && in ocrdma_check_qp_params()
1102 (attrs->qp_type != IB_QPT_RC) && in ocrdma_check_qp_params()
1103 (attrs->qp_type != IB_QPT_UC) && in ocrdma_check_qp_params()
1104 (attrs->qp_type != IB_QPT_UD)) { in ocrdma_check_qp_params()
1106 __func__, dev->id, attrs->qp_type); in ocrdma_check_qp_params()
1110 if ((attrs->qp_type != IB_QPT_GSI) && in ocrdma_check_qp_params()
1111 (attrs->cap.max_send_wr > dev->attr.max_wqe)) { in ocrdma_check_qp_params()
1113 __func__, dev->id, attrs->cap.max_send_wr); in ocrdma_check_qp_params()
1115 __func__, dev->id, dev->attr.max_wqe); in ocrdma_check_qp_params()
1118 if (!attrs->srq && (attrs->cap.max_recv_wr > dev->attr.max_rqe)) { in ocrdma_check_qp_params()
1120 __func__, dev->id, attrs->cap.max_recv_wr); in ocrdma_check_qp_params()
1122 __func__, dev->id, dev->attr.max_rqe); in ocrdma_check_qp_params()
1125 if (attrs->cap.max_inline_data > dev->attr.max_inline_data) { in ocrdma_check_qp_params()
1127 __func__, dev->id, attrs->cap.max_inline_data); in ocrdma_check_qp_params()
1129 __func__, dev->id, dev->attr.max_inline_data); in ocrdma_check_qp_params()
1132 if (attrs->cap.max_send_sge > dev->attr.max_send_sge) { in ocrdma_check_qp_params()
1134 __func__, dev->id, attrs->cap.max_send_sge); in ocrdma_check_qp_params()
1136 __func__, dev->id, dev->attr.max_send_sge); in ocrdma_check_qp_params()
1139 if (attrs->cap.max_recv_sge > dev->attr.max_recv_sge) { in ocrdma_check_qp_params()
1141 __func__, dev->id, attrs->cap.max_recv_sge); in ocrdma_check_qp_params()
1143 __func__, dev->id, dev->attr.max_recv_sge); in ocrdma_check_qp_params()
1147 if (udata && attrs->qp_type == IB_QPT_GSI) { in ocrdma_check_qp_params()
1150 __func__, dev->id, attrs->qp_type); in ocrdma_check_qp_params()
1154 if (attrs->qp_type == IB_QPT_GSI && dev->gsi_qp_created) { in ocrdma_check_qp_params()
1156 __func__, dev->id); in ocrdma_check_qp_params()
1160 if ((attrs->qp_type != IB_QPT_GSI) && (dev->gsi_qp_created)) { in ocrdma_check_qp_params()
1161 if ((dev->gsi_sqcq == get_ocrdma_cq(attrs->send_cq)) || in ocrdma_check_qp_params()
1162 (dev->gsi_rqcq == get_ocrdma_cq(attrs->recv_cq))) { in ocrdma_check_qp_params()
1164 __func__, dev->id); in ocrdma_check_qp_params()
1179 struct ocrdma_dev *dev = get_ocrdma_dev(pd->ibpd.device); in ocrdma_copy_qp_uresp() local
1182 usr_db = dev->nic_info.unmapped_db + in ocrdma_copy_qp_uresp()
1183 (pd->id * dev->nic_info.db_page_size); in ocrdma_copy_qp_uresp()
1184 uresp.qp_id = qp->id; in ocrdma_copy_qp_uresp()
1198 uresp.db_page_size = dev->nic_info.db_page_size; in ocrdma_copy_qp_uresp()
1209 pr_err("%s(%d) user copy error.\n", __func__, dev->id); in ocrdma_copy_qp_uresp()
1230 static void ocrdma_set_qp_db(struct ocrdma_dev *dev, struct ocrdma_qp *qp, in ocrdma_set_qp_db() argument
1233 if (ocrdma_get_asic_type(dev) == OCRDMA_ASIC_GEN_SKH_R) { in ocrdma_set_qp_db()
1234 qp->sq_db = dev->nic_info.db + in ocrdma_set_qp_db()
1235 (pd->id * dev->nic_info.db_page_size) + in ocrdma_set_qp_db()
1237 qp->rq_db = dev->nic_info.db + in ocrdma_set_qp_db()
1238 (pd->id * dev->nic_info.db_page_size) + in ocrdma_set_qp_db()
1241 qp->sq_db = dev->nic_info.db + in ocrdma_set_qp_db()
1242 (pd->id * dev->nic_info.db_page_size) + in ocrdma_set_qp_db()
1244 qp->rq_db = dev->nic_info.db + in ocrdma_set_qp_db()
1245 (pd->id * dev->nic_info.db_page_size) + in ocrdma_set_qp_db()
1267 struct ib_qp_init_attr *attrs) in ocrdma_set_qp_init_params() argument
1274 qp->qp_type = attrs->qp_type; in ocrdma_set_qp_init_params()
1276 qp->max_inline_data = attrs->cap.max_inline_data; in ocrdma_set_qp_init_params()
1277 qp->sq.max_sges = attrs->cap.max_send_sge; in ocrdma_set_qp_init_params()
1278 qp->rq.max_sges = attrs->cap.max_recv_sge; in ocrdma_set_qp_init_params()
1280 qp->signaled = attrs->sq_sig_type == IB_SIGNAL_ALL_WR; in ocrdma_set_qp_init_params()
1283 static void ocrdma_store_gsi_qp_cq(struct ocrdma_dev *dev, in ocrdma_store_gsi_qp_cq() argument
1284 struct ib_qp_init_attr *attrs) in ocrdma_store_gsi_qp_cq() argument
1286 if (attrs->qp_type == IB_QPT_GSI) { in ocrdma_store_gsi_qp_cq()
1287 dev->gsi_qp_created = 1; in ocrdma_store_gsi_qp_cq()
1288 dev->gsi_sqcq = get_ocrdma_cq(attrs->send_cq); in ocrdma_store_gsi_qp_cq()
1289 dev->gsi_rqcq = get_ocrdma_cq(attrs->recv_cq); in ocrdma_store_gsi_qp_cq()
1293 int ocrdma_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *attrs, in ocrdma_create_qp() argument
1300 struct ocrdma_dev *dev = get_ocrdma_dev(ibqp->device); in ocrdma_create_qp() local
1304 if (attrs->create_flags) in ocrdma_create_qp()
1307 status = ocrdma_check_qp_params(ibpd, dev, attrs, udata); in ocrdma_create_qp()
1316 ocrdma_set_qp_init_params(qp, pd, attrs); in ocrdma_create_qp()
1321 mutex_lock(&dev->dev_lock); in ocrdma_create_qp()
1322 status = ocrdma_mbx_create_qp(qp, attrs, ureq.enable_dpp_cq, in ocrdma_create_qp()
1335 status = ocrdma_add_qpn_map(dev, qp); in ocrdma_create_qp()
1338 ocrdma_set_qp_db(dev, qp, pd); in ocrdma_create_qp()
1342 (attrs->srq != NULL)); in ocrdma_create_qp()
1346 ocrdma_store_gsi_qp_cq(dev, attrs); in ocrdma_create_qp()
1347 qp->ibqp.qp_num = qp->id; in ocrdma_create_qp()
1348 mutex_unlock(&dev->dev_lock); in ocrdma_create_qp()
1352 ocrdma_del_qpn_map(dev, qp); in ocrdma_create_qp()
1354 ocrdma_mbx_destroy_qp(dev, qp); in ocrdma_create_qp()
1356 mutex_unlock(&dev->dev_lock); in ocrdma_create_qp()
1359 pr_err("%s(%d) error=%d\n", __func__, dev->id, status); in ocrdma_create_qp()
1369 struct ocrdma_dev *dev; in _ocrdma_modify_qp() local
1373 dev = get_ocrdma_dev(ibqp->device); in _ocrdma_modify_qp()
1381 return ocrdma_mbx_modify_qp(dev, qp, attr, attr_mask); in _ocrdma_modify_qp()
1390 struct ocrdma_dev *dev; in ocrdma_modify_qp() local
1397 dev = get_ocrdma_dev(ibqp->device); in ocrdma_modify_qp()
1400 mutex_lock(&dev->dev_lock); in ocrdma_modify_qp()
1413 __func__, dev->id, attr_mask, qp->id, ibqp->qp_type, in ocrdma_modify_qp()
1422 mutex_unlock(&dev->dev_lock); in ocrdma_modify_qp()
1463 struct ocrdma_dev *dev = get_ocrdma_dev(ibqp->device); in ocrdma_query_qp() local
1466 mutex_lock(&dev->dev_lock); in ocrdma_query_qp()
1467 status = ocrdma_mbx_query_qp(dev, qp, &params); in ocrdma_query_qp()
1468 mutex_unlock(&dev->dev_lock); in ocrdma_query_qp()
1620 if (qpn == 0 || qpn != qp->id) in ocrdma_discard_cqes()
1654 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device); in ocrdma_del_flush_qp() local
1657 spin_lock_irqsave(&dev->flush_q_lock, flags); in ocrdma_del_flush_qp()
1666 spin_unlock_irqrestore(&dev->flush_q_lock, flags); in ocrdma_del_flush_qp()
1673 struct ocrdma_dev *dev; in ocrdma_destroy_qp() local
1674 struct ib_qp_attr attrs; in ocrdma_destroy_qp() local
1679 dev = get_ocrdma_dev(ibqp->device); in ocrdma_destroy_qp()
1685 attrs.qp_state = IB_QPS_ERR; in ocrdma_destroy_qp()
1687 _ocrdma_modify_qp(ibqp, &attrs, attr_mask); in ocrdma_destroy_qp()
1693 mutex_lock(&dev->dev_lock); in ocrdma_destroy_qp()
1694 (void) ocrdma_mbx_destroy_qp(dev, qp); in ocrdma_destroy_qp()
1703 ocrdma_del_qpn_map(dev, qp); in ocrdma_destroy_qp()
1706 ocrdma_del_qpn_map(dev, qp); in ocrdma_destroy_qp()
1714 mutex_unlock(&dev->dev_lock); in ocrdma_destroy_qp()
1731 static int ocrdma_copy_srq_uresp(struct ocrdma_dev *dev, struct ocrdma_srq *srq, in ocrdma_copy_srq_uresp() argument
1742 uresp.db_page_addr = dev->nic_info.unmapped_db + in ocrdma_copy_srq_uresp()
1743 (srq->pd->id * dev->nic_info.db_page_size); in ocrdma_copy_srq_uresp()
1744 uresp.db_page_size = dev->nic_info.db_page_size; in ocrdma_copy_srq_uresp()
1746 if (ocrdma_get_asic_type(dev) == OCRDMA_ASIC_GEN_SKH_R) { in ocrdma_copy_srq_uresp()
1769 struct ocrdma_dev *dev = get_ocrdma_dev(ibsrq->device); in ocrdma_create_srq() local
1775 if (init_attr->attr.max_sge > dev->attr.max_recv_sge) in ocrdma_create_srq()
1777 if (init_attr->attr.max_wr > dev->attr.max_rqe) in ocrdma_create_srq()
1782 srq->db = dev->nic_info.db + (pd->id * dev->nic_info.db_page_size); in ocrdma_create_srq()
1783 status = ocrdma_mbx_create_srq(dev, srq, init_attr, pd); in ocrdma_create_srq()
1815 status = ocrdma_copy_srq_uresp(dev, srq, udata); in ocrdma_create_srq()
1823 ocrdma_mbx_destroy_srq(dev, srq); in ocrdma_create_srq()
1856 struct ocrdma_dev *dev = get_ocrdma_dev(ibsrq->device); in ocrdma_destroy_srq() local
1860 ocrdma_mbx_destroy_srq(dev, srq); in ocrdma_destroy_srq()
1885 ud_hdr->rsvd_ahid = ah->id; in ocrdma_build_ud_hdr()
2516 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device); in ocrdma_poll_err_scqe() local
2520 atomic_inc(&dev->cqe_err_stats[status]); in ocrdma_poll_err_scqe()
2597 static int ocrdma_update_ud_rcqe(struct ocrdma_dev *dev, struct ib_wc *ibwc, in ocrdma_update_ud_rcqe() argument
2613 if (ocrdma_is_udp_encap_supported(dev)) { in ocrdma_update_ud_rcqe()
2649 struct ocrdma_dev *dev = get_ocrdma_dev(qp->ibqp.device); in ocrdma_poll_err_rcqe() local
2652 atomic_inc(&dev->cqe_err_stats[status]); in ocrdma_poll_err_rcqe()
2682 struct ocrdma_dev *dev; in ocrdma_poll_success_rcqe() local
2684 dev = get_ocrdma_dev(qp->ibqp.device); in ocrdma_poll_success_rcqe()
2690 ocrdma_update_ud_rcqe(dev, ibwc, cqe); in ocrdma_poll_success_rcqe()
2759 struct ocrdma_dev *dev = get_ocrdma_dev(cq->ibcq.device); in ocrdma_poll_hwcq() local
2773 qp = dev->qp_tbl[qpn]; in ocrdma_poll_hwcq()
2805 ocrdma_ring_cq_db(dev, cq->id, false, false, polled_hw_cqes); in ocrdma_poll_hwcq()
2841 struct ocrdma_dev *dev = get_ocrdma_dev(ibcq->device); in ocrdma_poll_cq() local
2859 spin_lock_irqsave(&dev->flush_q_lock, flags); in ocrdma_poll_cq()
2868 spin_unlock_irqrestore(&dev->flush_q_lock, flags); in ocrdma_poll_cq()
2876 struct ocrdma_dev *dev = get_ocrdma_dev(ibcq->device); in ocrdma_arm_cq() local
2881 cq_id = cq->id; in ocrdma_arm_cq()
2889 ocrdma_ring_cq_db(dev, cq_id, arm_needed, sol_needed, 0); in ocrdma_arm_cq()
2901 struct ocrdma_dev *dev = get_ocrdma_dev(ibpd->device); in ocrdma_alloc_mr() local
2906 if (max_num_sg > dev->attr.max_pages_per_frmr) in ocrdma_alloc_mr()
2919 status = ocrdma_get_pbl_info(dev, mr, max_num_sg); in ocrdma_alloc_mr()
2928 status = ocrdma_build_pbl_tbl(dev, &mr->hwmr); in ocrdma_alloc_mr()
2931 status = ocrdma_reg_mr(dev, &mr->hwmr, pd->id, 0); in ocrdma_alloc_mr()
2936 dev->stag_arr[(mr->hwmr.lkey >> 8) & (OCRDMA_MAX_STAG - 1)] = in ocrdma_alloc_mr()
2940 ocrdma_free_mr_pbl_tbl(dev, &mr->hwmr); in ocrdma_alloc_mr()