Support multiple PF process flow table. Signed-off-by: Tianhao Zhang --- 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