Lines Matching refs:wq
103 static int destroy_qp(struct c4iw_rdev *rdev, struct t4_wq *wq, in destroy_qp() argument
112 wq->rq.memsize, wq->rq.queue, in destroy_qp()
113 dma_unmap_addr(&wq->rq, mapping)); in destroy_qp()
115 wq->sq.memsize, wq->sq.queue, in destroy_qp()
116 dma_unmap_addr(&wq->sq, mapping)); in destroy_qp()
117 c4iw_rqtpool_free(rdev, wq->rq.rqt_hwaddr, wq->rq.rqt_size); in destroy_qp()
118 kfree(wq->rq.sw_rq); in destroy_qp()
119 kfree(wq->sq.sw_sq); in destroy_qp()
120 c4iw_put_qpid(rdev, wq->rq.qid, uctx); in destroy_qp()
121 c4iw_put_qpid(rdev, wq->sq.qid, uctx); in destroy_qp()
125 static int create_qp(struct c4iw_rdev *rdev, struct t4_wq *wq, in create_qp() argument
144 wq->sq.qid = c4iw_get_qpid(rdev, uctx); in create_qp()
145 if (!wq->sq.qid) in create_qp()
148 wq->rq.qid = c4iw_get_qpid(rdev, uctx); in create_qp()
149 if (!wq->rq.qid) { in create_qp()
155 wq->sq.sw_sq = kzalloc(wq->sq.size * sizeof *wq->sq.sw_sq, in create_qp()
157 if (!wq->sq.sw_sq) { in create_qp()
162 wq->rq.sw_rq = kzalloc(wq->rq.size * sizeof *wq->rq.sw_rq, in create_qp()
164 if (!wq->rq.sw_rq) { in create_qp()
173 wq->rq.rqt_size = roundup_pow_of_two(max_t(u16, wq->rq.size, 16)); in create_qp()
174 wq->rq.rqt_hwaddr = c4iw_rqtpool_alloc(rdev, wq->rq.rqt_size); in create_qp()
175 if (!wq->rq.rqt_hwaddr) { in create_qp()
181 wq->sq.queue = dma_alloc_coherent(rhp->ibdev.dma_device, wq->sq.memsize, in create_qp()
182 &(wq->sq.dma_addr), GFP_KERNEL); in create_qp()
183 if (!wq->sq.queue) { in create_qp()
187 wq->sq.phys_addr = vtophys(wq->sq.queue); in create_qp()
188 dma_unmap_addr_set(&wq->sq, mapping, wq->sq.dma_addr); in create_qp()
189 memset(wq->sq.queue, 0, wq->sq.memsize); in create_qp()
191 wq->rq.queue = dma_alloc_coherent(rhp->ibdev.dma_device, in create_qp()
192 wq->rq.memsize, &(wq->rq.dma_addr), GFP_KERNEL); in create_qp()
193 if (!wq->rq.queue) { in create_qp()
197 wq->rq.phys_addr = vtophys(wq->rq.queue); in create_qp()
198 dma_unmap_addr_set(&wq->rq, mapping, wq->rq.dma_addr); in create_qp()
199 memset(wq->rq.queue, 0, wq->rq.memsize); in create_qp()
204 wq->sq.queue, (unsigned long long)wq->sq.phys_addr, in create_qp()
205 wq->rq.queue, (unsigned long long)wq->rq.phys_addr); in create_qp()
208 t4_bar2_sge_qregs(rdev->adap, wq->sq.qid, T4_BAR2_QTYPE_EGRESS, user, in create_qp()
209 &sq_bar2_qoffset, &wq->sq.bar2_qid); in create_qp()
210 t4_bar2_sge_qregs(rdev->adap, wq->rq.qid, T4_BAR2_QTYPE_EGRESS, user, in create_qp()
211 &rq_bar2_qoffset, &wq->rq.bar2_qid); in create_qp()
217 wq->sq.bar2_pa = (rdev->bar2_pa + sq_bar2_qoffset) & PAGE_MASK; in create_qp()
218 wq->rq.bar2_pa = (rdev->bar2_pa + rq_bar2_qoffset) & PAGE_MASK; in create_qp()
221 __func__, (unsigned long long)wq->sq.bar2_pa, in create_qp()
222 (unsigned long long)wq->rq.bar2_pa); in create_qp()
225 wq->sq.bar2_va = (void __iomem *)((u64)rdev->bar2_kva + in create_qp()
227 wq->rq.bar2_va = (void __iomem *)((u64)rdev->bar2_kva + in create_qp()
230 __func__, (unsigned long long)wq->sq.bar2_va, in create_qp()
231 (unsigned long long)wq->rq.bar2_va); in create_qp()
234 wq->rdev = rdev; in create_qp()
235 wq->rq.msn = 1; in create_qp()
259 eqsize = wq->sq.size * T4_SQ_NUM_SLOTS + in create_qp()
276 res->u.sqrq.eqid = cpu_to_be32(wq->sq.qid); in create_qp()
277 res->u.sqrq.eqaddr = cpu_to_be64(wq->sq.dma_addr); in create_qp()
283 eqsize = wq->rq.size * T4_RQ_NUM_SLOTS + in create_qp()
299 res->u.sqrq.eqid = cpu_to_be32(wq->rq.qid); in create_qp()
300 res->u.sqrq.eqaddr = cpu_to_be64(wq->rq.dma_addr); in create_qp()
305 ret = c4iw_wait_for_reply(rdev, &wr_wait, 0, wq->sq.qid, in create_qp()
312 __func__, wq->sq.qid, wq->rq.qid, in create_qp()
313 (unsigned long long)wq->sq.bar2_va, in create_qp()
314 (unsigned long long)wq->rq.bar2_va); in create_qp()
319 wq->rq.memsize, wq->rq.queue, in create_qp()
320 dma_unmap_addr(&wq->rq, mapping)); in create_qp()
323 wq->sq.memsize, wq->sq.queue, in create_qp()
324 dma_unmap_addr(&wq->sq, mapping)); in create_qp()
326 c4iw_rqtpool_free(rdev, wq->rq.rqt_hwaddr, wq->rq.rqt_size); in create_qp()
328 kfree(wq->rq.sw_rq); in create_qp()
330 kfree(wq->sq.sw_sq); in create_qp()
332 c4iw_put_qpid(rdev, wq->rq.qid, uctx); in create_qp()
334 c4iw_put_qpid(rdev, wq->sq.qid, uctx); in create_qp()
553 ret = build_isgl((__be64 *)qhp->wq.rq.queue, in build_rdma_recv()
554 (__be64 *)&qhp->wq.rq.queue[qhp->wq.rq.size], in build_rdma_recv()
584 destroy_qp(&rhp->rdev, &qhp->wq, in free_qp_work()
621 PDBG("%s drain sq id %u\n", __func__, qhp->wq.sq.qid); in complete_sq_drain_wr()
627 V_CQE_QPID(qhp->wq.sq.qid)); in complete_sq_drain_wr()
651 PDBG("%s drain rq id %u\n", __func__, qhp->wq.sq.qid); in complete_rq_drain_wr()
657 V_CQE_QPID(qhp->wq.sq.qid)); in complete_rq_drain_wr()
794 if (t4_wq_in_error(&qhp->wq)) { in c4iw_post_send()
799 num_wrs = t4_sq_avail(&qhp->wq); in c4iw_post_send()
811 wqe = (union t4_wr *)((u8 *)qhp->wq.sq.queue + in c4iw_post_send()
812 qhp->wq.sq.wq_pidx * T4_EQ_ENTRY_SIZE); in c4iw_post_send()
819 swsqe = &qhp->wq.sq.sw_sq[qhp->wq.sq.pidx]; in c4iw_post_send()
830 err = build_rdma_send(&qhp->wq.sq, wqe, wr, &len16); in c4iw_post_send()
835 err = build_rdma_write(&qhp->wq.sq, wqe, wr, &len16); in c4iw_post_send()
852 if (!qhp->wq.sq.oldest_read) in c4iw_post_send()
853 qhp->wq.sq.oldest_read = swsqe; in c4iw_post_send()
866 err = build_memreg(&qhp->wq.sq, wqe, reg_wr(wr), in c4iw_post_send()
892 swsqe->idx = qhp->wq.sq.pidx; in c4iw_post_send()
899 init_wr_hdr(wqe, qhp->wq.sq.pidx, fw_opcode, fw_flags, len16); in c4iw_post_send()
903 __func__, (unsigned long long)wr->wr_id, qhp->wq.sq.pidx, in c4iw_post_send()
907 t4_sq_produce(&qhp->wq, len16); in c4iw_post_send()
911 t4_ring_sq_db(&qhp->wq, idx, wqe, rdev->adap->iwt.wc_en); in c4iw_post_send()
931 if (t4_wq_in_error(&qhp->wq)) { in c4iw_post_receive()
936 num_wrs = t4_rq_avail(&qhp->wq); in c4iw_post_receive()
948 wqe = (union t4_recv_wr *)((u8 *)qhp->wq.rq.queue + in c4iw_post_receive()
949 qhp->wq.rq.wq_pidx * in c4iw_post_receive()
960 qhp->wq.rq.sw_rq[qhp->wq.rq.pidx].wr_id = wr->wr_id; in c4iw_post_receive()
964 wqe->recv.wrid = qhp->wq.rq.pidx; in c4iw_post_receive()
970 (unsigned long long) wr->wr_id, qhp->wq.rq.pidx); in c4iw_post_receive()
971 t4_rq_produce(&qhp->wq, len16); in c4iw_post_receive()
977 t4_ring_rq_db(&qhp->wq, idx, wqe, qhp->rhp->rdev.adap->iwt.wc_en); in c4iw_post_receive()
1131 qhp->wq.sq.qid, qhp->ep->hwtid); in post_terminate()
1175 if (qhp->wq.flushed) { in __flush_qp()
1180 qhp->wq.flushed = 1; in __flush_qp()
1183 c4iw_count_rcqes(&rchp->cq, &qhp->wq, &count); in __flush_qp()
1184 rq_flushed = c4iw_flush_rq(&qhp->wq, &rchp->cq, count); in __flush_qp()
1229 t4_set_wq_in_error(&qhp->wq); in flush_qp()
1263 qhp->wq.sq.qid, ep, ep->hwtid); in rdma_fini()
1288 qhp->wq.sq.qid, ep->com.so, __func__); in rdma_fini()
1357 qhp->wq.sq.qid, ep, ep->hwtid); in rdma_init()
1398 wqe->u.init.nrqe = cpu_to_be16(t4_rqes_posted(&qhp->wq)); in rdma_init()
1400 wqe->u.init.qpid = cpu_to_be32(qhp->wq.sq.qid); in rdma_init()
1401 wqe->u.init.sq_eqid = cpu_to_be32(qhp->wq.sq.qid); in rdma_init()
1402 wqe->u.init.rq_eqid = cpu_to_be32(qhp->wq.rq.qid); in rdma_init()
1409 wqe->u.init.hwrqsize = cpu_to_be32(qhp->wq.rq.rqt_size); in rdma_init()
1410 wqe->u.init.hwrqaddr = cpu_to_be32(qhp->wq.rq.rqt_hwaddr - in rdma_init()
1426 qhp->wq.sq.qid, ep->com.so, __func__); in rdma_init()
1448 qhp->wq.sq.qid, qhp->wq.rq.qid, qhp->ep); in c4iw_modify_qp()
1545 t4_set_wq_in_error(&qhp->wq); in c4iw_modify_qp()
1558 t4_set_wq_in_error(&qhp->wq); in c4iw_modify_qp()
1575 t4_set_wq_in_error(&qhp->wq); in c4iw_modify_qp()
1621 if (!t4_sq_empty(&qhp->wq) || !t4_rq_empty(&qhp->wq)) { in c4iw_modify_qp()
1644 qhp->ep, qhp->wq.sq.qid); in c4iw_modify_qp()
1701 remove_handle(rhp, &rhp->qpidr, qhp->wq.sq.qid); in c4iw_destroy_qp()
1707 qhp->wq.sq.qid); in c4iw_destroy_qp()
1759 qhp->wq.sq.size = sqsize; in c4iw_create_qp()
1760 qhp->wq.sq.memsize = in c4iw_create_qp()
1762 sizeof(*qhp->wq.sq.queue) + 16 * sizeof(__be64); in c4iw_create_qp()
1763 qhp->wq.sq.flush_cidx = -1; in c4iw_create_qp()
1764 qhp->wq.rq.size = rqsize; in c4iw_create_qp()
1765 qhp->wq.rq.memsize = in c4iw_create_qp()
1767 sizeof(*qhp->wq.rq.queue); in c4iw_create_qp()
1770 qhp->wq.sq.memsize = roundup(qhp->wq.sq.memsize, PAGE_SIZE); in c4iw_create_qp()
1771 qhp->wq.rq.memsize = roundup(qhp->wq.rq.memsize, PAGE_SIZE); in c4iw_create_qp()
1775 __func__, sqsize, qhp->wq.sq.memsize, rqsize, qhp->wq.rq.memsize); in c4iw_create_qp()
1777 ret = create_qp(&rhp->rdev, &qhp->wq, &schp->cq, &rchp->cq, in c4iw_create_qp()
1809 ret = insert_handle(rhp, &rhp->qpidr, qhp, qhp->wq.sq.qid); in c4iw_create_qp()
1836 uresp.sqid = qhp->wq.sq.qid; in c4iw_create_qp()
1837 uresp.sq_size = qhp->wq.sq.size; in c4iw_create_qp()
1838 uresp.sq_memsize = qhp->wq.sq.memsize; in c4iw_create_qp()
1839 uresp.rqid = qhp->wq.rq.qid; in c4iw_create_qp()
1840 uresp.rq_size = qhp->wq.rq.size; in c4iw_create_qp()
1841 uresp.rq_memsize = qhp->wq.rq.memsize; in c4iw_create_qp()
1857 sq_key_mm->addr = qhp->wq.sq.phys_addr; in c4iw_create_qp()
1858 sq_key_mm->len = PAGE_ALIGN(qhp->wq.sq.memsize); in c4iw_create_qp()
1864 rq_key_mm->addr = qhp->wq.rq.phys_addr; in c4iw_create_qp()
1865 rq_key_mm->len = PAGE_ALIGN(qhp->wq.rq.memsize); in c4iw_create_qp()
1871 sq_db_key_mm->addr = (u64)qhp->wq.sq.bar2_pa; in c4iw_create_qp()
1878 rq_db_key_mm->addr = (u64)qhp->wq.rq.bar2_pa; in c4iw_create_qp()
1887 qhp->ibqp.qp_num = qhp->wq.sq.qid; in c4iw_create_qp()
1891 __func__, qhp->wq.sq.qid, in c4iw_create_qp()
1892 qhp->wq.sq.size, qhp->wq.sq.memsize, attrs->cap.max_send_wr); in c4iw_create_qp()
1894 __func__, qhp->wq.rq.qid, in c4iw_create_qp()
1895 qhp->wq.rq.size, qhp->wq.rq.memsize, attrs->cap.max_recv_wr); in c4iw_create_qp()
1906 remove_handle(rhp, &rhp->qpidr, qhp->wq.sq.qid); in c4iw_create_qp()
1908 destroy_qp(&rhp->rdev, &qhp->wq, in c4iw_create_qp()