tfc_mpc_debug.c, tfc_tcam_debug.c and tfc_debug.h contain debug
dump routines (tfc_em_show(), tfc_wc_show(), tfc_backing_store_dump(),
the TCAM show/read helpers, and so on) that are built unconditionally
but are not called from anywhere in the driver.

Remove them. The one function in these files that does have a
caller, tfc_mpc_table_read(), is used by
tfc_em_delete_entries_by_pool_id(), so move it to tfc_em.c unchanged,
next to its user.

This also removes the unbounded strcat() use and the format-string
handling in those helpers, which showed up as clang -Werror build
failures.

Signed-off-by: Manish Kurup <[email protected]>
---
v2: Replace the v1 "fix potential OOB string writes in debug helpers"
    with removal of the unused debug dump helpers, per review feedback.
    No functional change: the only function with a caller,
    tfc_mpc_table_read(), is moved to tfc_em.c unchanged.

 drivers/net/bnxt/tf_core/v3/meson.build      |    2 -
 drivers/net/bnxt/tf_core/v3/tfc_debug.h      |   34 -
 drivers/net/bnxt/tf_core/v3/tfc_em.c         |  171 +-
 drivers/net/bnxt/tf_core/v3/tfc_mpc_debug.c  | 1411 -------------
 drivers/net/bnxt/tf_core/v3/tfc_tcam_debug.c | 1875 ------------------
 5 files changed, 169 insertions(+), 3324 deletions(-)
 delete mode 100644 drivers/net/bnxt/tf_core/v3/tfc_debug.h
 delete mode 100644 drivers/net/bnxt/tf_core/v3/tfc_mpc_debug.c
 delete mode 100644 drivers/net/bnxt/tf_core/v3/tfc_tcam_debug.c

diff --git a/drivers/net/bnxt/tf_core/v3/meson.build 
b/drivers/net/bnxt/tf_core/v3/meson.build
index 8d62e14274..80809e7b7a 100644
--- a/drivers/net/bnxt/tf_core/v3/meson.build
+++ b/drivers/net/bnxt/tf_core/v3/meson.build
@@ -21,8 +21,6 @@ sources += files(
         'tfc_idx_tbl.c',
         'tfc_if_tbl.c',
         'tfc_init.c',
-        'tfc_mpc_debug.c',
-        'tfc_tcam_debug.c',
         'tfc_msg.c',
         'tfc_priv.c',
         'tfc_resources.c',
diff --git a/drivers/net/bnxt/tf_core/v3/tfc_debug.h 
b/drivers/net/bnxt/tf_core/v3/tfc_debug.h
deleted file mode 100644
index 86492f3a69..0000000000
--- a/drivers/net/bnxt/tf_core/v3/tfc_debug.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2019-2021 Broadcom
- * All rights reserved.
- */
-
-#ifndef _TFC_DEBUG_H_
-#define _TFC_DEBUG_H_
-
-/* #define EM_DEBUG */
-/* #define WC_DEBUG */
-/* #define ACT_DEBUG */
-
-int tfc_mpc_table_write_zero(struct tfc *tfcp,
-                            uint8_t tsid,
-                            enum cfa_dir dir,
-                            uint32_t type,
-                            uint32_t offset,
-                            uint8_t words,
-                            uint8_t *data);
-const char *get_lrec_opcode_str(uint8_t opcode);
-void act_show(FILE *fd, struct act_info_t *act_info, uint32_t offset);
-int tfc_em_show(FILE *fd, struct tfc *tfcp, uint8_t tsid, enum cfa_dir dir);
-int tfc_wc_show(FILE *fd, struct tfc *tfcp, uint8_t tsid, enum cfa_dir dir);
-int tfc_mpc_table_invalidate(struct tfc *tfcp,
-                            uint8_t tsid,
-                            enum cfa_dir dir,
-                            uint32_t type,
-                            uint32_t offset,
-                            uint32_t words);
-void act_process(uint32_t act_rec_ptr,
-                struct act_info_t *act_info,
-                struct tfc_ts_mem_cfg *act_mem_cfg);
-void tfc_backing_store_dump(FILE *fd);
-#endif
diff --git a/drivers/net/bnxt/tf_core/v3/tfc_em.c 
b/drivers/net/bnxt/tf_core/v3/tfc_em.c
index 3fe4dbe3fe..55e83947d7 100644
--- a/drivers/net/bnxt/tf_core/v3/tfc_em.c
+++ b/drivers/net/bnxt/tf_core/v3/tfc_em.c
@@ -21,8 +21,6 @@
 #include "sys_util.h"
 #include "tfc_util.h"
 
-#include "tfc_debug.h"
-
 #define TFC_EM_DYNAMIC_BUCKET_RECORD_SIZE 1
 
 /* Enable cache configuration */
@@ -726,6 +724,175 @@ static void bucket_decode(uint32_t *bucket_ptr,
        }
 }
 
+int tfc_mpc_table_read(struct tfc *tfcp,
+                      uint8_t tsid,
+                      enum cfa_dir dir,
+                      uint32_t type,
+                      uint32_t offset,
+                      uint8_t words,
+                      uint8_t *data,
+                      uint8_t debug)
+{
+       int rc = 0;
+       uint8_t tx_msg[TFC_MPC_MAX_TX_BYTES];
+       uint8_t rx_msg[TFC_MPC_MAX_RX_BYTES];
+       uint16_t msg_count = BNXT_MPC_COMP_MSG_COUNT;
+       int i;
+       uint32_t buff_len;
+       struct cfa_mpc_data_obj fields_cmd[CFA_BLD_MPC_READ_CMD_MAX_FLD];
+       struct cfa_mpc_data_obj fields_cmp[CFA_BLD_MPC_READ_CMP_MAX_FLD];
+       struct bnxt_mpc_mbuf mpc_msg_in;
+       struct bnxt_mpc_mbuf mpc_msg_out;
+       enum cfa_scope_type scope_type;
+       struct cfa_bld_mpcinfo *mpc_info;
+       uint64_t host_address;
+       uint8_t discard_data[128];
+       uint32_t set;
+       uint32_t way;
+       bool valid;
+
+       tfo_mpcinfo_get(tfcp->tfo, &mpc_info);
+
+       rc = tfo_ts_get(tfcp->tfo, tsid, &scope_type, NULL, &valid, NULL);
+       if (rc != 0) {
+               PMD_DRV_LOG_LINE(ERR, "failed to get tsid: %s", strerror(-rc));
+               return -EINVAL;
+       }
+       if (!valid) {
+               PMD_DRV_LOG_LINE(ERR, "tsid not allocated %d", tsid);
+               return -EINVAL;
+       }
+
+       /* Check that data pointer is word aligned */
+       if (((uint64_t)data)  & 0x1fULL) {
+               PMD_DRV_LOG_LINE(ERR, "Table read data pointer not word 
aligned");
+               return -EINVAL;
+       }
+
+       host_address = (uint64_t)rte_mem_virt2iova(data);
+
+       /* Check that MPC APIs are bound */
+       if (mpc_info->mpcops == NULL) {
+               PMD_DRV_LOG_LINE(ERR, "MPC not initialized");
+               return -EINVAL;
+       }
+
+       set =  offset & 0x7ff;
+       way = (offset >> 12)  & 0xf;
+
+       if (debug)
+               PMD_DRV_LOG_LINE(ERR,
+                                "Debug read table type:%s %d words32B at 
way:%d set:%d debug:%d words32B",
+                                (type  == 0 ? "Lookup" : "Action"),
+                                words, way, set, debug);
+       else
+               PMD_DRV_LOG_LINE(ERR,
+                                "Reading table type:%s %d words32B at offset 
%d words32B",
+                                (type  == 0 ? "Lookup" : "Action"),
+                                words, offset);
+
+       /* Create MPC EM insert command using builder */
+       for (i = 0; i < CFA_BLD_MPC_READ_CMD_MAX_FLD; i++)
+               fields_cmd[i].field_id = INVALID_U16;
+
+       fields_cmd[CFA_BLD_MPC_READ_CMD_OPAQUE_FLD].field_id =
+               CFA_BLD_MPC_READ_CMD_OPAQUE_FLD;
+       fields_cmd[CFA_BLD_MPC_READ_CMD_OPAQUE_FLD].val = 0xAA;
+
+       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_TYPE_FLD].field_id =
+               CFA_BLD_MPC_READ_CMD_TABLE_TYPE_FLD;
+       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_TYPE_FLD].val = (type == 0 ?
+              CFA_BLD_MPC_HW_TABLE_TYPE_LOOKUP : 
CFA_BLD_MPC_HW_TABLE_TYPE_ACTION);
+
+       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_SCOPE_FLD].field_id =
+               CFA_BLD_MPC_READ_CMD_TABLE_SCOPE_FLD;
+       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_SCOPE_FLD].val =
+               (debug ? way : tsid);
+
+       fields_cmd[CFA_BLD_MPC_READ_CMD_DATA_SIZE_FLD].field_id =
+               CFA_BLD_MPC_READ_CMD_DATA_SIZE_FLD;
+       fields_cmd[CFA_BLD_MPC_READ_CMD_DATA_SIZE_FLD].val = words;
+
+       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_INDEX_FLD].field_id =
+               CFA_BLD_MPC_READ_CMD_TABLE_INDEX_FLD;
+       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_INDEX_FLD].val =
+               (debug ? set : offset);
+
+       fields_cmd[CFA_BLD_MPC_READ_CMD_HOST_ADDRESS_FLD].field_id =
+               CFA_BLD_MPC_READ_CMD_HOST_ADDRESS_FLD;
+       fields_cmd[CFA_BLD_MPC_READ_CMD_HOST_ADDRESS_FLD].val = host_address;
+
+       if (debug) {
+               fields_cmd[CFA_BLD_MPC_READ_CMD_CACHE_OPTION_FLD].field_id =
+               CFA_BLD_MPC_READ_CMD_CACHE_OPTION_FLD;
+               fields_cmd[CFA_BLD_MPC_READ_CMD_CACHE_OPTION_FLD].val = debug; 
/* Debug read */
+       }
+
+       buff_len = TFC_MPC_MAX_TX_BYTES;
+
+       rc = mpc_info->mpcops->cfa_bld_mpc_build_cache_read(tx_msg,
+                                                           &buff_len,
+                                                           fields_cmd);
+
+       if (rc) {
+               PMD_DRV_LOG_LINE(ERR, "Action read build failed: %d", rc);
+               goto cleanup;
+       }
+
+       /* Send MPC */
+       mpc_msg_in.chnl_id = (dir == CFA_DIR_TX ?
+                             HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_TE_CFA :
+                             HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_RE_CFA);
+       mpc_msg_in.msg_data = &tx_msg[16];
+       mpc_msg_in.msg_size = 16;
+       mpc_msg_out.cmp_type = CMPL_BASE_TYPE_MID_PATH_SHORT;
+       mpc_msg_out.msg_data = &rx_msg[16];
+       mpc_msg_out.msg_size = TFC_MPC_MAX_RX_BYTES;
+
+       rc = tfc_mpc_send(tfcp->bp,
+                         &mpc_msg_in,
+                         &mpc_msg_out,
+                         &msg_count,
+                         TFC_MPC_TABLE_READ,
+                         NULL);
+
+       if (rc) {
+               PMD_DRV_LOG_LINE(ERR, "Table read MPC send failed: %d", rc);
+               goto cleanup;
+       }
+
+               /* Process response */
+       for (i = 0; i < CFA_BLD_MPC_READ_CMP_MAX_FLD; i++)
+               fields_cmp[i].field_id = INVALID_U16;
+
+       fields_cmp[CFA_BLD_MPC_READ_CMP_STATUS_FLD].field_id =
+               CFA_BLD_MPC_READ_CMP_STATUS_FLD;
+
+       rc = mpc_info->mpcops->cfa_bld_mpc_parse_cache_read(rx_msg,
+                                                           
mpc_msg_out.msg_size,
+                                                           discard_data,
+                                                           words * 
TFC_MPC_BYTES_PER_WORD,
+                                                           fields_cmp);
+
+       if (rc) {
+               PMD_DRV_LOG_LINE(ERR, "Table read parse failed: %d", rc);
+               goto cleanup;
+       }
+
+       if (fields_cmp[CFA_BLD_MPC_READ_CMP_STATUS_FLD].val != CFA_BLD_MPC_OK) {
+               PMD_DRV_LOG_LINE(ERR, "Table read failed with status code:%d",
+                                
(uint32_t)fields_cmp[CFA_BLD_MPC_READ_CMP_STATUS_FLD].val);
+               rc = -1;
+               goto cleanup;
+       }
+
+       return 0;
+
+ cleanup:
+
+       return rc;
+}
+
 int tfc_em_delete_entries_by_pool_id(struct tfc *tfcp,
                                     uint8_t tsid,
                                     enum cfa_dir dir,
diff --git a/drivers/net/bnxt/tf_core/v3/tfc_mpc_debug.c 
b/drivers/net/bnxt/tf_core/v3/tfc_mpc_debug.c
deleted file mode 100644
index 9731127da0..0000000000
--- a/drivers/net/bnxt/tf_core/v3/tfc_mpc_debug.c
+++ /dev/null
@@ -1,1411 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2019-2021 Broadcom
- * All rights reserved.
- */
-#include <stdio.h>
-#include <inttypes.h>
-#include <math.h>
-#include <string.h>
-
-#include "bnxt.h"
-#include "bnxt_mpc.h"
-
-#include "tfc.h"
-#include "cfa_bld_mpc_field_ids.h"
-#include "cfa_bld_mpcops.h"
-#include "tfo.h"
-#include "tfc_em.h"
-#include "tfc_cpm.h"
-#include "tfc_msg.h"
-#include "tfc_debug.h"
-#include "cfa_types.h"
-#include "cfa_mm.h"
-#include "sys_util.h"
-#include "cfa_bld.h"
-#include "tfc_util.h"
-
-int tfc_mpc_table_read(struct tfc *tfcp,
-                      uint8_t tsid,
-                      enum cfa_dir dir,
-                      uint32_t type,
-                      uint32_t offset,
-                      uint8_t words,
-                      uint8_t *data,
-                      uint8_t debug)
-{
-       int rc = 0;
-       uint8_t tx_msg[TFC_MPC_MAX_TX_BYTES];
-       uint8_t rx_msg[TFC_MPC_MAX_RX_BYTES];
-       uint16_t msg_count = BNXT_MPC_COMP_MSG_COUNT;
-       int i;
-       uint32_t buff_len;
-       struct cfa_mpc_data_obj fields_cmd[CFA_BLD_MPC_READ_CMD_MAX_FLD];
-       struct cfa_mpc_data_obj fields_cmp[CFA_BLD_MPC_READ_CMP_MAX_FLD];
-       struct bnxt_mpc_mbuf mpc_msg_in;
-       struct bnxt_mpc_mbuf mpc_msg_out;
-       enum cfa_scope_type scope_type;
-       struct cfa_bld_mpcinfo *mpc_info;
-       uint64_t host_address;
-       uint8_t discard_data[128];
-       uint32_t set;
-       uint32_t way;
-       bool valid;
-
-       tfo_mpcinfo_get(tfcp->tfo, &mpc_info);
-
-       rc = tfo_ts_get(tfcp->tfo, tsid, &scope_type, NULL, &valid, NULL);
-       if (rc != 0) {
-               PMD_DRV_LOG_LINE(ERR, "failed to get tsid: %s", strerror(-rc));
-               return -EINVAL;
-       }
-       if (!valid) {
-               PMD_DRV_LOG_LINE(ERR, "tsid not allocated %d", tsid);
-               return -EINVAL;
-       }
-
-       /* Check that data pointer is word aligned */
-       if (((uint64_t)data)  & 0x1fULL) {
-               PMD_DRV_LOG_LINE(ERR, "Table read data pointer not word 
aligned");
-               return -EINVAL;
-       }
-
-       host_address = (uint64_t)rte_mem_virt2iova(data);
-
-       /* Check that MPC APIs are bound */
-       if (mpc_info->mpcops == NULL) {
-               PMD_DRV_LOG_LINE(ERR, "MPC not initialized");
-               return -EINVAL;
-       }
-
-       set =  offset & 0x7ff;
-       way = (offset >> 12)  & 0xf;
-
-       if (debug)
-               PMD_DRV_LOG_LINE(ERR,
-                                "Debug read table type:%s %d words32B at 
way:%d set:%d debug:%d words32B",
-                                (type  == 0 ? "Lookup" : "Action"),
-                                words, way, set, debug);
-       else
-               PMD_DRV_LOG_LINE(ERR,
-                                "Reading table type:%s %d words32B at offset 
%d words32B",
-                                (type  == 0 ? "Lookup" : "Action"),
-                                words, offset);
-
-       /* Create MPC EM insert command using builder */
-       for (i = 0; i < CFA_BLD_MPC_READ_CMD_MAX_FLD; i++)
-               fields_cmd[i].field_id = INVALID_U16;
-
-       fields_cmd[CFA_BLD_MPC_READ_CMD_OPAQUE_FLD].field_id =
-               CFA_BLD_MPC_READ_CMD_OPAQUE_FLD;
-       fields_cmd[CFA_BLD_MPC_READ_CMD_OPAQUE_FLD].val = 0xAA;
-
-       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_TYPE_FLD].field_id =
-               CFA_BLD_MPC_READ_CMD_TABLE_TYPE_FLD;
-       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_TYPE_FLD].val = (type == 0 ?
-              CFA_BLD_MPC_HW_TABLE_TYPE_LOOKUP : 
CFA_BLD_MPC_HW_TABLE_TYPE_ACTION);
-
-       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_SCOPE_FLD].field_id =
-               CFA_BLD_MPC_READ_CMD_TABLE_SCOPE_FLD;
-       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_SCOPE_FLD].val =
-               (debug ? way : tsid);
-
-       fields_cmd[CFA_BLD_MPC_READ_CMD_DATA_SIZE_FLD].field_id =
-               CFA_BLD_MPC_READ_CMD_DATA_SIZE_FLD;
-       fields_cmd[CFA_BLD_MPC_READ_CMD_DATA_SIZE_FLD].val = words;
-
-       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_INDEX_FLD].field_id =
-               CFA_BLD_MPC_READ_CMD_TABLE_INDEX_FLD;
-       fields_cmd[CFA_BLD_MPC_READ_CMD_TABLE_INDEX_FLD].val =
-               (debug ? set : offset);
-
-       fields_cmd[CFA_BLD_MPC_READ_CMD_HOST_ADDRESS_FLD].field_id =
-               CFA_BLD_MPC_READ_CMD_HOST_ADDRESS_FLD;
-       fields_cmd[CFA_BLD_MPC_READ_CMD_HOST_ADDRESS_FLD].val = host_address;
-
-       if (debug) {
-               fields_cmd[CFA_BLD_MPC_READ_CMD_CACHE_OPTION_FLD].field_id =
-               CFA_BLD_MPC_READ_CMD_CACHE_OPTION_FLD;
-               fields_cmd[CFA_BLD_MPC_READ_CMD_CACHE_OPTION_FLD].val = debug; 
/* Debug read */
-       }
-
-       buff_len = TFC_MPC_MAX_TX_BYTES;
-
-       rc = mpc_info->mpcops->cfa_bld_mpc_build_cache_read(tx_msg,
-                                                           &buff_len,
-                                                           fields_cmd);
-
-       if (rc) {
-               PMD_DRV_LOG_LINE(ERR, "Action read build failed: %d", rc);
-               goto cleanup;
-       }
-
-       /* Send MPC */
-       mpc_msg_in.chnl_id = (dir == CFA_DIR_TX ?
-                             HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_TE_CFA :
-                             HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_RE_CFA);
-       mpc_msg_in.msg_data = &tx_msg[16];
-       mpc_msg_in.msg_size = 16;
-       mpc_msg_out.cmp_type = CMPL_BASE_TYPE_MID_PATH_SHORT;
-       mpc_msg_out.msg_data = &rx_msg[16];
-       mpc_msg_out.msg_size = TFC_MPC_MAX_RX_BYTES;
-
-       rc = tfc_mpc_send(tfcp->bp,
-                         &mpc_msg_in,
-                         &mpc_msg_out,
-                         &msg_count,
-                         TFC_MPC_TABLE_READ,
-                         NULL);
-
-       if (rc) {
-               PMD_DRV_LOG_LINE(ERR, "Table read MPC send failed: %d", rc);
-               goto cleanup;
-       }
-
-               /* Process response */
-       for (i = 0; i < CFA_BLD_MPC_READ_CMP_MAX_FLD; i++)
-               fields_cmp[i].field_id = INVALID_U16;
-
-       fields_cmp[CFA_BLD_MPC_READ_CMP_STATUS_FLD].field_id =
-               CFA_BLD_MPC_READ_CMP_STATUS_FLD;
-
-       rc = mpc_info->mpcops->cfa_bld_mpc_parse_cache_read(rx_msg,
-                                                           
mpc_msg_out.msg_size,
-                                                           discard_data,
-                                                           words * 
TFC_MPC_BYTES_PER_WORD,
-                                                           fields_cmp);
-
-       if (rc) {
-               PMD_DRV_LOG_LINE(ERR, "Table read parse failed: %d", rc);
-               goto cleanup;
-       }
-
-       if (fields_cmp[CFA_BLD_MPC_READ_CMP_STATUS_FLD].val != CFA_BLD_MPC_OK) {
-               PMD_DRV_LOG_LINE(ERR, "Table read failed with status code:%d",
-                                
(uint32_t)fields_cmp[CFA_BLD_MPC_READ_CMP_STATUS_FLD].val);
-               rc = -1;
-               goto cleanup;
-       }
-
-       return 0;
-
- cleanup:
-
-       return rc;
-}
-
-int tfc_mpc_table_write_zero(struct tfc *tfcp,
-                            uint8_t tsid,
-                            enum cfa_dir dir,
-                            uint32_t type,
-                            uint32_t offset,
-                            uint8_t words,
-                            uint8_t *data)
-{
-       int rc = 0;
-       uint8_t tx_msg[TFC_MPC_MAX_TX_BYTES];
-       uint8_t rx_msg[TFC_MPC_MAX_RX_BYTES];
-       uint16_t msg_count = BNXT_MPC_COMP_MSG_COUNT;
-       int i;
-       uint32_t buff_len;
-       struct cfa_mpc_data_obj fields_cmd[CFA_BLD_MPC_WRITE_CMD_MAX_FLD];
-       struct cfa_mpc_data_obj fields_cmp[CFA_BLD_MPC_WRITE_CMP_MAX_FLD];
-       struct bnxt_mpc_mbuf mpc_msg_in;
-       struct bnxt_mpc_mbuf mpc_msg_out;
-       struct cfa_bld_mpcinfo *mpc_info;
-       enum cfa_scope_type scope_type;
-       bool valid;
-
-       tfo_mpcinfo_get(tfcp->tfo, &mpc_info);
-
-       rc = tfo_ts_get(tfcp->tfo, tsid, &scope_type, NULL, &valid, NULL);
-       if (rc != 0) {
-               PMD_DRV_LOG_LINE(ERR, "failed to get tsid: %s", strerror(-rc));
-               return -EINVAL;
-       }
-       if (!valid) {
-               PMD_DRV_LOG_LINE(ERR, "tsid not allocated %d", tsid);
-               return -EINVAL;
-       }
-       /* Check that MPC APIs are bound */
-       if (mpc_info->mpcops == NULL) {
-               PMD_DRV_LOG_LINE(ERR, " MPC not initialized");
-               return -EINVAL;
-       }
-
-       /* Create MPC EM insert command using builder */
-       for (i = 0; i < CFA_BLD_MPC_WRITE_CMD_MAX_FLD; i++)
-               fields_cmd[i].field_id = INVALID_U16;
-
-       fields_cmd[CFA_BLD_MPC_WRITE_CMD_OPAQUE_FLD].field_id =
-               CFA_BLD_MPC_WRITE_CMD_OPAQUE_FLD;
-       fields_cmd[CFA_BLD_MPC_WRITE_CMD_OPAQUE_FLD].val = 0xAA;
-
-       fields_cmd[CFA_BLD_MPC_WRITE_CMD_TABLE_TYPE_FLD].field_id =
-               CFA_BLD_MPC_WRITE_CMD_TABLE_TYPE_FLD;
-       fields_cmd[CFA_BLD_MPC_WRITE_CMD_TABLE_TYPE_FLD].val = (type == 0 ?
-              CFA_BLD_MPC_HW_TABLE_TYPE_LOOKUP : 
CFA_BLD_MPC_HW_TABLE_TYPE_ACTION);
-
-       fields_cmd[CFA_BLD_MPC_WRITE_CMD_TABLE_SCOPE_FLD].field_id =
-               CFA_BLD_MPC_WRITE_CMD_TABLE_SCOPE_FLD;
-       fields_cmd[CFA_BLD_MPC_WRITE_CMD_TABLE_SCOPE_FLD].val = tsid;
-
-       fields_cmd[CFA_BLD_MPC_WRITE_CMD_DATA_SIZE_FLD].field_id =
-               CFA_BLD_MPC_WRITE_CMD_DATA_SIZE_FLD;
-       fields_cmd[CFA_BLD_MPC_WRITE_CMD_DATA_SIZE_FLD].val = words;
-
-       fields_cmd[CFA_BLD_MPC_WRITE_CMD_TABLE_INDEX_FLD].field_id =
-               CFA_BLD_MPC_WRITE_CMD_TABLE_INDEX_FLD;
-       fields_cmd[CFA_BLD_MPC_WRITE_CMD_TABLE_INDEX_FLD].val = offset;
-
-       buff_len = TFC_MPC_MAX_TX_BYTES;
-
-       rc = mpc_info->mpcops->cfa_bld_mpc_build_cache_write(tx_msg,
-                                                            &buff_len,
-                                                            data,
-                                                            fields_cmd);
-
-       if (rc) {
-               PMD_DRV_LOG_LINE(ERR, "write build failed: %d", rc);
-               goto cleanup;
-       }
-
-       /* Send MPC */
-       mpc_msg_in.chnl_id = (dir == CFA_DIR_TX ?
-                             HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_TE_CFA :
-                             HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_RE_CFA);
-       mpc_msg_in.msg_data = &tx_msg[16];
-       mpc_msg_in.msg_size = (words * TFC_MPC_BYTES_PER_WORD) + 16;
-       mpc_msg_out.cmp_type = CMPL_BASE_TYPE_MID_PATH_SHORT;
-       mpc_msg_out.msg_data = &rx_msg[16];
-       mpc_msg_out.msg_size = TFC_MPC_MAX_RX_BYTES;
-
-       rc = tfc_mpc_send(tfcp->bp,
-                         &mpc_msg_in,
-                         &mpc_msg_out,
-                         &msg_count,
-                         TFC_MPC_TABLE_WRITE,
-                         NULL);
-
-       if (rc) {
-               PMD_DRV_LOG_LINE(ERR, "write MPC send failed: %d", rc);
-               goto cleanup;
-       }
-
-       /* Process response */
-       for (i = 0; i < CFA_BLD_MPC_WRITE_CMP_MAX_FLD; i++)
-               fields_cmp[i].field_id = INVALID_U16;
-
-       fields_cmp[CFA_BLD_MPC_WRITE_CMP_STATUS_FLD].field_id =
-               CFA_BLD_MPC_WRITE_CMP_STATUS_FLD;
-
-       rc = mpc_info->mpcops->cfa_bld_mpc_parse_cache_write(rx_msg,
-                                                            
mpc_msg_out.msg_size,
-                                                            fields_cmp);
-
-       if (rc) {
-               PMD_DRV_LOG_LINE(ERR, "write parse failed: %d", rc);
-               goto cleanup;
-       }
-
-       if (fields_cmp[CFA_BLD_MPC_WRITE_CMP_STATUS_FLD].val != CFA_BLD_MPC_OK) 
{
-               PMD_DRV_LOG_LINE(ERR, "Action write failed with status code:%d",
-                                
(uint32_t)fields_cmp[CFA_BLD_MPC_WRITE_CMP_STATUS_FLD].val);
-               PMD_DRV_LOG_LINE(ERR, "Hash MSB:0x%0x",
-                      
(uint32_t)fields_cmp[CFA_BLD_MPC_WRITE_CMP_HASH_MSB_FLD].val);
-               goto cleanup;
-       }
-
-       return 0;
-
- cleanup:
-
-       return rc;
-}
-
-int tfc_mpc_table_invalidate(struct tfc *tfcp,
-                            uint8_t tsid,
-                            enum cfa_dir dir,
-                            uint32_t type,
-                            uint32_t offset,
-                            uint32_t words)
-{
-       int rc = 0;
-       uint8_t tx_msg[TFC_MPC_MAX_TX_BYTES];
-       uint8_t rx_msg[TFC_MPC_MAX_RX_BYTES];
-       uint16_t msg_count = BNXT_MPC_COMP_MSG_COUNT;
-       int i;
-       uint32_t buff_len;
-       struct cfa_mpc_data_obj fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_MAX_FLD];
-       struct cfa_mpc_data_obj fields_cmp[CFA_BLD_MPC_INVALIDATE_CMP_MAX_FLD];
-       struct bnxt_mpc_mbuf mpc_msg_in;
-       struct bnxt_mpc_mbuf mpc_msg_out;
-       struct cfa_bld_mpcinfo *mpc_info;
-       enum cfa_scope_type scope_type;
-       bool valid;
-
-       tfo_mpcinfo_get(tfcp->tfo, &mpc_info);
-
-       rc = tfo_ts_get(tfcp->tfo, tsid, &scope_type, NULL, &valid, NULL);
-       if (rc != 0) {
-               PMD_DRV_LOG_LINE(ERR, "failed to get tsid: %s", strerror(-rc));
-               return -EINVAL;
-       }
-       if (!valid) {
-               PMD_DRV_LOG_LINE(ERR, "tsid not allocated %d", tsid);
-               return -EINVAL;
-       }
-       /* Check that MPC APIs are bound */
-       if (mpc_info->mpcops == NULL) {
-               PMD_DRV_LOG_LINE(ERR, " MPC not initialized");
-               return -EINVAL;
-       }
-
-       /* Create MPC EM insert command using builder */
-       for (i = 0; i < CFA_BLD_MPC_INVALIDATE_CMD_MAX_FLD; i++)
-               fields_cmd[i].field_id = INVALID_U16;
-
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_OPAQUE_FLD].field_id =
-               CFA_BLD_MPC_INVALIDATE_CMD_OPAQUE_FLD;
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_OPAQUE_FLD].val = 0xAA;
-
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_TABLE_TYPE_FLD].field_id =
-               CFA_BLD_MPC_INVALIDATE_CMD_TABLE_TYPE_FLD;
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_TABLE_TYPE_FLD].val = (type == 0 ?
-              CFA_BLD_MPC_HW_TABLE_TYPE_LOOKUP : 
CFA_BLD_MPC_HW_TABLE_TYPE_ACTION);
-
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_TABLE_SCOPE_FLD].field_id =
-               CFA_BLD_MPC_INVALIDATE_CMD_TABLE_SCOPE_FLD;
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_TABLE_SCOPE_FLD].val = tsid;
-
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_DATA_SIZE_FLD].field_id =
-               CFA_BLD_MPC_INVALIDATE_CMD_DATA_SIZE_FLD;
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_DATA_SIZE_FLD].val = words;
-
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_TABLE_INDEX_FLD].field_id =
-               CFA_BLD_MPC_INVALIDATE_CMD_TABLE_INDEX_FLD;
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_TABLE_INDEX_FLD].val = offset;
-
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_CACHE_OPTION_FLD].field_id =
-               CFA_BLD_MPC_INVALIDATE_CMD_CACHE_OPTION_FLD;
-       fields_cmd[CFA_BLD_MPC_INVALIDATE_CMD_CACHE_OPTION_FLD].val =
-               CFA_BLD_MPC_EV_EVICT_SCOPE_ADDRESS;
-
-       buff_len = TFC_MPC_MAX_TX_BYTES;
-
-       rc = mpc_info->mpcops->cfa_bld_mpc_build_cache_evict(tx_msg,
-                                                            &buff_len,
-                                                            fields_cmd);
-
-       if (rc) {
-               PMD_DRV_LOG_LINE(ERR, "evict build failed: %d", rc);
-               goto cleanup;
-       }
-
-       /* Send MPC */
-       mpc_msg_in.chnl_id = (dir == CFA_DIR_TX ?
-                             HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_TE_CFA :
-                             HWRM_RING_ALLOC_INPUT_MPC_CHNLS_TYPE_RE_CFA);
-       mpc_msg_in.msg_data = &tx_msg[16];
-       mpc_msg_in.msg_size = 16;
-       mpc_msg_out.cmp_type = CMPL_BASE_TYPE_MID_PATH_SHORT;
-       mpc_msg_out.msg_data = &rx_msg[16];
-       mpc_msg_out.msg_size = TFC_MPC_MAX_RX_BYTES;
-
-       rc = tfc_mpc_send(tfcp->bp,
-                         &mpc_msg_in,
-                         &mpc_msg_out,
-                         &msg_count,
-                         TFC_MPC_INVALIDATE,
-                         NULL);
-
-       if (rc) {
-               PMD_DRV_LOG_LINE(ERR, "write MPC send failed: %d", rc);
-               goto cleanup;
-       }
-
-       /* Process response */
-       for (i = 0; i < CFA_BLD_MPC_INVALIDATE_CMP_MAX_FLD; i++)
-               fields_cmp[i].field_id = INVALID_U16;
-
-       fields_cmp[CFA_BLD_MPC_INVALIDATE_CMP_STATUS_FLD].field_id =
-               CFA_BLD_MPC_INVALIDATE_CMP_STATUS_FLD;
-
-       rc = mpc_info->mpcops->cfa_bld_mpc_parse_cache_evict(rx_msg,
-                                                            
mpc_msg_out.msg_size,
-                                                            fields_cmp);
-
-       if (rc) {
-               PMD_DRV_LOG_LINE(ERR, "evict parse failed: %d", rc);
-               goto cleanup;
-       }
-
-       if (fields_cmp[CFA_BLD_MPC_INVALIDATE_CMP_STATUS_FLD].val != 
CFA_BLD_MPC_OK) {
-               PMD_DRV_LOG_LINE(ERR, "evict failed with status code:%d",
-                                
(uint32_t)fields_cmp[CFA_BLD_MPC_INVALIDATE_CMP_STATUS_FLD].val);
-               PMD_DRV_LOG_LINE(ERR, "Hash MSB:0x%0x",
-                      
(uint32_t)fields_cmp[CFA_BLD_MPC_INVALIDATE_CMP_HASH_MSB_FLD].val);
-               goto cleanup;
-       }
-
-       return 0;
-
- cleanup:
-
-       return rc;
-}
-
-#define TFC_ACTION_SIZE_BYTES  32
-#define TFC_BUCKET_SIZE_BYTES  32
-
-#define TFC_STRING_LENGTH_32  32
-#define TFC_STRING_LENGTH_64  64
-#define TFC_STRING_LENGTH_96  96
-#define TFC_STRING_LENGTH_256 256
-
-static const char * const opcode_string[] = {
-       "NORMAL",
-       "NORMAL_RFS",
-       "FAST",
-       "FAST_RFS",
-       "CT_MISS_DEF",
-       "INVALID",
-       "CT_HIT_DEF",
-       "INVALID",
-       "RECYCLE"
-};
-
-static void act_decode(uint32_t *act_ptr,
-                      uintptr_t base,
-                      struct act_info_t *act_info);
-static void stat_decode(char *str,
-                       uint8_t stat_num,
-                       uint8_t stat1_ctr_type,
-                       uint32_t *stat_ptr);
-
-const char *get_lrec_opcode_str(uint8_t opcode)
-{
-       return opcode_string[opcode];
-}
-
-static uintptr_t get_address(struct tfc_ts_mem_cfg *mem, uint32_t offset)
-{
-       uint32_t page =  offset / mem->pg_tbl[0].pg_size;
-       uint32_t adj_offset = offset % mem->pg_tbl[0].pg_size;
-       int level = 0;
-       uint64_t addr;
-
-       /*
-        * Use the level according to the num_level of page table
-        */
-       level = mem->num_lvl - 1;
-
-       addr = (uint64_t)mem->pg_tbl[level].pg_va_tbl[page] + adj_offset;
-
-       return addr;
-}
-
-void act_process(uint32_t act_rec_ptr,
-                struct act_info_t *act_info,
-                struct tfc_ts_mem_cfg *act_mem_cfg)
-{
-       uint8_t *act_ptr;
-       uintptr_t base;
-       uint32_t act_offset = act_rec_ptr << 5;
-
-       base = get_address(act_mem_cfg, 0);
-       act_ptr = (uint8_t *)get_address(act_mem_cfg, act_offset);
-       act_decode((uint32_t *)act_ptr, base, act_info);
-}
-
-static void em_decode(uint32_t *em_ptr,
-                     struct em_info_t *em_info,
-                     struct tfc_ts_mem_cfg *act_mem_cfg)
-{
-       em_info->key = (uint8_t *)em_ptr;
-
-       em_ptr += (128 / 8) / 4; /* For EM records the LREC follows 128 bits of 
key */
-       em_info->valid = tfc_getbits(em_ptr, 127, 1);
-       em_info->rec_size = tfc_getbits(em_ptr, 125, 2);
-       em_info->epoch0 = tfc_getbits(em_ptr, 113, 12);
-       em_info->epoch1 = tfc_getbits(em_ptr, 107, 6);
-       em_info->opcode = tfc_getbits(em_ptr, 103, 4);
-       em_info->strength = tfc_getbits(em_ptr, 101, 2);
-       em_info->act_hint = tfc_getbits(em_ptr, 99, 2);
-
-       if (em_info->opcode != 2 && em_info->opcode != 3) {
-               /* All but FAST */
-               em_info->act_rec_ptr = tfc_getbits(em_ptr, 73, 26);
-               act_process(em_info->act_rec_ptr, &em_info->act_info, 
act_mem_cfg);
-       } else {
-               /* Just FAST */
-               em_info->destination = tfc_getbits(em_ptr, 73, 17);
-       }
-
-       if (em_info->opcode == 4 || em_info->opcode == 6) {
-               /* CT only */
-               em_info->tcp_direction = tfc_getbits(em_ptr, 72, 1);
-               em_info->tcp_update_en = tfc_getbits(em_ptr, 71, 1);
-               em_info->tcp_win = tfc_getbits(em_ptr, 66, 5);
-               em_info->tcp_msb_loc = tfc_getbits(em_ptr, 48, 18);
-               em_info->tcp_msb_opp = tfc_getbits(em_ptr, 30, 18);
-               em_info->tcp_msb_opp_init = tfc_getbits(em_ptr, 29, 1);
-               em_info->state = tfc_getbits(em_ptr, 24, 5);
-               em_info->timer_value  = tfc_getbits(em_ptr, 20, 4);
-       } else if (em_info->opcode != 8) {
-               /* Not CT and nor RECYCLE */
-               em_info->ring_table_idx = tfc_getbits(em_ptr, 64, 9);
-               em_info->act_rec_size = tfc_getbits(em_ptr, 59, 5);
-               em_info->paths_m1 = tfc_getbits(em_ptr, 55, 4);
-               em_info->fc_op  = tfc_getbits(em_ptr, 54, 1);
-               em_info->fc_type = tfc_getbits(em_ptr, 52, 2);
-               em_info->fc_ptr = tfc_getbits(em_ptr, 24, 28);
-       } else {
-               em_info->recycle_dest = tfc_getbits(em_ptr, 72, 1); /* Just 
Recycle */
-               em_info->prof_func = tfc_getbits(em_ptr, 64, 8);
-               em_info->meta_prof = tfc_getbits(em_ptr, 61, 3);
-               em_info->metadata = tfc_getbits(em_ptr, 29, 32);
-       }
-
-       em_info->range_profile = tfc_getbits(em_ptr, 16, 4);
-       em_info->range_index = tfc_getbits(em_ptr, 0, 16);
-}
-
-static void em_show(FILE *fd, struct em_info_t *em_info)
-{
-       int i;
-       char *line1 = NULL;
-       char *line2 = NULL;
-       char *line3 = NULL;
-       char *line4 = NULL;
-       char tmp1[TFC_STRING_LENGTH_64];
-       char tmp2[TFC_STRING_LENGTH_64];
-       char tmp3[TFC_STRING_LENGTH_64];
-       char tmp4[TFC_STRING_LENGTH_64];
-
-       line1 = rte_zmalloc("data", TFC_STRING_LENGTH_256, 8);
-       line2 = rte_zmalloc("data", TFC_STRING_LENGTH_256, 8);
-       line3 = rte_zmalloc("data", TFC_STRING_LENGTH_256, 8);
-       line4 = rte_zmalloc("data", TFC_STRING_LENGTH_256, 8);
-       if (!line1 || !line2 || !line3 || !line4) {
-               rte_free(line1);
-               rte_free(line2);
-               rte_free(line3);
-               rte_free(line4);
-               fprintf(fd, "%s: Failed to allocate temp buffer\n",
-                          __func__);
-               return;
-       }
-
-       fprintf(fd, ":LREC: opcode:%s\n", get_lrec_opcode_str(em_info->opcode));
-
-       snprintf(line1, TFC_STRING_LENGTH_256, "+-+--+-Epoch-+--+--+--+");
-       snprintf(line2, TFC_STRING_LENGTH_256, " V|rs|  0  1 |Op|St|ah|");
-       snprintf(line3, TFC_STRING_LENGTH_256, "+-+--+----+--+--+--+--+");
-       snprintf(line4, TFC_STRING_LENGTH_256, " %1d %2d %4d %2d %2d %2d %2d ",
-                em_info->valid,
-                em_info->rec_size,
-                em_info->epoch0,
-                em_info->epoch1,
-                em_info->opcode,
-                em_info->strength,
-                em_info->act_hint);
-
-       if (em_info->opcode != 2 && em_info->opcode != 3) {
-               /* All but FAST */
-               snprintf(tmp1, TFC_STRING_LENGTH_64, "-Act Rec--+");
-               snprintf(tmp2, TFC_STRING_LENGTH_64, " Ptr      |");
-               snprintf(tmp3, TFC_STRING_LENGTH_64, "----------+");
-               snprintf(tmp4, TFC_STRING_LENGTH_64, "0x%08x ",
-                        em_info->act_rec_ptr);
-       } else {
-               /* Just FAST */
-               snprintf(tmp1, TFC_STRING_LENGTH_64, "-------+");
-               snprintf(tmp2, TFC_STRING_LENGTH_64, " Dest  |");
-               snprintf(tmp3, TFC_STRING_LENGTH_64, "-------+");
-               snprintf(tmp4, TFC_STRING_LENGTH_64, "0x05%x ",
-                        em_info->destination);
-       }
-
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-
-       if (em_info->opcode == 4 || em_info->opcode == 6) {
-               /* CT only */
-               snprintf(tmp1, TFC_STRING_LENGTH_64, 
"--+--+-------------TCP-------+--+---+");
-               snprintf(tmp2, TFC_STRING_LENGTH_64, "Dr|ue| Win|   lc  |   op  
|oi|st|tmr|");
-               snprintf(tmp3, TFC_STRING_LENGTH_64, 
"--+--+----+-------+-------+--+--+---+");
-               snprintf(tmp4, TFC_STRING_LENGTH_64, "%2d %2d %4d %0x5x %0x5x 
%2d %2d %3d ",
-                        em_info->tcp_direction,
-                        em_info->tcp_update_en,
-                        em_info->tcp_win,
-                        em_info->tcp_msb_loc,
-                        em_info->tcp_msb_opp,
-                        em_info->tcp_msb_opp_init,
-                        em_info->state,
-                        em_info->timer_value);
-       } else if (em_info->opcode != 8) {
-               /* Not CT and nor RECYCLE */
-               snprintf(tmp1, TFC_STRING_LENGTH_64, 
"--+--+--+-------FC-------+");
-               snprintf(tmp2, TFC_STRING_LENGTH_64, "RI|as|pm|op|tp|     Ptr  
|");
-               snprintf(tmp3, TFC_STRING_LENGTH_64, 
"--+--+--+--+--+----------+");
-               snprintf(tmp4, TFC_STRING_LENGTH_64, "%2d %2d %2d %2d %2d 
0x%08x ",
-                        em_info->ring_table_idx,
-                        em_info->act_rec_size,
-                        em_info->paths_m1,
-                        em_info->fc_op,
-                        em_info->fc_type,
-                        em_info->fc_ptr);
-       } else {
-               snprintf(tmp1, TFC_STRING_LENGTH_64, "--+--+--+---------+");
-               snprintf(tmp2, TFC_STRING_LENGTH_64, "RD|pf|mp| cMData  |");
-               snprintf(tmp3, TFC_STRING_LENGTH_64, "--+--+--+---------+");
-               snprintf(tmp4, TFC_STRING_LENGTH_64, "%2d 0x%2x %2d %08x ",
-                        em_info->recycle_dest,
-                        em_info->prof_func,
-                        em_info->meta_prof,
-                        em_info->metadata);
-       }
-
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-
-       snprintf(tmp1, TFC_STRING_LENGTH_64, "-----Range-+\n");
-       snprintf(tmp2, TFC_STRING_LENGTH_64, "Prof|  Idx |\n");
-       snprintf(tmp3, TFC_STRING_LENGTH_64, "----+------+\n");
-       snprintf(tmp4, TFC_STRING_LENGTH_64, "0x%02x 0x%04x\n",
-                em_info->range_profile,
-                em_info->range_index);
-
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-
-       fprintf(fd, "%s%s%s%s",
-                  line1,
-                  line2,
-                  line3,
-                  line4);
-
-       fputs("Key:", fd);
-       for (i = 0; i < ((em_info->rec_size + 1) * 32); i++) {
-               if (i % 32 == 0)
-                       fprintf(fd, "\n%04d:  ", i);
-               fprintf(fd, "%02x", em_info->key[i]);
-       }
-       i = ((em_info->rec_size + 1) * 32);
-       fprintf(fd, "\nKey Reversed:\n%04d:  ", i - 32);
-       do {
-               i--;
-               fprintf(fd, "%02x", em_info->key[i]);
-               if (i != 0 && i % 32 == 0)
-                       fprintf(fd, "\n%04d:  ", i - 32);
-       } while (i > 0);
-       fputs("\n", fd);
-
-       if (em_info->opcode != 2 && em_info->opcode != 3)
-               act_show(fd, &em_info->act_info, em_info->act_rec_ptr << 5);
-
-       rte_free(line1);
-       rte_free(line2);
-       rte_free(line3);
-       rte_free(line4);
-}
-
-struct mod_field_s {
-       uint8_t num_bits;
-       const char *name;
-};
-
-struct mod_data_s {
-       uint8_t num_fields;
-       const char *name;
-       struct mod_field_s field[4];
-};
-
-struct mod_data_s mod_data[] = {
-       {1, "Replace", {{16,  "DPort"}}},
-       {1, "Replace", {{16,  "SPort"}}},
-       {1, "Replace", {{32,  "IPv4 DIP"}}},
-       {1, "Replace", {{32,  "IPv4 SIP"}}},
-       {1, "Replace", {{128, "IPv6 DIP"}}},
-       {1, "Replace", {{128, "IPv6 SIP"}}},
-       {1, "Replace", {{48,  "SMAC"}}},
-       {1, "Replace", {{48,  "DMAC"}}},
-       {2, "Update Field",  {{16, "uf_vec"}, {32, "uf_data"}}},
-       {3, "Tunnel Modify", {{16, "tun_mv"}, {16, "tun_ex_prot"}, {16, 
"tun_new_prot"}}},
-       {4, "TTL Update",    {{5,  "alt_pfid"}, {12, "alt_vid"}, {10, "rsvd"}, 
{5, "ttl_op"}}},
-       {4, "Replace/Add Outer VLAN", {{16, "tpid"}, {3, "pri"}, {1, "de"}, 
{12, "vid"}}},
-       {4, "Replace/Add Inner",      {{16, "tpid"}, {3, "pri"}, {1, "de"}, 
{12, "vid"}}},
-       {0, "Remove outer VLAN", {{0, NULL}}},
-       {0, "Remove inner VLAN", {{0, NULL}}},
-       {4, "Metadata Update",   {{2, "md_op"}, {4, "md_prof"}, {10, "rsvd"}, 
{32, "md_data"}}},
-};
-
-static void mod_decode(uint32_t *data, char *mod_str)
-{
-       int i;
-       int j;
-       int k;
-       uint16_t mod_vector;
-       int32_t row_offset = 64;
-       int32_t read_offset;
-       int32_t row = 0;
-       uint32_t val[8];
-       char str[256];
-       int16_t vect;
-       uint16_t bit = 0x8000;
-
-       row_offset -= 16;
-       read_offset = row_offset;
-       mod_vector = tfc_getbits(data, read_offset, 16);
-       snprintf(mod_str,
-                TFC_MOD_STRING_LENGTH,
-                "\nModify Record: Vector:0x%08x\n", mod_vector);
-
-       for (vect = 15; vect >= 0; vect--) {
-               if (mod_vector & bit) {
-                       snprintf(str, TFC_STRING_LENGTH_256, "%s: ", 
mod_data[vect].name);
-                       strcat(mod_str, str);
-
-                       for (i = 0; i < mod_data[vect].num_fields; i++) {
-                               row_offset -= mod_data[vect].field[i].num_bits;
-                               if (row_offset < 0) {
-                                       row++;
-                                       row_offset = 64 + row_offset;
-                               }
-                               read_offset = row_offset + (row * 64);
-
-                               for (j = 0; j < 
mod_data[vect].field[i].num_bits / 32; j++) {
-                                       val[j] = tfc_getbits(data, read_offset, 
32);
-                                       read_offset -= 32;
-                               }
-
-                               if (mod_data[vect].field[i].num_bits % 32) {
-                                       val[j] = tfc_getbits(data,
-                                                            read_offset,
-                                                    
(mod_data[vect].field[i].num_bits % 32));
-                                       j++;
-                               }
-
-                               snprintf(str,
-                                        TFC_STRING_LENGTH_256,
-                                        "%s:0x",
-                                        mod_data[vect].field[i].name);
-                               strcat(mod_str, str);
-
-                               switch (mod_data[vect].field[i].num_bits) {
-                               case 128:
-                                       for (k = 0; k < 8; k++) {
-                                               snprintf(str,
-                                                        TFC_STRING_LENGTH_256,
-                                                        "%08x",
-                                                        val[k]);
-                                               strcat(mod_str, str);
-                                       }
-                                       break;
-                               case 48:
-                                       snprintf(str, TFC_STRING_LENGTH_256, 
"%08x", val[0]);
-                                       strcat(mod_str, str);
-                                       snprintf(str,
-                                                TFC_STRING_LENGTH_256,
-                                                "%04x",
-                                                (val[1] & 0xffff));
-                                       strcat(mod_str, str);
-                                       break;
-                               case 32:
-                                       snprintf(str, TFC_STRING_LENGTH_256, 
"%08x ", val[0]);
-                                       strcat(mod_str, str);
-                                       break;
-                               case 16:
-                                       snprintf(str, TFC_STRING_LENGTH_256, 
"%04x ", val[0]);
-                                       strcat(mod_str, str);
-                                       break;
-                               default:
-                                       snprintf(str, TFC_STRING_LENGTH_256, 
"%04x ",
-                                                (val[0] &
-                                                 ((1 << 
mod_data[vect].field[i].num_bits) - 1)));
-                                       strcat(mod_str, str);
-                                       break;
-                               }
-                       }
-
-                       snprintf(str, TFC_STRING_LENGTH_256, "\n");
-                       strcat(mod_str, str);
-               }
-
-               bit = bit >> 1;
-       }
-
-       snprintf(str, TFC_STRING_LENGTH_256, "\n");
-       strcat(mod_str, str);
-}
-
-static void enc_decode(uint32_t *data, char *enc_str)
-{
-       uint16_t vector;
-       char str[64];
-       uint32_t val[16];
-       uint32_t offset = 0;
-       uint8_t vtag;
-       uint8_t l2;
-       uint8_t l3;
-       uint8_t l4;
-       uint8_t tunnel;
-
-       vector = tfc_getbits(data, offset, 16);
-       offset += 16;
-
-       vtag = ((vector >> 2) & 0xf);
-       l2 = ((vector >> 6) & 0x1);
-       l3 = ((vector >> 7) & 0x7);
-       l4 = ((vector >> 10) & 0x7);
-       tunnel = ((vector >> 13) & 0x7);
-
-       snprintf(enc_str,
-                TFC_ENC_STRING_LENGTH,
-                "Encap Record: vector:0x%04x\n", vector);
-
-       snprintf(str, TFC_STRING_LENGTH_64,
-                "Valid:%d EC:%d VTAG:0x%01x L2:%d L3:0x%01x L4:0x%01x 
Tunnel:0x%01x\n",
-                (vector & 0x1),
-                ((vector >> 1) & 0x1),
-                vtag,
-                l2,
-                l3,
-                l4,
-                tunnel);
-
-       strcat(enc_str, str);
-
-       if (l2) { /* L2 */
-               snprintf(str, TFC_STRING_LENGTH_64, "L2:\n");
-               strcat(enc_str, str);
-
-               val[0] = tfc_getbits(data, offset, 32);
-               offset += 32;
-               val[1] = tfc_getbits(data, offset, 16);
-               offset += 16;
-
-               snprintf(str, TFC_STRING_LENGTH_64, "DMAC:0x%08x%04x\n", 
val[0], val[1]);
-               strcat(enc_str, str);
-       }
-
-       if (l3) { /* L3 */
-               snprintf(str, TFC_STRING_LENGTH_64, "L3:\n");
-               strcat(enc_str, str);
-       }
-
-       if (l4) { /* L4 */
-               snprintf(str, TFC_STRING_LENGTH_64, "L4:\n");
-               strcat(enc_str, str);
-       }
-
-       if (tunnel) { /* Tunnel */
-               snprintf(str, TFC_STRING_LENGTH_64, "Tunnel:\n");
-               strcat(enc_str, str);
-       }
-}
-
-static void act_decode(uint32_t *act_ptr,
-                      uintptr_t base,
-                      struct act_info_t *act_info)
-{
-       if (!act_ptr || !act_info) {
-               PMD_DRV_LOG_LINE(ERR, "act_ptr %p, act_info %p", act_ptr, 
act_info);
-               return;
-       }
-
-       act_info->valid = false;
-       act_info->vector = tfc_getbits(act_ptr, 0, 3);
-
-       if (act_info->vector == 0 ||
-           act_info->vector == 1 ||
-           act_info->vector == 4)
-               act_info->valid = true;
-
-       switch (act_info->vector) {
-       case 0:
-               act_info->compact.drop = tfc_getbits(act_ptr, 3, 1);
-               act_info->compact.vlan_del_rep = tfc_getbits(act_ptr, 4, 2);
-               act_info->compact.vnic_vport = tfc_getbits(act_ptr, 6, 11);
-               act_info->compact.dest_op = tfc_getbits(act_ptr, 17, 2);
-               act_info->compact.decap_func = tfc_getbits(act_ptr, 19, 5);
-               act_info->compact.mirror = tfc_getbits(act_ptr, 24, 5);
-               act_info->compact.meter_ptr = tfc_getbits(act_ptr, 29, 10);
-               act_info->compact.stat0_offs = tfc_getbits(act_ptr, 39, 3);
-               act_info->compact.stat0_ing_egr = tfc_getbits(act_ptr, 42, 1);
-               act_info->compact.stat0_ctr_type = tfc_getbits(act_ptr, 43, 2);
-               act_info->compact.mod_offs = tfc_getbits(act_ptr, 45, 5);
-               act_info->compact.enc_offs = tfc_getbits(act_ptr, 50, 6);
-               act_info->compact.src_offs = tfc_getbits(act_ptr, 56, 4);
-
-               if (act_info->compact.mod_offs) {
-                       mod_decode((uint32_t *)(act_ptr + 
(act_info->compact.mod_offs <<  3)),
-                                  act_info->compact.mod_str);
-               }
-               if (act_info->compact.stat0_offs)
-                       stat_decode(act_info->compact.stat0_str,
-                                   0,
-                                   act_info->compact.stat0_ctr_type,
-                                   (uint32_t *)(act_ptr + 
(act_info->compact.stat0_offs <<  3)));
-               if (act_info->compact.enc_offs)
-                       enc_decode((uint32_t *)(act_ptr + 
(act_info->compact.enc_offs <<  3)),
-                                  act_info->compact.enc_str);
-       break;
-       case 1:
-               act_info->full.drop = tfc_getbits(act_ptr, 3, 1);
-               act_info->full.vlan_del_rep = tfc_getbits(act_ptr, 4, 2);
-               act_info->full.vnic_vport = tfc_getbits(act_ptr, 6, 11);
-               act_info->full.dest_op = tfc_getbits(act_ptr, 17, 2);
-               act_info->full.decap_func = tfc_getbits(act_ptr, 19, 5);
-               act_info->full.mirror = tfc_getbits(act_ptr, 24, 5);
-               act_info->full.meter_ptr = tfc_getbits(act_ptr, 29, 10);
-               act_info->full.stat0_ptr = tfc_getbits(act_ptr, 39, 28);
-               act_info->full.stat0_ing_egr = tfc_getbits(act_ptr, 67, 1);
-               act_info->full.stat0_ctr_type = tfc_getbits(act_ptr, 68, 2);
-               act_info->full.stat1_ptr = tfc_getbits(act_ptr, 70, 28);
-               act_info->full.stat1_ing_egr = tfc_getbits(act_ptr, 98, 1);
-               act_info->full.stat1_ctr_type = tfc_getbits(act_ptr, 99, 2);
-               act_info->full.mod_ptr = tfc_getbits(act_ptr, 101, 28);
-               act_info->full.enc_ptr = tfc_getbits(act_ptr, 129, 28);
-               act_info->full.src_ptr = tfc_getbits(act_ptr, 157, 28);
-
-               if (act_info->full.mod_ptr)
-                       mod_decode((uint32_t *)(base + (act_info->full.mod_ptr 
<<  3)),
-                                  act_info->full.mod_str);
-               if (act_info->full.stat0_ptr)
-                       stat_decode(act_info->full.stat0_str,
-                                   0,
-                                   act_info->full.stat0_ctr_type,
-                                   (uint32_t *)(base + 
(act_info->full.stat0_ptr <<  3)));
-               if (act_info->full.stat1_ptr)
-                       stat_decode(act_info->full.stat1_str,
-                                   1,
-                                   act_info->full.stat1_ctr_type,
-                                   (uint32_t *)(base + 
(act_info->full.stat1_ptr <<  3)));
-               if (act_info->full.enc_ptr)
-                       enc_decode((uint32_t *)(base + (act_info->full.enc_ptr 
<<  3)),
-                                  act_info->full.enc_str);
-       break;
-       case 4:
-               act_info->mcg.nxt_ptr = tfc_getbits(act_ptr, 6, 26);
-               act_info->mcg.act_hint0    = tfc_getbits(act_ptr, 32, 2);
-               act_info->mcg.act_rec_ptr0 = tfc_getbits(act_ptr, 34, 26);
-               act_info->mcg.act_hint1    = tfc_getbits(act_ptr, 60, 2);
-               act_info->mcg.act_rec_ptr1 = tfc_getbits(act_ptr, 62, 26);
-               act_info->mcg.act_hint2    = tfc_getbits(act_ptr, 88, 2);
-               act_info->mcg.act_rec_ptr2 = tfc_getbits(act_ptr, 90, 26);
-               act_info->mcg.act_hint3    = tfc_getbits(act_ptr, 116, 2);
-               act_info->mcg.act_rec_ptr3 = tfc_getbits(act_ptr, 118, 26);
-               act_info->mcg.act_hint4    = tfc_getbits(act_ptr, 144, 2);
-               act_info->mcg.act_rec_ptr4 = tfc_getbits(act_ptr, 146, 26);
-               act_info->mcg.act_hint5    = tfc_getbits(act_ptr, 172, 2);
-               act_info->mcg.act_rec_ptr5 = tfc_getbits(act_ptr, 174, 26);
-               act_info->mcg.act_hint6    = tfc_getbits(act_ptr, 200, 2);
-               act_info->mcg.act_rec_ptr6 = tfc_getbits(act_ptr, 202, 26);
-               act_info->mcg.act_hint7    = tfc_getbits(act_ptr, 228, 2);
-               act_info->mcg.act_rec_ptr7 = tfc_getbits(act_ptr, 230, 26);
-               break;
-       }
-}
-
-void act_show(FILE *fd, struct act_info_t *act_info, uint32_t offset)
-{
-       if (act_info->valid) {
-               switch (act_info->vector) {
-               case 0:
-                       fputs("Compact Action Record\n", fd);
-                       
fputs("+----------+--+-+--+--+-----+--+-+------+---Stat0"
-                             "---+------+------+------+\n", fd);
-                       fputs("|   Index  |V |d|dr|do|vn/p |df|m| mtp  |ct|ie| 
offs|"
-                             " moffs| eoffs| soffs|\n", fd);
-                       
fputs("+----------+--+-+--+--+-----+--+-+------+--+--+-----+"
-                             "------+------+------+\n", fd);
-
-                       fprintf(fd,
-       " 0x%08x %2d %d %2d %2d 0x%03x %2d %d 0x%04x %2d %2d  0x%02x   0x%02x   
0x%02x   0x%02x\n",
-                               offset,
-                               act_info->vector,
-                               act_info->compact.drop,
-                               act_info->compact.vlan_del_rep,
-                               act_info->compact.dest_op,
-                               act_info->compact.vnic_vport,
-                               act_info->compact.decap_func,
-                               act_info->compact.mirror,
-                               act_info->compact.meter_ptr,
-                               act_info->compact.stat0_ctr_type,
-                               act_info->compact.stat0_ing_egr,
-                               act_info->compact.stat0_offs,
-                               act_info->compact.mod_offs,
-                               act_info->compact.enc_offs,
-                               act_info->compact.src_offs);
-
-               if (act_info->compact.mod_offs)
-                       fprintf(fd, "%s", act_info->compact.mod_str);
-               if (act_info->compact.stat0_offs)
-                       fprintf(fd, "%s", act_info->compact.stat0_str);
-               if (act_info->compact.enc_offs)
-                       fprintf(fd, "%s", act_info->compact.enc_str);
-               break;
-               case 1:
-               fputs("Full Action Record\n", fd);
-               
fputs("+----------+--+-+--+--+-----+--+-+------+----Stat0-------+------Stat1-----+----------+----------+----------+\n",
-                     fd);
-               fputs("|   Index  |V |d|dr|do|vn/p |df|m| mtp  |ct|ie|    ptr   
|ct|ie|    ptr   |   mptr   |   eptr   |   sptr   |\n",
-                     fd);
-               
fputs("+----------+--+-+--+--+-----+--+-+------+--+--+----------+--+--+----------+----------+----------+----------+\n",
-                     fd);
-
-               fprintf(fd, " 0x%08x %2d %d %2d %2d 0x%03x %2d %d 0x%04x %2d 
%2d 0x%08x %2d %2d 0x%08x 0x%08x 0x%08x 0x%08x\n",
-                       offset,
-                       act_info->vector,
-                       act_info->full.drop,
-                       act_info->full.vlan_del_rep,
-                       act_info->full.dest_op,
-                       act_info->full.vnic_vport,
-                       act_info->full.decap_func,
-                       act_info->full.mirror,
-                       act_info->full.meter_ptr,
-                       act_info->full.stat0_ctr_type,
-                       act_info->full.stat0_ing_egr,
-                       act_info->full.stat0_ptr,
-                       act_info->full.stat1_ctr_type,
-                       act_info->full.stat1_ing_egr,
-                       act_info->full.stat1_ptr,
-                       act_info->full.mod_ptr,
-                       act_info->full.enc_ptr,
-                       act_info->full.src_ptr);
-               if (act_info->full.mod_ptr)
-                       fprintf(fd, "%s", act_info->full.mod_str);
-               if (act_info->full.stat0_ptr)
-                       fprintf(fd, "%s", act_info->full.stat0_str);
-               if (act_info->full.stat1_ptr)
-                       fprintf(fd, "%s", act_info->full.stat1_str);
-               if (act_info->full.enc_ptr)
-                       fprintf(fd, "%s", act_info->full.enc_str);
-
-               break;
-               case 4:
-                       fputs("Multicast Group Record\n", fd);
-                       
fputs("+----------+--+----------+----------+--+----------+--+----------+--+----------+--+----------+--+----------+--+----------+--+----------+--+\n",
-                             fd);
-                       fputs("|   Index  |V |  NxtPtr  | ActRPtr0 |ah| 
ActRPtr1 |ah| ActRPtr2 |ah| ActRPtr3 |ah| ActRPtr4 |ah| ActRPtr5 |ah| ActRPtr6 
|ah| ActRPtr7 |ah|\n",
-                             fd);
-                       
fputs("+----------+--+----------+----------+--+----------+--+----------+--+----------+--+----------+--+----------+--+----------+--+----------+--+\n",
-                             fd);
-
-               fprintf(fd, " 0x%08x %2d 0x%08x 0x%08x %2d 0x%08x %2d 0x%08x 
%2d 0x%08x %2d 0x%08x %2d 0x%08x %2d 0x%08x %2d 0x%08x %2d\n",
-                       offset,
-                       act_info->vector,
-                       act_info->mcg.nxt_ptr,
-                       act_info->mcg.act_rec_ptr0,
-                       act_info->mcg.act_hint0,
-                       act_info->mcg.act_rec_ptr1,
-                       act_info->mcg.act_hint1,
-                       act_info->mcg.act_rec_ptr2,
-                       act_info->mcg.act_hint2,
-                       act_info->mcg.act_rec_ptr3,
-                       act_info->mcg.act_hint3,
-                       act_info->mcg.act_rec_ptr4,
-                       act_info->mcg.act_hint4,
-                       act_info->mcg.act_rec_ptr5,
-                       act_info->mcg.act_hint5,
-                       act_info->mcg.act_rec_ptr6,
-                       act_info->mcg.act_hint6,
-                       act_info->mcg.act_rec_ptr7,
-                       act_info->mcg.act_hint7);
-                       break;
-               }
-       }
-}
-
-struct stat_fields_s {
-       uint64_t pkt_cnt;
-       uint64_t byte_cnt;
-       union {
-               struct {
-                       uint32_t timestamp;
-                       uint16_t tcp_flags;
-               } c_24b;
-               struct {
-                       uint64_t meter_pkt_cnt;
-                       uint64_t meter_byte_cnt;
-               } c_32b;
-               struct {
-                       uint64_t timestamp : 32;
-                       uint64_t tcp_flags : 16;
-                       uint64_t meter_pkt_cnt : 38;
-                       uint64_t meter_byte_cnt : 42;
-               } c_32b_all;
-       } t;
-};
-
-#define STATS_COMMON_FMT    \
-       "Stats:%d Pkt count:%016" PRIu64 " Byte count:%016" PRIu64 "\n"
-#define STATS_METER_FMT     \
-       "\tMeter pkt count:%016" PRIu64 " Meter byte count:%016" PRIu64 "\n"
-#define STATS_TCP_FLAGS_FMT \
-       "\tTCP flags:0x%04x timestamp:0x%08x\n"
-
-static void stat_decode(char *str,
-                       uint8_t stat_num,
-                       uint8_t stat_ctr_type,
-                       uint32_t *stat_ptr)
-{
-       struct stat_fields_s *stats = (struct stat_fields_s *)stat_ptr;
-       uint64_t meter_pkt_cnt;
-       uint64_t meter_byte_cnt;
-       uint32_t timestamp;
-       char tmp0[96];
-
-       /* Common fields */
-       snprintf(str,
-                TFC_STAT_STRING_LENGTH,
-                STATS_COMMON_FMT,
-                stat_num, stats->pkt_cnt, stats->byte_cnt);
-
-       switch (stat_ctr_type) {
-       case CFA_BLD_STAT_COUNTER_SIZE_16B:
-               /* Nothing further to do */
-               break;
-       case CFA_BLD_STAT_COUNTER_SIZE_24B:
-               timestamp = stats->t.c_24b.timestamp;
-               snprintf(tmp0,
-                        TFC_STRING_LENGTH_96,
-                        STATS_TCP_FLAGS_FMT,
-                        stats->t.c_24b.tcp_flags,
-                        timestamp);
-               strcat(str, tmp0);
-               break;
-       case CFA_BLD_STAT_COUNTER_SIZE_32B:
-               snprintf(tmp0,
-                        TFC_STRING_LENGTH_96,
-                        STATS_METER_FMT,
-                        stats->t.c_32b.meter_pkt_cnt,
-                        stats->t.c_32b.meter_byte_cnt);
-               strcat(str, tmp0);
-               break;
-       case CFA_BLD_STAT_COUNTER_SIZE_32B_ALL:
-               meter_pkt_cnt = stats->t.c_32b_all.meter_pkt_cnt;
-               meter_byte_cnt = stats->t.c_32b_all.meter_byte_cnt;
-               timestamp = stats->t.c_32b_all.timestamp;
-               snprintf(tmp0,
-                        TFC_STRING_LENGTH_96,
-                        STATS_METER_FMT STATS_TCP_FLAGS_FMT,
-                        meter_pkt_cnt,
-                        meter_byte_cnt,
-                        stats->t.c_32b_all.tcp_flags,
-                        timestamp);
-               strcat(str, tmp0);
-               break;
-       default:
-                      /* Should never happen since type is 2 bits in size */
-               snprintf(tmp0,
-                        TFC_STRING_LENGTH_96,
-                        "Unknown counter type %d\n", stat_ctr_type);
-               strcat(str, tmp0);
-               break;
-       }
-}
-
-static void bucket_decode(uint32_t *bucket_ptr,
-                         struct bucket_info_t *bucket_info,
-                         struct tfc_ts_mem_cfg *lkup_mem_cfg,
-                         struct tfc_ts_mem_cfg *act_mem_cfg)
-{
-       int i;
-       int offset = 0;
-       uint8_t *em_ptr;
-
-       bucket_info->valid = false;
-       bucket_info->chain = tfc_getbits(bucket_ptr, 254, 1);
-       bucket_info->chain_ptr = tfc_getbits(bucket_ptr, 228, 26);
-
-       if  (bucket_info->chain ||
-            bucket_info->chain_ptr)
-               bucket_info->valid = true;
-
-       for (i = 0; i < TFC_BUCKET_ENTRIES; i++) {
-               bucket_info->entries[i].entry_ptr = tfc_getbits(bucket_ptr, 
offset, 26);
-               offset +=  26;
-               bucket_info->entries[i].hash_msb = tfc_getbits(bucket_ptr, 
offset, 12);
-               offset += 12;
-
-               if  (bucket_info->entries[i].hash_msb ||
-                    bucket_info->entries[i].entry_ptr) {
-                       bucket_info->valid = true;
-
-                       em_ptr = (uint8_t *)get_address(lkup_mem_cfg,
-                                                       
bucket_info->entries[i].entry_ptr * 32);
-                       em_decode((uint32_t *)em_ptr, &bucket_info->em_info[i], 
act_mem_cfg);
-               }
-       }
-}
-
-static void bucket_show(FILE *fd, struct bucket_info_t *bucket_info, uint32_t 
offset)
-{
-       int i;
-
-       if (bucket_info->valid) {
-               fprintf(fd, "Static Bucket:0x%08x\n", offset);
-               fputs("+-+ +---------+ +----------------------------------- 
Entries --------------------------------------------------------------+\n",
-                     fd);
-               fputs(" C     CPtr     0                 1                 2    
             3                 4                 5\n",
-                     fd);
-               fputs("+-+ +---------+ +-----+---------+ +-----+---------+ 
+-----+---------+ +-----+---------+ +-----+---------+ +------+---------+\n",
-                     fd);
-               fprintf(fd, " %d   0x%07x",
-                          bucket_info->chain,
-                          bucket_info->chain_ptr);
-               for (i = 0; i < TFC_BUCKET_ENTRIES; i++) {
-                       fprintf(fd, "   0x%03x 0x%07x",
-                                  bucket_info->entries[i].hash_msb,
-                                  bucket_info->entries[i].entry_ptr);
-               }
-               fputs("\n", fd);
-
-               /*
-                * Now display each valid EM entry from the bucket
-                */
-               for (i = 0; i < TFC_BUCKET_ENTRIES; i++) {
-                       if (bucket_info->entries[i].entry_ptr != 0) {
-                               if (bucket_info->em_info[i].valid)
-                                       em_show(fd, &bucket_info->em_info[i]);
-                               else
-                                       fputs("<<< Invalid LREC  >>>\n", fd);
-                       }
-               }
-
-               fputs("\n", fd);
-       }
-}
-
-int tfc_em_show(FILE *fd, struct tfc *tfcp, uint8_t tsid, enum cfa_dir dir)
-{
-       int rc = 0;
-       enum cfa_scope_type scope_type;
-       bool is_bs_owner;
-       struct tfc_ts_mem_cfg *lkup_mem_cfg;
-       struct tfc_ts_mem_cfg *act_mem_cfg;
-       uint32_t bucket_row;
-       uint32_t bucket_count;
-       uint8_t *bucket_ptr;
-       struct bucket_info_t *bucket_info;
-       uint32_t bucket_offset = 0;
-       bool valid;
-
-       rc = tfo_ts_get(tfcp->tfo, tsid, &scope_type, NULL, &valid, NULL);
-       if (rc != 0) {
-               fprintf(fd, "%s: failed to get tsid: %d\n",
-                          __func__, rc);
-               return -EINVAL;
-       }
-       if (!valid) {
-               fprintf(fd, "%s: tsid not allocated %d\n",
-                          __func__, tsid);
-               return -EINVAL;
-       }
-
-       lkup_mem_cfg = rte_zmalloc("data", sizeof(*lkup_mem_cfg), 8);
-       if (!lkup_mem_cfg)
-               return -ENOMEM;
-
-       rc = tfo_ts_get_mem_cfg(tfcp->tfo, tsid,
-                               dir,
-                               CFA_REGION_TYPE_LKUP,
-                               &is_bs_owner,
-                               lkup_mem_cfg);   /* Gets rec_cnt */
-       if (rc != 0) {
-               fprintf(fd, "%s: tfo_ts_get_mem_cfg() failed for LKUP: %d\n",
-                          __func__, rc);
-               rte_free(lkup_mem_cfg);
-               return -EINVAL;
-       }
-
-       act_mem_cfg = rte_zmalloc("data", sizeof(*act_mem_cfg), 8);
-       if (!act_mem_cfg) {
-               rte_free(lkup_mem_cfg);
-               return -ENOMEM;
-       }
-
-       rc = tfo_ts_get_mem_cfg(tfcp->tfo, tsid,
-                               dir,
-                               CFA_REGION_TYPE_ACT,
-                               &is_bs_owner,
-                               act_mem_cfg);   /* Gets rec_cnt */
-       if (rc != 0) {
-               fprintf(fd, "%s: tfo_ts_get_mem_cfg() failed for ACT: %d\n",
-                          __func__, rc);
-               rte_free(lkup_mem_cfg);
-               rte_free(act_mem_cfg);
-               return -EINVAL;
-       }
-
-       bucket_count = lkup_mem_cfg->lkup_rec_start_offset;
-
-       fputs(" Lookup Table\n", fd);
-       fprintf(fd, " Static bucket count:%d\n", bucket_count);
-
-       bucket_info = rte_zmalloc("data", sizeof(*bucket_info), 8);
-       if (!bucket_info) {
-               fprintf(fd, "%s: Failed to allocate bucket info struct\n",
-                          __func__);
-               rte_free(lkup_mem_cfg);
-               rte_free(act_mem_cfg);
-               return -ENOMEM;
-       }
-
-       /*
-        * Go through the static buckets looking for valid entries.
-        * If a valid entry is found then  display it and also display
-        * the EM entries it points to.
-        */
-       for (bucket_row = 0; bucket_row < bucket_count; ) {
-               bucket_ptr = (uint8_t *)get_address(lkup_mem_cfg, 
bucket_offset);
-               bucket_decode((uint32_t *)bucket_ptr, bucket_info, 
lkup_mem_cfg, act_mem_cfg);
-
-               if (bucket_info->valid)
-                       bucket_show(fd, bucket_info, bucket_offset);
-
-               bucket_offset += TFC_BUCKET_SIZE_BYTES;
-               bucket_row++;
-       }
-
-       rte_free(bucket_info);
-       rte_free(lkup_mem_cfg);
-       rte_free(act_mem_cfg);
-
-       return rc;
-}
-
-void tfc_backing_store_dump(FILE *fd)
-{
-       uint16_t port;
-       struct bnxt *bp;
-       uint8_t tsid;
-       int dir;
-
-       RTE_ETH_FOREACH_DEV(port) {
-               bp = bnxt_pmd_get_bp(port);
-               if (bp && !tfo_tsid_get(bp->tfcp.tfo, &tsid)) {
-                       for (dir = 0; dir <= 1; dir++) {
-                               fputs("+------------------- EM 
------------------+\n", fd);
-                               fprintf(fd, "+--------- Port:%d TSID:%d DIR:%s 
----------+\n",
-                                       port, tsid, (dir == CFA_DIR_RX ? "rx" : 
"tx"));
-                               
fputs("+-----------------------------------------+\n", fd);
-                               tfc_em_show(fd, &bp->tfcp, tsid, dir);
-
-                               fputs("+------------------- WC 
------------------+\n", fd);
-                               fprintf(fd, "+--------- Port:%d TSID:%d DIR:%s 
----------+\n",
-                                       port, tsid, (dir == CFA_DIR_RX ? "rx" : 
"tx"));
-                               
fputs("+-----------------------------------------+\n", fd);
-                               tfc_wc_show(fd, &bp->tfcp, tsid, dir);
-                       }
-               }
-       }
-}
diff --git a/drivers/net/bnxt/tf_core/v3/tfc_tcam_debug.c 
b/drivers/net/bnxt/tf_core/v3/tfc_tcam_debug.c
deleted file mode 100644
index 8da27b8e81..0000000000
--- a/drivers/net/bnxt/tf_core/v3/tfc_tcam_debug.c
+++ /dev/null
@@ -1,1875 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2024 Broadcom
- * All rights reserved.
- */
-
-#include <stdio.h>
-#include <inttypes.h>
-#include <string.h>
-
-#include "bnxt.h"
-
-#include "tfc.h"
-#include "tfo.h"
-#include "tfc_em.h"
-#include "tfc_debug.h"
-#include "cfa_types.h"
-
-#include "sys_util.h"
-#include "tfc_util.h"
-/* only debug files can include ULP headers */
-#include "ulp_flow_db.h"
-#include "bnxt_ulp_tfc.h"
-#include "bnxt_ulp_utils.h"
-
-#define TFC_STRING_LENGTH_32  32
-#define TFC_STRING_LENGTH_64  64
-#define TFC_STRING_LENGTH_96  96
-#define TFC_STRING_LENGTH_256 256
-
-/* Enable this flag if you want to dump all TCAM records,
- * including the default L2 context records and profile TCAM
- * entries. This method is sub-optimal, but can used for lack of
- * a better way to walk and dump flow DB resources for particular
- * flow types.
- * Disabling this flag will dump WC TCAM entries and their
- * associated action-records by default.
- */
-#define TFC_DEBUG_DUMP_ALL_FLOWS 1
-
-/*
- * Function pointer type for custom processing resources
- */
-typedef int (*FDB_RESOURCE_PROCFUNC)(struct ulp_flow_db_res_params *rp,
-                                    void *frp_ctxt);
-static
-void hex_buf_dump(FILE *fd, const char *hdr, uint8_t *msg,
-                 int msglen, int prtwidth, int linewidth);
-
-struct wc_frp_context {
-       FILE *fd;
-       struct bnxt_ulp_context *ulp_ctxt;
-       struct tfc_ts_mem_cfg *act_mem_cfg;
-};
-
-struct wc_lrec_t {
-       bool valid;
-       uint8_t rec_size;
-       uint16_t epoch0;
-       uint16_t epoch1;
-       uint8_t opcode;
-       uint8_t strength;
-       uint8_t act_hint;
-       uint32_t act_rec_ptr;   /* Not FAST */
-       uint32_t destination;   /* Just FAST */
-       uint8_t tcp_direction;  /* Just CT */
-       uint8_t tcp_update_en;
-       uint8_t tcp_win;
-       uint32_t tcp_msb_loc;
-       uint32_t tcp_msb_opp;
-       uint8_t tcp_msb_opp_init;
-       uint8_t state;
-       uint8_t timer_value;
-       uint16_t ring_table_idx;        /* Not CT and not RECYCLE */
-       uint8_t act_rec_size;
-       uint8_t paths_m1;
-       uint8_t fc_op;
-       uint8_t fc_type;
-       uint32_t fc_ptr;
-       uint8_t recycle_dest;   /* Just Recycle */
-       uint8_t prof_func;
-       uint8_t meta_prof;
-       uint32_t metadata;
-       uint8_t range_profile;
-       uint16_t range_index;
-       struct act_info_t act_info;
-};
-
-/* L2 context TCAM key formats
- *
- * IPv4
- * ----
- * valid                       255       1   TCAM entry is valid
- * spare                       254:253   2   Spare bits.
- * mpass_cnt                   252:251   2   Multi-pass cycle count ? {0,1,2,3}
- * rcyc[3:0]                   250:247   4   Recycle count from prof_in
- * loopback                    246       1   loopback input from prof_in
- * spif                        245:244   2   Source network port from prof_in
- * parif                       243:239   5   Partition provided by input block
- * svif                        238:228   11  Source of the packet: Ethernet 
network port or
- *                                           vnic; provided on prof_in
- * metadata                    227:196   32  Metadata provided by Input block
- * l2ip_func                   195:188   8   Used to create logical (feature 
specific) context
- *                                           TCAM tables. Provided from ILT or 
Recycle.
- * roce                        187       1   ROCE Packet detected by the Parser
- * pure_llc                    186       1   Pure LLC Packet detected by the 
Parser. If set
- *                                           the etype field will contain the 
DSAP/SSAP from
- *                                           LLC header.
- * ot_hdr_type                 185:181   5   5b encoded Outer Tunnel Type (see 
Table 4-12)
- * t_hdr_type                  180:176   5   5b encoded Tunnel Type (see Table 
4-12)
- * tunnel_id/context/L4        175:144   32  Tunnel ID/Tunnel Context/L4 ports 
selected.
- * ADDR0                       143:96    48  ADDR0: DMAC/SMAC/IPv4 selected.
- * ADDR1                       95:48     48  ADDR1: DMAC/SMAC/IPv4 selected.
- * otl2/tl2/l2_vtag_present    47        1   1+ VLAN tags present (L2 selected)
- * otl2/tl2/l2_two_vtags       46        1   2 VLAN tags present (comp. 
flds_num_vtags)
- * otl2/tl2/l2_ovlan_vid       45:34     12  VID from outer VLAN tag if 
present (L2 selected)
- * otl2/tl2/l2_ovlan_tpid_sel  33:31     3   3b encoding for TPID (L2 selected)
- * otl2/tl2/l2_ivlan_vid       30:19     12  VID from inner VLAN tag if 
present (L2 selected)
- * otl2/tl2/l2_ivlan_tpid_sel  18:16     3   3b encoding for TPID (L2 selected)
- * otl2/tl2/l2_etype           15:0      16  L2 Header Ethertype (L2 selected)
- *
- * IPv6
- * ----
- * valid                 255      1    TCAM entry is valid
- * spare                 254:253  2    Spare bits.
- * mpass_cnt             252:251  2    Multi-pass cycle count ? {0,1,2,3}
- * rcyc[3:0]             250:247  4    Recycle count from prof_in
- * loopback              246      1    loopback input from prof_in
- * spif                  245:244  2    Source network port from prof_in
- * parif                 243:239  5    Partition provided by input block
- * svif                  238:228  11   Source of the packet: Ethernet network 
port or
- *                                     vnic; provided on prof_in
- * metadata              227:196  32   Metadata provided by Input block
- * l2ip_func             195:188  8    Used to create logical (feature 
specific) context
- *                                     TCAM tables. Provided from ILT or 
Recycle.
- * roce                  187      1    ROCE Packet detected by the Parser
- * pure_llc              186      1    Pure LLC Packet detected by the Parser. 
If set
- *                                     the etype field will contain the 
DSAP/SSAP from
- *                                     LLC header.
- * ot_hdr_type           185:181  5    5b encoded Outer Tunnel Type (see Table 
4-12)
- * t_hdr_type            180:176  5    5b encoded Tunnel Type (see Table 4-12)
- * tunnel_id/context/L4  175:144  32   Tunnel ID/Tunnel Context/L4 ports 
selected.
- * ADDR0                 143:16   128  ADDR0: IPv6 selected.
- * otl2/tl2/l2_etype     15:0     16   L2 Header Ethertype (L2 selected)
- */
-struct l2ctx_tcam_key_t {
-       uint8_t valid;
-       uint8_t spare;
-       uint8_t mpass_cnt;
-       uint8_t rcyc;
-       uint8_t loopback;
-       uint8_t spif;
-       uint8_t parif;
-       uint16_t svif;
-       uint32_t metadata;
-       uint8_t l2ip_func;
-       uint8_t roce;
-       uint8_t pure_llc;
-       uint8_t ot_hdr_type;
-       uint8_t t_hdr_type;
-       uint32_t tunnel_id_context_L4;
-       union {
-               struct ipv4_key_t {
-                       uint64_t ADDR0;
-                       uint64_t ADDR1;
-                       uint8_t otl2_tl2_l2_vtag_present;
-                       uint8_t otl2_tl2_l2_two_vtags;
-                       uint16_t otl2_tl2_l2_ovlan_vid;
-                       uint8_t otl2_tl2_l2_ovlan_tpid_sel;
-                       uint16_t otl2_tl2_l2_ivlan_vid;
-                       uint8_t otl2_tl2_l2_ivlan_tpid_sel;
-                       uint16_t otl2_tl2_l2_etype;
-               } ipv4;
-               struct ipv6_key_t {
-                       uint64_t ADDR0[2];
-                       uint16_t otl2_tl2_l2_etype;
-               } ipv6;
-       };
-};
-
-/* L2 context TCAM remap
- *
- * prsv_parif      126      1   Preserve incoming partition, i.e. don?t remap.
- * parif           125:121  5   Partition. Replaces parif from Input block
- * prsv_l2ip_ctxt  120      1   Preserve incoming l2ip_ctxt, i.e. don?t remap.
- * l2ip_ctxt       119:109  11  May be used in EM and WC Lookups to support 
logical
- *                              partitions of these tables
- * prsv_prof_func  108      1   Preserve incoming PROF_FUNC, i.e. don?t remap.
- * prof_func       107:100  8   Allow Profile TCAM Lookup Table to be 
logically partitioned.
- * ctxt_opcode     99:98    2   0: BYPASS_CFA
- *                              1: BYPASS_LKUP
- *                              2: NORMAL_FLOW
- *                              3: DROP
- * l2ip_meta_enb   97       1   Enables remap of meta_data from Input block.
- * l2ip_meta       96:62    35  l2ip_meta_prof[2:0] = l2ip_meta[34:32]
- *                              l2ip_meta_data[31:0] = l2ip_meta[31:0]
- * l2ip_act_enb    61       1   Enables remap of Action Record pointer from 
Input block.
- * l2ip_act_data   60:28    33  l2ip_act_hint[1:0] = l2ip_act_data[32:31]
- *                              l2ip_act_scope[4:0] = l2ip_act_data[30:26]
- *                              l2ip_act_rec_ptr[25:0] = l2ip_act_data[25:0]
- * l2ip_rfs_enb    27       1   Enables remap of ring_table_idx and sets 
rfs_valid.
- * l2ip_rfs_data   26:18    9   ring_table_idx[8:0] = l2ip_rfs_data[8:0] (RX 
only)
- * l2ip_dest_enb   17       1   Enables remap of destination from Input block.
- * l2ip_dest_data  16:0     17  destination[16:0] = l2ip_dest_data[16:0]
- */
-struct l2ctx_tcam_remap_t {
-       uint8_t prsv_parif;
-       uint8_t parif;
-       uint8_t prsv_l2ip_ctxt;
-       uint16_t l2ip_ctxt;
-       uint8_t prsv_prof_func;
-       uint8_t prof_func;
-       uint8_t ctxt_opcode;
-       uint8_t l2ip_meta_enb;
-       uint8_t l2ip_meta_prof;
-       uint32_t l2ip_meta_data;
-       uint8_t l2ip_act_enb;
-       uint8_t l2ip_act_hint;
-       uint8_t l2ip_act_scope;
-       uint32_t l2ip_act_ptr;
-       uint8_t l2ip_rfs_enb;
-       uint16_t l2ip_rfs_data;
-       uint8_t l2ip_dest_enb;
-       uint32_t l2ip_dest_data;
-       struct act_info_t act_info;
-};
-
-/* Profile TCAM key
- *
- * valid                 183      1  Valid(1)/Invalid(0) TCAM entry.
- * spare                 182:181  2  Spare bits.
- * loopback              180      1  END.loopback
- * pkt_type              179:176  4  Packet type directly from END bus.
- * rcyc[3:0]             175:172  4  Recycle count from prof_in
- * metadata              171:140  32 From previous stage.
- * agg_error             139      1  Aggregate error flag from Input stage.
- * l2ip_func             138:131  8  L2-IP Context function from Input Lookup 
stage.
- * prof_func             130:123  8  Profile function from L2-IP Context 
Lookup stage.
- * hrec_next             122:121  2  From FLDS Input, General Status
- *                                   1=tunnel/0=no tunnel
- * int_hdr_type          120:119  2  INT header type directly from FLDS.
- * int_hdr_group         118:117  2  INT header group directly from FLDS.
- * int_ifa_tail          116      1  INT metadata is tail stamp.
- * otl2_hdr_valid        115      1  !(flds_otl2_hdr_valid==stop_w_error |
- *                                     flds_otl2_hdr_valid==not_reached)
- * otl2_hdr_type         114:113  2  Outer Tunnel L2 header type directly from 
FLDS.
- * otl2_uc_mc_bc         112:111  2  flds_otl2_dst_type remapped: 
UC(0)/MC(2)/BC(3)
- * otl2_vtag_present     110      1  1+ VLAN tags present (comp. 
lds_otl2_num_vtags)
- * otl2_two_vtags        109      1  2 VLAN tags present (comp. 
flds_otl2_num_vtags)
- * otl3_hdr_valid        108      1  !(flds_otl3_hdr_valid== stop_w_error |
- *                                     flds_otl3_hdr_valid== not_reached )
- * otl3_hdr_error        107      1  flds_tl3_hdr_valid == stop_w_error
- * otl3_hdr_type         106:103  4  Outer Tunnel L3 header type directly from 
FLDS.
- * otl3_hdr_isip         102      1  Outer Tunnel L3 header is IPV4 or IPV6.
- * otl4_hdr_valid        101      1  !(flds_otl4_hdr_valid== stop_w_error |
- *                                     flds_otl4_hdr_valid== not_reached )
- * otl4_hdr_error        100      1  flds_otl4_hdr_valid == stop_w_error
- * otl4_hdr_type         99:96    4  Outer Tunnel L4 header type directly from 
FLDS.
- * otl4_hdr_is_udp_tcp   95       1  OTL4 header is UDP-TCP. (comp. 
flds_otl4_hdr_type)
- * ot_hdr_valid          94       1  !(flds_ot_hdr_valid== stop_w_error |
- *                                     flds_ot_hdr_valid== not_reached )
- * ot_hdr_error          93       1  flds_ot_hdr_valid == stop_w_error
- * ot_hdr_type           92:88    5  Outer Tunnel header type directly from 
FLDS.
- * ot_hdr_flags          87:80    8  Outer Tunnel header flags directly from 
FLDS.
- * tl2_hdr_valid         79       1  !(flds_tl2_hdr_valid==stop_w_error |
- *                                     flds_tl2_hdr_valid==not_reached)
- * tl2_hdr_type          78:77    2  Tunnel L2 header type directly from FLDS.
- * tl2_uc_mc_bc          76:75    2  flds_tl2_dst_type remapped: 
UC(0)/MC(2)/BC(3)
- * tl2_vtag_present      74       1  1+ VLAN tags present (comp. 
lds_tl2_num_vtags)
- * tl2_two_vtags         73       1  2 VLAN tags present (comp. 
flds_tl2_num_vtags)
- * tl3_hdr_valid         72       1  !(flds_tl3_hdr_valid== stop_w_error |
- *                                     flds_tl3_hdr_valid== not_reached )
- * tl3_hdr_error         71       1  flds_tl3_hdr_valid == stop_w_error
- * tl3_hdr_type          70:67    4  Tunnel L3 header type directly from FLDS.
- * tl3_hdr_isip          66       1  Tunnel L3 header is IPV4 or IPV6.
- * tl4_hdr_valid         65       1  !(flds_tl4_hdr_valid== stop_w_error |
- *                                     flds_tl4_hdr_valid== not_reached )
- * tl4_hdr_error         64       1  flds_tl4_hdr_valid == stop_w_error
- * tl4_hdr_type          63:60    4  Tunnel L4 header type directly from FLDS.
- * tl4_hdr_is_udp_tcp    59       1  TL4 header is UDP or TCP. (comp. 
flds_tl4_hdr_type)
- * t_hdr_valid           58       1  !(flds_tun_hdr_valid== stop_w_error |
- *                                     flds_tun_hdr_valid== not_reached )
- * t_hdr_error           57       1  flds_tun_hdr_valid == stop_w_error
- * t_hdr_type            56:52    5  Tunnel header type directly from FLDS.
- * t_hdr_flags           51:44    8  Tunnel header flags directly from FLDS.
- * l2_hdr_valid          43       1  !(flds_l2_hdr_valid== stop_w_error |
- *                                     flds_l2_hdr_valid== not_reached )
- * l2_hdr_error          42       1  flds_l2_hdr_valid == stop_w_error
- * l2_hdr_type           41:40    2  L2 header type directly from FLDS.
- * l2_uc_mc_bc           39:38    2  flds_l2_dst_type remapped: 
UC(0)/MC(2)/BC(3)
- * l2_vtag_present       37       1  1+ VLAN tags present (comp. 
flds_l2_num_vtags)
- * l2_two_vtags          36       1  2 VLAN tags present (comp. 
flds_l2_num_vtags)
- * l3_hdr_valid          35       1  !(flds_l3_hdr_valid== stop_w_error |
- *                                     flds_l3_hdr_valid== not_reached )
- * l3_hdr_error          34       1  flds_l3_hdr_valid == stop_w_error
- * l3_hdr_type           33:30    4  L3 header type directly from FLDS.
- * l3_hdr_isip           29       1  L3 header is IPV4 or IPV6.
- * l3_protocol           28:21    8  L3 header next protocol directly from 
FLDS.
- * l4_hdr_valid          20       1  !(flds_l4_hdr_valid== stop_w_error |
- *                                     flds_l4_hdr_valid== not_reached )
- * l4_hdr_error          19       1  flds_l4_hdr_valid == stop_w_error
- * l4_hdr_type           18:15    4  L4 header type directly from FLDS.
- * l4_hdr_is_udp_tcp     14       1  L4 header is UDP or TCP (comp. 
flds_l4_hdr_type)
- * l4_hdr_subtype        13:11    3  L4 header sub-type directly from FLDS.
- * l4_flags              10:2     9  L4 header flags directly from FLDS.
- * l4_dcn_present        1:0      2  DCN present bits directly from L4 header 
FLDS.
- */
-
-struct prof_tcam_key_t {
-       uint8_t valid;
-       uint8_t spare;
-       uint8_t loopback;
-       uint8_t pkt_type;
-       uint8_t rcyc;
-       uint32_t metadata;
-       uint8_t agg_error;
-       uint8_t l2ip_func;
-       uint8_t prof_func;
-       uint8_t hrec_next;
-       uint8_t int_hdr_type;
-       uint8_t int_hdr_group;
-       uint8_t int_ifa_tail;
-       uint8_t otl2_hdr_valid;
-       uint8_t otl2_hdr_type;
-       uint8_t otl2_uc_mc_bc;
-       uint8_t otl2_vtag_present;
-       uint8_t otl2_two_vtags;
-       uint8_t otl3_hdr_valid;
-       uint8_t otl3_hdr_error;
-       uint8_t otl3_hdr_type;
-       uint8_t otl3_hdr_isip;
-       uint8_t otl4_hdr_valid;
-       uint8_t otl4_hdr_error;
-       uint8_t otl4_hdr_type;
-       uint8_t otl4_hdr_is_udp_tcp;
-       uint8_t ot_hdr_valid;
-       uint8_t ot_hdr_error;
-       uint8_t ot_hdr_type;
-       uint8_t ot_hdr_flags;
-       uint8_t tl2_hdr_valid;
-       uint8_t tl2_hdr_type;
-       uint8_t tl2_uc_mc_bc;
-       uint8_t tl2_vtag_present;
-       uint8_t tl2_two_vtags;
-       uint8_t tl3_hdr_valid;
-       uint8_t tl3_hdr_error;
-       uint8_t tl3_hdr_type;
-       uint8_t tl3_hdr_isip;
-       uint8_t tl4_hdr_valid;
-       uint8_t tl4_hdr_error;
-       uint8_t tl4_hdr_type;
-       uint8_t tl4_hdr_is_udp_tcp;
-       uint8_t t_hdr_valid;
-       uint8_t t_hdr_error;
-       uint8_t t_hdr_type;
-       uint8_t t_hdr_flags;
-       uint8_t l2_hdr_valid;
-       uint8_t l2_hdr_error;
-       uint8_t l2_hdr_type;
-       uint8_t l2_uc_mc_bc;
-       uint8_t l2_vtag_present;
-       uint8_t l2_two_vtags;
-       uint8_t l3_hdr_valid;
-       uint8_t l3_hdr_error;
-       uint8_t l3_hdr_type;
-       uint8_t l3_hdr_isip;
-       uint8_t l3_protocol;
-       uint8_t l4_hdr_valid;
-       uint8_t l4_hdr_error;
-       uint8_t l4_hdr_type;
-       uint8_t l4_hdr_is_udp_tcp;
-       uint8_t l4_hdr_subtype;
-       uint16_t l4_flags;
-       uint8_t l4_dcn_present;
-};
-
-/*
- * Profile TCAM remap record:
- *
- * pl_byp_lkup_en   1  42     When set to ?0? remaining bits are defined below.
- * em_search_en     1  41     Enable search in EM database
- * em_profile_id    8  40:33  Selected key structure for EM search. This is 
used as part of
- *                            the EM keys to differentiate common key types.
- * em_key_id        7  32:26  Exact match key template select
- * em_scope         5  25:21  Exact Match Lookup scope. Action scope on EM hit.
- * tcam_search_en   1  20     Enable search in TCAM database
- * tcam_profile_id  8  19:12  Selected key structure for TCAM search. This is 
used as part of
- *                            the TCAM keys to differentiate common key types.
- * tcam_key_id      7  11:5   TCAM key template select
- * tcam_scope       5  4:0    Wild Card Lookup Action table scope (used if WC 
hits).
- */
-struct prof_tcam_remap_t {
-       bool pl_byp_lkup_en;
-       bool em_search_en;
-       uint8_t em_profile_id;
-       uint8_t em_key_id;
-       uint8_t em_scope;
-       bool tcam_search_en;
-       uint8_t tcam_profile_id;
-       uint8_t tcam_key_id;
-       uint8_t tcam_scope;
-};
-
-/* Internal function to read the tcam entry */
-static int
-tfc_tcam_entry_read(struct bnxt_ulp_context *ulp_ctxt,
-                   uint8_t dir,
-                   uint8_t res_type,
-                   uint16_t res_idx,
-                   uint8_t *key,
-                   uint8_t *mask,
-                   uint8_t *remap,
-                   uint16_t *key_size,
-                   uint16_t *remap_size)
-{
-       struct tfc_tcam_info tfc_info = {0};
-       struct tfc_tcam_data tfc_data = {0};
-       struct tfc *tfcp = NULL;
-       uint16_t fw_fid;
-       int rc;
-
-       tfcp = bnxt_ulp_cntxt_tfcp_get(ulp_ctxt);
-       if (!tfcp) {
-               PMD_DRV_LOG_LINE(ERR, "Failed to get tfcp pointer");
-               return -EINVAL;
-       }
-
-       rc = bnxt_ulp_cntxt_fid_get(ulp_ctxt, &fw_fid);
-       if (rc)
-               return rc;
-
-       tfc_info.dir = dir;
-       tfc_info.rsubtype = res_type;
-       tfc_info.id = res_idx;
-
-       tfc_data.key = key;
-       tfc_data.mask = mask;
-       tfc_data.remap = remap;
-       tfc_data.key_sz_in_bytes = *key_size;
-       tfc_data.remap_sz_in_bytes = *remap_size;
-
-       if (tfc_tcam_get(tfcp, fw_fid, &tfc_info, &tfc_data)) {
-               PMD_DRV_LOG_LINE(ERR, "tcam[%s][%s][%x] read failed.",
-                                tfc_tcam_2_str(tfc_info.rsubtype),
-                                tfc_dir_2_str(tfc_info.dir), tfc_info.id);
-               return -EIO;
-       }
-
-       *key_size = (uint16_t)tfc_data.key_sz_in_bytes;
-       *remap_size = (uint16_t)tfc_data.remap_sz_in_bytes;
-
-       return rc;
-}
-
-/*
- * bnxt_tfc_buf_dump: Pretty-prints a buffer using the following options
- *
- * Parameters:
- * hdr       - A header that is printed as-is
- * msg       - This is a pointer to the uint8_t buffer to be dumped
- * prtwidth  - The width of the words to be printed, allowed options 1, 2, 4
- *             Defaults to 1 if either:
- *             1) any other value
- *             2) if buffer length is not a multiple of width
- * linewidth - The length of the lines printed (in items/words)
- */
-static
-void hex_buf_dump(FILE *fd, const char *hdr, uint8_t *msg,
-                 int msglen, int prtwidth, int linewidth)
-{
-       char msg_line[128];
-       int msg_i = 0, i;
-       uint16_t *sw_msg = (uint16_t *)msg;
-       uint32_t *lw_msg = (uint32_t *)msg;
-
-       if (hdr)
-               fprintf(fd, "%s\n", hdr);
-
-       if (msglen % prtwidth) {
-               fprintf(fd, "msglen[%u] not aligned on width[%u]\n",
-                          msglen, prtwidth);
-               prtwidth = 1;
-       }
-
-       for (i = 0; i < msglen / prtwidth; i++) {
-               if ((i % linewidth == 0) && i)
-                       fprintf(fd, "%s\n", msg_line);
-               if (i % linewidth == 0) {
-                       msg_i = 0;
-                       msg_i += snprintf(&msg_line[msg_i],
-                                         (sizeof(msg_line) - msg_i),
-                                         "0x%04x: ", (i * prtwidth));
-               }
-               switch (prtwidth) {
-               case 2:
-                       msg_i += snprintf(&msg_line[msg_i],
-                                         (sizeof(msg_line) - msg_i),
-                                         "0x%04x ", sw_msg[i]);
-                       break;
-
-               case 4:
-                       msg_i += snprintf(&msg_line[msg_i],
-                                         (sizeof(msg_line) - msg_i),
-                                         "0x%08x ", lw_msg[i]);
-                       break;
-
-               case 1:
-               default:
-                       msg_i += snprintf(&msg_line[msg_i],
-                                         (sizeof(msg_line) - msg_i),
-                                         "0x%02x ", msg[i]);
-                       break;
-               }
-       }
-       fprintf(fd, "%s\n", msg_line);
-}
-
-#define L2CTX_KEY_INFO_VALID(kptr)                             
tfc_getbits(kptr, 255, 1)
-#define L2CTX_KEY_INFO_SPARE(kptr)                             
tfc_getbits(kptr, 253, 2)
-#define L2CTX_KEY_INFO_MPASS_CNT(kptr)                         
tfc_getbits(kptr, 251, 2)
-#define L2CTX_KEY_INFO_RCYC(kptr)                              
tfc_getbits(kptr, 247, 4)
-#define L2CTX_KEY_INFO_LOOPBACK(kptr)                          
tfc_getbits(kptr, 246, 1)
-#define L2CTX_KEY_INFO_SPIF(kptr)                              
tfc_getbits(kptr, 244, 2)
-#define L2CTX_KEY_INFO_PARIF(kptr)                             
tfc_getbits(kptr, 239, 5)
-#define L2CTX_KEY_INFO_SVIF(kptr)                              
tfc_getbits(kptr, 228, 11)
-#define L2CTX_KEY_INFO_METADATA(kptr)                          
tfc_getbits(kptr, 196, 32)
-#define L2CTX_KEY_INFO_L2IP_FUNC(kptr)                         
tfc_getbits(kptr, 188, 8)
-#define L2CTX_KEY_INFO_ROCE(kptr)                              
tfc_getbits(kptr, 187, 1)
-#define L2CTX_KEY_INFO_PURE_LLC(kptr)                          
tfc_getbits(kptr, 186, 1)
-#define L2CTX_KEY_INFO_OT_HDR_TYPE(kptr)                       
tfc_getbits(kptr, 181, 5)
-#define L2CTX_KEY_INFO_T_HDR_TYPE(kptr)                                
tfc_getbits(kptr, 176, 5)
-#define L2CTX_KEY_INFO_TUNNEL_ID_CONTEXT_L4(kptr)              
tfc_getbits(kptr, 144, 32)
-
-#define L2CTX_KEY_INFO_IPV6_ADDR0_1(kptr)                      
tfc_getbits(kptr, 80, 64)
-#define L2CTX_KEY_INFO_IPV6_ADDR0_0(kptr)                      
tfc_getbits(kptr, 16, 64)
-#define L2CTX_KEY_INFO_IPV6_OTL2_TL2_L2_ETYPE(kptr)            
tfc_getbits(kptr, 0, 16)
-
-#define L2CTX_KEY_INFO_IPV4_ADDR0(kptr)                                
tfc_getbits(kptr, 96, 48)
-#define L2CTX_KEY_INFO_IPV4_ADDR1(kptr)                                
tfc_getbits(kptr, 48, 48)
-#define L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_VTAG_PRESENT(kptr)     
tfc_getbits(kptr, 47, 1)
-#define L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_TWO_VTAGS(kptr)                
tfc_getbits(kptr, 46, 1)
-#define L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_OVLAN_VID(kptr)                
tfc_getbits(kptr, 34, 12)
-#define L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_OVLAN_TPID_SEL(kptr)   
tfc_getbits(kptr, 31, 3)
-#define L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_IVLAN_VID(kptr)                
tfc_getbits(kptr, 19, 12)
-#define L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_IVLAN_TPID_SEL(kptr)   
tfc_getbits(kptr, 16, 3)
-#define L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_ETYPE(kptr)            
tfc_getbits(kptr, 0, 16)
-
-static void l2ctx_tcam_key_decode(uint32_t *l2ctx_key_ptr,
-                                 struct l2ctx_tcam_key_t *l2ctx_key_info)
-{
-       l2ctx_key_info->valid                = 
L2CTX_KEY_INFO_VALID(l2ctx_key_ptr);
-       l2ctx_key_info->spare                = 
L2CTX_KEY_INFO_SPARE(l2ctx_key_ptr);
-       l2ctx_key_info->mpass_cnt            = 
L2CTX_KEY_INFO_MPASS_CNT(l2ctx_key_ptr);
-       l2ctx_key_info->rcyc                 = 
L2CTX_KEY_INFO_RCYC(l2ctx_key_ptr);
-       l2ctx_key_info->loopback             = 
L2CTX_KEY_INFO_LOOPBACK(l2ctx_key_ptr);
-       l2ctx_key_info->spif                 = 
L2CTX_KEY_INFO_SPIF(l2ctx_key_ptr);
-       l2ctx_key_info->parif                = 
L2CTX_KEY_INFO_PARIF(l2ctx_key_ptr);
-       l2ctx_key_info->svif                 = 
L2CTX_KEY_INFO_SVIF(l2ctx_key_ptr);
-       l2ctx_key_info->metadata             = 
L2CTX_KEY_INFO_METADATA(l2ctx_key_ptr);
-       l2ctx_key_info->l2ip_func            = 
L2CTX_KEY_INFO_L2IP_FUNC(l2ctx_key_ptr);
-       l2ctx_key_info->roce                 = 
L2CTX_KEY_INFO_ROCE(l2ctx_key_ptr);
-       l2ctx_key_info->pure_llc             = 
L2CTX_KEY_INFO_PURE_LLC(l2ctx_key_ptr);
-       l2ctx_key_info->ot_hdr_type          = 
L2CTX_KEY_INFO_OT_HDR_TYPE(l2ctx_key_ptr);
-       l2ctx_key_info->t_hdr_type           = 
L2CTX_KEY_INFO_T_HDR_TYPE(l2ctx_key_ptr);
-       l2ctx_key_info->tunnel_id_context_L4 = 
L2CTX_KEY_INFO_TUNNEL_ID_CONTEXT_L4(l2ctx_key_ptr);
-
-       if (l2ctx_key_info->t_hdr_type == 0x5 ||
-           l2ctx_key_info->ot_hdr_type == 0x5) {
-               l2ctx_key_info->ipv6.ADDR0[1] = 
L2CTX_KEY_INFO_IPV6_ADDR0_1(l2ctx_key_ptr);
-               l2ctx_key_info->ipv6.ADDR0[0] = 
L2CTX_KEY_INFO_IPV6_ADDR0_0(l2ctx_key_ptr);
-               l2ctx_key_info->ipv6.otl2_tl2_l2_etype =
-                                       
L2CTX_KEY_INFO_IPV6_OTL2_TL2_L2_ETYPE(l2ctx_key_ptr);
-       } else {
-               l2ctx_key_info->ipv4.ADDR0 = 
L2CTX_KEY_INFO_IPV4_ADDR0(l2ctx_key_ptr);
-               l2ctx_key_info->ipv4.ADDR1 = 
L2CTX_KEY_INFO_IPV4_ADDR1(l2ctx_key_ptr);
-               l2ctx_key_info->ipv4.otl2_tl2_l2_vtag_present =
-                               
L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_VTAG_PRESENT(l2ctx_key_ptr);
-               l2ctx_key_info->ipv4.otl2_tl2_l2_two_vtags =
-                               
L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_TWO_VTAGS(l2ctx_key_ptr);
-               l2ctx_key_info->ipv4.otl2_tl2_l2_ovlan_vid =
-                               
L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_OVLAN_VID(l2ctx_key_ptr);
-               l2ctx_key_info->ipv4.otl2_tl2_l2_ovlan_tpid_sel =
-                               
L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_OVLAN_TPID_SEL(l2ctx_key_ptr);
-               l2ctx_key_info->ipv4.otl2_tl2_l2_ivlan_vid =
-                               
L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_IVLAN_VID(l2ctx_key_ptr);
-               l2ctx_key_info->ipv4.otl2_tl2_l2_ivlan_tpid_sel =
-                               
L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_IVLAN_TPID_SEL(l2ctx_key_ptr);
-               l2ctx_key_info->ipv4.otl2_tl2_l2_etype =
-                               
L2CTX_KEY_INFO_IPV4_OTL2_TL2_L2_ETYPE(l2ctx_key_ptr);
-       }
-}
-
-#define L2CTX_RMP_INFO_PRSV_PARIF(kptr)      tfc_getbits(kptr, 126, 1)
-#define L2CTX_RMP_INFO_PARIF(kptr)           tfc_getbits(kptr, 121, 5)
-#define L2CTX_RMP_INFO_PRSV_L2IP_CTXT(kptr)  tfc_getbits(kptr, 120, 1)
-#define L2CTX_RMP_INFO_L2IP_CTXT(kptr)       tfc_getbits(kptr, 109, 11)
-#define L2CTX_RMP_INFO_PRSV_PROF_FUNC(kptr)  tfc_getbits(kptr, 108, 1)
-#define L2CTX_RMP_INFO_PROF_FUNC(kptr)       tfc_getbits(kptr, 100, 8)
-#define L2CTX_RMP_INFO_CTXT_OPCODE(kptr)     tfc_getbits(kptr, 98, 2)
-#define L2CTX_RMP_INFO_L2IP_META_ENB(kptr)   tfc_getbits(kptr, 97, 1)
-#define L2CTX_RMP_INFO_L2IP_META_PROF(kptr)  tfc_getbits(kptr, 94, 3)
-#define L2CTX_RMP_INFO_L2IP_META_DATA(kptr)  tfc_getbits(kptr, 62, 32)
-#define L2CTX_RMP_INFO_L2IP_ACT_ENB(kptr)    tfc_getbits(kptr, 61, 1)
-#define L2CTX_RMP_INFO_L2IP_ACT_HINT(kptr)   tfc_getbits(kptr, 59, 2)
-#define L2CTX_RMP_INFO_L2IP_ACT_SCOPE(kptr)  tfc_getbits(kptr, 54, 5)
-#define L2CTX_RMP_INFO_L2IP_ACT_PTR(kptr)    tfc_getbits(kptr, 28, 26)
-#define L2CTX_RMP_INFO_L2IP_RFS_ENB(kptr)    tfc_getbits(kptr, 27, 1)
-#define L2CTX_RMP_INFO_L2IP_RFS_DATA(kptr)   tfc_getbits(kptr, 18, 9)
-#define L2CTX_RMP_INFO_L2IP_DEST_ENB(kptr)   tfc_getbits(kptr, 17, 1)
-#define L2CTX_RMP_INFO_L2IP_DEST_DATA(kptr)  tfc_getbits(kptr, 0, 17)
-
-static void l2ctx_tcam_remap_decode(uint32_t *l2ctx_rmp_ptr,
-                                   struct l2ctx_tcam_remap_t *l2ctx_rmp_info,
-                                   struct tfc_ts_mem_cfg *act_mem_cfg)
-{
-       l2ctx_rmp_info->prsv_parif      = 
L2CTX_RMP_INFO_PRSV_PARIF(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->parif           = L2CTX_RMP_INFO_PARIF(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->prsv_l2ip_ctxt  = 
L2CTX_RMP_INFO_PRSV_L2IP_CTXT(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_ctxt       = 
L2CTX_RMP_INFO_L2IP_CTXT(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->prsv_prof_func  = 
L2CTX_RMP_INFO_PRSV_PROF_FUNC(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->prof_func       = 
L2CTX_RMP_INFO_PROF_FUNC(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->ctxt_opcode     = 
L2CTX_RMP_INFO_CTXT_OPCODE(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_meta_enb   = 
L2CTX_RMP_INFO_L2IP_META_ENB(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_meta_prof  = 
L2CTX_RMP_INFO_L2IP_META_PROF(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_meta_data  = 
L2CTX_RMP_INFO_L2IP_META_DATA(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_act_enb    = 
L2CTX_RMP_INFO_L2IP_ACT_ENB(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_act_hint   = 
L2CTX_RMP_INFO_L2IP_ACT_HINT(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_act_scope  = 
L2CTX_RMP_INFO_L2IP_ACT_SCOPE(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_act_ptr    = 
L2CTX_RMP_INFO_L2IP_ACT_PTR(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_rfs_enb    = 
L2CTX_RMP_INFO_L2IP_RFS_ENB(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_rfs_data   = 
L2CTX_RMP_INFO_L2IP_RFS_DATA(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_dest_enb   = 
L2CTX_RMP_INFO_L2IP_DEST_ENB(l2ctx_rmp_ptr);
-       l2ctx_rmp_info->l2ip_dest_data  = 
L2CTX_RMP_INFO_L2IP_DEST_DATA(l2ctx_rmp_ptr);
-       act_process(l2ctx_rmp_info->l2ip_act_ptr, &l2ctx_rmp_info->act_info, 
act_mem_cfg);
-}
-
-static void l2ctx_tcam_show(FILE *fd,
-                           struct l2ctx_tcam_key_t *l2ctx_key_info,
-                           struct l2ctx_tcam_key_t *l2ctx_mask_info,
-                           struct l2ctx_tcam_remap_t *l2ctx_rmp_info)
-{
-       char *line1 = NULL;
-       char *line2 = NULL;
-       char *line3 = NULL;
-       char *line4 = NULL;
-       char *line5 = NULL;
-
-       line1 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line2 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line3 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line4 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line5 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       if (!line1 || !line2 || !line3 || !line4 || !line5) {
-               rte_free(line1);
-               rte_free(line2);
-               rte_free(line3);
-               rte_free(line4);
-               rte_free(line5);
-               fprintf(fd, "%s: Failed to allocate temp buffer\n",
-                       __func__);
-               return;
-       }
-
-       snprintf(line1, TFC_STRING_LENGTH_256, 
"+-+--+---+----+---+----+-----+----+---------"
-                "+------+----+----+---+---+----------+\n");
-       snprintf(line2, TFC_STRING_LENGTH_256, 
"|V|Sp|mpc|rcyc|lbk|spif|parif|svif| metadata"
-                "|l2func|roce|pllc|OTH| TH|TID/ctx/L4|\n");
-       snprintf(line3, TFC_STRING_LENGTH_256, 
"+-+--+---+----+---+----+-----+----+---------"
-                "+------+----+----+---+---+----------+\n");
-       snprintf(line4, TFC_STRING_LENGTH_256, " %01x  %01x  %01x   x%01x   
%01x    %01x   x%02x"
-                "  x%03x x%08x   x%02x    %01x    %01x  x%02x x%02x  x%08x  
key\n",
-                l2ctx_key_info->valid,
-                l2ctx_key_info->spare,
-                l2ctx_key_info->mpass_cnt,
-                l2ctx_key_info->rcyc,
-                l2ctx_key_info->loopback,
-                l2ctx_key_info->spif,
-                l2ctx_key_info->parif,
-                l2ctx_key_info->svif,
-                l2ctx_key_info->metadata,
-                l2ctx_key_info->l2ip_func,
-                l2ctx_key_info->roce,
-                l2ctx_key_info->pure_llc,
-                l2ctx_key_info->ot_hdr_type,
-                l2ctx_key_info->t_hdr_type,
-                l2ctx_key_info->tunnel_id_context_L4);
-       snprintf(line5, TFC_STRING_LENGTH_256, " %01x  %01x  %01x   x%01x   
%01x    %01x   x%02x"
-                "  x%03x x%08x   x%02x    %01x    %01x  x%02x x%02x  x%08x  
mask\n",
-                l2ctx_mask_info->valid,
-                l2ctx_mask_info->spare,
-                l2ctx_mask_info->mpass_cnt,
-                l2ctx_mask_info->rcyc,
-                l2ctx_mask_info->loopback,
-                l2ctx_mask_info->spif,
-                l2ctx_mask_info->parif,
-                l2ctx_mask_info->svif,
-                l2ctx_mask_info->metadata,
-                l2ctx_mask_info->l2ip_func,
-                l2ctx_mask_info->roce,
-                l2ctx_mask_info->pure_llc,
-                l2ctx_mask_info->ot_hdr_type,
-                l2ctx_mask_info->t_hdr_type,
-                l2ctx_mask_info->tunnel_id_context_L4);
-       fprintf(fd, "%s%s%s%s%s",
-               line1,
-               line2,
-               line3,
-               line5,
-               line4);
-
-       if (l2ctx_key_info->t_hdr_type == 0x5 ||
-           l2ctx_key_info->ot_hdr_type == 0x5) {
-               snprintf(line1, TFC_STRING_LENGTH_256, 
"+------IPv6-------+------IPv6-------"
-                        "+-----+\n");
-               snprintf(line2, TFC_STRING_LENGTH_256, "|      ADDR0      |     
 ADDR1      "
-                        "|etype|\n");
-               snprintf(line3, TFC_STRING_LENGTH_256, 
"+-----------------+-----------------"
-                        "+-----+\n");
-               snprintf(line4, TFC_STRING_LENGTH_256, " x%016" PRIx64 " x%016" 
PRIx64 " x%04x  key\n",
-                        l2ctx_key_info->ipv6.ADDR0[1],
-                        l2ctx_key_info->ipv6.ADDR0[0],
-                        l2ctx_key_info->ipv6.otl2_tl2_l2_etype);
-               snprintf(line5, TFC_STRING_LENGTH_256, " x%016" PRIx64 " x%016" 
PRIx64 " x%04x  mask\n",
-                        l2ctx_mask_info->ipv6.ADDR0[1],
-                        l2ctx_mask_info->ipv6.ADDR0[0],
-                        l2ctx_mask_info->ipv6.otl2_tl2_l2_etype);
-       } else {
-               snprintf(line1, TFC_STRING_LENGTH_256, 
"+----IPv4-----+----IPv4-----+--+---"
-                        "+----+-----+----+-----+-----+\n");
-               snprintf(line2, TFC_STRING_LENGTH_256, "|    ADDR0    |    
ADDR1    |VT|2VT"
-                        "|ovid|otpid|ivid|itpid|etype|\n");
-               snprintf(line3, TFC_STRING_LENGTH_256, 
"+-------------+-------------+--+---"
-                        "+----+-----+----+-----+-----+\n");
-               snprintf(line4, TFC_STRING_LENGTH_256, " x%012" PRIx64 " x%012" 
PRIx64 "  %01x  %01x  x%03x"
-                        "    %01x  x%03x   %01x   x%04x  key\n",
-                        l2ctx_key_info->ipv4.ADDR0,
-                        l2ctx_key_info->ipv4.ADDR1,
-                        l2ctx_key_info->ipv4.otl2_tl2_l2_vtag_present,
-                        l2ctx_key_info->ipv4.otl2_tl2_l2_two_vtags,
-                        l2ctx_key_info->ipv4.otl2_tl2_l2_ovlan_vid,
-                        l2ctx_key_info->ipv4.otl2_tl2_l2_ovlan_tpid_sel,
-                        l2ctx_key_info->ipv4.otl2_tl2_l2_ivlan_vid,
-                        l2ctx_key_info->ipv4.otl2_tl2_l2_ivlan_tpid_sel,
-                        l2ctx_key_info->ipv4.otl2_tl2_l2_etype);
-               snprintf(line5, TFC_STRING_LENGTH_256, " x%012" PRIx64 " x%012" 
PRIx64 "  %01x  %01x  x%03x"
-                        "    %01x  x%03x   %01x   x%04x  mask\n",
-                        l2ctx_mask_info->ipv4.ADDR0,
-                        l2ctx_mask_info->ipv4.ADDR1,
-                        l2ctx_mask_info->ipv4.otl2_tl2_l2_vtag_present,
-                        l2ctx_mask_info->ipv4.otl2_tl2_l2_two_vtags,
-                        l2ctx_mask_info->ipv4.otl2_tl2_l2_ovlan_vid,
-                        l2ctx_mask_info->ipv4.otl2_tl2_l2_ovlan_tpid_sel,
-                        l2ctx_mask_info->ipv4.otl2_tl2_l2_ivlan_vid,
-                        l2ctx_mask_info->ipv4.otl2_tl2_l2_ivlan_tpid_sel,
-                        l2ctx_mask_info->ipv4.otl2_tl2_l2_etype);
-       }
-       fprintf(fd, "%s%s%s%s%s",
-                  line1,
-                  line2,
-                  line3,
-                  line5,
-                  line4);
-
-       fputs(":L2CTX TCAM: remap\n", fd);
-       snprintf(line1, TFC_STRING_LENGTH_256, 
"+---+----+----+----+---+---+-----+---"
-                "+-----+---------+\n");
-       snprintf(line2, TFC_STRING_LENGTH_256, "|PIP|prif|PL2C| 
L2C|PPF|PRF|ctxop|mde"
-                "|mprof| metadata|\n");
-       snprintf(line3, TFC_STRING_LENGTH_256, 
"+---+----+----+----+---+---+-----+---"
-                "+-----+---------+\n");
-       snprintf(line4, TFC_STRING_LENGTH_256, "  %01x   x%02x   %01x  x%03x  
%01x  x%02x"
-                "    %01x    %01x    %01x  x%08x\n",
-                l2ctx_rmp_info->prsv_parif,
-                l2ctx_rmp_info->parif,
-                l2ctx_rmp_info->prsv_l2ip_ctxt,
-                l2ctx_rmp_info->l2ip_ctxt,
-                l2ctx_rmp_info->prsv_prof_func,
-                l2ctx_rmp_info->prof_func,
-                l2ctx_rmp_info->ctxt_opcode,
-                l2ctx_rmp_info->l2ip_meta_enb,
-                l2ctx_rmp_info->l2ip_meta_prof,
-                l2ctx_rmp_info->l2ip_meta_data);
-       fprintf(fd, "%s%s%s%s",
-               line1,
-               line2,
-               line3,
-               line4);
-
-       snprintf(line1, TFC_STRING_LENGTH_256, 
"+----+----+----+---------+----+-------"
-                "+----+--------+\n");
-       snprintf(line2, TFC_STRING_LENGTH_256, "|acte|ahnt|ascp|   act   
|rfse|rfsdata"
-                "|dste|dst_data|\n");
-       snprintf(line3, TFC_STRING_LENGTH_256, 
"+----+----+----+---------+----+-------"
-                "+----+--------+\n");
-       snprintf(line4, TFC_STRING_LENGTH_256, "   %01x    %01x   x%02x x%08x   
%01x"
-                "    x%03x    %01x   x%05x\n",
-                l2ctx_rmp_info->l2ip_act_enb,
-                l2ctx_rmp_info->l2ip_act_hint,
-                l2ctx_rmp_info->l2ip_act_scope,
-                l2ctx_rmp_info->l2ip_act_ptr,
-                l2ctx_rmp_info->l2ip_rfs_enb,
-                l2ctx_rmp_info->l2ip_rfs_data,
-                l2ctx_rmp_info->l2ip_dest_enb,
-                l2ctx_rmp_info->l2ip_dest_data);
-       fprintf(fd, "%s%s%s%s",
-               line1,
-               line2,
-               line3,
-               line4);
-
-       act_show(fd, &l2ctx_rmp_info->act_info, l2ctx_rmp_info->l2ip_act_ptr << 
5);
-
-       rte_free(line1);
-       rte_free(line2);
-       rte_free(line3);
-       rte_free(line4);
-       rte_free(line5);
-}
-
-#define PTKEY_INFO_VALID(kptr)                tfc_getbits(kptr, 183, 1)
-#define PTKEY_INFO_SPARE(kptr)                tfc_getbits(kptr, 181, 2)
-#define PTKEY_INFO_LOOPBACK(kptr)             tfc_getbits(kptr, 180, 1)
-#define PTKEY_INFO_PKT_TYPE(kptr)             tfc_getbits(kptr, 176, 4)
-#define PTKEY_INFO_RCYC(kptr)                 tfc_getbits(kptr, 172, 4)
-#define PTKEY_INFO_METADATA(kptr)             tfc_getbits(kptr, 140, 32)
-#define PTKEY_INFO_AGG_ERROR(kptr)            tfc_getbits(kptr, 139, 1)
-#define PTKEY_INFO_L2IP_FUNC(kptr)            tfc_getbits(kptr, 131, 8)
-#define PTKEY_INFO_PROF_FUNC(kptr)            tfc_getbits(kptr, 123, 8)
-#define PTKEY_INFO_HREC_NEXT(kptr)            tfc_getbits(kptr, 121, 2)
-#define PTKEY_INFO_INT_HDR_TYPE(kptr)         tfc_getbits(kptr, 119, 2)
-#define PTKEY_INFO_INT_HDR_GROUP(kptr)        tfc_getbits(kptr, 117, 2)
-#define PTKEY_INFO_INT_IFA_TAIL(kptr)         tfc_getbits(kptr, 116, 1)
-
-#define PTKEY_INFO_OTL2_HDR_VALID(kptr)       tfc_getbits(kptr, 115, 1)
-#define PTKEY_INFO_OTL2_HDR_TYPE(kptr)        tfc_getbits(kptr, 113, 2)
-#define PTKEY_INFO_OTL2_UC_MC_BC(kptr)        tfc_getbits(kptr, 111, 2)
-#define PTKEY_INFO_OTL2_VTAG_PRESENT(kptr)    tfc_getbits(kptr, 110, 1)
-#define PTKEY_INFO_OTL2_TWO_VTAGS(kptr)       tfc_getbits(kptr, 109, 1)
-
-#define PTKEY_INFO_OTL3_HDR_VALID(kptr)       tfc_getbits(kptr, 108, 1)
-#define PTKEY_INFO_OTL3_HDR_ERROR(kptr)       tfc_getbits(kptr, 107, 1)
-#define PTKEY_INFO_OTL3_HDR_TYPE(kptr)        tfc_getbits(kptr, 103, 4)
-#define PTKEY_INFO_OTL3_HDR_ISIP(kptr)        tfc_getbits(kptr, 102, 1)
-
-#define PTKEY_INFO_OTL4_HDR_VALID(kptr)       tfc_getbits(kptr, 101, 1)
-#define PTKEY_INFO_OTL4_HDR_ERROR(kptr)       tfc_getbits(kptr, 100, 1)
-#define PTKEY_INFO_OTL4_HDR_TYPE(kptr)        tfc_getbits(kptr, 96, 4)
-#define PTKEY_INFO_OTL4_HDR_IS_UDP_TCP(kptr)  tfc_getbits(kptr, 95, 1)
-
-#define PTKEY_INFO_OT_HDR_VALID(kptr)         tfc_getbits(kptr, 94, 1)
-#define PTKEY_INFO_OT_HDR_ERROR(kptr)         tfc_getbits(kptr, 93, 1)
-#define PTKEY_INFO_OT_HDR_TYPE(kptr)          tfc_getbits(kptr, 88, 5)
-#define PTKEY_INFO_OT_HDR_FLAGS(kptr)         tfc_getbits(kptr, 80, 8)
-
-#define PTKEY_INFO_TL2_HDR_VALID(kptr)        tfc_getbits(kptr, 79, 1)
-#define PTKEY_INFO_TL2_HDR_TYPE(kptr)         tfc_getbits(kptr, 77, 2)
-#define PTKEY_INFO_TL2_UC_MC_BC(kptr)         tfc_getbits(kptr, 75, 2)
-#define PTKEY_INFO_TL2_VTAG_PRESENT(kptr)     tfc_getbits(kptr, 74, 1)
-#define PTKEY_INFO_TL2_TWO_VTAGS(kptr)        tfc_getbits(kptr, 73, 1)
-
-#define PTKEY_INFO_TL3_HDR_VALID(kptr)        tfc_getbits(kptr, 72, 1)
-#define PTKEY_INFO_TL3_HDR_ERROR(kptr)        tfc_getbits(kptr, 71, 1)
-#define PTKEY_INFO_TL3_HDR_TYPE(kptr)         tfc_getbits(kptr, 67, 4)
-#define PTKEY_INFO_TL3_HDR_ISIP(kptr)         tfc_getbits(kptr, 66, 1)
-
-#define PTKEY_INFO_TL4_HDR_VALID(kptr)        tfc_getbits(kptr, 65, 1)
-#define PTKEY_INFO_TL4_HDR_ERROR(kptr)        tfc_getbits(kptr, 64, 1)
-#define PTKEY_INFO_TL4_HDR_TYPE(kptr)         tfc_getbits(kptr, 60, 4)
-#define PTKEY_INFO_TL4_HDR_IS_UDP_TCP(kptr)   tfc_getbits(kptr, 59, 1)
-
-#define PTKEY_INFO_T_HDR_VALID(kptr)          tfc_getbits(kptr, 58, 1)
-#define PTKEY_INFO_T_HDR_ERROR(kptr)          tfc_getbits(kptr, 57, 1)
-#define PTKEY_INFO_T_HDR_TYPE(kptr)           tfc_getbits(kptr, 52, 5)
-#define PTKEY_INFO_T_HDR_FLAGS(kptr)          tfc_getbits(kptr, 44, 8)
-
-#define PTKEY_INFO_L2_HDR_VALID(kptr)         tfc_getbits(kptr, 43, 1)
-#define PTKEY_INFO_L2_HDR_ERROR(kptr)         tfc_getbits(kptr, 42, 1)
-#define PTKEY_INFO_L2_HDR_TYPE(kptr)          tfc_getbits(kptr, 40, 2)
-#define PTKEY_INFO_L2_UC_MC_BC(kptr)          tfc_getbits(kptr, 38, 2)
-#define PTKEY_INFO_L2_VTAG_PRESENT(kptr)      tfc_getbits(kptr, 37, 1)
-#define PTKEY_INFO_L2_TWO_VTAGS(kptr)         tfc_getbits(kptr, 36, 1)
-
-#define PTKEY_INFO_L3_HDR_VALID(kptr)         tfc_getbits(kptr, 35, 1)
-#define PTKEY_INFO_L3_HDR_ERROR(kptr)         tfc_getbits(kptr, 34, 1)
-#define PTKEY_INFO_L3_HDR_TYPE(kptr)          tfc_getbits(kptr, 30, 4)
-#define PTKEY_INFO_L3_HDR_ISIP(kptr)          tfc_getbits(kptr, 29, 1)
-#define PTKEY_INFO_L3_PROTOCOL(kptr)          tfc_getbits(kptr, 21, 8)
-
-#define PTKEY_INFO_L4_HDR_VALID(kptr)         tfc_getbits(kptr, 20, 1)
-#define PTKEY_INFO_L4_HDR_ERROR(kptr)         tfc_getbits(kptr, 19, 1)
-#define PTKEY_INFO_L4_HDR_TYPE(kptr)          tfc_getbits(kptr, 15, 4)
-#define PTKEY_INFO_L4_HDR_IS_UDP_TCP(kptr)    tfc_getbits(kptr, 14, 1)
-#define PTKEY_INFO_L4_HDR_SUBTYPE(kptr)       tfc_getbits(kptr, 11, 3)
-#define PTKEY_INFO_L4_FLAGS(kptr)             tfc_getbits(kptr, 2, 9)
-#define PTKEY_INFO_L4_DCN_PRESENT(kptr)       tfc_getbits(kptr, 0, 2)
-
-static void prof_tcam_key_decode(uint32_t *ptc_key_ptr,
-                                struct prof_tcam_key_t *ptkey_info)
-{
-       ptkey_info->valid               = PTKEY_INFO_VALID(ptc_key_ptr);
-       ptkey_info->spare               = PTKEY_INFO_SPARE(ptc_key_ptr);
-       ptkey_info->loopback            = PTKEY_INFO_LOOPBACK(ptc_key_ptr);
-       ptkey_info->pkt_type            = PTKEY_INFO_PKT_TYPE(ptc_key_ptr);
-       ptkey_info->rcyc                = PTKEY_INFO_RCYC(ptc_key_ptr);
-       ptkey_info->metadata            = PTKEY_INFO_METADATA(ptc_key_ptr);
-       ptkey_info->agg_error           = PTKEY_INFO_AGG_ERROR(ptc_key_ptr);
-       ptkey_info->l2ip_func           = PTKEY_INFO_L2IP_FUNC(ptc_key_ptr);
-       ptkey_info->prof_func           = PTKEY_INFO_PROF_FUNC(ptc_key_ptr);
-       ptkey_info->hrec_next           = PTKEY_INFO_HREC_NEXT(ptc_key_ptr);
-       ptkey_info->int_hdr_type        = PTKEY_INFO_INT_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->int_hdr_group       = PTKEY_INFO_INT_HDR_GROUP(ptc_key_ptr);
-       ptkey_info->int_ifa_tail        = PTKEY_INFO_INT_IFA_TAIL(ptc_key_ptr);
-
-       ptkey_info->otl2_hdr_valid      = 
PTKEY_INFO_OTL2_HDR_VALID(ptc_key_ptr);
-       ptkey_info->otl2_hdr_type       = PTKEY_INFO_OTL2_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->otl2_uc_mc_bc       = PTKEY_INFO_OTL2_UC_MC_BC(ptc_key_ptr);
-       ptkey_info->otl2_vtag_present   = 
PTKEY_INFO_OTL2_VTAG_PRESENT(ptc_key_ptr);
-       ptkey_info->otl2_two_vtags      = 
PTKEY_INFO_OTL2_TWO_VTAGS(ptc_key_ptr);
-
-       ptkey_info->otl3_hdr_valid      = 
PTKEY_INFO_OTL3_HDR_VALID(ptc_key_ptr);
-       ptkey_info->otl3_hdr_error      = 
PTKEY_INFO_OTL3_HDR_ERROR(ptc_key_ptr);
-       ptkey_info->otl3_hdr_type       = PTKEY_INFO_OTL3_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->otl3_hdr_isip       = PTKEY_INFO_OTL3_HDR_ISIP(ptc_key_ptr);
-
-       ptkey_info->otl4_hdr_valid      = 
PTKEY_INFO_OTL4_HDR_VALID(ptc_key_ptr);
-       ptkey_info->otl4_hdr_error      = 
PTKEY_INFO_OTL4_HDR_ERROR(ptc_key_ptr);
-       ptkey_info->otl4_hdr_type       = PTKEY_INFO_OTL4_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->otl4_hdr_is_udp_tcp = 
PTKEY_INFO_OTL4_HDR_IS_UDP_TCP(ptc_key_ptr);
-
-       ptkey_info->ot_hdr_valid        = PTKEY_INFO_OT_HDR_VALID(ptc_key_ptr);
-       ptkey_info->ot_hdr_error        = PTKEY_INFO_OT_HDR_ERROR(ptc_key_ptr);
-       ptkey_info->ot_hdr_type         = PTKEY_INFO_OT_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->ot_hdr_flags        = PTKEY_INFO_OT_HDR_FLAGS(ptc_key_ptr);
-
-       ptkey_info->tl2_hdr_valid       = PTKEY_INFO_TL2_HDR_VALID(ptc_key_ptr);
-       ptkey_info->tl2_hdr_type        = PTKEY_INFO_TL2_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->tl2_uc_mc_bc        = PTKEY_INFO_TL2_UC_MC_BC(ptc_key_ptr);
-       ptkey_info->tl2_vtag_present    = 
PTKEY_INFO_TL2_VTAG_PRESENT(ptc_key_ptr);
-       ptkey_info->tl2_two_vtags       = PTKEY_INFO_TL2_TWO_VTAGS(ptc_key_ptr);
-
-       ptkey_info->tl3_hdr_valid       = PTKEY_INFO_TL3_HDR_VALID(ptc_key_ptr);
-       ptkey_info->tl3_hdr_error       = PTKEY_INFO_TL3_HDR_ERROR(ptc_key_ptr);
-       ptkey_info->tl3_hdr_type        = PTKEY_INFO_TL3_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->tl3_hdr_isip        = PTKEY_INFO_TL3_HDR_ISIP(ptc_key_ptr);
-
-       ptkey_info->tl4_hdr_valid       = PTKEY_INFO_TL4_HDR_VALID(ptc_key_ptr);
-       ptkey_info->tl4_hdr_error       = PTKEY_INFO_TL4_HDR_ERROR(ptc_key_ptr);
-       ptkey_info->tl4_hdr_type        = PTKEY_INFO_TL4_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->tl4_hdr_is_udp_tcp  = 
PTKEY_INFO_TL4_HDR_IS_UDP_TCP(ptc_key_ptr);
-
-       ptkey_info->t_hdr_valid         = PTKEY_INFO_T_HDR_VALID(ptc_key_ptr);
-       ptkey_info->t_hdr_error         = PTKEY_INFO_T_HDR_ERROR(ptc_key_ptr);
-       ptkey_info->t_hdr_type          = PTKEY_INFO_T_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->t_hdr_flags         = PTKEY_INFO_T_HDR_FLAGS(ptc_key_ptr);
-
-       ptkey_info->l2_hdr_valid        = PTKEY_INFO_L2_HDR_VALID(ptc_key_ptr);
-       ptkey_info->l2_hdr_error        = PTKEY_INFO_L2_HDR_ERROR(ptc_key_ptr);
-       ptkey_info->l2_hdr_type         = PTKEY_INFO_L2_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->l2_uc_mc_bc         = PTKEY_INFO_L2_UC_MC_BC(ptc_key_ptr);
-       ptkey_info->l2_vtag_present     = 
PTKEY_INFO_L2_VTAG_PRESENT(ptc_key_ptr);
-       ptkey_info->l2_two_vtags        = PTKEY_INFO_L2_TWO_VTAGS(ptc_key_ptr);
-
-       ptkey_info->l3_hdr_valid        = PTKEY_INFO_L3_HDR_VALID(ptc_key_ptr);
-       ptkey_info->l3_hdr_error        = PTKEY_INFO_L3_HDR_ERROR(ptc_key_ptr);
-       ptkey_info->l3_hdr_type         = PTKEY_INFO_L3_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->l3_hdr_isip         = PTKEY_INFO_L3_HDR_ISIP(ptc_key_ptr);
-       ptkey_info->l3_protocol         = PTKEY_INFO_L3_PROTOCOL(ptc_key_ptr);
-
-       ptkey_info->l4_hdr_valid        = PTKEY_INFO_L4_HDR_VALID(ptc_key_ptr);
-       ptkey_info->l4_hdr_error        = PTKEY_INFO_L4_HDR_ERROR(ptc_key_ptr);
-       ptkey_info->l4_hdr_type         = PTKEY_INFO_L4_HDR_TYPE(ptc_key_ptr);
-       ptkey_info->l4_hdr_is_udp_tcp   = 
PTKEY_INFO_L4_HDR_IS_UDP_TCP(ptc_key_ptr);
-       ptkey_info->l4_hdr_subtype      = 
PTKEY_INFO_L4_HDR_SUBTYPE(ptc_key_ptr);
-       ptkey_info->l4_flags            = PTKEY_INFO_L4_FLAGS(ptc_key_ptr);
-       ptkey_info->l4_dcn_present      = 
PTKEY_INFO_L4_DCN_PRESENT(ptc_key_ptr);
-}
-
-#define PTRMP_INFO_PL_BYP_LKUP_EN(kptr)   tfc_getbits(ptc_rmp_ptr, 42, 1)
-#define PTRMP_INFO_EM_SEARCH_EN(kptr)     tfc_getbits(ptc_rmp_ptr, 41, 1)
-#define PTRMP_INFO_EM_PROFILE_ID(kptr)    tfc_getbits(ptc_rmp_ptr, 33, 8)
-#define PTRMP_INFO_EM_KEY_ID(kptr)        tfc_getbits(ptc_rmp_ptr, 26, 7)
-#define PTRMP_INFO_EM_SCOPE(kptr)         tfc_getbits(ptc_rmp_ptr, 21, 5)
-#define PTRMP_INFO_TCAM_SEARCH_EN(kptr)   tfc_getbits(ptc_rmp_ptr, 20, 1)
-#define PTRMP_INFO_TCAM_PROFILE_ID(kptr)  tfc_getbits(ptc_rmp_ptr, 12, 8)
-#define PTRMP_INFO_TCAM_KEY_ID(kptr)      tfc_getbits(ptc_rmp_ptr, 5, 7)
-#define PTRMP_INFO_TCAM_SCOPE(kptr)       tfc_getbits(ptc_rmp_ptr, 0, 5)
-
-static void prof_tcam_remap_decode(uint32_t *ptc_rmp_ptr,
-                                  struct prof_tcam_remap_t *ptrmp_info)
-{
-       ptrmp_info->pl_byp_lkup_en  = PTRMP_INFO_PL_BYP_LKUP_EN(ptc_rmp_ptr) ? 
true : false;
-       ptrmp_info->em_search_en    = PTRMP_INFO_EM_SEARCH_EN(ptc_rmp_ptr) ? 
true : false;
-       ptrmp_info->em_profile_id   = PTRMP_INFO_EM_PROFILE_ID(ptc_rmp_ptr);
-       ptrmp_info->em_key_id       = PTRMP_INFO_EM_KEY_ID(ptc_rmp_ptr);
-       ptrmp_info->em_scope        = PTRMP_INFO_EM_SCOPE(ptc_rmp_ptr);
-       ptrmp_info->tcam_search_en  = PTRMP_INFO_TCAM_SEARCH_EN(ptc_rmp_ptr) ? 
true : false;
-       ptrmp_info->tcam_profile_id = PTRMP_INFO_TCAM_PROFILE_ID(ptc_rmp_ptr);
-       ptrmp_info->tcam_key_id     = PTRMP_INFO_TCAM_KEY_ID(ptc_rmp_ptr);
-       ptrmp_info->tcam_scope      = PTRMP_INFO_TCAM_SCOPE(ptc_rmp_ptr);
-}
-
-static void prof_tcam_show(FILE *fd,
-                          struct prof_tcam_key_t *ptkey_info,
-                          struct prof_tcam_key_t *ptmask_info,
-                          struct prof_tcam_remap_t *ptrmp_info)
-{
-       char tmph[TFC_STRING_LENGTH_64];
-       char tmp1[TFC_STRING_LENGTH_64];
-       char tmp2[TFC_STRING_LENGTH_64];
-       char tmp3[TFC_STRING_LENGTH_64];
-       char tmp4[TFC_STRING_LENGTH_64];
-       char tmp5[TFC_STRING_LENGTH_64];
-       char *lineh = NULL;
-       char *line1 = NULL;
-       char *line2 = NULL;
-       char *line3 = NULL;
-       char *line4 = NULL;
-       char *line5 = NULL;
-
-       lineh = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line1 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line2 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line3 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line4 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line5 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       if (!lineh || !line1 || !line2 || !line3 || !line4 || !line5) {
-               rte_free(lineh);
-               rte_free(line1);
-               rte_free(line2);
-               rte_free(line3);
-               rte_free(line4);
-               rte_free(line5);
-               fprintf(fd, "%s: Failed to allocate temp buffer\n",
-                       __func__);
-               return;
-       }
-
-       snprintf(line1, TFC_STRING_LENGTH_256, 
"+-+--+----+----+----+---------+------"
-                "+--------+-------+-----+---+---+---+\n");
-       snprintf(line2, TFC_STRING_LENGTH_256, "|V|Sp|lpbk|ptyp|rcyc|    MD   
|aggerr"
-                "|l2ipfunc|profunc|hrnxt|IHT|IHG|IIT|\n");
-       snprintf(line3, TFC_STRING_LENGTH_256, 
"+-+--+----+----+----+---------+------"
-                "+--------+-------+-----+---+---+---+\n");
-       snprintf(line4, TFC_STRING_LENGTH_256, " %01x x%01x   %01x   x%01x  
x%01x  x%08x"
-                "    %01x     x%02x      x%02x     x%01x   x%01x  x%01x   %01x 
 key\n",
-                ptkey_info->valid,
-                ptkey_info->spare,
-                ptkey_info->loopback,
-                ptkey_info->pkt_type,
-                ptkey_info->rcyc,
-                ptkey_info->metadata,
-                ptkey_info->agg_error,
-                ptkey_info->l2ip_func,
-                ptkey_info->prof_func,
-                ptkey_info->hrec_next,
-                ptkey_info->int_hdr_type,
-                ptkey_info->int_hdr_group,
-                ptkey_info->int_ifa_tail);
-       snprintf(line5, TFC_STRING_LENGTH_256, " %01x x%01x   %01x   x%01x  
x%01x  x%08x"
-                "    %01x     x%02x      x%02x     x%01x   x%01x  x%01x   %01x 
 mask\n",
-                ptmask_info->valid,
-                ptmask_info->spare,
-                ptmask_info->loopback,
-                ptmask_info->pkt_type,
-                ptmask_info->rcyc,
-                ptmask_info->metadata,
-                ptmask_info->agg_error,
-                ptmask_info->l2ip_func,
-                ptmask_info->prof_func,
-                ptmask_info->hrec_next,
-                ptmask_info->int_hdr_type,
-                ptmask_info->int_hdr_group,
-                ptmask_info->int_ifa_tail);
-       fprintf(fd, "%s%s%s%s%s",
-               line1,
-               line2,
-               line3,
-               line5,
-               line4);
-
-       snprintf(lineh, TFC_STRING_LENGTH_256, "|OTL2 hdr       |");
-       snprintf(line1, TFC_STRING_LENGTH_256, "+-+--+---+--+---+");
-       snprintf(line2, TFC_STRING_LENGTH_256, "|V|HT|UMB|VT|2VT|");
-       snprintf(line3, TFC_STRING_LENGTH_256, "+-+--+---+--+---+");
-       snprintf(line4, TFC_STRING_LENGTH_256, " %01x x%01x  x%01x  %01x  %01x 
",
-                ptkey_info->otl2_hdr_valid,
-                ptkey_info->otl2_hdr_type,
-                ptkey_info->otl2_uc_mc_bc,
-                ptkey_info->otl2_vtag_present,
-                ptkey_info->otl2_two_vtags);
-       snprintf(line5, TFC_STRING_LENGTH_256, " %01x x%01x  x%01x  %01x  %01x 
",
-                ptmask_info->otl2_hdr_valid,
-                ptmask_info->otl2_hdr_type,
-                ptmask_info->otl2_uc_mc_bc,
-                ptmask_info->otl2_vtag_present,
-                ptmask_info->otl2_two_vtags);
-
-       snprintf(tmph, TFC_STRING_LENGTH_64, "OTL3 hdr  |");
-       snprintf(tmp1, TFC_STRING_LENGTH_64, "-+--+--+--+");
-       snprintf(tmp2, TFC_STRING_LENGTH_64, "V|HE|HT|IP|");
-       snprintf(tmp3, TFC_STRING_LENGTH_64, "-+--+--+--+");
-       snprintf(tmp4, TFC_STRING_LENGTH_64, " %01x  %01x x%01x  %01x ",
-                ptkey_info->otl3_hdr_valid,
-                ptkey_info->otl3_hdr_error,
-                ptkey_info->otl3_hdr_type,
-                ptkey_info->otl3_hdr_isip);
-       snprintf(tmp5, TFC_STRING_LENGTH_64, " %01x  %01x x%01x  %01x ",
-                ptmask_info->otl3_hdr_valid,
-                ptmask_info->otl3_hdr_error,
-                ptmask_info->otl3_hdr_type,
-                ptmask_info->otl3_hdr_isip);
-
-       strcat(lineh, tmph);
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-       strcat(line5, tmp5);
-
-       snprintf(tmph, TFC_STRING_LENGTH_64, "OTL4 hdr  |");
-       snprintf(tmp1, TFC_STRING_LENGTH_64, "-+--+--+--+");
-       snprintf(tmp2, TFC_STRING_LENGTH_64, "V|HE|HT|IP|");
-       snprintf(tmp3, TFC_STRING_LENGTH_64, "-+--+--+--+");
-       snprintf(tmp4, TFC_STRING_LENGTH_64, "%01x  %01x x%01x  %01x ",
-                ptkey_info->otl4_hdr_valid,
-                ptkey_info->otl4_hdr_error,
-                ptkey_info->otl4_hdr_type,
-                ptkey_info->otl4_hdr_is_udp_tcp);
-       snprintf(tmp5, TFC_STRING_LENGTH_64, "%01x  %01x x%01x  %01x ",
-                ptmask_info->otl4_hdr_valid,
-                ptmask_info->otl4_hdr_error,
-                ptmask_info->otl4_hdr_type,
-                ptmask_info->otl4_hdr_is_udp_tcp);
-
-       strcat(lineh, tmph);
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-       strcat(line5, tmp5);
-
-       snprintf(tmph, TFC_STRING_LENGTH_64, "OT hdr      |\n");
-       snprintf(tmp1, TFC_STRING_LENGTH_64, "-+--+---+---+\n");
-       snprintf(tmp2, TFC_STRING_LENGTH_64, "V|HE| HT|flg|\n");
-       snprintf(tmp3, TFC_STRING_LENGTH_64, "-+--+---+---+\n");
-       snprintf(tmp4, TFC_STRING_LENGTH_64, "%01x  %01x x%02x x%02x  key\n",
-                ptkey_info->ot_hdr_valid,
-                ptkey_info->ot_hdr_error,
-                ptkey_info->ot_hdr_type,
-                ptkey_info->ot_hdr_flags);
-       snprintf(tmp5, TFC_STRING_LENGTH_64, "%01x  %01x x%02x x%02x  mask\n",
-                ptmask_info->ot_hdr_valid,
-                ptmask_info->ot_hdr_error,
-                ptmask_info->ot_hdr_type,
-                ptmask_info->ot_hdr_flags);
-
-       strcat(lineh, tmph);
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-       strcat(line5, tmp5);
-
-       fprintf(fd, "%s%s%s%s%s%s",
-               lineh,
-               line1,
-               line2,
-               line3,
-               line5,
-               line4);
-
-       snprintf(lineh, TFC_STRING_LENGTH_256, "|TL2 hdr        |");
-       snprintf(line1, TFC_STRING_LENGTH_256, "+-+--+---+--+---+");
-       snprintf(line2, TFC_STRING_LENGTH_256, "|V|HT|UMB|VT|2VT|");
-       snprintf(line3, TFC_STRING_LENGTH_256, "+-+--+---+--+---+");
-       snprintf(line4, TFC_STRING_LENGTH_256, " %01x x%01x  x%01x  %01x  %01x 
",
-                ptkey_info->tl2_hdr_valid,
-                ptkey_info->tl2_hdr_type,
-                ptkey_info->tl2_uc_mc_bc,
-                ptkey_info->tl2_vtag_present,
-                ptkey_info->tl2_two_vtags);
-       snprintf(line5, TFC_STRING_LENGTH_256, " %01x x%01x  x%01x  %01x  %01x 
",
-                ptmask_info->tl2_hdr_valid,
-                ptmask_info->tl2_hdr_type,
-                ptmask_info->tl2_uc_mc_bc,
-                ptmask_info->tl2_vtag_present,
-                ptmask_info->tl2_two_vtags);
-
-       snprintf(tmph, TFC_STRING_LENGTH_64, "TL3 hdr   |");
-       snprintf(tmp1, TFC_STRING_LENGTH_64, "-+--+--+--+");
-       snprintf(tmp2, TFC_STRING_LENGTH_64, "V|HE|HT|IP|");
-       snprintf(tmp3, TFC_STRING_LENGTH_64, "-+--+--+--+");
-       snprintf(tmp4, TFC_STRING_LENGTH_64, " %01x  %01x x%01x  %01x ",
-                ptkey_info->tl3_hdr_valid,
-                ptkey_info->tl3_hdr_error,
-                ptkey_info->tl3_hdr_type,
-                ptkey_info->tl3_hdr_isip);
-       snprintf(tmp5, TFC_STRING_LENGTH_64, " %01x  %01x x%01x  %01x ",
-                ptmask_info->tl3_hdr_valid,
-                ptmask_info->tl3_hdr_error,
-                ptmask_info->tl3_hdr_type,
-                ptmask_info->tl3_hdr_isip);
-
-       strcat(lineh, tmph);
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-       strcat(line5, tmp5);
-
-       snprintf(tmph, TFC_STRING_LENGTH_64, "TL4 hdr   |");
-       snprintf(tmp1, TFC_STRING_LENGTH_64, "-+--+--+--+");
-       snprintf(tmp2, TFC_STRING_LENGTH_64, "V|HE|HT|IP|");
-       snprintf(tmp3, TFC_STRING_LENGTH_64, "-+--+--+--+");
-       snprintf(tmp4, TFC_STRING_LENGTH_64, "%01x  %01x x%01x  %01x ",
-                ptkey_info->tl4_hdr_valid,
-                ptkey_info->tl4_hdr_error,
-                ptkey_info->tl4_hdr_type,
-                ptkey_info->tl4_hdr_is_udp_tcp);
-       snprintf(tmp5, TFC_STRING_LENGTH_64, "%01x  %01x x%01x  %01x ",
-                ptmask_info->tl4_hdr_valid,
-                ptmask_info->tl4_hdr_error,
-                ptmask_info->tl4_hdr_type,
-                ptmask_info->tl4_hdr_is_udp_tcp);
-
-       strcat(lineh, tmph);
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-       strcat(line5, tmp5);
-
-       snprintf(tmph, TFC_STRING_LENGTH_64, "T hdr       |\n");
-       snprintf(tmp1, TFC_STRING_LENGTH_64, "-+--+---+---+\n");
-       snprintf(tmp2, TFC_STRING_LENGTH_64, "V|HE| HT|flg|\n");
-       snprintf(tmp3, TFC_STRING_LENGTH_64, "-+--+---+---+\n");
-       snprintf(tmp4, TFC_STRING_LENGTH_64, "%01x  %01x x%02x x%02x  key\n",
-                ptkey_info->t_hdr_valid,
-                ptkey_info->t_hdr_error,
-                ptkey_info->t_hdr_type,
-                ptkey_info->t_hdr_flags);
-       snprintf(tmp5, TFC_STRING_LENGTH_64, "%01x  %01x x%02x x%02x  mask\n",
-                ptmask_info->t_hdr_valid,
-                ptmask_info->t_hdr_error,
-                ptmask_info->t_hdr_type,
-                ptmask_info->t_hdr_flags);
-
-       strcat(lineh, tmph);
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-       strcat(line5, tmp5);
-
-       fprintf(fd, "%s%s%s%s%s%s",
-               lineh,
-               line1,
-               line2,
-               line3,
-               line5,
-               line4);
-
-       snprintf(lineh, TFC_STRING_LENGTH_256, "|L2 hdr         |");
-       snprintf(line1, TFC_STRING_LENGTH_256, "+-+--+---+--+---+");
-       snprintf(line2, TFC_STRING_LENGTH_256, "|V|HT|UMB|VT|2VT|");
-       snprintf(line3, TFC_STRING_LENGTH_256, "+-+--+---+--+---+");
-       snprintf(line4, TFC_STRING_LENGTH_256, " %01x x%01x  x%01x  %01x  %01x 
",
-                ptkey_info->l2_hdr_valid,
-                ptkey_info->l2_hdr_type,
-                ptkey_info->l2_uc_mc_bc,
-                ptkey_info->l2_vtag_present,
-                ptkey_info->l2_two_vtags);
-       snprintf(line5, TFC_STRING_LENGTH_256, " %01x x%01x  x%01x  %01x  %01x 
",
-                ptmask_info->l2_hdr_valid,
-                ptmask_info->l2_hdr_type,
-                ptmask_info->l2_uc_mc_bc,
-                ptmask_info->l2_vtag_present,
-                ptmask_info->l2_two_vtags);
-
-       snprintf(tmph, TFC_STRING_LENGTH_64, "L3 hdr         |");
-       snprintf(tmp1, TFC_STRING_LENGTH_64, "-+--+--+--+----+");
-       snprintf(tmp2, TFC_STRING_LENGTH_64, "V|HE|HT|IP|prot|");
-       snprintf(tmp3, TFC_STRING_LENGTH_64, "-+--+--+--+----+");
-       snprintf(tmp4, TFC_STRING_LENGTH_64, " %01x  %01x x%01x  %01x  x%02x ",
-                ptkey_info->l3_hdr_valid,
-                ptkey_info->l3_hdr_error,
-                ptkey_info->l3_hdr_type,
-                ptkey_info->l3_hdr_isip,
-                ptkey_info->l3_protocol);
-       snprintf(tmp5, TFC_STRING_LENGTH_64, " %01x  %01x x%01x  %01x  x%02x ",
-                ptmask_info->l3_hdr_valid,
-                ptmask_info->l3_hdr_error,
-                ptmask_info->l3_hdr_type,
-                ptmask_info->l3_hdr_isip,
-                ptmask_info->l3_protocol);
-
-       strcat(lineh, tmph);
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-       strcat(line5, tmp5);
-
-       snprintf(tmph, TFC_STRING_LENGTH_64, "L4 hdr                 |\n");
-       snprintf(tmp1, TFC_STRING_LENGTH_64, "-+--+--+--+---+----+---+\n");
-       snprintf(tmp2, TFC_STRING_LENGTH_64, "V|HE|HT|IP|HST|flgs|DCN|\n");
-       snprintf(tmp3, TFC_STRING_LENGTH_64, "-+--+--+--+---+----+---+\n");
-       snprintf(tmp4, TFC_STRING_LENGTH_64, "%01x  %01x x%01x  %01x  x%01x 
x%03x  x%01x  key\n",
-                ptkey_info->l4_hdr_valid,
-                ptkey_info->l4_hdr_error,
-                ptkey_info->l4_hdr_type,
-                ptkey_info->l4_hdr_is_udp_tcp,
-                ptkey_info->l4_hdr_subtype,
-                ptkey_info->l4_flags,
-                ptkey_info->l4_dcn_present);
-       snprintf(tmp5, TFC_STRING_LENGTH_64, "%01x  %01x x%01x  %01x  x%01x 
x%03x  x%01x  mask\n",
-                ptmask_info->l4_hdr_valid,
-                ptmask_info->l4_hdr_error,
-                ptmask_info->l4_hdr_type,
-                ptmask_info->l4_hdr_is_udp_tcp,
-                ptmask_info->l4_hdr_subtype,
-                ptmask_info->l4_flags,
-                ptmask_info->l4_dcn_present);
-
-       strcat(lineh, tmph);
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-       strcat(line5, tmp5);
-
-       fprintf(fd, "%s%s%s%s%s%s",
-               lineh,
-               line1,
-               line2,
-               line3,
-               line5,
-               line4);
-
-       fputs("\n:Profile TCAM: remap\n", fd);
-       snprintf(line1, TFC_STRING_LENGTH_256, 
"+-+--+---+---+---+--+---+---+---+\n");
-       snprintf(line2, TFC_STRING_LENGTH_256, 
"|B|EM|PID|KId|Scp|WC|PID|KId|Scp|\n");
-       snprintf(line3, TFC_STRING_LENGTH_256, 
"+-+--+---+---+---+--+---+---+---+\n");
-       snprintf(line4, TFC_STRING_LENGTH_256, " %c  %c x%02x x%02x x%02x  %c 
x%02x x%02x x%02x\n",
-                ptrmp_info->pl_byp_lkup_en ? 'Y' : 'N',
-                ptrmp_info->em_search_en ? 'Y' : 'N',
-                ptrmp_info->em_profile_id,
-                ptrmp_info->em_key_id,
-                ptrmp_info->em_scope,
-                ptrmp_info->tcam_search_en ? 'Y' : 'N',
-                ptrmp_info->tcam_profile_id,
-                ptrmp_info->tcam_key_id,
-                ptrmp_info->tcam_scope);
-
-       fprintf(fd, "%s%s%s%s",
-               line1,
-               line2,
-               line3,
-               line4);
-
-       rte_free(lineh);
-       rte_free(line1);
-       rte_free(line2);
-       rte_free(line3);
-       rte_free(line4);
-       rte_free(line5);
-}
-
-/* Offset all WC LREC fields by -24  as per CFA EAS */
-#define WC_INFO_VALID(kptr)            tfc_getbits(kptr, (127 - 24), 1)
-#define WC_INFO_REC_SIZE(kptr)         tfc_getbits(kptr, (125 - 24), 2)
-#define WC_INFO_EPOCH0(kptr)           tfc_getbits(kptr, (113 - 24), 12)
-#define WC_INFO_EPOCH1(kptr)           tfc_getbits(kptr, (107 - 24), 6)
-#define WC_INFO_OPCODE(kptr)           tfc_getbits(kptr, (103 - 24), 4)
-#define WC_INFO_STRENGTH(kptr)         tfc_getbits(kptr, (101 - 24), 2)
-#define WC_INFO_ACT_HINT(kptr)         tfc_getbits(kptr, (99 - 24), 2)
-
-#define WC_INFO_ACT_REC_PTR(kptr)      tfc_getbits(kptr, (73 - 24), 26)
-
-#define WC_INFO_DESTINATION(kptr)      tfc_getbits(kptr, (73 - 24), 17)
-
-#define WC_INFO_TCP_DIRECTION(kptr)    tfc_getbits(kptr, (72 - 24), 1)
-#define WC_INFO_TCP_UPDATE_EN(kptr)    tfc_getbits(kptr, (71 - 24), 1)
-#define WC_INFO_TCP_WIN(kptr)          tfc_getbits(kptr, (66 - 24), 5)
-#define WC_INFO_TCP_MSB_LOC(kptr)      tfc_getbits(kptr, (48 - 24), 18)
-#define WC_INFO_TCP_MSB_OPP(kptr)      tfc_getbits(kptr, (30 - 24), 18)
-#define WC_INFO_TCP_MSB_OPP_INIT(kptr) tfc_getbits(kptr, (29 - 24), 1)
-#define WC_INFO_STATE(kptr)            tfc_getbits(kptr, (24 - 24), 5)
-
-#define WC_INFO_RING_TABLE_IDX(kptr)   tfc_getbits(kptr, (64 - 24), 9)
-#define WC_INFO_ACT_REC_SIZE(kptr)     tfc_getbits(kptr, (59 - 24), 5)
-#define WC_INFO_PATHS_M1(kptr)         tfc_getbits(kptr, (55 - 24), 4)
-#define WC_INFO_FC_OP(kptr)            tfc_getbits(kptr, (54 - 24), 1)
-#define WC_INFO_FC_TYPE(kptr)          tfc_getbits(kptr, (52 - 24), 2)
-#define WC_INFO_FC_PTR(kptr)           tfc_getbits(kptr, (24 - 24), 28)
-
-#define WC_INFO_RECYCLE_DEST(kptr)     tfc_getbits(kptr, (72 - 24), 1)
-#define WC_INFO_PROF_FUNC(kptr)                tfc_getbits(kptr, (64 - 24), 8)
-#define WC_INFO_META_PROF(kptr)                tfc_getbits(kptr, (61 - 24), 3)
-#define WC_INFO_METADATA(kptr)         tfc_getbits(kptr, (29 - 24), 32)
-
-static void wc_tcam_decode(uint32_t *wc_res_ptr,
-                          struct wc_lrec_t *wc_info,
-                          struct tfc_ts_mem_cfg *act_mem_cfg)
-{
-       wc_info->valid    = WC_INFO_VALID(wc_res_ptr);
-       wc_info->rec_size = WC_INFO_REC_SIZE(wc_res_ptr);
-       wc_info->epoch0   = WC_INFO_EPOCH0(wc_res_ptr);
-       wc_info->epoch1   = WC_INFO_EPOCH1(wc_res_ptr);
-       wc_info->opcode   = WC_INFO_OPCODE(wc_res_ptr);
-       wc_info->strength = WC_INFO_STRENGTH(wc_res_ptr);
-       wc_info->act_hint = WC_INFO_ACT_HINT(wc_res_ptr);
-
-       if (wc_info->opcode != 2 && wc_info->opcode != 3) {
-               /* All but FAST */
-               wc_info->act_rec_ptr = WC_INFO_ACT_REC_PTR(wc_res_ptr);
-               act_process(wc_info->act_rec_ptr, &wc_info->act_info, 
act_mem_cfg);
-       } else {
-               /* Just FAST */
-               wc_info->destination = WC_INFO_DESTINATION(wc_res_ptr);
-       }
-
-       if (wc_info->opcode == 4 || wc_info->opcode == 6) {
-               /* CT only */
-               wc_info->tcp_direction    = WC_INFO_TCP_DIRECTION(wc_res_ptr);
-               wc_info->tcp_update_en    = WC_INFO_TCP_UPDATE_EN(wc_res_ptr);
-               wc_info->tcp_win          = WC_INFO_TCP_WIN(wc_res_ptr);
-               wc_info->tcp_msb_loc      = WC_INFO_TCP_MSB_LOC(wc_res_ptr);
-               wc_info->tcp_msb_opp      = WC_INFO_TCP_MSB_OPP(wc_res_ptr);
-               wc_info->tcp_msb_opp_init = 
WC_INFO_TCP_MSB_OPP_INIT(wc_res_ptr);
-               wc_info->state            = WC_INFO_STATE(wc_res_ptr);
-       } else if (wc_info->opcode != 8) {
-               /* Not CT and nor RECYCLE */
-               wc_info->ring_table_idx = WC_INFO_RING_TABLE_IDX(wc_res_ptr);
-               wc_info->act_rec_size   = WC_INFO_ACT_REC_SIZE(wc_res_ptr);
-               wc_info->paths_m1       = WC_INFO_PATHS_M1(wc_res_ptr);
-               wc_info->fc_op          = WC_INFO_FC_OP(wc_res_ptr);
-               wc_info->fc_type        = WC_INFO_FC_TYPE(wc_res_ptr);
-               wc_info->fc_ptr         = WC_INFO_FC_PTR(wc_res_ptr);
-       } else {
-               /* Recycle */
-               wc_info->recycle_dest = WC_INFO_RECYCLE_DEST(wc_res_ptr);
-               wc_info->prof_func    = WC_INFO_PROF_FUNC(wc_res_ptr);
-               wc_info->meta_prof    = WC_INFO_META_PROF(wc_res_ptr);
-               wc_info->metadata     = WC_INFO_METADATA(wc_res_ptr);
-       }
-}
-
-static void wc_tcam_show(FILE *fd, struct wc_lrec_t *wc_info)
-{
-       char *line1 = NULL;
-       char *line2 = NULL;
-       char *line3 = NULL;
-       char *line4 = NULL;
-       char tmp1[TFC_STRING_LENGTH_64];
-       char tmp2[TFC_STRING_LENGTH_64];
-       char tmp3[TFC_STRING_LENGTH_64];
-       char tmp4[TFC_STRING_LENGTH_64];
-
-       line1 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line2 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line3 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       line4 = rte_malloc("data", TFC_STRING_LENGTH_256, 8);
-       if (!line1 || !line2 || !line3 || !line4) {
-               rte_free(line1);
-               rte_free(line2);
-               rte_free(line3);
-               rte_free(line4);
-               fprintf(fd, "%s: Failed to allocate temp buffer\n",
-                       __func__);
-               return;
-       }
-
-       fprintf(fd, ":LREC: opcode:%s\n", get_lrec_opcode_str(wc_info->opcode));
-
-       snprintf(line1, TFC_STRING_LENGTH_256, "+-+--+-Epoch-+--+--+--+");
-       snprintf(line2, TFC_STRING_LENGTH_256, " V|rs|  0  1 |Op|St|ah|");
-       snprintf(line3, TFC_STRING_LENGTH_256, "+-+--+----+--+--+--+--+");
-       snprintf(line4, TFC_STRING_LENGTH_256, " %1d %2d %4d %2d %2d %2d %2d ",
-                wc_info->valid,
-                wc_info->rec_size,
-                wc_info->epoch0,
-                wc_info->epoch1,
-                wc_info->opcode,
-                wc_info->strength,
-                wc_info->act_hint);
-
-       if (wc_info->opcode != 2 && wc_info->opcode != 3) {
-               /* All but FAST */
-               snprintf(tmp1, TFC_STRING_LENGTH_64, "-Act Rec--+");
-               snprintf(tmp2, TFC_STRING_LENGTH_64, " Ptr      |");
-               snprintf(tmp3, TFC_STRING_LENGTH_64, "----------+");
-               snprintf(tmp4, TFC_STRING_LENGTH_64, "0x%08x ",
-                        wc_info->act_rec_ptr);
-       } else {
-               /* Just FAST */
-               snprintf(tmp1, TFC_STRING_LENGTH_64, "-------+");
-               snprintf(tmp2, TFC_STRING_LENGTH_64, " Dest  |");
-               snprintf(tmp3, TFC_STRING_LENGTH_64, "-------+");
-               snprintf(tmp4, TFC_STRING_LENGTH_64, "0x05%x ",
-                        wc_info->destination);
-       }
-
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-
-       if (wc_info->opcode == 4 || wc_info->opcode == 6) {
-               /* CT only */
-               snprintf(tmp1, TFC_STRING_LENGTH_64, 
"--+--+-------------TCP-------+--+---+");
-               snprintf(tmp2, TFC_STRING_LENGTH_64, "Dr|ue| Win|   lc  |   op  
|oi|st|tmr|");
-               snprintf(tmp3, TFC_STRING_LENGTH_64, 
"--+--+----+-------+-------+--+--+---+");
-               snprintf(tmp4, TFC_STRING_LENGTH_64, "%2d %2d %4d %0x5x %0x5x 
%2d %2d %3d ",
-                        wc_info->tcp_direction,
-                        wc_info->tcp_update_en,
-                        wc_info->tcp_win,
-                        wc_info->tcp_msb_loc,
-                        wc_info->tcp_msb_opp,
-                        wc_info->tcp_msb_opp_init,
-                        wc_info->state,
-                        wc_info->timer_value);
-       } else if (wc_info->opcode != 8) {
-               /* Not CT and nor RECYCLE */
-               snprintf(tmp1, TFC_STRING_LENGTH_64, 
"--+--+--+-------FC-------+");
-               snprintf(tmp2, TFC_STRING_LENGTH_64, "RI|as|pm|op|tp|     Ptr  
|");
-               snprintf(tmp3, TFC_STRING_LENGTH_64, 
"--+--+--+--+--+----------+");
-               snprintf(tmp4, TFC_STRING_LENGTH_64, "%2d %2d %2d %2d %2d 
0x%08x ",
-                        wc_info->ring_table_idx,
-                        wc_info->act_rec_size,
-                        wc_info->paths_m1,
-                        wc_info->fc_op,
-                        wc_info->fc_type,
-                        wc_info->fc_ptr);
-       } else {
-               snprintf(tmp1, TFC_STRING_LENGTH_64, "--+--+--+---------+");
-               snprintf(tmp2, TFC_STRING_LENGTH_64, "RD|pf|mp| cMData  |");
-               snprintf(tmp3, TFC_STRING_LENGTH_64, "--+--+--+---------+");
-               snprintf(tmp4, TFC_STRING_LENGTH_64, "%2d 0x%2x %2d %08x ",
-                        wc_info->recycle_dest,
-                        wc_info->prof_func,
-                        wc_info->meta_prof,
-                        wc_info->metadata);
-       }
-
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-
-       snprintf(tmp1, TFC_STRING_LENGTH_64, "-----Range-+\n");
-       snprintf(tmp2, TFC_STRING_LENGTH_64, "Prof|  Idx |\n");
-       snprintf(tmp3, TFC_STRING_LENGTH_64, "----+------+\n");
-       snprintf(tmp4, TFC_STRING_LENGTH_64, "0x%02x 0x%04x\n",
-                wc_info->range_profile,
-                wc_info->range_index);
-
-       strcat(line1, tmp1);
-       strcat(line2, tmp2);
-       strcat(line3, tmp3);
-       strcat(line4, tmp4);
-
-       fprintf(fd, "%s%s%s%s",
-               line1,
-               line2,
-               line3,
-               line4);
-
-       if (wc_info->opcode != 2 && wc_info->opcode != 3)
-               act_show(fd, &wc_info->act_info, wc_info->act_rec_ptr << 5);
-
-       rte_free(line1);
-       rte_free(line2);
-       rte_free(line3);
-       rte_free(line4);
-}
-
-static int tfc_tcam_process(struct ulp_flow_db_res_params *rp,
-                           void *frp_ctxt)
-{
-       struct wc_frp_context *wc_frp = (struct wc_frp_context *)frp_ctxt;
-       struct l2ctx_tcam_key_t *l2ctx_key_info, *l2ctx_mask_info;
-       struct prof_tcam_key_t *ptkey_info, *ptmask_info;
-       struct l2ctx_tcam_remap_t *l2ctx_rmp_info;
-       struct prof_tcam_remap_t *ptrmp_info;
-       FILE *fd = wc_frp->fd;
-       struct wc_lrec_t *wc_lrec;
-       uint8_t *key, *mask, *remap;
-       uint16_t key_sz = 128, remap_sz = 128;
-       int rc = -ENOMEM;
-
-       /* Allocate all temp storage */
-       wc_lrec = rte_zmalloc("data", sizeof(*wc_lrec), 8);
-       l2ctx_key_info = rte_zmalloc("data", sizeof(*l2ctx_key_info), 8);
-       l2ctx_mask_info = rte_zmalloc("data", sizeof(*l2ctx_mask_info), 8);
-       l2ctx_rmp_info = rte_zmalloc("data", sizeof(*l2ctx_rmp_info), 8);
-       ptkey_info = rte_zmalloc("data", sizeof(*ptkey_info), 8);
-       ptmask_info = rte_zmalloc("data", sizeof(*ptmask_info), 8);
-       ptrmp_info = rte_zmalloc("data", sizeof(*ptrmp_info), 8);
-       key = rte_zmalloc("data", key_sz, 8);
-       mask = rte_zmalloc("data", key_sz, 8);
-       remap = rte_zmalloc("data", remap_sz, 8);
-
-       if (!wc_lrec || !l2ctx_key_info || !l2ctx_mask_info ||
-           !l2ctx_rmp_info || !ptkey_info || !ptmask_info ||
-           !ptrmp_info || !key || !mask || !remap) {
-               fputs("Out of memory:\n", fd);
-               fprintf(fd, "%p:%p:%p\n", wc_lrec, l2ctx_key_info, 
l2ctx_mask_info);
-               fprintf(fd, "%p:%p:%p\n", l2ctx_rmp_info, ptkey_info, 
ptmask_info);
-               fprintf(fd, "%p:%p:%p:%p\n", ptrmp_info, key, mask, remap);
-               goto tcam_process_error;
-       }
-
-       rc = tfc_tcam_entry_read(wc_frp->ulp_ctxt,
-                                rp->direction,
-                                rp->resource_type,
-                                rp->resource_hndl,
-                                key,
-                                mask,
-                                remap,
-                                &key_sz,
-                                &remap_sz);
-       if (rc) {
-               fprintf(fd, "TCAM read error rc[%d]\n", rc);
-               rc = -EINVAL;
-               goto tcam_process_error;
-       }
-
-       /*
-        * Decode result, and extract act_ptr, only for L2 ctx or WC TCAM
-        * entries
-        */
-       switch (rp->resource_type) {
-       case CFA_RSUBTYPE_TCAM_L2CTX:
-               fprintf(fd, "\n:L2CTX TCAM [%u]:\n", 
(uint16_t)rp->resource_hndl);
-               hex_buf_dump(fd, "Key:", key, (int)key_sz, 1, 16);
-               hex_buf_dump(fd, "Mask:", mask, (int)key_sz, 1, 16);
-               l2ctx_tcam_key_decode((uint32_t *)key, l2ctx_key_info);
-               l2ctx_tcam_key_decode((uint32_t *)mask, l2ctx_mask_info);
-               l2ctx_tcam_remap_decode((uint32_t *)remap,
-                                       l2ctx_rmp_info, wc_frp->act_mem_cfg);
-               l2ctx_tcam_show(fd, l2ctx_key_info, l2ctx_mask_info, 
l2ctx_rmp_info);
-               break;
-
-       case CFA_RSUBTYPE_TCAM_WC:
-               fprintf(fd, "\n:WC TCAM [%u]:\n", (uint16_t)rp->resource_hndl);
-               hex_buf_dump(fd, "Key:", key, (int)key_sz, 1, 16);
-               hex_buf_dump(fd, "Mask:", mask, (int)key_sz, 1, 16);
-               wc_tcam_decode((uint32_t *)remap, wc_lrec, wc_frp->act_mem_cfg);
-               wc_tcam_show(fd, wc_lrec);
-               break;
-
-       case CFA_RSUBTYPE_TCAM_PROF_TCAM:
-               fprintf(fd, "\n:Profile TCAM [%u]:\n", 
(uint16_t)rp->resource_hndl);
-               hex_buf_dump(fd, "Key:", key, (int)key_sz, 1, 16);
-               hex_buf_dump(fd, "Mask:", mask, (int)key_sz, 1, 16);
-               prof_tcam_key_decode((uint32_t *)key, ptkey_info);
-               prof_tcam_key_decode((uint32_t *)mask, ptmask_info);
-               prof_tcam_remap_decode((uint32_t *)remap, ptrmp_info);
-               prof_tcam_show(fd, ptkey_info, ptmask_info, ptrmp_info);
-               break;
-
-       case CFA_RSUBTYPE_TCAM_CT_RULE:
-       case CFA_RSUBTYPE_TCAM_VEB:
-       case CFA_RSUBTYPE_TCAM_FEATURE_CHAIN:
-               fprintf(fd, "Unsupported decode: %s\n", 
tfc_tcam_2_str(rp->resource_type));
-       default:
-               break;
-       }
-
-tcam_process_error:
-       rte_free(l2ctx_key_info);
-       rte_free(l2ctx_mask_info);
-       rte_free(l2ctx_rmp_info);
-       rte_free(wc_lrec);
-       rte_free(ptkey_info);
-       rte_free(ptmask_info);
-       rte_free(ptrmp_info);
-       rte_free(key);
-       rte_free(mask);
-       rte_free(remap);
-       return rc;
-}
-
-/*
- * Check for the following conditions:
- * 1. res_dir == p_res_dir
- * 2. res_func == p_res_func
- * 3. res_type == p_res_type
- * 4. if res_dir == CFA_DIR_MAX, skip #1
- * 5. if res_func == BNXT_ULP_RESOURCE_FUNC_INVALID, skip #2
- * 6. if res_type == CFA_RSUBTYPE_TCAM_MAX, skip #3
- *
- * Bascally implements a wildcarded match for either-or-and all conditions.
- */
-#define TFC_INVALID_RES 0xFFFFFFFF
-static bool tfc_flow_db_resource_filter(uint32_t p_res_dir, uint32_t 
p_res_func,
-                                       uint32_t p_res_type, uint32_t res_dir,
-                                       uint32_t res_func, uint32_t res_type)
-{
-       if (res_dir != CFA_DIR_MAX && p_res_dir != res_dir)
-               return false;
-
-       /* res_dir == CFA_DIR_MAX */
-       if (res_func == TFC_INVALID_RES &&
-           res_type == TFC_INVALID_RES)
-               return true;
-       else if (res_func == TFC_INVALID_RES &&
-                res_type == p_res_type)
-               return true;
-       else if (res_func == p_res_func &&
-                res_type == TFC_INVALID_RES)
-               return true;
-
-       return false;
-}
-
-/**
- * Walk through a resource matching a spec (resource_func+resource_type) for a
- * particular flow (or all flows), and call a processing callback to handle
- * data per resource/type.
- *
- * @ulp_ctxt:      Ptr to ulp_context
- * @flow_type:     FDB flow type (default/regular)
- * @resource_func: if zero then all resource_funcs are dumped.
- * @resource_type: if zero then all resource_types are dumped.
- * @frp:           FDB resource processor function
- * @frp_ctxt:      FDB resource processor context
- *
- * returns 0 if success, error code if not
- */
-static
-int tfc_flow_db_resource_walk(struct bnxt_ulp_context *ulp_ctxt, uint8_t 
flow_type,
-                             uint32_t resource_dir, uint32_t resource_func, 
uint32_t resource_type,
-                             FDB_RESOURCE_PROCFUNC frp,
-                             void *frp_ctxt)
-{
-       struct wc_frp_context *wc_frp = (struct wc_frp_context *)frp_ctxt;
-       FILE *fd = wc_frp->fd;
-       struct ulp_flow_db_res_params params;
-#if (TFC_DEBUG_DUMP_ALL_FLOWS)
-       struct bnxt_ulp_flow_tbl *flow_tbl;
-#endif
-       struct bnxt_ulp_flow_db *flow_db;
-       uint32_t ridx, fid = 1;
-       int rc;
-
-       if (!ulp_ctxt || !ulp_ctxt->cfg_data)
-               return -EINVAL;
-
-       if (!frp) {
-               fputs("No FDB proc_func\n", fd);
-               return -EINVAL;
-       }
-
-       flow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt);
-       if (!flow_db) {
-               fputs("Invalid Arguments\n", fd);
-               return -EINVAL;
-       }
-
-#if (TFC_DEBUG_DUMP_ALL_FLOWS)
-       flow_tbl = &flow_db->flow_tbl;
-
-       for (fid = 1; fid < flow_tbl->num_flows; fid++) {
-#else
-       while (!ulp_flow_db_next_entry_get(flow_db, flow_type, &fid)) {
-#endif
-               ridx = 0;
-
-               rc = ulp_flow_db_resource_get(ulp_ctxt, flow_type, fid,
-                                             &ridx, &params);
-               if (!rc) {
-                       if (tfc_flow_db_resource_filter(params.direction,
-                                                       params.resource_func,
-                                                       params.resource_type,
-                                                       resource_dir,
-                                                       resource_func,
-                                                       resource_type)) {
-                               (*frp)(&params, (void *)frp_ctxt);
-                       }
-
-                       do {
-                               rc = ulp_flow_db_resource_get(ulp_ctxt, 
flow_type, fid,
-                                                             &ridx, &params);
-                               if (!rc) {
-                                       if 
(tfc_flow_db_resource_filter(params.direction,
-                                                                       
params.resource_func,
-                                                                       
params.resource_type,
-                                                                       
resource_dir,
-                                                                       
resource_func,
-                                                                       
resource_type))
-                                               (*frp)(&params, (void 
*)frp_ctxt);
-                               }
-                       } while (ridx);
-               }
-       }
-       return 0;
-}
-
-int tfc_wc_show(FILE *fd, struct tfc *tfcp, uint8_t tsid, enum cfa_dir dir)
-{
-       struct tfc_ts_mem_cfg *act_mem_cfg;
-       struct bnxt_ulp_context *ulp_ctx;
-       struct wc_frp_context wc_frp;
-       bool is_bs_owner;
-       struct bnxt *bp;
-       enum cfa_scope_type scope_type;
-       bool valid;
-       int rc = 0;
-
-       if (!tfcp)
-               return -EINVAL;
-
-       rc = tfo_ts_get(tfcp->tfo, tsid, &scope_type, NULL, &valid, NULL);
-       if (rc != 0) {
-               fprintf(fd, "%s: failed to get tsid: %d\n",
-                          __func__, rc);
-               return -EINVAL;
-       }
-       if (!valid) {
-               fprintf(fd, "%s: tsid not allocated %d\n",
-                          __func__, tsid);
-               return -EINVAL;
-       }
-
-       act_mem_cfg = rte_zmalloc("data", sizeof(*act_mem_cfg), 8);
-       if (!act_mem_cfg)
-               return -ENOMEM;
-
-       rc = tfo_ts_get_mem_cfg(tfcp->tfo, tsid,
-                               dir,
-                               CFA_REGION_TYPE_ACT,
-                               &is_bs_owner,
-                               act_mem_cfg);   /* Gets rec_cnt */
-       if (rc != 0) {
-               fprintf(fd, "%s: tfo_ts_get_mem_cfg() failed for ACT: %d\n",
-                          __func__, rc);
-               rte_free(act_mem_cfg);
-               return -EINVAL;
-       }
-
-       if (tfcp &&
-           tfcp->bp) {
-               bp = (struct bnxt *)(tfcp->bp);
-               ulp_ctx = bp->ulp_ctx;
-
-               if (ulp_ctx) {
-                       wc_frp.ulp_ctxt = ulp_ctx;
-                       wc_frp.fd = fd;
-                       wc_frp.act_mem_cfg = act_mem_cfg;
-
-                       /* Dump-decode all TCAM resources for default flows */
-                       fputs("\nDefault flows TCAM:\n", fd);
-                       fputs("===================\n", fd);
-                       tfc_flow_db_resource_walk(ulp_ctx, 
BNXT_ULP_FDB_TYPE_DEFAULT, dir,
-                                                 
BNXT_ULP_RESOURCE_FUNC_TCAM_TABLE,
-                                                 -1, &tfc_tcam_process, (void 
*)&wc_frp);
-                       /* Dump-decode all TCAM resources for resource-id flows 
*/
-                       fputs("\nRID flows TCAM:\n", fd);
-                       fputs("===============\n", fd);
-                       tfc_flow_db_resource_walk(ulp_ctx, 
BNXT_ULP_FDB_TYPE_RID, dir,
-                                                 
BNXT_ULP_RESOURCE_FUNC_TCAM_TABLE,
-                                                 -1, &tfc_tcam_process, (void 
*)&wc_frp);
-                       /* Dump-decode all TCAM resources for regular flows */
-                       fputs("\nRegular flows TCAM:\n", fd);
-                       fputs("===================\n", fd);
-                       tfc_flow_db_resource_walk(ulp_ctx, 
BNXT_ULP_FDB_TYPE_REGULAR, dir,
-                                                 
BNXT_ULP_RESOURCE_FUNC_TCAM_TABLE,
-                                                 -1, &tfc_tcam_process, (void 
*)&wc_frp);
-               }
-       }
-
-       rte_free(act_mem_cfg);
-       return rc;
-}
-- 
2.31.1

Reply via email to