Add (np)network processor registers read/write interfaces.<br /> <br />Signed-off-by: Bingbin Chen <chen.bingbin@zte.com.cn> <br />---<br /> drivers/net/zxdh/zxdh_np.c | 1877 ++++++++++++++++++++++++++----------<br /> drivers/net/zxdh/zxdh_np.h |  226 +++--<br /> 2 files changed, 1511 insertions(+), 592 deletions(-)<br /> <br />diff --git a/drivers/net/zxdh/zxdh_np.c b/drivers/net/zxdh/zxdh_np.c<br />index 28c9e4c1c1..1534cb2709 100644<br />--- a/drivers/net/zxdh/zxdh_np.c<br />+++ b/drivers/net/zxdh/zxdh_np.c<br />@@ -15,7 +15,6 @@<br /> #include "zxdh_logs.h" <br /> #include "zxdh_msg.h" <br />  <br />-static uint64_t g_np_bar_offset;<br /> static ZXDH_DEV_MGR_T g_dev_mgr;<br /> static ZXDH_SDT_MGR_T g_sdt_mgr;<br /> static uint32_t g_dpp_dtb_int_enable;<br />@@ -23,32 +22,209 @@ static uint32_t g_table_type[ZXDH_DEV_CHANNEL_MAX][ZXDH_DEV_SDT_ID_MAX];<br /> static ZXDH_PPU_CLS_BITMAP_T g_ppu_cls_bit_map[ZXDH_DEV_CHANNEL_MAX];<br /> static ZXDH_DTB_MGR_T *p_dpp_dtb_mgr[ZXDH_DEV_CHANNEL_MAX];<br /> static ZXDH_RISCV_DTB_MGR *p_riscv_dtb_queue_mgr[ZXDH_DEV_CHANNEL_MAX];<br />-static ZXDH_TLB_MGR_T *g_p_dpp_tlb_mgr[ZXDH_DEV_CHANNEL_MAX];<br />-static ZXDH_REG_T g_dpp_reg_info[4];<br />-static ZXDH_DTB_TABLE_T g_dpp_dtb_table_info[4];<br /> static ZXDH_SDT_TBL_DATA_T g_sdt_info[ZXDH_DEV_CHANNEL_MAX][ZXDH_DEV_SDT_ID_MAX];<br />-static ZXDH_PPU_STAT_CFG_T g_ppu_stat_cfg;<br />+static ZXDH_PPU_STAT_CFG_T g_ppu_stat_cfg[ZXDH_DEV_CHANNEL_MAX];<br />+<br />+static const ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_cmd_reg[] = {<br />+    {"cpu_ind_rw", ZXDH_FIELD_FLAG_RW, 31, 1, 0x0, 0x0},<br />+    {"cpu_ind_rd_mode", ZXDH_FIELD_FLAG_RW, 30, 1, 0x0, 0x0},<br />+    {"cpu_req_mode", ZXDH_FIELD_FLAG_RW, 27, 2, 0x0, 0x0},<br />+    {"cpu_ind_addr", ZXDH_FIELD_FLAG_RW, 25, 26, 0x0, 0x0},<br />+};<br />+<br />+static const ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_rd_done_reg[] = {<br />+    {"cpu_ind_rd_done", ZXDH_FIELD_FLAG_RO, 0, 1, 0x0, 0x0},<br />+};<br />+<br />+static const ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_rdat0_reg[] = {<br />+    {"cpu_ind_rdat0", ZXDH_FIELD_FLAG_RO, 31, 32, 0x0, 0x0},<br />+};<br />+<br />+static const ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_rdat1_reg[] = {<br />+    {"cpu_ind_rdat1", ZXDH_FIELD_FLAG_RO, 31, 32, 0x0, 0x0},<br />+};<br />+<br />+static const ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_rdat2_reg[] = {<br />+    {"cpu_ind_rdat2", ZXDH_FIELD_FLAG_RO, 31, 32, 0x0, 0x0},<br />+};<br />+<br />+static const ZXDH_FIELD_T g_smmu0_smmu0_cpu_ind_rdat3_reg[] = {<br />+    {"cpu_ind_rdat3", ZXDH_FIELD_FLAG_RO, 31, 32, 0x0, 0x0},<br />+};<br />+<br />+static const ZXDH_FIELD_T g_smmu0_smmu0_wr_arb_cpu_rdy_reg[] = {<br />+    {"wr_arb_cpu_rdy", ZXDH_FIELD_FLAG_RO, 0, 1, 0x1, 0x0},<br />+};<br />+<br />+static const ZXDH_FIELD_T g_dtb4k_dtb_enq_info_queue_buf_space_left_0_127_reg[] = {<br />+    {"info_queue_buf_space_left", ZXDH_FIELD_FLAG_RO, 5, 6, 0x20, 0x0},<br />+};<br />+<br />+static const ZXDH_FIELD_T g_dtb4k_dtb_enq_cfg_epid_v_func_num_0_127_reg[] = {<br />+    {"dbi_en", ZXDH_FIELD_FLAG_RW, 31, 1, 0x0, 0x0},<br />+    {"queue_en", ZXDH_FIELD_FLAG_RW, 30, 1, 0x0, 0x0},<br />+    {"cfg_epid", ZXDH_FIELD_FLAG_RW, 27, 4, 0x0, 0x0},<br />+    {"cfg_vfunc_num", ZXDH_FIELD_FLAG_RW, 23, 8, 0x0, 0x0},<br />+    {"cfg_vector", ZXDH_FIELD_FLAG_RW, 14, 7, 0x0, 0x0},<br />+    {"cfg_func_num", ZXDH_FIELD_FLAG_RW, 7, 3, 0x0, 0x0},<br />+    {"cfg_vfunc_active", ZXDH_FIELD_FLAG_RW, 0, 1, 0x0, 0x0},<br />+};<br />+<br />+static const ZXDH_DTB_FIELD_T g_dtb_ddr_table_cmd_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"rw_len", 123, 2},<br />+    {"v46_flag", 121, 1},<br />+    {"lpm_wr_vld", 120, 1},<br />+    {"baddr", 119, 20},<br />+    {"ecc_en", 99, 1},<br />+    {"rw_addr", 29, 30},<br />+};<br />+<br />+static const ZXDH_DTB_FIELD_T g_dtb_eram_table_cmd_1_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"data_mode", 123, 2},<br />+    {"cpu_wr", 121, 1},<br />+    {"cpu_rd", 120, 1},<br />+    {"cpu_rd_mode", 119, 1},<br />+    {"addr", 113, 26},<br />+    {"data_h", 0, 1},<br />+};<br />+<br />+static const ZXDH_DTB_FIELD_T g_dtb_eram_table_cmd_64_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"data_mode", 123, 2},<br />+    {"cpu_wr", 121, 1},<br />+    {"cpu_rd", 120, 1},<br />+    {"cpu_rd_mode", 119, 1},<br />+    {"addr", 113, 26},<br />+    {"data_h", 63, 32},<br />+    {"data_l", 31, 32},<br />+};<br />+<br />+static const ZXDH_DTB_FIELD_T g_dtb_eram_table_cmd_128_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"data_mode", 123, 2},<br />+    {"cpu_wr", 121, 1},<br />+    {"cpu_rd", 120, 1},<br />+    {"cpu_rd_mode", 119, 1},<br />+    {"addr", 113, 26},<br />+};<br />+<br />+static const ZXDH_DTB_FIELD_T g_dtb_zcam_table_cmd_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"ram_reg_flag", 123, 1},<br />+    {"zgroup_id", 122, 2},<br />+    {"zblock_id", 120, 3},<br />+    {"zcell_id", 117, 2},<br />+    {"mask", 115, 4},<br />+    {"sram_addr", 111, 9},<br />+};<br />+<br />+static const ZXDH_DTB_FIELD_T g_dtb_etcam_table_cmd_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"block_sel", 123, 3},<br />+    {"init_en", 120, 1},<br />+    {"row_or_col_msk", 119, 1},<br />+    {"vben", 118, 1},<br />+    {"reg_tcam_flag", 117, 1},<br />+    {"uload", 116, 8},<br />+    {"rd_wr", 108, 1},<br />+    {"wr_mode", 107, 8},<br />+    {"data_or_mask", 99, 1},<br />+    {"addr", 98, 9},<br />+    {"vbit", 89, 8},<br />+};<br />+<br />+static const ZXDH_DTB_FIELD_T g_dtb_mc_hash_table_cmd_info[] = {<br />+    {"valid", 127, 1},<br />+    {"type_mode", 126, 3},<br />+    {"std_h", 63, 32},<br />+    {"std_l", 31, 32},<br />+};<br />+<br />+static const ZXDH_DTB_TABLE_T g_dpp_dtb_table_info[] = {<br />+    {<br />+        "ddr",<br />+        ZXDH_DTB_TABLE_DDR,<br />+        8,<br />+        g_dtb_ddr_table_cmd_info,<br />+    },<br />+    {<br />+        "eram 1 bit",<br />+        ZXDH_DTB_TABLE_ERAM_1,<br />+        8,<br />+        g_dtb_eram_table_cmd_1_info,<br />+    },<br />+    {<br />+        "eram 64 bit",<br />+        ZXDH_DTB_TABLE_ERAM_64,<br />+        9,<br />+        g_dtb_eram_table_cmd_64_info,<br />+    },<br />+    {<br />+        "eram 128 bit",<br />+        ZXDH_DTB_TABLE_ERAM_128,<br />+        7,<br />+        g_dtb_eram_table_cmd_128_info,<br />+    },<br />+    {<br />+        "zcam",<br />+        ZXDH_DTB_TABLE_ZCAM,<br />+        8,<br />+        g_dtb_zcam_table_cmd_info,<br />+    },<br />+    {<br />+        "etcam",<br />+        ZXDH_DTB_TABLE_ETCAM,<br />+        13,<br />+        g_dtb_etcam_table_cmd_info,<br />+    },<br />+    {<br />+        "mc_hash",<br />+        ZXDH_DTB_TABLE_MC_HASH,<br />+        4,<br />+        g_dtb_mc_hash_table_cmd_info<br />+    },<br />+};<br />  <br /> #define ZXDH_SDT_MGR_PTR_GET()    (&g_sdt_mgr)<br /> #define ZXDH_SDT_SOFT_TBL_GET(id) (g_sdt_mgr.sdt_tbl_array[id])<br />+#define ZXDH_DEV_INFO_GET(id) (g_dev_mgr.p_dev_array[id])<br />+<br />+#define ZXDH_DTB_LEN(cmd_type, int_en, data_len) \<br />+    (((data_len) & 0x3ff) | \<br />+    ((int_en) << 29) | \<br />+    ((cmd_type) << 30))<br />  <br />-#define ZXDH_COMM_MASK_BIT(_bitnum_)\<br />-    (0x1U << (_bitnum_))<br />+static inline uint32_t<br />+zxdh_np_comm_mask_bit(uint32_t bitnum) {<br />+    return (uint32_t)(0x1U << bitnum);<br />+}<br />  <br />-#define ZXDH_COMM_GET_BIT_MASK(_inttype_, _bitqnt_)\<br />-    ((_inttype_)(((_bitqnt_) < 32)))<br />+static inline uint32_t<br />+zxdh_np_comm_get_bit_mask(uint32_t bit_quantity) {<br />+    if (bit_quantity < 32)<br />+        return zxdh_np_comm_mask_bit(bit_quantity & 0x1F) - 1;<br />+    else<br />+        return 0xFFFFFFFF;<br />+}<br />  <br /> #define ZXDH_COMM_UINT32_GET_BITS(_uidst_, _uisrc_, _uistartpos_, _uilen_)\<br />     ((_uidst_) = (((_uisrc_) >> (_uistartpos_)) & \<br />-    (ZXDH_COMM_GET_BIT_MASK(uint32_t, (_uilen_)))))<br />+    (zxdh_np_comm_get_bit_mask((_uilen_)))))<br />  <br /> #define ZXDH_REG_DATA_MAX      (128)<br />  <br /> #define ZXDH_COMM_CHECK_DEV_POINT(dev_id, point)\<br /> do {\<br />     if (NULL == (point)) {\<br />-        PMD_DRV_LOG(ERR, "dev: %d ZXIC %s:%d[Error:POINT NULL] !"\<br />-            "FUNCTION : %s!", (dev_id), __FILE__, __LINE__, __func__);\<br />+        PMD_DRV_LOG(ERR, "dev: %u [POINT NULL]", (dev_id));\<br />         RTE_ASSERT(0);\<br />     } \<br /> } while (0)<br />@@ -56,33 +232,22 @@ do {\<br /> #define ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, becall)\<br /> do {\<br />     if ((rc) != 0) {\<br />-        PMD_DRV_LOG(ERR, "dev: %d ZXIC  %s:%d !"\<br />-        "-- %s Call %s Fail!", (dev_id), __FILE__, __LINE__, __func__, becall);\<br />+        PMD_DRV_LOG(ERR, "dev: %u, %s failed!", (dev_id), becall);\<br />         RTE_ASSERT(0);\<br />     } \<br /> } while (0)<br />  <br />-#define ZXDH_COMM_CHECK_POINT_NO_ASSERT(point)\<br />-do {\<br />-    if ((point) == NULL) {\<br />-        PMD_DRV_LOG(ERR, "ZXIC %s:%d[Error:POINT NULL] ! FUNCTION : %s!",\<br />-        __FILE__, __LINE__, __func__);\<br />-    } \<br />-} while (0)<br />-<br /> #define ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, becall)\<br /> do {\<br />     if ((rc) != 0) {\<br />-        PMD_DRV_LOG(ERR, "ZXIC  %s:%d !-- %s Call %s"\<br />-        " Fail!", __FILE__, __LINE__, __func__, becall);\<br />+        PMD_DRV_LOG(ERR, "%s failed!", becall);\<br />     } \<br /> } while (0)<br />  <br /> #define ZXDH_COMM_CHECK_RC(rc, becall)\<br /> do {\<br />     if ((rc) != 0) {\<br />-        PMD_DRV_LOG(ERR, "ZXIC  %s:%d!-- %s Call %s "\<br />-        "Fail!", __FILE__, __LINE__, __func__, becall);\<br />+        PMD_DRV_LOG(ERR, "%s failed!", becall);\<br />         RTE_ASSERT(0);\<br />     } \<br /> } while (0)<br />@@ -90,34 +255,28 @@ do {\<br /> #define ZXDH_COMM_CHECK_POINT(point)\<br /> do {\<br />     if ((point) == NULL) {\<br />-        PMD_DRV_LOG(ERR, "ZXIC %s:%d[Error:POINT NULL] ! FUNCTION : %s!",\<br />-        __FILE__, __LINE__, __func__);\<br />+        PMD_DRV_LOG(ERR, "[POINT NULL]");\<br />         RTE_ASSERT(0);\<br />     } \<br /> } while (0)<br />  <br />+static inline uint16_t zxdh_np_comm_convert16(uint16_t w_data)<br />+{<br />+    return ((w_data) & 0xff) << 8 | ((w_data) & 0xff00) >> 8;<br />+}<br />  <br />-#define ZXDH_COMM_CHECK_POINT_MEMORY_FREE(point, ptr)\<br />-do {\<br />-    if ((point) == NULL) {\<br />-        PMD_DRV_LOG(ERR, "ZXIC %s:%d[Error:POINT NULL] !"\<br />-        "FUNCTION : %s!", __FILE__, __LINE__, __func__);\<br />-        rte_free(ptr);\<br />-        RTE_ASSERT(0);\<br />-    } \<br />-} while (0)<br />-<br />-#define ZXDH_COMM_CHECK_RC_MEMORY_FREE_NO_ASSERT(rc, becall, ptr)\<br />-do {\<br />-    if ((rc) != 0) {\<br />-        PMD_DRV_LOG(ERR, "ZXICP  %s:%d, %s Call"\<br />-        " %s Fail!", __FILE__, __LINE__, __func__, becall);\<br />-        rte_free(ptr);\<br />-    } \<br />-} while (0)<br />+static inline uint32_t<br />+zxdh_np_comm_convert32(uint32_t dw_data)<br />+{<br />+    return ((dw_data) & 0xff) << 24 | ((dw_data) & 0xff00) << 8 |<br />+        ((dw_data) & 0xff0000) >> 8 | ((dw_data) & 0xff000000) >> 24;<br />+}<br />  <br /> #define ZXDH_COMM_CONVERT16(w_data) \<br />-            (((w_data) & 0xff) << 8)<br />+            zxdh_np_comm_convert16(w_data)<br />+<br />+#define ZXDH_COMM_CONVERT32(w_data) \<br />+            zxdh_np_comm_convert32(w_data)<br />  <br /> #define ZXDH_DTB_TAB_UP_WR_INDEX_GET(DEV_ID, QUEUE_ID)       \<br />         (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.wr_index)<br />@@ -132,10 +291,12 @@ do {\<br />         (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.data_len[(INDEX)])<br />  <br /> #define ZXDH_DTB_TAB_UP_VIR_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)     \<br />-        ((INDEX) * p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.item_size)<br />+        (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.start_vir_addr + \<br />+        (INDEX) * p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_up.item_size)<br />  <br /> #define ZXDH_DTB_TAB_DOWN_VIR_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)   \<br />-        ((INDEX) * p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_down.item_size)<br />+        (p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_down.start_vir_addr + \<br />+        INDEX * p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_down.item_size)<br />  <br /> #define ZXDH_DTB_TAB_DOWN_WR_INDEX_GET(DEV_ID, QUEUE_ID)       \<br />         (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].tab_down.wr_index)<br />@@ -143,7 +304,25 @@ do {\<br /> #define ZXDH_DTB_QUEUE_INIT_FLAG_GET(DEV_ID, QUEUE_ID)       \<br />         (p_dpp_dtb_mgr[(DEV_ID)]->queue_info[(QUEUE_ID)].init_flag)<br />  <br />-ZXDH_FIELD_T g_stat_car0_cara_queue_ram0_159_0_reg[] = {<br />+#define ZXDH_DTB_TAB_UP_USER_VIR_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)     \<br />+        (p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_up.user_addr[INDEX].vir_addr)<br />+<br />+#define ZXDH_DTB_TAB_UP_USER_ADDR_FLAG_SET(DEV_ID, QUEUE_ID, INDEX, VAL)     \<br />+        (p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_up.user_addr[INDEX].user_flag = \<br />+        VAL)<br />+<br />+static inline uint64_t<br />+zxdh_np_dtb_tab_up_phy_addr_get(uint32_t DEV_ID, uint32_t QUEUE_ID,<br />+    uint32_t INDEX)<br />+{<br />+    return p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_up.start_phy_addr +<br />+        INDEX * p_dpp_dtb_mgr[DEV_ID]->queue_info[QUEUE_ID].tab_up.item_size;<br />+}<br />+<br />+#define ZXDH_DTB_TAB_UP_PHY_ADDR_GET(DEV_ID, QUEUE_ID, INDEX)     \<br />+    zxdh_np_dtb_tab_up_phy_addr_get(DEV_ID, QUEUE_ID, INDEX)<br />+<br />+static ZXDH_FIELD_T g_stat_car0_cara_queue_ram0_159_0_reg[] = {<br />     {"cara_drop", ZXDH_FIELD_FLAG_RW, 147, 1, 0x0, 0x0},<br />     {"cara_plcr_en", ZXDH_FIELD_FLAG_RW, 146, 1, 0x0, 0x0},<br />     {"cara_profile_id", ZXDH_FIELD_FLAG_RW, 145, 9, 0x0, 0x0},<br />@@ -155,7 +334,7 @@ ZXDH_FIELD_T g_stat_car0_cara_queue_ram0_159_0_reg[] = {<br />     {"cara_tci", ZXDH_FIELD_FLAG_RO, 26, 27, 0x0, 0x0},<br /> };<br />  <br />-ZXDH_FIELD_T g_stat_car0_carb_queue_ram0_159_0_reg[] = {<br />+static ZXDH_FIELD_T g_stat_car0_carb_queue_ram0_159_0_reg[] = {<br />     {"carb_drop", ZXDH_FIELD_FLAG_RW, 147, 1, 0x0, 0x0},<br />     {"carb_plcr_en", ZXDH_FIELD_FLAG_RW, 146, 1, 0x0, 0x0},<br />     {"carb_profile_id", ZXDH_FIELD_FLAG_RW, 145, 9, 0x0, 0x0},<br />@@ -167,7 +346,7 @@ ZXDH_FIELD_T g_stat_car0_carb_queue_ram0_159_0_reg[] = {<br />     {"carb_tci", ZXDH_FIELD_FLAG_RO, 26, 27, 0x0, 0x0},<br /> };<br />  <br />-ZXDH_FIELD_T g_stat_car0_carc_queue_ram0_159_0_reg[] = {<br />+static ZXDH_FIELD_T g_stat_car0_carc_queue_ram0_159_0_reg[] = {<br />     {"carc_drop", ZXDH_FIELD_FLAG_RW, 147, 1, 0x0, 0x0},<br />     {"carc_plcr_en", ZXDH_FIELD_FLAG_RW, 146, 1, 0x0, 0x0},<br />     {"carc_profile_id", ZXDH_FIELD_FLAG_RW, 145, 9, 0x0, 0x0},<br />@@ -179,10 +358,69 @@ ZXDH_FIELD_T g_stat_car0_carc_queue_ram0_159_0_reg[] = {<br />     {"carc_tci", ZXDH_FIELD_FLAG_RO, 26, 27, 0x0, 0x0},<br /> };<br />  <br />-ZXDH_FIELD_T g_nppu_pktrx_cfg_pktrx_glbal_cfg_0_reg[] = {<br />+static ZXDH_FIELD_T g_nppu_pktrx_cfg_pktrx_glbal_cfg_0_reg[] = {<br />     {"pktrx_glbal_cfg_0", ZXDH_FIELD_FLAG_RW, 31, 32, 0x0, 0x0},<br /> };<br />  <br />+static uint32_t zxdh_dtb_info_print(uint32_t dev_id,<br />+                        uint32_t queue_id,<br />+                        uint32_t item_index,<br />+                        ZXDH_DTB_QUEUE_ITEM_INFO_T *item_info)<br />+{<br />+    uint64_t element_start_addr = 0;<br />+    uint64_t ack_start_addr = 0;<br />+    uint64_t data_addr = 0;<br />+    uint32_t data = 0;<br />+    uint32_t i = 0;<br />+    uint32_t j = 0;<br />+<br />+    PMD_DRV_LOG(DEBUG, "queue: %u, element:%u,  %s table info is:",<br />+                queue_id, item_index, (item_info->cmd_type) ? "up" : "down");<br />+    PMD_DRV_LOG(DEBUG, "cmd_vld    : %u", item_info->cmd_vld);<br />+    PMD_DRV_LOG(DEBUG, "cmd_type   : %s", (item_info->cmd_type) ? "up" : "down");<br />+    PMD_DRV_LOG(DEBUG, "int_en     : %u", item_info->int_en);<br />+    PMD_DRV_LOG(DEBUG, "data_len   : %u", item_info->data_len);<br />+    PMD_DRV_LOG(DEBUG, "data_hddr  : 0x%x", item_info->data_hddr);<br />+    PMD_DRV_LOG(DEBUG, "data_laddr : 0x%x", item_info->data_laddr);<br />+<br />+    if (item_info->cmd_type == ZXDH_DTB_DIR_UP_TYPE) {<br />+        if (ZXDH_DTB_TAB_UP_USER_PHY_ADDR_FLAG_GET(dev_id, queue_id, item_index) ==<br />+        ZXDH_DTB_TAB_UP_USER_ADDR_TYPE) {<br />+            ack_start_addr =<br />+            ZXDH_DTB_TAB_UP_USER_VIR_ADDR_GET(dev_id, queue_id, item_index);<br />+        }<br />+        ack_start_addr = ZXDH_DTB_TAB_UP_VIR_ADDR_GET(dev_id, queue_id, item_index);<br />+        element_start_addr =<br />+        ZXDH_DTB_TAB_UP_VIR_ADDR_GET(dev_id, queue_id, item_index) + ZXDH_DTB_ITEM_ACK_SIZE;<br />+    } else {<br />+        ack_start_addr = ZXDH_DTB_TAB_DOWN_VIR_ADDR_GET(dev_id, queue_id, item_index);<br />+        element_start_addr =<br />+        ZXDH_DTB_TAB_DOWN_VIR_ADDR_GET(dev_id, queue_id, item_index)<br />+        + ZXDH_DTB_ITEM_ACK_SIZE;<br />+    }<br />+    PMD_DRV_LOG(DEBUG, "dtb data:");<br />+<br />+    PMD_DRV_LOG(DEBUG, "ack info:");<br />+    for (j = 0; j < 4; j++) {<br />+        data  = ZXDH_COMM_CONVERT32(*((uint32_t *)(ack_start_addr + 4 * j)));<br />+        PMD_DRV_LOG(DEBUG, "0x%08x  ", data);<br />+    }<br />+<br />+    for (i = 0; i < item_info->data_len; i++) {<br />+        data_addr = element_start_addr + 16 * i;<br />+<br />+        PMD_DRV_LOG(DEBUG, "row_%u:", i);<br />+<br />+        for (j = 0; j < 4; j++) {<br />+            data  = ZXDH_COMM_CONVERT32(*((uint32_t *)(data_addr + 4 * j)));<br />+            PMD_DRV_LOG(DEBUG, "0x%08x  ", data);<br />+        }<br />+    }<br />+<br />+    PMD_DRV_LOG(DEBUG, "zxdh dtb info print end.");<br />+    return ZXDH_OK;<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_comm_is_big_endian(void)<br /> {<br />@@ -215,7 +453,7 @@ zxdh_np_comm_swap(uint8_t *p_uc_data, uint32_t dw_byte_len)<br />     uc_byte_mode = dw_byte_len % 4 & 0xff;<br />  <br />     for (i = 0; i < dw_byte_num; i++) {<br />-        (*p_dw_tmp) = ZXDH_COMM_CONVERT16(*p_dw_tmp);<br />+        (*p_dw_tmp) = ZXDH_COMM_CONVERT32(*p_dw_tmp);<br />         p_dw_tmp++;<br />     }<br />  <br />@@ -239,6 +477,392 @@ zxdh_np_dev_init(void)<br />     return 0;<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_dev_read_channel(uint32_t dev_id, uint32_t addr, uint32_t size, uint32_t *p_data)<br />+{<br />+    ZXDH_DEV_CFG_T *p_dev_info = NULL;<br />+<br />+    p_dev_info = ZXDH_DEV_INFO_GET(dev_id);<br />+<br />+    if (p_dev_info == NULL) {<br />+        PMD_DRV_LOG(ERR, "Error: Channel[%u] dev is not exist",<br />+            dev_id);<br />+        return ZXDH_ERR;<br />+    }<br />+    if (p_dev_info->access_type == ZXDH_DEV_ACCESS_TYPE_PCIE) {<br />+        p_dev_info->p_pcie_read_fun(dev_id, addr, size, p_data);<br />+    } else {<br />+        PMD_DRV_LOG(ERR, "Dev access type[ %u ] is invalid",<br />+            p_dev_info->access_type);<br />+        return ZXDH_ERR;<br />+    }<br />+<br />+    return ZXDH_OK;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_dev_write_channel(uint32_t dev_id, uint32_t addr, uint32_t size, uint32_t *p_data)<br />+{<br />+    ZXDH_DEV_CFG_T *p_dev_info = NULL;<br />+<br />+    p_dev_info = ZXDH_DEV_INFO_GET(dev_id);<br />+<br />+    if (p_dev_info == NULL) {<br />+        PMD_DRV_LOG(ERR, "Error: Channel[%u] dev is not exist", dev_id);<br />+        return ZXDH_ERR;<br />+    }<br />+    if (p_dev_info->access_type == ZXDH_DEV_ACCESS_TYPE_PCIE) {<br />+        p_dev_info->p_pcie_write_fun(dev_id, addr, size, p_data);<br />+    } else {<br />+        PMD_DRV_LOG(ERR, "Dev access type[ %u ] is invalid", p_dev_info->access_type);<br />+        return ZXDH_ERR;<br />+    }<br />+<br />+    return ZXDH_OK;<br />+}<br />+<br />+static void<br />+zxdh_np_pci_write32(uint64_t abs_addr, uint32_t *p_data)<br />+{<br />+    uint32_t data = 0;<br />+    uint64_t addr = 0;<br />+<br />+    data = *p_data;<br />+<br />+    if (zxdh_np_comm_is_big_endian())<br />+        data = ZXDH_COMM_CONVERT32(data);<br />+<br />+    addr = abs_addr + ZXDH_SYS_VF_NP_BASE_OFFSET;<br />+    *((volatile uint32_t *)addr) = data;<br />+}<br />+<br />+static void<br />+zxdh_np_pci_read32(uint64_t abs_addr, uint32_t *p_data)<br />+{<br />+    uint32_t data = 0;<br />+    uint64_t addr = 0;<br />+<br />+    addr = abs_addr + ZXDH_SYS_VF_NP_BASE_OFFSET;<br />+    data = *((volatile uint32_t *)addr);<br />+<br />+    if (zxdh_np_comm_is_big_endian())<br />+        data = ZXDH_COMM_CONVERT32(data);<br />+<br />+    *p_data = data;<br />+}<br />+<br />+static uint64_t<br />+zxdh_np_dev_get_pcie_addr(uint32_t dev_id)<br />+{<br />+    ZXDH_DEV_MGR_T *p_dev_mgr = NULL;<br />+    ZXDH_DEV_CFG_T *p_dev_info = NULL;<br />+<br />+    p_dev_mgr = &g_dev_mgr;<br />+    p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+<br />+    if (p_dev_info == NULL)<br />+        return ZXDH_DEV_TYPE_INVALID;<br />+<br />+    return p_dev_info->pcie_addr;<br />+}<br />+<br />+static void<br />+zxdh_np_dev_pcie_default_write(uint32_t dev_id, uint32_t addr, uint32_t size, uint32_t *p_data)<br />+{<br />+    uint32_t i;<br />+    uint64_t abs_addr = 0;<br />+<br />+    abs_addr = zxdh_np_dev_get_pcie_addr(dev_id) + addr;<br />+<br />+    for (i = 0; i < size; i++)<br />+        zxdh_np_pci_write32(abs_addr + 4 * i, p_data + i);<br />+}<br />+<br />+static void<br />+zxdh_np_dev_pcie_default_read(uint32_t dev_id, uint32_t addr, uint32_t size, uint32_t *p_data)<br />+{<br />+    uint32_t i;<br />+    uint64_t abs_addr = 0;<br />+<br />+    abs_addr = zxdh_np_dev_get_pcie_addr(dev_id) + addr;<br />+<br />+    for (i = 0; i < size; i++)<br />+        zxdh_np_pci_read32(abs_addr + 4 * i, p_data + i);<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_read(uint32_t dev_id, uint32_t addr, uint32_t *p_data)<br />+{<br />+    return zxdh_np_dev_read_channel(dev_id, addr, 1, p_data);<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_write(uint32_t dev_id, uint32_t addr, uint32_t *p_data)<br />+{<br />+    return zxdh_np_dev_write_channel(dev_id, addr, 1, p_data);<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_se_smmu0_write(uint32_t dev_id, uint32_t addr, uint32_t *p_data)<br />+{<br />+    return zxdh_np_write(dev_id, addr, p_data);<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_se_smmu0_read(uint32_t dev_id, uint32_t addr, uint32_t *p_data)<br />+{<br />+    return zxdh_np_read(dev_id, addr, p_data);<br />+}<br />+<br />+static ZXDH_REG_T g_dpp_reg_info[] = {<br />+    {<br />+        .reg_name = "cpu_ind_cmd",<br />+        .reg_no = 669,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x14,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 4,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_cmd_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "cpu_ind_rd_done",<br />+        .reg_no = 670,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x40,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_rd_done_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "cpu_ind_rdat0",<br />+        .reg_no = 671,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x44,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_rdat0_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "cpu_ind_rdat1",<br />+        .reg_no = 672,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x48,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_rdat1_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "cpu_ind_rdat2",<br />+        .reg_no = 673,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x4c,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_rdat2_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "cpu_ind_rdat3",<br />+        .reg_no = 674,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x50,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_cpu_ind_rdat3_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "wr_arb_cpu_rdy",<br />+        .reg_no = 676,<br />+        .module_no = SMMU0,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_SE_SMMU0_BASE_ADDR + ZXDH_MODULE_SE_SMMU0_BASE_ADDR + 0x10c,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_smmu0_smmu0_wr_arb_cpu_rdy_reg,<br />+        .p_write_fun = zxdh_np_se_smmu0_write,<br />+        .p_read_fun = zxdh_np_se_smmu0_read,<br />+    },<br />+    {<br />+        .reg_name = "info_queue_buf_space_left_0_127",<br />+        .reg_no = 820,<br />+        .module_no = DTB4K,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_UNI_ARRAY,<br />+        .addr = ZXDH_SYS_DTB_BASE_ADDR + ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0xc,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 127 + 1,<br />+        .m_step = 0,<br />+        .n_step = 32,<br />+        .field_num = 1,<br />+        .p_fields = g_dtb4k_dtb_enq_info_queue_buf_space_left_0_127_reg,<br />+        .p_write_fun = zxdh_np_write,<br />+        .p_read_fun = zxdh_np_read,<br />+    },<br />+    {<br />+        .reg_name = "cfg_epid_v_func_num_0_127",<br />+        .reg_no = 821,<br />+        .module_no = DTB4K,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_UNI_ARRAY,<br />+        .addr = ZXDH_SYS_DTB_BASE_ADDR + ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0x10,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 127 + 1,<br />+        .m_step = 0,<br />+        .n_step = 32,<br />+        .field_num = 7,<br />+        .p_fields = g_dtb4k_dtb_enq_cfg_epid_v_func_num_0_127_reg,<br />+        .p_write_fun = zxdh_np_write,<br />+        .p_read_fun = zxdh_np_read,<br />+    },<br />+    {<br />+        .reg_name = "cara_queue_ram0_159_0",<br />+        .reg_no = 721,<br />+        .module_no = STAT,<br />+        .flags = ZXDH_REG_FLAG_INDIRECT,<br />+        .array_type = ZXDH_REG_UNI_ARRAY,<br />+        .addr = 0x000000 + 0x14000000,<br />+        .width = (160 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0x7FFF + 1,<br />+        .m_step = 0,<br />+        .n_step = 8,<br />+        .field_num = 9,<br />+        .p_fields = g_stat_car0_cara_queue_ram0_159_0_reg,<br />+        .p_write_fun = NULL,<br />+        .p_read_fun = NULL,<br />+    },<br />+    {<br />+        .reg_name = "carb_queue_ram0_159_0",<br />+        .reg_no = 738,<br />+        .module_no = STAT,<br />+        .flags = ZXDH_REG_FLAG_INDIRECT,<br />+        .array_type = ZXDH_REG_UNI_ARRAY,<br />+        .addr = 0x100000 + 0x14000000,<br />+        .width = (160 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0xFFF + 1,<br />+        .m_step = 0,<br />+        .n_step = 8,<br />+        .field_num = 9,<br />+        .p_fields = g_stat_car0_carb_queue_ram0_159_0_reg,<br />+        .p_write_fun = NULL,<br />+        .p_read_fun = NULL,<br />+    },<br />+    {<br />+        .reg_name = "carc_queue_ram0_159_0",<br />+        .reg_no = 755,<br />+        .module_no = STAT,<br />+        .flags = ZXDH_REG_FLAG_INDIRECT,<br />+        .array_type = ZXDH_REG_UNI_ARRAY,<br />+        .addr = 0x200000 + 0x14000000,<br />+        .width = (160 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0x3FF + 1,<br />+        .m_step = 0,<br />+        .n_step = 8,<br />+        .field_num = 9,<br />+        .p_fields = g_stat_car0_carc_queue_ram0_159_0_reg,<br />+        .p_write_fun = NULL,<br />+        .p_read_fun = NULL,<br />+    },<br />+    {<br />+        .reg_name = "pktrx_glbal_cfg_0",<br />+        .reg_no = 448,<br />+        .module_no = NPPU,<br />+        .flags = ZXDH_REG_FLAG_DIRECT,<br />+        .array_type = ZXDH_REG_NUL_ARRAY,<br />+        .addr = ZXDH_SYS_NPPU_BASE_ADDR + ZXDH_MODULE_NPPU_PKTRX_CFG_BASE_ADDR + 0x01f8,<br />+        .width = (32 / 8),<br />+        .m_size = 0,<br />+        .n_size = 0,<br />+        .m_step = 0,<br />+        .n_step = 0,<br />+        .field_num = 1,<br />+        .p_fields = g_nppu_pktrx_cfg_pktrx_glbal_cfg_0_reg,<br />+        .p_write_fun = NULL,<br />+        .p_read_fun = NULL,<br />+    },<br />+};<br />+<br />+static uint32_t<br />+zxdh_np_reg_get_reg_addr(uint32_t reg_no, uint32_t m_offset, uint32_t n_offset)<br />+{<br />+    uint32_t     addr        = 0;<br />+    ZXDH_REG_T  *p_reg_info = NULL;<br />+<br />+    p_reg_info = &g_dpp_reg_info[reg_no];<br />+<br />+    addr = p_reg_info->addr;<br />+<br />+    if (p_reg_info->array_type & ZXDH_REG_UNI_ARRAY) {<br />+        if (n_offset > (p_reg_info->n_size - 1))<br />+            PMD_DRV_LOG(ERR, "reg n_offset is out of range, reg_no:%u", reg_no);<br />+<br />+        addr += n_offset * p_reg_info->n_step;<br />+    } else if (p_reg_info->array_type & ZXDH_REG_BIN_ARRAY) {<br />+        if ((n_offset > (p_reg_info->n_size - 1)) || (m_offset > (p_reg_info->m_size - 1)))<br />+            PMD_DRV_LOG(ERR, "reg n_offset/m_offset out of range, reg_no:%u", reg_no);<br />+<br />+        addr += m_offset * p_reg_info->m_step + n_offset * p_reg_info->n_step;<br />+    }<br />+<br />+    return addr;<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_dev_add(uint32_t  dev_id, ZXDH_DEV_TYPE_E dev_type,<br />         ZXDH_DEV_ACCESS_TYPE_E  access_type, uint64_t  pcie_addr,<br />@@ -262,7 +886,10 @@ zxdh_np_dev_add(uint32_t  dev_id, ZXDH_DEV_TYPE_E dev_type,<br />     } else {<br />         /* device is new. */<br />         p_dev_info = rte_malloc(NULL, sizeof(ZXDH_DEV_CFG_T), 0);<br />-        ZXDH_COMM_CHECK_DEV_POINT(dev_id, p_dev_info);<br />+        if (p_dev_info == NULL) {<br />+            PMD_DRV_LOG(ERR, "malloc memory failed");<br />+            return ZXDH_PAR_CHK_POINT_NULL;<br />+        }<br />         p_dev_mgr->p_dev_array[dev_id] = p_dev_info;<br />         p_dev_mgr->device_num++;<br />     }<br />@@ -275,7 +902,10 @@ zxdh_np_dev_add(uint32_t  dev_id, ZXDH_DEV_TYPE_E dev_type,<br />     p_dev_info->dma_vir_addr = dma_vir_addr;<br />     p_dev_info->dma_phy_addr = dma_phy_addr;<br />  <br />-    return 0;<br />+    p_dev_info->p_pcie_write_fun = zxdh_np_dev_pcie_default_write;<br />+    p_dev_info->p_pcie_read_fun  = zxdh_np_dev_pcie_default_read;<br />+<br />+    return ZXDH_OK;<br /> }<br />  <br /> static uint32_t<br />@@ -323,8 +953,7 @@ zxdh_np_sdt_mgr_create(uint32_t dev_id)<br />  <br />         p_sdt_mgr->channel_num++;<br />     } else {<br />-        PMD_DRV_LOG(ERR, "Error: %s for dev[%d]" <br />-            "is called repeatedly!", __func__, dev_id);<br />+        PMD_DRV_LOG(ERR, "called repeatedly!");<br />         return 1;<br />     }<br />  <br />@@ -367,6 +996,61 @@ zxdh_np_ppu_parse_cls_bitmap(uint32_t dev_id,<br />     }<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_agent_channel_sync_send(uint32_t dev_id,<br />+                ZXDH_AGENT_CHANNEL_MSG_T *p_msg,<br />+                uint32_t *p_data,<br />+                uint32_t rep_len)<br />+{<br />+    uint32_t ret = ZXDH_OK;<br />+    uint32_t vport = 0;<br />+    struct zxdh_pci_bar_msg in = {0};<br />+    struct zxdh_msg_recviver_mem result = {0};<br />+    uint32_t *recv_buffer = NULL;<br />+    uint8_t *reply_ptr = NULL;<br />+    uint16_t reply_msg_len = 0;<br />+    uint64_t agent_addr = 0;<br />+<br />+    PMD_DRV_LOG(DEBUG, "dev_id:0x%x", dev_id);<br />+<br />+    if (ZXDH_IS_PF(vport))<br />+        in.src = ZXDH_MSG_CHAN_END_PF;<br />+    else<br />+        in.src = ZXDH_MSG_CHAN_END_VF;<br />+<br />+    in.virt_addr = agent_addr;<br />+    in.payload_addr = p_msg->msg;<br />+    in.payload_len = p_msg->msg_len;<br />+    in.dst = ZXDH_MSG_CHAN_END_RISC;<br />+    in.module_id = ZXDH_BAR_MDOULE_NPSDK;<br />+<br />+    recv_buffer = rte_zmalloc(NULL, rep_len + ZXDH_CHANNEL_REPS_LEN, 0);<br />+    if (recv_buffer == NULL) {<br />+        PMD_DRV_LOG(ERR, "malloc memory failed");<br />+        return ZXDH_PAR_CHK_POINT_NULL;<br />+    }<br />+<br />+    result.buffer_len = rep_len + ZXDH_CHANNEL_REPS_LEN;<br />+    result.recv_buffer = recv_buffer;<br />+<br />+    ret = zxdh_bar_chan_sync_msg_send(&in, &result);<br />+    if (ret == ZXDH_BAR_MSG_OK) {<br />+        reply_ptr = (uint8_t *)(result.recv_buffer);<br />+        if (*reply_ptr == 0XFF) {<br />+            reply_msg_len = *(uint16_t *)(reply_ptr + 1);<br />+            memcpy(p_data, reply_ptr + 4,<br />+                ((reply_msg_len > rep_len) ? rep_len : reply_msg_len));<br />+        } else {<br />+            PMD_DRV_LOG(ERR, "Message not replied");<br />+        }<br />+    } else {<br />+        PMD_DRV_LOG(ERR, "Error[0x%x], bar msg send failed!", ret);<br />+    }<br />+<br />+    rte_free(recv_buffer);<br />+    return ret;<br />+}<br />+<br /> static ZXDH_DTB_MGR_T *<br /> zxdh_np_dtb_mgr_get(uint32_t dev_id)<br /> {<br />@@ -376,6 +1060,24 @@ zxdh_np_dtb_mgr_get(uint32_t dev_id)<br />         return p_dpp_dtb_mgr[dev_id];<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_dtb_mgr_create(uint32_t dev_id)<br />+{<br />+    if (p_dpp_dtb_mgr[dev_id] != NULL) {<br />+        PMD_DRV_LOG(ERR, "ErrorCode[0x%x]: Dma Manager" <br />+            " is exist!!!", ZXDH_RC_DTB_MGR_EXIST);<br />+        return ZXDH_RC_DTB_MGR_EXIST;<br />+    }<br />+<br />+    p_dpp_dtb_mgr[dev_id] = rte_zmalloc(NULL, sizeof(ZXDH_DTB_MGR_T), 0);<br />+    if (p_dpp_dtb_mgr[dev_id] == NULL) {<br />+        PMD_DRV_LOG(ERR, "malloc memory failed");<br />+        return ZXDH_PAR_CHK_POINT_NULL;<br />+    }<br />+<br />+    return ZXDH_OK;<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_dtb_soft_init(uint32_t dev_id)<br /> {<br />@@ -386,10 +1088,11 @@ zxdh_np_dtb_soft_init(uint32_t dev_id)<br />  <br />     p_dtb_mgr = zxdh_np_dtb_mgr_get(dev_id);<br />     if (p_dtb_mgr == NULL) {<br />-        p_dpp_dtb_mgr[dev_id] = rte_zmalloc(NULL, sizeof(ZXDH_DTB_MGR_T), 0);<br />+        zxdh_np_dtb_mgr_create(dev_id);<br />+<br />         p_dtb_mgr = zxdh_np_dtb_mgr_get(dev_id);<br />         if (p_dtb_mgr == NULL)<br />-            return 1;<br />+            return ZXDH_RC_DTB_MGR_NOT_EXIST;<br />     }<br />  <br />     return 0;<br />@@ -469,36 +1172,9 @@ zxdh_np_addr_calc(uint64_t pcie_vir_baddr, uint32_t bar_offset)<br />  <br />     np_addr = ((pcie_vir_baddr + bar_offset) > ZXDH_PCIE_NP_MEM_SIZE)<br />                 ? (pcie_vir_baddr + bar_offset - ZXDH_PCIE_NP_MEM_SIZE) : 0;<br />-    g_np_bar_offset = bar_offset;<br />-<br />     return np_addr;<br /> }<br />  <br />-int<br />-zxdh_np_host_init(uint32_t dev_id,<br />-        ZXDH_DEV_INIT_CTRL_T *p_dev_init_ctrl)<br />-{<br />-    ZXDH_SYS_INIT_CTRL_T sys_init_ctrl = {0};<br />-    uint32_t rc;<br />-    uint64_t agent_addr;<br />-<br />-    ZXDH_COMM_CHECK_POINT_NO_ASSERT(p_dev_init_ctrl);<br />-<br />-    sys_init_ctrl.flags = (ZXDH_DEV_ACCESS_TYPE_PCIE << 0) | (ZXDH_DEV_AGENT_ENABLE << 10);<br />-    sys_init_ctrl.pcie_vir_baddr = zxdh_np_addr_calc(p_dev_init_ctrl->pcie_vir_addr,<br />-        p_dev_init_ctrl->np_bar_offset);<br />-    sys_init_ctrl.device_type = ZXDH_DEV_TYPE_CHIP;<br />-    rc = zxdh_np_base_soft_init(dev_id, &sys_init_ctrl);<br />-    ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_base_soft_init");<br />-<br />-    zxdh_np_dev_vport_set(dev_id, p_dev_init_ctrl->vport);<br />-<br />-    agent_addr = ZXDH_PCIE_AGENT_ADDR_OFFSET + p_dev_init_ctrl->pcie_vir_addr;<br />-    zxdh_np_dev_agent_addr_set(dev_id, agent_addr);<br />-<br />-    return 0;<br />-}<br />-<br /> static ZXDH_RISCV_DTB_MGR *<br /> zxdh_np_riscv_dtb_queue_mgr_get(uint32_t dev_id)<br /> {<br />@@ -611,24 +1287,37 @@ zxdh_np_reg_read(uint32_t dev_id, uint32_t reg_no,<br />         uint32_t m_offset, uint32_t n_offset, void *p_data)<br /> {<br />     uint32_t p_buff[ZXDH_REG_DATA_MAX] = {0};<br />-    ZXDH_REG_T *p_reg_info = NULL;<br />-    ZXDH_FIELD_T *p_field_info = NULL;<br />+    ZXDH_REG_T *p_reg_info = &g_dpp_reg_info[reg_no];<br />+    const ZXDH_FIELD_T *p_field_info = p_reg_info->p_fields;<br />     uint32_t rc = 0;<br />     uint32_t i;<br />+    uint32_t addr = 0;<br />+    uint32_t reg_module = p_reg_info->module_no;<br />  <br />-    if (reg_no < 4) {<br />-        p_reg_info = &g_dpp_reg_info[reg_no];<br />-        p_field_info = p_reg_info->p_fields;<br />-        for (i = 0; i < p_reg_info->field_num; i++) {<br />-            rc = zxdh_np_comm_read_bits_ex((uint8_t *)p_buff,<br />-                                    p_reg_info->width * 8,<br />-                                    (uint32_t *)p_data + i,<br />-                                    p_field_info[i].msb_pos,<br />-                                    p_field_info[i].len);<br />-            ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxic_comm_read_bits_ex");<br />-            PMD_DRV_LOG(ERR, "dev_id %d(%d)(%d)is ok!", dev_id, m_offset, n_offset);<br />+    addr = zxdh_np_reg_get_reg_addr(reg_no, m_offset, n_offset);<br />+<br />+    if (reg_module == DTB4K) {<br />+        rc = p_reg_info->p_read_fun(dev_id, addr, p_buff);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "p_reg_info->p_read_fun");<br />+    }<br />+<br />+    if (!zxdh_np_comm_is_big_endian()) {<br />+        for (i = 0; i < p_reg_info->width / 4; i++) {<br />+            PMD_DRV_LOG(DEBUG, "data = 0x%08x.", p_buff[i]);<br />+            p_buff[i] = ZXDH_COMM_CONVERT32(p_buff[i]);<br />         }<br />     }<br />+<br />+    for (i = 0; i < p_reg_info->field_num; i++) {<br />+        rc = zxdh_np_comm_read_bits_ex((uint8_t *)p_buff,<br />+                                p_reg_info->width * 8,<br />+                                (uint32_t *)p_data + i,<br />+                                p_field_info[i].msb_pos,<br />+                                p_field_info[i].len);<br />+        ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_np_comm_read_bits_ex");<br />+        PMD_DRV_LOG(DEBUG, "dev_id %u(%u)(%u)is ok!", dev_id, m_offset, n_offset);<br />+    }<br />+<br />     return rc;<br /> }<br />  <br />@@ -637,20 +1326,21 @@ zxdh_np_dtb_queue_vm_info_get(uint32_t dev_id,<br />         uint32_t queue_id,<br />         ZXDH_DTB_QUEUE_VM_INFO_T *p_vm_info)<br /> {<br />-    ZXDH_DTB4K_DTB_ENQ_CFG_EPID_V_FUNC_NUM_0_127_T vm_info = {0};<br />-    uint32_t rc;<br />+    uint32_t rc = 0;<br />+    uint32_t dtb_epid_v_func_reg = ZXDH_SYS_DTB_BASE_ADDR +<br />+        ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0x0010;<br />+    uint32_t epid_v_func = 0;<br />  <br />-    rc = zxdh_np_reg_read(dev_id, ZXDH_DTB_CFG_EPID_V_FUNC_NUM,<br />-                        0, queue_id, &vm_info);<br />-    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_reg_read");<br />+    rc = zxdh_np_dev_read_channel(dev_id, dtb_epid_v_func_reg + queue_id * 32, 1, &epid_v_func);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_read_channel");<br />  <br />-    p_vm_info->dbi_en = vm_info.dbi_en;<br />-    p_vm_info->queue_en = vm_info.queue_en;<br />-    p_vm_info->epid = vm_info.cfg_epid;<br />-    p_vm_info->vector = vm_info.cfg_vector;<br />-    p_vm_info->vfunc_num = vm_info.cfg_vfunc_num;<br />-    p_vm_info->func_num = vm_info.cfg_func_num;<br />-    p_vm_info->vfunc_active = vm_info.cfg_vfunc_active;<br />+    p_vm_info->dbi_en = (epid_v_func >> 31 & 0x1);<br />+    p_vm_info->queue_en = (epid_v_func >> 30 & 0x1);<br />+    p_vm_info->epid = (epid_v_func >> 24 & 0xF);<br />+    p_vm_info->vfunc_num = (epid_v_func >> 16 & 0xFF);<br />+    p_vm_info->vector = (epid_v_func >> 8 & 0x7);<br />+    p_vm_info->func_num = (epid_v_func >> 5 & 0x7);<br />+    p_vm_info->vfunc_active = (epid_v_func & 0x1);<br />  <br />     return rc;<br /> }<br />@@ -733,32 +1423,50 @@ zxdh_np_reg_write(uint32_t dev_id, uint32_t reg_no,<br />             uint32_t m_offset, uint32_t n_offset, void *p_data)<br /> {<br />     uint32_t p_buff[ZXDH_REG_DATA_MAX] = {0};<br />-    ZXDH_REG_T *p_reg_info = NULL;<br />-    ZXDH_FIELD_T *p_field_info = NULL;<br />+    ZXDH_REG_T *p_reg_info = &g_dpp_reg_info[reg_no];<br />+    const ZXDH_FIELD_T *p_field_info = p_reg_info->p_fields;<br />     uint32_t temp_data;<br />-    uint32_t rc;<br />+    uint32_t rc = ZXDH_OK;<br />     uint32_t i;<br />+    uint32_t addr = 0;<br />+    uint32_t reg_module = p_reg_info->module_no;<br />+<br />+    for (i = 0; i < p_reg_info->field_num; i++) {<br />+        if (p_field_info[i].len <= 32) {<br />+            temp_data = *((uint32_t *)p_data + i) & <br />+                zxdh_np_comm_get_bit_mask(p_field_info[i].len);<br />+            rc = zxdh_np_comm_write_bits_ex((uint8_t *)p_buff,<br />+                                p_reg_info->width * 8,<br />+                                temp_data,<br />+                                p_field_info[i].msb_pos,<br />+                                p_field_info[i].len);<br />+            ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_comm_write_bits_ex");<br />+        }<br />+    }<br />  <br />-    if (reg_no < 4) {<br />-        p_reg_info = &g_dpp_reg_info[reg_no];<br />-        p_field_info = p_reg_info->p_fields;<br />-<br />-        for (i = 0; i < p_reg_info->field_num; i++) {<br />-            if (p_field_info[i].len <= 32) {<br />-                temp_data = *((uint32_t *)p_data + i);<br />-                rc = zxdh_np_comm_write_bits_ex((uint8_t *)p_buff,<br />-                                    p_reg_info->width * 8,<br />-                                    temp_data,<br />-                                    p_field_info[i].msb_pos,<br />-                                    p_field_info[i].len);<br />-                ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_comm_write_bits_ex");<br />-                PMD_DRV_LOG(ERR, "dev_id %d(%d)(%d)is ok!",<br />-                        dev_id, m_offset, n_offset);<br />-            }<br />+    PMD_DRV_LOG(DEBUG, "zxdh_np_comm_write_bits_ex data = 0x%08x.", p_buff[0]);<br />+<br />+    if (!zxdh_np_comm_is_big_endian()) {<br />+        for (i = 0; i < p_reg_info->width / 4; i++) {<br />+            p_buff[i] = ZXDH_COMM_CONVERT32(p_buff[i]);<br />+<br />+            PMD_DRV_LOG(DEBUG, "ZXDH_COMM_CONVERT32 data = 0x%08x.",<br />+                p_buff[i]);<br />         }<br />     }<br />  <br />-    return 0;<br />+    addr = zxdh_np_reg_get_reg_addr(reg_no, m_offset, n_offset);<br />+<br />+    PMD_DRV_LOG(DEBUG, "reg_no = %u. m_offset = %u n_offset = %u",<br />+        reg_no, m_offset, n_offset);<br />+    PMD_DRV_LOG(DEBUG, "baseaddr = 0x%08x.", addr);<br />+<br />+    if (reg_module == DTB4K) {<br />+        rc = p_reg_info->p_write_fun(dev_id, addr, p_buff);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "p_reg_info->p_write_fun");<br />+    }<br />+<br />+    return rc;<br /> }<br />  <br /> static uint32_t<br />@@ -837,11 +1545,6 @@ zxdh_np_dtb_queue_unused_item_num_get(uint32_t dev_id,<br /> {<br />     uint32_t rc;<br />  <br />-    if (zxdh_np_dev_get_dev_type(dev_id) == ZXDH_DEV_TYPE_SIM) {<br />-        *p_item_num = 32;<br />-        return 0;<br />-    }<br />-<br />     rc = zxdh_np_reg_read(dev_id, ZXDH_DTB_INFO_QUEUE_BUF_SPACE,<br />         0, queue_id, p_item_num);<br />     ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "dpp_reg_read");<br />@@ -874,7 +1577,7 @@ zxdh_np_dtb_queue_release(uint32_t devid,<br />         char pname[32],<br />         uint32_t queueid)<br /> {<br />-    uint32_t rc;<br />+    uint32_t rc = ZXDH_OK;<br />  <br />     ZXDH_COMM_CHECK_DEV_POINT(devid, pname);<br />  <br />@@ -891,20 +1594,11 @@ static void<br /> zxdh_np_dtb_mgr_destroy(uint32_t dev_id)<br /> {<br />     if (p_dpp_dtb_mgr[dev_id] != NULL) {<br />-        free(p_dpp_dtb_mgr[dev_id]);<br />+        rte_free(p_dpp_dtb_mgr[dev_id]);<br />         p_dpp_dtb_mgr[dev_id] = NULL;<br />     }<br /> }<br />  <br />-static void<br />-zxdh_np_tlb_mgr_destroy(uint32_t dev_id)<br />-{<br />-    if (g_p_dpp_tlb_mgr[dev_id] != NULL) {<br />-        free(g_p_dpp_tlb_mgr[dev_id]);<br />-        g_p_dpp_tlb_mgr[dev_id] = NULL;<br />-    }<br />-}<br />-<br /> static void<br /> zxdh_np_sdt_mgr_destroy(uint32_t dev_id)<br /> {<br />@@ -914,7 +1608,7 @@ zxdh_np_sdt_mgr_destroy(uint32_t dev_id)<br />     p_sdt_tbl_temp = ZXDH_SDT_SOFT_TBL_GET(dev_id);<br />     p_sdt_mgr = ZXDH_SDT_MGR_PTR_GET();<br />  <br />-    free(p_sdt_tbl_temp);<br />+    rte_free(p_sdt_tbl_temp);<br />  <br />     ZXDH_SDT_SOFT_TBL_GET(dev_id) = NULL;<br />  <br />@@ -931,7 +1625,7 @@ zxdh_np_dev_del(uint32_t dev_id)<br />     p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />  <br />     if (p_dev_info != NULL) {<br />-        free(p_dev_info);<br />+        rte_free(p_dev_info);<br />         p_dev_mgr->p_dev_array[dev_id] = NULL;<br />         p_dev_mgr->device_num--;<br />     }<br />@@ -946,11 +1640,9 @@ zxdh_np_online_uninit(uint32_t dev_id,<br />  <br />     rc = zxdh_np_dtb_queue_release(dev_id, port_name, queue_id);<br />     if (rc != 0)<br />-        PMD_DRV_LOG(ERR, "%s:dtb release error," <br />-            "port name %s queue id %d", __func__, port_name, queue_id);<br />+        PMD_DRV_LOG(ERR, "dtb release port name %s queue id %u", port_name, queue_id);<br />  <br />     zxdh_np_dtb_mgr_destroy(dev_id);<br />-    zxdh_np_tlb_mgr_destroy(dev_id);<br />     zxdh_np_sdt_mgr_destroy(dev_id);<br />     zxdh_np_dev_del(dev_id);<br />  <br />@@ -964,8 +1656,8 @@ zxdh_np_sdt_tbl_type_get(uint32_t dev_id, uint32_t sdt_no)<br /> }<br />  <br />  <br />-static ZXDH_DTB_TABLE_T *<br />-zxdh_np_table_info_get(uint32_t table_type)<br />+static const ZXDH_DTB_TABLE_T *<br />+zxdh_np_dtb_table_info_get(uint32_t table_type)<br /> {<br />     return &g_dpp_dtb_table_info[table_type];<br /> }<br />@@ -977,20 +1669,20 @@ zxdh_np_dtb_write_table_cmd(uint32_t dev_id,<br />             void *p_cmd_buff)<br /> {<br />     uint32_t         field_cnt;<br />-    ZXDH_DTB_TABLE_T     *p_table_info = NULL;<br />-    ZXDH_DTB_FIELD_T     *p_field_info = NULL;<br />+    const ZXDH_DTB_TABLE_T     *p_table_info = NULL;<br />+    const ZXDH_DTB_FIELD_T     *p_field_info = NULL;<br />     uint32_t         temp_data;<br />     uint32_t         rc = 0;<br />  <br />     ZXDH_COMM_CHECK_POINT(p_cmd_data);<br />     ZXDH_COMM_CHECK_POINT(p_cmd_buff);<br />-    p_table_info = zxdh_np_table_info_get(table_type);<br />+    p_table_info = zxdh_np_dtb_table_info_get(table_type);<br />     p_field_info = p_table_info->p_fields;<br />     ZXDH_COMM_CHECK_DEV_POINT(dev_id, p_table_info);<br />  <br />     for (field_cnt = 0; field_cnt < p_table_info->field_num; field_cnt++) {<br />-        temp_data = *((uint32_t *)p_cmd_data + field_cnt) & ZXDH_COMM_GET_BIT_MASK(uint32_t,<br />-            p_field_info[field_cnt].len);<br />+        temp_data = *((uint32_t *)p_cmd_data + field_cnt) & <br />+                    zxdh_np_comm_get_bit_mask(p_field_info[field_cnt].len);<br />  <br />         rc = zxdh_np_comm_write_bits_ex((uint8_t *)p_cmd_buff,<br />                     ZXDH_DTB_TABLE_CMD_SIZE_BIT,<br />@@ -998,7 +1690,7 @@ zxdh_np_dtb_write_table_cmd(uint32_t dev_id,<br />                     p_field_info[field_cnt].lsb_pos,<br />                     p_field_info[field_cnt].len);<br />  <br />-        ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxic_comm_write_bits");<br />+        ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_np_comm_write_bits_ex");<br />     }<br />  <br />     return rc;<br />@@ -1062,17 +1754,14 @@ zxdh_np_dtb_se_smmu0_ind_write(uint32_t dev_id,<br />         uint32_t *p_data,<br />         ZXDH_DTB_ENTRY_T *p_entry)<br /> {<br />-    uint32_t temp_idx;<br />+    uint32_t temp_idx = 0;<br />     uint32_t dtb_ind_addr;<br />     uint32_t rc = 0;<br />  <br />     switch (wrt_mode) {<br />     case ZXDH_ERAM128_OPR_128b:<br />         if ((0xFFFFFFFF - (base_addr)) < (index)) {<br />-            PMD_DRV_LOG(ERR, "ICM %s:%d[Error:VALUE[val0=0x%x]" <br />-                "INVALID] [val1=0x%x] FUNCTION :%s", __FILE__, __LINE__,<br />-                base_addr, index, __func__);<br />-<br />+            PMD_DRV_LOG(ERR, "base addr:0x%x, index:0x%x invalid", base_addr, index);<br />             return ZXDH_PAR_CHK_INVALID_INDEX;<br />         }<br />         if (base_addr + index > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />@@ -1095,11 +1784,14 @@ zxdh_np_dtb_se_smmu0_ind_write(uint32_t dev_id,<br />         }<br />  <br />         temp_idx = index;<br />+        break;<br />+    default:<br />+        break;<br />     }<br />  <br />     dtb_ind_addr = ((base_addr << 7) & ZXDH_ERAM128_BADDR_MASK) + temp_idx;<br />  <br />-    PMD_DRV_LOG(INFO, "dtb eram item 1bit addr: 0x%x", dtb_ind_addr);<br />+    PMD_DRV_LOG(DEBUG, "dtb eram item 1bit addr: 0x%x", dtb_ind_addr);<br />  <br />     rc = zxdh_np_dtb_smmu0_write_entry_data(dev_id,<br />                           wrt_mode,<br />@@ -1131,6 +1823,126 @@ zxdh_np_eram_dtb_len_get(uint32_t mode)<br />     return dtb_len;<br /> }<br />  <br />+static void<br />+zxdh_np_sdt_tbl_data_get(uint32_t dev_id, uint32_t sdt_no, ZXDH_SDT_TBL_DATA_T *p_sdt_data)<br />+{<br />+    p_sdt_data->data_high32 = g_sdt_info[dev_id][sdt_no].data_high32;<br />+    p_sdt_data->data_low32  = g_sdt_info[dev_id][sdt_no].data_low32;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_sdt_tbl_data_parser(uint32_t sdt_hig32, uint32_t sdt_low32, void *p_sdt_info)<br />+{<br />+    uint32_t tbl_type = 0;<br />+    uint32_t clutch_en = 0;<br />+    uint32_t tmp = 0;<br />+<br />+    ZXDH_SDT_TBL_ERAM_T *p_sdt_eram = NULL;<br />+    ZXDH_SDT_TBL_HASH_T *p_sdt_hash = NULL;<br />+    ZXDH_SDT_TBL_ETCAM_T *p_sdt_etcam = NULL;<br />+    ZXDH_SDT_TBL_PORTTBL_T *p_sdt_porttbl = NULL;<br />+<br />+    ZXDH_COMM_UINT32_GET_BITS(tbl_type, sdt_hig32,<br />+        ZXDH_SDT_H_TBL_TYPE_BT_POS, ZXDH_SDT_H_TBL_TYPE_BT_LEN);<br />+    ZXDH_COMM_UINT32_GET_BITS(clutch_en, sdt_low32, 0, 1);<br />+<br />+    switch (tbl_type) {<br />+    case ZXDH_SDT_TBLT_ERAM:<br />+        p_sdt_eram = (ZXDH_SDT_TBL_ERAM_T *)p_sdt_info;<br />+        p_sdt_eram->table_type = tbl_type;<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_eram->eram_mode, sdt_hig32,<br />+            ZXDH_SDT_H_ERAM_MODE_BT_POS, ZXDH_SDT_H_ERAM_MODE_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_eram->eram_base_addr, sdt_hig32,<br />+            ZXDH_SDT_H_ERAM_BASE_ADDR_BT_POS, ZXDH_SDT_H_ERAM_BASE_ADDR_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_eram->eram_table_depth, sdt_low32,<br />+            ZXDH_SDT_L_ERAM_TABLE_DEPTH_BT_POS, ZXDH_SDT_L_ERAM_TABLE_DEPTH_BT_LEN);<br />+        p_sdt_eram->eram_clutch_en = clutch_en;<br />+        break;<br />+    case ZXDH_SDT_TBLT_HASH:<br />+        p_sdt_hash = (ZXDH_SDT_TBL_HASH_T *)p_sdt_info;<br />+        p_sdt_hash->table_type = tbl_type;<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_hash->hash_id, sdt_hig32,<br />+            ZXDH_SDT_H_HASH_ID_BT_POS, ZXDH_SDT_H_HASH_ID_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_hash->hash_table_width, sdt_hig32,<br />+            ZXDH_SDT_H_HASH_TABLE_WIDTH_BT_POS, ZXDH_SDT_H_HASH_TABLE_WIDTH_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_hash->key_size, sdt_hig32,<br />+            ZXDH_SDT_H_HASH_KEY_SIZE_BT_POS, ZXDH_SDT_H_HASH_KEY_SIZE_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_hash->hash_table_id, sdt_hig32,<br />+            ZXDH_SDT_H_HASH_TABLE_ID_BT_POS, ZXDH_SDT_H_HASH_TABLE_ID_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_hash->learn_en, sdt_hig32,<br />+            ZXDH_SDT_H_LEARN_EN_BT_POS, ZXDH_SDT_H_LEARN_EN_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_hash->keep_alive, sdt_hig32,<br />+            ZXDH_SDT_H_KEEP_ALIVE_BT_POS, ZXDH_SDT_H_KEEP_ALIVE_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(tmp, sdt_hig32,<br />+            ZXDH_SDT_H_KEEP_ALIVE_BADDR_BT_POS, ZXDH_SDT_H_KEEP_ALIVE_BADDR_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_hash->keep_alive_baddr, sdt_low32,<br />+            ZXDH_SDT_L_KEEP_ALIVE_BADDR_BT_POS, ZXDH_SDT_L_KEEP_ALIVE_BADDR_BT_LEN);<br />+        p_sdt_hash->keep_alive_baddr += (tmp << ZXDH_SDT_L_KEEP_ALIVE_BADDR_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_hash->rsp_mode, sdt_low32,<br />+            ZXDH_SDT_L_RSP_MODE_BT_POS, ZXDH_SDT_L_RSP_MODE_BT_LEN);<br />+        p_sdt_hash->hash_clutch_en = clutch_en;<br />+        break;<br />+<br />+    case ZXDH_SDT_TBLT_ETCAM:<br />+        p_sdt_etcam = (ZXDH_SDT_TBL_ETCAM_T *)p_sdt_info;<br />+        p_sdt_etcam->table_type = tbl_type;<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_etcam->etcam_id, sdt_hig32,<br />+            ZXDH_SDT_H_ETCAM_ID_BT_POS, ZXDH_SDT_H_ETCAM_ID_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_etcam->etcam_key_mode, sdt_hig32,<br />+            ZXDH_SDT_H_ETCAM_KEY_MODE_BT_POS, ZXDH_SDT_H_ETCAM_KEY_MODE_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_etcam->etcam_table_id, sdt_hig32,<br />+            ZXDH_SDT_H_ETCAM_TABLE_ID_BT_POS, ZXDH_SDT_H_ETCAM_TABLE_ID_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_etcam->no_as_rsp_mode, sdt_hig32,<br />+            ZXDH_SDT_H_ETCAM_NOAS_RSP_MODE_BT_POS,<br />+            ZXDH_SDT_H_ETCAM_NOAS_RSP_MODE_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_etcam->as_en, sdt_hig32,<br />+            ZXDH_SDT_H_ETCAM_AS_EN_BT_POS, ZXDH_SDT_H_ETCAM_AS_EN_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(tmp, sdt_hig32, ZXDH_SDT_H_ETCAM_AS_ERAM_BADDR_BT_POS,<br />+            ZXDH_SDT_H_ETCAM_AS_ERAM_BADDR_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_etcam->as_eram_baddr, sdt_low32,<br />+            ZXDH_SDT_L_ETCAM_AS_ERAM_BADDR_BT_POS,<br />+            ZXDH_SDT_L_ETCAM_AS_ERAM_BADDR_BT_LEN);<br />+        p_sdt_etcam->as_eram_baddr += (tmp << ZXDH_SDT_L_ETCAM_AS_ERAM_BADDR_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_etcam->as_rsp_mode, sdt_low32,<br />+            ZXDH_SDT_L_ETCAM_AS_RSP_MODE_BT_POS, ZXDH_SDT_L_ETCAM_AS_RSP_MODE_BT_LEN);<br />+        ZXDH_COMM_UINT32_GET_BITS(p_sdt_etcam->etcam_table_depth, sdt_low32,<br />+            ZXDH_SDT_L_ETCAM_TABLE_DEPTH_BT_POS, ZXDH_SDT_L_ETCAM_TABLE_DEPTH_BT_LEN);<br />+        p_sdt_etcam->etcam_clutch_en = clutch_en;<br />+        break;<br />+<br />+    case ZXDH_SDT_TBLT_PORTTBL:<br />+        p_sdt_porttbl = (ZXDH_SDT_TBL_PORTTBL_T *)p_sdt_info;<br />+        p_sdt_porttbl->table_type = tbl_type;<br />+        p_sdt_porttbl->porttbl_clutch_en = clutch_en;<br />+        break;<br />+    default:<br />+        PMD_DRV_LOG(ERR, "SDT table_type[ %u ] is invalid!", tbl_type);<br />+        return 1;<br />+    }<br />+<br />+    return 0;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_soft_sdt_tbl_get(uint32_t dev_id, uint32_t sdt_no, void *p_sdt_info)<br />+{<br />+    ZXDH_SDT_TBL_DATA_T sdt_tbl = {0};<br />+    uint32_t rc;<br />+<br />+    if (sdt_no > ZXDH_DEV_SDT_ID_MAX - 1) {<br />+        PMD_DRV_LOG(ERR, "SDT NO [ %u ] is invalid!", sdt_no);<br />+        return ZXDH_PAR_CHK_INVALID_PARA;<br />+    }<br />+<br />+    zxdh_np_sdt_tbl_data_get(dev_id, sdt_no, &sdt_tbl);<br />+<br />+    rc = zxdh_np_sdt_tbl_data_parser(sdt_tbl.data_high32, sdt_tbl.data_low32, p_sdt_info);<br />+    if (rc != 0)<br />+        PMD_DRV_LOG(ERR, "dpp sdt [%u] tbl_data_parser error.", sdt_no);<br />+<br />+    return rc;<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_dtb_eram_one_entry(uint32_t dev_id,<br />         uint32_t sdt_no,<br />@@ -1140,17 +1952,21 @@ zxdh_np_dtb_eram_one_entry(uint32_t dev_id,<br />         ZXDH_DTB_ENTRY_T *p_dtb_one_entry)<br /> {<br />     uint32_t buff[ZXDH_SMMU0_READ_REG_MAX_NUM]      = {0};<br />-    ZXDH_SDTTBL_ERAM_T sdt_eram           = {0};<br />+    ZXDH_SDT_TBL_ERAM_T sdt_eram           = {0};<br />     ZXDH_DTB_ERAM_ENTRY_INFO_T *peramdata = NULL;<br />     uint32_t base_addr;<br />     uint32_t index;<br />     uint32_t opr_mode;<br />-    uint32_t rc;<br />+    uint32_t rc = ZXDH_OK;<br />  <br />     ZXDH_COMM_CHECK_POINT(pdata);<br />     ZXDH_COMM_CHECK_POINT(p_dtb_one_entry);<br />     ZXDH_COMM_CHECK_POINT(p_dtb_len);<br />  <br />+    PMD_DRV_LOG(DEBUG, "sdt_no:%u", sdt_no);<br />+    rc = zxdh_np_soft_sdt_tbl_get(dev_id, sdt_no, &sdt_eram);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "dpp_soft_sdt_tbl_get");<br />+<br />     peramdata = (ZXDH_DTB_ERAM_ENTRY_INFO_T *)pdata;<br />     index = peramdata->index;<br />     base_addr = sdt_eram.eram_base_addr;<br />@@ -1166,8 +1982,19 @@ zxdh_np_dtb_eram_one_entry(uint32_t dev_id,<br />     case ZXDH_ERAM128_TBL_1b:<br />         opr_mode = ZXDH_ERAM128_OPR_1b;<br />         break;<br />+    default:<br />+        break;<br />     }<br />  <br />+    PMD_DRV_LOG(DEBUG, "std no:0x%x, index:0x%x, base addr:0x%x", sdt_no, index, base_addr);<br />+    if (opr_mode == ZXDH_ERAM128_OPR_128b)<br />+        PMD_DRV_LOG(DEBUG, "value[0x%08x 0x%08x 0x%08x 0x%08x]",<br />+        peramdata->p_data[0], peramdata->p_data[1],<br />+        peramdata->p_data[2], peramdata->p_data[3]);<br />+    else if (opr_mode == ZXDH_ERAM128_OPR_64b)<br />+        PMD_DRV_LOG(DEBUG, "value[0x%08x 0x%08x]",<br />+        peramdata->p_data[0], peramdata->p_data[1]);<br />+<br />     if (del_en) {<br />         memset((uint8_t *)buff, 0, sizeof(buff));<br />         rc = zxdh_np_dtb_se_smmu0_ind_write(dev_id,<br />@@ -1274,6 +2101,9 @@ zxdh_np_dtb_item_ack_rd(uint32_t dev_id,<br />  <br />     val = *((volatile uint32_t *)(addr));<br />  <br />+    if (!zxdh_np_comm_is_big_endian())<br />+        val = ZXDH_COMM_CONVERT32(val);<br />+<br />     *p_data = val;<br />  <br />     return 0;<br />@@ -1294,7 +2124,10 @@ zxdh_np_dtb_item_ack_wr(uint32_t dev_id,<br />     else<br />         addr = ZXDH_DTB_TAB_DOWN_VIR_ADDR_GET(dev_id, queue_id, index) + pos * 4;<br />  <br />-    *((volatile uint32_t *)(addr)) = data;<br />+    if (!zxdh_np_comm_is_big_endian())<br />+        data = ZXDH_COMM_CONVERT32(data);<br />+<br />+    *((volatile uint32_t *)addr) = data;<br />  <br />     return 0;<br /> }<br />@@ -1304,16 +2137,26 @@ zxdh_np_dtb_queue_item_info_set(uint32_t dev_id,<br />         uint32_t queue_id,<br />         ZXDH_DTB_QUEUE_ITEM_INFO_T *p_item_info)<br /> {<br />-    ZXDH_DTB_QUEUE_LEN_T dtb_len = {0};<br />     uint32_t rc;<br />  <br />-    dtb_len.cfg_dtb_cmd_type = p_item_info->cmd_type;<br />-    dtb_len.cfg_dtb_cmd_int_en = p_item_info->int_en;<br />-    dtb_len.cfg_queue_dtb_len = p_item_info->data_len;<br />+    uint32_t dtb_addr_h_reg = ZXDH_SYS_DTB_BASE_ADDR +<br />+        ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0x0000;<br />+    uint32_t dtb_addr_l_reg = ZXDH_SYS_DTB_BASE_ADDR +<br />+        ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0x0004;<br />+    uint32_t dtb_len_reg = ZXDH_SYS_DTB_BASE_ADDR +<br />+        ZXDH_MODULE_DTB_ENQ_BASE_ADDR + 0x0008;<br />+    uint32_t dtb_len = 0;<br />+<br />+    rc = zxdh_np_dev_write_channel(dev_id, dtb_addr_h_reg + queue_id * 32,<br />+        1, &p_item_info->data_hddr);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_write_channel Fail");<br />+    rc = zxdh_np_dev_write_channel(dev_id, dtb_addr_l_reg + queue_id * 32,<br />+        1, &p_item_info->data_laddr);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_write_channel Fail");<br />+    dtb_len = ZXDH_DTB_LEN(p_item_info->cmd_type, p_item_info->int_en, p_item_info->data_len);<br />+    rc = zxdh_np_dev_write_channel(dev_id, dtb_len_reg + queue_id * 32, 1, &dtb_len);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_write_channel Fail");<br />  <br />-    rc = zxdh_np_reg_write(dev_id, ZXDH_DTB_CFG_QUEUE_DTB_LEN,<br />-                        0, queue_id, (void *)&dtb_len);<br />-    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "dpp_reg_write");<br />     return rc;<br /> }<br />  <br />@@ -1335,7 +2178,7 @@ zxdh_np_dtb_tab_down_info_set(uint32_t dev_id,<br />     uint32_t rc;<br />  <br />     if (ZXDH_DTB_QUEUE_INIT_FLAG_GET(dev_id, queue_id) == 0) {<br />-        PMD_DRV_LOG(ERR, "dtb queue %d is not init", queue_id);<br />+        PMD_DRV_LOG(ERR, "dtb queue %u is not init.", queue_id);<br />         return ZXDH_RC_DTB_QUEUE_IS_NOT_INIT;<br />     }<br />  <br />@@ -1344,7 +2187,7 @@ zxdh_np_dtb_tab_down_info_set(uint32_t dev_id,<br />  <br />     rc = zxdh_np_dtb_queue_enable_get(dev_id, queue_id, &queue_en);<br />     if (!queue_en) {<br />-        PMD_DRV_LOG(ERR, "the queue %d is not enable!,rc=%d", queue_id, rc);<br />+        PMD_DRV_LOG(ERR, "the queue %u is not enable!,rc=%u", queue_id, rc);<br />         return ZXDH_RC_DTB_QUEUE_NOT_ENABLE;<br />     }<br />  <br />@@ -1383,6 +2226,8 @@ zxdh_np_dtb_tab_down_info_set(uint32_t dev_id,<br />     item_info.data_hddr = ((phy_addr >> 4) >> 32) & 0xffffffff;<br />     item_info.data_laddr = (phy_addr >> 4) & 0xffffffff;<br />  <br />+    zxdh_dtb_info_print(dev_id, queue_id, item_index, &item_info);<br />+<br />     rc = zxdh_np_dtb_queue_item_info_set(dev_id, queue_id, &item_info);<br />     *p_item_index = item_index;<br />  <br />@@ -1421,7 +2266,6 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />     uint8_t entry_cmd[ZXDH_DTB_TABLE_CMD_SIZE_BIT] = {0};<br />     uint8_t entry_data[ZXDH_ETCAM_WIDTH_MAX] = {0};<br />     uint8_t *p_data_buff;<br />-    uint8_t *p_data_buff_ex;<br />     uint32_t element_id = 0xff;<br />     uint32_t one_dtb_len = 0;<br />     uint32_t dtb_len = 0;<br />@@ -1435,9 +2279,6 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />     p_data_buff = rte_zmalloc(NULL, ZXDH_DTB_TABLE_DATA_BUFF_SIZE, 0);<br />     ZXDH_COMM_CHECK_POINT(p_data_buff);<br />  <br />-    p_data_buff_ex = rte_zmalloc(NULL, ZXDH_DTB_TABLE_DATA_BUFF_SIZE, 0);<br />-    ZXDH_COMM_CHECK_POINT_MEMORY_FREE(p_data_buff_ex, p_data_buff);<br />-<br />     dtb_one_entry.cmd = entry_cmd;<br />     dtb_one_entry.data = entry_data;<br />  <br />@@ -1446,6 +2287,7 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />     for (entry_index = 0; entry_index < entrynum; entry_index++) {<br />         pentry = down_entries + entry_index;<br />         sdt_no = pentry->sdt_no;<br />+        PMD_DRV_LOG(DEBUG, "sdt_no:%u", sdt_no);<br />         tbl_type = zxdh_np_sdt_tbl_type_get(dev_id, sdt_no);<br />         switch (tbl_type) {<br />         case ZXDH_SDT_TBLT_ERAM:<br />@@ -1453,9 +2295,8 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />                 pentry->p_entry_data, &one_dtb_len, &dtb_one_entry);<br />             break;<br />         default:<br />-            PMD_DRV_LOG(ERR, "SDT table_type[ %d ] is invalid!", tbl_type);<br />+            PMD_DRV_LOG(ERR, "SDT table_type[ %u ] is invalid!", tbl_type);<br />             rte_free(p_data_buff);<br />-            rte_free(p_data_buff_ex);<br />             return 1;<br />         }<br />  <br />@@ -1463,9 +2304,7 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />         dtb_len += one_dtb_len;<br />         if (dtb_len > max_size) {<br />             rte_free(p_data_buff);<br />-            rte_free(p_data_buff_ex);<br />-            PMD_DRV_LOG(ERR, "%s error dtb_len>%u!", __func__,<br />-                max_size);<br />+            PMD_DRV_LOG(ERR, "error dtb_len>%u!", max_size);<br />             return ZXDH_RC_DTB_DOWN_LEN_INVALID;<br />         }<br />         rc = zxdh_np_dtb_data_write(p_data_buff, addr_offset, &dtb_one_entry);<br />@@ -1475,7 +2314,6 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />  <br />     if (dtb_len == 0) {<br />         rte_free(p_data_buff);<br />-        rte_free(p_data_buff_ex);<br />         return ZXDH_RC_DTB_DOWN_LEN_INVALID;<br />     }<br />  <br />@@ -1485,18 +2323,10 @@ zxdh_np_dtb_table_entry_write(uint32_t dev_id,<br />                     p_data_buff,<br />                     &element_id);<br />     rte_free(p_data_buff);<br />-    rte_free(p_data_buff_ex);<br />  <br />     return rc;<br /> }<br />  <br />-static void<br />-zxdh_np_sdt_tbl_data_get(uint32_t dev_id, uint32_t sdt_no, ZXDH_SDT_TBL_DATA_T *p_sdt_data)<br />-{<br />-    p_sdt_data->data_high32 = g_sdt_info[dev_id][sdt_no].data_high32;<br />-    p_sdt_data->data_low32  = g_sdt_info[dev_id][sdt_no].data_low32;<br />-}<br />-<br /> int<br /> zxdh_np_dtb_table_entry_delete(uint32_t dev_id,<br />              uint32_t queue_id,<br />@@ -1509,7 +2339,6 @@ zxdh_np_dtb_table_entry_delete(uint32_t dev_id,<br />     uint8_t entry_cmd[ZXDH_DTB_TABLE_CMD_SIZE_BIT / 8] = {0};<br />     uint8_t entry_data[ZXDH_ETCAM_WIDTH_MAX / 8] = {0};<br />     uint8_t *p_data_buff = NULL;<br />-    uint8_t *p_data_buff_ex = NULL;<br />     uint32_t tbl_type = 0;<br />     uint32_t element_id = 0xff;<br />     uint32_t one_dtb_len = 0;<br />@@ -1525,9 +2354,6 @@ zxdh_np_dtb_table_entry_delete(uint32_t dev_id,<br />     p_data_buff = rte_calloc(NULL, 1, ZXDH_DTB_TABLE_DATA_BUFF_SIZE, 0);<br />     ZXDH_COMM_CHECK_POINT(p_data_buff);<br />  <br />-    p_data_buff_ex = rte_calloc(NULL, 1, ZXDH_DTB_TABLE_DATA_BUFF_SIZE, 0);<br />-    ZXDH_COMM_CHECK_POINT_MEMORY_FREE(p_data_buff_ex, p_data_buff);<br />-<br />     dtb_one_entry.cmd = entry_cmd;<br />     dtb_one_entry.data = entry_data;<br />  <br />@@ -1537,16 +2363,17 @@ zxdh_np_dtb_table_entry_delete(uint32_t dev_id,<br />         pentry = delete_entries + entry_index;<br />  <br />         sdt_no = pentry->sdt_no;<br />+        PMD_DRV_LOG(DEBUG, "sdt_no:%u", sdt_no);<br />         zxdh_np_sdt_tbl_data_get(dev_id, sdt_no, &sdt_tbl);<br />+        tbl_type = zxdh_np_sdt_tbl_type_get(dev_id, sdt_no);<br />         switch (tbl_type) {<br />         case ZXDH_SDT_TBLT_ERAM:<br />             rc = zxdh_np_dtb_eram_one_entry(dev_id, sdt_no, ZXDH_DTB_ITEM_DELETE,<br />                 pentry->p_entry_data, &one_dtb_len, &dtb_one_entry);<br />             break;<br />         default:<br />-            PMD_DRV_LOG(ERR, "SDT table_type[ %d ] is invalid!", tbl_type);<br />+            PMD_DRV_LOG(ERR, "SDT table_type[ %u ] is invalid!", tbl_type);<br />             rte_free(p_data_buff);<br />-            rte_free(p_data_buff_ex);<br />             return 1;<br />         }<br />  <br />@@ -1554,9 +2381,7 @@ zxdh_np_dtb_table_entry_delete(uint32_t dev_id,<br />         dtb_len += one_dtb_len;<br />         if (dtb_len > max_size) {<br />             rte_free(p_data_buff);<br />-            rte_free(p_data_buff_ex);<br />-            PMD_DRV_LOG(ERR, "%s error dtb_len>%u!", __func__,<br />-                max_size);<br />+            PMD_DRV_LOG(ERR, "error dtb_len>%u!", max_size);<br />             return ZXDH_RC_DTB_DOWN_LEN_INVALID;<br />         }<br />  <br />@@ -1567,158 +2392,43 @@ zxdh_np_dtb_table_entry_delete(uint32_t dev_id,<br />  <br />     if (dtb_len == 0) {<br />         rte_free(p_data_buff);<br />-        rte_free(p_data_buff_ex);<br />         return ZXDH_RC_DTB_DOWN_LEN_INVALID;<br />     }<br />  <br />     rc = zxdh_np_dtb_write_down_table_data(dev_id,<br />                 queue_id,<br />                 dtb_len * 16,<br />-                p_data_buff_ex,<br />+                p_data_buff,<br />                 &element_id);<br />     rte_free(p_data_buff);<br />-    ZXDH_COMM_CHECK_RC_MEMORY_FREE_NO_ASSERT(rc,<br />-        "dpp_dtb_write_down_table_data", p_data_buff_ex);<br />-<br />-    rte_free(p_data_buff_ex);<br />-    return 0;<br />-}<br />-<br />-static uint32_t<br />-zxdh_np_sdt_tbl_data_parser(uint32_t sdt_hig32, uint32_t sdt_low32, void *p_sdt_info)<br />-{<br />-    uint32_t tbl_type = 0;<br />-    uint32_t clutch_en = 0;<br />-<br />-    ZXDH_SDTTBL_ERAM_T *p_sdt_eram = NULL;<br />-    ZXDH_SDTTBL_PORTTBL_T *p_sdt_porttbl = NULL;<br />-<br />-    ZXDH_COMM_UINT32_GET_BITS(tbl_type, sdt_hig32,<br />-        ZXDH_SDT_H_TBL_TYPE_BT_POS, ZXDH_SDT_H_TBL_TYPE_BT_LEN);<br />-    ZXDH_COMM_UINT32_GET_BITS(clutch_en, sdt_low32, 0, 1);<br />-<br />-    switch (tbl_type) {<br />-    case ZXDH_SDT_TBLT_ERAM:<br />-        p_sdt_eram = (ZXDH_SDTTBL_ERAM_T *)p_sdt_info;<br />-        p_sdt_eram->table_type = tbl_type;<br />-        p_sdt_eram->eram_clutch_en = clutch_en;<br />-        break;<br />-    case ZXDH_SDT_TBLT_PORTTBL:<br />-        p_sdt_porttbl = (ZXDH_SDTTBL_PORTTBL_T *)p_sdt_info;<br />-        p_sdt_porttbl->table_type = tbl_type;<br />-        p_sdt_porttbl->porttbl_clutch_en = clutch_en;<br />-        break;<br />-    default:<br />-        PMD_DRV_LOG(ERR, "SDT table_type[ %d ] is invalid!", tbl_type);<br />-        return 1;<br />-    }<br />-<br />-    return 0;<br />-}<br />-<br />-static uint32_t<br />-zxdh_np_soft_sdt_tbl_get(uint32_t dev_id, uint32_t sdt_no, void *p_sdt_info)<br />-{<br />-    ZXDH_SDT_TBL_DATA_T sdt_tbl = {0};<br />-    uint32_t rc;<br />-<br />-    zxdh_np_sdt_tbl_data_get(dev_id, sdt_no, &sdt_tbl);<br />-<br />-    rc = zxdh_np_sdt_tbl_data_parser(sdt_tbl.data_high32, sdt_tbl.data_low32, p_sdt_info);<br />-    if (rc != 0)<br />-        PMD_DRV_LOG(ERR, "dpp sdt [%d] tbl_data_parser error", sdt_no);<br />-<br />-    return rc;<br />-}<br />-<br />-static void<br />-zxdh_np_eram_index_cal(uint32_t eram_mode, uint32_t index,<br />-        uint32_t *p_row_index, uint32_t *p_col_index)<br />-{<br />-    uint32_t row_index = 0;<br />-    uint32_t col_index = 0;<br />-<br />-    switch (eram_mode) {<br />-    case ZXDH_ERAM128_TBL_128b:<br />-        row_index = index;<br />-        break;<br />-    case ZXDH_ERAM128_TBL_64b:<br />-        row_index = (index >> 1);<br />-        col_index = index & 0x1;<br />-        break;<br />-    case ZXDH_ERAM128_TBL_1b:<br />-        row_index = (index >> 7);<br />-        col_index = index & 0x7F;<br />-        break;<br />-    }<br />-    *p_row_index = row_index;<br />-    *p_col_index = col_index;<br />-}<br />  <br />-static uint32_t<br />-zxdh_np_dtb_eram_data_get(uint32_t dev_id, uint32_t queue_id, uint32_t sdt_no,<br />-        ZXDH_DTB_ERAM_ENTRY_INFO_T *p_dump_eram_entry)<br />-{<br />-    uint32_t index = p_dump_eram_entry->index;<br />-    uint32_t *p_data = p_dump_eram_entry->p_data;<br />-    ZXDH_SDTTBL_ERAM_T sdt_eram_info = {0};<br />-    uint32_t temp_data[4] = {0};<br />-    uint32_t row_index = 0;<br />-    uint32_t col_index = 0;<br />-    uint32_t rd_mode;<br />-    uint32_t rc;<br />-<br />-    rc = zxdh_np_soft_sdt_tbl_get(queue_id, sdt_no, &sdt_eram_info);<br />-    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "dpp_soft_sdt_tbl_get");<br />-    rd_mode = sdt_eram_info.eram_mode;<br />-<br />-    zxdh_np_eram_index_cal(rd_mode, index, &row_index, &col_index);<br />-<br />-    switch (rd_mode) {<br />-    case ZXDH_ERAM128_TBL_128b:<br />-        memcpy(p_data, temp_data, (128 / 8));<br />-        break;<br />-    case ZXDH_ERAM128_TBL_64b:<br />-        memcpy(p_data, temp_data + ((1 - col_index) << 1), (64 / 8));<br />-        break;<br />-    case ZXDH_ERAM128_TBL_1b:<br />-        ZXDH_COMM_UINT32_GET_BITS(p_data[0], *(temp_data +<br />-            (3 - col_index / 32)), (col_index % 32), 1);<br />-        break;<br />-    }<br />     return rc;<br /> }<br />-<br />-int<br />-zxdh_np_dtb_table_entry_get(uint32_t dev_id,<br />-         uint32_t queue_id,<br />-         ZXDH_DTB_USER_ENTRY_T *get_entry,<br />-         uint32_t srh_mode)<br />-{<br />-    ZXDH_SDT_TBL_DATA_T sdt_tbl = {0};<br />-    uint32_t tbl_type = 0;<br />-    uint32_t rc = 0;<br />-    uint32_t sdt_no;<br />-<br />-    sdt_no = get_entry->sdt_no;<br />-    zxdh_np_sdt_tbl_data_get(srh_mode, sdt_no, &sdt_tbl);<br />-<br />-    ZXDH_COMM_UINT32_GET_BITS(tbl_type, sdt_tbl.data_high32,<br />-            ZXDH_SDT_H_TBL_TYPE_BT_POS, ZXDH_SDT_H_TBL_TYPE_BT_LEN);<br />-    switch (tbl_type) {<br />-    case ZXDH_SDT_TBLT_ERAM:<br />-        rc = zxdh_np_dtb_eram_data_get(dev_id,<br />-                queue_id,<br />-                sdt_no,<br />-                (ZXDH_DTB_ERAM_ENTRY_INFO_T *)get_entry->p_entry_data);<br />-        ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "dpp_dtb_eram_data_get");<br />+<br />+static void<br />+zxdh_np_eram_index_cal(uint32_t eram_mode, uint32_t index,<br />+        uint32_t *p_row_index, uint32_t *p_col_index)<br />+{<br />+    uint32_t row_index = 0;<br />+    uint32_t col_index = 0;<br />+<br />+    switch (eram_mode) {<br />+    case ZXDH_ERAM128_TBL_128b:<br />+        row_index = index;<br />+        break;<br />+    case ZXDH_ERAM128_TBL_64b:<br />+        row_index = (index >> 1);<br />+        col_index = index & 0x1;<br />+        break;<br />+    case ZXDH_ERAM128_TBL_1b:<br />+        row_index = (index >> 7);<br />+        col_index = index & 0x7F;<br />         break;<br />     default:<br />-        PMD_DRV_LOG(ERR, "SDT table_type[ %d ] is invalid!", tbl_type);<br />-        return 1;<br />+        break;<br />     }<br />-<br />-    return 0;<br />+    *p_row_index = row_index;<br />+    *p_col_index = col_index;<br /> }<br />  <br /> static void<br />@@ -1727,10 +2437,10 @@ zxdh_np_stat_cfg_soft_get(uint32_t dev_id,<br /> {<br />     ZXDH_COMM_CHECK_DEV_POINT(dev_id, p_stat_cfg);<br />  <br />-    p_stat_cfg->ddr_base_addr = g_ppu_stat_cfg.ddr_base_addr;<br />-    p_stat_cfg->eram_baddr = g_ppu_stat_cfg.eram_baddr;<br />-    p_stat_cfg->eram_depth = g_ppu_stat_cfg.eram_depth;<br />-    p_stat_cfg->ppu_addr_offset = g_ppu_stat_cfg.ppu_addr_offset;<br />+    p_stat_cfg->ddr_base_addr = g_ppu_stat_cfg[dev_id].ddr_base_addr;<br />+    p_stat_cfg->eram_baddr = g_ppu_stat_cfg[dev_id].eram_baddr;<br />+    p_stat_cfg->eram_depth = g_ppu_stat_cfg[dev_id].eram_depth;<br />+    p_stat_cfg->ppu_addr_offset = g_ppu_stat_cfg[dev_id].ppu_addr_offset;<br /> }<br />  <br /> static uint32_t<br />@@ -1748,12 +2458,12 @@ zxdh_np_dtb_tab_up_info_set(uint32_t dev_id,<br />  <br />     zxdh_np_dtb_queue_enable_get(dev_id, queue_id, &queue_en);<br />     if (!queue_en) {<br />-        PMD_DRV_LOG(ERR, "the queue %d is not enable!", queue_id);<br />+        PMD_DRV_LOG(ERR, "the queue %u is not enable!", queue_id);<br />         return ZXDH_RC_DTB_QUEUE_NOT_ENABLE;<br />     }<br />  <br />     if (ZXDH_DTB_QUEUE_INIT_FLAG_GET(dev_id, queue_id) == 0) {<br />-        PMD_DRV_LOG(ERR, "dtb queue %d is not init", queue_id);<br />+        PMD_DRV_LOG(ERR, "dtb queue %u is not init", queue_id);<br />         return ZXDH_RC_DTB_QUEUE_IS_NOT_INIT;<br />     }<br />  <br />@@ -1769,6 +2479,11 @@ zxdh_np_dtb_tab_up_info_set(uint32_t dev_id,<br />     item_info.cmd_type = ZXDH_DTB_DIR_UP_TYPE;<br />     item_info.int_en = int_flag;<br />     item_info.data_len = desc_len / 4;<br />+    item_info.data_hddr =<br />+    ((ZXDH_DTB_TAB_UP_PHY_ADDR_GET(dev_id, queue_id, item_index) >> 4) >> 32) & 0xffffffff;<br />+    item_info.data_laddr =<br />+        (ZXDH_DTB_TAB_UP_PHY_ADDR_GET(dev_id, queue_id, item_index) >> 4) & 0xffffffff;<br />+    zxdh_dtb_info_print(dev_id, queue_id, item_index,  &item_info);<br />  <br />     if (zxdh_np_dev_get_dev_type(dev_id) == ZXDH_DEV_TYPE_SIM)<br />         return 0;<br />@@ -1778,6 +2493,33 @@ zxdh_np_dtb_tab_up_info_set(uint32_t dev_id,<br />     return rc;<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_dtb_tab_up_item_addr_get(uint32_t dev_id,<br />+                    uint32_t queue_id,<br />+                    uint32_t item_index,<br />+                    uint32_t *p_phy_haddr,<br />+                    uint32_t *p_phy_laddr)<br />+{<br />+    uint32_t rc = 0;<br />+    uint64_t addr;<br />+<br />+    if (ZXDH_DTB_QUEUE_INIT_FLAG_GET(dev_id, queue_id) == 0) {<br />+        PMD_DRV_LOG(ERR, "dtb queue %d is not init.", queue_id);<br />+        return ZXDH_RC_DTB_QUEUE_IS_NOT_INIT;<br />+    }<br />+<br />+    if (ZXDH_DTB_TAB_UP_USER_PHY_ADDR_FLAG_GET(dev_id, queue_id, item_index) ==<br />+        ZXDH_DTB_TAB_UP_USER_ADDR_TYPE)<br />+        addr = ZXDH_DTB_TAB_UP_USER_PHY_ADDR_GET(dev_id, queue_id, item_index);<br />+    else<br />+        addr = ZXDH_DTB_ITEM_ACK_SIZE;<br />+<br />+    *p_phy_haddr = (addr >> 32) & 0xffffffff;<br />+    *p_phy_laddr = addr & 0xffffffff;<br />+<br />+    return rc;<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_dtb_write_dump_desc_info(uint32_t dev_id,<br />         uint32_t queue_id,<br />@@ -1799,8 +2541,8 @@ zxdh_np_dtb_write_dump_desc_info(uint32_t dev_id,<br />                 desc_len,<br />                 p_dump_info);<br />     if (rc != 0) {<br />-        PMD_DRV_LOG(ERR, "the queue %d element id %d dump" <br />-            " info set failed!", queue_id, queue_element_id);<br />+        PMD_DRV_LOG(ERR, "queue %u element %u dump info set failed!",<br />+            queue_id, queue_element_id);<br />         zxdh_np_dtb_item_ack_wr(dev_id, queue_id, ZXDH_DTB_DIR_UP_TYPE,<br />             queue_element_id, 0, ZXDH_DTB_TAB_ACK_UNUSED_MASK);<br />     }<br />@@ -1819,7 +2561,7 @@ zxdh_np_dtb_tab_up_free_item_get(uint32_t dev_id,<br />     uint32_t i;<br />  <br />     if (ZXDH_DTB_QUEUE_INIT_FLAG_GET(dev_id, queue_id) == 0) {<br />-        PMD_DRV_LOG(ERR, "dtb queue %d is not init", queue_id);<br />+        PMD_DRV_LOG(ERR, "dtb queue %u is not init", queue_id);<br />         return ZXDH_RC_DTB_QUEUE_IS_NOT_INIT;<br />     }<br />  <br />@@ -1849,37 +2591,9 @@ zxdh_np_dtb_tab_up_free_item_get(uint32_t dev_id,<br />  <br />     *p_item_index = item_index;<br />  <br />-<br />     return 0;<br /> }<br />  <br />-static uint32_t<br />-zxdh_np_dtb_tab_up_item_addr_get(uint32_t dev_id,<br />-                    uint32_t queue_id,<br />-                    uint32_t item_index,<br />-                    uint32_t *p_phy_haddr,<br />-                    uint32_t *p_phy_laddr)<br />-{<br />-    uint32_t rc = 0;<br />-    uint64_t addr;<br />-<br />-    if (ZXDH_DTB_QUEUE_INIT_FLAG_GET(dev_id, queue_id) == 0) {<br />-        PMD_DRV_LOG(ERR, "dtb queue %d is not init", queue_id);<br />-        return ZXDH_RC_DTB_QUEUE_IS_NOT_INIT;<br />-    }<br />-<br />-    if (ZXDH_DTB_TAB_UP_USER_PHY_ADDR_FLAG_GET(dev_id, queue_id, item_index) ==<br />-        ZXDH_DTB_TAB_UP_USER_ADDR_TYPE)<br />-        addr = ZXDH_DTB_TAB_UP_USER_PHY_ADDR_GET(dev_id, queue_id, item_index);<br />-    else<br />-        addr = ZXDH_DTB_ITEM_ACK_SIZE;<br />-<br />-    *p_phy_haddr = (addr >> 32) & 0xffffffff;<br />-    *p_phy_laddr = addr & 0xffffffff;<br />-<br />-    return rc;<br />-}<br />-<br /> static uint32_t<br /> zxdh_np_dtb_se_smmu0_dma_dump(uint32_t dev_id,<br />         uint32_t queue_id,<br />@@ -1898,7 +2612,7 @@ zxdh_np_dtb_se_smmu0_dma_dump(uint32_t dev_id,<br />  <br />     rc = zxdh_np_dtb_tab_up_free_item_get(dev_id, queue_id, &queue_item_index);<br />     if (rc != 0) {<br />-        PMD_DRV_LOG(ERR, "dpp_dtb_tab_up_free_item_get failed = %d!", base_addr);<br />+        PMD_DRV_LOG(ERR, "dpp_dtb_tab_up_free_item_get failed = %u!", base_addr);<br />         return ZXDH_RC_DTB_QUEUE_ITEM_SW_EMPTY;<br />     }<br />  <br />@@ -1918,6 +2632,103 @@ zxdh_np_dtb_se_smmu0_dma_dump(uint32_t dev_id,<br />     return rc;<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_dtb_eram_data_get(uint32_t dev_id, uint32_t queue_id, uint32_t sdt_no,<br />+        ZXDH_DTB_ERAM_ENTRY_INFO_T *p_dump_eram_entry)<br />+{<br />+    uint32_t index = p_dump_eram_entry->index;<br />+    uint32_t *p_data = p_dump_eram_entry->p_data;<br />+    ZXDH_SDT_TBL_ERAM_T sdt_eram_info = {0};<br />+    uint32_t temp_data[4] = {0};<br />+    uint32_t row_index = 0;<br />+    uint32_t col_index = 0;<br />+    uint32_t rd_mode;<br />+    uint32_t rc;<br />+    uint32_t eram_dump_base_addr = 0;<br />+    uint32_t eram_base_addr = 0;<br />+    uint32_t element_id = 0;<br />+<br />+    PMD_DRV_LOG(DEBUG, "sdt_no:%u", sdt_no);<br />+    rc = zxdh_np_soft_sdt_tbl_get(dev_id, sdt_no, &sdt_eram_info);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "dpp_soft_sdt_tbl_get");<br />+    eram_base_addr = sdt_eram_info.eram_base_addr;<br />+    rd_mode = sdt_eram_info.eram_mode;<br />+<br />+    zxdh_np_eram_index_cal(rd_mode, index, &row_index, &col_index);<br />+<br />+    eram_dump_base_addr = eram_base_addr + row_index;<br />+<br />+    rc = zxdh_np_dtb_se_smmu0_dma_dump(dev_id,<br />+                                queue_id,<br />+                                eram_dump_base_addr,<br />+                                1,<br />+                                temp_data,<br />+                                &element_id);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dtb_se_smmu0_dma_dump");<br />+<br />+    switch (rd_mode) {<br />+    case ZXDH_ERAM128_TBL_128b:<br />+        memcpy(p_data, temp_data, (128 / 8));<br />+        break;<br />+    case ZXDH_ERAM128_TBL_64b:<br />+        memcpy(p_data, temp_data + ((1 - col_index) << 1), (64 / 8));<br />+        break;<br />+    case ZXDH_ERAM128_TBL_1b:<br />+        ZXDH_COMM_UINT32_GET_BITS(p_data[0], *(temp_data +<br />+            (3 - col_index / 32)), (col_index % 32), 1);<br />+        break;<br />+    default:<br />+        break;<br />+    }<br />+<br />+    PMD_DRV_LOG(DEBUG, "[eram_dump]std no:0x%x, index:0x%x, base addr:0x%x",<br />+                sdt_no, p_dump_eram_entry->index, eram_dump_base_addr);<br />+    if (rd_mode == ZXDH_ERAM128_TBL_128b)<br />+        PMD_DRV_LOG(DEBUG, "value[0x%08x 0x%08x 0x%08x 0x%08x]",<br />+        p_dump_eram_entry->p_data[0], p_dump_eram_entry->p_data[1],<br />+        p_dump_eram_entry->p_data[2], p_dump_eram_entry->p_data[3]);<br />+    else if (rd_mode == ZXDH_ERAM128_TBL_64b)<br />+        PMD_DRV_LOG(DEBUG, "value[0x%08x 0x%08x]",<br />+        p_dump_eram_entry->p_data[0], p_dump_eram_entry->p_data[1]);<br />+<br />+    return rc;<br />+}<br />+<br />+int<br />+zxdh_np_dtb_table_entry_get(uint32_t dev_id,<br />+         uint32_t queue_id,<br />+         ZXDH_DTB_USER_ENTRY_T *get_entry,<br />+         uint32_t srh_mode)<br />+{<br />+    ZXDH_SDT_TBL_DATA_T sdt_tbl = {0};<br />+    uint32_t tbl_type = 0;<br />+    uint32_t rc;<br />+    uint32_t sdt_no;<br />+<br />+    sdt_no = get_entry->sdt_no;<br />+    PMD_DRV_LOG(DEBUG, "sdt_no:%u", sdt_no);<br />+    PMD_DRV_LOG(DEBUG, "srh_mode:%u", srh_mode);<br />+<br />+    zxdh_np_sdt_tbl_data_get(dev_id, sdt_no, &sdt_tbl);<br />+<br />+    ZXDH_COMM_UINT32_GET_BITS(tbl_type, sdt_tbl.data_high32,<br />+            ZXDH_SDT_H_TBL_TYPE_BT_POS, ZXDH_SDT_H_TBL_TYPE_BT_LEN);<br />+    switch (tbl_type) {<br />+    case ZXDH_SDT_TBLT_ERAM:<br />+        rc = zxdh_np_dtb_eram_data_get(dev_id,<br />+                queue_id,<br />+                sdt_no,<br />+                (ZXDH_DTB_ERAM_ENTRY_INFO_T *)get_entry->p_entry_data);<br />+        ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "dpp_dtb_eram_data_get");<br />+        break;<br />+    default:<br />+        PMD_DRV_LOG(ERR, "SDT table_type[ %u ] is invalid!", tbl_type);<br />+        return 1;<br />+    }<br />+<br />+    return 0;<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_dtb_se_smmu0_ind_read(uint32_t dev_id,<br />         uint32_t queue_id,<br />@@ -1945,6 +2756,8 @@ zxdh_np_dtb_se_smmu0_ind_read(uint32_t dev_id,<br />         row_index = (index >> 7);<br />         col_index = index & 0x7F;<br />         break;<br />+    default:<br />+        break;<br />     }<br />  <br />     eram_dump_base_addr = base_addr + row_index;<br />@@ -1967,6 +2780,8 @@ zxdh_np_dtb_se_smmu0_ind_read(uint32_t dev_id,<br />         ZXDH_COMM_UINT32_GET_BITS(p_data[0], *(temp_data +<br />             (3 - col_index / 32)), (col_index % 32), 1);<br />         break;<br />+    default:<br />+        break;<br />     }<br />  <br />     return rc;<br />@@ -2035,6 +2850,32 @@ zxdh_np_dtb_stats_get(uint32_t dev_id,<br />     return rc;<br /> }<br />  <br />+int<br />+zxdh_np_host_init(uint32_t dev_id,<br />+        ZXDH_DEV_INIT_CTRL_T *p_dev_init_ctrl)<br />+{<br />+    ZXDH_SYS_INIT_CTRL_T sys_init_ctrl = {0};<br />+    uint32_t rc;<br />+    uint64_t agent_addr;<br />+<br />+    ZXDH_COMM_CHECK_DEV_POINT(dev_id, p_dev_init_ctrl);<br />+<br />+    sys_init_ctrl.flags = (ZXDH_DEV_ACCESS_TYPE_PCIE << 0) | (ZXDH_DEV_AGENT_ENABLE << 10);<br />+    sys_init_ctrl.pcie_vir_baddr = zxdh_np_addr_calc(p_dev_init_ctrl->pcie_vir_addr,<br />+        p_dev_init_ctrl->np_bar_offset);<br />+    sys_init_ctrl.device_type = ZXDH_DEV_TYPE_CHIP;<br />+<br />+    rc = zxdh_np_base_soft_init(dev_id, &sys_init_ctrl);<br />+    ZXDH_COMM_CHECK_RC_NO_ASSERT(rc, "zxdh_base_soft_init");<br />+<br />+    zxdh_np_dev_vport_set(dev_id, p_dev_init_ctrl->vport);<br />+<br />+    agent_addr = ZXDH_PCIE_AGENT_ADDR_OFFSET + p_dev_init_ctrl->pcie_vir_addr;<br />+    zxdh_np_dev_agent_addr_set(dev_id, agent_addr);<br />+<br />+    return 0;<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_se_done_status_check(uint32_t dev_id, uint32_t reg_no, uint32_t pos)<br /> {<br />@@ -2047,7 +2888,7 @@ zxdh_np_se_done_status_check(uint32_t dev_id, uint32_t reg_no, uint32_t pos)<br />     while (!done_flag) {<br />         rc = zxdh_np_reg_read(dev_id, reg_no, 0, 0, &data);<br />         if (rc != 0) {<br />-            PMD_DRV_LOG(ERR, " [ErrorCode:0x%x] !-- zxdh_np_reg_read Fail!", rc);<br />+            PMD_DRV_LOG(ERR, "reg_read fail!");<br />             return rc;<br />         }<br />  <br />@@ -2073,7 +2914,7 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />                         uint32_t rd_clr_mode,<br />                         uint32_t *p_data)<br /> {<br />-    uint32_t rc = 0;<br />+    uint32_t rc = ZXDH_OK;<br />     uint32_t i = 0;<br />     uint32_t row_index = 0;<br />     uint32_t col_index = 0;<br />@@ -2082,6 +2923,10 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />     ZXDH_SMMU0_SMMU0_CPU_IND_CMD_T cpu_ind_cmd = {0};<br />  <br />     rc = zxdh_np_se_done_status_check(dev_id, ZXDH_SMMU0_SMMU0_WR_ARB_CPU_RDYR, 0);<br />+    if (rc != ZXDH_OK) {<br />+        PMD_DRV_LOG(ERR, "se done status check failed, rc=0x%x.", rc);<br />+        return ZXDH_ERR;<br />+    }<br />  <br />     if (rd_clr_mode == ZXDH_RD_MODE_HOLD) {<br />         cpu_ind_cmd.cpu_ind_rw = ZXDH_SE_OPR_RD;<br />@@ -2090,42 +2935,42 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />  <br />         switch (rd_mode) {<br />         case ZXDH_ERAM128_OPR_128b:<br />-            if ((0xFFFFFFFF - (base_addr)) < (index))<br />+            if ((0xFFFFFFFF - (base_addr)) < (index)) {<br />+                PMD_DRV_LOG(ERR, "index 0x%x is invalid!", index);<br />                 return ZXDH_PAR_CHK_INVALID_INDEX;<br />-<br />+            }<br />             if (base_addr + index > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />-                PMD_DRV_LOG(ERR, "%s : index out of range !", __func__);<br />-                return -1;<br />+                PMD_DRV_LOG(ERR, "index out of range!");<br />+                return ZXDH_ERR;<br />             }<br />-<br />             row_index = (index << 7) & ZXDH_ERAM128_BADDR_MASK;<br />             break;<br />         case ZXDH_ERAM128_OPR_64b:<br />             if ((base_addr + (index >> 1)) > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />-                PMD_DRV_LOG(ERR, "%s : index out of range !", __func__);<br />-                return -1;<br />+                PMD_DRV_LOG(ERR, "index out of range!");<br />+                return ZXDH_ERR;<br />             }<br />-<br />             row_index = (index << 6) & ZXDH_ERAM128_BADDR_MASK;<br />             col_index = index & 0x1;<br />             break;<br />         case ZXDH_ERAM128_OPR_32b:<br />             if ((base_addr + (index >> 2)) > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />-                PMD_DRV_LOG(ERR, "%s : index out of range !", __func__);<br />-                return -1;<br />+                PMD_DRV_LOG(ERR, "index out of range!");<br />+                return ZXDH_ERR;<br />             }<br />-<br />             row_index = (index << 5) & ZXDH_ERAM128_BADDR_MASK;<br />             col_index = index & 0x3;<br />             break;<br />         case ZXDH_ERAM128_OPR_1b:<br />             if ((base_addr + (index >> 7)) > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />-                PMD_DRV_LOG(ERR, "%s : index out of range !", __func__);<br />-                return -1;<br />+                PMD_DRV_LOG(ERR, "index out of range!");<br />+                return ZXDH_ERR;<br />             }<br />             row_index = index & ZXDH_ERAM128_BADDR_MASK;<br />             col_index = index & 0x7F;<br />             break;<br />+        default:<br />+            break;<br />         }<br />  <br />         cpu_ind_cmd.cpu_ind_addr = ((base_addr << 7) & ZXDH_ERAM128_BADDR_MASK) + row_index;<br />@@ -2136,56 +2981,69 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />         switch (rd_mode) {<br />         case ZXDH_ERAM128_OPR_128b:<br />             if ((0xFFFFFFFF - (base_addr)) < (index)) {<br />-                PMD_DRV_LOG(ERR, "%s : index 0x%x is invalid!", __func__, index);<br />+                PMD_DRV_LOG(ERR, "index 0x%x is invalid!", index);<br />                 return ZXDH_PAR_CHK_INVALID_INDEX;<br />             }<br />             if (base_addr + index > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />-                PMD_DRV_LOG(ERR, "%s : index out of range !", __func__);<br />-                return -1;<br />+                PMD_DRV_LOG(ERR, "index out of range!");<br />+                return ZXDH_ERR;<br />             }<br />             row_index = (index << 7);<br />             cpu_ind_cmd.cpu_req_mode = ZXDH_ERAM128_OPR_128b;<br />             break;<br />         case ZXDH_ERAM128_OPR_64b:<br />             if ((base_addr + (index >> 1)) > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />-                PMD_DRV_LOG(ERR, "%s : index out of range !", __func__);<br />-                return -1;<br />+                PMD_DRV_LOG(ERR, "index out of range!");<br />+                return ZXDH_ERR;<br />             }<br />-<br />             row_index = (index << 6);<br />             cpu_ind_cmd.cpu_req_mode = 2;<br />             break;<br />         case ZXDH_ERAM128_OPR_32b:<br />             if ((base_addr + (index >> 2)) > ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {<br />-                PMD_DRV_LOG(ERR, "%s : index out of range !", __func__);<br />-                return -1;<br />+                PMD_DRV_LOG(ERR, "index out of range!");<br />+                return ZXDH_ERR;<br />             }<br />             row_index = (index << 5);<br />             cpu_ind_cmd.cpu_req_mode = 1;<br />             break;<br />         case ZXDH_ERAM128_OPR_1b:<br />-            PMD_DRV_LOG(ERR, "rd_clr_mode[%d] or rd_mode[%d] error! ",<br />-                rd_clr_mode, rd_mode);<br />-            return -1;<br />+            PMD_DRV_LOG(ERR, "rd_clr_mode[%u] or rd_mode[%u] error!",<br />+            rd_clr_mode, rd_mode);<br />+            return ZXDH_ERR;<br />+        default:<br />+            break;<br />         }<br />         cpu_ind_cmd.cpu_ind_addr = ((base_addr << 7) & ZXDH_ERAM128_BADDR_MASK) + row_index;<br />     }<br />  <br />     rc = zxdh_np_reg_write(dev_id,<br />-                        ZXDH_SMMU0_SMMU0_CPU_IND_CMDR,<br />-                        0,<br />-                        0,<br />-                        &cpu_ind_cmd);<br />+            ZXDH_SMMU0_SMMU0_CPU_IND_CMDR,<br />+            0,<br />+            0,<br />+            &cpu_ind_cmd);<br />+    if (rc != ZXDH_OK) {<br />+        PMD_DRV_LOG(ERR, "zxdh_np_reg_write failed, rc=0x%x.", rc);<br />+        return ZXDH_ERR;<br />+    }<br />  <br />-    rc = zxdh_np_se_done_status_check(dev_id, ZXDH_SMMU0_SMMU0_RD_CPU_IND_DONER, 0);<br />+    rc = zxdh_np_se_done_status_check(dev_id, ZXDH_SMMU0_SMMU0_CPU_IND_RD_DONER, 0);<br />+    if (rc != ZXDH_OK) {<br />+        PMD_DRV_LOG(ERR, "se done status check failed, rc=0x%x.", rc);<br />+        return ZXDH_ERR;<br />+    }<br />  <br />     p_temp_data = temp_data;<br />     for (i = 0; i < 4; i++) {<br />         rc = zxdh_np_reg_read(dev_id,<br />-                            ZXDH_SMMU0_SMMU0_CPU_IND_RDAT0R + i,<br />-                            0,<br />-                            0,<br />-                            p_temp_data + 3 - i);<br />+            ZXDH_SMMU0_SMMU0_CPU_IND_RDAT0R + i,<br />+            0,<br />+            0,<br />+            p_temp_data + 3 - i);<br />+        if (rc != ZXDH_OK) {<br />+            PMD_DRV_LOG(ERR, "zxdh_np_reg_write failed, rc=0x%x.", rc);<br />+            return ZXDH_ERR;<br />+        }<br />     }<br />  <br />     if (rd_clr_mode == ZXDH_RD_MODE_HOLD) {<br />@@ -2203,6 +3061,8 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />             ZXDH_COMM_UINT32_GET_BITS(p_data[0],<br />                 *(p_temp_data + (3 - col_index / 32)), (col_index % 32), 1);<br />             break;<br />+        default:<br />+            break;<br />         }<br />     } else {<br />         switch (rd_mode) {<br />@@ -2215,6 +3075,8 @@ zxdh_np_se_smmu0_ind_read(uint32_t dev_id,<br />         case ZXDH_ERAM128_OPR_32b:<br />             memcpy(p_data, p_temp_data, (64 / 8));<br />             break;<br />+        default:<br />+            break;<br />         }<br />     }<br />  <br />@@ -2266,70 +3128,18 @@ zxdh_np_stat_ppu_cnt_get_ex(uint32_t dev_id,<br /> }<br />  <br /> static uint32_t<br />-zxdh_np_agent_channel_sync_send(ZXDH_AGENT_CHANNEL_MSG_T *p_msg,<br />-                uint32_t *p_data,<br />-                uint32_t rep_len)<br />-{<br />-    uint32_t ret = 0;<br />-    uint32_t vport = 0;<br />-    struct zxdh_pci_bar_msg in = {0};<br />-    struct zxdh_msg_recviver_mem result = {0};<br />-    uint32_t *recv_buffer;<br />-    uint8_t *reply_ptr = NULL;<br />-    uint16_t reply_msg_len = 0;<br />-    uint64_t agent_addr = 0;<br />-<br />-    if (ZXDH_IS_PF(vport))<br />-        in.src = ZXDH_MSG_CHAN_END_PF;<br />-    else<br />-        in.src = ZXDH_MSG_CHAN_END_VF;<br />-<br />-    in.virt_addr = agent_addr;<br />-    in.payload_addr = p_msg->msg;<br />-    in.payload_len = p_msg->msg_len;<br />-    in.dst = ZXDH_MSG_CHAN_END_RISC;<br />-    in.module_id = ZXDH_BAR_MDOULE_NPSDK;<br />-<br />-    recv_buffer = (uint32_t *)rte_zmalloc(NULL, rep_len + ZXDH_CHANNEL_REPS_LEN, 0);<br />-    if (recv_buffer == NULL) {<br />-        PMD_DRV_LOG(ERR, "%s point null!", __func__);<br />-        return ZXDH_PAR_CHK_POINT_NULL;<br />-    }<br />-<br />-    result.buffer_len = rep_len + ZXDH_CHANNEL_REPS_LEN;<br />-    result.recv_buffer = recv_buffer;<br />-<br />-    ret = zxdh_bar_chan_sync_msg_send(&in, &result);<br />-    if (ret == ZXDH_BAR_MSG_OK) {<br />-        reply_ptr = (uint8_t *)(result.recv_buffer);<br />-        if (*reply_ptr == 0XFF) {<br />-            reply_msg_len = *(uint16_t *)(reply_ptr + 1);<br />-            memcpy(p_data, reply_ptr + 4,<br />-                ((reply_msg_len > rep_len) ? rep_len : reply_msg_len));<br />-        } else {<br />-            PMD_DRV_LOG(ERR, "Message not replied");<br />-        }<br />-    } else {<br />-        PMD_DRV_LOG(ERR, "Error[0x%x], %s failed!", ret, __func__);<br />-    }<br />-<br />-    rte_free(recv_buffer);<br />-    return ret;<br />-}<br />-<br />-static uint32_t<br />-zxdh_np_agent_channel_plcr_sync_send(ZXDH_AGENT_CHANNEL_PLCR_MSG_T *p_msg,<br />+zxdh_np_agent_channel_plcr_sync_send(uint32_t dev_id, ZXDH_AGENT_CHANNEL_PLCR_MSG_T *p_msg,<br />         uint32_t *p_data, uint32_t rep_len)<br /> {<br />     uint32_t ret = 0;<br />-    ZXDH_AGENT_CHANNEL_MSG_T agent_msg = {0};<br />+    ZXDH_AGENT_CHANNEL_MSG_T agent_msg = {<br />+        .msg = (void *)&p_msg,<br />+        .msg_len = sizeof(ZXDH_AGENT_CHANNEL_PLCR_MSG_T),<br />+    };<br />  <br />-    agent_msg.msg = (void *)p_msg;<br />-    agent_msg.msg_len = sizeof(ZXDH_AGENT_CHANNEL_PLCR_MSG_T);<br />-<br />-    ret = zxdh_np_agent_channel_sync_send(&agent_msg, p_data, rep_len);<br />+    ret = zxdh_np_agent_channel_sync_send(dev_id, &agent_msg, p_data, rep_len);<br />     if (ret != 0)    {<br />-        PMD_DRV_LOG(ERR, "%s: agent_channel_sync_send failed.", __func__);<br />+        PMD_DRV_LOG(ERR, "agent_channel_sync_send failed.");<br />         return 1;<br />     }<br />  <br />@@ -2337,25 +3147,25 @@ zxdh_np_agent_channel_plcr_sync_send(ZXDH_AGENT_CHANNEL_PLCR_MSG_T *p_msg,<br /> }<br />  <br /> static uint32_t<br />-zxdh_np_agent_channel_plcr_profileid_request(uint32_t vport,<br />+zxdh_np_agent_channel_plcr_profileid_request(uint32_t dev_id, uint32_t vport,<br />     uint32_t car_type, uint32_t *p_profileid)<br /> {<br />     uint32_t ret = 0;<br />     uint32_t resp_buffer[2] = {0};<br />  <br />-    ZXDH_AGENT_CHANNEL_PLCR_MSG_T msgcfg = {0};<br />-<br />-    msgcfg.dev_id = 0;<br />-    msgcfg.type = ZXDH_PLCR_MSG;<br />-    msgcfg.oper = ZXDH_PROFILEID_REQUEST;<br />-    msgcfg.vport = vport;<br />-    msgcfg.car_type = car_type;<br />-    msgcfg.profile_id = 0xFFFF;<br />+    ZXDH_AGENT_CHANNEL_PLCR_MSG_T msgcfg = {<br />+        .dev_id = 0,<br />+        .type = ZXDH_PLCR_MSG,<br />+        .oper = ZXDH_PROFILEID_REQUEST,<br />+        .vport = vport,<br />+        .car_type = car_type,<br />+        .profile_id = 0xFFFF,<br />+    };<br />  <br />-    ret = zxdh_np_agent_channel_plcr_sync_send(&msgcfg,<br />+    ret = zxdh_np_agent_channel_plcr_sync_send(dev_id, &msgcfg,<br />         resp_buffer, sizeof(resp_buffer));<br />     if (ret != 0)    {<br />-        PMD_DRV_LOG(ERR, "%s: agent_channel_plcr_sync_send failed.", __func__);<br />+        PMD_DRV_LOG(ERR, "agent_channel_plcr_sync_send failed.");<br />         return 1;<br />     }<br />  <br />@@ -2365,7 +3175,8 @@ zxdh_np_agent_channel_plcr_profileid_request(uint32_t vport,<br /> }<br />  <br /> static uint32_t<br />-zxdh_np_agent_channel_plcr_car_rate(uint32_t car_type,<br />+zxdh_np_agent_channel_plcr_car_rate(uint32_t dev_id,<br />+        uint32_t car_type,<br />         uint32_t pkt_sign,<br />         uint32_t profile_id __rte_unused,<br />         void *p_car_profile_cfg)<br />@@ -2395,9 +3206,9 @@ zxdh_np_agent_channel_plcr_car_rate(uint32_t car_type,<br />         agent_msg.msg = (void *)&msgpktcfg;<br />         agent_msg.msg_len = sizeof(ZXDH_AGENT_CAR_PKT_PROFILE_MSG_T);<br />  <br />-        ret = zxdh_np_agent_channel_sync_send(&agent_msg, resp_buffer, resp_len);<br />+        ret = zxdh_np_agent_channel_sync_send(dev_id, &agent_msg, resp_buffer, resp_len);<br />         if (ret != 0)    {<br />-            PMD_DRV_LOG(ERR, "%s: stat_car_a_type failed.", __func__);<br />+            PMD_DRV_LOG(ERR, "stat_car_a_type failed.");<br />             return 1;<br />         }<br />  <br />@@ -2429,9 +3240,9 @@ zxdh_np_agent_channel_plcr_car_rate(uint32_t car_type,<br />         agent_msg.msg = (void *)&msgcfg;<br />         agent_msg.msg_len = sizeof(ZXDH_AGENT_CAR_PROFILE_MSG_T);<br />  <br />-        ret = zxdh_np_agent_channel_sync_send(&agent_msg, resp_buffer, resp_len);<br />+        ret = zxdh_np_agent_channel_sync_send(dev_id, &agent_msg, resp_buffer, resp_len);<br />         if (ret != 0)    {<br />-            PMD_DRV_LOG(ERR, "%s: stat_car_b_type failed.", __func__);<br />+            PMD_DRV_LOG(ERR, "stat_car_b_type failed.");<br />             return 1;<br />         }<br />  <br />@@ -2442,25 +3253,25 @@ zxdh_np_agent_channel_plcr_car_rate(uint32_t car_type,<br /> }<br />  <br /> static uint32_t<br />-zxdh_np_agent_channel_plcr_profileid_release(uint32_t vport,<br />+zxdh_np_agent_channel_plcr_profileid_release(uint32_t dev_id, uint32_t vport,<br />         uint32_t car_type __rte_unused,<br />         uint32_t profileid)<br /> {<br />     uint32_t ret = 0;<br />     uint32_t resp_buffer[2] = {0};<br />  <br />-    ZXDH_AGENT_CHANNEL_PLCR_MSG_T msgcfg = {0};<br />-<br />-    msgcfg.dev_id = 0;<br />-    msgcfg.type = ZXDH_PLCR_MSG;<br />-    msgcfg.oper = ZXDH_PROFILEID_RELEASE;<br />-    msgcfg.vport = vport;<br />-    msgcfg.profile_id = profileid;<br />+    ZXDH_AGENT_CHANNEL_PLCR_MSG_T msgcfg = {<br />+        .dev_id = 0,<br />+        .type = ZXDH_PLCR_MSG,<br />+        .oper = ZXDH_PROFILEID_RELEASE,<br />+        .vport = vport,<br />+        .profile_id = profileid,<br />+    };<br />  <br />-    ret = zxdh_np_agent_channel_plcr_sync_send(&msgcfg,<br />+    ret = zxdh_np_agent_channel_plcr_sync_send(dev_id, &msgcfg,<br />         resp_buffer, sizeof(resp_buffer));<br />     if (ret != 0)    {<br />-        PMD_DRV_LOG(ERR, "%s: agent_channel_plcr_sync_send failed.", __func__);<br />+        PMD_DRV_LOG(ERR, "agent_channel_plcr_sync_send failed.");<br />         return 1;<br />     }<br />  <br />@@ -2478,11 +3289,12 @@ zxdh_np_stat_cara_queue_cfg_set(uint32_t dev_id,<br /> {<br />     uint32_t rc = 0;<br />  <br />-    ZXDH_STAT_CAR0_CARA_QUEUE_RAM0_159_0_T queue_cfg = {0};<br />+    ZXDH_STAT_CAR0_CARA_QUEUE_RAM0_159_0_T queue_cfg = {<br />+        .cara_drop = drop_flag,<br />+        .cara_plcr_en = plcr_en,<br />+        .cara_profile_id = profile_id,<br />+    };<br />  <br />-    queue_cfg.cara_drop = drop_flag;<br />-    queue_cfg.cara_plcr_en = plcr_en;<br />-    queue_cfg.cara_profile_id = profile_id;<br />     rc = zxdh_np_reg_write(dev_id,<br />                 ZXDH_STAT_CAR0_CARA_QUEUE_RAM0,<br />                 0,<br />@@ -2502,11 +3314,11 @@ zxdh_np_stat_carb_queue_cfg_set(uint32_t dev_id,<br /> {<br />     uint32_t rc = 0;<br />  <br />-    ZXDH_STAT_CAR0_CARB_QUEUE_RAM0_159_0_T queue_cfg = {0};<br />-<br />-    queue_cfg.carb_drop = drop_flag;<br />-    queue_cfg.carb_plcr_en = plcr_en;<br />-    queue_cfg.carb_profile_id = profile_id;<br />+    ZXDH_STAT_CAR0_CARB_QUEUE_RAM0_159_0_T queue_cfg = {<br />+        .carb_drop = drop_flag,<br />+        .carb_plcr_en = plcr_en,<br />+        .carb_profile_id = profile_id,<br />+    };<br />  <br />     rc = zxdh_np_reg_write(dev_id,<br />                 ZXDH_STAT_CAR0_CARB_QUEUE_RAM0,<br />@@ -2527,10 +3339,11 @@ zxdh_np_stat_carc_queue_cfg_set(uint32_t dev_id,<br /> {<br />     uint32_t rc = 0;<br />  <br />-    ZXDH_STAT_CAR0_CARC_QUEUE_RAM0_159_0_T queue_cfg = {0};<br />-    queue_cfg.carc_drop = drop_flag;<br />-    queue_cfg.carc_plcr_en = plcr_en;<br />-    queue_cfg.carc_profile_id = profile_id;<br />+    ZXDH_STAT_CAR0_CARC_QUEUE_RAM0_159_0_T queue_cfg = {<br />+        .carc_drop = drop_flag,<br />+        .carc_plcr_en = plcr_en,<br />+        .carc_profile_id = profile_id,<br />+    };<br />  <br />     rc = zxdh_np_reg_write(dev_id,<br />                         ZXDH_STAT_CAR0_CARC_QUEUE_RAM0,<br />@@ -2553,12 +3366,12 @@ zxdh_np_car_profile_id_add(uint32_t vport_id,<br />     uint32_t profile_id_l = 0;<br />     uint64_t temp_profile_id = 0;<br />  <br />-    profile_id = (uint32_t *)rte_zmalloc(NULL, ZXDH_G_PROFILE_ID_LEN, 0);<br />+    profile_id = rte_zmalloc(NULL, ZXDH_G_PROFILE_ID_LEN, 0);<br />     if (profile_id == NULL) {<br />-        PMD_DRV_LOG(ERR, "%s: profile_id point null!", __func__);<br />+        PMD_DRV_LOG(ERR, "profile_id point null!");<br />         return ZXDH_PAR_CHK_POINT_NULL;<br />     }<br />-    ret = zxdh_np_agent_channel_plcr_profileid_request(vport_id, flags, profile_id);<br />+    ret = zxdh_np_agent_channel_plcr_profileid_request(0, vport_id, flags, profile_id);<br />  <br />     profile_id_h = *(profile_id + 1);<br />     profile_id_l = *profile_id;<br />@@ -2566,7 +3379,7 @@ zxdh_np_car_profile_id_add(uint32_t vport_id,<br />  <br />     temp_profile_id = (((uint64_t)profile_id_l) << 32) | ((uint64_t)profile_id_h);<br />     if (0 != (uint32_t)(temp_profile_id >> 56)) {<br />-        PMD_DRV_LOG(ERR, "%s: profile_id is overflow!", __func__);<br />+        PMD_DRV_LOG(ERR, "profile_id is overflow!");<br />         return 1;<br />     }<br />  <br />@@ -2583,11 +3396,12 @@ zxdh_np_car_profile_cfg_set(uint32_t vport_id __rte_unused,<br />         void *p_car_profile_cfg)<br /> {<br />     uint32_t ret = 0;<br />+    uint32_t dev_id = 0;<br />  <br />-    ret = zxdh_np_agent_channel_plcr_car_rate(car_type,<br />+    ret = zxdh_np_agent_channel_plcr_car_rate(dev_id, car_type,<br />         pkt_sign, profile_id, p_car_profile_cfg);<br />     if (ret != 0) {<br />-        PMD_DRV_LOG(ERR, "%s: plcr_car_rate set failed!", __func__);<br />+        PMD_DRV_LOG(ERR, "plcr_car_rate set failed!");<br />         return 1;<br />     }<br />  <br />@@ -2599,13 +3413,12 @@ zxdh_np_car_profile_id_delete(uint32_t vport_id,<br />     uint32_t flags, uint64_t profile_id)<br /> {<br />     uint32_t ret = 0;<br />-    uint32_t profileid = 0;<br />-<br />-    profileid = profile_id & 0xFFFF;<br />+    uint32_t dev_id = 0;<br />+    uint32_t profileid = profile_id & 0xFFFF;<br />  <br />-    ret = zxdh_np_agent_channel_plcr_profileid_release(vport_id, flags, profileid);<br />+    ret = zxdh_np_agent_channel_plcr_profileid_release(dev_id, vport_id, flags, profileid);<br />     if (ret != 0) {<br />-        PMD_DRV_LOG(ERR, "%s: plcr profiled id release failed!", __func__);<br />+        PMD_DRV_LOG(ERR, "plcr profiled id release failed!");<br />         return 1;<br />     }<br />  <br />@@ -2624,32 +3437,32 @@ zxdh_np_stat_car_queue_cfg_set(uint32_t dev_id,<br />  <br />     if (car_type == ZXDH_STAT_CAR_A_TYPE) {<br />         if (flow_id > ZXDH_CAR_A_FLOW_ID_MAX) {<br />-            PMD_DRV_LOG(ERR, "%s: stat car a type flow_id invalid!", __func__);<br />+            PMD_DRV_LOG(ERR, "stat car a type flow_id invalid!");<br />             return ZXDH_PAR_CHK_INVALID_INDEX;<br />         }<br />  <br />         if (profile_id > ZXDH_CAR_A_PROFILE_ID_MAX) {<br />-            PMD_DRV_LOG(ERR, "%s: stat car a type profile_id invalid!", __func__);<br />+            PMD_DRV_LOG(ERR, "stat car a type profile_id invalid!");<br />             return ZXDH_PAR_CHK_INVALID_INDEX;<br />         }<br />     } else if (car_type == ZXDH_STAT_CAR_B_TYPE) {<br />         if (flow_id > ZXDH_CAR_B_FLOW_ID_MAX) {<br />-            PMD_DRV_LOG(ERR, "%s: stat car b type flow_id invalid!", __func__);<br />+            PMD_DRV_LOG(ERR, "stat car b type flow_id invalid!");<br />             return ZXDH_PAR_CHK_INVALID_INDEX;<br />         }<br />  <br />         if (profile_id > ZXDH_CAR_B_PROFILE_ID_MAX) {<br />-            PMD_DRV_LOG(ERR, "%s: stat car b type profile_id invalid!", __func__);<br />+            PMD_DRV_LOG(ERR, "stat car b type profile_id invalid!");<br />             return ZXDH_PAR_CHK_INVALID_INDEX;<br />         }<br />     } else {<br />         if (flow_id > ZXDH_CAR_C_FLOW_ID_MAX) {<br />-            PMD_DRV_LOG(ERR, "%s: stat car c type flow_id invalid!", __func__);<br />+            PMD_DRV_LOG(ERR, "stat car c type flow_id invalid!");<br />             return ZXDH_PAR_CHK_INVALID_INDEX;<br />         }<br />  <br />         if (profile_id > ZXDH_CAR_C_PROFILE_ID_MAX) {<br />-            PMD_DRV_LOG(ERR, "%s: stat car c type profile_id invalid!", __func__);<br />+            PMD_DRV_LOG(ERR, "stat car c type profile_id invalid!");<br />             return ZXDH_PAR_CHK_INVALID_INDEX;<br />         }<br />     }<br />diff --git a/drivers/net/zxdh/zxdh_np.h b/drivers/net/zxdh/zxdh_np.h<br />index 7ff5c34c73..6d2c7aa976 100644<br />--- a/drivers/net/zxdh/zxdh_np.h<br />+++ b/drivers/net/zxdh/zxdh_np.h<br />@@ -6,14 +6,16 @@<br /> #define ZXDH_NP_H<br />  <br /> #include <stdint.h> <br />+#include <rte_spinlock.h> <br />  <br />+#define ZXDH_OK                               (0)<br />+#define ZXDH_ERR                              (1)<br /> #define ZXDH_DISABLE                          (0)<br /> #define ZXDH_ENABLE                           (1)<br /> #define ZXDH_PORT_NAME_MAX                    (32)<br /> #define ZXDH_DEV_CHANNEL_MAX                  (2)<br /> #define ZXDH_DEV_SDT_ID_MAX                   (256U)<br />  <br />-#define ZXDH_RD_CNT_MAX                       (128)<br />  <br /> /*DTB*/<br /> #define ZXDH_DTB_QUEUE_ITEM_NUM_MAX           (32)<br />@@ -54,11 +56,23 @@<br /> #define ZXDH_INIT_FLAG_TM_IMEM_FLAG     (1 << 9)<br /> #define ZXDH_INIT_FLAG_AGENT_FLAG       (1 << 10)<br />  <br />+#define ZXDH_REG_NUL_ARRAY              (0 << 0)<br />+#define ZXDH_REG_UNI_ARRAY              (1 << 0)<br />+#define ZXDH_REG_BIN_ARRAY              (1 << 1)<br />+#define ZXDH_REG_FLAG_INDIRECT          (1 << 0)<br />+#define ZXDH_REG_FLAG_DIRECT            (0 << 0)<br />+#define ZXDH_FIELD_FLAG_RO              (1 << 0)<br />+#define ZXDH_FIELD_FLAG_RW              (1 << 1)<br />+<br />+#define ZXDH_SYS_NP_BASE_ADDR0          (0x00000000)<br />+#define ZXDH_SYS_NP_BASE_ADDR1          (0x02000000)<br />+<br /> #define ZXDH_ACL_TBL_ID_MIN             (0)<br /> #define ZXDH_ACL_TBL_ID_MAX             (7)<br /> #define ZXDH_ACL_TBL_ID_NUM             (8U)<br /> #define ZXDH_ACL_BLOCK_NUM              (8U)<br />  <br />+#define ZXDH_RD_CNT_MAX                          (100)<br /> #define ZXDH_SMMU0_READ_REG_MAX_NUM              (4)<br />  <br /> #define ZXDH_DTB_ITEM_ACK_SIZE                   (16)<br />@@ -98,6 +112,57 @@<br /> #define ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL  \<br />         (ZXDH_SE_SMMU0_ERAM_BLOCK_NUM * ZXDH_SE_SMMU0_ERAM_ADDR_NUM_PER_BLOCK)<br />  <br />+#define ZXDH_SDT_CFG_LEN                        (2)<br />+#define ZXDH_SDT_VALID                          (1)<br />+#define ZXDH_SDT_INVALID                        (0)<br />+#define ZXDH_SDT_OPER_ADD                       (0)<br />+#define ZXDH_SDT_H_TBL_TYPE_BT_POS              (29)<br />+#define ZXDH_SDT_H_TBL_TYPE_BT_LEN              (3)<br />+#define ZXDH_SDT_H_ERAM_MODE_BT_POS             (26)<br />+#define ZXDH_SDT_H_ERAM_MODE_BT_LEN             (3)<br />+#define ZXDH_SDT_H_ERAM_BASE_ADDR_BT_POS        (7)<br />+#define ZXDH_SDT_H_ERAM_BASE_ADDR_BT_LEN        (19)<br />+#define ZXDH_SDT_L_ERAM_TABLE_DEPTH_BT_POS      (1)<br />+#define ZXDH_SDT_L_ERAM_TABLE_DEPTH_BT_LEN      (22)<br />+#define ZXDH_SDT_H_HASH_ID_BT_POS               (27)<br />+#define ZXDH_SDT_H_HASH_ID_BT_LEN               (2)<br />+#define ZXDH_SDT_H_HASH_TABLE_WIDTH_BT_POS      (25)<br />+#define ZXDH_SDT_H_HASH_TABLE_WIDTH_BT_LEN      (2)<br />+#define ZXDH_SDT_H_HASH_KEY_SIZE_BT_POS         (19)<br />+#define ZXDH_SDT_H_HASH_KEY_SIZE_BT_LEN         (6)<br />+#define ZXDH_SDT_H_HASH_TABLE_ID_BT_POS         (14)<br />+#define ZXDH_SDT_H_HASH_TABLE_ID_BT_LEN         (5)<br />+#define ZXDH_SDT_H_LEARN_EN_BT_POS              (13)<br />+#define ZXDH_SDT_H_LEARN_EN_BT_LEN              (1)<br />+#define ZXDH_SDT_H_KEEP_ALIVE_BT_POS            (12)<br />+#define ZXDH_SDT_H_KEEP_ALIVE_BT_LEN            (1)<br />+#define ZXDH_SDT_H_KEEP_ALIVE_BADDR_BT_POS      (0)<br />+#define ZXDH_SDT_H_KEEP_ALIVE_BADDR_BT_LEN      (12)<br />+#define ZXDH_SDT_L_KEEP_ALIVE_BADDR_BT_POS      (25)<br />+#define ZXDH_SDT_L_KEEP_ALIVE_BADDR_BT_LEN      (7)<br />+#define ZXDH_SDT_L_RSP_MODE_BT_POS              (23)<br />+#define ZXDH_SDT_L_RSP_MODE_BT_LEN              (2)<br />+#define ZXDH_SDT_H_ETCAM_ID_BT_POS              (27)<br />+#define ZXDH_SDT_H_ETCAM_ID_BT_LEN              (1)<br />+#define ZXDH_SDT_H_ETCAM_KEY_MODE_BT_POS        (25)<br />+#define ZXDH_SDT_H_ETCAM_KEY_MODE_BT_LEN        (2)<br />+#define ZXDH_SDT_H_ETCAM_TABLE_ID_BT_POS        (21)<br />+#define ZXDH_SDT_H_ETCAM_TABLE_ID_BT_LEN        (4)<br />+#define ZXDH_SDT_H_ETCAM_NOAS_RSP_MODE_BT_POS   (19)<br />+#define ZXDH_SDT_H_ETCAM_NOAS_RSP_MODE_BT_LEN   (2)<br />+#define ZXDH_SDT_H_ETCAM_AS_EN_BT_POS           (18)<br />+#define ZXDH_SDT_H_ETCAM_AS_EN_BT_LEN           (1)<br />+#define ZXDH_SDT_H_ETCAM_AS_ERAM_BADDR_BT_POS   (0)<br />+#define ZXDH_SDT_H_ETCAM_AS_ERAM_BADDR_BT_LEN   (18)<br />+#define ZXDH_SDT_L_ETCAM_AS_ERAM_BADDR_BT_POS   (31)<br />+#define ZXDH_SDT_L_ETCAM_AS_ERAM_BADDR_BT_LEN   (1)<br />+#define ZXDH_SDT_L_ETCAM_AS_RSP_MODE_BT_POS     (28)<br />+#define ZXDH_SDT_L_ETCAM_AS_RSP_MODE_BT_LEN     (3)<br />+#define ZXDH_SDT_L_ETCAM_TABLE_DEPTH_BT_POS     (1)<br />+#define ZXDH_SDT_L_ETCAM_TABLE_DEPTH_BT_LEN     (20)<br />+#define ZXDH_SDT_L_CLUTCH_EN_BT_POS             (0)<br />+#define ZXDH_SDT_L_CLUTCH_EN_BT_LEN             (1)<br />+<br /> /**errco code */<br /> #define ZXDH_RC_BASE                            (0x1000U)<br /> #define ZXDH_PARAMETER_CHK_BASE                 (ZXDH_RC_BASE            | 0x200)<br />@@ -206,11 +271,15 @@ typedef enum zxdh_dev_type_e {<br /> } ZXDH_DEV_TYPE_E;<br />  <br /> typedef enum zxdh_reg_info_e {<br />-    ZXDH_DTB_CFG_QUEUE_DTB_HADDR   = 0,<br />-    ZXDH_DTB_CFG_QUEUE_DTB_LADDR   = 1,<br />-    ZXDH_DTB_CFG_QUEUE_DTB_LEN    = 2,<br />-    ZXDH_DTB_INFO_QUEUE_BUF_SPACE = 3,<br />-    ZXDH_DTB_CFG_EPID_V_FUNC_NUM  = 4,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_CMDR        = 0,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_RD_DONER    = 1,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_RDAT0R      = 2,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_RDAT1R      = 3,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_RDAT2R      = 4,<br />+    ZXDH_SMMU0_SMMU0_CPU_IND_RDAT3R      = 5,<br />+    ZXDH_SMMU0_SMMU0_WR_ARB_CPU_RDYR     = 6,<br />+    ZXDH_DTB_INFO_QUEUE_BUF_SPACE        = 7,<br />+    ZXDH_DTB_CFG_EPID_V_FUNC_NUM         = 8,<br />     ZXDH_STAT_CAR0_CARA_QUEUE_RAM0       = 9,<br />     ZXDH_STAT_CAR0_CARB_QUEUE_RAM0       = 10,<br />     ZXDH_STAT_CAR0_CARC_QUEUE_RAM0       = 11,<br />@@ -218,6 +287,12 @@ typedef enum zxdh_reg_info_e {<br />     ZXDH_REG_ENUM_MAX_VALUE<br /> } ZXDH_REG_INFO_E;<br />  <br />+typedef enum zxdh_dev_spinlock_type_e {<br />+    ZXDH_DEV_SPINLOCK_T_SMMU0     = 0,<br />+    ZXDH_DEV_SPINLOCK_T_DTB       = 1,<br />+    ZXDH_DEV_SPINLOCK_T_MAX<br />+} ZXDH_DEV_SPINLOCK_TYPE_E;<br />+<br /> typedef enum zxdh_dev_access_type_e {<br />     ZXDH_DEV_ACCESS_TYPE_PCIE = 0,<br />     ZXDH_DEV_ACCESS_TYPE_RISCV = 1,<br />@@ -237,6 +312,29 @@ typedef enum zxdh_acl_pri_mode_e {<br />     ZXDH_ACL_PRI_INVALID,<br /> } ZXDH_ACL_PRI_MODE_E;<br />  <br />+typedef enum zxdh_module_e {<br />+    CFG = 1,<br />+    NPPU,<br />+    PPU,<br />+    ETM,<br />+    STAT,<br />+    CAR,<br />+    SE,<br />+    SMMU0 = SE,<br />+    SMMU1 = SE,<br />+    DTB,<br />+    TRPG,<br />+    TSN,<br />+    AXI,<br />+    PTPTM,<br />+    DTB4K,<br />+    STAT4K,<br />+    PPU4K,<br />+    SE4K,<br />+    SMMU14K,<br />+    MODULE_MAX<br />+} ZXDH_MODULE_E;<br />+<br /> typedef struct zxdh_d_node {<br />     void *data;<br />     struct zxdh_d_node *prev;<br />@@ -301,6 +399,49 @@ typedef struct dpp_sdt_soft_table_t {<br />     ZXDH_SDT_ITEM_T  sdt_array[ZXDH_DEV_SDT_ID_MAX];<br /> } ZXDH_SDT_SOFT_TABLE_T;<br />  <br />+typedef struct zxdh_sdt_tbl_eram_t {<br />+    uint32_t table_type;<br />+    uint32_t eram_mode;<br />+    uint32_t eram_base_addr;<br />+    uint32_t eram_table_depth;<br />+    uint32_t eram_clutch_en;<br />+} ZXDH_SDT_TBL_ERAM_T;<br />+<br />+typedef struct zxdh_sdt_tbl_etcam_t {<br />+    uint32_t table_type;<br />+    uint32_t etcam_id;<br />+    uint32_t etcam_key_mode;<br />+    uint32_t etcam_table_id;<br />+    uint32_t no_as_rsp_mode;<br />+    uint32_t as_en;<br />+    uint32_t as_eram_baddr;<br />+    uint32_t as_rsp_mode;<br />+    uint32_t etcam_table_depth;<br />+    uint32_t etcam_clutch_en;<br />+} ZXDH_SDT_TBL_ETCAM_T;<br />+<br />+typedef struct zxdh_sdt_tbl_hash_t {<br />+    uint32_t table_type;<br />+    uint32_t hash_id;<br />+    uint32_t hash_table_width;<br />+    uint32_t key_size;<br />+    uint32_t hash_table_id;<br />+    uint32_t learn_en;<br />+    uint32_t keep_alive;<br />+    uint32_t keep_alive_baddr;<br />+    uint32_t rsp_mode;<br />+    uint32_t hash_clutch_en;<br />+} ZXDH_SDT_TBL_HASH_T;<br />+<br />+typedef struct zxdh_spin_lock_t {<br />+    rte_spinlock_t spinlock;<br />+} ZXDH_SPINLOCK_T;<br />+<br />+typedef void (*ZXDH_DEV_WRITE_FUNC)(uint32_t dev_id,<br />+        uint32_t addr, uint32_t size, uint32_t *p_data);<br />+typedef void (*ZXDH_DEV_READ_FUNC)(uint32_t dev_id,<br />+        uint32_t addr, uint32_t size, uint32_t *p_data);<br />+<br /> typedef struct zxdh_sys_init_ctrl_t {<br />     ZXDH_DEV_TYPE_E device_type;<br />     uint32_t flags;<br />@@ -327,6 +468,8 @@ typedef struct dpp_dev_cfg_t {<br />     uint64_t dma_phy_addr;<br />     uint64_t agent_addr;<br />     uint32_t init_flags[ZXDH_MODULE_INIT_MAX];<br />+    ZXDH_DEV_WRITE_FUNC p_pcie_write_fun;<br />+    ZXDH_DEV_READ_FUNC  p_pcie_read_fun;<br /> } ZXDH_DEV_CFG_T;<br />  <br /> typedef struct zxdh_dev_mngr_t {<br />@@ -338,8 +481,8 @@ typedef struct zxdh_dev_mngr_t {<br /> typedef struct zxdh_dtb_addr_info_t {<br />     uint32_t sdt_no;<br />     uint32_t size;<br />-    uint32_t phy_addr;<br />-    uint32_t vir_addr;<br />+    uint64_t phy_addr;<br />+    uint64_t vir_addr;<br /> } ZXDH_DTB_ADDR_INFO_T;<br />  <br /> typedef struct zxdh_dev_init_ctrl_t {<br />@@ -349,12 +492,12 @@ typedef struct zxdh_dev_init_ctrl_t {<br />     uint32_t queue_id;<br />     uint32_t np_bar_offset;<br />     uint32_t np_bar_len;<br />-    uint32_t pcie_vir_addr;<br />-    uint32_t down_phy_addr;<br />-    uint32_t down_vir_addr;<br />-    uint32_t dump_phy_addr;<br />-    uint32_t dump_vir_addr;<br />-    uint32_t dump_sdt_num;<br />+    uint64_t pcie_vir_addr;<br />+    uint64_t down_phy_addr;<br />+    uint64_t down_vir_addr;<br />+    uint64_t dump_phy_addr;<br />+    uint64_t dump_vir_addr;<br />+    uint64_t dump_sdt_num;<br />     ZXDH_DTB_ADDR_INFO_T dump_addr_info[];<br /> } ZXDH_DEV_INIT_CTRL_T;<br />  <br />@@ -424,7 +567,7 @@ typedef struct zxdh_reg_t {<br />     uint32_t  m_step;<br />     uint32_t  n_step;<br />     uint32_t  field_num;<br />-    ZXDH_FIELD_T *p_fields;<br />+    const ZXDH_FIELD_T *p_fields;<br />  <br />     ZXDH_REG_WRITE      p_write_fun;<br />     ZXDH_REG_READ       p_read_fun;<br />@@ -515,14 +658,6 @@ typedef struct zxdh_dtb_eram_table_form_t {<br />     uint32_t data_l;<br /> } ZXDH_DTB_ERAM_TABLE_FORM_T;<br />  <br />-typedef struct zxdh_sdt_tbl_eram_t {<br />-    uint32_t table_type;<br />-    uint32_t eram_mode;<br />-    uint32_t eram_base_addr;<br />-    uint32_t eram_table_depth;<br />-    uint32_t eram_clutch_en;<br />-} ZXDH_SDTTBL_ERAM_T;<br />-<br /> typedef union zxdh_endian_u {<br />     unsigned int     a;<br />     unsigned char    b;<br />@@ -538,7 +673,7 @@ typedef struct zxdh_dtb_table_t {<br />     const char    *table_type;<br />     uint32_t  table_no;<br />     uint32_t  field_num;<br />-    ZXDH_DTB_FIELD_T *p_fields;<br />+    const ZXDH_DTB_FIELD_T *p_fields;<br /> } ZXDH_DTB_TABLE_T;<br />  <br /> typedef struct zxdh_dtb_queue_item_info_t {<br />@@ -550,12 +685,6 @@ typedef struct zxdh_dtb_queue_item_info_t {<br />     uint32_t data_hddr;<br /> } ZXDH_DTB_QUEUE_ITEM_INFO_T;<br />  <br />-typedef struct zxdh_dtb_queue_len_t {<br />-    uint32_t cfg_dtb_cmd_type;<br />-    uint32_t cfg_dtb_cmd_int_en;<br />-    uint32_t cfg_queue_dtb_len;<br />-} ZXDH_DTB_QUEUE_LEN_T;<br />-<br /> typedef struct zxdh_dtb_eram_entry_info_t {<br />     uint32_t index;<br />     uint32_t *p_data;<br />@@ -571,23 +700,10 @@ typedef struct zxdh_sdt_tbl_data_t {<br />     uint32_t data_low32;<br /> } ZXDH_SDT_TBL_DATA_T;<br />  <br />-typedef struct zxdh_sdt_tbl_etcam_t {<br />-    uint32_t table_type;<br />-    uint32_t etcam_id;<br />-    uint32_t etcam_key_mode;<br />-    uint32_t etcam_table_id;<br />-    uint32_t no_as_rsp_mode;<br />-    uint32_t as_en;<br />-    uint32_t as_eram_baddr;<br />-    uint32_t as_rsp_mode;<br />-    uint32_t etcam_table_depth;<br />-    uint32_t etcam_clutch_en;<br />-} ZXDH_SDTTBL_ETCAM_T;<br />-<br /> typedef struct zxdh_sdt_tbl_porttbl_t {<br />     uint32_t table_type;<br />     uint32_t porttbl_clutch_en;<br />-} ZXDH_SDTTBL_PORTTBL_T;<br />+} ZXDH_SDT_TBL_PORTTBL_T;<br />  <br /> typedef struct zxdh_dtb_hash_entry_info_t {<br />     uint8_t *p_actu_key;<br />@@ -614,15 +730,6 @@ typedef struct zxdh_smmu0_smmu0_cpu_ind_cmd_t {<br />     uint32_t cpu_ind_addr;<br /> } ZXDH_SMMU0_SMMU0_CPU_IND_CMD_T;<br />  <br />-typedef enum zxdh_smmu0_smmu0_type_e {<br />-    ZXDH_DEV_MUTEX_T_SMMU0             = 0,<br />-    ZXDH_SMMU0_SMMU0_CPU_IND_CMDR      = 1,<br />-    ZXDH_SMMU0_SMMU0_CPU_IND_RDAT0R    = 2,<br />-    ZXDH_SMMU0_SMMU0_RD_CPU_IND_DONER  = 3,<br />-    ZXDH_SMMU0_SMMU0_WR_ARB_CPU_RDYR   = 4,<br />-    ZXDH_SMMU0_SMMU0_ED_ARB_CPU_RDYR   = 5,<br />-} ZXDH_SEMMU0_SEMMU0_TYPE_E;<br />-<br /> typedef enum zxdh_stat_rd_clr_mode_e {<br />     ZXDH_STAT_RD_CLR_MODE_UNCLR = 0,<br />     ZXDH_STAT_RD_CLR_MODE_CLR   = 1,<br />@@ -635,8 +742,8 @@ typedef enum zxdh_eram128_rd_clr_mode_e {<br /> } ZXDH_ERAM128_RD_CLR_MODE_E;<br />  <br /> typedef enum zxdh_se_opr_mode_e {<br />-    ZXDH_SE_OPR_RD      = 0,<br />-    ZXDH_SE_OPR_WR      = 1,<br />+    ZXDH_SE_OPR_WR      = 0,<br />+    ZXDH_SE_OPR_RD      = 1,<br /> } ZXDH_SE_OPR_MODE_E;<br />  <br /> typedef enum zxdh_stat_car_type_e {<br />@@ -730,11 +837,6 @@ typedef struct dpp_agent_car_pkt_profile_msg {<br />     uint32_t pri[ZXDH_CAR_PRI_MAX];<br /> } ZXDH_AGENT_CAR_PKT_PROFILE_MSG_T;<br />  <br />-typedef struct zxdh_agent_channel_msg_t {<br />-    uint32_t msg_len;<br />-    void *msg;<br />-} ZXDH_AGENT_CHANNEL_MSG_T;<br />-<br /> typedef struct zxdh_agent_channel_plcr_msg {<br />     uint8_t dev_id;<br />     uint8_t type;<br />@@ -803,6 +905,10 @@ typedef enum zxdh_profile_type {<br />     CAR_MAX<br /> } ZXDH_PROFILE_TYPE;<br />  <br />+typedef struct __rte_aligned(2) zxdh_agent_channel_msg_t {<br />+    uint32_t msg_len;<br />+    void *msg;<br />+} ZXDH_AGENT_CHANNEL_MSG_T;<br />  <br /> int zxdh_np_host_init(uint32_t dev_id, ZXDH_DEV_INIT_CTRL_T *p_dev_init_ctrl);<br /> int zxdh_np_online_uninit(uint32_t dev_id, char *port_name, uint32_t queue_id);<br />--  <br />2.27.0<br />