Lines Matching full:wc
117 static void handle_good_req(struct ib_wc *wc, struct mlx5_cqe64 *cqe,
120 wc->wc_flags = 0;
123 wc->wc_flags |= IB_WC_WITH_IMM;
125 wc->opcode = IB_WC_RDMA_WRITE;
128 wc->wc_flags |= IB_WC_WITH_IMM;
131 wc->opcode = IB_WC_SEND;
134 wc->opcode = IB_WC_RDMA_READ;
135 wc->byte_len = be32_to_cpu(cqe->byte_cnt);
138 wc->opcode = IB_WC_COMP_SWAP;
139 wc->byte_len = 8;
142 wc->opcode = IB_WC_FETCH_ADD;
143 wc->byte_len = 8;
146 wc->opcode = IB_WC_MASKED_COMP_SWAP;
147 wc->byte_len = 8;
150 wc->opcode = IB_WC_MASKED_FETCH_ADD;
151 wc->byte_len = 8;
154 wc->opcode = get_umr_comp(wq, idx);
164 static void handle_responder(struct ib_wc *wc, struct mlx5_cqe64 *cqe,
188 wc->wr_id = srq->wrid[wqe_ctr];
195 wc->wr_id = wq->wrid[wq->tail & (wq->wqe_cnt - 1)];
198 wc->byte_len = be32_to_cpu(cqe->byte_cnt);
202 wc->opcode = IB_WC_RECV_RDMA_WITH_IMM;
203 wc->wc_flags = IB_WC_WITH_IMM;
204 wc->ex.imm_data = cqe->immediate;
207 wc->opcode = IB_WC_RECV;
208 wc->wc_flags = IB_WC_IP_CSUM_OK;
211 wc->wc_flags = 0;
214 wc->opcode = IB_WC_RECV;
215 wc->wc_flags = IB_WC_WITH_IMM;
216 wc->ex.imm_data = cqe->immediate;
219 wc->opcode = IB_WC_RECV;
220 wc->wc_flags = IB_WC_WITH_INVALIDATE;
221 wc->ex.invalidate_rkey = be32_to_cpu(cqe->inval_rkey);
224 wc->src_qp = be32_to_cpu(cqe->flags_rqpn) & 0xffffff;
225 wc->dlid_path_bits = cqe->ml_path;
227 wc->wc_flags |= g ? IB_WC_GRH : 0;
232 &wc->pkey_index);
234 wc->pkey_index = 0;
238 wc->slid = be16_to_cpu(cqe->slid);
239 wc->sl = (be32_to_cpu(cqe->flags_rqpn) >> 24) & 0xf;
243 wc->slid = 0;
247 wc->vlan_id = (be16_to_cpu(cqe->vlan_info)) & 0xfff;
248 wc->sl = (be16_to_cpu(cqe->vlan_info) >> 13) & 0x7;
249 wc->wc_flags |= IB_WC_WITH_VLAN;
251 wc->sl = 0;
256 wc->network_hdr_type = RDMA_NETWORK_IB;
259 wc->network_hdr_type = RDMA_NETWORK_IPV6;
262 wc->network_hdr_type = RDMA_NETWORK_IPV4;
265 wc->wc_flags |= IB_WC_WITH_NETWORK_HDR_TYPE;
282 struct ib_wc *wc)
288 wc->status = IB_WC_LOC_LEN_ERR;
291 wc->status = IB_WC_LOC_QP_OP_ERR;
294 wc->status = IB_WC_LOC_PROT_ERR;
298 wc->status = IB_WC_WR_FLUSH_ERR;
301 wc->status = IB_WC_MW_BIND_ERR;
304 wc->status = IB_WC_BAD_RESP_ERR;
307 wc->status = IB_WC_LOC_ACCESS_ERR;
310 wc->status = IB_WC_REM_INV_REQ_ERR;
313 wc->status = IB_WC_REM_ACCESS_ERR;
316 wc->status = IB_WC_REM_OP_ERR;
319 wc->status = IB_WC_RETRY_EXC_ERR;
323 wc->status = IB_WC_RNR_RETRY_EXC_ERR;
327 wc->status = IB_WC_REM_ABORT_ERR;
330 wc->status = IB_WC_GENERAL_ERR;
334 wc->vendor_err = cqe->vendor_err_synd;
438 struct ib_wc *wc, int *npolled)
455 wc->wr_id = wq->wrid[idx];
456 wc->status = IB_WC_WR_FLUSH_ERR;
457 wc->vendor_err = MLX5_CQE_SYNDROME_WR_FLUSH_ERR;
460 wc->qp = &qp->ibqp;
461 wc++;
468 struct ib_wc *wc, int *npolled)
483 wc->wr_id = wq->wrid[wq->tail & (wq->wqe_cnt - 1)];
484 wc->status = IB_WC_WR_FLUSH_ERR;
485 wc->vendor_err = MLX5_CQE_SYNDROME_WR_FLUSH_ERR;
488 wc->qp = &qp->ibqp;
489 wc++;
495 struct ib_wc *wc, int *npolled)
502 sw_send_comp(qp, num_entries, wc + *npolled, npolled);
508 sw_recv_comp(qp, num_entries, wc + *npolled, npolled);
516 struct ib_wc *wc)
570 wc->qp = &(*cur_qp)->ibqp;
576 handle_good_req(wc, cqe64, wq, idx);
578 wc->wr_id = wq->wrid[idx];
580 wc->status = IB_WC_SUCCESS;
586 handle_responder(wc, cqe64, *cur_qp);
587 wc->status = IB_WC_SUCCESS;
594 mlx5_handle_error_cqe(dev, err_cqe, wc);
604 wc->wr_id = wq->wrid[idx];
612 wc->wr_id = srq->wrid[wqe_ctr];
616 wc->wr_id = wq->wrid[wq->tail & (wq->wqe_cnt - 1)];
647 struct ib_wc *wc)
660 wc[npolled++] = soft_wc->wc;
668 int mlx5_ib_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc)
680 mlx5_ib_poll_sw_comp(cq, num_entries, wc, &npolled);
685 soft_polled = poll_soft_wc(cq, num_entries, wc);
688 if (mlx5_poll_one(cq, &cur_qp, wc + soft_polled + npolled))
1380 int mlx5_ib_generate_wc(struct ib_cq *ibcq, struct ib_wc *wc)
1390 soft_wc->wc = *wc;
1394 wc->status != IB_WC_SUCCESS) {