common/cnxk: support profile state toggle
authorSunil Kumar Kori <skori@marvell.com>
Tue, 12 Oct 2021 07:05:51 +0000 (12:35 +0530)
committerJerin Jacob <jerinj@marvell.com>
Tue, 19 Oct 2021 14:22:30 +0000 (16:22 +0200)
Implement RoC API to enable or disable HW bandwidth profiles
on CN10K platform.

Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
drivers/common/cnxk/roc_nix.h
drivers/common/cnxk/roc_nix_bpf.c
drivers/common/cnxk/version.map

index e8f1f96..346a1ed 100644 (file)
@@ -226,6 +226,7 @@ struct roc_nix_stats_queue {
 struct roc_nix_rq {
        /* Input parameters */
        uint16_t qid;
+       uint16_t bpf_id;
        uint64_t aura_handle;
        bool ipsech_ena;
        uint16_t first_skip;
@@ -611,6 +612,9 @@ int __roc_api roc_nix_bpf_config(struct roc_nix *roc_nix, uint16_t id,
                                 enum roc_nix_bpf_level_flag lvl_flag,
                                 struct roc_nix_bpf_cfg *cfg);
 
+int __roc_api roc_nix_bpf_ena_dis(struct roc_nix *roc_nix, uint16_t id,
+                                 struct roc_nix_rq *rq, bool enable);
+
 uint8_t __roc_api
 roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag lvl_flag);
 
index aa5829e..c61a697 100644 (file)
@@ -449,3 +449,42 @@ roc_nix_bpf_config(struct roc_nix *roc_nix, uint16_t id,
 
        return mbox_process(mbox);
 }
+
+int
+roc_nix_bpf_ena_dis(struct roc_nix *roc_nix, uint16_t id, struct roc_nix_rq *rq,
+                   bool enable)
+{
+       struct nix *nix = roc_nix_to_nix_priv(roc_nix);
+       struct mbox *mbox = get_mbox(roc_nix);
+       struct nix_cn10k_aq_enq_req *aq;
+       int rc;
+
+       if (roc_model_is_cn9k())
+               return NIX_ERR_HW_NOTSUP;
+
+       if (rq->qid >= nix->nb_rx_queues)
+               return NIX_ERR_QUEUE_INVALID_RANGE;
+
+       aq = mbox_alloc_msg_nix_cn10k_aq_enq(mbox);
+       if (aq == NULL)
+               return -ENOSPC;
+       aq->qidx = rq->qid;
+       aq->ctype = NIX_AQ_CTYPE_RQ;
+       aq->op = NIX_AQ_INSTOP_WRITE;
+
+       aq->rq.policer_ena = enable;
+       aq->rq_mask.policer_ena = ~(aq->rq_mask.policer_ena);
+       if (enable) {
+               aq->rq.band_prof_id = id;
+               aq->rq_mask.band_prof_id = ~(aq->rq_mask.band_prof_id);
+       }
+
+       rc = mbox_process(mbox);
+       if (rc)
+               goto exit;
+
+       rq->bpf_id = id;
+
+exit:
+       return rc;
+}
index f34fd3b..05b19be 100644 (file)
@@ -85,6 +85,7 @@ INTERNAL {
        roc_nix_bpf_alloc;
        roc_nix_bpf_config;
        roc_nix_bpf_count_get;
+       roc_nix_bpf_ena_dis;
        roc_nix_bpf_free;
        roc_nix_bpf_free_all;
        roc_nix_bpf_level_to_idx;