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