Introducing eswitch variant of set vlan tpid api which can be
using for PF and VF

Signed-off-by: Harman Kalra <hka...@marvell.com>
---
 drivers/common/cnxk/roc_eswitch.c  | 15 +++++++++++++++
 drivers/common/cnxk/roc_eswitch.h  |  4 ++++
 drivers/common/cnxk/roc_nix_priv.h | 11 +++++------
 drivers/common/cnxk/roc_nix_vlan.c | 23 ++++++++++++++++++-----
 drivers/common/cnxk/version.map    |  1 +
 5 files changed, 43 insertions(+), 11 deletions(-)

diff --git a/drivers/common/cnxk/roc_eswitch.c 
b/drivers/common/cnxk/roc_eswitch.c
index e480ab1046..020a891a32 100644
--- a/drivers/common/cnxk/roc_eswitch.c
+++ b/drivers/common/cnxk/roc_eswitch.c
@@ -304,3 +304,18 @@ roc_eswitch_npc_rss_action_configure(struct roc_npc 
*roc_npc, struct roc_npc_flo
                ((uint64_t)(rss_grp_idx & NPC_RSS_ACT_GRP_MASK) << 
NPC_RSS_ACT_GRP_OFFSET);
        return 0;
 }
+
+int
+roc_eswitch_nix_vlan_tpid_set(struct roc_nix *roc_nix, uint32_t type, uint16_t 
tpid, bool is_vf)
+{
+       struct nix *nix = roc_nix_to_nix_priv(roc_nix);
+       struct dev *dev = &nix->dev;
+       int rc;
+
+       /* Configuring for PF/VF */
+       rc = nix_vlan_tpid_set(dev->mbox, dev->pf_func | is_vf, type, tpid);
+       if (rc)
+               plt_err("Failed to set tpid for PF, rc %d", rc);
+
+       return rc;
+}
diff --git a/drivers/common/cnxk/roc_eswitch.h 
b/drivers/common/cnxk/roc_eswitch.h
index cdbe808a71..34b75d10ac 100644
--- a/drivers/common/cnxk/roc_eswitch.h
+++ b/drivers/common/cnxk/roc_eswitch.h
@@ -19,4 +19,8 @@ int __roc_api roc_eswitch_npc_mcam_delete_rule(struct roc_npc 
*roc_npc, struct r
 int __roc_api roc_eswitch_npc_rss_action_configure(struct roc_npc *roc_npc,
                                                   struct roc_npc_flow *flow, 
uint32_t flowkey_cfg,
                                                   uint16_t *reta_tbl);
+
+/* NIX */
+int __roc_api roc_eswitch_nix_vlan_tpid_set(struct roc_nix *nix, uint32_t 
type, uint16_t tpid,
+                                           bool is_vf);
 #endif /* __ROC_ESWITCH_H__ */
diff --git a/drivers/common/cnxk/roc_nix_priv.h 
b/drivers/common/cnxk/roc_nix_priv.h
index a582b9df33..3d99ade2b4 100644
--- a/drivers/common/cnxk/roc_nix_priv.h
+++ b/drivers/common/cnxk/roc_nix_priv.h
@@ -469,13 +469,12 @@ void nix_tm_shaper_profile_free(struct 
nix_tm_shaper_profile *profile);
 uint64_t nix_get_blkaddr(struct dev *dev);
 void nix_lf_rq_dump(__io struct nix_cn10k_rq_ctx_s *ctx, FILE *file);
 int nix_lf_gen_reg_dump(uintptr_t nix_lf_base, uint64_t *data);
-int nix_lf_stat_reg_dump(uintptr_t nix_lf_base, uint64_t *data,
-                        uint8_t lf_tx_stats, uint8_t lf_rx_stats);
-int nix_lf_int_reg_dump(uintptr_t nix_lf_base, uint64_t *data, uint16_t qints,
-                       uint16_t cints);
-int nix_q_ctx_get(struct dev *dev, uint8_t ctype, uint16_t qid,
-                 __io void **ctx_p);
+int nix_lf_stat_reg_dump(uintptr_t nix_lf_base, uint64_t *data, uint8_t 
lf_tx_stats,
+                        uint8_t lf_rx_stats);
+int nix_lf_int_reg_dump(uintptr_t nix_lf_base, uint64_t *data, uint16_t qints, 
uint16_t cints);
+int nix_q_ctx_get(struct dev *dev, uint8_t ctype, uint16_t qid, __io void 
**ctx_p);
 uint8_t nix_tm_lbk_relchan_get(struct nix *nix);
+int nix_vlan_tpid_set(struct mbox *mbox, uint16_t pcifunc, uint32_t type, 
uint16_t tpid);
 
 /*
  * Telemetry
diff --git a/drivers/common/cnxk/roc_nix_vlan.c 
b/drivers/common/cnxk/roc_nix_vlan.c
index abd2eb0571..db218593ad 100644
--- a/drivers/common/cnxk/roc_nix_vlan.c
+++ b/drivers/common/cnxk/roc_nix_vlan.c
@@ -211,18 +211,17 @@ roc_nix_vlan_insert_ena_dis(struct roc_nix *roc_nix,
 }
 
 int
-roc_nix_vlan_tpid_set(struct roc_nix *roc_nix, uint32_t type, uint16_t tpid)
+nix_vlan_tpid_set(struct mbox *mbox, uint16_t pcifunc, uint32_t type, uint16_t 
tpid)
 {
-       struct nix *nix = roc_nix_to_nix_priv(roc_nix);
-       struct dev *dev = &nix->dev;
-       struct mbox *mbox = mbox_get(dev->mbox);
        struct nix_set_vlan_tpid *tpid_cfg;
        int rc = -ENOSPC;
 
-       tpid_cfg = mbox_alloc_msg_nix_set_vlan_tpid(mbox);
+       /* Configuring for PF */
+       tpid_cfg = mbox_alloc_msg_nix_set_vlan_tpid(mbox_get(mbox));
        if (tpid_cfg == NULL)
                goto exit;
        tpid_cfg->tpid = tpid;
+       tpid_cfg->hdr.pcifunc = pcifunc;
 
        if (type & ROC_NIX_VLAN_TYPE_OUTER)
                tpid_cfg->vlan_type = NIX_VLAN_TYPE_OUTER;
@@ -234,3 +233,17 @@ roc_nix_vlan_tpid_set(struct roc_nix *roc_nix, uint32_t 
type, uint16_t tpid)
        mbox_put(mbox);
        return rc;
 }
+
+int
+roc_nix_vlan_tpid_set(struct roc_nix *roc_nix, uint32_t type, uint16_t tpid)
+{
+       struct nix *nix = roc_nix_to_nix_priv(roc_nix);
+       struct dev *dev = &nix->dev;
+       int rc;
+
+       rc = nix_vlan_tpid_set(dev->mbox, dev->pf_func, type, tpid);
+       if (rc)
+               plt_err("Failed to set tpid for PF, rc %d", rc);
+
+       return rc;
+}
diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map
index b509c28b86..0331c0fb9d 100644
--- a/drivers/common/cnxk/version.map
+++ b/drivers/common/cnxk/version.map
@@ -87,6 +87,7 @@ INTERNAL {
        roc_dpi_disable;
        roc_dpi_enable;
        roc_error_msg_get;
+       roc_eswitch_nix_vlan_tpid_set;
        roc_eswitch_npc_mcam_delete_rule;
        roc_eswitch_npc_mcam_rx_rule;
        roc_eswitch_npc_mcam_tx_rule;
-- 
2.18.0

Reply via email to