Lines Matching full:qp

62 static void __clean_cq(struct bnxt_qplib_cq *cq, u64 qp);
64 static void bnxt_qplib_cancel_phantom_processing(struct bnxt_qplib_qp *qp) in bnxt_qplib_cancel_phantom_processing() argument
66 qp->sq.condition = false; in bnxt_qplib_cancel_phantom_processing()
67 qp->sq.send_phantom = false; in bnxt_qplib_cancel_phantom_processing()
68 qp->sq.single = false; in bnxt_qplib_cancel_phantom_processing()
72 static void __bnxt_qplib_add_flush_qp(struct bnxt_qplib_qp *qp) in __bnxt_qplib_add_flush_qp() argument
76 scq = qp->scq; in __bnxt_qplib_add_flush_qp()
77 rcq = qp->rcq; in __bnxt_qplib_add_flush_qp()
79 if (!qp->sq.flushed) { in __bnxt_qplib_add_flush_qp()
81 "FP: Adding to SQ Flush list = %p\n", qp); in __bnxt_qplib_add_flush_qp()
82 bnxt_qplib_cancel_phantom_processing(qp); in __bnxt_qplib_add_flush_qp()
83 list_add_tail(&qp->sq_flush, &scq->sqf_head); in __bnxt_qplib_add_flush_qp()
84 qp->sq.flushed = true; in __bnxt_qplib_add_flush_qp()
86 if (!qp->srq) { in __bnxt_qplib_add_flush_qp()
87 if (!qp->rq.flushed) { in __bnxt_qplib_add_flush_qp()
89 "FP: Adding to RQ Flush list = %p\n", qp); in __bnxt_qplib_add_flush_qp()
90 list_add_tail(&qp->rq_flush, &rcq->rqf_head); in __bnxt_qplib_add_flush_qp()
91 qp->rq.flushed = true; in __bnxt_qplib_add_flush_qp()
96 static void bnxt_qplib_acquire_cq_flush_locks(struct bnxt_qplib_qp *qp, in bnxt_qplib_acquire_cq_flush_locks() argument
98 __acquires(&qp->scq->flush_lock) __acquires(&qp->rcq->flush_lock) in bnxt_qplib_acquire_cq_flush_locks()
100 spin_lock_irqsave(&qp->scq->flush_lock, *flags); in bnxt_qplib_acquire_cq_flush_locks()
101 if (qp->scq == qp->rcq) in bnxt_qplib_acquire_cq_flush_locks()
102 __acquire(&qp->rcq->flush_lock); in bnxt_qplib_acquire_cq_flush_locks()
104 spin_lock(&qp->rcq->flush_lock); in bnxt_qplib_acquire_cq_flush_locks()
107 static void bnxt_qplib_release_cq_flush_locks(struct bnxt_qplib_qp *qp, in bnxt_qplib_release_cq_flush_locks() argument
109 __releases(&qp->scq->flush_lock) __releases(&qp->rcq->flush_lock) in bnxt_qplib_release_cq_flush_locks()
111 if (qp->scq == qp->rcq) in bnxt_qplib_release_cq_flush_locks()
112 __release(&qp->rcq->flush_lock); in bnxt_qplib_release_cq_flush_locks()
114 spin_unlock(&qp->rcq->flush_lock); in bnxt_qplib_release_cq_flush_locks()
115 spin_unlock_irqrestore(&qp->scq->flush_lock, *flags); in bnxt_qplib_release_cq_flush_locks()
118 void bnxt_qplib_add_flush_qp(struct bnxt_qplib_qp *qp) in bnxt_qplib_add_flush_qp() argument
122 bnxt_qplib_acquire_cq_flush_locks(qp, &flags); in bnxt_qplib_add_flush_qp()
123 __bnxt_qplib_add_flush_qp(qp); in bnxt_qplib_add_flush_qp()
124 bnxt_qplib_release_cq_flush_locks(qp, &flags); in bnxt_qplib_add_flush_qp()
127 static void __bnxt_qplib_del_flush_qp(struct bnxt_qplib_qp *qp) in __bnxt_qplib_del_flush_qp() argument
129 if (qp->sq.flushed) { in __bnxt_qplib_del_flush_qp()
130 qp->sq.flushed = false; in __bnxt_qplib_del_flush_qp()
131 list_del(&qp->sq_flush); in __bnxt_qplib_del_flush_qp()
133 if (!qp->srq) { in __bnxt_qplib_del_flush_qp()
134 if (qp->rq.flushed) { in __bnxt_qplib_del_flush_qp()
135 qp->rq.flushed = false; in __bnxt_qplib_del_flush_qp()
136 list_del(&qp->rq_flush); in __bnxt_qplib_del_flush_qp()
141 void bnxt_qplib_clean_qp(struct bnxt_qplib_qp *qp) in bnxt_qplib_clean_qp() argument
145 bnxt_qplib_acquire_cq_flush_locks(qp, &flags); in bnxt_qplib_clean_qp()
146 __clean_cq(qp->scq, (u64)(unsigned long)qp); in bnxt_qplib_clean_qp()
147 qp->sq.hwq.prod = 0; in bnxt_qplib_clean_qp()
148 qp->sq.hwq.cons = 0; in bnxt_qplib_clean_qp()
149 __clean_cq(qp->rcq, (u64)(unsigned long)qp); in bnxt_qplib_clean_qp()
150 qp->rq.hwq.prod = 0; in bnxt_qplib_clean_qp()
151 qp->rq.hwq.cons = 0; in bnxt_qplib_clean_qp()
153 __bnxt_qplib_del_flush_qp(qp); in bnxt_qplib_clean_qp()
154 bnxt_qplib_release_cq_flush_locks(qp, &flags); in bnxt_qplib_clean_qp()
179 struct bnxt_qplib_qp *qp) in bnxt_qplib_free_qp_hdr_buf() argument
181 struct bnxt_qplib_q *rq = &qp->rq; in bnxt_qplib_free_qp_hdr_buf()
182 struct bnxt_qplib_q *sq = &qp->sq; in bnxt_qplib_free_qp_hdr_buf()
184 if (qp->rq_hdr_buf) in bnxt_qplib_free_qp_hdr_buf()
186 rq->max_wqe * qp->rq_hdr_buf_size, in bnxt_qplib_free_qp_hdr_buf()
187 qp->rq_hdr_buf, qp->rq_hdr_buf_map); in bnxt_qplib_free_qp_hdr_buf()
188 if (qp->sq_hdr_buf) in bnxt_qplib_free_qp_hdr_buf()
190 sq->max_wqe * qp->sq_hdr_buf_size, in bnxt_qplib_free_qp_hdr_buf()
191 qp->sq_hdr_buf, qp->sq_hdr_buf_map); in bnxt_qplib_free_qp_hdr_buf()
192 qp->rq_hdr_buf = NULL; in bnxt_qplib_free_qp_hdr_buf()
193 qp->sq_hdr_buf = NULL; in bnxt_qplib_free_qp_hdr_buf()
194 qp->rq_hdr_buf_map = 0; in bnxt_qplib_free_qp_hdr_buf()
195 qp->sq_hdr_buf_map = 0; in bnxt_qplib_free_qp_hdr_buf()
196 qp->sq_hdr_buf_size = 0; in bnxt_qplib_free_qp_hdr_buf()
197 qp->rq_hdr_buf_size = 0; in bnxt_qplib_free_qp_hdr_buf()
201 struct bnxt_qplib_qp *qp) in bnxt_qplib_alloc_qp_hdr_buf() argument
203 struct bnxt_qplib_q *rq = &qp->rq; in bnxt_qplib_alloc_qp_hdr_buf()
204 struct bnxt_qplib_q *sq = &qp->sq; in bnxt_qplib_alloc_qp_hdr_buf()
207 if (qp->sq_hdr_buf_size && sq->max_wqe) { in bnxt_qplib_alloc_qp_hdr_buf()
208 qp->sq_hdr_buf = dma_alloc_coherent(&res->pdev->dev, in bnxt_qplib_alloc_qp_hdr_buf()
209 sq->max_wqe * qp->sq_hdr_buf_size, in bnxt_qplib_alloc_qp_hdr_buf()
210 &qp->sq_hdr_buf_map, GFP_KERNEL); in bnxt_qplib_alloc_qp_hdr_buf()
211 if (!qp->sq_hdr_buf) { in bnxt_qplib_alloc_qp_hdr_buf()
219 if (qp->rq_hdr_buf_size && rq->max_wqe) { in bnxt_qplib_alloc_qp_hdr_buf()
220 qp->rq_hdr_buf = dma_alloc_coherent(&res->pdev->dev, in bnxt_qplib_alloc_qp_hdr_buf()
222 qp->rq_hdr_buf_size, in bnxt_qplib_alloc_qp_hdr_buf()
223 &qp->rq_hdr_buf_map, in bnxt_qplib_alloc_qp_hdr_buf()
225 if (!qp->rq_hdr_buf) { in bnxt_qplib_alloc_qp_hdr_buf()
235 bnxt_qplib_free_qp_hdr_buf(res, qp); in bnxt_qplib_alloc_qp_hdr_buf()
824 /* QP */
844 int bnxt_qplib_create_qp1(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp) in bnxt_qplib_create_qp1() argument
850 struct bnxt_qplib_q *sq = &qp->sq; in bnxt_qplib_create_qp1()
851 struct bnxt_qplib_q *rq = &qp->rq; in bnxt_qplib_create_qp1()
864 req.type = qp->type; in bnxt_qplib_create_qp1()
865 req.dpi = cpu_to_le32(qp->dpi->dpi); in bnxt_qplib_create_qp1()
866 req.qp_handle = cpu_to_le64(qp->qp_handle); in bnxt_qplib_create_qp1()
872 hwq_attr.depth = bnxt_qplib_get_depth(sq, qp->wqe_mode, false); in bnxt_qplib_create_qp1()
882 req.sq_size = cpu_to_le32(bnxt_qplib_set_sq_size(sq, qp->wqe_mode)); in bnxt_qplib_create_qp1()
892 req.scq_cid = cpu_to_le32(qp->scq->id); in bnxt_qplib_create_qp1()
900 hwq_attr.depth = bnxt_qplib_get_depth(rq, qp->wqe_mode, false); in bnxt_qplib_create_qp1()
920 req.rcq_cid = cpu_to_le32(qp->rcq->id); in bnxt_qplib_create_qp1()
922 rc = bnxt_qplib_alloc_qp_hdr_buf(res, qp); in bnxt_qplib_create_qp1()
929 req.pd_id = cpu_to_le32(qp->pd->id); in bnxt_qplib_create_qp1()
936 qp->id = le32_to_cpu(resp.xid); in bnxt_qplib_create_qp1()
937 qp->cur_qp_state = CMDQ_MODIFY_QP_NEW_STATE_RESET; in bnxt_qplib_create_qp1()
938 qp->cctx = res->cctx; in bnxt_qplib_create_qp1()
940 sq->dbinfo.xid = qp->id; in bnxt_qplib_create_qp1()
941 sq->dbinfo.db = qp->dpi->dbr; in bnxt_qplib_create_qp1()
942 sq->dbinfo.max_slot = bnxt_qplib_set_sq_max_slot(qp->wqe_mode); in bnxt_qplib_create_qp1()
945 rq->dbinfo.xid = qp->id; in bnxt_qplib_create_qp1()
946 rq->dbinfo.db = qp->dpi->dbr; in bnxt_qplib_create_qp1()
949 tbl_indx = map_qp_id_to_tbl_indx(qp->id, rcfw); in bnxt_qplib_create_qp1()
950 rcfw->qp_tbl[tbl_indx].qp_id = qp->id; in bnxt_qplib_create_qp1()
951 rcfw->qp_tbl[tbl_indx].qp_handle = (void *)qp; in bnxt_qplib_create_qp1()
956 bnxt_qplib_free_qp_hdr_buf(res, qp); in bnxt_qplib_create_qp1()
968 static void bnxt_qplib_init_psn_ptr(struct bnxt_qplib_qp *qp, int size) in bnxt_qplib_init_psn_ptr() argument
975 sq = &qp->sq; in bnxt_qplib_init_psn_ptr()
986 int bnxt_qplib_create_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp) in bnxt_qplib_create_qp() argument
993 struct bnxt_qplib_q *sq = &qp->sq; in bnxt_qplib_create_qp()
994 struct bnxt_qplib_q *rq = &qp->rq; in bnxt_qplib_create_qp()
1004 qp->is_host_msn_tbl = _is_host_msn_table(res->dattr->dev_cap_flags2); in bnxt_qplib_create_qp()
1011 req.type = qp->type; in bnxt_qplib_create_qp()
1012 req.dpi = cpu_to_le32(qp->dpi->dpi); in bnxt_qplib_create_qp()
1013 req.qp_handle = cpu_to_le64(qp->qp_handle); in bnxt_qplib_create_qp()
1016 if (qp->type == CMDQ_CREATE_QP_TYPE_RC) { in bnxt_qplib_create_qp()
1021 if (qp->is_host_msn_tbl) { in bnxt_qplib_create_qp()
1023 qp->msn = 0; in bnxt_qplib_create_qp()
1030 hwq_attr.depth = bnxt_qplib_get_depth(sq, qp->wqe_mode, true); in bnxt_qplib_create_qp()
1032 hwq_attr.aux_depth = psn_sz ? bnxt_qplib_set_sq_size(sq, qp->wqe_mode) in bnxt_qplib_create_qp()
1035 if (qp->is_host_msn_tbl && psn_sz) { in bnxt_qplib_create_qp()
1036 if (qp->wqe_mode == BNXT_QPLIB_WQE_MODE_STATIC) in bnxt_qplib_create_qp()
1038 roundup_pow_of_two(bnxt_qplib_set_sq_size(sq, qp->wqe_mode)); in bnxt_qplib_create_qp()
1041 roundup_pow_of_two(bnxt_qplib_set_sq_size(sq, qp->wqe_mode)) / 2; in bnxt_qplib_create_qp()
1042 qp->msn_tbl_sz = hwq_attr.aux_depth; in bnxt_qplib_create_qp()
1043 qp->msn = 0; in bnxt_qplib_create_qp()
1057 bnxt_qplib_init_psn_ptr(qp, psn_sz); in bnxt_qplib_create_qp()
1059 req.sq_size = cpu_to_le32(bnxt_qplib_set_sq_size(sq, qp->wqe_mode)); in bnxt_qplib_create_qp()
1069 req.scq_cid = cpu_to_le32(qp->scq->id); in bnxt_qplib_create_qp()
1072 if (!qp->srq) { in bnxt_qplib_create_qp()
1077 hwq_attr.depth = bnxt_qplib_get_depth(rq, qp->wqe_mode, false); in bnxt_qplib_create_qp()
1097 nsge = (qp->wqe_mode == BNXT_QPLIB_WQE_MODE_STATIC) ? in bnxt_qplib_create_qp()
1106 req.srq_cid = cpu_to_le32(qp->srq->id); in bnxt_qplib_create_qp()
1108 req.rcq_cid = cpu_to_le32(qp->rcq->id); in bnxt_qplib_create_qp()
1112 if (qp->sig_type) in bnxt_qplib_create_qp()
1114 if (qp->wqe_mode == BNXT_QPLIB_WQE_MODE_VARIABLE) in bnxt_qplib_create_qp()
1123 xrrq = &qp->orrq; in bnxt_qplib_create_qp()
1125 ORD_LIMIT_TO_ORRQ_SLOTS(qp->max_rd_atomic); in bnxt_qplib_create_qp()
1145 xrrq = &qp->irrq; in bnxt_qplib_create_qp()
1147 qp->max_dest_rd_atomic); in bnxt_qplib_create_qp()
1161 req.pd_id = cpu_to_le32(qp->pd->id); in bnxt_qplib_create_qp()
1169 qp->id = le32_to_cpu(resp.xid); in bnxt_qplib_create_qp()
1170 qp->cur_qp_state = CMDQ_MODIFY_QP_NEW_STATE_RESET; in bnxt_qplib_create_qp()
1171 INIT_LIST_HEAD(&qp->sq_flush); in bnxt_qplib_create_qp()
1172 INIT_LIST_HEAD(&qp->rq_flush); in bnxt_qplib_create_qp()
1173 qp->cctx = res->cctx; in bnxt_qplib_create_qp()
1175 sq->dbinfo.xid = qp->id; in bnxt_qplib_create_qp()
1176 sq->dbinfo.db = qp->dpi->dbr; in bnxt_qplib_create_qp()
1177 sq->dbinfo.max_slot = bnxt_qplib_set_sq_max_slot(qp->wqe_mode); in bnxt_qplib_create_qp()
1180 rq->dbinfo.xid = qp->id; in bnxt_qplib_create_qp()
1181 rq->dbinfo.db = qp->dpi->dbr; in bnxt_qplib_create_qp()
1185 tbl_indx = map_qp_id_to_tbl_indx(qp->id, rcfw); in bnxt_qplib_create_qp()
1186 rcfw->qp_tbl[tbl_indx].qp_id = qp->id; in bnxt_qplib_create_qp()
1187 rcfw->qp_tbl[tbl_indx].qp_handle = (void *)qp; in bnxt_qplib_create_qp()
1192 bnxt_qplib_free_hwq(res, &qp->irrq); in bnxt_qplib_create_qp()
1194 bnxt_qplib_free_hwq(res, &qp->orrq); in bnxt_qplib_create_qp()
1206 static void __modify_flags_from_init_state(struct bnxt_qplib_qp *qp) in __modify_flags_from_init_state() argument
1208 switch (qp->state) { in __modify_flags_from_init_state()
1213 if (!(qp->modify_flags & in __modify_flags_from_init_state()
1215 qp->modify_flags |= in __modify_flags_from_init_state()
1217 qp->path_mtu = in __modify_flags_from_init_state()
1221 if (qp->max_dest_rd_atomic < 1) in __modify_flags_from_init_state()
1222 qp->max_dest_rd_atomic = 1; in __modify_flags_from_init_state()
1223 qp->modify_flags &= ~CMDQ_MODIFY_QP_MODIFY_MASK_SRC_MAC; in __modify_flags_from_init_state()
1225 if (!(qp->modify_flags & in __modify_flags_from_init_state()
1227 qp->modify_flags |= in __modify_flags_from_init_state()
1229 qp->ah.sgid_index = 0; in __modify_flags_from_init_state()
1237 static void __modify_flags_from_rtr_state(struct bnxt_qplib_qp *qp) in __modify_flags_from_rtr_state() argument
1239 switch (qp->state) { in __modify_flags_from_rtr_state()
1242 if (qp->max_rd_atomic < 1) in __modify_flags_from_rtr_state()
1243 qp->max_rd_atomic = 1; in __modify_flags_from_rtr_state()
1250 qp->modify_flags &= in __modify_flags_from_rtr_state()
1269 static void __filter_modify_flags(struct bnxt_qplib_qp *qp) in __filter_modify_flags() argument
1271 switch (qp->cur_qp_state) { in __filter_modify_flags()
1275 __modify_flags_from_init_state(qp); in __filter_modify_flags()
1278 __modify_flags_from_rtr_state(qp); in __filter_modify_flags()
1294 struct bnxt_qplib_qp *qp, in bnxt_set_mandatory_attributes() argument
1299 if (qp->type == CMDQ_MODIFY_QP_QP_TYPE_RC) in bnxt_set_mandatory_attributes()
1302 if (qp->cur_qp_state == CMDQ_MODIFY_QP_NEW_STATE_INIT && in bnxt_set_mandatory_attributes()
1303 qp->state == CMDQ_MODIFY_QP_NEW_STATE_RTR) { in bnxt_set_mandatory_attributes()
1304 if (qp->type == CMDQ_MODIFY_QP_QP_TYPE_RC && qp->srq) in bnxt_set_mandatory_attributes()
1310 (qp->cur_qp_state == CMDQ_MODIFY_QP_NEW_STATE_RTR && in bnxt_set_mandatory_attributes()
1311 qp->state == CMDQ_MODIFY_QP_NEW_STATE_RTS)) { in bnxt_set_mandatory_attributes()
1312 if (qp->type == CMDQ_MODIFY_QP_QP_TYPE_RC) in bnxt_set_mandatory_attributes()
1317 if (qp->type == CMDQ_MODIFY_QP_QP_TYPE_UD || in bnxt_set_mandatory_attributes()
1318 qp->type == CMDQ_MODIFY_QP_QP_TYPE_GSI) in bnxt_set_mandatory_attributes()
1321 qp->modify_flags |= mandatory_flags; in bnxt_set_mandatory_attributes()
1322 req->qp_type = qp->type; in bnxt_set_mandatory_attributes()
1325 static bool is_optimized_state_transition(struct bnxt_qplib_qp *qp) in is_optimized_state_transition() argument
1327 if ((qp->cur_qp_state == CMDQ_MODIFY_QP_NEW_STATE_INIT && in is_optimized_state_transition()
1328 qp->state == CMDQ_MODIFY_QP_NEW_STATE_RTR) || in is_optimized_state_transition()
1329 (qp->cur_qp_state == CMDQ_MODIFY_QP_NEW_STATE_RTR && in is_optimized_state_transition()
1330 qp->state == CMDQ_MODIFY_QP_NEW_STATE_RTS)) in is_optimized_state_transition()
1336 int bnxt_qplib_modify_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp) in bnxt_qplib_modify_qp() argument
1352 __filter_modify_flags(qp); in bnxt_qplib_modify_qp()
1353 if (qp->modify_flags & CMDQ_MODIFY_QP_MODIFY_MASK_STATE) { in bnxt_qplib_modify_qp()
1356 is_optimized_state_transition(qp)) in bnxt_qplib_modify_qp()
1357 bnxt_set_mandatory_attributes(res, qp, &req); in bnxt_qplib_modify_qp()
1359 bmask = qp->modify_flags; in bnxt_qplib_modify_qp()
1360 req.modify_mask = cpu_to_le32(qp->modify_flags); in bnxt_qplib_modify_qp()
1361 req.qp_cid = cpu_to_le32(qp->id); in bnxt_qplib_modify_qp()
1364 (qp->state & CMDQ_MODIFY_QP_NEW_STATE_MASK) | in bnxt_qplib_modify_qp()
1365 (qp->en_sqd_async_notify ? in bnxt_qplib_modify_qp()
1368 req.network_type_en_sqd_async_notify_new_state |= qp->nw_type; in bnxt_qplib_modify_qp()
1371 req.access = qp->access; in bnxt_qplib_modify_qp()
1377 req.qkey = cpu_to_le32(qp->qkey); in bnxt_qplib_modify_qp()
1380 memcpy(temp32, qp->ah.dgid.data, sizeof(struct bnxt_qplib_gid)); in bnxt_qplib_modify_qp()
1387 req.flow_label = cpu_to_le32(qp->ah.flow_label); in bnxt_qplib_modify_qp()
1391 [qp->ah.sgid_index]); in bnxt_qplib_modify_qp()
1394 req.hop_limit = qp->ah.hop_limit; in bnxt_qplib_modify_qp()
1397 req.traffic_class = qp->ah.traffic_class; in bnxt_qplib_modify_qp()
1400 memcpy(req.dest_mac, qp->ah.dmac, 6); in bnxt_qplib_modify_qp()
1403 req.path_mtu_pingpong_push_enable |= qp->path_mtu; in bnxt_qplib_modify_qp()
1406 req.timeout = qp->timeout; in bnxt_qplib_modify_qp()
1409 req.retry_cnt = qp->retry_cnt; in bnxt_qplib_modify_qp()
1412 req.rnr_retry = qp->rnr_retry; in bnxt_qplib_modify_qp()
1415 req.min_rnr_timer = qp->min_rnr_timer; in bnxt_qplib_modify_qp()
1418 req.rq_psn = cpu_to_le32(qp->rq.psn); in bnxt_qplib_modify_qp()
1421 req.sq_psn = cpu_to_le32(qp->sq.psn); in bnxt_qplib_modify_qp()
1425 ORD_LIMIT_TO_ORRQ_SLOTS(qp->max_rd_atomic); in bnxt_qplib_modify_qp()
1429 IRD_LIMIT_TO_IRRQ_SLOTS(qp->max_dest_rd_atomic); in bnxt_qplib_modify_qp()
1431 req.sq_size = cpu_to_le32(qp->sq.hwq.max_elements); in bnxt_qplib_modify_qp()
1432 req.rq_size = cpu_to_le32(qp->rq.hwq.max_elements); in bnxt_qplib_modify_qp()
1433 req.sq_sge = cpu_to_le16(qp->sq.max_sge); in bnxt_qplib_modify_qp()
1434 req.rq_sge = cpu_to_le16(qp->rq.max_sge); in bnxt_qplib_modify_qp()
1435 req.max_inline_data = cpu_to_le32(qp->max_inline_data); in bnxt_qplib_modify_qp()
1437 req.dest_qp_id = cpu_to_le32(qp->dest_qpn); in bnxt_qplib_modify_qp()
1441 ((res->sgid_tbl.tbl[qp->ah.sgid_index].vlan_id << in bnxt_qplib_modify_qp()
1445 ((qp->ah.sl << CMDQ_MODIFY_QP_VLAN_PCP_SFT) & in bnxt_qplib_modify_qp()
1454 qp->cur_qp_state = qp->state; in bnxt_qplib_modify_qp()
1458 int bnxt_qplib_query_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp) in bnxt_qplib_query_qp() argument
1480 req.qp_cid = cpu_to_le32(qp->id); in bnxt_qplib_query_qp()
1488 qp->state = sb->en_sqd_async_notify_state & in bnxt_qplib_query_qp()
1490 qp->en_sqd_async_notify = sb->en_sqd_async_notify_state & in bnxt_qplib_query_qp()
1492 qp->access = sb->access; in bnxt_qplib_query_qp()
1493 qp->pkey_index = le16_to_cpu(sb->pkey); in bnxt_qplib_query_qp()
1494 qp->qkey = le32_to_cpu(sb->qkey); in bnxt_qplib_query_qp()
1500 memcpy(qp->ah.dgid.data, temp32, sizeof(qp->ah.dgid.data)); in bnxt_qplib_query_qp()
1502 qp->ah.flow_label = le32_to_cpu(sb->flow_label); in bnxt_qplib_query_qp()
1504 qp->ah.sgid_index = 0; in bnxt_qplib_query_qp()
1507 qp->ah.sgid_index = i; in bnxt_qplib_query_qp()
1514 qp->ah.hop_limit = sb->hop_limit; in bnxt_qplib_query_qp()
1515 qp->ah.traffic_class = sb->traffic_class; in bnxt_qplib_query_qp()
1516 memcpy(qp->ah.dmac, sb->dest_mac, 6); in bnxt_qplib_query_qp()
1517 qp->ah.vlan_id = (le16_to_cpu(sb->path_mtu_dest_vlan_id) & in bnxt_qplib_query_qp()
1520 qp->path_mtu = (le16_to_cpu(sb->path_mtu_dest_vlan_id) & in bnxt_qplib_query_qp()
1523 qp->timeout = sb->timeout; in bnxt_qplib_query_qp()
1524 qp->retry_cnt = sb->retry_cnt; in bnxt_qplib_query_qp()
1525 qp->rnr_retry = sb->rnr_retry; in bnxt_qplib_query_qp()
1526 qp->min_rnr_timer = sb->min_rnr_timer; in bnxt_qplib_query_qp()
1527 qp->rq.psn = le32_to_cpu(sb->rq_psn); in bnxt_qplib_query_qp()
1528 qp->max_rd_atomic = ORRQ_SLOTS_TO_ORD_LIMIT(sb->max_rd_atomic); in bnxt_qplib_query_qp()
1529 qp->sq.psn = le32_to_cpu(sb->sq_psn); in bnxt_qplib_query_qp()
1530 qp->max_dest_rd_atomic = in bnxt_qplib_query_qp()
1532 qp->sq.max_wqe = qp->sq.hwq.max_elements; in bnxt_qplib_query_qp()
1533 qp->rq.max_wqe = qp->rq.hwq.max_elements; in bnxt_qplib_query_qp()
1534 qp->sq.max_sge = le16_to_cpu(sb->sq_sge); in bnxt_qplib_query_qp()
1535 qp->rq.max_sge = le16_to_cpu(sb->rq_sge); in bnxt_qplib_query_qp()
1536 qp->max_inline_data = le32_to_cpu(sb->max_inline_data); in bnxt_qplib_query_qp()
1537 qp->dest_qpn = le32_to_cpu(sb->dest_qp_id); in bnxt_qplib_query_qp()
1538 memcpy(qp->smac, sb->src_mac, 6); in bnxt_qplib_query_qp()
1539 qp->vlan_id = le16_to_cpu(sb->vlan_pcp_vlan_dei_vlan_id); in bnxt_qplib_query_qp()
1540 qp->port_id = le16_to_cpu(sb->port_id); in bnxt_qplib_query_qp()
1547 static void __clean_cq(struct bnxt_qplib_cq *cq, u64 qp) in __clean_cq() argument
1571 if (qp == le64_to_cpu(cqe->qp_handle)) in __clean_cq()
1581 if (qp == le64_to_cpu(cqe->qp_handle)) in __clean_cq()
1594 struct bnxt_qplib_qp *qp) in bnxt_qplib_destroy_qp() argument
1604 tbl_indx = map_qp_id_to_tbl_indx(qp->id, rcfw); in bnxt_qplib_destroy_qp()
1613 req.qp_cid = cpu_to_le32(qp->id); in bnxt_qplib_destroy_qp()
1619 rcfw->qp_tbl[tbl_indx].qp_id = qp->id; in bnxt_qplib_destroy_qp()
1620 rcfw->qp_tbl[tbl_indx].qp_handle = qp; in bnxt_qplib_destroy_qp()
1629 struct bnxt_qplib_qp *qp) in bnxt_qplib_free_qp_res() argument
1631 bnxt_qplib_free_qp_hdr_buf(res, qp); in bnxt_qplib_free_qp_res()
1632 bnxt_qplib_free_hwq(res, &qp->sq.hwq); in bnxt_qplib_free_qp_res()
1633 kfree(qp->sq.swq); in bnxt_qplib_free_qp_res()
1635 bnxt_qplib_free_hwq(res, &qp->rq.hwq); in bnxt_qplib_free_qp_res()
1636 kfree(qp->rq.swq); in bnxt_qplib_free_qp_res()
1638 if (qp->irrq.max_elements) in bnxt_qplib_free_qp_res()
1639 bnxt_qplib_free_hwq(res, &qp->irrq); in bnxt_qplib_free_qp_res()
1640 if (qp->orrq.max_elements) in bnxt_qplib_free_qp_res()
1641 bnxt_qplib_free_hwq(res, &qp->orrq); in bnxt_qplib_free_qp_res()
1645 void *bnxt_qplib_get_qp1_sq_buf(struct bnxt_qplib_qp *qp, in bnxt_qplib_get_qp1_sq_buf() argument
1648 struct bnxt_qplib_q *sq = &qp->sq; in bnxt_qplib_get_qp1_sq_buf()
1653 if (qp->sq_hdr_buf) { in bnxt_qplib_get_qp1_sq_buf()
1655 sge->addr = (dma_addr_t)(qp->sq_hdr_buf_map + in bnxt_qplib_get_qp1_sq_buf()
1656 sw_prod * qp->sq_hdr_buf_size); in bnxt_qplib_get_qp1_sq_buf()
1658 sge->size = qp->sq_hdr_buf_size; in bnxt_qplib_get_qp1_sq_buf()
1659 return qp->sq_hdr_buf + sw_prod * sge->size; in bnxt_qplib_get_qp1_sq_buf()
1664 u32 bnxt_qplib_get_rq_prod_index(struct bnxt_qplib_qp *qp) in bnxt_qplib_get_rq_prod_index() argument
1666 struct bnxt_qplib_q *rq = &qp->rq; in bnxt_qplib_get_rq_prod_index()
1671 dma_addr_t bnxt_qplib_get_qp_buf_from_index(struct bnxt_qplib_qp *qp, u32 index) in bnxt_qplib_get_qp_buf_from_index() argument
1673 return (qp->rq_hdr_buf_map + index * qp->rq_hdr_buf_size); in bnxt_qplib_get_qp_buf_from_index()
1676 void *bnxt_qplib_get_qp1_rq_buf(struct bnxt_qplib_qp *qp, in bnxt_qplib_get_qp1_rq_buf() argument
1679 struct bnxt_qplib_q *rq = &qp->rq; in bnxt_qplib_get_qp1_rq_buf()
1684 if (qp->rq_hdr_buf) { in bnxt_qplib_get_qp1_rq_buf()
1686 sge->addr = (dma_addr_t)(qp->rq_hdr_buf_map + in bnxt_qplib_get_qp1_rq_buf()
1687 sw_prod * qp->rq_hdr_buf_size); in bnxt_qplib_get_qp1_rq_buf()
1689 sge->size = qp->rq_hdr_buf_size; in bnxt_qplib_get_qp1_rq_buf()
1690 return qp->rq_hdr_buf + sw_prod * sge->size; in bnxt_qplib_get_qp1_rq_buf()
1696 static void bnxt_qplib_fill_msn_search(struct bnxt_qplib_qp *qp, in bnxt_qplib_fill_msn_search() argument
1712 qp->msn++; in bnxt_qplib_fill_msn_search()
1713 qp->msn %= qp->msn_tbl_sz; in bnxt_qplib_fill_msn_search()
1716 static void bnxt_qplib_fill_psn_search(struct bnxt_qplib_qp *qp, in bnxt_qplib_fill_psn_search() argument
1728 if (qp->is_host_msn_tbl) { in bnxt_qplib_fill_psn_search()
1729 bnxt_qplib_fill_msn_search(qp, wqe, swq); in bnxt_qplib_fill_psn_search()
1743 if (bnxt_qplib_is_chip_gen_p5_p7(qp->cctx)) { in bnxt_qplib_fill_psn_search()
1753 static int bnxt_qplib_put_inline(struct bnxt_qplib_qp *qp, in bnxt_qplib_put_inline() argument
1765 hwq = &qp->sq.hwq; in bnxt_qplib_put_inline()
1771 if (t_len > qp->max_inline_data) in bnxt_qplib_put_inline()
1816 static u16 bnxt_qplib_required_slots(struct bnxt_qplib_qp *qp, in bnxt_qplib_required_slots() argument
1828 ilsize = bnxt_qplib_calc_ilsize(wqe, qp->max_inline_data); in bnxt_qplib_required_slots()
1833 *qdf = __xlate_qfd(qp->sq.q_full_delta, bytes); in bnxt_qplib_required_slots()
1841 static void bnxt_qplib_pull_psn_buff(struct bnxt_qplib_qp *qp, struct bnxt_qplib_q *sq, in bnxt_qplib_pull_psn_buff() argument
1854 /* For HW retx use qp msn index */ in bnxt_qplib_pull_psn_buff()
1855 tail = qp->msn; in bnxt_qplib_pull_psn_buff()
1856 tail %= qp->msn_tbl_sz; in bnxt_qplib_pull_psn_buff()
1865 void bnxt_qplib_post_send_db(struct bnxt_qplib_qp *qp) in bnxt_qplib_post_send_db() argument
1867 struct bnxt_qplib_q *sq = &qp->sq; in bnxt_qplib_post_send_db()
1872 int bnxt_qplib_post_send(struct bnxt_qplib_qp *qp, in bnxt_qplib_post_send() argument
1877 struct bnxt_qplib_q *sq = &qp->sq; in bnxt_qplib_post_send()
1891 if (qp->state != CMDQ_MODIFY_QP_NEW_STATE_RTS && in bnxt_qplib_post_send()
1892 qp->state != CMDQ_MODIFY_QP_NEW_STATE_ERR) { in bnxt_qplib_post_send()
1894 "QPLIB: FP: QP (0x%x) is in the 0x%x state", in bnxt_qplib_post_send()
1895 qp->id, qp->state); in bnxt_qplib_post_send()
1900 slots = bnxt_qplib_required_slots(qp, wqe, &wqe_sz, &qdf, qp->wqe_mode); in bnxt_qplib_post_send()
1910 bnxt_qplib_pull_psn_buff(qp, sq, swq, qp->is_host_msn_tbl); in bnxt_qplib_post_send()
1919 if (qp->sig_type) in bnxt_qplib_post_send()
1922 if (qp->state == CMDQ_MODIFY_QP_NEW_STATE_ERR) { in bnxt_qplib_post_send()
1925 "%s Error QP. Scheduling for poll_cq\n", __func__); in bnxt_qplib_post_send()
1936 data_len = bnxt_qplib_put_inline(qp, wqe, &idx); in bnxt_qplib_post_send()
1947 if (qp->type == CMDQ_CREATE_QP1_TYPE_GSI) { in bnxt_qplib_post_send()
1975 if (qp->type == CMDQ_CREATE_QP_TYPE_UD || in bnxt_qplib_post_send()
1976 qp->type == CMDQ_CREATE_QP_TYPE_GSI) { in bnxt_qplib_post_send()
1987 if (qp->mtu) in bnxt_qplib_post_send()
1988 pkt_num = (data_len + qp->mtu - 1) / qp->mtu; in bnxt_qplib_post_send()
2009 if (qp->mtu) in bnxt_qplib_post_send()
2010 pkt_num = (data_len + qp->mtu - 1) / qp->mtu; in bnxt_qplib_post_send()
2028 if (qp->mtu) in bnxt_qplib_post_send()
2029 pkt_num = (data_len + qp->mtu - 1) / qp->mtu; in bnxt_qplib_post_send()
2100 if (!qp->is_host_msn_tbl || msn_update) { in bnxt_qplib_post_send()
2102 bnxt_qplib_fill_psn_search(qp, wqe, swq); in bnxt_qplib_post_send()
2107 qp->wqe_cnt++; in bnxt_qplib_post_send()
2112 nq_work->cq = qp->scq; in bnxt_qplib_post_send()
2113 nq_work->nq = qp->scq->nq; in bnxt_qplib_post_send()
2115 queue_work(qp->scq->nq->cqn_wq, &nq_work->work); in bnxt_qplib_post_send()
2125 void bnxt_qplib_post_recv_db(struct bnxt_qplib_qp *qp) in bnxt_qplib_post_recv_db() argument
2127 struct bnxt_qplib_q *rq = &qp->rq; in bnxt_qplib_post_recv_db()
2132 int bnxt_qplib_post_recv(struct bnxt_qplib_qp *qp, in bnxt_qplib_post_recv() argument
2136 struct bnxt_qplib_q *rq = &qp->rq; in bnxt_qplib_post_recv()
2147 if (qp->state == CMDQ_MODIFY_QP_NEW_STATE_RESET) { in bnxt_qplib_post_recv()
2149 "QPLIB: FP: QP (0x%x) is in the 0x%x state", in bnxt_qplib_post_recv()
2150 qp->id, qp->state); in bnxt_qplib_post_recv()
2157 "FP: QP (0x%x) RQ is full!\n", qp->id); in bnxt_qplib_post_recv()
2166 if (qp->state == CMDQ_MODIFY_QP_NEW_STATE_ERR) { in bnxt_qplib_post_recv()
2169 "%s: Error QP. Scheduling for poll_cq\n", __func__); in bnxt_qplib_post_recv()
2199 nq_work->cq = qp->rcq; in bnxt_qplib_post_recv()
2200 nq_work->nq = qp->rcq->nq; in bnxt_qplib_post_recv()
2202 queue_work(qp->rcq->nq->cqn_wq, &nq_work->work); in bnxt_qplib_post_recv()
2381 static int __flush_sq(struct bnxt_qplib_q *sq, struct bnxt_qplib_qp *qp, in __flush_sq() argument
2397 bnxt_qplib_cancel_phantom_processing(qp); in __flush_sq()
2403 cqe->qp_handle = (u64)(unsigned long)qp; in __flush_sq()
2405 cqe->src_qp = qp->id; in __flush_sq()
2422 static int __flush_rq(struct bnxt_qplib_q *rq, struct bnxt_qplib_qp *qp, in __flush_rq() argument
2430 switch (qp->type) { in __flush_rq()
2454 cqe->qp_handle = (unsigned long)qp; in __flush_rq()
2472 struct bnxt_qplib_qp *qp = qp_handle; in bnxt_qplib_mark_qp_error() local
2474 if (!qp) in bnxt_qplib_mark_qp_error()
2478 qp->state = CMDQ_MODIFY_QP_NEW_STATE_ERR; in bnxt_qplib_mark_qp_error()
2479 bnxt_qplib_cancel_phantom_processing(qp); in bnxt_qplib_mark_qp_error()
2485 static int do_wa9060(struct bnxt_qplib_qp *qp, struct bnxt_qplib_cq *cq, in do_wa9060() argument
2489 struct bnxt_qplib_q *sq = &qp->sq; in do_wa9060()
2507 "FP: Process Req cq_cons=0x%x qp=0x%x sq cons sw=0x%x cqe=0x%x marked!\n", in do_wa9060()
2508 cq_cons, qp->id, swq_last, cqe_sq_cons); in do_wa9060()
2574 "Should not have come here! cq_cons=0x%x qp=0x%x sq cons sw=0x%x hw=0x%x\n", in do_wa9060()
2575 cq_cons, qp->id, swq_last, cqe_sq_cons); in do_wa9060()
2616 struct bnxt_qplib_qp *qp; in bnxt_qplib_cq_process_req() local
2621 qp = (struct bnxt_qplib_qp *)((unsigned long) in bnxt_qplib_cq_process_req()
2623 if (!qp) { in bnxt_qplib_cq_process_req()
2625 "FP: Process Req qp is NULL\n"); in bnxt_qplib_cq_process_req()
2628 sq = &qp->sq; in bnxt_qplib_cq_process_req()
2631 if (qp->sq.flushed) { in bnxt_qplib_cq_process_req()
2633 "%s: QP in Flush QP = %p\n", __func__, qp); in bnxt_qplib_cq_process_req()
2637 if (__is_err_cqe_for_var_wqe(qp, hwcqe->status)) { in bnxt_qplib_cq_process_req()
2663 cqe->qp_handle = (u64)(unsigned long)qp; in bnxt_qplib_cq_process_req()
2664 cqe->src_qp = qp->id; in bnxt_qplib_cq_process_req()
2682 bnxt_qplib_mark_qp_error(qp); in bnxt_qplib_cq_process_req()
2683 /* Add qp to flush list of the CQ */ in bnxt_qplib_cq_process_req()
2684 bnxt_qplib_add_flush_qp(qp); in bnxt_qplib_cq_process_req()
2687 if (!bnxt_qplib_is_chip_gen_p5_p7(qp->cctx)) { in bnxt_qplib_cq_process_req()
2688 if (do_wa9060(qp, cq, cq_cons, sq->swq_last, in bnxt_qplib_cq_process_req()
2690 *lib_qp = qp; in bnxt_qplib_cq_process_req()
2741 struct bnxt_qplib_qp *qp; in bnxt_qplib_cq_process_res_rc() local
2745 qp = (struct bnxt_qplib_qp *)((unsigned long) in bnxt_qplib_cq_process_res_rc()
2747 if (!qp) { in bnxt_qplib_cq_process_res_rc()
2748 dev_err(&cq->hwq.pdev->dev, "process_cq RC qp is NULL\n"); in bnxt_qplib_cq_process_res_rc()
2751 if (qp->rq.flushed) { in bnxt_qplib_cq_process_res_rc()
2753 "%s: QP in Flush QP = %p\n", __func__, qp); in bnxt_qplib_cq_process_res_rc()
2764 cqe->qp_handle = (u64)(unsigned long)qp; in bnxt_qplib_cq_process_res_rc()
2769 srq = qp->srq; in bnxt_qplib_cq_process_res_rc()
2786 rq = &qp->rq; in bnxt_qplib_cq_process_res_rc()
2805 qp->state = CMDQ_MODIFY_QP_NEW_STATE_ERR; in bnxt_qplib_cq_process_res_rc()
2806 /* Add qp to flush list of the CQ */ in bnxt_qplib_cq_process_res_rc()
2807 bnxt_qplib_add_flush_qp(qp); in bnxt_qplib_cq_process_res_rc()
2821 struct bnxt_qplib_qp *qp; in bnxt_qplib_cq_process_res_ud() local
2825 qp = (struct bnxt_qplib_qp *)((unsigned long) in bnxt_qplib_cq_process_res_ud()
2827 if (!qp) { in bnxt_qplib_cq_process_res_ud()
2828 dev_err(&cq->hwq.pdev->dev, "process_cq UD qp is NULL\n"); in bnxt_qplib_cq_process_res_ud()
2831 if (qp->rq.flushed) { in bnxt_qplib_cq_process_res_ud()
2833 "%s: QP in Flush QP = %p\n", __func__, qp); in bnxt_qplib_cq_process_res_ud()
2843 cqe->qp_handle = (u64)(unsigned long)qp; in bnxt_qplib_cq_process_res_ud()
2854 srq = qp->srq; in bnxt_qplib_cq_process_res_ud()
2872 rq = &qp->rq; in bnxt_qplib_cq_process_res_ud()
2892 qp->state = CMDQ_MODIFY_QP_NEW_STATE_ERR; in bnxt_qplib_cq_process_res_ud()
2893 /* Add qp to flush list of the CQ */ in bnxt_qplib_cq_process_res_ud()
2894 bnxt_qplib_add_flush_qp(qp); in bnxt_qplib_cq_process_res_ud()
2917 struct bnxt_qplib_qp *qp; in bnxt_qplib_cq_process_res_raweth_qp1() local
2923 qp = (struct bnxt_qplib_qp *)((unsigned long) in bnxt_qplib_cq_process_res_raweth_qp1()
2925 if (!qp) { in bnxt_qplib_cq_process_res_raweth_qp1()
2926 dev_err(&cq->hwq.pdev->dev, "process_cq Raw/QP1 qp is NULL\n"); in bnxt_qplib_cq_process_res_raweth_qp1()
2929 if (qp->rq.flushed) { in bnxt_qplib_cq_process_res_raweth_qp1()
2931 "%s: QP in Flush QP = %p\n", __func__, qp); in bnxt_qplib_cq_process_res_raweth_qp1()
2937 cqe->qp_handle = (u64)(unsigned long)qp; in bnxt_qplib_cq_process_res_raweth_qp1()
2942 cqe->src_qp = qp->id; in bnxt_qplib_cq_process_res_raweth_qp1()
2943 if (qp->id == 1 && !cqe->length) { in bnxt_qplib_cq_process_res_raweth_qp1()
2949 cqe->pkey_index = qp->pkey_index; in bnxt_qplib_cq_process_res_raweth_qp1()
2950 memcpy(cqe->smac, qp->smac, 6); in bnxt_qplib_cq_process_res_raweth_qp1()
2957 srq = qp->srq; in bnxt_qplib_cq_process_res_raweth_qp1()
2977 rq = &qp->rq; in bnxt_qplib_cq_process_res_raweth_qp1()
2996 qp->state = CMDQ_MODIFY_QP_NEW_STATE_ERR; in bnxt_qplib_cq_process_res_raweth_qp1()
2997 /* Add qp to flush list of the CQ */ in bnxt_qplib_cq_process_res_raweth_qp1()
2998 bnxt_qplib_add_flush_qp(qp); in bnxt_qplib_cq_process_res_raweth_qp1()
3010 struct bnxt_qplib_qp *qp; in bnxt_qplib_cq_process_terminal() local
3022 qp = (struct bnxt_qplib_qp *)((unsigned long) in bnxt_qplib_cq_process_terminal()
3024 if (!qp) in bnxt_qplib_cq_process_terminal()
3028 qp->state = CMDQ_MODIFY_QP_NEW_STATE_ERR; in bnxt_qplib_cq_process_terminal()
3030 sq = &qp->sq; in bnxt_qplib_cq_process_terminal()
3031 rq = &qp->rq; in bnxt_qplib_cq_process_terminal()
3038 if (qp->sq.flushed) { in bnxt_qplib_cq_process_terminal()
3040 "%s: QP in Flush QP = %p\n", __func__, qp); in bnxt_qplib_cq_process_terminal()
3057 cqe->qp_handle = (u64)(unsigned long)qp; in bnxt_qplib_cq_process_terminal()
3058 cqe->src_qp = qp->id; in bnxt_qplib_cq_process_terminal()
3089 if (qp->rq.flushed) { in bnxt_qplib_cq_process_terminal()
3091 "%s: QP in Flush QP = %p\n", __func__, qp); in bnxt_qplib_cq_process_terminal()
3101 /* Add qp to flush list of the CQ */ in bnxt_qplib_cq_process_terminal()
3102 bnxt_qplib_add_flush_qp(qp); in bnxt_qplib_cq_process_terminal()
3127 struct bnxt_qplib_qp *qp = NULL; in bnxt_qplib_process_flush_list() local
3132 list_for_each_entry(qp, &cq->sqf_head, sq_flush) { in bnxt_qplib_process_flush_list()
3133 dev_dbg(&cq->hwq.pdev->dev, "FP: Flushing SQ QP= %p\n", qp); in bnxt_qplib_process_flush_list()
3134 __flush_sq(&qp->sq, qp, &cqe, &budget); in bnxt_qplib_process_flush_list()
3137 list_for_each_entry(qp, &cq->rqf_head, rq_flush) { in bnxt_qplib_process_flush_list()
3138 dev_dbg(&cq->hwq.pdev->dev, "FP: Flushing RQ QP= %p\n", qp); in bnxt_qplib_process_flush_list()
3139 __flush_rq(&qp->rq, qp, &cqe, &budget); in bnxt_qplib_process_flush_list()
3241 void bnxt_qplib_flush_cqn_wq(struct bnxt_qplib_qp *qp) in bnxt_qplib_flush_cqn_wq() argument
3243 flush_workqueue(qp->scq->nq->cqn_wq); in bnxt_qplib_flush_cqn_wq()
3244 if (qp->scq != qp->rcq) in bnxt_qplib_flush_cqn_wq()
3245 flush_workqueue(qp->rcq->nq->cqn_wq); in bnxt_qplib_flush_cqn_wq()