Lines Matching refs:qp
47 static enum i40iw_status_code i40iw_nop_1(struct i40iw_qp_uk *qp) in i40iw_nop_1() argument
54 if (!qp->sq_ring.head) in i40iw_nop_1()
57 wqe_idx = I40IW_RING_GETCURRENT_HEAD(qp->sq_ring); in i40iw_nop_1()
58 wqe = qp->sq_base[wqe_idx].elem; in i40iw_nop_1()
60 qp->sq_wrtrk_array[wqe_idx].wqe_size = I40IW_QP_WQE_MIN_SIZE; in i40iw_nop_1()
62 peek_head = (qp->sq_ring.head + 1) % qp->sq_ring.size; in i40iw_nop_1()
63 wqe_0 = qp->sq_base[peek_head].elem; in i40iw_nop_1()
65 wqe_0[3] = LS_64(!qp->swqe_polarity, I40IWQPSQ_VALID); in i40iw_nop_1()
67 wqe_0[3] = LS_64(qp->swqe_polarity, I40IWQPSQ_VALID); in i40iw_nop_1()
75 LS_64(qp->swqe_polarity, I40IWQPSQ_VALID) | nop_signature++; in i40iw_nop_1()
87 void i40iw_qp_post_wr(struct i40iw_qp_uk *qp) in i40iw_qp_post_wr() argument
96 get_64bit_val(qp->shadow_area, 0, &temp); in i40iw_qp_post_wr()
99 sw_sq_head = I40IW_RING_GETCURRENT_HEAD(qp->sq_ring); in i40iw_qp_post_wr()
101 if (sw_sq_head > qp->initial_ring.head) { in i40iw_qp_post_wr()
102 if ((hw_sq_tail >= qp->initial_ring.head) && in i40iw_qp_post_wr()
104 writel(qp->qp_id, qp->wqe_alloc_reg); in i40iw_qp_post_wr()
106 } else if (sw_sq_head != qp->initial_ring.head) { in i40iw_qp_post_wr()
107 if ((hw_sq_tail >= qp->initial_ring.head) || in i40iw_qp_post_wr()
109 writel(qp->qp_id, qp->wqe_alloc_reg); in i40iw_qp_post_wr()
114 qp->initial_ring.head = qp->sq_ring.head; in i40iw_qp_post_wr()
122 static void i40iw_qp_ring_push_db(struct i40iw_qp_uk *qp, u32 wqe_idx) in i40iw_qp_ring_push_db() argument
124 …set_32bit_val(qp->push_db, 0, LS_32((wqe_idx >> 2), I40E_PFPE_WQEALLOC_WQE_DESC_INDEX) | qp->qp_id… in i40iw_qp_ring_push_db()
125 qp->initial_ring.head = I40IW_RING_GETCURRENT_HEAD(qp->sq_ring); in i40iw_qp_ring_push_db()
134 u64 *i40iw_qp_get_next_send_wqe(struct i40iw_qp_uk *qp, in i40iw_qp_get_next_send_wqe() argument
149 *wqe_idx = I40IW_RING_GETCURRENT_HEAD(qp->sq_ring); in i40iw_qp_get_next_send_wqe()
152 qp->swqe_polarity = !qp->swqe_polarity; in i40iw_qp_get_next_send_wqe()
153 wqe_ptr = (uintptr_t)qp->sq_base[*wqe_idx].elem; in i40iw_qp_get_next_send_wqe()
158 i40iw_nop_1(qp); in i40iw_qp_get_next_send_wqe()
159 I40IW_RING_MOVE_HEAD(qp->sq_ring, ret_code); in i40iw_qp_get_next_send_wqe()
164 *wqe_idx = I40IW_RING_GETCURRENT_HEAD(qp->sq_ring); in i40iw_qp_get_next_send_wqe()
166 qp->swqe_polarity = !qp->swqe_polarity; in i40iw_qp_get_next_send_wqe()
170 i40iw_nop_1(qp); in i40iw_qp_get_next_send_wqe()
171 I40IW_RING_MOVE_HEAD(qp->sq_ring, ret_code); in i40iw_qp_get_next_send_wqe()
174 *wqe_idx = I40IW_RING_GETCURRENT_HEAD(qp->sq_ring); in i40iw_qp_get_next_send_wqe()
176 qp->swqe_polarity = !qp->swqe_polarity; in i40iw_qp_get_next_send_wqe()
178 I40IW_RING_MOVE_HEAD_BY_COUNT(qp->sq_ring, in i40iw_qp_get_next_send_wqe()
183 wqe = qp->sq_base[*wqe_idx].elem; in i40iw_qp_get_next_send_wqe()
185 peek_head = I40IW_RING_GETCURRENT_HEAD(qp->sq_ring); in i40iw_qp_get_next_send_wqe()
186 wqe_0 = qp->sq_base[peek_head].elem; in i40iw_qp_get_next_send_wqe()
189 if (RS_64(wqe_0[3], I40IWQPSQ_VALID) != !qp->swqe_polarity) in i40iw_qp_get_next_send_wqe()
190 wqe_0[3] = LS_64(!qp->swqe_polarity, I40IWQPSQ_VALID); in i40iw_qp_get_next_send_wqe()
193 qp->sq_wrtrk_array[*wqe_idx].wrid = wr_id; in i40iw_qp_get_next_send_wqe()
194 qp->sq_wrtrk_array[*wqe_idx].wr_len = total_size; in i40iw_qp_get_next_send_wqe()
195 qp->sq_wrtrk_array[*wqe_idx].wqe_size = wqe_size; in i40iw_qp_get_next_send_wqe()
220 u64 *i40iw_qp_get_next_recv_wqe(struct i40iw_qp_uk *qp, u32 *wqe_idx) in i40iw_qp_get_next_recv_wqe() argument
225 if (I40IW_RING_FULL_ERR(qp->rq_ring)) in i40iw_qp_get_next_recv_wqe()
228 I40IW_ATOMIC_RING_MOVE_HEAD(qp->rq_ring, *wqe_idx, ret_code); in i40iw_qp_get_next_recv_wqe()
232 qp->rwqe_polarity = !qp->rwqe_polarity; in i40iw_qp_get_next_recv_wqe()
234 wqe = qp->rq_base[*wqe_idx * (qp->rq_wqe_size_multiplier >> 2)].elem; in i40iw_qp_get_next_recv_wqe()
245 static enum i40iw_status_code i40iw_rdma_write(struct i40iw_qp_uk *qp, in i40iw_rdma_write() argument
259 if (op_info->num_lo_sges > qp->max_sq_frag_cnt) in i40iw_rdma_write()
274 wqe = i40iw_qp_get_next_send_wqe(qp, &wqe_idx, wqe_size, total_size, info->wr_id); in i40iw_rdma_write()
288 LS_64(qp->swqe_polarity, I40IWQPSQ_VALID); in i40iw_rdma_write()
302 i40iw_qp_post_wr(qp); in i40iw_rdma_write()
314 static enum i40iw_status_code i40iw_rdma_read(struct i40iw_qp_uk *qp, in i40iw_rdma_read() argument
331 wqe = i40iw_qp_get_next_send_wqe(qp, &wqe_idx, wqe_size, op_info->lo_addr.len, info->wr_id); in i40iw_rdma_read()
342 LS_64(qp->swqe_polarity, I40IWQPSQ_VALID); in i40iw_rdma_read()
350 i40iw_qp_post_wr(qp); in i40iw_rdma_read()
362 static enum i40iw_status_code i40iw_send(struct i40iw_qp_uk *qp, in i40iw_send() argument
376 if (qp->max_sq_frag_cnt < op_info->num_sges) in i40iw_send()
385 wqe = i40iw_qp_get_next_send_wqe(qp, &wqe_idx, wqe_size, total_size, info->wr_id); in i40iw_send()
398 LS_64(qp->swqe_polarity, I40IWQPSQ_VALID); in i40iw_send()
411 i40iw_qp_post_wr(qp); in i40iw_send()
422 static enum i40iw_status_code i40iw_inline_rdma_write(struct i40iw_qp_uk *qp, in i40iw_inline_rdma_write() argument
444 wqe = i40iw_qp_get_next_send_wqe(qp, &wqe_idx, wqe_size, op_info->len, info->wr_id); in i40iw_inline_rdma_write()
456 LS_64((qp->push_db ? 1 : 0), I40IWQPSQ_PUSHWQE) | in i40iw_inline_rdma_write()
460 LS_64(qp->swqe_polarity, I40IWQPSQ_VALID); in i40iw_inline_rdma_write()
478 if (qp->push_db) { in i40iw_inline_rdma_write()
479 push = (u64 *)((uintptr_t)qp->push_wqe + (wqe_idx & 0x3) * 0x20); in i40iw_inline_rdma_write()
481 i40iw_qp_ring_push_db(qp, wqe_idx); in i40iw_inline_rdma_write()
484 i40iw_qp_post_wr(qp); in i40iw_inline_rdma_write()
497 static enum i40iw_status_code i40iw_inline_send(struct i40iw_qp_uk *qp, in i40iw_inline_send() argument
520 wqe = i40iw_qp_get_next_send_wqe(qp, &wqe_idx, wqe_size, op_info->len, info->wr_id); in i40iw_inline_send()
529 LS_64((qp->push_db ? 1 : 0), I40IWQPSQ_PUSHWQE) | in i40iw_inline_send()
533 LS_64(qp->swqe_polarity, I40IWQPSQ_VALID); in i40iw_inline_send()
551 if (qp->push_db) { in i40iw_inline_send()
552 push = (u64 *)((uintptr_t)qp->push_wqe + (wqe_idx & 0x3) * 0x20); in i40iw_inline_send()
554 i40iw_qp_ring_push_db(qp, wqe_idx); in i40iw_inline_send()
557 i40iw_qp_post_wr(qp); in i40iw_inline_send()
569 static enum i40iw_status_code i40iw_stag_local_invalidate(struct i40iw_qp_uk *qp, in i40iw_stag_local_invalidate() argument
582 wqe = i40iw_qp_get_next_send_wqe(qp, &wqe_idx, I40IW_QP_WQE_MIN_SIZE, 0, info->wr_id); in i40iw_stag_local_invalidate()
593 LS_64(qp->swqe_polarity, I40IWQPSQ_VALID); in i40iw_stag_local_invalidate()
600 i40iw_qp_post_wr(qp); in i40iw_stag_local_invalidate()
611 static enum i40iw_status_code i40iw_mw_bind(struct i40iw_qp_uk *qp, in i40iw_mw_bind() argument
624 wqe = i40iw_qp_get_next_send_wqe(qp, &wqe_idx, I40IW_QP_WQE_MIN_SIZE, 0, info->wr_id); in i40iw_mw_bind()
641 LS_64(qp->swqe_polarity, I40IWQPSQ_VALID); in i40iw_mw_bind()
648 i40iw_qp_post_wr(qp); in i40iw_mw_bind()
658 static enum i40iw_status_code i40iw_post_receive(struct i40iw_qp_uk *qp, in i40iw_post_receive() argument
665 if (qp->max_rq_frag_cnt < info->num_sges) in i40iw_post_receive()
669 wqe = i40iw_qp_get_next_recv_wqe(qp, &wqe_idx); in i40iw_post_receive()
673 qp->rq_wrid_array[wqe_idx] = info->wr_id; in i40iw_post_receive()
678 LS_64(qp->rwqe_polarity, I40IWQPSQ_VALID); in i40iw_post_receive()
754 struct i40iw_qp_uk *qp; in i40iw_cq_poll_completion() local
796 qp = (struct i40iw_qp_uk *)(unsigned long)comp_ctx; in i40iw_cq_poll_completion()
797 if (!qp) { in i40iw_cq_poll_completion()
802 info->qp_handle = (i40iw_qp_handle)(unsigned long)qp; in i40iw_cq_poll_completion()
805 array_idx = (wqe_idx * 4) / qp->rq_wqe_size_multiplier; in i40iw_cq_poll_completion()
807 info->wr_id = qp->rq_wrid_array[qp->rq_ring.tail]; in i40iw_cq_poll_completion()
808 array_idx = qp->rq_ring.tail; in i40iw_cq_poll_completion()
810 info->wr_id = qp->rq_wrid_array[array_idx]; in i40iw_cq_poll_completion()
821 I40IW_RING_SET_TAIL(qp->rq_ring, array_idx + 1); in i40iw_cq_poll_completion()
822 pring = &qp->rq_ring; in i40iw_cq_poll_completion()
824 if (qp->first_sq_wq) { in i40iw_cq_poll_completion()
825 qp->first_sq_wq = false; in i40iw_cq_poll_completion()
826 if (!wqe_idx && (qp->sq_ring.head == qp->sq_ring.tail)) { in i40iw_cq_poll_completion()
837 info->wr_id = qp->sq_wrtrk_array[wqe_idx].wrid; in i40iw_cq_poll_completion()
838 info->bytes_xfered = qp->sq_wrtrk_array[wqe_idx].wr_len; in i40iw_cq_poll_completion()
841 sw_wqe = qp->sq_base[wqe_idx].elem; in i40iw_cq_poll_completion()
844 addl_wqes = qp->sq_wrtrk_array[wqe_idx].wqe_size / I40IW_QP_WQE_MIN_SIZE; in i40iw_cq_poll_completion()
845 I40IW_RING_SET_TAIL(qp->sq_ring, (wqe_idx + addl_wqes)); in i40iw_cq_poll_completion()
851 tail = qp->sq_ring.tail; in i40iw_cq_poll_completion()
852 sw_wqe = qp->sq_base[tail].elem; in i40iw_cq_poll_completion()
856 addl_wqes = qp->sq_wrtrk_array[tail].wqe_size / I40IW_QP_WQE_MIN_SIZE; in i40iw_cq_poll_completion()
857 I40IW_RING_SET_TAIL(qp->sq_ring, (tail + addl_wqes)); in i40iw_cq_poll_completion()
859 info->wr_id = qp->sq_wrtrk_array[tail].wrid; in i40iw_cq_poll_completion()
860 info->bytes_xfered = qp->sq_wrtrk_array[tail].wr_len; in i40iw_cq_poll_completion()
865 pring = &qp->sq_ring; in i40iw_cq_poll_completion()
990 enum i40iw_status_code i40iw_qp_uk_init(struct i40iw_qp_uk *qp, in i40iw_qp_uk_init() argument
1004 qp->sq_base = info->sq; in i40iw_qp_uk_init()
1005 qp->rq_base = info->rq; in i40iw_qp_uk_init()
1006 qp->shadow_area = info->shadow_area; in i40iw_qp_uk_init()
1007 qp->sq_wrtrk_array = info->sq_wrtrk_array; in i40iw_qp_uk_init()
1008 qp->rq_wrid_array = info->rq_wrid_array; in i40iw_qp_uk_init()
1010 qp->wqe_alloc_reg = info->wqe_alloc_reg; in i40iw_qp_uk_init()
1011 qp->qp_id = info->qp_id; in i40iw_qp_uk_init()
1013 qp->sq_size = info->sq_size; in i40iw_qp_uk_init()
1014 qp->push_db = info->push_db; in i40iw_qp_uk_init()
1015 qp->push_wqe = info->push_wqe; in i40iw_qp_uk_init()
1017 qp->max_sq_frag_cnt = info->max_sq_frag_cnt; in i40iw_qp_uk_init()
1018 sq_ring_size = qp->sq_size << sqshift; in i40iw_qp_uk_init()
1020 I40IW_RING_INIT(qp->sq_ring, sq_ring_size); in i40iw_qp_uk_init()
1021 I40IW_RING_INIT(qp->initial_ring, sq_ring_size); in i40iw_qp_uk_init()
1022 I40IW_RING_MOVE_HEAD(qp->sq_ring, ret_code); in i40iw_qp_uk_init()
1023 I40IW_RING_MOVE_TAIL(qp->sq_ring); in i40iw_qp_uk_init()
1024 I40IW_RING_MOVE_HEAD(qp->initial_ring, ret_code); in i40iw_qp_uk_init()
1025 qp->swqe_polarity = 1; in i40iw_qp_uk_init()
1026 qp->first_sq_wq = true; in i40iw_qp_uk_init()
1027 qp->swqe_polarity_deferred = 1; in i40iw_qp_uk_init()
1028 qp->rwqe_polarity = 0; in i40iw_qp_uk_init()
1030 if (!qp->use_srq) { in i40iw_qp_uk_init()
1031 qp->rq_size = info->rq_size; in i40iw_qp_uk_init()
1032 qp->max_rq_frag_cnt = info->max_rq_frag_cnt; in i40iw_qp_uk_init()
1033 I40IW_RING_INIT(qp->rq_ring, qp->rq_size); in i40iw_qp_uk_init()
1043 qp->rq_wqe_size = rqshift; in i40iw_qp_uk_init()
1044 qp->rq_wqe_size_multiplier = 4 << rqshift; in i40iw_qp_uk_init()
1046 qp->ops = iw_qp_uk_ops; in i40iw_qp_uk_init()
1127 enum i40iw_status_code i40iw_nop(struct i40iw_qp_uk *qp, in i40iw_nop() argument
1135 wqe = i40iw_qp_get_next_send_wqe(qp, &wqe_idx, I40IW_QP_WQE_MIN_SIZE, 0, wr_id); in i40iw_nop()
1144 LS_64(qp->swqe_polarity, I40IWQPSQ_VALID); in i40iw_nop()
1150 i40iw_qp_post_wr(qp); in i40iw_nop()