Lines Matching refs:ceq

2522 	struct irdma_sc_ceq *ceq;  in irdma_sc_cq_create()  local
2532 ceq = cq->dev->ceq[cq->ceq_id]; in irdma_sc_cq_create()
2533 if (ceq && ceq->reg_cq) in irdma_sc_cq_create()
2534 ret_code = irdma_sc_add_cq_ctx(ceq, cq); in irdma_sc_cq_create()
2541 if (ceq && ceq->reg_cq) in irdma_sc_cq_create()
2542 irdma_sc_remove_cq_ctx(ceq, cq); in irdma_sc_cq_create()
2594 struct irdma_sc_ceq *ceq; in irdma_sc_cq_destroy() local
2601 ceq = cq->dev->ceq[cq->ceq_id]; in irdma_sc_cq_destroy()
2602 if (ceq && ceq->reg_cq) in irdma_sc_cq_destroy()
2603 irdma_sc_remove_cq_ctx(ceq, cq); in irdma_sc_cq_destroy()
3021 static u32 irdma_sc_find_reg_cq(struct irdma_sc_ceq *ceq, in irdma_sc_find_reg_cq() argument
3026 for (i = 0; i < ceq->reg_cq_size; i++) { in irdma_sc_find_reg_cq()
3027 if (cq == ceq->reg_cq[i]) in irdma_sc_find_reg_cq()
3039 int irdma_sc_add_cq_ctx(struct irdma_sc_ceq *ceq, struct irdma_sc_cq *cq) in irdma_sc_add_cq_ctx() argument
3043 spin_lock_irqsave(&ceq->req_cq_lock, flags); in irdma_sc_add_cq_ctx()
3045 if (ceq->reg_cq_size == ceq->elem_cnt) { in irdma_sc_add_cq_ctx()
3046 spin_unlock_irqrestore(&ceq->req_cq_lock, flags); in irdma_sc_add_cq_ctx()
3050 ceq->reg_cq[ceq->reg_cq_size++] = cq; in irdma_sc_add_cq_ctx()
3052 spin_unlock_irqrestore(&ceq->req_cq_lock, flags); in irdma_sc_add_cq_ctx()
3062 void irdma_sc_remove_cq_ctx(struct irdma_sc_ceq *ceq, struct irdma_sc_cq *cq) in irdma_sc_remove_cq_ctx() argument
3067 spin_lock_irqsave(&ceq->req_cq_lock, flags); in irdma_sc_remove_cq_ctx()
3068 cq_ctx_idx = irdma_sc_find_reg_cq(ceq, cq); in irdma_sc_remove_cq_ctx()
3072 ceq->reg_cq_size--; in irdma_sc_remove_cq_ctx()
3073 if (cq_ctx_idx != ceq->reg_cq_size) in irdma_sc_remove_cq_ctx()
3074 ceq->reg_cq[cq_ctx_idx] = ceq->reg_cq[ceq->reg_cq_size]; in irdma_sc_remove_cq_ctx()
3075 ceq->reg_cq[ceq->reg_cq_size] = NULL; in irdma_sc_remove_cq_ctx()
3078 spin_unlock_irqrestore(&ceq->req_cq_lock, flags); in irdma_sc_remove_cq_ctx()
3618 int irdma_sc_ceq_init(struct irdma_sc_ceq *ceq, in irdma_sc_ceq_init() argument
3634 ceq->size = sizeof(*ceq); in irdma_sc_ceq_init()
3635 ceq->ceqe_base = (struct irdma_ceqe *)info->ceqe_base; in irdma_sc_ceq_init()
3636 ceq->ceq_id = info->ceq_id; in irdma_sc_ceq_init()
3637 ceq->dev = info->dev; in irdma_sc_ceq_init()
3638 ceq->elem_cnt = info->elem_cnt; in irdma_sc_ceq_init()
3639 ceq->ceq_elem_pa = info->ceqe_pa; in irdma_sc_ceq_init()
3640 ceq->virtual_map = info->virtual_map; in irdma_sc_ceq_init()
3641 ceq->itr_no_expire = info->itr_no_expire; in irdma_sc_ceq_init()
3642 ceq->reg_cq = info->reg_cq; in irdma_sc_ceq_init()
3643 ceq->reg_cq_size = 0; in irdma_sc_ceq_init()
3644 spin_lock_init(&ceq->req_cq_lock); in irdma_sc_ceq_init()
3645 ceq->pbl_chunk_size = (ceq->virtual_map ? info->pbl_chunk_size : 0); in irdma_sc_ceq_init()
3646 ceq->first_pm_pbl_idx = (ceq->virtual_map ? info->first_pm_pbl_idx : 0); in irdma_sc_ceq_init()
3647 ceq->pbl_list = (ceq->virtual_map ? info->pbl_list : NULL); in irdma_sc_ceq_init()
3648 ceq->tph_en = info->tph_en; in irdma_sc_ceq_init()
3649 ceq->tph_val = info->tph_val; in irdma_sc_ceq_init()
3650 ceq->vsi = info->vsi; in irdma_sc_ceq_init()
3651 ceq->polarity = 1; in irdma_sc_ceq_init()
3652 IRDMA_RING_INIT(ceq->ceq_ring, ceq->elem_cnt); in irdma_sc_ceq_init()
3653 ceq->dev->ceq[info->ceq_id] = ceq; in irdma_sc_ceq_init()
3665 static int irdma_sc_ceq_create(struct irdma_sc_ceq *ceq, u64 scratch, in irdma_sc_ceq_create() argument
3672 cqp = ceq->dev->cqp; in irdma_sc_ceq_create()
3676 set_64bit_val(wqe, 16, ceq->elem_cnt); in irdma_sc_ceq_create()
3678 (ceq->virtual_map ? 0 : ceq->ceq_elem_pa)); in irdma_sc_ceq_create()
3680 (ceq->virtual_map ? ceq->first_pm_pbl_idx : 0)); in irdma_sc_ceq_create()
3682 FIELD_PREP(IRDMA_CQPSQ_TPHVAL, ceq->tph_val) | in irdma_sc_ceq_create()
3683 FIELD_PREP(IRDMA_CQPSQ_VSIIDX, ceq->vsi->vsi_idx)); in irdma_sc_ceq_create()
3684 hdr = FIELD_PREP(IRDMA_CQPSQ_CEQ_CEQID, ceq->ceq_id) | in irdma_sc_ceq_create()
3686 FIELD_PREP(IRDMA_CQPSQ_CEQ_LPBLSIZE, ceq->pbl_chunk_size) | in irdma_sc_ceq_create()
3687 FIELD_PREP(IRDMA_CQPSQ_CEQ_VMAP, ceq->virtual_map) | in irdma_sc_ceq_create()
3688 FIELD_PREP(IRDMA_CQPSQ_CEQ_ITRNOEXPIRE, ceq->itr_no_expire) | in irdma_sc_ceq_create()
3689 FIELD_PREP(IRDMA_CQPSQ_TPHEN, ceq->tph_en) | in irdma_sc_ceq_create()
3707 static int irdma_sc_cceq_create_done(struct irdma_sc_ceq *ceq) in irdma_sc_cceq_create_done() argument
3711 cqp = ceq->dev->cqp; in irdma_sc_cceq_create_done()
3720 int irdma_sc_cceq_destroy_done(struct irdma_sc_ceq *ceq) in irdma_sc_cceq_destroy_done() argument
3724 if (ceq->reg_cq) in irdma_sc_cceq_destroy_done()
3725 irdma_sc_remove_cq_ctx(ceq, ceq->dev->ccq); in irdma_sc_cceq_destroy_done()
3727 cqp = ceq->dev->cqp; in irdma_sc_cceq_destroy_done()
3739 int irdma_sc_cceq_create(struct irdma_sc_ceq *ceq, u64 scratch) in irdma_sc_cceq_create() argument
3742 struct irdma_sc_dev *dev = ceq->dev; in irdma_sc_cceq_create()
3744 dev->ccq->vsi = ceq->vsi; in irdma_sc_cceq_create()
3745 if (ceq->reg_cq) { in irdma_sc_cceq_create()
3746 ret_code = irdma_sc_add_cq_ctx(ceq, ceq->dev->ccq); in irdma_sc_cceq_create()
3751 ret_code = irdma_sc_ceq_create(ceq, scratch, true); in irdma_sc_cceq_create()
3753 return irdma_sc_cceq_create_done(ceq); in irdma_sc_cceq_create()
3764 int irdma_sc_ceq_destroy(struct irdma_sc_ceq *ceq, u64 scratch, bool post_sq) in irdma_sc_ceq_destroy() argument
3770 cqp = ceq->dev->cqp; in irdma_sc_ceq_destroy()
3775 set_64bit_val(wqe, 16, ceq->elem_cnt); in irdma_sc_ceq_destroy()
3776 set_64bit_val(wqe, 48, ceq->first_pm_pbl_idx); in irdma_sc_ceq_destroy()
3777 hdr = ceq->ceq_id | in irdma_sc_ceq_destroy()
3779 FIELD_PREP(IRDMA_CQPSQ_CEQ_LPBLSIZE, ceq->pbl_chunk_size) | in irdma_sc_ceq_destroy()
3780 FIELD_PREP(IRDMA_CQPSQ_CEQ_VMAP, ceq->virtual_map) | in irdma_sc_ceq_destroy()
3781 FIELD_PREP(IRDMA_CQPSQ_TPHEN, ceq->tph_en) | in irdma_sc_ceq_destroy()
3803 void *irdma_sc_process_ceq(struct irdma_sc_dev *dev, struct irdma_sc_ceq *ceq) in irdma_sc_process_ceq() argument
3815 ceqe = IRDMA_GET_CURRENT_CEQ_ELEM(ceq); in irdma_sc_process_ceq()
3818 if (polarity != ceq->polarity) in irdma_sc_process_ceq()
3824 IRDMA_RING_MOVE_TAIL(ceq->ceq_ring); in irdma_sc_process_ceq()
3826 if (!IRDMA_RING_CURRENT_TAIL(ceq->ceq_ring)) in irdma_sc_process_ceq()
3827 ceq->polarity ^= 1; in irdma_sc_process_ceq()
3832 if (ceq->reg_cq) { in irdma_sc_process_ceq()
3833 spin_lock_irqsave(&ceq->req_cq_lock, flags); in irdma_sc_process_ceq()
3834 cq_idx = irdma_sc_find_reg_cq(ceq, cq); in irdma_sc_process_ceq()
3835 spin_unlock_irqrestore(&ceq->req_cq_lock, flags); in irdma_sc_process_ceq()
3838 IRDMA_RING_MOVE_TAIL(ceq->ceq_ring); in irdma_sc_process_ceq()
3839 if (!IRDMA_RING_CURRENT_TAIL(ceq->ceq_ring)) in irdma_sc_process_ceq()
3840 ceq->polarity ^= 1; in irdma_sc_process_ceq()
3857 void irdma_sc_cleanup_ceqes(struct irdma_sc_cq *cq, struct irdma_sc_ceq *ceq) in irdma_sc_cleanup_ceqes() argument
3860 u8 ceq_polarity = ceq->polarity; in irdma_sc_cleanup_ceqes()
3867 next = IRDMA_RING_GET_NEXT_TAIL(ceq->ceq_ring, 0); in irdma_sc_cleanup_ceqes()
3869 for (i = 1; i <= IRDMA_RING_SIZE(*ceq); i++) { in irdma_sc_cleanup_ceqes()
3870 ceqe = IRDMA_GET_CEQ_ELEM_AT_POS(ceq, next); in irdma_sc_cleanup_ceqes()
3881 next = IRDMA_RING_GET_NEXT_TAIL(ceq->ceq_ring, i); in irdma_sc_cleanup_ceqes()
4991 status = irdma_sc_ceq_destroy(pcmdinfo->in.u.ceq_destroy.ceq, in irdma_exec_cqp_cmd()
5002 status = irdma_sc_ceq_create(pcmdinfo->in.u.ceq_create.ceq, in irdma_exec_cqp_cmd()