Lines Matching defs:wq

275 		   struct t3_wq *wq, struct cxio_ucontext *uctx)
277 int depth = 1UL << wq->size_log2;
278 int rqsize = 1UL << wq->rq_size_log2;
280 wq->qpid = get_qpid(rdev_p, uctx);
281 if (!wq->qpid)
284 wq->rq = kzalloc(depth * sizeof(struct t3_swrq), GFP_KERNEL);
285 if (!wq->rq)
288 wq->rq_addr = cxio_hal_rqtpool_alloc(rdev_p, rqsize);
289 if (!wq->rq_addr)
292 wq->sq = kzalloc(depth * sizeof(struct t3_swsq), GFP_KERNEL);
293 if (!wq->sq)
296 wq->queue = dma_alloc_coherent(&(rdev_p->rnic_info.pdev->dev),
298 &(wq->dma_addr), GFP_KERNEL);
299 if (!wq->queue)
302 memset(wq->queue, 0, depth * sizeof(union t3_wr));
303 dma_unmap_addr_set(wq, mapping, wq->dma_addr);
304 wq->doorbell = (void __iomem *)rdev_p->rnic_info.kdb_addr;
306 wq->udb = (u64)rdev_p->rnic_info.udbell_physbase +
307 (wq->qpid << rdev_p->qpshift);
308 wq->rdev = rdev_p;
310 wq->qpid, wq->doorbell, (unsigned long long) wq->udb);
313 kfree(wq->sq);
315 cxio_hal_rqtpool_free(rdev_p, wq->rq_addr, rqsize);
317 kfree(wq->rq);
319 put_qpid(rdev_p, wq->qpid, uctx);
336 int cxio_destroy_qp(struct cxio_rdev *rdev_p, struct t3_wq *wq,
340 (1UL << (wq->size_log2))
341 * sizeof(union t3_wr), wq->queue,
342 dma_unmap_addr(wq, mapping));
343 kfree(wq->sq);
344 cxio_hal_rqtpool_free(rdev_p, wq->rq_addr, (1UL << wq->rq_size_log2));
345 kfree(wq->rq);
346 put_qpid(rdev_p, wq->qpid, uctx);
350 static void insert_recv_cqe(struct t3_wq *wq, struct t3_cq *cq)
354 PDBG("%s wq %p cq %p sw_rptr 0x%x sw_wptr 0x%x\n", __func__,
355 wq, cq, cq->sw_rptr, cq->sw_wptr);
361 V_CQE_QPID(wq->qpid) |
368 int cxio_flush_rq(struct t3_wq *wq, struct t3_cq *cq, int count)
373 PDBG("%s wq %p cq %p\n", __func__, wq, cq);
377 wq->rq_rptr, wq->rq_wptr, count);
378 ptr = wq->rq_rptr + count;
379 while (ptr++ != wq->rq_wptr) {
380 insert_recv_cqe(wq, cq);
386 static void insert_sq_cqe(struct t3_wq *wq, struct t3_cq *cq,
391 PDBG("%s wq %p cq %p sw_rptr 0x%x sw_wptr 0x%x\n", __func__,
392 wq, cq, cq->sw_rptr, cq->sw_wptr);
398 V_CQE_QPID(wq->qpid) |
407 int cxio_flush_sq(struct t3_wq *wq, struct t3_cq *cq, int count)
411 struct t3_swsq *sqp = wq->sq + Q_PTR2IDX(wq->sq_rptr, wq->sq_size_log2);
413 ptr = wq->sq_rptr + count;
414 sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2);
415 while (ptr != wq->sq_wptr) {
417 insert_sq_cqe(wq, cq, sqp);
419 sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2);
446 static int cqe_completes_wr(struct t3_cqe *cqe, struct t3_wq *wq)
458 Q_EMPTY(wq->rq_rptr, wq->rq_wptr))
464 void cxio_count_scqes(struct t3_cq *cq, struct t3_wq *wq, int *count)
474 ((CQE_OPCODE(*cqe) == T3_READ_RESP) && wq->oldest_read)) &&
475 (CQE_QPID(*cqe) == wq->qpid))
482 void cxio_count_rcqes(struct t3_cq *cq, struct t3_wq *wq, int *count)
493 (CQE_QPID(*cqe) == wq->qpid) && cqe_completes_wr(cqe, wq))
1073 static void flush_completed_wrs(struct t3_wq *wq, struct t3_cq *cq)
1076 __u32 ptr = wq->sq_rptr;
1077 int count = Q_COUNT(wq->sq_rptr, wq->sq_wptr);
1079 sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2);
1083 sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2);
1090 __func__, Q_PTR2IDX(ptr, wq->sq_size_log2),
1102 static void create_read_req_cqe(struct t3_wq *wq, struct t3_cqe *hw_cqe,
1105 read_cqe->u.scqe.wrid_hi = wq->oldest_read->sq_wptr;
1106 read_cqe->len = wq->oldest_read->read_len;
1116 static void advance_oldest_read(struct t3_wq *wq)
1119 u32 rptr = wq->oldest_read - wq->sq + 1;
1120 u32 wptr = Q_PTR2IDX(wq->sq_wptr, wq->sq_size_log2);
1122 while (Q_PTR2IDX(rptr, wq->sq_size_log2) != wptr) {
1123 wq->oldest_read = wq->sq + Q_PTR2IDX(rptr, wq->sq_size_log2);
1125 if (wq->oldest_read->opcode == T3_READ_REQ)
1129 wq->oldest_read = NULL;
1137 * supply the wq assicated with the qpid.
1147 int cxio_poll_cq(struct t3_wq *wq, struct t3_cq *cq, struct t3_cqe *cqe,
1167 if (wq == NULL) {
1186 if (!wq->oldest_read) {
1188 wq->error = 1;
1197 create_read_req_cqe(wq, hw_cqe, &read_cqe);
1199 advance_oldest_read(wq);
1207 wq->error = 1;
1211 if (CQE_STATUS(*hw_cqe) || wq->error) {
1212 *cqe_flushed = wq->error;
1213 wq->error = 1;
1233 Q_EMPTY(wq->rq_rptr, wq->rq_wptr)) {
1249 * then we complete this with TPT_ERR_MSN and mark the wq in
1253 if (Q_EMPTY(wq->rq_rptr, wq->rq_wptr)) {
1254 wq->error = 1;
1259 if (unlikely((CQE_WRID_MSN(*hw_cqe) != (wq->rq_rptr + 1)))) {
1260 wq->error = 1;
1278 if (!SW_CQE(*hw_cqe) && (CQE_WRID_SQ_WPTR(*hw_cqe) != wq->sq_rptr)) {
1283 Q_PTR2IDX(CQE_WRID_SQ_WPTR(*hw_cqe), wq->sq_size_log2));
1284 sqp = wq->sq +
1285 Q_PTR2IDX(CQE_WRID_SQ_WPTR(*hw_cqe), wq->sq_size_log2);
1300 wq->sq_rptr = CQE_WRID_SQ_WPTR(*hw_cqe);
1302 Q_PTR2IDX(wq->sq_rptr, wq->sq_size_log2));
1303 *cookie = wq->sq[Q_PTR2IDX(wq->sq_rptr, wq->sq_size_log2)].wr_id;
1304 wq->sq_rptr++;
1307 Q_PTR2IDX(wq->rq_rptr, wq->rq_size_log2));
1308 *cookie = wq->rq[Q_PTR2IDX(wq->rq_rptr, wq->rq_size_log2)].wr_id;
1309 if (wq->rq[Q_PTR2IDX(wq->rq_rptr, wq->rq_size_log2)].pbl_addr)
1310 cxio_hal_pblpool_free(wq->rdev,
1311 wq->rq[Q_PTR2IDX(wq->rq_rptr,
1312 wq->rq_size_log2)].pbl_addr, T3_STAG0_PBL_SIZE);
1313 BUG_ON(Q_EMPTY(wq->rq_rptr, wq->rq_wptr));
1314 wq->rq_rptr++;
1321 flush_completed_wrs(wq, cq);