• Home
  • Raw
  • Download

Lines Matching refs:rsrc

50 						      *rsrc, bool initial);
70 struct i40iw_puda_buf *i40iw_puda_get_bufpool(struct i40iw_puda_rsrc *rsrc) in i40iw_puda_get_bufpool() argument
73 struct list_head *list = &rsrc->bufpool; in i40iw_puda_get_bufpool()
76 spin_lock_irqsave(&rsrc->bufpool_lock, flags); in i40iw_puda_get_bufpool()
79 rsrc->avail_buf_count--; in i40iw_puda_get_bufpool()
81 rsrc->stats_buf_alloc_fail++; in i40iw_puda_get_bufpool()
82 spin_unlock_irqrestore(&rsrc->bufpool_lock, flags); in i40iw_puda_get_bufpool()
91 void i40iw_puda_ret_bufpool(struct i40iw_puda_rsrc *rsrc, in i40iw_puda_ret_bufpool() argument
96 spin_lock_irqsave(&rsrc->bufpool_lock, flags); in i40iw_puda_ret_bufpool()
97 list_add(&buf->list, &rsrc->bufpool); in i40iw_puda_ret_bufpool()
98 spin_unlock_irqrestore(&rsrc->bufpool_lock, flags); in i40iw_puda_ret_bufpool()
99 rsrc->avail_buf_count++; in i40iw_puda_ret_bufpool()
109 static void i40iw_puda_post_recvbuf(struct i40iw_puda_rsrc *rsrc, u32 wqe_idx, in i40iw_puda_post_recvbuf() argument
113 struct i40iw_sc_qp *qp = &rsrc->qp; in i40iw_puda_post_recvbuf()
118 i40iw_debug(rsrc->dev, I40IW_DEBUG_PUDA, in i40iw_puda_post_recvbuf()
137 static enum i40iw_status_code i40iw_puda_replenish_rq(struct i40iw_puda_rsrc *rsrc, in i40iw_puda_replenish_rq() argument
141 u32 invalid_cnt = rsrc->rxq_invalid_cnt; in i40iw_puda_replenish_rq()
145 buf = i40iw_puda_get_bufpool(rsrc); in i40iw_puda_replenish_rq()
148 i40iw_puda_post_recvbuf(rsrc, rsrc->rx_wqe_idx, buf, in i40iw_puda_replenish_rq()
150 rsrc->rx_wqe_idx = in i40iw_puda_replenish_rq()
151 ((rsrc->rx_wqe_idx + 1) % rsrc->rq_size); in i40iw_puda_replenish_rq()
152 rsrc->rxq_invalid_cnt--; in i40iw_puda_replenish_rq()
288 struct i40iw_puda_rsrc *rsrc; in i40iw_puda_poll_completion() local
294 rsrc = (cq_type == I40IW_CQ_TYPE_ILQ) ? cq->vsi->ilq : cq->vsi->ieq; in i40iw_puda_poll_completion()
308 if (!qp || !rsrc) { in i40iw_puda_poll_completion()
313 if (qp->qp_id != rsrc->qp_id) { in i40iw_puda_poll_completion()
323 rsrc->stats_rcvd_pkt_err++; in i40iw_puda_poll_completion()
325 i40iw_ilq_putback_rcvbuf(&rsrc->qp, in i40iw_puda_poll_completion()
328 i40iw_puda_ret_bufpool(rsrc, buf); in i40iw_puda_poll_completion()
329 i40iw_puda_replenish_rq(rsrc, false); in i40iw_puda_poll_completion()
334 rsrc->stats_pkt_rcvd++; in i40iw_puda_poll_completion()
335 rsrc->compl_rxwqe_idx = info.wqe_idx; in i40iw_puda_poll_completion()
337 rsrc->receive(rsrc->vsi, buf); in i40iw_puda_poll_completion()
339 i40iw_ilq_putback_rcvbuf(&rsrc->qp, info.wqe_idx); in i40iw_puda_poll_completion()
341 i40iw_puda_replenish_rq(rsrc, false); in i40iw_puda_poll_completion()
347 rsrc->xmit_complete(rsrc->vsi, sqwrid); in i40iw_puda_poll_completion()
348 spin_lock_irqsave(&rsrc->bufpool_lock, flags); in i40iw_puda_poll_completion()
349 rsrc->tx_wqe_avail_cnt++; in i40iw_puda_poll_completion()
350 spin_unlock_irqrestore(&rsrc->bufpool_lock, flags); in i40iw_puda_poll_completion()
351 if (!list_empty(&rsrc->vsi->ilq->txpend)) in i40iw_puda_poll_completion()
352 i40iw_puda_send_buf(rsrc->vsi->ilq, NULL); in i40iw_puda_poll_completion()
422 void i40iw_puda_send_buf(struct i40iw_puda_rsrc *rsrc, struct i40iw_puda_buf *buf) in i40iw_puda_send_buf() argument
428 spin_lock_irqsave(&rsrc->bufpool_lock, flags); in i40iw_puda_send_buf()
432 if (!rsrc->tx_wqe_avail_cnt || (buf && !list_empty(&rsrc->txpend))) { in i40iw_puda_send_buf()
433 list_add_tail(&buf->list, &rsrc->txpend); in i40iw_puda_send_buf()
434 spin_unlock_irqrestore(&rsrc->bufpool_lock, flags); in i40iw_puda_send_buf()
435 rsrc->stats_sent_pkt_q++; in i40iw_puda_send_buf()
436 if (rsrc->type == I40IW_PUDA_RSRC_TYPE_ILQ) in i40iw_puda_send_buf()
437 i40iw_debug(rsrc->dev, I40IW_DEBUG_PUDA, in i40iw_puda_send_buf()
441 rsrc->tx_wqe_avail_cnt--; in i40iw_puda_send_buf()
446 buf = i40iw_puda_get_listbuf(&rsrc->txpend); in i40iw_puda_send_buf()
457 info.doloopback = (rsrc->type == I40IW_PUDA_RSRC_TYPE_IEQ); in i40iw_puda_send_buf()
459 ret = i40iw_puda_send(&rsrc->qp, &info); in i40iw_puda_send_buf()
461 rsrc->tx_wqe_avail_cnt++; in i40iw_puda_send_buf()
462 rsrc->stats_sent_pkt_q++; in i40iw_puda_send_buf()
463 list_add(&buf->list, &rsrc->txpend); in i40iw_puda_send_buf()
464 if (rsrc->type == I40IW_PUDA_RSRC_TYPE_ILQ) in i40iw_puda_send_buf()
465 i40iw_debug(rsrc->dev, I40IW_DEBUG_PUDA, in i40iw_puda_send_buf()
468 rsrc->stats_pkt_sent++; in i40iw_puda_send_buf()
471 spin_unlock_irqrestore(&rsrc->bufpool_lock, flags); in i40iw_puda_send_buf()
478 static void i40iw_puda_qp_setctx(struct i40iw_puda_rsrc *rsrc) in i40iw_puda_qp_setctx() argument
480 struct i40iw_sc_qp *qp = &rsrc->qp; in i40iw_puda_qp_setctx()
495 LS_64(rsrc->cq_id, I40IWQPC_TXCQNUM) | in i40iw_puda_qp_setctx()
496 LS_64(rsrc->cq_id, I40IWQPC_RXCQNUM)); in i40iw_puda_qp_setctx()
508 i40iw_debug_buf(rsrc->dev, I40IW_DEBUG_PUDA, "PUDA QP CONTEXT", in i40iw_puda_qp_setctx()
552 static enum i40iw_status_code i40iw_puda_qp_create(struct i40iw_puda_rsrc *rsrc) in i40iw_puda_qp_create() argument
554 struct i40iw_sc_qp *qp = &rsrc->qp; in i40iw_puda_qp_create()
560 sq_size = rsrc->sq_size * I40IW_QP_WQE_MIN_SIZE; in i40iw_puda_qp_create()
561 rq_size = rsrc->rq_size * I40IW_QP_WQE_MIN_SIZE; in i40iw_puda_qp_create()
566 i40iw_allocate_dma_mem(rsrc->dev->hw, &rsrc->qpmem, t_size, in i40iw_puda_qp_create()
569 i40iw_debug(rsrc->dev, I40IW_DEBUG_PUDA, "%s: error dma mem\n", __func__); in i40iw_puda_qp_create()
573 mem = &rsrc->qpmem; in i40iw_puda_qp_create()
575 qp->hw_sq_size = i40iw_get_encoded_wqe_size(rsrc->sq_size, false); in i40iw_puda_qp_create()
576 qp->hw_rq_size = i40iw_get_encoded_wqe_size(rsrc->rq_size, false); in i40iw_puda_qp_create()
577 qp->pd = &rsrc->sc_pd; in i40iw_puda_qp_create()
579 qp->dev = rsrc->dev; in i40iw_puda_qp_create()
580 qp->back_qp = (void *)rsrc; in i40iw_puda_qp_create()
583 qp->vsi = rsrc->vsi; in i40iw_puda_qp_create()
585 ukqp->rq_base = &ukqp->sq_base[rsrc->sq_size]; in i40iw_puda_qp_create()
586 ukqp->shadow_area = ukqp->rq_base[rsrc->rq_size].elem; in i40iw_puda_qp_create()
591 ukqp->qp_id = rsrc->qp_id; in i40iw_puda_qp_create()
592 ukqp->sq_wrtrk_array = rsrc->sq_wrtrk_array; in i40iw_puda_qp_create()
593 ukqp->rq_wrid_array = rsrc->rq_wrid_array; in i40iw_puda_qp_create()
595 ukqp->qp_id = rsrc->qp_id; in i40iw_puda_qp_create()
596 ukqp->sq_size = rsrc->sq_size; in i40iw_puda_qp_create()
597 ukqp->rq_size = rsrc->rq_size; in i40iw_puda_qp_create()
612 i40iw_puda_qp_setctx(rsrc); in i40iw_puda_qp_create()
613 if (rsrc->ceq_valid) in i40iw_puda_qp_create()
614 ret = i40iw_cqp_qp_create_cmd(rsrc->dev, qp); in i40iw_puda_qp_create()
616 ret = i40iw_puda_qp_wqe(rsrc->dev, qp); in i40iw_puda_qp_create()
618 i40iw_free_dma_mem(rsrc->dev->hw, &rsrc->qpmem); in i40iw_puda_qp_create()
670 static enum i40iw_status_code i40iw_puda_cq_create(struct i40iw_puda_rsrc *rsrc) in i40iw_puda_cq_create() argument
672 struct i40iw_sc_dev *dev = rsrc->dev; in i40iw_puda_cq_create()
673 struct i40iw_sc_cq *cq = &rsrc->cq; in i40iw_puda_cq_create()
680 cq->vsi = rsrc->vsi; in i40iw_puda_cq_create()
681 cqsize = rsrc->cq_size * (sizeof(struct i40iw_cqe)); in i40iw_puda_cq_create()
683 ret = i40iw_allocate_dma_mem(dev->hw, &rsrc->cqmem, tsize, in i40iw_puda_cq_create()
688 mem = &rsrc->cqmem; in i40iw_puda_cq_create()
691 info.type = (rsrc->type == I40IW_PUDA_RSRC_TYPE_ILQ) ? in i40iw_puda_cq_create()
693 info.shadow_read_threshold = rsrc->cq_size >> 2; in i40iw_puda_cq_create()
699 init_info->cq_size = rsrc->cq_size; in i40iw_puda_cq_create()
700 init_info->cq_id = rsrc->cq_id; in i40iw_puda_cq_create()
706 if (rsrc->ceq_valid) in i40iw_puda_cq_create()
712 i40iw_free_dma_mem(dev->hw, &rsrc->cqmem); in i40iw_puda_cq_create()
720 static void i40iw_puda_free_qp(struct i40iw_puda_rsrc *rsrc) in i40iw_puda_free_qp() argument
724 struct i40iw_sc_dev *dev = rsrc->dev; in i40iw_puda_free_qp()
726 if (rsrc->ceq_valid) { in i40iw_puda_free_qp()
727 i40iw_cqp_qp_destroy_cmd(dev, &rsrc->qp); in i40iw_puda_free_qp()
731 ret = dev->iw_priv_qp_ops->qp_destroy(&rsrc->qp, in i40iw_puda_free_qp()
753 static void i40iw_puda_free_cq(struct i40iw_puda_rsrc *rsrc) in i40iw_puda_free_cq() argument
757 struct i40iw_sc_dev *dev = rsrc->dev; in i40iw_puda_free_cq()
759 if (rsrc->ceq_valid) { in i40iw_puda_free_cq()
760 i40iw_cqp_cq_destroy_cmd(dev, &rsrc->cq); in i40iw_puda_free_cq()
763 ret = dev->iw_priv_cq_ops->cq_destroy(&rsrc->cq, 0, true); in i40iw_puda_free_cq()
792 struct i40iw_puda_rsrc *rsrc; in i40iw_puda_dele_resources() local
799 rsrc = vsi->ilq; in i40iw_puda_dele_resources()
803 rsrc = vsi->ieq; in i40iw_puda_dele_resources()
812 switch (rsrc->completion) { in i40iw_puda_dele_resources()
814 i40iw_free_hash_desc(rsrc->hash_desc); in i40iw_puda_dele_resources()
817 i40iw_puda_free_qp(rsrc); in i40iw_puda_dele_resources()
819 i40iw_free_dma_mem(dev->hw, &rsrc->qpmem); in i40iw_puda_dele_resources()
823 i40iw_puda_free_cq(rsrc); in i40iw_puda_dele_resources()
825 i40iw_free_dma_mem(dev->hw, &rsrc->cqmem); in i40iw_puda_dele_resources()
828 i40iw_debug(rsrc->dev, I40IW_DEBUG_PUDA, "%s error no resources\n", __func__); in i40iw_puda_dele_resources()
832 buf = rsrc->alloclist; in i40iw_puda_dele_resources()
837 rsrc->alloc_buf_count--; in i40iw_puda_dele_resources()
847 static enum i40iw_status_code i40iw_puda_allocbufs(struct i40iw_puda_rsrc *rsrc, in i40iw_puda_allocbufs() argument
855 buf = i40iw_puda_alloc_buf(rsrc->dev, rsrc->buf_size); in i40iw_puda_allocbufs()
857 rsrc->stats_buf_alloc_fail++; in i40iw_puda_allocbufs()
860 i40iw_puda_ret_bufpool(rsrc, buf); in i40iw_puda_allocbufs()
861 rsrc->alloc_buf_count++; in i40iw_puda_allocbufs()
862 if (!rsrc->alloclist) { in i40iw_puda_allocbufs()
863 rsrc->alloclist = buf; in i40iw_puda_allocbufs()
865 nextbuf = rsrc->alloclist; in i40iw_puda_allocbufs()
866 rsrc->alloclist = buf; in i40iw_puda_allocbufs()
870 rsrc->avail_buf_count = rsrc->alloc_buf_count; in i40iw_puda_allocbufs()
884 struct i40iw_puda_rsrc *rsrc; in i40iw_puda_create_rsrc() local
908 rsrc = (struct i40iw_puda_rsrc *)vmem->va; in i40iw_puda_create_rsrc()
909 spin_lock_init(&rsrc->bufpool_lock); in i40iw_puda_create_rsrc()
913 rsrc->receive = info->receive; in i40iw_puda_create_rsrc()
914 rsrc->xmit_complete = info->xmit_complete; in i40iw_puda_create_rsrc()
919 rsrc->receive = i40iw_ieq_receive; in i40iw_puda_create_rsrc()
920 rsrc->xmit_complete = i40iw_ieq_tx_compl; in i40iw_puda_create_rsrc()
923 rsrc->ceq_valid = info->ceq_valid; in i40iw_puda_create_rsrc()
924 rsrc->type = info->type; in i40iw_puda_create_rsrc()
925 rsrc->sq_wrtrk_array = (struct i40iw_sq_uk_wr_trk_info *)((u8 *)vmem->va + pudasize); in i40iw_puda_create_rsrc()
926 rsrc->rq_wrid_array = (u64 *)((u8 *)vmem->va + pudasize + sqwridsize); in i40iw_puda_create_rsrc()
928 INIT_LIST_HEAD(&rsrc->bufpool); in i40iw_puda_create_rsrc()
929 INIT_LIST_HEAD(&rsrc->txpend); in i40iw_puda_create_rsrc()
931 rsrc->tx_wqe_avail_cnt = info->sq_size - 1; in i40iw_puda_create_rsrc()
932 dev->iw_pd_ops->pd_init(dev, &rsrc->sc_pd, info->pd_id, -1); in i40iw_puda_create_rsrc()
933 rsrc->qp_id = info->qp_id; in i40iw_puda_create_rsrc()
934 rsrc->cq_id = info->cq_id; in i40iw_puda_create_rsrc()
935 rsrc->sq_size = info->sq_size; in i40iw_puda_create_rsrc()
936 rsrc->rq_size = info->rq_size; in i40iw_puda_create_rsrc()
937 rsrc->cq_size = info->rq_size + info->sq_size; in i40iw_puda_create_rsrc()
938 rsrc->buf_size = info->buf_size; in i40iw_puda_create_rsrc()
939 rsrc->dev = dev; in i40iw_puda_create_rsrc()
940 rsrc->vsi = vsi; in i40iw_puda_create_rsrc()
942 ret = i40iw_puda_cq_create(rsrc); in i40iw_puda_create_rsrc()
944 rsrc->completion = PUDA_CQ_CREATED; in i40iw_puda_create_rsrc()
945 ret = i40iw_puda_qp_create(rsrc); in i40iw_puda_create_rsrc()
952 rsrc->completion = PUDA_QP_CREATED; in i40iw_puda_create_rsrc()
954 ret = i40iw_puda_allocbufs(rsrc, info->tx_buf_cnt + info->rq_size); in i40iw_puda_create_rsrc()
961 rsrc->rxq_invalid_cnt = info->rq_size; in i40iw_puda_create_rsrc()
962 ret = i40iw_puda_replenish_rq(rsrc, true); in i40iw_puda_create_rsrc()
967 if (!i40iw_init_hash_desc(&rsrc->hash_desc)) { in i40iw_puda_create_rsrc()
968 rsrc->check_crc = true; in i40iw_puda_create_rsrc()
969 rsrc->completion = PUDA_HASH_CRC_COMPLETE; in i40iw_puda_create_rsrc()
974 dev->ccq_ops->ccq_arm(&rsrc->cq); in i40iw_puda_create_rsrc()