Lines Matching refs:iwqp
344 void i40iw_free_qp_resources(struct i40iw_qp *iwqp) in i40iw_free_qp_resources() argument
346 struct i40iw_pbl *iwpbl = &iwqp->iwpbl; in i40iw_free_qp_resources()
347 struct i40iw_device *iwdev = iwqp->iwdev; in i40iw_free_qp_resources()
348 u32 qp_num = iwqp->ibqp.qp_num; in i40iw_free_qp_resources()
350 i40iw_ieq_cleanup_qp(iwdev->vsi.ieq, &iwqp->sc_qp); in i40iw_free_qp_resources()
351 i40iw_dealloc_push_page(iwdev, &iwqp->sc_qp); in i40iw_free_qp_resources()
356 i40iw_free_dma_mem(iwdev->sc_dev.hw, &iwqp->q2_ctx_mem); in i40iw_free_qp_resources()
357 i40iw_free_dma_mem(iwdev->sc_dev.hw, &iwqp->kqp.dma_mem); in i40iw_free_qp_resources()
358 kfree(iwqp->kqp.wrid_mem); in i40iw_free_qp_resources()
359 iwqp->kqp.wrid_mem = NULL; in i40iw_free_qp_resources()
360 kfree(iwqp); in i40iw_free_qp_resources()
368 static void i40iw_clean_cqes(struct i40iw_qp *iwqp, struct i40iw_cq *iwcq) in i40iw_clean_cqes() argument
372 ukcq->ops.iw_cq_clean(&iwqp->sc_qp.qp_uk, ukcq); in i40iw_clean_cqes()
381 struct i40iw_qp *iwqp = to_iwqp(ibqp); in i40iw_destroy_qp() local
383 struct i40iw_device *iwdev = iwqp->iwdev; in i40iw_destroy_qp()
387 iwqp->destroyed = 1; in i40iw_destroy_qp()
389 if (iwqp->ibqp_state >= IB_QPS_INIT && iwqp->ibqp_state < IB_QPS_RTS) in i40iw_destroy_qp()
390 i40iw_next_iw_state(iwqp, I40IW_QP_STATE_ERROR, 0, 0, 0); in i40iw_destroy_qp()
392 if (!iwqp->user_mode) { in i40iw_destroy_qp()
393 if (iwqp->iwscq) { in i40iw_destroy_qp()
394 i40iw_clean_cqes(iwqp, iwqp->iwscq); in i40iw_destroy_qp()
395 if (iwqp->iwrcq != iwqp->iwscq) in i40iw_destroy_qp()
396 i40iw_clean_cqes(iwqp, iwqp->iwrcq); in i40iw_destroy_qp()
401 i40iw_modify_qp(&iwqp->ibqp, &attr, IB_QP_STATE, NULL); in i40iw_destroy_qp()
402 i40iw_qp_rem_ref(&iwqp->ibqp); in i40iw_destroy_qp()
403 wait_for_completion(&iwqp->free_qp); in i40iw_destroy_qp()
404 i40iw_cqp_qp_destroy_cmd(&iwdev->sc_dev, &iwqp->sc_qp); in i40iw_destroy_qp()
405 i40iw_rem_pdusecount(iwqp->iwpd, iwdev); in i40iw_destroy_qp()
406 i40iw_free_qp_resources(iwqp); in i40iw_destroy_qp()
419 struct i40iw_qp *iwqp, in i40iw_setup_virt_qp() argument
422 struct i40iw_pbl *iwpbl = &iwqp->iwpbl; in i40iw_setup_virt_qp()
425 iwqp->page = qpmr->sq_page; in i40iw_setup_virt_qp()
445 struct i40iw_qp *iwqp, in i40iw_setup_kmode_qp() argument
448 struct i40iw_dma_mem *mem = &iwqp->kqp.dma_mem; in i40iw_setup_kmode_qp()
465 iwqp->kqp.wrid_mem = kzalloc(size, GFP_KERNEL); in i40iw_setup_kmode_qp()
467 ukinfo->sq_wrtrk_array = (struct i40iw_sq_uk_wr_trk_info *)iwqp->kqp.wrid_mem; in i40iw_setup_kmode_qp()
494 ukinfo->qp_id = iwqp->ibqp.qp_num; in i40iw_setup_kmode_qp()
511 struct i40iw_qp *iwqp; in i40iw_create_qp() local
558 iwqp = kzalloc(sizeof(*iwqp), GFP_KERNEL); in i40iw_create_qp()
559 if (!iwqp) in i40iw_create_qp()
562 qp = &iwqp->sc_qp; in i40iw_create_qp()
563 qp->back_qp = (void *)iwqp; in i40iw_create_qp()
566 iwqp->iwdev = iwdev; in i40iw_create_qp()
567 iwqp->ctx_info.iwarp_info = &iwqp->iwarp_info; in i40iw_create_qp()
570 &iwqp->q2_ctx_mem, in i40iw_create_qp()
578 init_info.q2 = iwqp->q2_ctx_mem.va; in i40iw_create_qp()
579 init_info.q2_pa = iwqp->q2_ctx_mem.pa; in i40iw_create_qp()
591 iwqp->iwpd = iwpd; in i40iw_create_qp()
592 iwqp->ibqp.qp_num = qp_num; in i40iw_create_qp()
593 qp = &iwqp->sc_qp; in i40iw_create_qp()
594 iwqp->iwscq = to_iwcq(init_attr->send_cq); in i40iw_create_qp()
595 iwqp->iwrcq = to_iwcq(init_attr->recv_cq); in i40iw_create_qp()
597 iwqp->host_ctx.va = init_info.host_ctx; in i40iw_create_qp()
598 iwqp->host_ctx.pa = init_info.host_ctx_pa; in i40iw_create_qp()
599 iwqp->host_ctx.size = I40IW_QP_CTX_SIZE; in i40iw_create_qp()
602 init_info.qp_uk_init_info.qp_id = iwqp->ibqp.qp_num; in i40iw_create_qp()
603 iwqp->ctx_info.qp_compl_ctx = (uintptr_t)qp; in i40iw_create_qp()
617 iwqp->ctx_info.qp_compl_ctx = req.user_compl_ctx; in i40iw_create_qp()
618 iwqp->user_mode = 1; in i40iw_create_qp()
636 memcpy(&iwqp->iwpbl, iwpbl, sizeof(iwqp->iwpbl)); in i40iw_create_qp()
638 err_code = i40iw_setup_virt_qp(iwdev, iwqp, &init_info); in i40iw_create_qp()
640 err_code = i40iw_setup_kmode_qp(iwdev, iwqp, &init_info); in i40iw_create_qp()
655 ctx_info = &iwqp->ctx_info; in i40iw_create_qp()
656 iwarp_info = &iwqp->iwarp_info; in i40iw_create_qp()
659 if (!iwqp->user_mode) { in i40iw_create_qp()
667 ctx_info->send_cq_num = iwqp->iwscq->sc_cq.cq_uk.cq_id; in i40iw_create_qp()
668 ctx_info->rcv_cq_num = iwqp->iwrcq->sc_cq.cq_uk.cq_id; in i40iw_create_qp()
676 ret = dev->iw_priv_qp_ops->qp_setctx(&iwqp->sc_qp, in i40iw_create_qp()
677 (u64 *)iwqp->host_ctx.va, in i40iw_create_qp()
704 refcount_set(&iwqp->refcount, 1); in i40iw_create_qp()
705 spin_lock_init(&iwqp->lock); in i40iw_create_qp()
706 iwqp->sig_all = (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR) ? 1 : 0; in i40iw_create_qp()
707 iwdev->qp_table[qp_num] = iwqp; in i40iw_create_qp()
708 i40iw_add_pdusecount(iwqp->iwpd); in i40iw_create_qp()
719 i40iw_destroy_qp(&iwqp->ibqp, udata); in i40iw_create_qp()
724 init_completion(&iwqp->sq_drained); in i40iw_create_qp()
725 init_completion(&iwqp->rq_drained); in i40iw_create_qp()
726 init_completion(&iwqp->free_qp); in i40iw_create_qp()
728 return &iwqp->ibqp; in i40iw_create_qp()
730 i40iw_free_qp_resources(iwqp); in i40iw_create_qp()
746 struct i40iw_qp *iwqp = to_iwqp(ibqp); in i40iw_query_qp() local
747 struct i40iw_sc_qp *qp = &iwqp->sc_qp; in i40iw_query_qp()
749 attr->qp_state = iwqp->ibqp_state; in i40iw_query_qp()
758 init_attr->event_handler = iwqp->ibqp.event_handler; in i40iw_query_qp()
759 init_attr->qp_context = iwqp->ibqp.qp_context; in i40iw_query_qp()
760 init_attr->send_cq = iwqp->ibqp.send_cq; in i40iw_query_qp()
761 init_attr->recv_cq = iwqp->ibqp.recv_cq; in i40iw_query_qp()
762 init_attr->srq = iwqp->ibqp.srq; in i40iw_query_qp()
775 void i40iw_hw_modify_qp(struct i40iw_device *iwdev, struct i40iw_qp *iwqp, in i40iw_hw_modify_qp() argument
792 cqp_info->in.u.qp_modify.qp = &iwqp->sc_qp; in i40iw_hw_modify_qp()
799 if (iwqp->iwarp_state == I40IW_QP_STATE_IDLE) in i40iw_hw_modify_qp()
800 i40iw_send_reset(iwqp->cm_node); in i40iw_hw_modify_qp()
807 i40iw_gen_ae(iwdev, &iwqp->sc_qp, &ae_info, false); in i40iw_hw_modify_qp()
825 struct i40iw_qp *iwqp = to_iwqp(ibqp); in i40iw_modify_qp() local
826 struct i40iw_device *iwdev = iwqp->iwdev; in i40iw_modify_qp()
836 ctx_info = &iwqp->ctx_info; in i40iw_modify_qp()
837 iwarp_info = &iwqp->iwarp_info; in i40iw_modify_qp()
839 spin_lock_irqsave(&iwqp->lock, flags); in i40iw_modify_qp()
850 if (iwqp->iwarp_state > (u32)I40IW_QP_STATE_IDLE) { in i40iw_modify_qp()
854 if (iwqp->iwarp_state == I40IW_QP_STATE_INVALID) { in i40iw_modify_qp()
860 if ((iwqp->iwarp_state > (u32)I40IW_QP_STATE_RTS) || in i40iw_modify_qp()
861 (!iwqp->cm_id)) { in i40iw_modify_qp()
867 iwqp->hw_tcp_state = I40IW_TCP_STATE_ESTABLISHED; in i40iw_modify_qp()
868 iwqp->hte_added = 1; in i40iw_modify_qp()
876 if (iwqp->hw_iwarp_state > (u32)I40IW_QP_STATE_RTS) { in i40iw_modify_qp()
880 if ((iwqp->iwarp_state == (u32)I40IW_QP_STATE_CLOSING) || in i40iw_modify_qp()
881 (iwqp->iwarp_state < (u32)I40IW_QP_STATE_RTS)) { in i40iw_modify_qp()
885 if (iwqp->iwarp_state > (u32)I40IW_QP_STATE_CLOSING) { in i40iw_modify_qp()
893 if (iwqp->iwarp_state >= (u32)I40IW_QP_STATE_TERMINATE) { in i40iw_modify_qp()
902 if (iwqp->iwarp_state == (u32)I40IW_QP_STATE_ERROR) { in i40iw_modify_qp()
906 if (iwqp->sc_qp.term_flags) in i40iw_modify_qp()
907 i40iw_terminate_del_timer(&iwqp->sc_qp); in i40iw_modify_qp()
909 if ((iwqp->hw_tcp_state > I40IW_TCP_STATE_CLOSED) && in i40iw_modify_qp()
911 (iwqp->hw_tcp_state != I40IW_TCP_STATE_TIME_WAIT)) in i40iw_modify_qp()
923 iwqp->ibqp_state = attr->qp_state; in i40iw_modify_qp()
937 if (iwqp->user_mode) { in i40iw_modify_qp()
948 ctx_info->send_cq_num = iwqp->iwscq->sc_cq.cq_uk.cq_id; in i40iw_modify_qp()
949 ctx_info->rcv_cq_num = iwqp->iwrcq->sc_cq.cq_uk.cq_id; in i40iw_modify_qp()
950 ret = dev->iw_priv_qp_ops->qp_setctx(&iwqp->sc_qp, in i40iw_modify_qp()
951 (u64 *)iwqp->host_ctx.va, in i40iw_modify_qp()
960 spin_unlock_irqrestore(&iwqp->lock, flags); in i40iw_modify_qp()
963 i40iw_hw_modify_qp(iwdev, iwqp, &info, true); in i40iw_modify_qp()
965 spin_lock_irqsave(&iwqp->lock, flags); in i40iw_modify_qp()
966 iwqp->iwarp_state = info.next_iwarp_state; in i40iw_modify_qp()
967 spin_unlock_irqrestore(&iwqp->lock, flags); in i40iw_modify_qp()
970 if (issue_modify_qp && (iwqp->ibqp_state > IB_QPS_RTS)) { in i40iw_modify_qp()
972 if (iwqp->cm_id && iwqp->hw_tcp_state) { in i40iw_modify_qp()
973 spin_lock_irqsave(&iwqp->lock, flags); in i40iw_modify_qp()
974 iwqp->hw_tcp_state = I40IW_TCP_STATE_CLOSED; in i40iw_modify_qp()
975 iwqp->last_aeq = I40IW_AE_RESET_SENT; in i40iw_modify_qp()
976 spin_unlock_irqrestore(&iwqp->lock, flags); in i40iw_modify_qp()
977 i40iw_cm_disconn(iwqp); in i40iw_modify_qp()
980 spin_lock_irqsave(&iwqp->lock, flags); in i40iw_modify_qp()
981 if (iwqp->cm_id) { in i40iw_modify_qp()
982 if (atomic_inc_return(&iwqp->close_timer_started) == 1) { in i40iw_modify_qp()
983 iwqp->cm_id->add_ref(iwqp->cm_id); in i40iw_modify_qp()
984 i40iw_schedule_cm_timer(iwqp->cm_node, in i40iw_modify_qp()
985 (struct i40iw_puda_buf *)iwqp, in i40iw_modify_qp()
989 spin_unlock_irqrestore(&iwqp->lock, flags); in i40iw_modify_qp()
994 spin_unlock_irqrestore(&iwqp->lock, flags); in i40iw_modify_qp()
1630 struct i40iw_qp *iwqp = to_iwqp(ibqp); in i40iw_drain_sq() local
1631 struct i40iw_sc_qp *qp = &iwqp->sc_qp; in i40iw_drain_sq()
1634 wait_for_completion(&iwqp->sq_drained); in i40iw_drain_sq()
1643 struct i40iw_qp *iwqp = to_iwqp(ibqp); in i40iw_drain_rq() local
1644 struct i40iw_sc_qp *qp = &iwqp->sc_qp; in i40iw_drain_rq()
1647 wait_for_completion(&iwqp->rq_drained); in i40iw_drain_rq()
2098 struct i40iw_qp *iwqp; in i40iw_post_send() local
2106 iwqp = (struct i40iw_qp *)ibqp; in i40iw_post_send()
2107 ukqp = &iwqp->sc_qp.qp_uk; in i40iw_post_send()
2109 spin_lock_irqsave(&iwqp->lock, flags); in i40iw_post_send()
2111 if (iwqp->flush_issued) { in i40iw_post_send()
2120 if ((ib_wr->send_flags & IB_SEND_SIGNALED) || iwqp->sig_all) in i40iw_post_send()
2215 struct i40iw_sc_dev *dev = &iwqp->iwdev->sc_dev; in i40iw_post_send()
2237 ret = dev->iw_priv_qp_ops->iw_mr_fast_register(&iwqp->sc_qp, &info, true); in i40iw_post_send()
2259 spin_unlock_irqrestore(&iwqp->lock, flags); in i40iw_post_send()
2273 struct i40iw_qp *iwqp; in i40iw_post_recv() local
2281 iwqp = (struct i40iw_qp *)ibqp; in i40iw_post_recv()
2282 ukqp = &iwqp->sc_qp.qp_uk; in i40iw_post_recv()
2285 spin_lock_irqsave(&iwqp->lock, flags); in i40iw_post_recv()
2287 if (iwqp->flush_issued) { in i40iw_post_recv()
2310 spin_unlock_irqrestore(&iwqp->lock, flags); in i40iw_post_recv()
2330 struct i40iw_qp *iwqp; in i40iw_poll_cq() local
2383 iwqp = (struct i40iw_qp *)qp->back_qp; in i40iw_poll_cq()
2384 if (iwqp->iwarp_state > I40IW_QP_STATE_RTS) { in i40iw_poll_cq()
2386 complete(&iwqp->sq_drained); in i40iw_poll_cq()
2388 complete(&iwqp->rq_drained); in i40iw_poll_cq()