From: Satheesh Paul <psathe...@marvell.com>

Add support to dump hardware internal representation information of
rte flow to file.

Every flow rule added will be dumped in the below format.

MCAM Index:1881
Interface :NIX-RX (0)
Priority  :1
NPC RX Action:0X00000000404001
        ActionOp:NIX_RX_ACTIONOP_UCAST (1)
        PF_FUNC: 0X400
        RQ Index:0X004
        Match Id:0000
        Flow Key Alg:0
NPC RX VTAG Action:0X00000000008100
        VTAG0:relptr:0
        lid:0X1
        type:0
Patterns:
        NPC_PARSE_NIBBLE_CHAN:000
        NPC_PARSE_NIBBLE_LA_LTYPE:LA_ETHER
        NPC_PARSE_NIBBLE_LB_LTYPE:NONE
        NPC_PARSE_NIBBLE_LC_LTYPE:LC_IP
        NPC_PARSE_NIBBLE_LD_LTYPE:LD_TCP
        NPC_PARSE_NIBBLE_LE_LTYPE:NONE
        LA_ETHER, hdr offset:0, len:0X6, key offset:0X8,\
                Data:0X4AE124FC7FFF, Mask:0XFFFFFFFFFFFF
        LA_ETHER, hdr offset:0XC, len:0X2, key offset:0X4, Data:0XCA5A,\
                Mask:0XFFFF
        LC_IP, hdr offset:0XC, len:0X8, key offset:0X10,\
                Data:0X0A01010300000000, Mask:0XFFFFFFFF00000000
        LD_TCP, hdr offset:0, len:0X4, key offset:0X18, Data:0X03450000,\
                Mask:0XFFFF0000
MCAM Raw Data :
        DW0     :0000CA5A01202000
        DW0_Mask:0000FFFF0FF0F000
        DW1     :00004AE124FC7FFF
        DW1_Mask:0000FFFFFFFFFFFF
        DW2     :0A01010300000000
        DW2_Mask:FFFFFFFF00000000
        DW3     :0000000003450000
        DW3_Mask:00000000FFFF0000
        DW4     :0000000000000000
        DW4_Mask:0000000000000000
        DW5     :0000000000000000
        DW5_Mask:0000000000000000
        DW6     :0000000000000000
        DW6_Mask:0000000000000000

ci: skip_checkpatch skip_checkformat

Signed-off-by: Satheesh Paul <psathe...@marvell.com>
---
 drivers/net/cnxk/cnxk_rte_flow.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/net/cnxk/cnxk_rte_flow.c b/drivers/net/cnxk/cnxk_rte_flow.c
index 8486e9e..453425e 100644
--- a/drivers/net/cnxk/cnxk_rte_flow.c
+++ b/drivers/net/cnxk/cnxk_rte_flow.c
@@ -328,6 +328,33 @@ cnxk_flow_isolate(struct rte_eth_dev *dev __rte_unused, 
int enable __rte_unused,
        return -rte_errno;
 }
 
+static int
+cnxk_flow_dev_dump(struct rte_eth_dev *dev, struct rte_flow *flow,
+                  FILE *file, struct rte_flow_error *error)
+{
+       struct cnxk_eth_dev *hw = dev->data->dev_private;
+       struct roc_npc *npc = &hw->npc;
+
+       if (file == NULL) {
+               rte_flow_error_set(error, EINVAL,
+                                  RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
+                                  "Invalid file");
+               return -rte_errno;
+       }
+
+       if (flow != NULL) {
+               rte_flow_error_set(error, EINVAL,
+                                  RTE_FLOW_ERROR_TYPE_HANDLE,
+                                  NULL,
+                                  "Invalid argument");
+               return -EINVAL;
+       }
+
+       roc_npc_flow_dump(file, npc);
+
+       return 0;
+}
+
 const struct rte_flow_ops cnxk_flow_ops = {
        .validate = cnxk_flow_validate,
        .create = cnxk_flow_create,
@@ -335,4 +362,5 @@ const struct rte_flow_ops cnxk_flow_ops = {
        .flush = cnxk_flow_flush,
        .query = cnxk_flow_query,
        .isolate = cnxk_flow_isolate,
+       .dev_dump = cnxk_flow_dev_dump,
 };
-- 
2.8.4

Reply via email to