provided vlan tpid set ops implementations.<br /> <br />Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> <br />---<br /> drivers/net/zxdh/zxdh_ethdev.c     |  1 +<br /> drivers/net/zxdh/zxdh_ethdev_ops.c | 37 ++++++++++++++++++++++++++++++<br /> drivers/net/zxdh/zxdh_ethdev_ops.h |  1 +<br /> drivers/net/zxdh/zxdh_msg.c        | 30 ++++++++++++++++++++++++<br /> drivers/net/zxdh/zxdh_msg.h        |  6 +++++<br /> 5 files changed, 75 insertions(+)<br /> <br />diff --git a/drivers/net/zxdh/zxdh_ethdev.c b/drivers/net/zxdh/zxdh_ethdev.c<br />index 7fd542af3e..60b311bd8c 100644<br />--- a/drivers/net/zxdh/zxdh_ethdev.c<br />+++ b/drivers/net/zxdh/zxdh_ethdev.c<br />@@ -1424,6 +1424,7 @@ static const struct eth_dev_ops zxdh_eth_dev_ops = {<br />     .promiscuous_disable     = zxdh_dev_promiscuous_disable,<br />     .allmulticast_enable     = zxdh_dev_allmulticast_enable,<br />     .allmulticast_disable     = zxdh_dev_allmulticast_disable,<br />+    .vlan_tpid_set             = zxdh_vlan_tpid_set,<br />     .vlan_filter_set         = zxdh_dev_vlan_filter_set,<br />     .vlan_offload_set         = zxdh_dev_vlan_offload_set,<br />     .reta_update             = zxdh_dev_rss_reta_update,<br />diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c<br />index d0b0c17279..0a7feb2d5f 100644<br />--- a/drivers/net/zxdh/zxdh_ethdev_ops.c<br />+++ b/drivers/net/zxdh/zxdh_ethdev_ops.c<br />@@ -1004,6 +1004,43 @@ zxdh_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask)<br />     return ret;<br /> }<br />  <br />+int<br />+zxdh_vlan_tpid_set(struct rte_eth_dev *dev, enum rte_vlan_type vlan_type, uint16_t tpid)<br />+{<br />+    struct zxdh_hw *hw = dev->data->dev_private;<br />+    struct zxdh_port_vlan_table port_vlan_table = {0};<br />+    struct zxdh_msg_info msg = {0};<br />+    int ret = 0;<br />+<br />+    if (vlan_type != RTE_ETH_VLAN_TYPE_OUTER) {<br />+        PMD_DRV_LOG(ERR, "unsupported rte vlan type!");<br />+        return -1;<br />+    }<br />+<br />+    if (hw->is_pf) {<br />+        ret = zxdh_get_port_vlan_attr(hw, hw->vport.vport, &port_vlan_table);<br />+        if (ret != 0)<br />+            PMD_DRV_LOG(ERR, "get port vlan attr table failed");<br />+        port_vlan_table.hit_flag = 1;<br />+        port_vlan_table.business_vlan_tpid = tpid;<br />+        ret = zxdh_set_port_vlan_attr(hw, hw->vport.vport, &port_vlan_table);<br />+        if (ret != 0)<br />+            PMD_DRV_LOG(ERR, "set port vlan tpid %d attr table failed", tpid);<br />+    } else {<br />+        zxdh_msg_head_build(hw, ZXDH_VLAN_SET_TPID, &msg);<br />+        msg.data.zxdh_vlan_tpid.tpid = tpid;<br />+        ret = zxdh_vf_send_msg_to_pf(dev, &msg,<br />+                sizeof(struct zxdh_msg_info), NULL, 0);<br />+        if (ret) {<br />+            PMD_DRV_LOG(ERR, "port %d vlan tpid %d set failed",<br />+                hw->vfid, tpid);<br />+            return -1;<br />+        }<br />+    }<br />+<br />+    return 0;<br />+}<br />+<br /> int<br /> zxdh_dev_rss_reta_update(struct rte_eth_dev *dev,<br />              struct rte_eth_rss_reta_entry64 *reta_conf,<br />diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.h b/drivers/net/zxdh/zxdh_ethdev_ops.h<br />index 97a1eb4532..6015b3de59 100644<br />--- a/drivers/net/zxdh/zxdh_ethdev_ops.h<br />+++ b/drivers/net/zxdh/zxdh_ethdev_ops.h<br />@@ -120,6 +120,7 @@ int zxdh_dev_allmulticast_enable(struct rte_eth_dev *dev);<br /> int zxdh_dev_allmulticast_disable(struct rte_eth_dev *dev);<br /> int zxdh_dev_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on);<br /> int zxdh_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask);<br />+int zxdh_vlan_tpid_set(struct rte_eth_dev *dev, enum rte_vlan_type vlan_type, uint16_t tpid);<br /> int zxdh_dev_rss_reta_update(struct rte_eth_dev *dev,<br />              struct rte_eth_rss_reta_entry64 *reta_conf,<br />              uint16_t reta_size);<br />diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c<br />index 2a3d358a20..15c4a7db2b 100644<br />--- a/drivers/net/zxdh/zxdh_msg.c<br />+++ b/drivers/net/zxdh/zxdh_msg.c<br />@@ -2158,6 +2158,35 @@ zxdh_vf_mtr_hw_profile_cfg(struct zxdh_hw *pf_hw __rte_unused,<br />     return 0;<br /> }<br />  <br />+static int<br />+zxdh_vf_vlan_tpid_set(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data,<br />+        void *res_info, uint16_t *res_len)<br />+{<br />+    struct zxdh_vlan_tpid *vlan_tpid = (struct zxdh_vlan_tpid *)cfg_data;<br />+    struct zxdh_port_vlan_table port_vlan_table = {0};<br />+    int ret = 0;<br />+<br />+    RTE_ASSERT(!cfg_data || !pf_hw || !res_info || !res_len);<br />+<br />+    ret = zxdh_get_port_vlan_attr(pf_hw, vport, &port_vlan_table);<br />+    if (ret) {<br />+        PMD_DRV_LOG(ERR, "get port vlan attr failed, code:%d", ret);<br />+        goto proc_end;<br />+    }<br />+    port_vlan_table.hit_flag = 1;<br />+    port_vlan_table.business_vlan_tpid = vlan_tpid->tpid;<br />+    ret = zxdh_set_port_vlan_attr(pf_hw, vport, &port_vlan_table);<br />+    if (ret) {<br />+        PMD_DRV_LOG(ERR, "set port vlan attr failed, code:%d", ret);<br />+        goto proc_end;<br />+    }<br />+<br />+proc_end:<br />+    *res_len = sizeof(uint8_t);<br />+    ZXDH_SET(msg_reply_body, res_info, flag, ZXDH_REPS_FAIL);<br />+    return ret;<br />+}<br />+<br /> static const zxdh_msg_process_callback zxdh_proc_cb[] = {<br />     [ZXDH_NULL] = NULL,<br />     [ZXDH_VF_PORT_INIT] = zxdh_vf_port_init,<br />@@ -2169,6 +2198,7 @@ static const zxdh_msg_process_callback zxdh_proc_cb[] = {<br />     [ZXDH_VLAN_FILTER_ADD] = zxdh_vf_vlan_filter_table_add,<br />     [ZXDH_VLAN_FILTER_DEL] = zxdh_vf_vlan_filter_table_del,<br />     [ZXDH_VLAN_OFFLOAD] = zxdh_vf_set_vlan_offload,<br />+    [ZXDH_VLAN_SET_TPID] = zxdh_vf_vlan_tpid_set,<br />     [ZXDH_RSS_ENABLE] = zxdh_vf_rss_enable,<br />     [ZXDH_RSS_RETA_GET] = zxdh_vf_rss_table_get,<br />     [ZXDH_RSS_RETA_SET] = zxdh_vf_rss_table_set,<br />diff --git a/drivers/net/zxdh/zxdh_msg.h b/drivers/net/zxdh/zxdh_msg.h<br />index 7dad6f7335..86c406c333 100644<br />--- a/drivers/net/zxdh/zxdh_msg.h<br />+++ b/drivers/net/zxdh/zxdh_msg.h<br />@@ -229,6 +229,7 @@ enum zxdh_msg_type {<br />     ZXDH_VLAN_FILTER_ADD = 18,<br />     ZXDH_VLAN_FILTER_DEL = 19,<br />     ZXDH_VLAN_OFFLOAD = 21,<br />+    ZXDH_VLAN_SET_TPID = 23,<br />  <br />     ZXDH_PORT_ATTRS_SET = 25,<br />     ZXDH_PORT_PROMISC_SET = 26,<br />@@ -535,6 +536,10 @@ struct zxdh_plcr_profile_free {<br />     uint16_t profile_id;<br /> };<br />  <br />+struct zxdh_vlan_tpid {<br />+    uint16_t tpid;<br />+};<br />+<br /> struct zxdh_msg_info {<br />     union {<br />         uint8_t head_len[ZXDH_MSG_HEAD_LEN];<br />@@ -551,6 +556,7 @@ struct zxdh_msg_info {<br />         struct zxdh_vlan_filter vlan_filter_msg;<br />         struct zxdh_vlan_filter_set vlan_filter_set_msg;<br />         struct zxdh_vlan_offload vlan_offload_msg;<br />+        struct zxdh_vlan_tpid zxdh_vlan_tpid;<br />         struct zxdh_rss_reta rss_reta;<br />         struct zxdh_rss_enable rss_enable;<br />         struct zxdh_rss_hf rss_hf;<br />--  <br />2.27.0<br />