Implement hash/eram/acl/stat tables initialization.<br /> <br />Signed-off-by: Bingbin Chen <chen.bingbin@zte.com.cn> <br />---<br /> drivers/net/zxdh/zxdh_np.c | 672 +++++++++++++++++++++++++++++++++++++<br /> drivers/net/zxdh/zxdh_np.h | 187 +++++++++++<br /> 2 files changed, 859 insertions(+)<br /> <br />diff --git a/drivers/net/zxdh/zxdh_np.c b/drivers/net/zxdh/zxdh_np.c<br />index 5455dff296..2bacf82ff4 100644<br />--- a/drivers/net/zxdh/zxdh_np.c<br />+++ b/drivers/net/zxdh/zxdh_np.c<br />@@ -22,6 +22,9 @@ 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_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[ZXDH_DEV_CHANNEL_MAX];<br />+static SE_APT_CALLBACK_T g_apt_se_callback[ZXDH_DEV_CHANNEL_MAX][ZXDH_DEV_SDT_ID_MAX];<br />+static ZXDH_ACL_CFG_EX_T g_apt_acl_cfg[ZXDH_DEV_CHANNEL_MAX] = {0};<br />+static ZXDH_ACL_CFG_EX_T *g_p_acl_ex_cfg[ZXDH_DEV_CHANNEL_MAX] = {NULL};<br /> static uint64_t g_np_fw_compat_addr[ZXDH_DEV_CHANNEL_MAX];<br /> static const ZXDH_VERSION_COMPATIBLE_REG_T g_np_sdk_version = {<br />     ZXDH_NPSDK_COMPAT_ITEM_ID, 1, 0, 0, 0, {0} };<br />@@ -49,6 +52,10 @@ static const uint32_t g_ddr_hash_arg[ZXDH_HASH_DDR_CRC_NUM] = {<br />     0x00210801<br /> };<br />  <br />+static ZXDH_HASH_TBL_ID_INFO g_tbl_id_info[ZXDH_DEV_CHANNEL_MAX]<br />+                             [ZXDH_HASH_FUNC_ID_NUM]<br />+                             [ZXDH_HASH_TBL_ID_NUM];<br />+<br /> static 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 />@@ -482,6 +489,49 @@ zxdh_np_get_tn_color(ZXDH_RB_TN *p_tn)<br />  <br /> #define GET_DDR_HASH_ARG(ddr_crc_sel) (g_ddr_hash_arg[ddr_crc_sel])<br />  <br />+#define ZXDH_SDT_GET_LOW_DATA(source_value, low_width) \<br />+    ((source_value) & ((1 << (low_width)) - 1))<br />+<br />+#define ZXDH_ACL_AS_RSLT_SIZE_GET_EX(mode) (2U << (mode))<br />+<br />+#define ZXDH_GET_ACTU_KEY_BY_SIZE(actu_key_size) \<br />+    ((actu_key_size) * ZXDH_HASH_ACTU_KEY_STEP)<br />+<br />+#define ZXDH_GET_KEY_SIZE(actu_key_size) \<br />+    (ZXDH_GET_ACTU_KEY_BY_SIZE(actu_key_size) + ZXDH_HASH_KEY_CTR_SIZE)<br />+<br />+#define ZXDH_ACL_ENTRY_MAX_GET(key_mode, block_num) \<br />+    ((block_num) * ZXDH_ETCAM_RAM_DEPTH * (1U << (key_mode)))<br />+<br />+#define ZXDH_ETCAM_ENTRY_SIZE_GET(entry_mode) \<br />+    ((ZXDH_ETCAM_RAM_WIDTH << (3 - (entry_mode))) / 8)<br />+<br />+#define ZXDH_ACL_KEYSIZE_GET(key_mode) (2 * ZXDH_ETCAM_ENTRY_SIZE_GET(key_mode))<br />+<br />+#define GET_HASH_TBL_ID_INFO(dev_id, fun_id, tbl_id) (&g_tbl_id_info[dev_id][fun_id][tbl_id])<br />+<br />+<br />+static inline uint32_t<br />+zxdh_np_get_hash_entry_size(uint32_t key_type)<br />+{<br />+    return ((key_type == ZXDH_HASH_KEY_128b) ? 16U : ((key_type == ZXDH_HASH_KEY_256b) ? 32U :<br />+         ((key_type == ZXDH_HASH_KEY_512b) ? 64U : 0)));<br />+}<br />+<br />+#define ZXDH_GET_HASH_ENTRY_SIZE(key_type) \<br />+    zxdh_np_get_hash_entry_size(key_type)<br />+<br />+static inline void<br />+zxdh_np_comm_uint32_write_bits(uint32_t *dst, uint32_t src,<br />+    uint32_t start_pos, uint32_t len)<br />+{<br />+    uint32_t mask = ZXDH_COMM_GET_BIT_MASK(uint32_t, len) << start_pos;<br />+    *dst = (*dst & mask) | (src & mask);<br />+}<br />+<br />+#define ZXDH_COMM_UINT32_WRITE_BITS(dst, src, start_pos, len)\<br />+    zxdh_np_comm_uint32_write_bits(&(dst), src, start_pos, len)<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 />@@ -2177,6 +2227,231 @@ zxdh_np_sdt_init(uint32_t dev_num, uint32_t *dev_id_array)<br />     return rc;<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_sdt_mgr_sdt_item_add(uint32_t dev_id, uint32_t sdt_no,<br />+        uint32_t sdt_hig32, uint32_t sdt_low32)<br />+{<br />+    ZXDH_SDT_SOFT_TABLE_T *p_sdt_soft_tbl = NULL;<br />+    ZXDH_SDT_ITEM_T *p_sdt_item = NULL;<br />+<br />+    p_sdt_soft_tbl = ZXDH_SDT_SOFT_TBL_GET(dev_id);<br />+<br />+    if (p_sdt_soft_tbl == NULL) {<br />+        PMD_DRV_LOG(ERR, "soft sdt table not init!");<br />+        RTE_ASSERT(0);<br />+        return ZXDH_RC_TABLE_SDT_MGR_INVALID;<br />+    }<br />+<br />+    if (dev_id != p_sdt_soft_tbl->device_id) {<br />+        PMD_DRV_LOG(ERR, "soft sdt table item invalid!");<br />+        RTE_ASSERT(0);<br />+        return ZXDH_RC_TABLE_PARA_INVALID;<br />+    }<br />+<br />+    p_sdt_item = &p_sdt_soft_tbl->sdt_array[sdt_no];<br />+    p_sdt_item->valid = ZXDH_SDT_VALID;<br />+    p_sdt_item->table_cfg[0] = sdt_hig32;<br />+    p_sdt_item->table_cfg[1] = sdt_low32;<br />+<br />+    PMD_DRV_LOG(DEBUG, "0x%08x 0x%08x", p_sdt_item->table_cfg[0], p_sdt_item->table_cfg[1]);<br />+<br />+    return ZXDH_OK;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_sdt_mgr_sdt_item_del(uint32_t dev_id, uint32_t sdt_no)<br />+{<br />+    ZXDH_SDT_SOFT_TABLE_T *p_sdt_soft_tbl = NULL;<br />+    ZXDH_SDT_ITEM_T *p_sdt_item = NULL;<br />+<br />+    p_sdt_soft_tbl = ZXDH_SDT_SOFT_TBL_GET(dev_id);<br />+<br />+    if (p_sdt_soft_tbl != NULL) {<br />+        if (dev_id != p_sdt_soft_tbl->device_id) {<br />+            PMD_DRV_LOG(ERR, "soft table item invalid !");<br />+            RTE_ASSERT(0);<br />+            return ZXDH_RC_TABLE_PARA_INVALID;<br />+        }<br />+<br />+        p_sdt_item = &p_sdt_soft_tbl->sdt_array[sdt_no];<br />+        p_sdt_item->valid = ZXDH_SDT_INVALID;<br />+        p_sdt_item->table_cfg[0] = 0;<br />+        p_sdt_item->table_cfg[1] = 0;<br />+    }<br />+    PMD_DRV_LOG(DEBUG, "sdt_no: 0x%08x", sdt_no);<br />+    return ZXDH_OK;<br />+}<br />+<br />+static void<br />+zxdh_np_soft_sdt_tbl_set(uint32_t dev_id,<br />+                        uint32_t sdt_no,<br />+                        uint32_t table_type,<br />+                        ZXDH_SDT_TBL_DATA_T *p_sdt_info)<br />+{<br />+    g_table_type[dev_id][sdt_no] = table_type;<br />+    g_sdt_info[dev_id][sdt_no].data_high32 = p_sdt_info->data_high32;<br />+    g_sdt_info[dev_id][sdt_no].data_low32  = p_sdt_info->data_low32;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_sdt_tbl_write(uint32_t dev_id,<br />+                    uint32_t sdt_no,<br />+                    uint32_t table_type,<br />+                    void *p_sdt_info,<br />+                    uint32_t opr_type)<br />+{<br />+    uint32_t rtn = 0;<br />+<br />+    ZXDH_SDT_TBL_DATA_T sdt_tbl = {0};<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 />+    if (opr_type) {<br />+        zxdh_np_soft_sdt_tbl_set(dev_id, sdt_no, 0, &sdt_tbl);<br />+<br />+        rtn = zxdh_np_sdt_mgr_sdt_item_del(dev_id, sdt_no);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rtn, "zxdh_np_sdt_mgr_sdt_item_del");<br />+    } else {<br />+        switch (table_type) {<br />+        case ZXDH_SDT_TBLT_ERAM:<br />+            p_sdt_eram = (ZXDH_SDT_TBL_ERAM_T *)p_sdt_info;<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_eram->eram_mode,<br />+                ZXDH_SDT_H_ERAM_MODE_BT_POS,<br />+                ZXDH_SDT_H_ERAM_MODE_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_eram->eram_base_addr,<br />+                ZXDH_SDT_H_ERAM_BASE_ADDR_BT_POS,<br />+                ZXDH_SDT_H_ERAM_BASE_ADDR_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_low32,<br />+                p_sdt_eram->eram_table_depth,<br />+                ZXDH_SDT_L_ERAM_TABLE_DEPTH_BT_POS,<br />+                ZXDH_SDT_L_ERAM_TABLE_DEPTH_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_low32,<br />+                p_sdt_eram->eram_clutch_en,<br />+                ZXDH_SDT_L_CLUTCH_EN_BT_POS,<br />+                ZXDH_SDT_L_CLUTCH_EN_BT_LEN);<br />+            break;<br />+<br />+        case ZXDH_SDT_TBLT_HASH:<br />+            p_sdt_hash = (ZXDH_SDT_TBL_HASH_T *)p_sdt_info;<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_hash->hash_id,<br />+                ZXDH_SDT_H_HASH_ID_BT_POS,<br />+                ZXDH_SDT_H_HASH_ID_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_hash->hash_table_width,<br />+                ZXDH_SDT_H_HASH_TABLE_WIDTH_BT_POS,<br />+                ZXDH_SDT_H_HASH_TABLE_WIDTH_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_hash->key_size,<br />+                ZXDH_SDT_H_HASH_KEY_SIZE_BT_POS,<br />+                ZXDH_SDT_H_HASH_KEY_SIZE_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_hash->hash_table_id,<br />+                ZXDH_SDT_H_HASH_TABLE_ID_BT_POS,<br />+                ZXDH_SDT_H_HASH_TABLE_ID_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_hash->learn_en,<br />+                ZXDH_SDT_H_LEARN_EN_BT_POS,<br />+                ZXDH_SDT_H_LEARN_EN_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_hash->keep_alive,<br />+                ZXDH_SDT_H_KEEP_ALIVE_BT_POS,<br />+                ZXDH_SDT_H_KEEP_ALIVE_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                ((p_sdt_hash->keep_alive_baddr) >> <br />+                ZXDH_SDT_L_KEEP_ALIVE_BADDR_BT_LEN),<br />+                ZXDH_SDT_H_KEEP_ALIVE_BADDR_BT_POS,<br />+                ZXDH_SDT_H_KEEP_ALIVE_BADDR_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_low32,<br />+                ZXDH_SDT_GET_LOW_DATA((p_sdt_hash->keep_alive_baddr),<br />+                ZXDH_SDT_L_KEEP_ALIVE_BADDR_BT_LEN),<br />+                ZXDH_SDT_L_KEEP_ALIVE_BADDR_BT_POS,<br />+                ZXDH_SDT_L_KEEP_ALIVE_BADDR_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_low32,<br />+                p_sdt_hash->rsp_mode,<br />+                ZXDH_SDT_L_RSP_MODE_BT_POS,<br />+                ZXDH_SDT_L_RSP_MODE_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_low32,<br />+                p_sdt_hash->hash_clutch_en,<br />+                ZXDH_SDT_L_CLUTCH_EN_BT_POS,<br />+                ZXDH_SDT_L_CLUTCH_EN_BT_LEN);<br />+            break;<br />+<br />+        case ZXDH_SDT_TBLT_ETCAM:<br />+            p_sdt_etcam = (ZXDH_SDT_TBL_ETCAM_T *)p_sdt_info;<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_etcam->etcam_id,<br />+                ZXDH_SDT_H_ETCAM_ID_BT_POS,<br />+                ZXDH_SDT_H_ETCAM_ID_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_etcam->etcam_key_mode,<br />+                ZXDH_SDT_H_ETCAM_KEY_MODE_BT_POS,<br />+                ZXDH_SDT_H_ETCAM_KEY_MODE_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_etcam->etcam_table_id,<br />+                ZXDH_SDT_H_ETCAM_TABLE_ID_BT_POS,<br />+                ZXDH_SDT_H_ETCAM_TABLE_ID_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_etcam->no_as_rsp_mode,<br />+                ZXDH_SDT_H_ETCAM_NOAS_RSP_MODE_BT_POS,<br />+                ZXDH_SDT_H_ETCAM_NOAS_RSP_MODE_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                p_sdt_etcam->as_en,<br />+                ZXDH_SDT_H_ETCAM_AS_EN_BT_POS,<br />+                ZXDH_SDT_H_ETCAM_AS_EN_BT_LEN);<br />+<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32,<br />+                ((p_sdt_etcam->as_eram_baddr) >> <br />+                ZXDH_SDT_L_ETCAM_AS_ERAM_BADDR_BT_LEN),<br />+                ZXDH_SDT_H_ETCAM_AS_ERAM_BADDR_BT_POS,<br />+                ZXDH_SDT_H_ETCAM_AS_ERAM_BADDR_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_low32,<br />+                ZXDH_SDT_GET_LOW_DATA((p_sdt_etcam->as_eram_baddr),<br />+                ZXDH_SDT_L_ETCAM_AS_ERAM_BADDR_BT_LEN),<br />+                ZXDH_SDT_L_ETCAM_AS_ERAM_BADDR_BT_POS,<br />+                ZXDH_SDT_L_ETCAM_AS_ERAM_BADDR_BT_LEN);<br />+<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_low32, p_sdt_etcam->as_rsp_mode,<br />+                ZXDH_SDT_L_ETCAM_AS_RSP_MODE_BT_POS,<br />+                ZXDH_SDT_L_ETCAM_AS_RSP_MODE_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_low32,<br />+                p_sdt_etcam->etcam_table_depth, ZXDH_SDT_L_ETCAM_TABLE_DEPTH_BT_POS,<br />+                ZXDH_SDT_L_ETCAM_TABLE_DEPTH_BT_LEN);<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_low32,<br />+                p_sdt_etcam->etcam_clutch_en, ZXDH_SDT_L_CLUTCH_EN_BT_POS,<br />+                ZXDH_SDT_L_CLUTCH_EN_BT_LEN);<br />+            break;<br />+<br />+        case ZXDH_SDT_TBLT_PORTTBL:<br />+            p_sdt_porttbl = (ZXDH_SDT_TBL_PORTTBL_T *)p_sdt_info;<br />+            ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_low32,<br />+                p_sdt_porttbl->porttbl_clutch_en, ZXDH_SDT_L_CLUTCH_EN_BT_POS,<br />+                ZXDH_SDT_L_CLUTCH_EN_BT_LEN);<br />+            break;<br />+<br />+        default:<br />+            PMD_DRV_LOG(ERR, "SDT table_type[ %d ] is invalid!",<br />+                table_type);<br />+            return ZXDH_ERR;<br />+        }<br />+<br />+        ZXDH_COMM_UINT32_WRITE_BITS(sdt_tbl.data_high32, table_type,<br />+            ZXDH_SDT_H_TBL_TYPE_BT_POS, ZXDH_SDT_H_TBL_TYPE_BT_LEN);<br />+<br />+        zxdh_np_soft_sdt_tbl_set(dev_id, sdt_no, table_type, &sdt_tbl);<br />+<br />+        rtn = zxdh_np_sdt_mgr_sdt_item_add(dev_id, sdt_no, sdt_tbl.data_high32,<br />+            sdt_tbl.data_low32);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rtn, "zxdh_np_sdt_mgr_sdt_item_add");<br />+    }<br />+<br />+    return ZXDH_OK;<br />+}<br />+<br /> static void<br /> zxdh_np_ppu_parse_cls_bitmap(uint32_t dev_id,<br />                                 uint32_t bitmap)<br />@@ -6288,12 +6563,383 @@ zxdh_np_apt_hash_bulk_res_init(uint32_t dev_id, uint32_t bulk_num,<br />     return rc;<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_apt_set_callback(uint32_t dev_id, uint32_t sdt_no, uint32_t table_type, void *p_data)<br />+{<br />+    SE_APT_CALLBACK_T *apt_func = NULL;<br />+<br />+    apt_func = &g_apt_se_callback[dev_id][sdt_no];<br />+<br />+    apt_func->sdt_no = sdt_no;<br />+    apt_func->table_type = table_type;<br />+    switch (table_type) {<br />+    case ZXDH_SDT_TBLT_ERAM:<br />+        apt_func->se_func_info.eram_func.opr_mode =<br />+            ((ZXDH_APT_ERAM_TABLE_T *)p_data)->opr_mode;<br />+        apt_func->se_func_info.eram_func.rd_mode =<br />+            ((ZXDH_APT_ERAM_TABLE_T *)p_data)->rd_mode;<br />+        apt_func->se_func_info.eram_func.eram_set_func =<br />+            ((ZXDH_APT_ERAM_TABLE_T *)p_data)->eram_set_func;<br />+        apt_func->se_func_info.eram_func.eram_get_func =<br />+            ((ZXDH_APT_ERAM_TABLE_T *)p_data)->eram_get_func;<br />+        break;<br />+    case ZXDH_SDT_TBLT_HASH:<br />+        apt_func->se_func_info.hash_func.sdt_partner   =<br />+            ((ZXDH_APT_HASH_TABLE_T *)p_data)->sdt_partner;<br />+        apt_func->se_func_info.hash_func.hash_set_func =<br />+            ((ZXDH_APT_HASH_TABLE_T *)p_data)->hash_set_func;<br />+        apt_func->se_func_info.hash_func.hash_get_func =<br />+        ((ZXDH_APT_HASH_TABLE_T *)p_data)->hash_get_func;<br />+        break;<br />+    case ZXDH_SDT_TBLT_ETCAM:<br />+        apt_func->se_func_info.acl_func.sdt_partner =<br />+            ((ZXDH_APT_ACL_TABLE_T *)p_data)->sdt_partner;<br />+        apt_func->se_func_info.acl_func.acl_set_func =<br />+            ((ZXDH_APT_ACL_TABLE_T *)p_data)->acl_set_func;<br />+        apt_func->se_func_info.acl_func.acl_get_func =<br />+            ((ZXDH_APT_ACL_TABLE_T *)p_data)->acl_get_func;<br />+        break;<br />+    default:<br />+        PMD_DRV_LOG(ERR, "zxdh_np_apt_se_set_callback table_type[ %d ]" <br />+            "is invalid!", table_type);<br />+        return ZXDH_ERR;<br />+    }<br />+<br />+    return ZXDH_OK;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_hash_tbl_id_info_init(ZXDH_SE_CFG *p_se_cfg,<br />+                                uint32_t fun_id,<br />+                                uint32_t tbl_id,<br />+                                uint32_t tbl_flag,<br />+                                uint32_t key_type,<br />+                                uint32_t actu_key_size)<br />+{<br />+    uint32_t key_by_size = ZXDH_GET_KEY_SIZE(actu_key_size);<br />+    uint32_t entry_size = ZXDH_GET_HASH_ENTRY_SIZE(key_type);<br />+    uint32_t dev_id = p_se_cfg->dev_id;<br />+    ZXDH_HASH_TBL_ID_INFO *p_tbl_id_info = NULL;<br />+<br />+    if (key_by_size > entry_size) {<br />+        PMD_DRV_LOG(ERR, "ErrorCode[%x]: actu_key_size[%d] not match to key_type[%d].",<br />+                                 ZXDH_HASH_RC_INVALID_PARA,<br />+                                 key_by_size,<br />+                                 entry_size);<br />+        RTE_ASSERT(0);<br />+        return ZXDH_HASH_RC_INVALID_PARA;<br />+    }<br />+<br />+    p_tbl_id_info = GET_HASH_TBL_ID_INFO(dev_id, fun_id, tbl_id);<br />+<br />+    if (p_tbl_id_info->is_init) {<br />+        PMD_DRV_LOG(ERR, "fun_id[%d], table_id[%d] is already init," <br />+            "do not init again!", fun_id, tbl_id);<br />+        return ZXDH_OK;<br />+    }<br />+<br />+    p_tbl_id_info->fun_id = fun_id;<br />+    p_tbl_id_info->actu_key_size = actu_key_size;<br />+    p_tbl_id_info->key_type = key_type;<br />+    p_tbl_id_info->is_init = 1;<br />+<br />+    if (tbl_flag & ZXDH_HASH_TBL_FLAG_AGE)<br />+        p_tbl_id_info->is_age = 1;<br />+<br />+    if (tbl_flag & ZXDH_HASH_TBL_FLAG_LEARN)<br />+        p_tbl_id_info->is_lrn = 1;<br />+<br />+    if (tbl_flag & ZXDH_HASH_TBL_FLAG_MC_WRT)<br />+        p_tbl_id_info->is_mc_wrt = 1;<br />+<br />+    return ZXDH_OK;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_apt_hash_tbl_res_init(uint32_t dev_id, uint32_t tbl_num,<br />+                          ZXDH_APT_HASH_TABLE_T *p_hash_tbl)<br />+{<br />+    uint32_t rc = ZXDH_OK;<br />+    uint32_t index = 0;<br />+    ZXDH_APT_HASH_TABLE_T *p_hash_tbl_temp = NULL;<br />+    ZXDH_SE_CFG *p_se_cfg = NULL;<br />+<br />+    p_se_cfg = g_apt_se_cfg[dev_id];<br />+<br />+    for (index = 0; index < tbl_num; index++) {<br />+        p_hash_tbl_temp = p_hash_tbl + index;<br />+        ZXDH_COMM_CHECK_DEV_POINT(dev_id, p_hash_tbl_temp);<br />+        rc = zxdh_np_sdt_tbl_write(dev_id,<br />+                    p_hash_tbl_temp->sdt_no,<br />+                    p_hash_tbl_temp->hash_sdt.table_type,<br />+                    &p_hash_tbl_temp->hash_sdt,<br />+                    ZXDH_SDT_OPER_ADD);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_sdt_tbl_write");<br />+<br />+        rc = zxdh_np_hash_tbl_id_info_init(p_se_cfg,<br />+                        p_hash_tbl_temp->hash_sdt.hash_id,<br />+                        p_hash_tbl_temp->hash_sdt.hash_table_id,<br />+                        p_hash_tbl_temp->tbl_flag,<br />+                        p_hash_tbl_temp->hash_sdt.hash_table_width,<br />+                        p_hash_tbl_temp->hash_sdt.key_size);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_hash_tbl_id_info_init_ex");<br />+<br />+        rc = zxdh_np_apt_set_callback(dev_id,<br />+                        p_hash_tbl_temp->sdt_no,<br />+                        p_hash_tbl_temp->hash_sdt.table_type,<br />+                        (void *)p_hash_tbl_temp);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_apt_set_callback");<br />+    }<br />+<br />+    return rc;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_apt_eram_res_init(uint32_t dev_id, uint32_t tbl_num, ZXDH_APT_ERAM_TABLE_T *p_eram_tbl)<br />+{<br />+    uint32_t rc = ZXDH_OK;<br />+    uint32_t index = 0;<br />+    ZXDH_APT_ERAM_TABLE_T *p_temp_eram_tbl = NULL;<br />+<br />+    for (index = 0; index < tbl_num; index++) {<br />+        p_temp_eram_tbl = p_eram_tbl + index;<br />+        rc = zxdh_np_sdt_tbl_write(dev_id,<br />+                        p_temp_eram_tbl->sdt_no,<br />+                        p_temp_eram_tbl->eram_sdt.table_type,<br />+                        &p_temp_eram_tbl->eram_sdt,<br />+                        ZXDH_SDT_OPER_ADD);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_sdt_tbl_write");<br />+<br />+        rc = zxdh_np_apt_set_callback(dev_id,<br />+                        p_temp_eram_tbl->sdt_no,<br />+                        p_temp_eram_tbl->eram_sdt.table_type,<br />+                        (void *)p_temp_eram_tbl);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_apt_set_callback");<br />+    }<br />+<br />+    return rc;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_acl_entrynum_to_blocknum(uint32_t entry_num, uint32_t key_mode)<br />+{<br />+    uint32_t value = 0;<br />+<br />+    value = entry_num % (ZXDH_ETCAM_RAM_DEPTH * ((uint32_t)1 << key_mode));<br />+<br />+    if (value == 0)<br />+        return (entry_num / (ZXDH_ETCAM_RAM_DEPTH * ((uint32_t)1 << key_mode)));<br />+    else<br />+        return (entry_num / (ZXDH_ETCAM_RAM_DEPTH * ((uint32_t)1 << key_mode)) + 1);<br />+}<br />+<br />+static int32_t<br />+zxdh_np_acl_key_cmp(void *p_new_key, void *p_old_key, uint32_t key_len)<br />+{<br />+    return memcmp(&(((ZXDH_ACL_KEY_INFO_T *)p_new_key)->pri),<br />+        &(((ZXDH_ACL_KEY_INFO_T *)p_old_key)->pri), key_len - sizeof(uint32_t));<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_acl_cfg_init_ex(ZXDH_ACL_CFG_EX_T *p_acl_cfg,<br />+                        void *p_client,<br />+                        uint32_t flags,<br />+                        ZXDH_ACL_AS_RSLT_WRT_FUNCTION p_as_wrt_fun)<br />+{<br />+    uint32_t rc = 0;<br />+<br />+    memset(p_acl_cfg, 0, sizeof(ZXDH_ACL_CFG_EX_T));<br />+<br />+    p_acl_cfg->p_client = p_client;<br />+    p_acl_cfg->dev_id = (uint32_t)(ZXDH_COMM_PTR_TO_VAL(p_acl_cfg->p_client) & 0xFFFFFFFF);<br />+    p_acl_cfg->flags = flags;<br />+<br />+    g_p_acl_ex_cfg[p_acl_cfg->dev_id] = p_acl_cfg;<br />+<br />+    if (flags & ZXDH_ACL_FLAG_ETCAM0_EN) {<br />+        p_acl_cfg->acl_etcamids.is_valid = 1;<br />+<br />+        p_acl_cfg->acl_etcamids.as_eram_base = 0;<br />+<br />+        rc = zxdh_comm_double_link_init(ZXDH_ACL_TBL_ID_NUM,<br />+            &p_acl_cfg->acl_etcamids.tbl_list);<br />+        ZXDH_COMM_CHECK_RC(rc, "zxdh_comm_double_link_init");<br />+    }<br />+<br />+    if (p_as_wrt_fun == NULL) {<br />+        p_acl_cfg->p_as_rslt_write_fun = NULL;<br />+        p_acl_cfg->p_as_rslt_read_fun = NULL;<br />+<br />+    } else {<br />+        p_acl_cfg->p_as_rslt_write_fun = p_as_wrt_fun;<br />+    }<br />+<br />+    return rc;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_acl_tbl_init_ex(ZXDH_ACL_CFG_EX_T *p_acl_cfg,<br />+                        uint32_t table_id,<br />+                        uint32_t as_enable,<br />+                        uint32_t entry_num,<br />+                        ZXDH_ACL_PRI_MODE_E pri_mode,<br />+                        uint32_t key_mode,<br />+                        ZXDH_ACL_AS_MODE_E as_mode,<br />+                        uint32_t as_baddr,<br />+                        uint32_t block_num,<br />+                        uint32_t *p_block_idx)<br />+{<br />+    uint32_t rc = 0;<br />+    uint32_t i = 0;<br />+<br />+    g_p_acl_ex_cfg[p_acl_cfg->dev_id] = p_acl_cfg;<br />+<br />+    if (p_acl_cfg->acl_tbls[table_id].is_used) {<br />+        PMD_DRV_LOG(ERR, "table_id[ %d ] is already used!", table_id);<br />+        RTE_ASSERT(0);<br />+        return ZXDH_ACL_RC_INVALID_TBLID;<br />+    }<br />+<br />+    if (!p_acl_cfg->acl_etcamids.is_valid) {<br />+        PMD_DRV_LOG(ERR, "etcam is not init!");<br />+        RTE_ASSERT(0);<br />+        return ZXDH_ACL_RC_ETCAMID_NOT_INIT;<br />+    }<br />+<br />+    if (zxdh_np_acl_entrynum_to_blocknum(entry_num, key_mode) > block_num) {<br />+        PMD_DRV_LOG(ERR, "key_mode[ %d ], the etcam block_num[ %d ] is not enough for entry_num[ 0x%x ].",<br />+                             key_mode, block_num, entry_num);<br />+        RTE_ASSERT(0);<br />+        return ZXDH_ACL_RC_INVALID_BLOCKNUM;<br />+    } else if (zxdh_np_acl_entrynum_to_blocknum(entry_num, key_mode) < block_num) {<br />+        PMD_DRV_LOG(DEBUG, "key_mode[ %d ], the etcam block_num[ %d ] is more than entry_num[ 0x%x ], better to reduce block_num in order to match with entry_num.",<br />+                             key_mode, block_num, entry_num);<br />+    } else {<br />+        PMD_DRV_LOG(DEBUG, "key_mode[ %d ], the etcam block_num[ %d ] is match with entry_num[ 0x%x ].",<br />+                             key_mode, block_num, entry_num);<br />+    }<br />+<br />+    p_acl_cfg->acl_tbls[table_id].as_enable = as_enable;<br />+<br />+    if (as_enable) {<br />+        p_acl_cfg->acl_tbls[table_id].as_idx_base = as_baddr;<br />+        p_acl_cfg->acl_tbls[table_id].as_rslt_buff =<br />+            rte_zmalloc(NULL, entry_num * ZXDH_ACL_AS_RSLT_SIZE_GET_EX(as_mode), 0);<br />+        if (p_acl_cfg->acl_tbls[table_id].as_rslt_buff == NULL) {<br />+            PMD_DRV_LOG(ERR, "malloc memory failed");<br />+            return ZXDH_PAR_CHK_POINT_NULL;<br />+        }<br />+    }<br />+<br />+    rc = (uint32_t)zxdh_comm_rb_init(&p_acl_cfg->acl_tbls[table_id].acl_rb, 0,<br />+        (sizeof(ZXDH_ACL_KEY_INFO_T) & 0xFFFFFFFFU) + ZXDH_ACL_KEYSIZE_GET(key_mode),<br />+        zxdh_np_acl_key_cmp);<br />+    ZXDH_COMM_CHECK_RC(rc, "zxdh_comm_rb_init");<br />+<br />+    p_acl_cfg->acl_tbls[table_id].table_id = table_id;<br />+    p_acl_cfg->acl_tbls[table_id].pri_mode = pri_mode;<br />+    p_acl_cfg->acl_tbls[table_id].key_mode = key_mode;<br />+    p_acl_cfg->acl_tbls[table_id].entry_num = entry_num;<br />+    p_acl_cfg->acl_tbls[table_id].as_mode = as_mode;<br />+    p_acl_cfg->acl_tbls[table_id].is_used = 1;<br />+<br />+    zxdh_np_init_d_node(&p_acl_cfg->acl_tbls[table_id].entry_dn,<br />+        &p_acl_cfg->acl_tbls[table_id]);<br />+    rc = zxdh_comm_double_link_insert_last(&p_acl_cfg->acl_tbls[table_id].entry_dn,<br />+        &p_acl_cfg->acl_etcamids.tbl_list);<br />+    ZXDH_COMM_CHECK_RC(rc, "zxdh_comm_double_link_insert_last");<br />+<br />+    p_acl_cfg->acl_tbls[table_id].block_num = block_num;<br />+    p_acl_cfg->acl_tbls[table_id].block_array =<br />+        rte_zmalloc(NULL, block_num * sizeof(uint32_t), 0);<br />+    if (p_acl_cfg->acl_tbls[table_id].block_array == NULL) {<br />+        PMD_DRV_LOG(ERR, "malloc memory failed");<br />+        return ZXDH_PAR_CHK_POINT_NULL;<br />+    }<br />+<br />+    for (i = 0; i < block_num; i++) {<br />+        if (p_acl_cfg->acl_blocks[p_block_idx[i]].is_used) {<br />+            PMD_DRV_LOG(ERR, "the block[ %d ] is already used by table[ %d ]!",<br />+                p_block_idx[i], p_acl_cfg->acl_blocks[p_block_idx[i]].tbl_id);<br />+            RTE_ASSERT(0);<br />+            return ZXDH_ACL_RC_INVALID_BLOCKID;<br />+        }<br />+<br />+        p_acl_cfg->acl_tbls[table_id].block_array[i] = p_block_idx[i];<br />+        p_acl_cfg->acl_blocks[p_block_idx[i]].is_used = 1;<br />+        p_acl_cfg->acl_blocks[p_block_idx[i]].tbl_id = table_id;<br />+        p_acl_cfg->acl_blocks[p_block_idx[i]].idx_base =<br />+            ((ZXDH_ACL_ENTRY_MAX_GET(key_mode, i)) >> ZXDH_BLOCK_IDXBASE_BIT_OFF) & <br />+                ZXDH_BLOCK_IDXBASE_BIT_MASK;<br />+    }<br />+<br />+    return ZXDH_OK;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_apt_acl_res_init(uint32_t dev_id, uint32_t tbl_num, ZXDH_APT_ACL_TABLE_T *p_acl_tbl_res)<br />+{<br />+    uint32_t rc = ZXDH_OK;<br />+    uint8_t index = 0;<br />+    ZXDH_APT_ACL_TABLE_T *p_temp_acl_tbl = NULL;<br />+<br />+    rc = zxdh_np_acl_cfg_init_ex(&g_apt_acl_cfg[dev_id],<br />+                        (void *)ZXDH_COMM_VAL_TO_PTR(dev_id),<br />+                        ZXDH_ACL_FLAG_ETCAM0_EN,<br />+                        NULL);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_acl_cfg_init_ex");<br />+<br />+    for (index = 0; index < tbl_num; index++) {<br />+        p_temp_acl_tbl = p_acl_tbl_res + index;<br />+        rc = zxdh_np_sdt_tbl_write(dev_id,<br />+                        p_temp_acl_tbl->sdt_no,<br />+                        p_temp_acl_tbl->acl_sdt.table_type,<br />+                        &p_temp_acl_tbl->acl_sdt,<br />+                        ZXDH_SDT_OPER_ADD);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_sdt_tbl_write");<br />+<br />+         rc = zxdh_np_acl_tbl_init_ex(&g_apt_acl_cfg[dev_id],<br />+                    p_temp_acl_tbl->acl_sdt.etcam_table_id,<br />+                    p_temp_acl_tbl->acl_sdt.as_en,<br />+                    p_temp_acl_tbl->acl_res.entry_num,<br />+                    p_temp_acl_tbl->acl_res.pri_mode,<br />+                    p_temp_acl_tbl->acl_sdt.etcam_key_mode,<br />+                    p_temp_acl_tbl->acl_sdt.as_rsp_mode,<br />+                    p_temp_acl_tbl->acl_sdt.as_eram_baddr,<br />+                    p_temp_acl_tbl->acl_res.block_num,<br />+                    p_temp_acl_tbl->acl_res.block_index);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_acl_tbl_init_ex");<br />+<br />+        rc = zxdh_np_apt_set_callback(dev_id,<br />+                        p_temp_acl_tbl->sdt_no,<br />+                        p_temp_acl_tbl->acl_sdt.table_type,<br />+                        (void *)p_temp_acl_tbl);<br />+        ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_apt_set_callback");<br />+    }<br />+<br />+    return rc;<br />+}<br />+<br />+static void<br />+zxdh_np_apt_stat_res_init(uint32_t dev_id, uint32_t type, ZXDH_APT_STAT_RES_INIT_T *stat_res_init)<br />+{<br />+    g_ppu_stat_cfg[dev_id].eram_baddr = stat_res_init->eram_baddr;<br />+    g_ppu_stat_cfg[dev_id].eram_depth = stat_res_init->eram_depth;<br />+<br />+    if (type == ZXDH_SE_NON_STD_NIC_RES_TYPE) {<br />+        g_ppu_stat_cfg[dev_id].ddr_base_addr = stat_res_init->ddr_baddr;<br />+        g_ppu_stat_cfg[dev_id].ppu_addr_offset = stat_res_init->ppu_ddr_offset;<br />+    }<br />+}<br />+<br /> static uint32_t<br /> zxdh_np_se_res_init(uint32_t dev_id, uint32_t type)<br /> {<br />     uint32_t rc = ZXDH_OK;<br />     ZXDH_APT_SE_RES_T *p_se_res = NULL;<br />     ZXDH_APT_HASH_RES_INIT_T hash_res_init = {0};<br />+    ZXDH_APT_ERAM_RES_INIT_T eram_res_init = {0};<br />+    ZXDH_APT_ACL_RES_INIT_T acl_res_init = {0};<br />  <br />     p_se_res = (ZXDH_APT_SE_RES_T *)zxdh_np_dev_get_se_res_ptr(dev_id, type);<br />     if (!p_se_res->valid) {<br />@@ -6303,8 +6949,14 @@ zxdh_np_se_res_init(uint32_t dev_id, uint32_t type)<br />  <br />     hash_res_init.func_num = p_se_res->hash_func_num;<br />     hash_res_init.bulk_num = p_se_res->hash_bulk_num;<br />+    hash_res_init.tbl_num = p_se_res->hash_tbl_num;<br />     hash_res_init.func_res = p_se_res->hash_func;<br />     hash_res_init.bulk_res = p_se_res->hash_bulk;<br />+    hash_res_init.tbl_res = p_se_res->hash_tbl;<br />+    eram_res_init.tbl_num = p_se_res->eram_num;<br />+    eram_res_init.eram_res = p_se_res->eram_tbl;<br />+    acl_res_init.tbl_num = p_se_res->acl_num;<br />+    acl_res_init.acl_res = p_se_res->acl_tbl;<br />  <br />     rc = zxdh_np_apt_hash_global_res_init(dev_id);<br />     ZXDH_COMM_CHECK_RC(rc, "zxdh_np_apt_hash_global_res_init");<br />@@ -6321,6 +6973,26 @@ zxdh_np_se_res_init(uint32_t dev_id, uint32_t type)<br />         ZXDH_COMM_CHECK_RC(rc, "zxdh_np_apt_hash_bulk_res_init");<br />     }<br />  <br />+    if (hash_res_init.tbl_num) {<br />+        rc = zxdh_np_apt_hash_tbl_res_init(dev_id, hash_res_init.tbl_num,<br />+            hash_res_init.tbl_res);<br />+        ZXDH_COMM_CHECK_RC(rc, "zxdh_np_apt_hash_tbl_res_init");<br />+    }<br />+<br />+    if (eram_res_init.tbl_num) {<br />+        rc = zxdh_np_apt_eram_res_init(dev_id, eram_res_init.tbl_num,<br />+            eram_res_init.eram_res);<br />+        ZXDH_COMM_CHECK_RC(rc, "zxdh_np_apt_eram_res_init");<br />+    }<br />+<br />+    if (acl_res_init.tbl_num) {<br />+        rc = zxdh_np_apt_acl_res_init(dev_id, acl_res_init.tbl_num,<br />+            acl_res_init.acl_res);<br />+        ZXDH_COMM_CHECK_RC(rc, "zxdh_np_apt_acl_res_init");<br />+    }<br />+<br />+    zxdh_np_apt_stat_res_init(dev_id, type, &p_se_res->stat_cfg);<br />+<br />     return rc;<br /> }<br />  <br />diff --git a/drivers/net/zxdh/zxdh_np.h b/drivers/net/zxdh/zxdh_np.h<br />index 009a50c42f..813afff647 100644<br />--- a/drivers/net/zxdh/zxdh_np.h<br />+++ b/drivers/net/zxdh/zxdh_np.h<br />@@ -103,6 +103,10 @@<br /> #define ZXDH_ETCAM_WR_MASK_MAX         (((uint32_t)1 << ZXDH_ETCAM_RAM_NUM) - 1)<br /> #define ZXDH_ETCAM_WIDTH_MIN           (ZXDH_ETCAM_RAM_WIDTH)<br /> #define ZXDH_ETCAM_WIDTH_MAX           (ZXDH_ETCAM_RAM_NUM * ZXDH_ETCAM_RAM_WIDTH)<br />+#define ZXDH_ETCAM_RAM_DEPTH           (512)<br />+#define ZXDH_ACL_FLAG_ETCAM0_EN        (1 << 0)<br />+#define ZXDH_BLOCK_IDXBASE_BIT_OFF     (9)<br />+#define ZXDH_BLOCK_IDXBASE_BIT_MASK    (0x7f)<br />  <br /> #define ZXDH_DTB_TABLE_DATA_BUFF_SIZE           (16384)<br /> #define ZXDH_DTB_TABLE_CMD_SIZE_BIT             (128)<br />@@ -173,6 +177,57 @@<br /> #define ZXDH_COMM_PTR_TO_VAL(p)                 ((uint64_t)(p))<br /> #define ZXDH_COMM_VAL_TO_PTR(v)                 ((void *)((uint64_t)(v)))<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 />@@ -295,6 +350,28 @@<br /> #define ZXDH_SE_RC_FUN_INVALID                  (ZXDH_SE_RC_CFG_BASE | 0x2)<br /> #define ZXDH_SE_RC_PARA_INVALID                 (ZXDH_SE_RC_CFG_BASE | 0x3)<br />  <br />+#define ZXDH_RC_TABLE_BASE                      (0x800)<br />+#define ZXDH_RC_TABLE_PARA_INVALID              (ZXDH_RC_TABLE_BASE | 0x0)<br />+#define ZXDH_RC_TABLE_RANGE_INVALID             (ZXDH_RC_TABLE_BASE | 0x1)<br />+#define ZXDH_RC_TABLE_CALL_FUNC_FAIL            (ZXDH_RC_TABLE_BASE | 0x2)<br />+#define ZXDH_RC_TABLE_SDT_MSG_INVALID           (ZXDH_RC_TABLE_BASE | 0x3)<br />+#define ZXDH_RC_TABLE_SDT_MGR_INVALID           (ZXDH_RC_TABLE_BASE | 0x4)<br />+#define ZXDH_RC_TABLE_IF_VALUE_FAIL             (ZXDH_RC_TABLE_BASE | 0x5)<br />+<br />+#define ZXDH_ACL_RC_BASE                        (0x60000)<br />+#define ZXDH_ACL_RC_INVALID_TBLID               (ZXDH_ACL_RC_BASE | 0x0)<br />+#define ZXDH_ACL_RC_INVALID_BLOCKNUM            (ZXDH_ACL_RC_BASE | 0x1)<br />+#define ZXDH_ACL_RC_INVALID_BLOCKID             (ZXDH_ACL_RC_BASE | 0x2)<br />+#define ZXDH_ACL_RC_TBL_NOT_INIT                (ZXDH_ACL_RC_BASE | 0x3)<br />+#define ZXDH_ACL_RC_ETCAMID_NOT_INIT            (ZXDH_ACL_RC_BASE | 0x4)<br />+#define ZXDH_ACL_RC_AS_ERAM_NOT_ENOUGH          (ZXDH_ACL_RC_BASE | 0x5)<br />+#define ZXDH_ACL_RC_RB_TREE_FULL                (ZXDH_ACL_RC_BASE | 0x6)<br />+#define ZXDH_ACL_RC_TABLE_FULL                  (ZXDH_ACL_RC_BASE | 0x7)<br />+#define ZXDH_ACL_RC_INVALID_PARA                (ZXDH_ACL_RC_BASE | 0x8)<br />+#define ZXDH_ACL_RC_DEL_SRHFAIL                 (ZXDH_ACL_RC_BASE | 0x9)<br />+#define ZXDH_ACL_RC_TABLE_UPDATE                (ZXDH_ACL_RC_BASE | 0xa)<br />+#define ZXDH_ACL_RC_SRH_FAIL                    (ZXDH_ACL_RC_BASE | 0xb)<br />+<br /> #define ZXDH_SCHE_RSP_LEN                       (2)<br /> #define ZXDH_G_PROFILE_ID_LEN                   (8)<br />  <br />@@ -481,6 +558,21 @@ typedef enum zxdh_se_fun_type_e {<br />     ZXDH_FUN_MAX<br /> } ZXDH_SE_FUN_TYPE;<br />  <br />+typedef enum zxdh_acl_as_mode_e {<br />+    ZXDH_ACL_AS_MODE_16b  = 0,<br />+    ZXDH_ACL_AS_MODE_32b  = 1,<br />+    ZXDH_ACL_AS_MODE_64b  = 2,<br />+    ZXDH_ACL_AS_MODE_128b = 3,<br />+    ZXDH_ACL_AS_MODE_INVALID,<br />+} ZXDH_ACL_AS_MODE_E;<br />+<br />+typedef enum zxdh_hash_key_type_e {<br />+    ZXDH_HASH_KEY_INVALID = 0,<br />+    ZXDH_HASH_KEY_128b,<br />+    ZXDH_HASH_KEY_256b,<br />+    ZXDH_HASH_KEY_512b,<br />+} ZXDH_HASH_KEY_TYPE;<br />+<br /> typedef struct zxdh_avl_node_t {<br />     void                    *p_key;<br />     uint32_t                result;<br />@@ -904,6 +996,101 @@ typedef struct zxdh_dev_apt_se_tbl_res_t {<br />     ZXDH_APT_SE_RES_T   offload_res;<br /> } ZXDH_DEV_APT_SE_TBL_RES_T;<br />  <br />+typedef struct se_apt_eram_func_t {<br />+    uint32_t opr_mode;<br />+    uint32_t rd_mode;<br />+    ZXDH_APT_ERAM_SET_FUNC  eram_set_func;<br />+    ZXDH_APT_ERAM_GET_FUNC  eram_get_func;<br />+} ZXDH_SE_APT_ERAM_FUNC_T;<br />+<br />+typedef struct se_apt_acl_func_t {<br />+    uint32_t sdt_partner;<br />+    ZXDH_APT_ACL_ENTRY_SET_FUNC  acl_set_func;<br />+    ZXDH_APT_ACL_ENTRY_GET_FUNC  acl_get_func;<br />+} ZXDH_SE_APT_ACL_FUNC_T;<br />+<br />+typedef struct se_apt_hash_func_t {<br />+    uint32_t sdt_partner;<br />+    ZXDH_APT_HASH_ENTRY_SET_FUNC  hash_set_func;<br />+    ZXDH_APT_HASH_ENTRY_GET_FUNC  hash_get_func;<br />+} ZXDH_SE_APT_HASH_FUNC_T;<br />+<br />+typedef struct se_apt_callback_t {<br />+    uint32_t sdt_no;<br />+    uint32_t table_type;<br />+    union {<br />+        ZXDH_SE_APT_ERAM_FUNC_T eram_func;<br />+        ZXDH_SE_APT_ACL_FUNC_T  acl_func;<br />+        ZXDH_SE_APT_HASH_FUNC_T hash_func;<br />+    } se_func_info;<br />+} SE_APT_CALLBACK_T;<br />+<br />+typedef struct zxdh_acl_block_info_t {<br />+    uint32_t is_used;<br />+    uint32_t tbl_id;<br />+    uint32_t idx_base;<br />+} ZXDH_ACL_BLOCK_INFO_T;<br />+<br />+typedef struct zxdh_acl_etcamid_cfg_t {<br />+    uint32_t is_valid;<br />+    uint32_t as_enable;<br />+    uint32_t as_idx_offset;<br />+    uint32_t as_eram_base;<br />+    ZXDH_D_HEAD tbl_list;<br />+} ZXDH_ACL_ETCAMID_CFG_T;<br />+<br />+typedef struct zxdh_acl_key_info_t {<br />+    uint32_t handle;<br />+    uint32_t pri;<br />+    uint8_t   key[0];<br />+} ZXDH_ACL_KEY_INFO_T;<br />+<br />+typedef uint32_t (*ZXDH_ACL_TBL_AS_DDR_WR_FUN)(uint32_t dev_id, uint32_t tbl_type,<br />+        uint32_t tbl_id, uint32_t dir_tbl_share_type, uint32_t dir_tbl_base_addr,<br />+        uint32_t ecc_en, uint32_t index, uint32_t as_mode, uint8_t *p_data);<br />+typedef uint32_t (*ZXDH_ACL_TBL_AS_DDR_RD_FUN)(uint32_t dev_id, uint32_t base_addr,<br />+        uint32_t index, uint32_t as_mode, uint8_t *p_data);<br />+typedef uint32_t (*ZXDH_ACL_AS_RSLT_WRT_FUNCTION)(uint32_t dev_id,<br />+        uint32_t base_addr, uint32_t index, uint32_t as_mode, uint8_t *p_data);<br />+<br />+typedef struct zxdh_acl_tbl_cfg_t {<br />+    uint32_t tbl_type;<br />+    uint32_t table_id;<br />+    uint8_t  is_as_ddr;<br />+    uint8_t  ddr_bankcp_info;<br />+    uint32_t dir_tbl_share_type;<br />+    uint8_t  ddr_ecc_en;<br />+    uint32_t pri_mode;<br />+    uint32_t key_mode;<br />+    uint32_t entry_num;<br />+    uint32_t block_num;<br />+    uint32_t *block_array;<br />+    uint32_t is_used;<br />+    uint32_t as_mode;<br />+    uint32_t as_idx_base;<br />+    uint32_t as_enable;<br />+    uint32_t as_eram_base;<br />+    uint32_t ddr_baddr;<br />+    uint32_t idx_offset;<br />+    ZXDH_ACL_TBL_AS_DDR_WR_FUN p_as_ddr_wr_fun;<br />+    ZXDH_ACL_TBL_AS_DDR_RD_FUN p_as_ddr_rd_fun;<br />+    ZXDH_D_NODE entry_dn;<br />+    ZXDH_RB_CFG acl_rb;<br />+    ZXDH_ACL_KEY_INFO_T **acl_key_buff;<br />+    uint8_t *as_rslt_buff;<br />+} ZXDH_ACL_TBL_CFG_T;<br />+<br />+typedef struct zxdh_acl_cfg_ex_t {<br />+    void *p_client;<br />+    uint32_t dev_id;<br />+    uint32_t flags;<br />+    ZXDH_ACL_AS_RSLT_WRT_FUNCTION p_as_rslt_write_fun;<br />+    ZXDH_ACL_AS_RSLT_WRT_FUNCTION p_as_rslt_read_fun;<br />+    ZXDH_ACL_BLOCK_INFO_T acl_blocks[ZXDH_ACL_BLOCK_NUM];<br />+    ZXDH_ACL_ETCAMID_CFG_T acl_etcamids;<br />+    ZXDH_ACL_TBL_CFG_T acl_tbls[ZXDH_ACL_TBL_ID_NUM];<br />+} ZXDH_ACL_CFG_EX_T;<br />+<br /> typedef struct zxdh_spin_lock_t {<br />     rte_spinlock_t spinlock;<br /> } ZXDH_SPINLOCK_T;<br />--  <br />2.27.0<br />