Lines Matching refs:p_hwfn

38 static void qed_roce_free_real_icid(struct qed_hwfn *p_hwfn, u16 icid);
40 static int qed_roce_async_event(struct qed_hwfn *p_hwfn, u8 fw_event_code, in qed_roce_async_event() argument
44 struct qed_rdma_events events = p_hwfn->p_rdma_info->events; in qed_roce_async_event()
54 qed_roce_free_real_icid(p_hwfn, icid); in qed_roce_async_event()
69 void qed_roce_stop(struct qed_hwfn *p_hwfn) in qed_roce_stop() argument
71 struct qed_bmap *rcid_map = &p_hwfn->p_rdma_info->real_cid_map; in qed_roce_stop()
85 if (p_hwfn->cdev->recov_in_prog) in qed_roce_stop()
90 DP_NOTICE(p_hwfn, "cid bitmap wait timed out\n"); in qed_roce_stop()
132 static void qed_roce_free_cid_pair(struct qed_hwfn *p_hwfn, u16 cid) in qed_roce_free_cid_pair() argument
134 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_roce_free_cid_pair()
135 qed_bmap_release_id(p_hwfn, &p_hwfn->p_rdma_info->cid_map, cid); in qed_roce_free_cid_pair()
136 qed_bmap_release_id(p_hwfn, &p_hwfn->p_rdma_info->cid_map, cid + 1); in qed_roce_free_cid_pair()
137 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_roce_free_cid_pair()
140 int qed_roce_alloc_cid(struct qed_hwfn *p_hwfn, u16 *cid) in qed_roce_alloc_cid() argument
142 struct qed_rdma_info *p_rdma_info = p_hwfn->p_rdma_info; in qed_roce_alloc_cid()
147 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_roce_alloc_cid()
148 rc = qed_rdma_bmap_alloc_id(p_hwfn, &p_rdma_info->cid_map, in qed_roce_alloc_cid()
155 rc = qed_rdma_bmap_alloc_id(p_hwfn, &p_rdma_info->cid_map, in qed_roce_alloc_cid()
164 DP_NOTICE(p_hwfn, "Failed to allocate two adjacent qp's'\n"); in qed_roce_alloc_cid()
169 responder_icid += qed_cxt_get_proto_cid_start(p_hwfn, in qed_roce_alloc_cid()
171 requester_icid += qed_cxt_get_proto_cid_start(p_hwfn, in qed_roce_alloc_cid()
177 rc = qed_cxt_dynamic_ilt_alloc(p_hwfn, QED_ELEM_CXT, responder_icid); in qed_roce_alloc_cid()
181 rc = qed_cxt_dynamic_ilt_alloc(p_hwfn, QED_ELEM_CXT, requester_icid); in qed_roce_alloc_cid()
190 qed_bmap_release_id(p_hwfn, &p_rdma_info->cid_map, responder_icid); in qed_roce_alloc_cid()
191 qed_bmap_release_id(p_hwfn, &p_rdma_info->cid_map, requester_icid); in qed_roce_alloc_cid()
194 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, in qed_roce_alloc_cid()
199 static void qed_roce_set_real_cid(struct qed_hwfn *p_hwfn, u32 cid) in qed_roce_set_real_cid() argument
201 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_roce_set_real_cid()
202 qed_bmap_set_id(p_hwfn, &p_hwfn->p_rdma_info->real_cid_map, cid); in qed_roce_set_real_cid()
203 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_roce_set_real_cid()
206 static u8 qed_roce_get_qp_tc(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp) in qed_roce_get_qp_tc() argument
212 tc = qed_dcbx_get_priority_tc(p_hwfn, pri); in qed_roce_get_qp_tc()
215 DP_VERBOSE(p_hwfn, QED_MSG_SP, in qed_roce_get_qp_tc()
222 static int qed_roce_sp_create_responder(struct qed_hwfn *p_hwfn, in qed_roce_sp_create_responder() argument
237 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid); in qed_roce_sp_create_responder()
241 qp->irq = dma_alloc_coherent(&p_hwfn->cdev->pdev->dev, in qed_roce_sp_create_responder()
246 DP_NOTICE(p_hwfn, in qed_roce_sp_create_responder()
255 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_roce_sp_create_responder()
258 rc = qed_sp_init_request(p_hwfn, &p_ent, ROCE_RAMROD_CREATE_QP, in qed_roce_sp_create_responder()
309 p_ramrod->cq_cid = cpu_to_le32((p_hwfn->hw_info.opaque_fid << 16) | in qed_roce_sp_create_responder()
313 tc = qed_roce_get_qp_tc(p_hwfn, qp); in qed_roce_sp_create_responder()
314 regular_latency_queue = qed_get_cm_pq_idx_ofld_mtc(p_hwfn, tc); in qed_roce_sp_create_responder()
315 low_latency_queue = qed_get_cm_pq_idx_llt_mtc(p_hwfn, tc); in qed_roce_sp_create_responder()
316 DP_VERBOSE(p_hwfn, QED_MSG_SP, in qed_roce_sp_create_responder()
333 p_ramrod->srq_id.opaque_fid = cpu_to_le16(p_hwfn->hw_info.opaque_fid); in qed_roce_sp_create_responder()
335 p_ramrod->stats_counter_id = RESC_START(p_hwfn, QED_RDMA_STATS_QUEUE) + in qed_roce_sp_create_responder()
338 rc = qed_spq_post(p_hwfn, p_ent, NULL); in qed_roce_sp_create_responder()
345 proto = p_hwfn->p_rdma_info->proto; in qed_roce_sp_create_responder()
346 qed_roce_set_real_cid(p_hwfn, qp->icid - in qed_roce_sp_create_responder()
347 qed_cxt_get_proto_cid_start(p_hwfn, proto)); in qed_roce_sp_create_responder()
352 DP_NOTICE(p_hwfn, "create responder - failed, rc = %d\n", rc); in qed_roce_sp_create_responder()
353 dma_free_coherent(&p_hwfn->cdev->pdev->dev, in qed_roce_sp_create_responder()
360 static int qed_roce_sp_create_requester(struct qed_hwfn *p_hwfn, in qed_roce_sp_create_requester() argument
375 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid); in qed_roce_sp_create_requester()
379 qp->orq = dma_alloc_coherent(&p_hwfn->cdev->pdev->dev, in qed_roce_sp_create_requester()
384 DP_NOTICE(p_hwfn, in qed_roce_sp_create_requester()
393 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_roce_sp_create_requester()
396 rc = qed_sp_init_request(p_hwfn, &p_ent, in qed_roce_sp_create_requester()
446 cpu_to_le32((p_hwfn->hw_info.opaque_fid << 16) | qp->sq_cq_id); in qed_roce_sp_create_requester()
448 tc = qed_roce_get_qp_tc(p_hwfn, qp); in qed_roce_sp_create_requester()
449 regular_latency_queue = qed_get_cm_pq_idx_ofld_mtc(p_hwfn, tc); in qed_roce_sp_create_requester()
450 low_latency_queue = qed_get_cm_pq_idx_llt_mtc(p_hwfn, tc); in qed_roce_sp_create_requester()
451 DP_VERBOSE(p_hwfn, QED_MSG_SP, in qed_roce_sp_create_requester()
467 p_ramrod->stats_counter_id = RESC_START(p_hwfn, QED_RDMA_STATS_QUEUE) + in qed_roce_sp_create_requester()
470 rc = qed_spq_post(p_hwfn, p_ent, NULL); in qed_roce_sp_create_requester()
475 proto = p_hwfn->p_rdma_info->proto; in qed_roce_sp_create_requester()
476 qed_roce_set_real_cid(p_hwfn, in qed_roce_sp_create_requester()
478 qed_cxt_get_proto_cid_start(p_hwfn, proto)); in qed_roce_sp_create_requester()
483 DP_NOTICE(p_hwfn, "Create requested - failed, rc = %d\n", rc); in qed_roce_sp_create_requester()
484 dma_free_coherent(&p_hwfn->cdev->pdev->dev, in qed_roce_sp_create_requester()
490 static int qed_roce_sp_modify_responder(struct qed_hwfn *p_hwfn, in qed_roce_sp_modify_responder() argument
503 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid); in qed_roce_sp_modify_responder()
511 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_roce_sp_modify_responder()
514 rc = qed_sp_init_request(p_hwfn, &p_ent, in qed_roce_sp_modify_responder()
518 DP_NOTICE(p_hwfn, "rc = %d\n", rc); in qed_roce_sp_modify_responder()
571 rc = qed_spq_post(p_hwfn, p_ent, NULL); in qed_roce_sp_modify_responder()
573 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Modify responder, rc = %d\n", rc); in qed_roce_sp_modify_responder()
577 static int qed_roce_sp_modify_requester(struct qed_hwfn *p_hwfn, in qed_roce_sp_modify_requester() argument
591 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid); in qed_roce_sp_modify_requester()
599 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_roce_sp_modify_requester()
602 rc = qed_sp_init_request(p_hwfn, &p_ent, in qed_roce_sp_modify_requester()
606 DP_NOTICE(p_hwfn, "rc = %d\n", rc); in qed_roce_sp_modify_requester()
658 rc = qed_spq_post(p_hwfn, p_ent, NULL); in qed_roce_sp_modify_requester()
660 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Modify requester, rc = %d\n", rc); in qed_roce_sp_modify_requester()
664 static int qed_roce_sp_destroy_qp_responder(struct qed_hwfn *p_hwfn, in qed_roce_sp_destroy_qp_responder() argument
680 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid); in qed_roce_sp_destroy_qp_responder()
690 qed_cxt_get_proto_cid_start(p_hwfn, in qed_roce_sp_destroy_qp_responder()
691 p_hwfn->p_rdma_info->proto); in qed_roce_sp_destroy_qp_responder()
692 qed_roce_free_cid_pair(p_hwfn, (u16)cid); in qed_roce_sp_destroy_qp_responder()
700 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_roce_sp_destroy_qp_responder()
703 rc = qed_sp_init_request(p_hwfn, &p_ent, in qed_roce_sp_destroy_qp_responder()
711 p_ramrod_res = dma_alloc_coherent(&p_hwfn->cdev->pdev->dev, in qed_roce_sp_destroy_qp_responder()
717 DP_NOTICE(p_hwfn, in qed_roce_sp_destroy_qp_responder()
720 qed_sp_destroy_request(p_hwfn, p_ent); in qed_roce_sp_destroy_qp_responder()
726 rc = qed_spq_post(p_hwfn, p_ent, NULL); in qed_roce_sp_destroy_qp_responder()
734 dma_free_coherent(&p_hwfn->cdev->pdev->dev, in qed_roce_sp_destroy_qp_responder()
740 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Destroy responder, rc = %d\n", rc); in qed_roce_sp_destroy_qp_responder()
743 dma_free_coherent(&p_hwfn->cdev->pdev->dev, in qed_roce_sp_destroy_qp_responder()
750 static int qed_roce_sp_destroy_qp_requester(struct qed_hwfn *p_hwfn, in qed_roce_sp_destroy_qp_requester() argument
763 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid); in qed_roce_sp_destroy_qp_requester()
768 p_ramrod_res = dma_alloc_coherent(&p_hwfn->cdev->pdev->dev, in qed_roce_sp_destroy_qp_requester()
772 DP_NOTICE(p_hwfn, in qed_roce_sp_destroy_qp_requester()
780 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_roce_sp_destroy_qp_requester()
783 rc = qed_sp_init_request(p_hwfn, &p_ent, ROCE_RAMROD_DESTROY_QP, in qed_roce_sp_destroy_qp_requester()
791 rc = qed_spq_post(p_hwfn, p_ent, NULL); in qed_roce_sp_destroy_qp_requester()
796 dma_free_coherent(&p_hwfn->cdev->pdev->dev, in qed_roce_sp_destroy_qp_requester()
802 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Destroy requester, rc = %d\n", rc); in qed_roce_sp_destroy_qp_requester()
805 dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_ramrod_res), in qed_roce_sp_destroy_qp_requester()
811 int qed_roce_query_qp(struct qed_hwfn *p_hwfn, in qed_roce_query_qp() argument
837 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "No QPs as no offload\n"); in qed_roce_query_qp()
842 DP_NOTICE(p_hwfn, in qed_roce_query_qp()
849 dma_alloc_coherent(&p_hwfn->cdev->pdev->dev, in qed_roce_query_qp()
853 DP_NOTICE(p_hwfn, in qed_roce_query_qp()
861 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_roce_query_qp()
863 rc = qed_sp_init_request(p_hwfn, &p_ent, ROCE_RAMROD_QUERY_QP, in qed_roce_query_qp()
871 rc = qed_spq_post(p_hwfn, p_ent, NULL); in qed_roce_query_qp()
879 dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_resp_ramrod_res), in qed_roce_query_qp()
896 p_req_ramrod_res = dma_alloc_coherent(&p_hwfn->cdev->pdev->dev, in qed_roce_query_qp()
902 DP_NOTICE(p_hwfn, in qed_roce_query_qp()
909 rc = qed_sp_init_request(p_hwfn, &p_ent, ROCE_RAMROD_QUERY_QP, in qed_roce_query_qp()
917 rc = qed_spq_post(p_hwfn, p_ent, NULL); in qed_roce_query_qp()
928 dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_req_ramrod_res), in qed_roce_query_qp()
942 dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_req_ramrod_res), in qed_roce_query_qp()
946 dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_resp_ramrod_res), in qed_roce_query_qp()
951 int qed_roce_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp) in qed_roce_destroy_qp() argument
960 DP_NOTICE(p_hwfn, in qed_roce_destroy_qp()
966 rc = qed_roce_sp_destroy_qp_responder(p_hwfn, qp, in qed_roce_destroy_qp()
972 rc = qed_roce_sp_destroy_qp_requester(p_hwfn, qp); in qed_roce_destroy_qp()
980 int qed_roce_modify_qp(struct qed_hwfn *p_hwfn, in qed_roce_modify_qp() argument
994 rc = qed_roce_sp_create_responder(p_hwfn, qp); in qed_roce_modify_qp()
999 rc = qed_roce_sp_create_requester(p_hwfn, qp); in qed_roce_modify_qp()
1004 rc = qed_roce_sp_modify_responder(p_hwfn, qp, false, in qed_roce_modify_qp()
1010 rc = qed_roce_sp_modify_responder(p_hwfn, qp, false, in qed_roce_modify_qp()
1015 rc = qed_roce_sp_modify_requester(p_hwfn, qp, false, false, in qed_roce_modify_qp()
1021 rc = qed_roce_sp_modify_requester(p_hwfn, qp, true, false, in qed_roce_modify_qp()
1027 rc = qed_roce_sp_modify_responder(p_hwfn, qp, false, in qed_roce_modify_qp()
1032 rc = qed_roce_sp_modify_requester(p_hwfn, qp, false, false, in qed_roce_modify_qp()
1038 rc = qed_roce_sp_modify_responder(p_hwfn, qp, false, in qed_roce_modify_qp()
1043 rc = qed_roce_sp_modify_requester(p_hwfn, qp, false, false, in qed_roce_modify_qp()
1049 rc = qed_roce_sp_modify_responder(p_hwfn, qp, true, in qed_roce_modify_qp()
1054 rc = qed_roce_sp_modify_requester(p_hwfn, qp, false, true, in qed_roce_modify_qp()
1062 rc = qed_roce_sp_destroy_qp_responder(p_hwfn, in qed_roce_modify_qp()
1071 rc = qed_roce_sp_destroy_qp_requester(p_hwfn, qp); in qed_roce_modify_qp()
1073 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "0\n"); in qed_roce_modify_qp()
1079 static void qed_roce_free_real_icid(struct qed_hwfn *p_hwfn, u16 icid) in qed_roce_free_real_icid() argument
1081 struct qed_rdma_info *p_rdma_info = p_hwfn->p_rdma_info; in qed_roce_free_real_icid()
1089 start_cid = qed_cxt_get_proto_cid_start(p_hwfn, p_rdma_info->proto); in qed_roce_free_real_icid()
1095 qed_bmap_release_id(p_hwfn, &p_rdma_info->real_cid_map, cid); in qed_roce_free_real_icid()
1096 if (qed_bmap_test_id(p_hwfn, &p_rdma_info->real_cid_map, xcid) == 0) { in qed_roce_free_real_icid()
1097 qed_bmap_release_id(p_hwfn, &p_rdma_info->cid_map, cid); in qed_roce_free_real_icid()
1098 qed_bmap_release_id(p_hwfn, &p_rdma_info->cid_map, xcid); in qed_roce_free_real_icid()
1101 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_roce_free_real_icid()
1104 void qed_roce_dpm_dcbx(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) in qed_roce_dpm_dcbx() argument
1112 val = qed_rdma_allocated_qps(p_hwfn) ? true : false; in qed_roce_dpm_dcbx()
1113 p_hwfn->dcbx_no_edpm = (u8)val; in qed_roce_dpm_dcbx()
1115 qed_rdma_dpm_conf(p_hwfn, p_ptt); in qed_roce_dpm_dcbx()
1118 int qed_roce_setup(struct qed_hwfn *p_hwfn) in qed_roce_setup() argument
1120 return qed_spq_register_async_cb(p_hwfn, PROTOCOLID_ROCE, in qed_roce_setup()
1124 int qed_roce_init_hw(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) in qed_roce_init_hw() argument
1128 qed_wr(p_hwfn, p_ptt, PRS_REG_ROCE_DEST_QP_MAX_PF, 0); in qed_roce_init_hw()
1130 p_hwfn->rdma_prs_search_reg = PRS_REG_SEARCH_ROCE; in qed_roce_init_hw()
1132 ll2_ethertype_en = qed_rd(p_hwfn, p_ptt, PRS_REG_LIGHT_L2_ETHERTYPE_EN); in qed_roce_init_hw()
1133 qed_wr(p_hwfn, p_ptt, PRS_REG_LIGHT_L2_ETHERTYPE_EN, in qed_roce_init_hw()
1136 if (qed_cxt_get_proto_cid_start(p_hwfn, PROTOCOLID_ROCE) % 2) { in qed_roce_init_hw()
1137 DP_NOTICE(p_hwfn, "The first RoCE's cid should be even\n"); in qed_roce_init_hw()
1141 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Initializing HW - Done\n"); in qed_roce_init_hw()