Support multiple PF process flow table.<br /> <br />Signed-off-by: Tianhao Zhang <zhang.tianhao2@zte.com.cn> <br />---<br /> drivers/net/zxdh/meson.build       |  10 +-<br /> drivers/net/zxdh/zxdh_ethdev.c     | 138 ++++++++-------<br /> drivers/net/zxdh/zxdh_ethdev.h     |   9 +-<br /> drivers/net/zxdh/zxdh_ethdev_ops.c |  20 +--<br /> drivers/net/zxdh/zxdh_np.c         | 269 +++++++++++++++++------------<br /> drivers/net/zxdh/zxdh_np.h         |  18 +-<br /> drivers/net/zxdh/zxdh_tables.c     |  72 ++++----<br /> 7 files changed, 299 insertions(+), 237 deletions(-)<br /> <br />diff --git a/drivers/net/zxdh/meson.build b/drivers/net/zxdh/meson.build<br />index 7554d4dc60..0213ccb2fa 100644<br />--- a/drivers/net/zxdh/meson.build<br />+++ b/drivers/net/zxdh/meson.build<br />@@ -1,15 +1,9 @@<br /> # SPDX-License-Identifier: BSD-3-Clause<br /> # Copyright(c) 2024 ZTE Corporation<br />  <br />-if not is_linux<br />+if not is_linux or not dpdk_conf.get('RTE_ARCH_64')<br />     build = false<br />-    reason = 'only supported on Linux' <br />-    subdir_done()<br />-endif<br />-<br />-if arch_subdir != 'x86' and arch_subdir != 'arm' or not dpdk_conf.get('RTE_ARCH_64')<br />-    build = false<br />-    reason = 'only supported on x86_64 and aarch64' <br />+    reason = 'only supported on 64-bit Linux' <br />     subdir_done()<br /> endif<br />  <br />diff --git a/drivers/net/zxdh/zxdh_ethdev.c b/drivers/net/zxdh/zxdh_ethdev.c<br />index 0429bd0333..4d54e92d39 100644<br />--- a/drivers/net/zxdh/zxdh_ethdev.c<br />+++ b/drivers/net/zxdh/zxdh_ethdev.c<br />@@ -20,7 +20,7 @@<br /> #include "zxdh_ethdev_ops.h" <br />  <br /> struct zxdh_hw_internal zxdh_hw_internal[RTE_MAX_ETHPORTS];<br />-struct zxdh_dev_shared_data g_dev_sd[ZXDH_SLOT_MAX];<br />+struct zxdh_dev_nic_shared_data dev_nic_sd[ZXDH_SLOT_MAX];<br /> static rte_spinlock_t zxdh_shared_data_lock = RTE_SPINLOCK_INITIALIZER;<br /> struct zxdh_shared_data *zxdh_shared_data;<br /> struct zxdh_net_hdr_dl g_net_hdr_dl[RTE_MAX_ETHPORTS];<br />@@ -1141,26 +1141,26 @@ zxdh_np_dtb_data_res_free(struct zxdh_hw *hw)<br />     int i;<br />  <br />     if (dtb_data->init_done && dtb_data->bind_device == dev) {<br />-        ret = zxdh_np_online_uninit(hw->slot_id, dev->data->name, dtb_data->queueid);<br />+        ret = zxdh_np_online_uninit(hw->dev_id, dev->data->name, dtb_data->queueid);<br />         if (ret)<br />             PMD_DRV_LOG(ERR, "%s dpp_np_online_uninstall failed", dev->data->name);<br />  <br />-        rte_memzone_free(dtb_data->dtb_table_conf_mz);<br />-        dtb_data->dtb_table_conf_mz = NULL;<br />-        rte_memzone_free(dtb_data->dtb_table_dump_mz);<br />-        dtb_data->dtb_table_dump_mz = NULL;<br />-<br />-        for (i = 0; i < ZXDH_MAX_BASE_DTB_TABLE_COUNT; i++) {<br />-            if (dtb_data->dtb_table_bulk_dump_mz[i]) {<br />-                rte_memzone_free(dtb_data->dtb_table_bulk_dump_mz[i]);<br />-                dtb_data->dtb_table_bulk_dump_mz[i] = NULL;<br />-            }<br />-        }<br />+        hw->dev_nic_sd->dtb_used_num--;<br />         dtb_data->init_done = 0;<br />         dtb_data->bind_device = NULL;<br />     }<br />-    if (zxdh_shared_data != NULL)<br />-        zxdh_shared_data->np_init_done = 0;<br />+<br />+    rte_memzone_free(dtb_data->dtb_table_conf_mz);<br />+    dtb_data->dtb_table_conf_mz = NULL;<br />+    rte_memzone_free(dtb_data->dtb_table_dump_mz);<br />+    dtb_data->dtb_table_dump_mz = NULL;<br />+<br />+    for (i = 0; i < ZXDH_MAX_BASE_DTB_TABLE_COUNT; i++) {<br />+        if (dtb_data->dtb_table_bulk_dump_mz[i]) {<br />+            rte_memzone_free(dtb_data->dtb_table_bulk_dump_mz[i]);<br />+            dtb_data->dtb_table_bulk_dump_mz[i] = NULL;<br />+        }<br />+    }<br /> }<br />  <br /> static int<br />@@ -1191,17 +1191,19 @@ static void<br /> zxdh_np_uninit(struct rte_eth_dev *dev)<br /> {<br />     struct zxdh_hw *hw = dev->data->dev_private;<br />-    struct zxdh_dtb_shared_data *dtb_data = &hw->dev_sd->dtb_sd;<br />  <br />     if (!hw->is_pf)<br />         return;<br />-    if (!dtb_data->init_done && !dtb_data->dev_refcnt)<br />-        return;<br />  <br />     zxdh_tbl_entry_online_destroy(dev);<br />+    zxdh_np_dtb_data_res_free(hw);<br />+<br />+    if (hw->dev_nic_sd->init_done && hw->dev_nic_sd->dtb_used_num == 0) {<br />+        zxdh_np_soft_res_uninstall(hw->dev_id);<br />+        hw->dev_nic_sd->init_done = 0;<br />+    }<br />+    PMD_DRV_LOG(DEBUG, "zxdh_np_destroy: dtb_used_num %d", hw->dev_nic_sd->dtb_used_num);<br />  <br />-    if (--dtb_data->dev_refcnt == 0)<br />-        zxdh_np_dtb_data_res_free(hw);<br /> }<br />  <br /> static int<br />@@ -1254,6 +1256,17 @@ zxdh_dev_stop(struct rte_eth_dev *dev)<br />     return ret;<br /> }<br />  <br />+static void<br />+zxdh_priv_res_free(struct zxdh_hw *priv)<br />+{<br />+    rte_free(priv->vfinfo);<br />+    priv->vfinfo = NULL;<br />+    if (priv->channel_context != NULL) {<br />+        rte_free(priv->channel_context);<br />+        priv->channel_context = NULL;<br />+    }<br />+}<br />+<br /> static int<br /> zxdh_dev_close(struct rte_eth_dev *dev)<br /> {<br />@@ -1285,7 +1298,9 @@ zxdh_dev_close(struct rte_eth_dev *dev)<br />     zxdh_free_queues(dev);<br />  <br />     zxdh_bar_msg_chan_exit();<br />+    zxdh_priv_res_free(hw);<br />  <br />+    rte_free(hw->dev_sd);<br />     if (dev->data->mac_addrs != NULL) {<br />         rte_free(dev->data->mac_addrs);<br />         dev->data->mac_addrs = NULL;<br />@@ -1615,6 +1630,7 @@ zxdh_np_dtb_res_init(struct rte_eth_dev *dev)<br />     struct zxdh_bar_offset_res res = {0};<br />     char buf[ZXDH_MAX_NAME_LEN] = {0};<br />     struct zxdh_dtb_shared_data *dtb_data = &hw->dev_sd->dtb_sd;<br />+    struct zxdh_dev_nic_shared_data *dev_nic_sd = hw->dev_nic_sd;<br />     int ret = 0;<br />  <br />     if (dtb_data->init_done) {<br />@@ -1625,15 +1641,13 @@ zxdh_np_dtb_res_init(struct rte_eth_dev *dev)<br />  <br />     dtb_data->queueid = ZXDH_INVALID_DTBQUE;<br />     dtb_data->bind_device = dev;<br />-    dtb_data->dev_refcnt++;<br />-    dtb_data->init_done = 1;<br />  <br />     ZXDH_DEV_INIT_CTRL_T *dpp_ctrl = rte_zmalloc(NULL, sizeof(*dpp_ctrl) +<br />             sizeof(ZXDH_DTB_ADDR_INFO_T) * 256, 0);<br />     if (dpp_ctrl == NULL) {<br />         PMD_DRV_LOG(ERR, "dev %s annot allocate memory for dpp_ctrl", dev->device->name);<br />         ret = -ENOMEM;<br />-        goto free_res;<br />+        return ret;<br />     }<br />     dpp_ctrl->queue_id = 0xff;<br />     dpp_ctrl->vport = hw->vport.vport;<br />@@ -1694,7 +1708,7 @@ zxdh_np_dtb_res_init(struct rte_eth_dev *dev)<br />         goto free_res;<br />     }<br />  <br />-    ret = zxdh_np_host_init(hw->slot_id, dpp_ctrl);<br />+    ret = zxdh_np_host_init(hw->dev_id, dpp_ctrl);<br />     if (ret) {<br />         PMD_DRV_LOG(ERR, "dev %s dpp host np init failed", dev->device->name);<br />         goto free_res;<br />@@ -1703,6 +1717,9 @@ zxdh_np_dtb_res_init(struct rte_eth_dev *dev)<br />     PMD_DRV_LOG(DEBUG, "dev %s dpp host np init ok.dtb queue %u",<br />         dev->device->name, dpp_ctrl->queue_id);<br />     dtb_data->queueid = dpp_ctrl->queue_id;<br />+    dtb_data->dev_refcnt++;<br />+    dev_nic_sd->dtb_used_num++;<br />+    dtb_data->init_done = 1;<br />     rte_free(dpp_ctrl);<br />     return 0;<br />  <br />@@ -1717,11 +1734,11 @@ zxdh_get_dev_shared_data_idx(uint32_t dev_serial_id)<br /> {<br />     uint16_t idx = 0;<br />     for (; idx < ZXDH_SLOT_MAX; idx++) {<br />-        if (g_dev_sd[idx].serial_id == dev_serial_id || g_dev_sd[idx].serial_id == 0)<br />+        if (dev_nic_sd[idx].serial_id == dev_serial_id || dev_nic_sd[idx].serial_id == 0)<br />             return idx;<br />     }<br />  <br />-    PMD_DRV_LOG(ERR, "dev serial_id[%u] can not found in global dev_share_data arrays",<br />+    PMD_DRV_LOG(ERR, "dev serial_id[%u] can not found in global dev_nic_share_data arrays",<br />         dev_serial_id);<br />     return ZXDH_INVALID_SLOT_IDX;<br /> }<br />@@ -1744,9 +1761,10 @@ static int zxdh_init_dev_share_data(struct rte_eth_dev *eth_dev)<br />         return -EINVAL;<br />  <br />     hw->slot_id = slot_id;<br />-    hw->dev_id = (hw->pcie_id << 16) | (hw->slot_id & 0xffff);<br />-    g_dev_sd[slot_id].serial_id = serial_id;<br />-    hw->dev_sd = &g_dev_sd[slot_id];<br />+    hw->dev_id = hw->pcie_id;<br />+    dev_nic_sd[slot_id].serial_id = serial_id;<br />+    hw->dev_nic_sd = &dev_nic_sd[slot_id];<br />+    hw->dev_sd = rte_zmalloc("zxdh_dtb", sizeof(struct zxdh_dev_shared_data), 0);<br />  <br />     return 0;<br /> }<br />@@ -1938,41 +1956,39 @@ zxdh_np_init(struct rte_eth_dev *eth_dev)<br /> {<br />     struct zxdh_hw *hw = eth_dev->data->dev_private;<br />     struct zxdh_dtb_shared_data *dtb_data = &hw->dev_sd->dtb_sd;<br />+    struct zxdh_dev_nic_shared_data *dev_nic_sd = hw->dev_nic_sd;<br />     int ret = 0;<br />  <br />-    if (hw->is_pf && dtb_data->init_done) {<br />-        dtb_data->dev_refcnt++;<br />-        zxdh_tbl_entry_offline_destroy(hw);<br />-        PMD_DRV_LOG(INFO, "no need to init dtb  dtb chanenl %d devref %d",<br />-            dtb_data->queueid, dtb_data->dev_refcnt);<br />+    if (!hw->is_pf)<br />         return 0;<br />-    }<br />  <br />-    if (hw->is_pf) {<br />-        ret = zxdh_np_dtb_res_init(eth_dev);<br />-        if (ret) {<br />-            PMD_DRV_LOG(ERR, "np dtb init failed, ret:%d", ret);<br />-            return ret;<br />-        }<br />+    hw->dev_id = (hw->pcie_id << 16) | (hw->slot_id & 0xffff);<br />+<br />+    ret = zxdh_np_dtb_res_init(eth_dev);<br />+    if (ret) {<br />+        PMD_DRV_LOG(ERR, "np dtb init failed, ret:%d", ret);<br />+        return ret;<br />     }<br />  <br />-    if (hw->is_pf) {<br />-        ret = zxdh_np_se_res_get_and_init(hw->dev_id, ZXDH_SE_STD_NIC_RES_TYPE);<br />-        if (ret) {<br />-            PMD_DRV_LOG(ERR, "dpp apt init failed, code:%d ", ret);<br />-            return -ret;<br />-        }<br />-        if (!hw->switchoffload) {<br />-            if (hw->hash_search_index >= ZXDH_HASHIDX_MAX) {<br />-                PMD_DRV_LOG(ERR, "invalid hash idx %d", hw->hash_search_index);<br />-                return -1;<br />-            }<br />-            zxdh_tbl_entry_offline_destroy(hw);<br />+    if (dev_nic_sd->init_done) {<br />+        zxdh_tbl_entry_offline_destroy(hw);<br />+        PMD_DRV_LOG(ERR, "no need to init apt res. slot_id %d dtb chanenl %d dtb_used_num %d",<br />+            hw->slot_id, dtb_data->queueid, hw->dev_nic_sd->dtb_used_num);<br />+        return 0;<br />+    }<br />+    ret = zxdh_np_se_res_get_and_init(hw->dev_id, ZXDH_SE_STD_NIC_RES_TYPE);<br />+    if (ret) {<br />+        PMD_DRV_LOG(ERR, "dpp apt init failed, code:%d ", ret);<br />+        return -ret;<br />+    }<br />+    if (!hw->switchoffload) {<br />+        if (hw->hash_search_index >= ZXDH_HASHIDX_MAX) {<br />+            PMD_DRV_LOG(ERR, "invalid hash idx %d", hw->hash_search_index);<br />+            return -1;<br />         }<br />+        zxdh_tbl_entry_offline_destroy(hw);<br />     }<br />-<br />-    if (zxdh_shared_data != NULL)<br />-        zxdh_shared_data->np_init_done = 1;<br />+    dev_nic_sd->init_done = 1;<br />  <br />     PMD_DRV_LOG(DEBUG, "np init ok");<br />     return 0;<br />@@ -2069,16 +2085,6 @@ zxdh_priv_res_init(struct zxdh_hw *hw)<br />     return 0;<br /> }<br />  <br />-static void<br />-zxdh_priv_res_free(struct zxdh_hw *priv)<br />-{<br />-    rte_free(priv->vfinfo);<br />-    priv->vfinfo = NULL;<br />-    if (priv->channel_context != NULL) {<br />-        rte_free(priv->channel_context);<br />-        priv->channel_context = NULL;<br />-    }<br />-}<br />  <br /> static uint8_t<br /> is_pf(uint16_t device_id)<br />diff --git a/drivers/net/zxdh/zxdh_ethdev.h b/drivers/net/zxdh/zxdh_ethdev.h<br />index a2d7b14601..a269199540 100644<br />--- a/drivers/net/zxdh/zxdh_ethdev.h<br />+++ b/drivers/net/zxdh/zxdh_ethdev.h<br />@@ -103,6 +103,7 @@ struct zxdh_hw {<br />     struct zxdh_virtqueue **vqs;<br />     struct zxdh_chnl_context *channel_context;<br />     struct zxdh_dev_shared_data *dev_sd;<br />+    struct zxdh_dev_nic_shared_data *dev_nic_sd;<br />     struct vfinfo *vfinfo;<br />  <br />     uint64_t bar_addr[ZXDH_NUM_BARS];<br />@@ -183,7 +184,6 @@ struct zxdh_shared_data {<br />     int32_t init_done;       /* Whether primary has done initialization. */<br />     unsigned int secondary_cnt; /* Number of secondary processes init'd. */<br />  <br />-    int32_t np_init_done;<br />     uint32_t dev_refcnt;<br />     struct zxdh_dtb_shared_data *dtb_data;<br />     struct rte_mempool *flow_mp;<br />@@ -196,10 +196,15 @@ struct zxdh_shared_data {<br /> };<br />  <br /> struct zxdh_dev_shared_data {<br />-    uint32_t serial_id;<br />     struct zxdh_dtb_shared_data dtb_sd;<br /> };<br />  <br />+struct zxdh_dev_nic_shared_data {<br />+    uint32_t serial_id;<br />+    uint16_t dtb_used_num;<br />+    uint16_t init_done;<br />+};<br />+<br /> struct zxdh_dtb_bulk_dump_info {<br />     const char *mz_name;<br />     uint32_t mz_size;<br />diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c<br />index da32512b03..ee5d7304ef 100644<br />--- a/drivers/net/zxdh/zxdh_ethdev_ops.c<br />+++ b/drivers/net/zxdh/zxdh_ethdev_ops.c<br />@@ -1556,7 +1556,7 @@ zxdh_np_stats_get(struct rte_eth_dev *dev, struct zxdh_hw_np_stats *np_stats)<br />  <br />     idx = stats_id + ZXDH_BROAD_STATS_EGRESS_BASE;<br />     memset(&stats_data, 0, sizeof(stats_data));<br />-    ret = zxdh_np_dtb_stats_get(hw->slot_id, dtb_data->queueid,<br />+    ret = zxdh_np_dtb_stats_get(hw->dev_id, dtb_data->queueid,<br />                 0, idx, (uint32_t *)&stats_data);<br />     if (ret)<br />         return ret;<br />@@ -1567,7 +1567,7 @@ zxdh_np_stats_get(struct rte_eth_dev *dev, struct zxdh_hw_np_stats *np_stats)<br />  <br />     idx = stats_id + ZXDH_BROAD_STATS_INGRESS_BASE;<br />     memset(&stats_data, 0, sizeof(stats_data));<br />-    ret = zxdh_np_dtb_stats_get(hw->slot_id, dtb_data->queueid,<br />+    ret = zxdh_np_dtb_stats_get(hw->dev_id, dtb_data->queueid,<br />                 0, idx, (uint32_t *)&stats_data);<br />     if (ret)<br />         return ret;<br />@@ -1578,7 +1578,7 @@ zxdh_np_stats_get(struct rte_eth_dev *dev, struct zxdh_hw_np_stats *np_stats)<br />  <br />     idx = stats_id + ZXDH_MULTICAST_STATS_EGRESS_BASE;<br />     memset(&stats_data, 0, sizeof(stats_data));<br />-    ret = zxdh_np_dtb_stats_get(hw->slot_id, dtb_data->queueid,<br />+    ret = zxdh_np_dtb_stats_get(hw->dev_id, dtb_data->queueid,<br />                 0, idx, (uint32_t *)&stats_data);<br />     if (ret)<br />         return ret;<br />@@ -1589,7 +1589,7 @@ zxdh_np_stats_get(struct rte_eth_dev *dev, struct zxdh_hw_np_stats *np_stats)<br />  <br />     idx = stats_id + ZXDH_MULTICAST_STATS_INGRESS_BASE;<br />     memset(&stats_data, 0, sizeof(stats_data));<br />-    ret = zxdh_np_dtb_stats_get(hw->slot_id, dtb_data->queueid,<br />+    ret = zxdh_np_dtb_stats_get(hw->dev_id, dtb_data->queueid,<br />                 0, idx, (uint32_t *)&stats_data);<br />     if (ret)<br />         return ret;<br />@@ -1600,7 +1600,7 @@ zxdh_np_stats_get(struct rte_eth_dev *dev, struct zxdh_hw_np_stats *np_stats)<br />  <br />     idx = stats_id + ZXDH_UNICAST_STATS_EGRESS_BASE;<br />     memset(&stats_data, 0, sizeof(stats_data));<br />-    ret = zxdh_np_dtb_stats_get(hw->slot_id, dtb_data->queueid,<br />+    ret = zxdh_np_dtb_stats_get(hw->dev_id, dtb_data->queueid,<br />                 0, idx, (uint32_t *)&stats_data);<br />     if (ret)<br />         return ret;<br />@@ -1611,7 +1611,7 @@ zxdh_np_stats_get(struct rte_eth_dev *dev, struct zxdh_hw_np_stats *np_stats)<br />  <br />     idx = stats_id + ZXDH_UNICAST_STATS_INGRESS_BASE;<br />     memset(&stats_data, 0, sizeof(stats_data));<br />-    ret = zxdh_np_dtb_stats_get(hw->slot_id, dtb_data->queueid,<br />+    ret = zxdh_np_dtb_stats_get(hw->dev_id, dtb_data->queueid,<br />                 0, idx, (uint32_t *)&stats_data);<br />     if (ret)<br />         return ret;<br />@@ -1622,7 +1622,7 @@ zxdh_np_stats_get(struct rte_eth_dev *dev, struct zxdh_hw_np_stats *np_stats)<br />  <br />     idx = stats_id + ZXDH_MTU_STATS_EGRESS_BASE;<br />     memset(&stats_data, 0, sizeof(stats_data));<br />-    ret = zxdh_np_dtb_stats_get(hw->slot_id, dtb_data->queueid,<br />+    ret = zxdh_np_dtb_stats_get(hw->dev_id, dtb_data->queueid,<br />                 1, idx, (uint32_t *)&stats_data);<br />     if (ret)<br />         return ret;<br />@@ -1633,7 +1633,7 @@ zxdh_np_stats_get(struct rte_eth_dev *dev, struct zxdh_hw_np_stats *np_stats)<br />  <br />     idx = stats_id + ZXDH_MTU_STATS_INGRESS_BASE;<br />     memset(&stats_data, 0, sizeof(stats_data));<br />-    ret = zxdh_np_dtb_stats_get(hw->slot_id, dtb_data->queueid,<br />+    ret = zxdh_np_dtb_stats_get(hw->dev_id, dtb_data->queueid,<br />                 1, idx, (uint32_t *)&stats_data);<br />     if (ret)<br />         return ret;<br />@@ -1644,7 +1644,7 @@ zxdh_np_stats_get(struct rte_eth_dev *dev, struct zxdh_hw_np_stats *np_stats)<br />  <br />     idx = stats_id + ZXDH_MTR_STATS_EGRESS_BASE;<br />     memset(&stats_data, 0, sizeof(stats_data));<br />-    ret = zxdh_np_dtb_stats_get(hw->slot_id, dtb_data->queueid,<br />+    ret = zxdh_np_dtb_stats_get(hw->dev_id, dtb_data->queueid,<br />                 1, idx, (uint32_t *)&stats_data);<br />     if (ret)<br />         return ret;<br />@@ -1655,7 +1655,7 @@ zxdh_np_stats_get(struct rte_eth_dev *dev, struct zxdh_hw_np_stats *np_stats)<br />  <br />     idx = stats_id + ZXDH_MTR_STATS_INGRESS_BASE;<br />     memset(&stats_data, 0, sizeof(stats_data));<br />-    ret = zxdh_np_dtb_stats_get(hw->slot_id, dtb_data->queueid,<br />+    ret = zxdh_np_dtb_stats_get(hw->dev_id, dtb_data->queueid,<br />                 1, idx, (uint32_t *)&stats_data);<br />     if (ret)<br />         return ret;<br />diff --git a/drivers/net/zxdh/zxdh_np.c b/drivers/net/zxdh/zxdh_np.c<br />index 21c749c67a..024da113e2 100644<br />--- a/drivers/net/zxdh/zxdh_np.c<br />+++ b/drivers/net/zxdh/zxdh_np.c<br />@@ -300,8 +300,8 @@ static const ZXDH_DTB_TABLE_T g_dpp_dtb_dump_info[] = {<br /> };<br />  <br /> #define ZXDH_SDT_MGR_PTR_GET()    (&g_sdt_mgr)<br />-#define ZXDH_SDT_SOFT_TBL_GET(id) (g_sdt_mgr.sdt_tbl_array[id])<br />-#define ZXDH_DEV_INFO_GET(id) (g_dev_mgr.p_dev_array[id])<br />+#define ZXDH_SDT_SOFT_TBL_GET(id) (g_sdt_mgr.sdt_tbl_array[ZXDH_DEV_SLOT_ID(id)])<br />+#define ZXDH_DEV_INFO_GET(id) (g_dev_mgr.p_dev_array[ZXDH_DEV_SLOT_ID(id)])<br />  <br /> #define ZXDH_DTB_LEN(cmd_type, int_en, data_len) \<br />     (((data_len) & 0x3ff) | \<br />@@ -384,45 +384,55 @@ zxdh_np_comm_convert32(uint32_t dw_data)<br /> #define ZXDH_COMM_CONVERT32(w_data) \<br />             zxdh_np_comm_convert32(w_data)<br />  <br />-#define ZXDH_DTB_TAB_UP_WR_INDEX_GET(DEV_ID, QUEUE_ID)       \<br />-        (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.wr_index)<br />+#define ZXDH_DTB_TAB_UP_WR_INDEX_GET(DEV_ID, QUEUE_ID) \<br />+        (p_dpp_dtb_mgr[(ZXDH_DEV_SLOT_ID(DEV_ID))]->queue_info[(QUEUE_ID)].tab_up.wr_index)<br />  <br />-#define ZXDH_DTB_TAB_UP_USER_PHY_ADDR_FLAG_GET(DEV_ID, QUEUE_ID, INDEX)     \<br />-    (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.user_addr[(INDEX)].user_flag)<br />+#define ZXDH_DTB_TAB_UP_USER_PHY_ADDR_FLAG_GET(DEV_ID, QUEUE_ID, INDEX)    \<br />+        (p_dpp_dtb_mgr[(ZXDH_DEV_SLOT_ID(DEV_ID))]->                       \<br />+        queue_info[(QUEUE_ID)].tab_up.user_addr[(INDEX)].user_flag)<br />  <br />-#define ZXDH_DTB_TAB_UP_USER_PHY_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)     \<br />-        (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.user_addr[(INDEX)].phy_addr)<br />+#define ZXDH_DTB_TAB_UP_USER_PHY_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)         \<br />+        (p_dpp_dtb_mgr[(ZXDH_DEV_SLOT_ID(DEV_ID))]->                       \<br />+        queue_info[(QUEUE_ID)].tab_up.user_addr[(INDEX)].phy_addr)<br />  <br />-#define ZXDH_DTB_TAB_UP_DATA_LEN_GET(DEV_ID, QUEUE_ID, INDEX)       \<br />-        (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.data_len[(INDEX)])<br />+#define ZXDH_DTB_TAB_UP_DATA_LEN_GET(DEV_ID, QUEUE_ID, INDEX)              \<br />+        (p_dpp_dtb_mgr[(ZXDH_DEV_SLOT_ID(DEV_ID))]->                       \<br />+        queue_info[(QUEUE_ID)].tab_up.data_len[(INDEX)])<br />  <br />-#define ZXDH_DTB_TAB_UP_VIR_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)     \<br />-        (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.start_vir_addr + \<br />-        (INDEX) * p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.item_size)<br />+#define ZXDH_DTB_TAB_UP_VIR_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)   \<br />+        (p_dpp_dtb_mgr[(ZXDH_DEV_SLOT_ID(DEV_ID))]->            \<br />+        queue_info[(QUEUE_ID)].tab_up.start_vir_addr +          \<br />+        (INDEX) * p_dpp_dtb_mgr[(ZXDH_DEV_SLOT_ID(DEV_ID))]->   \<br />+        queue_info[(QUEUE_ID)].tab_up.item_size)<br />  <br />-#define ZXDH_DTB_TAB_DOWN_VIR_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)   \<br />-        (p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_down.start_vir_addr + \<br />-        INDEX * p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_down.item_size)<br />+#define ZXDH_DTB_TAB_DOWN_VIR_ADDR_GET(DEV_ID, QUEUE_ID, INDEX) \<br />+        (p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(DEV_ID)]->              \<br />+        queue_info[QUEUE_ID].tab_down.start_vir_addr +          \<br />+        (INDEX) * p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(DEV_ID)]->     \<br />+        queue_info[QUEUE_ID].tab_down.item_size)<br />  <br />-#define ZXDH_DTB_TAB_DOWN_WR_INDEX_GET(DEV_ID, QUEUE_ID)       \<br />-        (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_down.wr_index)<br />+#define ZXDH_DTB_TAB_DOWN_WR_INDEX_GET(DEV_ID, QUEUE_ID)        \<br />+        (p_dpp_dtb_mgr[(ZXDH_DEV_SLOT_ID(DEV_ID))]->            \<br />+        queue_info[(QUEUE_ID)].tab_down.wr_index)<br />  <br />-#define ZXDH_DTB_QUEUE_INIT_FLAG_GET(DEV_ID, QUEUE_ID)       \<br />-        (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].init_flag)<br />+#define ZXDH_DTB_QUEUE_INIT_FLAG_GET(DEV_ID, QUEUE_ID)          \<br />+        (p_dpp_dtb_mgr[(ZXDH_DEV_SLOT_ID(DEV_ID))]->            \<br />+        queue_info[(QUEUE_ID)].init_flag)<br />  <br />-#define ZXDH_DTB_TAB_UP_USER_VIR_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)     \<br />-        (p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_up.user_addr[INDEX].vir_addr)<br />+#define ZXDH_DTB_TAB_UP_USER_VIR_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)          \<br />+        (p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(DEV_ID)]->                          \<br />+        queue_info[QUEUE_ID].tab_up.user_addr[INDEX].vir_addr)<br />  <br />-#define ZXDH_DTB_TAB_UP_USER_ADDR_FLAG_SET(DEV_ID, QUEUE_ID, INDEX, VAL)     \<br />-        (p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_up.user_addr[INDEX].user_flag = \<br />-        VAL)<br />+#define ZXDH_DTB_TAB_UP_USER_ADDR_FLAG_SET(DEV_ID, QUEUE_ID, INDEX, VAL)    \<br />+        (p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(DEV_ID)]->                          \<br />+        queue_info[QUEUE_ID].tab_up.user_addr[INDEX].user_flag = VAL)<br />  <br /> static inline uint64_t<br /> zxdh_np_dtb_tab_down_phy_addr_get(uint32_t DEV_ID, uint32_t QUEUE_ID,<br />     uint32_t INDEX)<br /> {<br />-    return p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_down.start_phy_addr +<br />-        INDEX * p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_down.item_size;<br />+    return p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(DEV_ID)]->queue_info[QUEUE_ID].tab_down.start_phy_addr<br />+    + INDEX * p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(DEV_ID)]->queue_info[QUEUE_ID].tab_down.item_size;<br /> }<br />  <br /> #define ZXDH_DTB_TAB_DOWN_PHY_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)   \<br />@@ -432,8 +442,8 @@ static inline uint64_t<br /> zxdh_np_dtb_tab_up_phy_addr_get(uint32_t DEV_ID, uint32_t QUEUE_ID,<br />     uint32_t INDEX)<br /> {<br />-    return p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_up.start_phy_addr +<br />-        INDEX * p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_up.item_size;<br />+    return p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(DEV_ID)]->queue_info[QUEUE_ID].tab_up.start_phy_addr<br />+    + INDEX * p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(DEV_ID)]->queue_info[QUEUE_ID].tab_up.item_size;<br /> }<br />  <br /> #define ZXDH_DTB_TAB_UP_PHY_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)     \<br />@@ -517,7 +527,8 @@ zxdh_np_get_tn_color(ZXDH_RB_TN *p_tn)<br />  <br /> #define ZXDH_ACL_KEYSIZE_GET(key_mode) (2 * ZXDH_ETCAM_ENTRY_SIZE_GET(key_mode))<br />  <br />-#define GET_HASH_TBL_ID_INFO(dev_id, fun_id, tbl_id) (&g_tbl_id_info[dev_id][fun_id][tbl_id])<br />+#define GET_HASH_TBL_ID_INFO(dev_id, fun_id, tbl_id) \<br />+    (&g_tbl_id_info[ZXDH_DEV_SLOT_ID(dev_id)][fun_id][tbl_id])<br />  <br /> #define ZXDH_GET_HASH_TBL_ID(p_key)    ((p_key)[0] & 0x1F)<br />  <br />@@ -1830,25 +1841,34 @@ static void<br /> zxdh_np_dev_vport_get(uint32_t dev_id, uint32_t *vport)<br /> {<br />     ZXDH_DEV_MGR_T *p_dev_mgr = &g_dev_mgr;<br />-    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />-    *vport = p_dev_info->vport;<br />+    *vport = p_dev_info->vport[ZXDH_DEV_PF_INDEX(dev_id)];<br /> }<br />  <br /> static void<br /> zxdh_np_dev_agent_addr_get(uint32_t dev_id, uint64_t *agent_addr)<br /> {<br />     ZXDH_DEV_MGR_T *p_dev_mgr = &g_dev_mgr;<br />-    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />-    *agent_addr = p_dev_info->agent_addr;<br />+    *agent_addr = p_dev_info->agent_addr[ZXDH_DEV_PF_INDEX(dev_id)];<br />+}<br />+<br />+static void<br />+zxdh_np_dev_bar_pcie_id_get(uint32_t dev_id, uint16_t *p_pcie_id)<br />+{<br />+    ZXDH_DEV_MGR_T *p_dev_mgr = &g_dev_mgr;<br />+    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />+<br />+    *p_pcie_id = p_dev_info->pcie_id[ZXDH_DEV_PF_INDEX(dev_id)];<br /> }<br />  <br /> static void<br /> zxdh_np_dev_fw_bar_msg_num_set(uint32_t dev_id, uint32_t bar_msg_num)<br /> {<br />     ZXDH_DEV_MGR_T *p_dev_mgr = &g_dev_mgr;<br />-    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     p_dev_info->fw_bar_msg_num = bar_msg_num;<br />  <br />@@ -1859,7 +1879,7 @@ static void<br /> zxdh_np_dev_fw_bar_msg_num_get(uint32_t dev_id, uint32_t *bar_msg_num)<br /> {<br />     ZXDH_DEV_MGR_T *p_dev_mgr = &g_dev_mgr;<br />-    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     *bar_msg_num = p_dev_info->fw_bar_msg_num;<br /> }<br />@@ -1868,7 +1888,7 @@ static uint32_t<br /> zxdh_np_dev_opr_spinlock_get(uint32_t dev_id, uint32_t type, ZXDH_SPINLOCK_T **p_spinlock_out)<br /> {<br />     ZXDH_DEV_MGR_T *p_dev_mgr = &g_dev_mgr;<br />-    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     if (p_dev_info == NULL) {<br />         PMD_DRV_LOG(ERR, "Get dev_info[ %u ] fail!", dev_id);<br />@@ -1895,7 +1915,7 @@ zxdh_np_dev_dtb_opr_spinlock_get(uint32_t dev_id, uint32_t type,<br />             uint32_t index, ZXDH_SPINLOCK_T **p_spinlock_out)<br /> {<br />     ZXDH_DEV_MGR_T *p_dev_mgr = &g_dev_mgr;<br />-    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     switch (type) {<br />     case ZXDH_DEV_SPINLOCK_T_DTB:<br />@@ -1914,7 +1934,7 @@ zxdh_np_dev_hash_opr_spinlock_get(uint32_t dev_id,<br />     uint32_t fun_id, ZXDH_SPINLOCK_T **p_spinlock_out)<br /> {<br />     ZXDH_DEV_MGR_T *p_dev_mgr = &g_dev_mgr;<br />-    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     *p_spinlock_out = &p_dev_info->hash_spinlock[fun_id];<br /> }<br />@@ -2000,12 +2020,12 @@ zxdh_np_dev_get_pcie_addr(uint32_t dev_id)<br />     ZXDH_DEV_CFG_T *p_dev_info = NULL;<br />  <br />     p_dev_mgr = &g_dev_mgr;<br />-    p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+    p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     if (p_dev_info == NULL)<br />         return ZXDH_DEV_TYPE_INVALID;<br />  <br />-    return p_dev_info->pcie_addr;<br />+    return p_dev_info->pcie_addr[ZXDH_DEV_PF_INDEX(dev_id)];<br /> }<br />  <br /> static void<br />@@ -2322,10 +2342,10 @@ zxdh_np_dev_add(uint32_t  dev_id, ZXDH_DEV_TYPE_E dev_type,<br />         return ZXDH_RC_DEV_MGR_NOT_INIT;<br />     }<br />  <br />-    if (p_dev_mgr->p_dev_array[dev_id] != NULL) {<br />+    if (p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)] != NULL) {<br />         /* device is already exist. */<br />         PMD_DRV_LOG(ERR, "Device is added again");<br />-        p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+        p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />     } else {<br />         /* device is new. */<br />         p_dev_info = rte_malloc(NULL, sizeof(ZXDH_DEV_CFG_T), 0);<br />@@ -2333,14 +2353,15 @@ zxdh_np_dev_add(uint32_t  dev_id, ZXDH_DEV_TYPE_E dev_type,<br />             PMD_DRV_LOG(ERR, "malloc memory failed");<br />             return ZXDH_PAR_CHK_POINT_NULL;<br />         }<br />-        p_dev_mgr->p_dev_array[dev_id] = p_dev_info;<br />+        p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)] = p_dev_info;<br />         p_dev_mgr->device_num++;<br />     }<br />  <br />-    p_dev_info->device_id   = dev_id;<br />+    p_dev_info->slot_id   = ZXDH_DEV_SLOT_ID(dev_id);<br />     p_dev_info->dev_type    = dev_type;<br />     p_dev_info->access_type = access_type;<br />-    p_dev_info->pcie_addr   = pcie_addr;<br />+    p_dev_info->pcie_addr[ZXDH_DEV_PF_INDEX(dev_id)] = pcie_addr;<br />+    p_dev_info->pcie_id[ZXDH_DEV_PF_INDEX(dev_id)] = ZXDH_DEV_PCIE_ID(dev_id);<br />     p_dev_info->riscv_addr   = riscv_addr;<br />     p_dev_info->dma_vir_addr = dma_vir_addr;<br />     p_dev_info->dma_phy_addr = dma_phy_addr;<br />@@ -2368,7 +2389,7 @@ zxdh_np_dev_agent_status_set(uint32_t dev_id, uint32_t agent_flag)<br />     ZXDH_DEV_CFG_T *p_dev_info = NULL;<br />  <br />     p_dev_mgr = &g_dev_mgr;<br />-    p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+    p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     if (p_dev_info == NULL)<br />         return ZXDH_DEV_TYPE_INVALID;<br />@@ -2490,9 +2511,9 @@ zxdh_np_soft_sdt_tbl_set(uint32_t dev_id,<br />                         uint32_t table_type,<br />                         ZXDH_SDT_TBL_DATA_T *p_sdt_info)<br /> {<br />-    g_table_type[dev_id][sdt_no] = table_type;<br />-    g_sdt_info[dev_id][sdt_no].data_high32 = p_sdt_info->data_high32;<br />-    g_sdt_info[dev_id][sdt_no].data_low32  = p_sdt_info->data_low32;<br />+    g_table_type[ZXDH_DEV_SLOT_ID(dev_id)][sdt_no] = table_type;<br />+    g_sdt_info[ZXDH_DEV_SLOT_ID(dev_id)][sdt_no].data_high32 = p_sdt_info->data_high32;<br />+    g_sdt_info[ZXDH_DEV_SLOT_ID(dev_id)][sdt_no].data_low32  = p_sdt_info->data_low32;<br /> }<br />  <br /> static uint32_t<br />@@ -2666,12 +2687,13 @@ zxdh_np_ppu_parse_cls_bitmap(uint32_t dev_id,<br />  <br />     for (cls_id = 0; cls_id < ZXDH_PPU_CLUSTER_NUM; cls_id++) {<br />         cls_use = (bitmap >> cls_id) & 0x1;<br />-        g_ppu_cls_bit_map[dev_id].cls_use[cls_id] = cls_use;<br />+        g_ppu_cls_bit_map[ZXDH_DEV_SLOT_ID(dev_id)].cls_use[cls_id] = cls_use;<br />     }<br />  <br />     for (mem_id = 0; mem_id < ZXDH_PPU_INSTR_MEM_NUM; mem_id++) {<br />         instr_mem = (bitmap >> (mem_id * 2)) & 0x3;<br />-        g_ppu_cls_bit_map[dev_id].instr_mem[mem_id] = ((instr_mem > 0) ? 1 : 0);<br />+        g_ppu_cls_bit_map[ZXDH_DEV_SLOT_ID(dev_id)].instr_mem[mem_id] =<br />+        ((instr_mem > 0) ? 1 : 0);<br />     }<br /> }<br />  <br />@@ -2731,6 +2753,7 @@ zxdh_np_agent_channel_sync_send(uint32_t dev_id,<br />     uint8_t *reply_ptr = NULL;<br />     uint16_t reply_msg_len = 0;<br />     uint64_t agent_addr = 0;<br />+    uint16_t bar_pcie_id = 0;<br />  <br />     ret = zxdh_np_agent_bar_msg_check(dev_id, p_msg);<br />     if (ret != ZXDH_OK) {<br />@@ -2740,6 +2763,7 @@ zxdh_np_agent_channel_sync_send(uint32_t dev_id,<br />  <br />     zxdh_np_dev_vport_get(dev_id, &vport);<br />     zxdh_np_dev_agent_addr_get(dev_id, &agent_addr);<br />+    zxdh_np_dev_bar_pcie_id_get(dev_id, &bar_pcie_id);<br />  <br />     if (ZXDH_IS_PF(vport))<br />         in.src = ZXDH_MSG_CHAN_END_PF;<br />@@ -2751,6 +2775,7 @@ zxdh_np_agent_channel_sync_send(uint32_t dev_id,<br />     in.payload_len = p_msg->msg_len;<br />     in.dst = ZXDH_MSG_CHAN_END_RISC;<br />     in.module_id = ZXDH_BAR_MDOULE_NPSDK;<br />+    in.src_pcieid = bar_pcie_id;<br />  <br />     recv_buffer = rte_zmalloc(NULL, rep_len + ZXDH_CHANNEL_REPS_LEN, 0);<br />     if (recv_buffer == NULL) {<br />@@ -3124,23 +3149,23 @@ zxdh_np_agent_channel_acl_index_release(uint32_t dev_id, uint32_t rel_type,<br /> static ZXDH_DTB_MGR_T *<br /> zxdh_np_dtb_mgr_get(uint32_t dev_id)<br /> {<br />-    if (dev_id >= ZXDH_DEV_CHANNEL_MAX)<br />+    if (ZXDH_DEV_SLOT_ID(dev_id) >= ZXDH_DEV_CHANNEL_MAX)<br />         return NULL;<br />     else<br />-        return p_dpp_dtb_mgr[dev_id];<br />+        return p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(dev_id)];<br /> }<br />  <br /> static uint32_t<br /> zxdh_np_dtb_mgr_create(uint32_t dev_id)<br /> {<br />-    if (p_dpp_dtb_mgr[dev_id] != NULL) {<br />+    if (p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(dev_id)] != NULL) {<br />         PMD_DRV_LOG(ERR, "ErrorCode[0x%x]: Dma Manager" <br />             " is exist!!!", ZXDH_RC_DTB_MGR_EXIST);<br />         return ZXDH_RC_DTB_MGR_EXIST;<br />     }<br />  <br />-    p_dpp_dtb_mgr[dev_id] = rte_zmalloc(NULL, sizeof(ZXDH_DTB_MGR_T), 0);<br />-    if (p_dpp_dtb_mgr[dev_id] == NULL) {<br />+    p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(dev_id)] = rte_zmalloc(NULL, sizeof(ZXDH_DTB_MGR_T), 0);<br />+    if (p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(dev_id)] == NULL) {<br />         PMD_DRV_LOG(ERR, "malloc memory failed");<br />         return ZXDH_PAR_CHK_POINT_NULL;<br />     }<br />@@ -3153,7 +3178,7 @@ zxdh_np_dtb_soft_init(uint32_t dev_id)<br /> {<br />     ZXDH_DTB_MGR_T *p_dtb_mgr = NULL;<br />  <br />-    if (dev_id >= ZXDH_DEV_CHANNEL_MAX)<br />+    if (ZXDH_DEV_SLOT_ID(dev_id) >= ZXDH_DEV_CHANNEL_MAX)<br />         return 1;<br />  <br />     p_dtb_mgr = zxdh_np_dtb_mgr_get(dev_id);<br />@@ -3220,8 +3245,8 @@ zxdh_np_dev_vport_set(uint32_t dev_id, uint32_t vport)<br />     ZXDH_DEV_CFG_T *p_dev_info = NULL;<br />  <br />     p_dev_mgr =  &g_dev_mgr;<br />-    p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />-    p_dev_info->vport = vport;<br />+    p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />+    p_dev_info->vport[ZXDH_DEV_PF_INDEX(dev_id)] = vport;<br /> }<br />  <br /> static void<br />@@ -3231,8 +3256,8 @@ zxdh_np_dev_agent_addr_set(uint32_t dev_id, uint64_t agent_addr)<br />     ZXDH_DEV_CFG_T *p_dev_info = NULL;<br />  <br />     p_dev_mgr =  &g_dev_mgr;<br />-    p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />-    p_dev_info->agent_addr = agent_addr;<br />+    p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />+    p_dev_info->agent_addr[ZXDH_DEV_PF_INDEX(dev_id)] = agent_addr;<br /> }<br />  <br /> static uint64_t<br />@@ -3259,13 +3284,13 @@ zxdh_np_pf_fw_compatible_addr_set(uint32_t dev_id, uint64_t pcie_vir_baddr)<br />  <br />     compatible_addr = zxdh_np_fw_compatible_addr_calc(pcie_vir_baddr, compatible_offset);<br />  <br />-    g_np_fw_compat_addr[dev_id] = compatible_addr;<br />+    g_np_fw_compat_addr[ZXDH_DEV_SLOT_ID(dev_id)] = compatible_addr;<br /> }<br />  <br /> static void<br /> zxdh_np_fw_compatible_addr_get(uint32_t dev_id, uint64_t *p_compatible_addr)<br /> {<br />-    *p_compatible_addr = g_np_fw_compat_addr[dev_id];<br />+    *p_compatible_addr = g_np_fw_compat_addr[ZXDH_DEV_SLOT_ID(dev_id)];<br /> }<br />  <br /> static void<br />@@ -3684,7 +3709,7 @@ zxdh_np_dtb_queue_id_free(uint32_t dev_id,<br />     ZXDH_DTB_MGR_T *p_dtb_mgr = NULL;<br />     uint32_t rc;<br />  <br />-    p_dtb_mgr = p_dpp_dtb_mgr[dev_id];<br />+    p_dtb_mgr = p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(dev_id)];<br />     if (p_dtb_mgr == NULL)<br />         return 1;<br />  <br />@@ -3706,13 +3731,13 @@ zxdh_np_dtb_queue_id_free(uint32_t dev_id,<br /> static ZXDH_RB_CFG *<br /> zxdh_np_dtb_dump_addr_rb_get(uint32_t dev_id, uint32_t queue_id)<br /> {<br />-    return g_dtb_dump_addr_rb[dev_id][queue_id];<br />+    return g_dtb_dump_addr_rb[ZXDH_DEV_SLOT_ID(dev_id)][queue_id];<br /> }<br />  <br /> static uint32_t<br /> zxdh_np_dtb_dump_addr_rb_set(uint32_t dev_id, uint32_t queue_id, ZXDH_RB_CFG *p_dump_addr_rb)<br /> {<br />-    g_dtb_dump_addr_rb[dev_id][queue_id] = p_dump_addr_rb;<br />+    g_dtb_dump_addr_rb[ZXDH_DEV_SLOT_ID(dev_id)][queue_id] = p_dump_addr_rb;<br />     return ZXDH_OK;<br /> }<br />  <br />@@ -3880,9 +3905,9 @@ zxdh_np_dtb_queue_release(uint32_t devid,<br /> static void<br /> zxdh_np_dtb_mgr_destroy(uint32_t dev_id)<br /> {<br />-    if (p_dpp_dtb_mgr[dev_id] != NULL) {<br />-        rte_free(p_dpp_dtb_mgr[dev_id]);<br />-        p_dpp_dtb_mgr[dev_id] = NULL;<br />+    if (p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(dev_id)] != NULL) {<br />+        rte_free(p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(dev_id)]);<br />+        p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(dev_id)] = NULL;<br />     }<br /> }<br />  <br />@@ -3909,11 +3934,11 @@ zxdh_np_dev_del(uint32_t dev_id)<br />     ZXDH_DEV_MGR_T *p_dev_mgr  = NULL;<br />  <br />     p_dev_mgr = &g_dev_mgr;<br />-    p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+    p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     if (p_dev_info != NULL) {<br />         rte_free(p_dev_info);<br />-        p_dev_mgr->p_dev_array[dev_id] = NULL;<br />+        p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)] = NULL;<br />         p_dev_mgr->device_num--;<br />     }<br /> }<br />@@ -4057,7 +4082,7 @@ zxdh_np_one_hash_soft_uninstall(uint32_t dev_id, uint32_t hash_id)<br />     uint32_t i = 0;<br />  <br />     ZXDH_D_NODE *p_node = NULL;<br />-    ZXDH_SE_CFG *p_se_cfg = dpp_se_cfg[dev_id];<br />+    ZXDH_SE_CFG *p_se_cfg = dpp_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)];<br />     ZXDH_RB_TN *p_rb_tn = NULL;<br />     ZXDH_RB_TN *p_rb_tn_rtn = NULL;<br />     HASH_DDR_CFG *p_rbkey = NULL;<br />@@ -4111,7 +4136,7 @@ zxdh_np_one_hash_soft_uninstall(uint32_t dev_id, uint32_t hash_id)<br />     rc = zxdh_np_se_fun_deinit(p_se_cfg, (hash_id & 0xff), ZXDH_FUN_HASH);<br />     ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_se_fun_deinit");<br />  <br />-    memset(g_tbl_id_info[dev_id][hash_id], 0,<br />+    memset(g_tbl_id_info[ZXDH_DEV_SLOT_ID(dev_id)][hash_id], 0,<br />         ZXDH_HASH_TBL_ID_NUM * sizeof(ZXDH_HASH_TBL_ID_INFO));<br />  <br />     return rc;<br />@@ -4134,13 +4159,13 @@ zxdh_np_hash_soft_uninstall(uint32_t dev_id)<br /> static uint32_t<br /> zxdh_np_acl_cfg_get(uint32_t dev_id, ZXDH_ACL_CFG_EX_T **p_acl_cfg)<br /> {<br />-    if (g_p_acl_ex_cfg[dev_id] == NULL) {<br />+    if (g_p_acl_ex_cfg[ZXDH_DEV_SLOT_ID(dev_id)] == NULL) {<br />         PMD_DRV_LOG(ERR, "etcam_is not init!");<br />         RTE_ASSERT(0);<br />         return ZXDH_ACL_RC_ETCAMID_NOT_INIT;<br />     }<br />  <br />-    *p_acl_cfg = g_p_acl_ex_cfg[dev_id];<br />+    *p_acl_cfg = g_p_acl_ex_cfg[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     return ZXDH_OK;<br /> }<br />@@ -4190,6 +4215,16 @@ zxdh_np_acl_res_destroy(uint32_t dev_id)<br />     return ZXDH_OK;<br /> }<br />  <br />+static void<br />+zxdh_np_apt_hash_global_res_uninit(uint32_t dev_id)<br />+{<br />+    if (g_apt_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)] != NULL) {<br />+        rte_free(g_apt_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)]);<br />+        g_apt_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)] = NULL;<br />+        dpp_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)] = NULL;<br />+    }<br />+}<br />+<br /> int<br /> zxdh_np_online_uninit(uint32_t dev_id,<br />             char *port_name,<br />@@ -4201,22 +4236,35 @@ zxdh_np_online_uninit(uint32_t dev_id,<br />     if (rc != 0)<br />         PMD_DRV_LOG(ERR, "dtb release port name %s queue id %u", port_name, queue_id);<br />  <br />+    rc = zxdh_np_soft_res_uninstall(dev_id);<br />+    if (rc != 0)<br />+        PMD_DRV_LOG(ERR, "zxdh_np_soft_res_uninstall failed");<br />+<br />+    return 0;<br />+}<br />+<br />+uint32_t<br />+zxdh_np_soft_res_uninstall(uint32_t dev_id)<br />+{<br />+    uint32_t rc;<br />+<br />     rc = zxdh_np_hash_soft_uninstall(dev_id);<br />     if (rc != ZXDH_OK)<br />         PMD_DRV_LOG(ERR, "zxdh_np_hash_soft_uninstall error! ");<br />  <br />+    zxdh_np_apt_hash_global_res_uninit(dev_id);<br />     zxdh_np_acl_res_destroy(dev_id);<br />     zxdh_np_dtb_mgr_destroy(dev_id);<br />     zxdh_np_sdt_mgr_destroy(dev_id);<br />     zxdh_np_dev_del(dev_id);<br />  <br />-    return 0;<br />+    return rc;<br /> }<br />  <br /> static uint32_t<br /> zxdh_np_sdt_tbl_type_get(uint32_t dev_id, uint32_t sdt_no)<br /> {<br />-    return g_table_type[dev_id][sdt_no];<br />+    return g_table_type[ZXDH_DEV_SLOT_ID(dev_id)][sdt_no];<br /> }<br />  <br />  <br />@@ -4697,8 +4745,8 @@ zxdh_np_eram_dtb_len_get(uint32_t mode)<br /> static void<br /> zxdh_np_sdt_tbl_data_get(uint32_t dev_id, uint32_t sdt_no, ZXDH_SDT_TBL_DATA_T *p_sdt_data)<br /> {<br />-    p_sdt_data->data_high32 = g_sdt_info[dev_id][sdt_no].data_high32;<br />-    p_sdt_data->data_low32  = g_sdt_info[dev_id][sdt_no].data_low32;<br />+    p_sdt_data->data_high32 = g_sdt_info[ZXDH_DEV_SLOT_ID(dev_id)][sdt_no].data_high32;<br />+    p_sdt_data->data_low32  = g_sdt_info[ZXDH_DEV_SLOT_ID(dev_id)][sdt_no].data_low32;<br /> }<br />  <br /> static uint32_t<br />@@ -5196,8 +5244,10 @@ zxdh_np_dtb_tab_down_info_set(uint32_t dev_id,<br />     item_info.cmd_type = 0;<br />     item_info.int_en = int_flag;<br />     item_info.data_len = data_len / 4;<br />-    phy_addr = p_dpp_dtb_mgr[dev_id]->queue_info[queue_id].tab_down.start_phy_addr +<br />-        item_index * p_dpp_dtb_mgr[dev_id]->queue_info[queue_id].tab_down.item_size;<br />+    phy_addr = p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(dev_id)]->queue_info[queue_id].<br />+        tab_down.start_phy_addr +<br />+        item_index * p_dpp_dtb_mgr[ZXDH_DEV_SLOT_ID(dev_id)]->queue_info[queue_id].<br />+        tab_down.item_size;<br />     item_info.data_hddr = ((phy_addr >> 4) >> 32) & 0xffffffff;<br />     item_info.data_laddr = (phy_addr >> 4) & 0xffffffff;<br />  <br />@@ -5368,7 +5418,7 @@ zxdh_np_hash_get_hash_info_from_sdt(uint32_t dev_id,<br />     p_hash_entry_cfg->rst_by_size = ZXDH_GET_RST_SIZE(p_hash_entry_cfg->key_type,<br />         p_hash_entry_cfg->actu_key_size);<br />  <br />-    p_se_cfg = dpp_se_cfg[dev_id];<br />+    p_se_cfg = dpp_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)];<br />     p_hash_entry_cfg->p_se_cfg = p_se_cfg;<br />  <br />     p_func_info = ZXDH_GET_FUN_INFO(p_se_cfg, p_hash_entry_cfg->fun_id);<br />@@ -6048,7 +6098,7 @@ zxdh_np_apt_get_sdt_partner(uint32_t dev_id, uint32_t sdt_no)<br /> {<br />     SE_APT_CALLBACK_T *p_apt_callback = NULL;<br />  <br />-    p_apt_callback = &g_apt_se_callback[dev_id][sdt_no];<br />+    p_apt_callback = &g_apt_se_callback[ZXDH_DEV_SLOT_ID(dev_id)][sdt_no];<br />  <br />     if (p_apt_callback->table_type == ZXDH_SDT_TBLT_HASH)<br />         return  p_apt_callback->se_func_info.hash_func.sdt_partner;<br />@@ -6639,10 +6689,10 @@ zxdh_np_stat_cfg_soft_get(uint32_t dev_id,<br /> {<br />     ZXDH_COMM_CHECK_DEV_POINT(dev_id, p_stat_cfg);<br />  <br />-    p_stat_cfg->ddr_base_addr = g_ppu_stat_cfg[dev_id].ddr_base_addr;<br />-    p_stat_cfg->eram_baddr = g_ppu_stat_cfg[dev_id].eram_baddr;<br />-    p_stat_cfg->eram_depth = g_ppu_stat_cfg[dev_id].eram_depth;<br />-    p_stat_cfg->ppu_addr_offset = g_ppu_stat_cfg[dev_id].ppu_addr_offset;<br />+    p_stat_cfg->ddr_base_addr = g_ppu_stat_cfg[ZXDH_DEV_SLOT_ID(dev_id)].ddr_base_addr;<br />+    p_stat_cfg->eram_baddr = g_ppu_stat_cfg[ZXDH_DEV_SLOT_ID(dev_id)].eram_baddr;<br />+    p_stat_cfg->eram_depth = g_ppu_stat_cfg[ZXDH_DEV_SLOT_ID(dev_id)].eram_depth;<br />+    p_stat_cfg->ppu_addr_offset = g_ppu_stat_cfg[ZXDH_DEV_SLOT_ID(dev_id)].ppu_addr_offset;<br /> }<br />  <br /> static uint32_t<br />@@ -8809,7 +8859,7 @@ static void *<br /> zxdh_np_dev_get_se_res_ptr(uint32_t dev_id, uint32_t type)<br /> {<br />     ZXDH_DEV_MGR_T *p_dev_mgr = &g_dev_mgr;<br />-    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     if (type == ZXDH_SE_STD_NIC_RES_TYPE)<br />         return (void *)&p_dev_info->dev_apt_se_tbl_res.std_nic_res;<br />@@ -8872,7 +8922,7 @@ zxdh_np_se_init_ex(uint32_t dev_id, ZXDH_SE_CFG *p_se_cfg)<br />     ZXDH_SE_ZBLK_CFG *p_zblk_cfg = NULL;<br />     ZXDH_SE_ZCELL_CFG *p_zcell_cfg = NULL;<br />  <br />-    if (dpp_se_cfg[dev_id] != NULL) {<br />+    if (dpp_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)] != NULL) {<br />         PMD_DRV_LOG(DEBUG, "SE global config is already initialized.");<br />         return ZXDH_OK;<br />     }<br />@@ -8880,7 +8930,7 @@ zxdh_np_se_init_ex(uint32_t dev_id, ZXDH_SE_CFG *p_se_cfg)<br />     memset(p_se_cfg, 0, sizeof(ZXDH_SE_CFG));<br />  <br />     p_se_cfg->dev_id = dev_id;<br />-    dpp_se_cfg[p_se_cfg->dev_id] = p_se_cfg;<br />+    dpp_se_cfg[ZXDH_DEV_SLOT_ID(p_se_cfg->dev_id)] = p_se_cfg;<br />  <br />     p_se_cfg->p_as_rslt_wrt_fun = NULL;<br />     p_se_cfg->p_client = ZXDH_COMM_VAL_TO_PTR(dev_id);<br />@@ -8913,16 +8963,16 @@ zxdh_np_se_init_ex(uint32_t dev_id, ZXDH_SE_CFG *p_se_cfg)<br /> static uint32_t<br /> zxdh_np_apt_hash_global_res_init(uint32_t dev_id)<br /> {<br />-    if (g_apt_se_cfg[dev_id] == NULL) {<br />-        g_apt_se_cfg[dev_id] = rte_zmalloc(NULL, sizeof(ZXDH_SE_CFG), 0);<br />-        if (g_apt_se_cfg[dev_id] == NULL) {<br />+    if (g_apt_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)] == NULL) {<br />+        g_apt_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)] = rte_zmalloc(NULL, sizeof(ZXDH_SE_CFG), 0);<br />+        if (g_apt_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)] == NULL) {<br />             PMD_DRV_LOG(ERR, "malloc memory failed");<br />             return ZXDH_PAR_CHK_POINT_NULL;<br />         }<br />  <br />-        zxdh_np_se_init_ex(dev_id, g_apt_se_cfg[dev_id]);<br />+        zxdh_np_se_init_ex(dev_id, g_apt_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)]);<br />  <br />-        g_apt_se_cfg[dev_id]->p_client = ZXDH_COMM_VAL_TO_PTR(dev_id);<br />+        g_apt_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)]->p_client = ZXDH_COMM_VAL_TO_PTR(dev_id);<br />     }<br />  <br />     return ZXDH_OK;<br />@@ -9204,7 +9254,7 @@ zxdh_np_hash_init(ZXDH_SE_CFG *p_se_cfg,<br />     ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_comm_rb_init");<br />  <br />     for (i = 0; i < zblk_num; i++)<br />-        g_hash_zblk_idx[dev_id][fun_id][i] = zblk_idx[i];<br />+        g_hash_zblk_idx[ZXDH_DEV_SLOT_ID(dev_id)][fun_id][i] = zblk_idx[i];<br />  <br />     return rc;<br /> }<br />@@ -9219,7 +9269,7 @@ zxdh_np_apt_hash_func_res_init(uint32_t dev_id, uint32_t func_num,<br />     ZXDH_APT_HASH_FUNC_RES_T *p_hash_func_res_temp = NULL;<br />     ZXDH_SE_CFG *p_se_cfg = NULL;<br />  <br />-    p_se_cfg = g_apt_se_cfg[dev_id];<br />+    p_se_cfg = g_apt_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     for (index = 0; index < func_num; index++) {<br />         memset(zblk_idx, 0, sizeof(zblk_idx));<br />@@ -9474,7 +9524,7 @@ zxdh_np_apt_hash_bulk_res_init(uint32_t dev_id, uint32_t bulk_num,<br />     ZXDH_HASH_DDR_RESC_CFG_T ddr_resc_cfg = {0};<br />     ZXDH_SE_CFG *p_se_cfg = NULL;<br />  <br />-    p_se_cfg = g_apt_se_cfg[dev_id];<br />+    p_se_cfg = g_apt_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     for (index = 0; index < bulk_num; index++) {<br />         memset(&ddr_resc_cfg, 0, sizeof(ZXDH_HASH_DDR_RESC_CFG_T));<br />@@ -9504,7 +9554,7 @@ zxdh_np_apt_set_callback(uint32_t dev_id, uint32_t sdt_no, uint32_t table_type,<br /> {<br />     SE_APT_CALLBACK_T *apt_func = NULL;<br />  <br />-    apt_func = &g_apt_se_callback[dev_id][sdt_no];<br />+    apt_func = &g_apt_se_callback[ZXDH_DEV_SLOT_ID(dev_id)][sdt_no];<br />  <br />     apt_func->sdt_no = sdt_no;<br />     apt_func->table_type = table_type;<br />@@ -9598,7 +9648,7 @@ zxdh_np_apt_hash_tbl_res_init(uint32_t dev_id, uint32_t tbl_num,<br />     ZXDH_APT_HASH_TABLE_T *p_hash_tbl_temp = NULL;<br />     ZXDH_SE_CFG *p_se_cfg = NULL;<br />  <br />-    p_se_cfg = g_apt_se_cfg[dev_id];<br />+    p_se_cfg = g_apt_se_cfg[ZXDH_DEV_SLOT_ID(dev_id)];<br />  <br />     for (index = 0; index < tbl_num; index++) {<br />         p_hash_tbl_temp = p_hash_tbl + index;<br />@@ -9688,7 +9738,7 @@ zxdh_np_acl_cfg_init_ex(ZXDH_ACL_CFG_EX_T *p_acl_cfg,<br />     p_acl_cfg->dev_id = (uint32_t)(ZXDH_COMM_PTR_TO_VAL(p_acl_cfg->p_client) & 0xFFFFFFFF);<br />     p_acl_cfg->flags = flags;<br />  <br />-    g_p_acl_ex_cfg[p_acl_cfg->dev_id] = p_acl_cfg;<br />+    g_p_acl_ex_cfg[ZXDH_DEV_SLOT_ID(p_acl_cfg->dev_id)] = p_acl_cfg;<br />  <br />     if (flags & ZXDH_ACL_FLAG_ETCAM0_EN) {<br />         p_acl_cfg->acl_etcamids.is_valid = 1;<br />@@ -9726,7 +9776,7 @@ zxdh_np_acl_tbl_init_ex(ZXDH_ACL_CFG_EX_T *p_acl_cfg,<br />     uint32_t rc = 0;<br />     uint32_t i = 0;<br />  <br />-    g_p_acl_ex_cfg[p_acl_cfg->dev_id] = p_acl_cfg;<br />+    g_p_acl_ex_cfg[ZXDH_DEV_SLOT_ID(p_acl_cfg->dev_id)] = p_acl_cfg;<br />  <br />     if (p_acl_cfg->acl_tbls[table_id].is_used) {<br />         PMD_DRV_LOG(ERR, "table_id[ %u ] is already used!", table_id);<br />@@ -9817,7 +9867,7 @@ zxdh_np_apt_acl_res_init(uint32_t dev_id, uint32_t tbl_num, ZXDH_APT_ACL_TABLE_T<br />     uint8_t index = 0;<br />     ZXDH_APT_ACL_TABLE_T *p_temp_acl_tbl = NULL;<br />  <br />-    rc = zxdh_np_acl_cfg_init_ex(&g_apt_acl_cfg[dev_id],<br />+    rc = zxdh_np_acl_cfg_init_ex(&g_apt_acl_cfg[ZXDH_DEV_SLOT_ID(dev_id)],<br />                         (void *)ZXDH_COMM_VAL_TO_PTR(dev_id),<br />                         ZXDH_ACL_FLAG_ETCAM0_EN,<br />                         NULL);<br />@@ -9832,7 +9882,7 @@ zxdh_np_apt_acl_res_init(uint32_t dev_id, uint32_t tbl_num, ZXDH_APT_ACL_TABLE_T<br />                         ZXDH_SDT_OPER_ADD);<br />         ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_sdt_tbl_write");<br />  <br />-         rc = zxdh_np_acl_tbl_init_ex(&g_apt_acl_cfg[dev_id],<br />+         rc = zxdh_np_acl_tbl_init_ex(&g_apt_acl_cfg[ZXDH_DEV_SLOT_ID(dev_id)],<br />                     p_temp_acl_tbl->acl_sdt.etcam_table_id,<br />                     p_temp_acl_tbl->acl_sdt.as_en,<br />                     p_temp_acl_tbl->acl_res.entry_num,<br />@@ -9857,12 +9907,13 @@ zxdh_np_apt_acl_res_init(uint32_t dev_id, uint32_t tbl_num, ZXDH_APT_ACL_TABLE_T<br /> static void<br /> zxdh_np_apt_stat_res_init(uint32_t dev_id, uint32_t type, ZXDH_APT_STAT_RES_INIT_T *stat_res_init)<br /> {<br />-    g_ppu_stat_cfg[dev_id].eram_baddr = stat_res_init->eram_baddr;<br />-    g_ppu_stat_cfg[dev_id].eram_depth = stat_res_init->eram_depth;<br />+    g_ppu_stat_cfg[ZXDH_DEV_SLOT_ID(dev_id)].eram_baddr = stat_res_init->eram_baddr;<br />+    g_ppu_stat_cfg[ZXDH_DEV_SLOT_ID(dev_id)].eram_depth = stat_res_init->eram_depth;<br />  <br />     if (type == ZXDH_SE_NON_STD_NIC_RES_TYPE) {<br />-        g_ppu_stat_cfg[dev_id].ddr_base_addr = stat_res_init->ddr_baddr;<br />-        g_ppu_stat_cfg[dev_id].ppu_addr_offset = stat_res_init->ppu_ddr_offset;<br />+        g_ppu_stat_cfg[ZXDH_DEV_SLOT_ID(dev_id)].ddr_base_addr = stat_res_init->ddr_baddr;<br />+        g_ppu_stat_cfg[ZXDH_DEV_SLOT_ID(dev_id)].ppu_addr_offset =<br />+            stat_res_init->ppu_ddr_offset;<br />     }<br /> }<br />  <br />diff --git a/drivers/net/zxdh/zxdh_np.h b/drivers/net/zxdh/zxdh_np.h<br />index 6a5d6a2fdb..b0823192e7 100644<br />--- a/drivers/net/zxdh/zxdh_np.h<br />+++ b/drivers/net/zxdh/zxdh_np.h<br />@@ -15,9 +15,13 @@<br /> #define ZXDH_DISABLE                          (0)<br /> #define ZXDH_ENABLE                           (1)<br /> #define ZXDH_PORT_NAME_MAX                    (32)<br />-#define ZXDH_DEV_CHANNEL_MAX                  (2)<br />+#define ZXDH_DEV_CHANNEL_MAX                  (16)<br /> #define ZXDH_DEV_SDT_ID_MAX                   (256U)<br />-<br />+#define ZXDH_DEV_PF_NUM_MAX                   (8)<br />+#define ZXDH_DEV_SLOT_ID(DEVICE_ID)           ((DEVICE_ID) & (ZXDH_DEV_CHANNEL_MAX - 1))<br />+#define ZXDH_DEV_PCIE_ID(DEVICE_ID)           (((DEVICE_ID) >> 16) & 0xFFFF)<br />+#define ZXDH_DEV_VF_INDEX(DEVICE_ID)          (ZXDH_DEV_PCIE_ID(DEVICE_ID) & 0xFF)<br />+#define ZXDH_DEV_PF_INDEX(DEVICE_ID)          ((ZXDH_DEV_PCIE_ID(DEVICE_ID) >> 8) & 0x7)<br />  <br /> /*DTB*/<br /> #define ZXDH_DTB_QUEUE_ITEM_NUM_MAX           (32)<br />@@ -1130,18 +1134,19 @@ typedef struct zxdh_sys_init_ctrl_t {<br /> } ZXDH_SYS_INIT_CTRL_T;<br />  <br /> typedef struct dpp_dev_cfg_t {<br />-    uint32_t device_id;<br />+    uint32_t slot_id;<br />+    uint16_t pcie_id[ZXDH_DEV_PF_NUM_MAX];<br />     ZXDH_DEV_TYPE_E dev_type;<br />     uint32_t chip_ver;<br />     uint32_t access_type;<br />     uint32_t agent_flag;<br />-    uint32_t vport;<br />+    uint32_t vport[ZXDH_DEV_PF_NUM_MAX];<br />     uint32_t fw_bar_msg_num;<br />-    uint64_t pcie_addr;<br />+    uint64_t pcie_addr[ZXDH_DEV_PF_NUM_MAX];<br />     uint64_t riscv_addr;<br />     uint64_t dma_vir_addr;<br />     uint64_t dma_phy_addr;<br />-    uint64_t agent_addr;<br />+    uint64_t agent_addr[ZXDH_DEV_PF_NUM_MAX];<br />     uint32_t init_flags[ZXDH_MODULE_INIT_MAX];<br />     ZXDH_DEV_WRITE_FUNC p_pcie_write_fun;<br />     ZXDH_DEV_READ_FUNC  p_pcie_read_fun;<br />@@ -1949,6 +1954,7 @@ int zxdh_np_dtb_stats_get(uint32_t dev_id,<br />             ZXDH_STAT_CNT_MODE_E rd_mode,<br />             uint32_t index,<br />             uint32_t *p_data);<br />+uint32_t zxdh_np_soft_res_uninstall(uint32_t dev_id);<br /> uint32_t zxdh_np_stat_ppu_cnt_get_ex(uint32_t dev_id,<br />             ZXDH_STAT_CNT_MODE_E rd_mode,<br />             uint32_t index,<br />diff --git a/drivers/net/zxdh/zxdh_tables.c b/drivers/net/zxdh/zxdh_tables.c<br />index 2d2dd26499..233d53a7e8 100644<br />--- a/drivers/net/zxdh/zxdh_tables.c<br />+++ b/drivers/net/zxdh/zxdh_tables.c<br />@@ -37,7 +37,7 @@ zxdh_set_port_attr(struct zxdh_hw *hw, uint16_t vport, struct zxdh_port_attr_tab<br />     ZXDH_DTB_ERAM_ENTRY_INFO_T entry = {vfid, (uint32_t *)port_attr};<br />     ZXDH_DTB_USER_ENTRY_T user_entry_write = {ZXDH_SDT_VPORT_ATT_TABLE, (void *)&entry};<br />  <br />-    ret = zxdh_np_dtb_table_entry_write(hw->slot_id,<br />+    ret = zxdh_np_dtb_table_entry_write(hw->dev_id,<br />                 dtb_data->queueid, 1, &user_entry_write);<br />     if (ret != 0)<br />         PMD_DRV_LOG(ERR, "write vport_att failed vfid:%d failed", vfid);<br />@@ -105,7 +105,7 @@ zxdh_port_attr_uninit(struct rte_eth_dev *dev)<br />             .sdt_no = ZXDH_SDT_VPORT_ATT_TABLE,<br />             .p_entry_data = (void *)&port_attr_entry<br />         };<br />-        ret = zxdh_np_dtb_table_entry_delete(hw->slot_id, dtb_data->queueid, 1, &entry);<br />+        ret = zxdh_np_dtb_table_entry_delete(hw->dev_id, dtb_data->queueid, 1, &entry);<br />         if (ret) {<br />             PMD_DRV_LOG(ERR, "delete port attr table failed");<br />             ret = -1;<br />@@ -147,7 +147,7 @@ int zxdh_panel_table_init(struct rte_eth_dev *dev)<br />         .sdt_no = ZXDH_SDT_PANEL_ATT_TABLE,<br />         .p_entry_data = (void *)&panel_entry<br />     };<br />-    ret = zxdh_np_dtb_table_entry_write(hw->slot_id, dtb_data->queueid, 1, &entry);<br />+    ret = zxdh_np_dtb_table_entry_write(hw->dev_id, dtb_data->queueid, 1, &entry);<br />  <br />     if (ret) {<br />         PMD_DRV_LOG(ERR, "Insert eram-panel failed, code:%u", ret);<br />@@ -171,7 +171,7 @@ int zxdh_get_panel_attr(struct rte_eth_dev *dev, struct zxdh_panel_table *panel_<br />         .sdt_no = ZXDH_SDT_PANEL_ATT_TABLE,<br />         .p_entry_data = (void *)&panel_entry<br />     };<br />-    int ret = zxdh_np_dtb_table_entry_get(hw->slot_id, dtb_data->queueid, &entry, 1);<br />+    int ret = zxdh_np_dtb_table_entry_get(hw->dev_id, dtb_data->queueid, &entry, 1);<br />  <br />     if (ret != 0)<br />         PMD_DRV_LOG(ERR, "get panel table failed");<br />@@ -193,7 +193,7 @@ int zxdh_set_panel_attr(struct rte_eth_dev *dev, struct zxdh_panel_table *panel_<br />         .sdt_no = ZXDH_SDT_PANEL_ATT_TABLE,<br />         .p_entry_data = (void *)&panel_entry<br />     };<br />-    int ret = zxdh_np_dtb_table_entry_write(hw->slot_id, dtb_data->queueid, 1, &entry);<br />+    int ret = zxdh_np_dtb_table_entry_write(hw->dev_id, dtb_data->queueid, 1, &entry);<br />  <br />     if (ret)<br />         PMD_DRV_LOG(ERR, "Insert panel table failed");<br />@@ -211,7 +211,7 @@ zxdh_get_port_attr(struct zxdh_hw *hw, uint16_t vport, struct zxdh_port_attr_tab<br />     ZXDH_DTB_USER_ENTRY_T user_entry_get = {ZXDH_SDT_VPORT_ATT_TABLE, &entry};<br />     int ret;<br />  <br />-    ret = zxdh_np_dtb_table_entry_get(hw->slot_id, dtb_data->queueid, &user_entry_get, 1);<br />+    ret = zxdh_np_dtb_table_entry_get(hw->dev_id, dtb_data->queueid, &user_entry_get, 1);<br />     if (ret != 0)<br />         PMD_DRV_LOG(ERR, "get port_attr vfid:%d failed, ret:%d", vfid, ret);<br />  <br />@@ -230,7 +230,7 @@ zxdh_delete_port_attr(struct zxdh_hw *hw, uint16_t vport,<br />         .sdt_no = ZXDH_SDT_VPORT_ATT_TABLE,<br />         .p_entry_data = (void *)&entry<br />     };<br />-    int ret = zxdh_np_dtb_table_entry_delete(hw->slot_id, dtb_data->queueid, 1, &user_entry);<br />+    int ret = zxdh_np_dtb_table_entry_delete(hw->dev_id, dtb_data->queueid, 1, &user_entry);<br />     if (ret != 0)<br />         PMD_DRV_LOG(ERR, "delete port attr failed, vfid:%u", vport_num.vfid);<br />     return ret;<br />@@ -261,7 +261,7 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />             .p_entry_data = (void *)&dtb_hash_entry<br />         };<br />  <br />-        ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid,<br />+        ret = zxdh_np_dtb_table_entry_get(hw->dev_id, hw->dev_sd->dtb_sd.queueid,<br />                 &entry_get, 1);<br />         if (ret == 0) {<br />             if (unicast_table.entry.hit_flag != 0 && <br />@@ -277,7 +277,7 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />  <br />         unicast_table.entry.vfid = rte_cpu_to_be_16(vfid);<br />         unicast_table.entry.hit_flag = 1;<br />-        ret = zxdh_np_dtb_table_entry_write(hw->slot_id,<br />+        ret = zxdh_np_dtb_table_entry_write(hw->dev_id,<br />                     hw->dev_sd->dtb_sd.queueid, 1, &entry_get);<br />         if (ret) {<br />             PMD_DRV_LOG(ERR, "Insert mac_table failed");<br />@@ -298,7 +298,7 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />                 .p_entry_data = (void *)&dtb_hash_entry<br />             };<br />  <br />-            ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid,<br />+            ret = zxdh_np_dtb_table_entry_get(hw->dev_id, hw->dev_sd->dtb_sd.queueid,<br />                     &entry_get, 1);<br />             uint8_t index = (vport_num.vfid % 64) / 32;<br />             uint8_t value = (vport_num.vfid % 64) % 32;<br />@@ -330,7 +330,7 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />                         multicast_table.entry.mc_pf_enable = false;<br />                 }<br />             }<br />-            ret = zxdh_np_dtb_table_entry_write(hw->slot_id, hw->dev_sd->dtb_sd.queueid,<br />+            ret = zxdh_np_dtb_table_entry_write(hw->dev_id, hw->dev_sd->dtb_sd.queueid,<br />                         1, &entry_get);<br />             if (ret) {<br />                 PMD_DRV_LOG(ERR, "add mac_table failed, code:%d", ret);<br />@@ -368,7 +368,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />             .sdt_no = ZXDH_UNICAST_MAC_HASH_INDEX(hash_search_idx),<br />             .p_entry_data = (void *)&dtb_hash_entry<br />         };<br />-        ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid,<br />+        ret = zxdh_np_dtb_table_entry_get(hw->dev_id, hw->dev_sd->dtb_sd.queueid,<br />                 &entry_get, 1);<br />         if (ret == 0) {<br />             if (unicast_table.entry.hit_flag != 0 && <br />@@ -377,7 +377,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />             }<br />         }<br />  <br />-        ret = zxdh_np_dtb_table_entry_delete(hw->slot_id, hw->dev_sd->dtb_sd.queueid,<br />+        ret = zxdh_np_dtb_table_entry_delete(hw->dev_id, hw->dev_sd->dtb_sd.queueid,<br />                 1, &entry_get);<br />         if (ret) {<br />             PMD_DRV_LOG(ERR, "delete l2_fwd_hash_table failed, code:%d", ret);<br />@@ -397,7 +397,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />             .p_entry_data = (void *)&dtb_hash_entry<br />         };<br />  <br />-        ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid,<br />+        ret = zxdh_np_dtb_table_entry_get(hw->dev_id, hw->dev_sd->dtb_sd.queueid,<br />                 &entry_get, 1);<br />         uint8_t index = (vport_num.vfid % 64) / 32;<br />         uint8_t value = (vport_num.vfid % 64) % 32;<br />@@ -407,7 +407,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />         else<br />             multicast_table.entry.mc_pf_enable = 0;<br />  <br />-        ret = zxdh_np_dtb_table_entry_write(hw->slot_id, hw->dev_sd->dtb_sd.queueid,<br />+        ret = zxdh_np_dtb_table_entry_write(hw->dev_id, hw->dev_sd->dtb_sd.queueid,<br />                 1, &entry_get);<br />         if (ret) {<br />             PMD_DRV_LOG(ERR, "mac_addr_add mc_table failed, code:%d", ret);<br />@@ -427,7 +427,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />                 .p_entry_data = (void *)&dtb_hash_entry<br />             };<br />  <br />-            ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid,<br />+            ret = zxdh_np_dtb_table_entry_get(hw->dev_id, hw->dev_sd->dtb_sd.queueid,<br />                     &entry_get, 1);<br />             if (multicast_table.entry.mc_bitmap[0] == 0 && <br />                 multicast_table.entry.mc_bitmap[1] == 0 && <br />@@ -452,7 +452,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad<br />                     .p_entry_data = (void *)&dtb_hash_entry<br />                 };<br />  <br />-                ret = zxdh_np_dtb_table_entry_delete(hw->slot_id,<br />+                ret = zxdh_np_dtb_table_entry_delete(hw->dev_id,<br />                         hw->dev_sd->dtb_sd.queueid, 1, &entry_get);<br />             }<br />         }<br />@@ -484,7 +484,7 @@ zxdh_promisc_table_init(struct rte_eth_dev *dev)<br />             .p_entry_data = (void *)&eram_brocast_entry<br />         };<br />  <br />-        ret = zxdh_np_dtb_table_entry_write(hw->slot_id,<br />+        ret = zxdh_np_dtb_table_entry_write(hw->dev_id,<br />                     dtb_data->queueid, 1, &entry_brocast);<br />         if (ret) {<br />             PMD_DRV_LOG(ERR, "write brocast table failed");<br />@@ -501,7 +501,7 @@ zxdh_promisc_table_init(struct rte_eth_dev *dev)<br />             .p_entry_data = (void *)&eram_uc_entry<br />         };<br />  <br />-        ret = zxdh_np_dtb_table_entry_write(hw->slot_id,<br />+        ret = zxdh_np_dtb_table_entry_write(hw->dev_id,<br />                     dtb_data->queueid, 1, &entry_unicast);<br />         if (ret) {<br />             PMD_DRV_LOG(ERR, "write unicast table failed");<br />@@ -518,7 +518,7 @@ zxdh_promisc_table_init(struct rte_eth_dev *dev)<br />             .p_entry_data = (void *)&eram_mc_entry<br />         };<br />  <br />-        ret = zxdh_np_dtb_table_entry_write(hw->slot_id, dtb_data->queueid,<br />+        ret = zxdh_np_dtb_table_entry_write(hw->dev_id, dtb_data->queueid,<br />                     1, &entry_multicast);<br />         if (ret) {<br />             PMD_DRV_LOG(ERR, "write multicast table failed");<br />@@ -553,7 +553,7 @@ zxdh_promisc_table_uninit(struct rte_eth_dev *dev)<br />             .p_entry_data = (void *)&eram_brocast_entry<br />         };<br />  <br />-        ret = zxdh_np_dtb_table_entry_delete(hw->slot_id,<br />+        ret = zxdh_np_dtb_table_entry_delete(hw->dev_id,<br />                 dtb_data->queueid, 1, &entry_brocast);<br />         if (ret) {<br />             PMD_DRV_LOG(ERR, "write brocast table failed");<br />@@ -570,7 +570,7 @@ zxdh_promisc_table_uninit(struct rte_eth_dev *dev)<br />             .p_entry_data = (void *)&eram_uc_entry<br />         };<br />  <br />-        ret = zxdh_np_dtb_table_entry_delete(hw->slot_id,<br />+        ret = zxdh_np_dtb_table_entry_delete(hw->dev_id,<br />                 dtb_data->queueid, 1, &entry_unicast);<br />         if (ret) {<br />             PMD_DRV_LOG(ERR, "write unicast table failed");<br />@@ -587,7 +587,7 @@ zxdh_promisc_table_uninit(struct rte_eth_dev *dev)<br />             .p_entry_data = (void *)&eram_mc_entry<br />         };<br />  <br />-        ret = zxdh_np_dtb_table_entry_delete(hw->slot_id, dtb_data->queueid,<br />+        ret = zxdh_np_dtb_table_entry_delete(hw->dev_id, dtb_data->queueid,<br />                     1, &entry_multicast);<br />         if (ret) {<br />             PMD_DRV_LOG(ERR, "write multicast table failed");<br />@@ -617,7 +617,7 @@ zxdh_dev_unicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable)<br />         .p_entry_data = (void *)&uc_table_entry<br />     };<br />  <br />-    ret = zxdh_np_dtb_table_entry_get(hw->slot_id, dtb_data->queueid, &entry, 1);<br />+    ret = zxdh_np_dtb_table_entry_get(hw->dev_id, dtb_data->queueid, &entry, 1);<br />     if (ret) {<br />         PMD_DRV_LOG(ERR, "unicast_table_get_failed:%d", vfid);<br />         return -ret;<br />@@ -634,7 +634,7 @@ zxdh_dev_unicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable)<br />         uc_table.uc_flood_pf_enable = rte_be_to_cpu_32(ZXDH_TABLE_HIT_FLAG + (enable << 6));<br />     }<br />  <br />-    ret = zxdh_np_dtb_table_entry_write(hw->slot_id, dtb_data->queueid, 1, &entry);<br />+    ret = zxdh_np_dtb_table_entry_write(hw->dev_id, dtb_data->queueid, 1, &entry);<br />     if (ret) {<br />         PMD_DRV_LOG(ERR, "unicast_table_set_failed:%d", vfid);<br />         return -ret;<br />@@ -673,7 +673,7 @@ zxdh_dev_multicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable)<br />         .p_entry_data = (void *)&mc_table_entry<br />     };<br />  <br />-    ret = zxdh_np_dtb_table_entry_get(hw->slot_id, dtb_data->queueid, &entry, 1);<br />+    ret = zxdh_np_dtb_table_entry_get(hw->dev_id, dtb_data->queueid, &entry, 1);<br />     if (ret) {<br />         PMD_DRV_LOG(ERR, "allmulti_table_get_failed:%d", hw->vfid);<br />         return -ret;<br />@@ -690,7 +690,7 @@ zxdh_dev_multicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable)<br />     } else {<br />         mc_table.mc_flood_pf_enable = rte_be_to_cpu_32(ZXDH_TABLE_HIT_FLAG + (enable << 6));<br />     }<br />-    ret = zxdh_np_dtb_table_entry_write(hw->slot_id, dtb_data->queueid, 1, &entry);<br />+    ret = zxdh_np_dtb_table_entry_write(hw->dev_id, dtb_data->queueid, 1, &entry);<br />     if (ret) {<br />         PMD_DRV_LOG(ERR, "allmulti_table_set_failed:%d", hw->vfid);<br />         return -ret;<br />@@ -725,7 +725,7 @@ zxdh_vlan_filter_table_init(struct zxdh_hw *hw, uint16_t vport)<br />         };<br />         ZXDH_DTB_USER_ENTRY_T user_entry = {ZXDH_SDT_VLAN_ATT_TABLE, &entry_data};<br />  <br />-        ret = zxdh_np_dtb_table_entry_write(hw->slot_id,<br />+        ret = zxdh_np_dtb_table_entry_write(hw->dev_id,<br />                     dtb_data->queueid, 1, &user_entry);<br />         if (ret != 0) {<br />             PMD_DRV_LOG(ERR,<br />@@ -761,7 +761,7 @@ zxdh_vlan_filter_table_set(struct zxdh_hw *hw, uint16_t vport, uint16_t vlan_id,<br />     ZXDH_DTB_ERAM_ENTRY_INFO_T entry_data = {index, (uint32_t *)&vlan_table};<br />     ZXDH_DTB_USER_ENTRY_T user_entry_get = {ZXDH_SDT_VLAN_ATT_TABLE, &entry_data};<br />  <br />-    ret = zxdh_np_dtb_table_entry_get(hw->slot_id, dtb_data->queueid, &user_entry_get, 1);<br />+    ret = zxdh_np_dtb_table_entry_get(hw->dev_id, dtb_data->queueid, &user_entry_get, 1);<br />     if (ret) {<br />         PMD_DRV_LOG(ERR, "get vlan table failed");<br />         return -1;<br />@@ -787,7 +787,7 @@ zxdh_vlan_filter_table_set(struct zxdh_hw *hw, uint16_t vport, uint16_t vlan_id,<br />         .p_entry_data = &entry_data<br />     };<br />  <br />-    ret = zxdh_np_dtb_table_entry_write(hw->slot_id,<br />+    ret = zxdh_np_dtb_table_entry_write(hw->dev_id,<br />                 dtb_data->queueid, 1, &user_entry_write);<br />     if (ret != 0) {<br />         PMD_DRV_LOG(ERR, "write vlan table failed");<br />@@ -830,7 +830,7 @@ zxdh_rss_table_set(struct zxdh_hw *hw, uint16_t vport, struct zxdh_rss_reta *rss<br />             .sdt_no = ZXDH_SDT_RSS_ATT_TABLE,<br />             .p_entry_data = &entry<br />         };<br />-        ret = zxdh_np_dtb_table_entry_write(hw->slot_id,<br />+        ret = zxdh_np_dtb_table_entry_write(hw->dev_id,<br />                     dtb_data->queueid, 1, &user_entry_write);<br />         if (ret != 0) {<br />             PMD_DRV_LOG(ERR, "write rss base qid failed vfid:%d", vfid);<br />@@ -853,7 +853,7 @@ zxdh_rss_table_get(struct zxdh_hw *hw, uint16_t vport, struct zxdh_rss_reta *rss<br />         ZXDH_DTB_ERAM_ENTRY_INFO_T entry = {vfid * 32 + i, (uint32_t *)&rss_vqid};<br />         ZXDH_DTB_USER_ENTRY_T user_entry = {ZXDH_SDT_RSS_ATT_TABLE, &entry};<br />  <br />-        ret = zxdh_np_dtb_table_entry_get(hw->slot_id,<br />+        ret = zxdh_np_dtb_table_entry_get(hw->dev_id,<br />                     dtb_data->queueid, &user_entry, 1);<br />         if (ret != 0) {<br />             PMD_DRV_LOG(ERR, "get rss tbl failed, vfid:%d", vfid);<br />@@ -897,7 +897,7 @@ zxdh_dev_broadcast_set(struct zxdh_hw *hw, uint16_t vport, bool enable)<br />             .sdt_no = ZXDH_SDT_BROCAST_ATT_TABLE,<br />             .p_entry_data = (void *)&eram_entry};<br />  <br />-    ret = zxdh_np_dtb_table_entry_get(hw->slot_id, dtb_data->queueid, &entry_get, 1);<br />+    ret = zxdh_np_dtb_table_entry_get(hw->dev_id, dtb_data->queueid, &entry_get, 1);<br />     if (ret == 0) {<br />         if (enable)<br />             brocast_table.bitmap[(vport_num.vfid % 64) / 32] |=<br />@@ -906,7 +906,7 @@ zxdh_dev_broadcast_set(struct zxdh_hw *hw, uint16_t vport, bool enable)<br />             brocast_table.bitmap[(vport_num.vfid % 64) / 32] &=<br />                     ~((UINT32_C(1) << (31 - (vport_num.vfid % 64) % 32)));<br />  <br />-        ret = zxdh_np_dtb_table_entry_write(hw->slot_id, dtb_data->queueid, 1, &entry_get);<br />+        ret = zxdh_np_dtb_table_entry_write(hw->dev_id, dtb_data->queueid, 1, &entry_get);<br />         if (ret) {<br />             PMD_DRV_LOG(ERR, "brocast_table_write_failed. code:%d", ret);<br />             return -ret;<br />@@ -968,7 +968,7 @@ zxdh_set_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport,<br />         .p_entry_data = (void *)&port_entry<br />     };<br />  <br />-    ret = zxdh_np_dtb_table_entry_write(hw->slot_id, hw->dev_sd->dtb_sd.queueid, 1, &entry);<br />+    ret = zxdh_np_dtb_table_entry_write(hw->dev_id, hw->dev_sd->dtb_sd.queueid, 1, &entry);<br />     if (ret)<br />         PMD_DRV_LOG(ERR, "write port_vlan tbl failed, ret:%d ", ret);<br />     return ret;<br />@@ -991,7 +991,7 @@ zxdh_get_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport,<br />         .p_entry_data = (void *)&port_entry<br />     };<br />  <br />-    ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid,<br />+    ret = zxdh_np_dtb_table_entry_get(hw->dev_id, hw->dev_sd->dtb_sd.queueid,<br />             &entry, 1);<br />     if (ret)<br />         PMD_DRV_LOG(ERR, "get port vlan tbl failed, ret:%d ", ret);<br />--  <br />2.27.0<br />