Implement the flow tables resources get operation<br />by agent channel.<br /> <br />Signed-off-by: Bingbin Chen <chen.bingbin@zte.com.cn> <br />---<br /> drivers/net/zxdh/zxdh_ethdev.c |  13 +<br /> drivers/net/zxdh/zxdh_ethdev.h |   1 +<br /> drivers/net/zxdh/zxdh_np.c     | 492 +++++++++++++++++++++++++++++++++<br /> drivers/net/zxdh/zxdh_np.h     | 282 +++++++++++++++++++<br /> 4 files changed, 788 insertions(+)<br /> <br />diff --git a/drivers/net/zxdh/zxdh_ethdev.c b/drivers/net/zxdh/zxdh_ethdev.c<br />index e683cbd616..ea34b9229b 100644<br />--- a/drivers/net/zxdh/zxdh_ethdev.c<br />+++ b/drivers/net/zxdh/zxdh_ethdev.c<br />@@ -1809,6 +1809,19 @@ zxdh_np_init(struct rte_eth_dev *eth_dev)<br />             return ret;<br />         }<br />     }<br />+<br />+    if (hw->is_pf) {<br />+        ret = zxdh_np_se_res_get_and_init(hw->dev_id, ZXDH_SE_STD_NIC_RES_TYPE);<br />+        if (ret) {<br />+            PMD_DRV_LOG(ERR, "dpp apt init failed, code:%d ", ret);<br />+            return -ret;<br />+        }<br />+        if (hw->hash_search_index >= ZXDH_HASHIDX_MAX) {<br />+            PMD_DRV_LOG(ERR, "invalid hash idx %d", hw->hash_search_index);<br />+            return -1;<br />+        }<br />+    }<br />+<br />     if (zxdh_shared_data != NULL)<br />         zxdh_shared_data->np_init_done = 1;<br />  <br />diff --git a/drivers/net/zxdh/zxdh_ethdev.h b/drivers/net/zxdh/zxdh_ethdev.h<br />index 04b0b58c74..261acd17c3 100644<br />--- a/drivers/net/zxdh/zxdh_ethdev.h<br />+++ b/drivers/net/zxdh/zxdh_ethdev.h<br />@@ -44,6 +44,7 @@<br /> #define ZXDH_MAX_NAME_LEN               32<br /> #define ZXDH_SLOT_MAX             256<br /> #define ZXDH_MAX_VF               256<br />+#define ZXDH_HASHIDX_MAX          6<br />  <br /> union zxdh_virport_num {<br />     uint16_t vport;<br />diff --git a/drivers/net/zxdh/zxdh_np.c b/drivers/net/zxdh/zxdh_np.c<br />index fd9c7b47c9..c93f8eb0fb 100644<br />--- a/drivers/net/zxdh/zxdh_np.c<br />+++ b/drivers/net/zxdh/zxdh_np.c<br />@@ -2508,6 +2508,40 @@ zxdh_np_agent_channel_dtb_queue_release(uint32_t dev_id,<br />     return msg_result;<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_agent_channel_se_res_get(uint32_t dev_id,<br />+                                uint32_t sub_type,<br />+                                uint32_t opr,<br />+                                uint32_t *p_rsp_buff,<br />+                                uint32_t buff_size)<br />+{<br />+    uint32_t rc = ZXDH_OK;<br />+<br />+    uint32_t msg_result = 0;<br />+    ZXDH_AGENT_SE_RES_MSG_T msgcfg = {<br />+        .dev_id   = 0,<br />+        .type     = ZXDH_RES_MSG,<br />+        .sub_type = sub_type,<br />+        .oper     = opr,<br />+    };<br />+    ZXDH_AGENT_CHANNEL_MSG_T agent_msg = {<br />+        .msg = (void *)&msgcfg,<br />+        .msg_len = sizeof(ZXDH_AGENT_SE_RES_MSG_T),<br />+    };<br />+<br />+    rc = zxdh_np_agent_channel_sync_send(dev_id, &agent_msg, p_rsp_buff, buff_size);<br />+    if (rc != ZXDH_OK) {<br />+        PMD_DRV_LOG(ERR, "agent send msg failed");<br />+        return ZXDH_ERR;<br />+    }<br />+<br />+    msg_result = p_rsp_buff[0];<br />+    PMD_DRV_LOG(DEBUG, "msg_result: 0x%x", msg_result);<br />+    zxdh_np_agent_msg_prt(msgcfg.type, msg_result);<br />+<br />+    return msg_result;<br />+}<br />+<br /> static ZXDH_DTB_MGR_T *<br /> zxdh_np_dtb_mgr_get(uint32_t dev_id)<br /> {<br />@@ -5239,6 +5273,464 @@ zxdh_np_host_init(uint32_t dev_id,<br />     return 0;<br /> }<br />  <br />+static uint32_t<br />+zxdh_np_get_se_buff_size(uint32_t opr)<br />+{<br />+    uint32_t buff_size = 0;<br />+<br />+    switch (opr) {<br />+    case ZXDH_HASH_FUNC_BULK_REQ:<br />+        buff_size = sizeof(ZXDH_NP_SE_HASH_FUNC_BULK_T);<br />+        break;<br />+    case ZXDH_HASH_TBL_REQ:<br />+        buff_size = sizeof(ZXDH_NP_SE_HASH_TBL_T);<br />+        break;<br />+    case ZXDH_ERAM_TBL_REQ:<br />+        buff_size = sizeof(ZXDH_NP_SE_ERAM_TBL_T);<br />+        break;<br />+    case ZXDH_ACL_TBL_REQ:<br />+        buff_size = sizeof(ZXDH_NP_SE_ACL_TBL_T);<br />+        break;<br />+    case ZXDH_STAT_CFG_REQ:<br />+        buff_size = sizeof(ZXDH_NP_SE_STAT_CFG_T);<br />+        break;<br />+    default:<br />+        break;<br />+    }<br />+<br />+    return buff_size;<br />+}<br />+<br />+static void<br />+zxdh_np_hash_func_bulk_set(ZXDH_APT_HASH_RES_INIT_T *p_hash_res_init,<br />+                        ZXDH_NP_SE_HASH_FUNC_BULK_T *p_func_bulk)<br />+{<br />+    uint32_t index  = 0;<br />+    ZXDH_APT_HASH_FUNC_RES_T *p_func_res = NULL;<br />+    ZXDH_APT_HASH_BULK_RES_T *p_bulk_res = NULL;<br />+<br />+    p_hash_res_init->func_num = p_func_bulk->func_num;<br />+    p_hash_res_init->bulk_num = p_func_bulk->bulk_num;<br />+    for (index = 0; index < (p_hash_res_init->func_num); index++) {<br />+        p_func_res = p_hash_res_init->func_res + index;<br />+<br />+        p_func_res->func_id     = p_func_bulk->fun[index].func_id;<br />+        p_func_res->ddr_dis     = p_func_bulk->fun[index].ddr_dis;<br />+        p_func_res->zblk_num    = p_func_bulk->fun[index].zblk_num;<br />+        p_func_res->zblk_bitmap = p_func_bulk->fun[index].zblk_bitmap;<br />+    }<br />+<br />+    for (index = 0; index < (p_hash_res_init->bulk_num); index++) {<br />+        p_bulk_res = p_hash_res_init->bulk_res + index;<br />+<br />+        p_bulk_res->func_id        = p_func_bulk->bulk[index].func_id;<br />+        p_bulk_res->bulk_id        = p_func_bulk->bulk[index].bulk_id;<br />+        p_bulk_res->zcell_num      = p_func_bulk->bulk[index].zcell_num;<br />+        p_bulk_res->zreg_num       = p_func_bulk->bulk[index].zreg_num;<br />+        p_bulk_res->ddr_baddr      = p_func_bulk->bulk[index].ddr_baddr;<br />+        p_bulk_res->ddr_item_num   = p_func_bulk->bulk[index].ddr_item_num;<br />+        p_bulk_res->ddr_width_mode = p_func_bulk->bulk[index].ddr_width_mode;<br />+        p_bulk_res->ddr_crc_sel    = p_func_bulk->bulk[index].ddr_crc_sel;<br />+        p_bulk_res->ddr_ecc_en     = p_func_bulk->bulk[index].ddr_ecc_en;<br />+    }<br />+}<br />+<br />+static void<br />+zxdh_np_hash_tbl_set(ZXDH_APT_HASH_RES_INIT_T *p_hash_res_init, ZXDH_NP_SE_HASH_TBL_T *p_hash_tbl)<br />+{<br />+    uint32_t index  = 0;<br />+    ZXDH_APT_HASH_TABLE_T  *p_tbl_res = NULL;<br />+<br />+    p_hash_res_init->tbl_num = p_hash_tbl->tbl_num;<br />+    for (index = 0; index < (p_hash_res_init->tbl_num); index++) {<br />+        p_tbl_res = p_hash_res_init->tbl_res + index;<br />+<br />+        p_tbl_res->sdt_no = p_hash_tbl->table[index].sdt_no;<br />+        p_tbl_res->sdt_partner = p_hash_tbl->table[index].sdt_partner;<br />+        p_tbl_res->tbl_flag    = p_hash_tbl->table[index].tbl_flag;<br />+        p_tbl_res->hash_sdt.table_type =<br />+            p_hash_tbl->table[index].hash_sdt.table_type;<br />+        p_tbl_res->hash_sdt.hash_id    = p_hash_tbl->table[index].hash_sdt.hash_id;<br />+        p_tbl_res->hash_sdt.hash_table_width =<br />+            p_hash_tbl->table[index].hash_sdt.hash_table_width;<br />+        p_tbl_res->hash_sdt.key_size = p_hash_tbl->table[index].hash_sdt.key_size;<br />+        p_tbl_res->hash_sdt.hash_table_id =<br />+            p_hash_tbl->table[index].hash_sdt.hash_table_id;<br />+        p_tbl_res->hash_sdt.learn_en = p_hash_tbl->table[index].hash_sdt.learn_en;<br />+        p_tbl_res->hash_sdt.keep_alive =<br />+            p_hash_tbl->table[index].hash_sdt.keep_alive;<br />+        p_tbl_res->hash_sdt.keep_alive_baddr =<br />+            p_hash_tbl->table[index].hash_sdt.keep_alive_baddr;<br />+        p_tbl_res->hash_sdt.rsp_mode =<br />+            p_hash_tbl->table[index].hash_sdt.rsp_mode;<br />+        p_tbl_res->hash_sdt.hash_clutch_en =<br />+            p_hash_tbl->table[index].hash_sdt.hash_clutch_en;<br />+    }<br />+}<br />+<br />+static void<br />+zxdh_np_eram_tbl_set(ZXDH_APT_ERAM_RES_INIT_T *p_eam_res_init, ZXDH_NP_SE_ERAM_TBL_T *p_eram_tbl)<br />+{<br />+    uint32_t index  = 0;<br />+    ZXDH_APT_ERAM_TABLE_T *p_eram_res = NULL;<br />+<br />+    p_eam_res_init->tbl_num = p_eram_tbl->tbl_num;<br />+    for (index = 0; index < (p_eam_res_init->tbl_num); index++) {<br />+        p_eram_res = p_eam_res_init->eram_res + index;<br />+<br />+        p_eram_res->sdt_no    = p_eram_tbl->eram[index].sdt_no;<br />+        p_eram_res->opr_mode = p_eram_tbl->eram[index].opr_mode;<br />+        p_eram_res->rd_mode    = p_eram_tbl->eram[index].rd_mode;<br />+        p_eram_res->eram_sdt.table_type    = p_eram_tbl->eram[index].eram_sdt.table_type;<br />+        p_eram_res->eram_sdt.eram_mode = p_eram_tbl->eram[index].eram_sdt.eram_mode;<br />+        p_eram_res->eram_sdt.eram_base_addr =<br />+            p_eram_tbl->eram[index].eram_sdt.eram_base_addr;<br />+        p_eram_res->eram_sdt.eram_table_depth =<br />+            p_eram_tbl->eram[index].eram_sdt.eram_table_depth;<br />+        p_eram_res->eram_sdt.eram_clutch_en =<br />+            p_eram_tbl->eram[index].eram_sdt.eram_clutch_en;<br />+    }<br />+}<br />+<br />+static void<br />+zxdh_np_acl_tbl_set(ZXDH_APT_ACL_RES_INIT_T *p_acl_res_init, ZXDH_NP_SE_ACL_TBL_T *p_acl_tbl)<br />+{<br />+    uint32_t index  = 0;<br />+    ZXDH_APT_ACL_TABLE_T *p_acl_res = NULL;<br />+<br />+    p_acl_res_init->tbl_num = p_acl_tbl->tbl_num;<br />+    for (index = 0; index < (p_acl_tbl->tbl_num); index++) {<br />+        p_acl_res = p_acl_res_init->acl_res + index;<br />+<br />+        p_acl_res->sdt_no = p_acl_tbl->acl[index].sdt_no;<br />+        p_acl_res->sdt_partner = p_acl_tbl->acl[index].sdt_partner;<br />+        p_acl_res->acl_res.block_num = p_acl_tbl->acl[index].acl_res.block_num;<br />+         p_acl_res->acl_res.entry_num = p_acl_tbl->acl[index].acl_res.entry_num;<br />+        p_acl_res->acl_res.pri_mode    = p_acl_tbl->acl[index].acl_res.pri_mode;<br />+        memcpy(p_acl_res->acl_res.block_index,<br />+            p_acl_tbl->acl[index].acl_res.block_index,<br />+            sizeof(uint32_t) * ZXDH_ETCAM_BLOCK_NUM);<br />+        p_acl_res->acl_sdt.table_type = p_acl_tbl->acl[index].acl_sdt.table_type;<br />+        p_acl_res->acl_sdt.etcam_id    = p_acl_tbl->acl[index].acl_sdt.etcam_id;<br />+        p_acl_res->acl_sdt.etcam_key_mode = p_acl_tbl->acl[index].acl_sdt.etcam_key_mode;<br />+        p_acl_res->acl_sdt.etcam_table_id = p_acl_tbl->acl[index].acl_sdt.etcam_table_id;<br />+        p_acl_res->acl_sdt.no_as_rsp_mode = p_acl_tbl->acl[index].acl_sdt.no_as_rsp_mode;<br />+        p_acl_res->acl_sdt.as_en = p_acl_tbl->acl[index].acl_sdt.as_en;<br />+        p_acl_res->acl_sdt.as_eram_baddr = p_acl_tbl->acl[index].acl_sdt.as_eram_baddr;<br />+        p_acl_res->acl_sdt.as_rsp_mode = p_acl_tbl->acl[index].acl_sdt.as_rsp_mode;<br />+        p_acl_res->acl_sdt.etcam_table_depth =<br />+            p_acl_tbl->acl[index].acl_sdt.etcam_table_depth;<br />+        p_acl_res->acl_sdt.etcam_clutch_en = p_acl_tbl->acl[index].acl_sdt.etcam_clutch_en;<br />+    }<br />+}<br />+<br />+static void<br />+zxdh_np_stat_cfg_set(ZXDH_APT_STAT_RES_INIT_T *p_stat_res_init, ZXDH_NP_SE_STAT_CFG_T *p_stat_cfg)<br />+{<br />+    p_stat_res_init->eram_baddr     = p_stat_cfg->eram_baddr;<br />+    p_stat_res_init->eram_depth     = p_stat_cfg->eram_depth;<br />+    p_stat_res_init->ddr_baddr      = p_stat_cfg->ddr_baddr;<br />+    p_stat_res_init->ppu_ddr_offset = p_stat_cfg->ppu_ddr_offset;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_agent_hash_func_bulk_get(uint32_t dev_id, uint32_t type,<br />+                        ZXDH_APT_HASH_RES_INIT_T *p_hash_res_init)<br />+{<br />+    uint32_t rc = ZXDH_OK;<br />+    uint32_t opr = ZXDH_HASH_FUNC_BULK_REQ;<br />+    uint32_t sub_type = ZXDH_RES_STD_NIC_MSG;<br />+    uint32_t buff_size = 0;<br />+    ZXDH_SPINLOCK_T *p_dtb_spinlock = NULL;<br />+    uint32_t *p_rsp_buff = NULL;<br />+    ZXDH_NP_SE_HASH_FUNC_BULK_T *p_func_bulk = NULL;<br />+    ZXDH_DEV_SPINLOCK_TYPE_E spinlock = ZXDH_DEV_SPINLOCK_T_DTB;<br />+<br />+    rc = zxdh_np_dev_opr_spinlock_get(dev_id, (uint32_t)spinlock, &p_dtb_spinlock);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_opr_spinlock_get");<br />+<br />+    rte_spinlock_lock(&p_dtb_spinlock->spinlock);<br />+<br />+    buff_size = zxdh_np_get_se_buff_size(opr) + sizeof(uint32_t);<br />+    p_rsp_buff = rte_zmalloc(NULL, buff_size, 0);<br />+    if (p_rsp_buff == NULL) {<br />+        PMD_DRV_LOG(ERR, "malloc memory failed");<br />+        rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+        return ZXDH_PAR_CHK_POINT_NULL;<br />+    }<br />+<br />+    sub_type = (type == ZXDH_SE_STD_NIC_RES_TYPE) ? ZXDH_RES_STD_NIC_MSG : ZXDH_RES_OFFLOAD_MSG;<br />+<br />+    rc = zxdh_np_agent_channel_se_res_get(dev_id, sub_type, opr, p_rsp_buff, buff_size);<br />+    if (rc != ZXDH_OK) {<br />+        rte_free(p_rsp_buff);<br />+        PMD_DRV_LOG(ERR, "hash func&bulk res get fail rc=0x%x.", rc);<br />+        rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+        return ZXDH_ERR;<br />+    }<br />+<br />+    rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+<br />+    p_func_bulk = (ZXDH_NP_SE_HASH_FUNC_BULK_T *)(p_rsp_buff + 1);<br />+    zxdh_np_hash_func_bulk_set(p_hash_res_init, p_func_bulk);<br />+    rte_free(p_rsp_buff);<br />+<br />+    return rc;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_agent_hash_tbl_get(uint32_t dev_id,<br />+            uint32_t type,<br />+            ZXDH_APT_HASH_RES_INIT_T *p_hash_res_init)<br />+{<br />+    uint32_t rc = ZXDH_OK;<br />+    uint32_t opr = ZXDH_HASH_TBL_REQ;<br />+    uint32_t sub_type = ZXDH_RES_STD_NIC_MSG;<br />+    uint32_t buff_size = 0;<br />+    ZXDH_SPINLOCK_T *p_dtb_spinlock = NULL;<br />+    uint32_t *p_rsp_buff = NULL;<br />+    ZXDH_NP_SE_HASH_TBL_T *p_hash_tbl = NULL;<br />+    ZXDH_DEV_SPINLOCK_TYPE_E spinlock = ZXDH_DEV_SPINLOCK_T_DTB;<br />+<br />+    rc = zxdh_np_dev_opr_spinlock_get(dev_id, (uint32_t)spinlock, &p_dtb_spinlock);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_opr_spinlock_get");<br />+<br />+    rte_spinlock_lock(&p_dtb_spinlock->spinlock);<br />+<br />+    buff_size = zxdh_np_get_se_buff_size(opr) + sizeof(uint32_t);<br />+    p_rsp_buff = rte_zmalloc(NULL, buff_size, 0);<br />+    if (p_rsp_buff == NULL) {<br />+        PMD_DRV_LOG(ERR, "malloc memory failed");<br />+        rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+        return ZXDH_PAR_CHK_POINT_NULL;<br />+    }<br />+<br />+    sub_type = (type == ZXDH_SE_STD_NIC_RES_TYPE) ?<br />+        ZXDH_RES_STD_NIC_MSG : ZXDH_RES_OFFLOAD_MSG;<br />+<br />+    rc = zxdh_np_agent_channel_se_res_get(dev_id, sub_type, opr, p_rsp_buff, buff_size);<br />+    if (rc != ZXDH_OK) {<br />+        rte_free(p_rsp_buff);<br />+        PMD_DRV_LOG(ERR, "hash table res get fail rc=0x%x.", rc);<br />+        rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+        return ZXDH_ERR;<br />+    }<br />+<br />+    rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+<br />+    p_hash_tbl = (ZXDH_NP_SE_HASH_TBL_T *)(p_rsp_buff + 1);<br />+    zxdh_np_hash_tbl_set(p_hash_res_init, p_hash_tbl);<br />+    rte_free(p_rsp_buff);<br />+<br />+    return rc;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_agent_eram_tbl_get(uint32_t dev_id, uint32_t type, ZXDH_APT_ERAM_RES_INIT_T *p_eam_res_init)<br />+{<br />+    uint32_t rc = ZXDH_OK;<br />+    uint32_t opr = ZXDH_ERAM_TBL_REQ;<br />+    uint32_t sub_type = ZXDH_RES_STD_NIC_MSG;<br />+    uint32_t buff_size = 0;<br />+    ZXDH_SPINLOCK_T *p_dtb_spinlock = NULL;<br />+    uint32_t *p_rsp_buff = NULL;<br />+    ZXDH_NP_SE_ERAM_TBL_T *p_eram_tbl = NULL;<br />+    ZXDH_DEV_SPINLOCK_TYPE_E spinlock = ZXDH_DEV_SPINLOCK_T_DTB;<br />+<br />+    rc = zxdh_np_dev_opr_spinlock_get(dev_id, (uint32_t)spinlock, &p_dtb_spinlock);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_opr_spinlock_get");<br />+<br />+    rte_spinlock_lock(&p_dtb_spinlock->spinlock);<br />+<br />+    buff_size = zxdh_np_get_se_buff_size(opr) + sizeof(uint32_t);<br />+    p_rsp_buff = rte_zmalloc(NULL, buff_size, 0);<br />+    if (p_rsp_buff == NULL) {<br />+        PMD_DRV_LOG(ERR, "malloc memory failed");<br />+        rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+        return ZXDH_PAR_CHK_POINT_NULL;<br />+    }<br />+<br />+    sub_type = (type == ZXDH_SE_STD_NIC_RES_TYPE) ?<br />+        ZXDH_RES_STD_NIC_MSG : ZXDH_RES_OFFLOAD_MSG;<br />+<br />+    rc = zxdh_np_agent_channel_se_res_get(dev_id, sub_type, opr, p_rsp_buff, buff_size);<br />+    if (rc != ZXDH_OK) {<br />+        rte_free(p_rsp_buff);<br />+        PMD_DRV_LOG(ERR, "eram table res get fail rc=0x%x.", rc);<br />+        rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+        return ZXDH_ERR;<br />+    }<br />+<br />+    rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+<br />+    p_eram_tbl = (ZXDH_NP_SE_ERAM_TBL_T *)(p_rsp_buff + 1);<br />+    zxdh_np_eram_tbl_set(p_eam_res_init, p_eram_tbl);<br />+    rte_free(p_rsp_buff);<br />+<br />+    return rc;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_agent_acl_tbl_get(uint32_t dev_id, uint32_t type, ZXDH_APT_ACL_RES_INIT_T *p_acl_res_init)<br />+{<br />+    uint32_t rc = ZXDH_OK;<br />+    uint32_t opr = ZXDH_ACL_TBL_REQ;<br />+    uint32_t sub_type = ZXDH_RES_STD_NIC_MSG;<br />+    uint32_t buff_size = 0;<br />+    ZXDH_SPINLOCK_T *p_dtb_spinlock = NULL;<br />+    uint32_t *p_rsp_buff = NULL;<br />+    ZXDH_NP_SE_ACL_TBL_T *p_acl_tbl = NULL;<br />+    ZXDH_DEV_SPINLOCK_TYPE_E spinlock = ZXDH_DEV_SPINLOCK_T_DTB;<br />+<br />+    rc = zxdh_np_dev_opr_spinlock_get(dev_id, (uint32_t)spinlock, &p_dtb_spinlock);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_opr_spinlock_get");<br />+<br />+    rte_spinlock_lock(&p_dtb_spinlock->spinlock);<br />+<br />+    buff_size = zxdh_np_get_se_buff_size(opr) + sizeof(uint32_t);<br />+    p_rsp_buff = rte_zmalloc(NULL, buff_size, 0);<br />+    if (p_rsp_buff == NULL) {<br />+        PMD_DRV_LOG(ERR, "malloc memory failed");<br />+        rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+        return ZXDH_PAR_CHK_POINT_NULL;<br />+    }<br />+<br />+    sub_type = (type == ZXDH_SE_STD_NIC_RES_TYPE) ?<br />+        ZXDH_RES_STD_NIC_MSG : ZXDH_RES_OFFLOAD_MSG;<br />+<br />+    rc = zxdh_np_agent_channel_se_res_get(dev_id, sub_type, opr, p_rsp_buff, buff_size);<br />+    if (rc != ZXDH_OK) {<br />+        rte_free(p_rsp_buff);<br />+        PMD_DRV_LOG(ERR, "acl table res get fail rc=0x%x.", rc);<br />+        rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+        return ZXDH_ERR;<br />+    }<br />+<br />+    rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+<br />+    p_acl_tbl = (ZXDH_NP_SE_ACL_TBL_T *)(p_rsp_buff + 1);<br />+    zxdh_np_acl_tbl_set(p_acl_res_init, p_acl_tbl);<br />+    rte_free(p_rsp_buff);<br />+<br />+    return rc;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_agent_stat_cfg_get(uint32_t dev_id,<br />+                    uint32_t type,<br />+                    ZXDH_APT_STAT_RES_INIT_T *p_stat_cfg_init)<br />+{<br />+    uint32_t rc = ZXDH_OK;<br />+    uint32_t opr = ZXDH_STAT_CFG_REQ;<br />+    uint32_t sub_type = ZXDH_RES_STD_NIC_MSG;<br />+    uint32_t buff_size = 0;<br />+    ZXDH_SPINLOCK_T *p_dtb_spinlock = NULL;<br />+    uint32_t *p_rsp_buff = NULL;<br />+    ZXDH_NP_SE_STAT_CFG_T *p_stat_cfg = NULL;<br />+    ZXDH_DEV_SPINLOCK_TYPE_E spinlock = ZXDH_DEV_SPINLOCK_T_DTB;<br />+<br />+    rc = zxdh_np_dev_opr_spinlock_get(dev_id, (uint32_t)spinlock, &p_dtb_spinlock);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_opr_spinlock_get");<br />+<br />+    rte_spinlock_lock(&p_dtb_spinlock->spinlock);<br />+<br />+    buff_size = zxdh_np_get_se_buff_size(opr) + sizeof(uint32_t);<br />+    p_rsp_buff = rte_zmalloc(NULL, buff_size, 0);<br />+    if (p_rsp_buff == NULL) {<br />+        PMD_DRV_LOG(ERR, "malloc memory failed");<br />+        rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+        return ZXDH_PAR_CHK_POINT_NULL;<br />+    }<br />+<br />+    sub_type = (type == ZXDH_SE_STD_NIC_RES_TYPE) ? ZXDH_RES_STD_NIC_MSG : ZXDH_RES_OFFLOAD_MSG;<br />+<br />+    rc = zxdh_np_agent_channel_se_res_get(dev_id, sub_type, opr, p_rsp_buff, buff_size);<br />+    if (rc != ZXDH_OK) {<br />+        rte_free(p_rsp_buff);<br />+        PMD_DRV_LOG(ERR, "ddr table res get fail rc = 0x%x.", rc);<br />+        rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+        return ZXDH_ERR;<br />+    }<br />+<br />+    rte_spinlock_unlock(&p_dtb_spinlock->spinlock);<br />+<br />+    p_stat_cfg = (ZXDH_NP_SE_STAT_CFG_T *)(p_rsp_buff + 1);<br />+    zxdh_np_stat_cfg_set(p_stat_cfg_init, p_stat_cfg);<br />+    rte_free(p_rsp_buff);<br />+<br />+    return rc;<br />+}<br />+<br />+static void *<br />+zxdh_np_dev_get_se_res_ptr(uint32_t dev_id, uint32_t type)<br />+{<br />+    ZXDH_DEV_MGR_T *p_dev_mgr = &g_dev_mgr;<br />+    ZXDH_DEV_CFG_T *p_dev_info = p_dev_mgr->p_dev_array[dev_id];<br />+<br />+    if (type == ZXDH_SE_STD_NIC_RES_TYPE)<br />+        return (void *)&p_dev_info->dev_apt_se_tbl_res.std_nic_res;<br />+    else<br />+        return (void *)&p_dev_info->dev_apt_se_tbl_res.offload_res;<br />+}<br />+<br />+static uint32_t<br />+zxdh_np_agent_se_res_get(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 = {0};<br />+    ZXDH_APT_ERAM_RES_INIT_T eram_res = {0};<br />+    ZXDH_APT_ACL_RES_INIT_T acl_res = {0};<br />+<br />+    p_se_res = (ZXDH_APT_SE_RES_T *)zxdh_np_dev_get_se_res_ptr(dev_id, type);<br />+    ZXDH_COMM_CHECK_DEV_POINT(dev_id, p_se_res);<br />+<br />+    if (p_se_res->valid) {<br />+        PMD_DRV_LOG(INFO, "dev_id [0x%x] res_type [%u] status ready", dev_id, type);<br />+        return ZXDH_OK;<br />+    }<br />+<br />+    hash_res.func_res = p_se_res->hash_func;<br />+    hash_res.bulk_res = p_se_res->hash_bulk;<br />+    hash_res.tbl_res = p_se_res->hash_tbl;<br />+    rc = zxdh_np_agent_hash_func_bulk_get(dev_id, type, &hash_res);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_agent_hash_func_bulk_get");<br />+<br />+    rc = zxdh_np_agent_hash_tbl_get(dev_id, type, &hash_res);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_agent_hash_tbl_get");<br />+    p_se_res->hash_func_num = hash_res.func_num;<br />+    p_se_res->hash_bulk_num = hash_res.bulk_num;<br />+    p_se_res->hash_tbl_num = hash_res.tbl_num;<br />+<br />+    eram_res.eram_res = p_se_res->eram_tbl;<br />+    rc = zxdh_np_agent_eram_tbl_get(dev_id, type, &eram_res);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_agent_eram_tbl_get");<br />+    p_se_res->eram_num = eram_res.tbl_num;<br />+<br />+    acl_res.acl_res = p_se_res->acl_tbl;<br />+    rc = zxdh_np_agent_acl_tbl_get(dev_id, type, &acl_res);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_agent_acl_tbl_get");<br />+    p_se_res->acl_num = acl_res.tbl_num;<br />+<br />+    rc = zxdh_np_agent_stat_cfg_get(dev_id, type, &p_se_res->stat_cfg);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_agent_stat_cfg_get");<br />+<br />+    p_se_res->valid = 1;<br />+    return rc;<br />+}<br />+<br />+uint32_t<br />+zxdh_np_se_res_get_and_init(uint32_t dev_id, uint32_t type)<br />+{<br />+    uint32_t rc = ZXDH_OK;<br />+<br />+    rc = zxdh_np_agent_se_res_get(dev_id, type);<br />+    ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_agent_se_res_get");<br />+    PMD_DRV_LOG(DEBUG, "se res get success.");<br />+<br />+    return rc;<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 />diff --git a/drivers/net/zxdh/zxdh_np.h b/drivers/net/zxdh/zxdh_np.h<br />index d4a940b038..b204889c9a 100644<br />--- a/drivers/net/zxdh/zxdh_np.h<br />+++ b/drivers/net/zxdh/zxdh_np.h<br />@@ -130,6 +130,12 @@<br /> #define ZXDH_LISTSTACK_INVALID_INDEX            (0)<br /> #define ZXDH_LISTSTACK_MAX_ELEMENT                (0x0ffffffe)<br />  <br />+#define ZXDH_HASH_FUNC_MAX_NUM                  (4)<br />+#define ZXDH_HASH_BULK_MAX_NUM                  (32)<br />+#define ZXDH_HASH_TABLE_MAX_NUM                 (38)<br />+#define ZXDH_ERAM_MAX_NUM                       (60)<br />+#define ZXDH_ETCAM_MAX_NUM                      (8)<br />+<br /> #define ZXDH_SDT_CFG_LEN                        (2)<br /> #define ZXDH_SDT_VALID                          (1)<br /> #define ZXDH_SDT_INVALID                        (0)<br />@@ -521,6 +527,33 @@ 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 enum zxdh_hash_srh_mode {<br />+    ZXDH_HASH_SRH_MODE_SOFT = 1,<br />+    ZXDH_HASH_SRH_MODE_HDW  = 2,<br />+} ZXDH_HASH_SRH_MODE;<br />+<br />+typedef struct zxdh_hash_entry {<br />+    uint8_t *p_key;<br />+    uint8_t *p_rst;<br />+} ZXDH_HASH_ENTRY;<br />+<br />+typedef struct zxdh_acl_entry_ex_t {<br />+    uint32_t  idx_val;<br />+    ZXDH_D_HEAD  idx_list;<br />+    uint32_t  pri;<br />+    uint8_t    *key_data;<br />+    uint8_t    *key_mask;<br />+    uint8_t    *p_as_rslt;<br />+} ZXDH_ACL_ENTRY_EX_T;<br />+<br />+typedef uint32_t (*ZXDH_APT_ACL_ENTRY_SET_FUNC)(void *p_data, ZXDH_ACL_ENTRY_EX_T *acl_entry);<br />+typedef uint32_t (*ZXDH_APT_ACL_ENTRY_GET_FUNC)(void *p_data, ZXDH_ACL_ENTRY_EX_T *acl_entry);<br />+typedef uint32_t (*ZXDH_APT_ERAM_SET_FUNC)(void *p_data, uint32_t buf[4]);<br />+typedef uint32_t (*ZXDH_APT_ERAM_GET_FUNC)(void *p_data, uint32_t buf[4]);<br />+typedef uint32_t (*ZXDH_APT_HASH_ENTRY_SET_FUNC)(void *p_data, ZXDH_HASH_ENTRY *p_entry);<br />+typedef uint32_t (*ZXDH_APT_HASH_ENTRY_GET_FUNC)(void *p_data, ZXDH_HASH_ENTRY *p_entry);<br />+typedef int32_t (*ZXDH_KEY_CMP_FUNC)(void *p_new_key, void *p_old_key, uint32_t key_len);<br />+<br /> typedef struct zxdh_sdt_tbl_eram_t {<br />     uint32_t table_type;<br />     uint32_t eram_mode;<br />@@ -555,6 +588,113 @@ typedef struct zxdh_sdt_tbl_hash_t {<br />     uint32_t hash_clutch_en;<br /> } ZXDH_SDT_TBL_HASH_T;<br />  <br />+typedef enum zxdh_hash_ddr_width_mode_e {<br />+    ZXDH_DDR_WIDTH_INVALID = 0,<br />+    ZXDH_DDR_WIDTH_256b,<br />+    ZXDH_DDR_WIDTH_512b,<br />+} ZXDH_HASH_DDR_WIDTH_MODE;<br />+<br />+typedef struct zxdh_apt_acl_res_t {<br />+    uint32_t pri_mode;<br />+    uint32_t entry_num;<br />+    uint32_t block_num;<br />+    uint32_t block_index[ZXDH_ETCAM_BLOCK_NUM];<br />+} ZXDH_APT_ACL_RES_T;<br />+<br />+typedef struct zxdh_apt_hash_bulk_res_t {<br />+    uint32_t func_id;<br />+    uint32_t bulk_id;<br />+    uint32_t zcell_num;<br />+    uint32_t zreg_num;<br />+    uint32_t ddr_baddr;<br />+    uint32_t ddr_item_num;<br />+    ZXDH_HASH_DDR_WIDTH_MODE ddr_width_mode;<br />+    uint32_t ddr_crc_sel;<br />+    uint32_t ddr_ecc_en;<br />+} ZXDH_APT_HASH_BULK_RES_T;<br />+<br />+typedef struct zxdh_apt_hash_func_res_t {<br />+    uint32_t func_id;<br />+    uint32_t zblk_num;<br />+    uint32_t zblk_bitmap;<br />+    uint32_t ddr_dis;<br />+} ZXDH_APT_HASH_FUNC_RES_T;<br />+<br />+typedef struct zxdh_apt_eram_table_t {<br />+    uint32_t sdt_no;<br />+    ZXDH_SDT_TBL_ERAM_T eram_sdt;<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_APT_ERAM_TABLE_T;<br />+<br />+typedef struct zxdh_apt_acl_table_t {<br />+    uint32_t sdt_no;<br />+    uint32_t sdt_partner;<br />+    ZXDH_SDT_TBL_ETCAM_T acl_sdt;<br />+    ZXDH_APT_ACL_RES_T acl_res;<br />+    ZXDH_APT_ACL_ENTRY_SET_FUNC  acl_set_func;<br />+    ZXDH_APT_ACL_ENTRY_GET_FUNC  acl_get_func;<br />+} ZXDH_APT_ACL_TABLE_T;<br />+<br />+typedef struct zxdh_apt_hash_table_t {<br />+    uint32_t sdt_no;<br />+    uint32_t sdt_partner;<br />+    ZXDH_SDT_TBL_HASH_T hash_sdt;<br />+    uint32_t tbl_flag;<br />+    ZXDH_APT_HASH_ENTRY_SET_FUNC hash_set_func;<br />+    ZXDH_APT_HASH_ENTRY_GET_FUNC hash_get_func;<br />+} ZXDH_APT_HASH_TABLE_T;<br />+<br />+typedef struct zxdh_apt_eram_res_init_t {<br />+    uint32_t tbl_num;<br />+    ZXDH_APT_ERAM_TABLE_T *eram_res;<br />+} ZXDH_APT_ERAM_RES_INIT_T;<br />+<br />+typedef struct zxdh_apt_hash_res_init_t {<br />+    uint32_t func_num;<br />+    uint32_t bulk_num;<br />+    uint32_t tbl_num;<br />+    ZXDH_APT_HASH_FUNC_RES_T *func_res;<br />+    ZXDH_APT_HASH_BULK_RES_T *bulk_res;<br />+    ZXDH_APT_HASH_TABLE_T  *tbl_res;<br />+} ZXDH_APT_HASH_RES_INIT_T;<br />+<br />+typedef struct zxdh_apt_acl_res_init_t {<br />+    uint32_t tbl_num;<br />+    ZXDH_APT_ACL_TABLE_T *acl_res;<br />+} ZXDH_APT_ACL_RES_INIT_T;<br />+<br />+typedef struct zxdh_apt_stat_res_init_t {<br />+    uint32_t eram_baddr;<br />+    uint32_t eram_depth;<br />+    uint32_t ddr_baddr;<br />+    uint32_t ppu_ddr_offset;<br />+} ZXDH_APT_STAT_RES_INIT_T;<br />+<br />+typedef struct zxdh_apt_se_res_t {<br />+    uint32_t valid;<br />+    uint32_t hash_func_num;<br />+    uint32_t hash_bulk_num;<br />+    uint32_t hash_tbl_num;<br />+    uint32_t eram_num;<br />+    uint32_t acl_num;<br />+    uint32_t lpm_num;<br />+    uint32_t ddr_num;<br />+    ZXDH_APT_HASH_FUNC_RES_T  hash_func[ZXDH_HASH_FUNC_MAX_NUM];<br />+    ZXDH_APT_HASH_BULK_RES_T  hash_bulk[ZXDH_HASH_BULK_MAX_NUM];<br />+    ZXDH_APT_HASH_TABLE_T     hash_tbl[ZXDH_HASH_TABLE_MAX_NUM];<br />+    ZXDH_APT_ERAM_TABLE_T     eram_tbl[ZXDH_ERAM_MAX_NUM];<br />+    ZXDH_APT_ACL_TABLE_T      acl_tbl[ZXDH_ETCAM_MAX_NUM];<br />+    ZXDH_APT_STAT_RES_INIT_T  stat_cfg;<br />+} ZXDH_APT_SE_RES_T;<br />+<br />+typedef struct zxdh_dev_apt_se_tbl_res_t {<br />+    ZXDH_APT_SE_RES_T   std_nic_res;<br />+    ZXDH_APT_SE_RES_T   offload_res;<br />+} ZXDH_DEV_APT_SE_TBL_RES_T;<br />+<br /> typedef struct zxdh_spin_lock_t {<br />     rte_spinlock_t spinlock;<br /> } ZXDH_SPINLOCK_T;<br />@@ -596,6 +736,7 @@ typedef struct dpp_dev_cfg_t {<br />     ZXDH_SPINLOCK_T dtb_spinlock;<br />     ZXDH_SPINLOCK_T smmu0_spinlock;<br />     ZXDH_SPINLOCK_T dtb_queue_spinlock[ZXDH_DTB_QUEUE_NUM_MAX];<br />+    ZXDH_DEV_APT_SE_TBL_RES_T dev_apt_se_tbl_res;<br /> } ZXDH_DEV_CFG_T;<br />  <br /> typedef struct zxdh_dev_mngr_t {<br />@@ -954,6 +1095,29 @@ typedef enum zxdh_msg_dtb_oper_e {<br />     ZXDH_QUEUE_RELEASE = 1,<br /> } ZXDH_MSG_DTB_OPER_E;<br />  <br />+typedef enum zxdh_se_res_oper_e {<br />+    ZXDH_HASH_FUNC_BULK_REQ    = 0,<br />+    ZXDH_HASH_TBL_REQ          = 1,<br />+    ZXDH_ERAM_TBL_REQ          = 2,<br />+    ZXDH_ACL_TBL_REQ           = 3,<br />+    ZXDH_LPM_TBL_REQ           = 4,<br />+    ZXDH_DDR_TBL_REQ           = 5,<br />+    ZXDH_STAT_CFG_REQ          = 6,<br />+    ZXDH_RES_REQ_MAX<br />+} ZXDH_MSG_SE_RES_OPER_E;<br />+<br />+typedef enum zxdh_agent_msg_res_e {<br />+    ZXDH_RES_STD_NIC_MSG = 0,<br />+    ZXDH_RES_OFFLOAD_MSG,<br />+    ZXDH_RES_MAX_MSG<br />+} MSG_RES_TYPE_E;<br />+<br />+typedef enum zxdh_se_res_type_e {<br />+    ZXDH_SE_STD_NIC_RES_TYPE      = 0,<br />+    ZXDH_SE_NON_STD_NIC_RES_TYPE  = 1,<br />+    ZXDH_SE_RES_TYPE_BUTT<br />+} ZXDH_SE_RES_TYPE_E;<br />+<br /> typedef struct zxdh_smmu0_smmu0_cpu_ind_cmd_t {<br />     uint32_t cpu_ind_rw;<br />     uint32_t cpu_ind_rd_mode;<br />@@ -1178,6 +1342,123 @@ typedef struct __rte_aligned(2) zxdh_agent_channel_dtb_msg_t {<br />     uint32_t queue_id;<br /> } ZXDH_AGENT_CHANNEL_DTB_MSG_T;<br />  <br />+typedef struct __rte_aligned(2) zxdh_agent_se_res_msg_t {<br />+    uint8_t dev_id;<br />+    uint8_t type;<br />+    uint8_t sub_type;<br />+    uint8_t oper;<br />+} ZXDH_AGENT_SE_RES_MSG_T;<br />+<br />+typedef struct __rte_aligned(2) 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_NP_SDTTBL_ERAM_T;<br />+<br />+typedef struct __rte_aligned(2) 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_NP_SDTTBL_HASH_T;<br />+<br />+typedef struct __rte_aligned(2) 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_NP_SDTTBL_ETCAM_T;<br />+<br />+typedef struct __rte_aligned(2) hash_table_t {<br />+    uint32_t sdt_no;<br />+    uint32_t sdt_partner;<br />+    ZXDH_NP_SDTTBL_HASH_T hash_sdt;<br />+    uint32_t tbl_flag;<br />+} ZXDH_NP_HASH_TABLE_T;<br />+<br />+typedef struct __rte_aligned(2) zxdh_np_eram_table_t {<br />+    uint32_t sdt_no;<br />+    ZXDH_NP_SDTTBL_ERAM_T eram_sdt;<br />+    uint32_t opr_mode;<br />+    uint32_t rd_mode;<br />+} ZXDH_NP_ERAM_TABLE_T;<br />+<br />+typedef struct __rte_aligned(2) zxdh_np_acl_res_t {<br />+    uint32_t pri_mode;<br />+    uint32_t entry_num;<br />+    uint32_t block_num;<br />+    uint32_t block_index[ZXDH_ETCAM_BLOCK_NUM];<br />+} ZXDH_NP_ACL_RES_T;<br />+<br />+typedef struct __rte_aligned(2) zxdh_np_acl_table_t {<br />+    uint32_t sdt_no;<br />+    uint32_t sdt_partner;<br />+    ZXDH_NP_SDTTBL_ETCAM_T acl_sdt;<br />+    ZXDH_NP_ACL_RES_T acl_res;<br />+} ZXDH_NP_ACL_TABLE_T;<br />+<br />+typedef struct __rte_aligned(2) hash_func_res_t {<br />+    uint32_t func_id;<br />+    uint32_t zblk_num;<br />+    uint32_t zblk_bitmap;<br />+    uint32_t ddr_dis;<br />+} ZXDH_NP_HASH_FUNC_RES_T;<br />+<br />+typedef struct __rte_aligned(2) hash_bulk_res_t {<br />+    uint32_t func_id;<br />+    uint32_t bulk_id;<br />+    uint32_t zcell_num;<br />+    uint32_t zreg_num;<br />+    uint32_t ddr_baddr;<br />+    uint32_t ddr_item_num;<br />+    uint32_t ddr_width_mode;<br />+    uint32_t ddr_crc_sel;<br />+    uint32_t ddr_ecc_en;<br />+} ZXDH_NP_HASH_BULK_RES_T;<br />+<br />+typedef struct __rte_aligned(2) zxdh_se_hash_func_bulk_t {<br />+    uint32_t func_num;<br />+    uint32_t bulk_num;<br />+    ZXDH_NP_HASH_FUNC_RES_T fun[ZXDH_HASH_FUNC_MAX_NUM];<br />+    ZXDH_NP_HASH_BULK_RES_T bulk[ZXDH_HASH_BULK_MAX_NUM];<br />+} ZXDH_NP_SE_HASH_FUNC_BULK_T;<br />+<br />+typedef struct __rte_aligned(2) zxdh_se_hash_tbl_t {<br />+    uint32_t tbl_num;<br />+    ZXDH_NP_HASH_TABLE_T table[ZXDH_HASH_TABLE_MAX_NUM];<br />+} ZXDH_NP_SE_HASH_TBL_T;<br />+<br />+typedef struct __rte_aligned(2) zxdh_se_eram_tbl_t {<br />+    uint32_t tbl_num;<br />+    ZXDH_NP_ERAM_TABLE_T eram[ZXDH_ERAM_MAX_NUM];<br />+} ZXDH_NP_SE_ERAM_TBL_T;<br />+<br />+typedef struct __rte_aligned(2) zxdh_se_acl_tbl_t {<br />+    uint32_t tbl_num;<br />+    ZXDH_NP_ACL_TABLE_T acl[ZXDH_ETCAM_MAX_NUM];<br />+} ZXDH_NP_SE_ACL_TBL_T;<br />+<br />+typedef struct __rte_aligned(2) zxdh_se_stat_cfg_t {<br />+    uint32_t eram_baddr;<br />+    uint32_t eram_depth;<br />+    uint32_t ddr_baddr;<br />+    uint32_t ppu_ddr_offset;<br />+} ZXDH_NP_SE_STAT_CFG_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 /> int zxdh_np_dtb_table_entry_write(uint32_t dev_id, uint32_t queue_id,<br />@@ -1213,5 +1494,6 @@ uint32_t zxdh_np_stat_car_queue_cfg_set(uint32_t dev_id,<br />             uint32_t drop_flag,<br />             uint32_t plcr_en,<br />             uint32_t profile_id);<br />+uint32_t zxdh_np_se_res_get_and_init(uint32_t dev_id, uint32_t type);<br />  <br /> #endif /* ZXDH_NP_H */<br />--  <br />2.27.0<br />