Lines Matching refs:qp
108 if (unlikely(conn->qp.rq.pc - conn->qp.rq.cc >= conn->qp.rq.size)) { in mlx5_fpga_conn_post_recv()
113 ix = conn->qp.rq.pc & (conn->qp.rq.size - 1); in mlx5_fpga_conn_post_recv()
114 data = mlx5_wq_cyc_get_wqe(&conn->qp.wq.rq, ix); in mlx5_fpga_conn_post_recv()
119 conn->qp.rq.pc++; in mlx5_fpga_conn_post_recv()
120 conn->qp.rq.bufs[ix] = buf; in mlx5_fpga_conn_post_recv()
124 *conn->qp.wq.rq.db = cpu_to_be32(conn->qp.rq.pc & 0xffff); in mlx5_fpga_conn_post_recv()
133 *conn->qp.wq.sq.db = cpu_to_be32(conn->qp.sq.pc); in mlx5_fpga_conn_notify_hw()
147 ix = conn->qp.sq.pc & (conn->qp.sq.size - 1); in mlx5_fpga_conn_post_send()
149 ctrl = mlx5_wq_cyc_get_wqe(&conn->qp.wq.sq, ix); in mlx5_fpga_conn_post_send()
164 ctrl->opmod_idx_opcode = cpu_to_be32(((conn->qp.sq.pc & 0xffff) << 8) | in mlx5_fpga_conn_post_send()
166 ctrl->qpn_ds = cpu_to_be32(size | (conn->qp.mqp.qpn << 8)); in mlx5_fpga_conn_post_send()
168 conn->qp.sq.pc++; in mlx5_fpga_conn_post_send()
169 conn->qp.sq.bufs[ix] = buf; in mlx5_fpga_conn_post_send()
179 if (!conn->qp.active) in mlx5_fpga_conn_send()
186 spin_lock_irqsave(&conn->qp.sq.lock, flags); in mlx5_fpga_conn_send()
188 if (conn->qp.sq.pc - conn->qp.sq.cc >= conn->qp.sq.size) { in mlx5_fpga_conn_send()
189 list_add_tail(&buf->list, &conn->qp.sq.backlog); in mlx5_fpga_conn_send()
196 spin_unlock_irqrestore(&conn->qp.sq.lock, flags); in mlx5_fpga_conn_send()
253 ix = be16_to_cpu(cqe->wqe_counter) & (conn->qp.rq.size - 1); in mlx5_fpga_conn_rq_cqe()
254 buf = conn->qp.rq.bufs[ix]; in mlx5_fpga_conn_rq_cqe()
255 conn->qp.rq.bufs[ix] = NULL; in mlx5_fpga_conn_rq_cqe()
258 conn->qp.rq.cc++; in mlx5_fpga_conn_rq_cqe()
269 if (unlikely(status || !conn->qp.active)) { in mlx5_fpga_conn_rq_cqe()
270 conn->qp.active = false; in mlx5_fpga_conn_rq_cqe()
295 spin_lock_irqsave(&conn->qp.sq.lock, flags); in mlx5_fpga_conn_sq_cqe()
297 ix = be16_to_cpu(cqe->wqe_counter) & (conn->qp.sq.size - 1); in mlx5_fpga_conn_sq_cqe()
298 buf = conn->qp.sq.bufs[ix]; in mlx5_fpga_conn_sq_cqe()
299 conn->qp.sq.bufs[ix] = NULL; in mlx5_fpga_conn_sq_cqe()
300 conn->qp.sq.cc++; in mlx5_fpga_conn_sq_cqe()
303 if (unlikely(!list_empty(&conn->qp.sq.backlog))) { in mlx5_fpga_conn_sq_cqe()
304 if (likely(conn->qp.active)) { in mlx5_fpga_conn_sq_cqe()
305 nextbuf = list_first_entry(&conn->qp.sq.backlog, in mlx5_fpga_conn_sq_cqe()
312 spin_unlock_irqrestore(&conn->qp.sq.lock, flags); in mlx5_fpga_conn_sq_cqe()
327 conn->qp.active = false; in mlx5_fpga_conn_sq_cqe()
376 conn = container_of(mqp, struct mlx5_fpga_conn, qp.mqp); in mlx5_fpga_conn_event()
410 if (unlikely(!conn->qp.active)) in mlx5_fpga_conn_cq_tasklet()
420 if (unlikely(!conn->qp.active)) in mlx5_fpga_conn_cq_complete()
523 return mlx5_wq_qp_create(mdev, &wqp, qpc, &conn->qp.wq, in mlx5_fpga_conn_create_wq()
524 &conn->qp.wq_ctrl); in mlx5_fpga_conn_create_wq()
536 conn->qp.rq.pc = 0; in mlx5_fpga_conn_create_qp()
537 conn->qp.rq.cc = 0; in mlx5_fpga_conn_create_qp()
538 conn->qp.rq.size = roundup_pow_of_two(rx_size); in mlx5_fpga_conn_create_qp()
539 conn->qp.sq.pc = 0; in mlx5_fpga_conn_create_qp()
540 conn->qp.sq.cc = 0; in mlx5_fpga_conn_create_qp()
541 conn->qp.sq.size = roundup_pow_of_two(tx_size); in mlx5_fpga_conn_create_qp()
544 MLX5_SET(qpc, temp_qpc, log_rq_size, ilog2(conn->qp.rq.size)); in mlx5_fpga_conn_create_qp()
545 MLX5_SET(qpc, temp_qpc, log_sq_size, ilog2(conn->qp.sq.size)); in mlx5_fpga_conn_create_qp()
550 conn->qp.rq.bufs = kvzalloc(sizeof(conn->qp.rq.bufs[0]) * in mlx5_fpga_conn_create_qp()
551 conn->qp.rq.size, GFP_KERNEL); in mlx5_fpga_conn_create_qp()
552 if (!conn->qp.rq.bufs) { in mlx5_fpga_conn_create_qp()
557 conn->qp.sq.bufs = kvzalloc(sizeof(conn->qp.sq.bufs[0]) * in mlx5_fpga_conn_create_qp()
558 conn->qp.sq.size, GFP_KERNEL); in mlx5_fpga_conn_create_qp()
559 if (!conn->qp.sq.bufs) { in mlx5_fpga_conn_create_qp()
566 conn->qp.wq_ctrl.buf.npages; in mlx5_fpga_conn_create_qp()
576 conn->qp.wq_ctrl.buf.page_shift - MLX5_ADAPTER_PAGE_SHIFT); in mlx5_fpga_conn_create_qp()
583 MLX5_SET(qpc, qpc, log_rq_size, ilog2(conn->qp.rq.size)); in mlx5_fpga_conn_create_qp()
585 MLX5_SET(qpc, qpc, log_sq_size, ilog2(conn->qp.sq.size)); in mlx5_fpga_conn_create_qp()
588 MLX5_SET64(qpc, qpc, dbr_addr, conn->qp.wq_ctrl.db.dma); in mlx5_fpga_conn_create_qp()
592 mlx5_fill_page_array(&conn->qp.wq_ctrl.buf, in mlx5_fpga_conn_create_qp()
595 err = mlx5_core_create_qp(mdev, &conn->qp.mqp, in, inlen); in mlx5_fpga_conn_create_qp()
599 conn->qp.mqp.event = mlx5_fpga_conn_event; in mlx5_fpga_conn_create_qp()
600 mlx5_fpga_dbg(fdev, "Created QP #0x%x\n", conn->qp.mqp.qpn); in mlx5_fpga_conn_create_qp()
605 kvfree(conn->qp.sq.bufs); in mlx5_fpga_conn_create_qp()
607 kvfree(conn->qp.rq.bufs); in mlx5_fpga_conn_create_qp()
609 mlx5_wq_destroy(&conn->qp.wq_ctrl); in mlx5_fpga_conn_create_qp()
619 for (ix = 0; ix < conn->qp.rq.size; ix++) { in mlx5_fpga_conn_free_recv_bufs()
620 if (!conn->qp.rq.bufs[ix]) in mlx5_fpga_conn_free_recv_bufs()
622 mlx5_fpga_conn_unmap_buf(conn, conn->qp.rq.bufs[ix]); in mlx5_fpga_conn_free_recv_bufs()
623 kfree(conn->qp.rq.bufs[ix]); in mlx5_fpga_conn_free_recv_bufs()
624 conn->qp.rq.bufs[ix] = NULL; in mlx5_fpga_conn_free_recv_bufs()
633 for (ix = 0; ix < conn->qp.sq.size; ix++) { in mlx5_fpga_conn_flush_send_bufs()
634 buf = conn->qp.sq.bufs[ix]; in mlx5_fpga_conn_flush_send_bufs()
637 conn->qp.sq.bufs[ix] = NULL; in mlx5_fpga_conn_flush_send_bufs()
643 list_for_each_entry_safe(buf, temp, &conn->qp.sq.backlog, list) { in mlx5_fpga_conn_flush_send_bufs()
653 mlx5_core_destroy_qp(conn->fdev->mdev, &conn->qp.mqp); in mlx5_fpga_conn_destroy_qp()
656 kvfree(conn->qp.sq.bufs); in mlx5_fpga_conn_destroy_qp()
657 kvfree(conn->qp.rq.bufs); in mlx5_fpga_conn_destroy_qp()
658 mlx5_wq_destroy(&conn->qp.wq_ctrl); in mlx5_fpga_conn_destroy_qp()
665 mlx5_fpga_dbg(conn->fdev, "Modifying QP %u to RST\n", conn->qp.mqp.qpn); in mlx5_fpga_conn_reset_qp()
668 &conn->qp.mqp); in mlx5_fpga_conn_reset_qp()
678 mlx5_fpga_dbg(conn->fdev, "Modifying QP %u to INIT\n", conn->qp.mqp.qpn); in mlx5_fpga_conn_init_qp()
693 MLX5_SET64(qpc, qpc, dbr_addr, conn->qp.wq_ctrl.db.dma); in mlx5_fpga_conn_init_qp()
696 &conn->qp.mqp); in mlx5_fpga_conn_init_qp()
734 conn->qp.sgid_index); in mlx5_fpga_conn_rtr_qp()
741 &conn->qp.mqp); in mlx5_fpga_conn_rtr_qp()
778 &conn->qp.mqp); in mlx5_fpga_conn_rts_qp()
813 conn->qp.active = true; in mlx5_fpga_conn_connect()
858 INIT_LIST_HEAD(&conn->qp.sq.backlog); in mlx5_fpga_conn_create()
860 spin_lock_init(&conn->qp.sq.lock); in mlx5_fpga_conn_create()
879 err = mlx5_core_reserved_gid_alloc(fdev->mdev, &conn->qp.sgid_index); in mlx5_fpga_conn_create()
886 err = mlx5_core_roce_gid_set(fdev->mdev, conn->qp.sgid_index, in mlx5_fpga_conn_create()
895 mlx5_fpga_dbg(fdev, "Reserved SGID index %u\n", conn->qp.sgid_index); in mlx5_fpga_conn_create()
925 MLX5_SET(fpga_qpc, conn->fpga_qpc, remote_qpn, conn->qp.mqp.qpn); in mlx5_fpga_conn_create()
954 mlx5_core_roce_gid_set(fdev->mdev, conn->qp.sgid_index, 0, 0, NULL, in mlx5_fpga_conn_create()
957 mlx5_core_reserved_gid_free(fdev->mdev, conn->qp.sgid_index); in mlx5_fpga_conn_create()
970 conn->qp.active = false; in mlx5_fpga_conn_destroy()
976 &conn->qp.mqp); in mlx5_fpga_conn_destroy()
982 mlx5_core_roce_gid_set(conn->fdev->mdev, conn->qp.sgid_index, 0, 0, in mlx5_fpga_conn_destroy()
984 mlx5_core_reserved_gid_free(conn->fdev->mdev, conn->qp.sgid_index); in mlx5_fpga_conn_destroy()