get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/80137/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 80137,
    "url": "http://patchwork.dpdk.org/api/patches/80137/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20201009111130.10422-7-somnath.kotur@broadcom.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20201009111130.10422-7-somnath.kotur@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20201009111130.10422-7-somnath.kotur@broadcom.com",
    "date": "2020-10-09T11:11:23",
    "name": "[06/13] net/bnxt: combine default and regular flows in flow database",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "c6beda1a2664c38152543f23173e9fe2fb1c0de6",
    "submitter": {
        "id": 908,
        "url": "http://patchwork.dpdk.org/api/people/908/?format=api",
        "name": "Somnath Kotur",
        "email": "somnath.kotur@broadcom.com"
    },
    "delegate": {
        "id": 1766,
        "url": "http://patchwork.dpdk.org/api/users/1766/?format=api",
        "username": "ajitkhaparde",
        "first_name": "Ajit",
        "last_name": "Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20201009111130.10422-7-somnath.kotur@broadcom.com/mbox/",
    "series": [
        {
            "id": 12818,
            "url": "http://patchwork.dpdk.org/api/series/12818/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=12818",
            "date": "2020-10-09T11:11:17",
            "name": "bnxt patches",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/12818/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/80137/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/80137/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 90D96A04BC;\n\tFri,  9 Oct 2020 13:20:58 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 5E3F31D50C;\n\tFri,  9 Oct 2020 13:19:02 +0200 (CEST)",
            "from relay.smtp-ext.broadcom.com (saphodev.broadcom.com\n [192.19.232.172]) by dpdk.org (Postfix) with ESMTP id 4001D1D452\n for <dev@dpdk.org>; Fri,  9 Oct 2020 13:18:58 +0200 (CEST)",
            "from dhcp-10-123-153-55.dhcp.broadcom.net\n (bgccx-dev-host-lnx35.bec.broadcom.net [10.123.153.55])\n (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))\n (No client certificate requested)\n by relay.smtp-ext.broadcom.com (Postfix) with ESMTPS id 6872F829A;\n Fri,  9 Oct 2020 04:18:56 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 relay.smtp-ext.broadcom.com 6872F829A",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1602242337;\n bh=46oesAKnmasub6tq+v6mcbUVWuISrIQDvnrcH0Qk060=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=uhDRCg7xnsBhloLnBUhgiMc+feHUveYIBeAVneiYE89oBE4pzElkb2k0yzS7x+sAi\n 4fu/QjoUmM4T0KU2Ts0GPhtI16BOMMQQkgllYFttt01Wv86LMq3PNnf1dCZyKEG4Z0\n xtdr/rowkDR2EJEwPHoFXlmhHIOQ6rJyRi9xzfeM=",
        "From": "Somnath Kotur <somnath.kotur@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com,\n Kishore Padmanabha <kishore.padmanabha@broadcom.com>,\n Michael Baucom <michael.baucom@broadcom.com>,\n Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>",
        "Date": "Fri,  9 Oct 2020 16:41:23 +0530",
        "Message-Id": "<20201009111130.10422-7-somnath.kotur@broadcom.com>",
        "X-Mailer": "git-send-email 2.28.0.450.g3a238e5",
        "In-Reply-To": "<20201009111130.10422-1-somnath.kotur@broadcom.com>",
        "References": "<20201009111130.10422-1-somnath.kotur@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH 06/13] net/bnxt: combine default and regular\n\tflows in flow database",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Kishore Padmanabha <kishore.padmanabha@broadcom.com>\n\nThe default and regular flows are stored in the same flow table\ninstead of different flow tables.\n\nSigned-off-by: Kishore Padmanabha <kishore.padmanabha@broadcom.com>\nReviewed-by: Michael Baucom <michael.baucom@broadcom.com>\nReviewed-by: Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/tf_ulp/bnxt_ulp.c      |   2 +-\n drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c |   4 +-\n drivers/net/bnxt/tf_ulp/ulp_def_rules.c |   4 +-\n drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c    |   2 +-\n drivers/net/bnxt/tf_ulp/ulp_flow_db.c   | 423 +++++++++++++++-----------------\n drivers/net/bnxt/tf_ulp/ulp_flow_db.h   |  75 +++---\n drivers/net/bnxt/tf_ulp/ulp_mapper.c    |  33 +--\n drivers/net/bnxt/tf_ulp/ulp_mapper.h    |  11 +-\n 8 files changed, 259 insertions(+), 295 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\nindex eeda2d0..9ed92a8 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\n@@ -853,7 +853,7 @@ bnxt_ulp_deinit(struct bnxt *bp,\n \tbnxt_ulp_destroy_vfr_default_rules(bp, true);\n \n \t/* clean up regular flows */\n-\tulp_flow_db_flush_flows(bp->ulp_ctx, BNXT_ULP_REGULAR_FLOW_TABLE);\n+\tulp_flow_db_flush_flows(bp->ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR);\n \n \t/* cleanup the eem table scope */\n \tulp_eem_tbl_scope_deinit(bp, bp->ulp_ctx);\ndiff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c\nindex eea39f6..c7b2982 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c\n@@ -281,8 +281,8 @@ bnxt_ulp_flow_destroy(struct rte_eth_dev *dev,\n \t\treturn -EINVAL;\n \t}\n \n-\tret = ulp_mapper_flow_destroy(ulp_ctx, flow_id,\n-\t\t\t\t      BNXT_ULP_REGULAR_FLOW_TABLE);\n+\tret = ulp_mapper_flow_destroy(ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR,\n+\t\t\t\t      flow_id);\n \tif (ret) {\n \t\tBNXT_TF_DBG(ERR, \"Failed to destroy flow.\\n\");\n \t\tif (error)\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c\nindex 01f4fd0..c36d4d4 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c\n@@ -391,8 +391,8 @@ ulp_default_flow_destroy(struct rte_eth_dev *eth_dev, uint32_t flow_id)\n \t\treturn rc;\n \t}\n \n-\trc = ulp_mapper_flow_destroy(ulp_ctx, flow_id,\n-\t\t\t\t     BNXT_ULP_DEFAULT_FLOW_TABLE);\n+\trc = ulp_mapper_flow_destroy(ulp_ctx, BNXT_ULP_FDB_TYPE_DEFAULT,\n+\t\t\t\t     flow_id);\n \tif (rc)\n \t\tBNXT_TF_DBG(ERR, \"Failed to destroy flow.\\n\");\n \ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c\nindex 5a0bf60..051ebac 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c\n@@ -561,7 +561,7 @@ int ulp_fc_mgr_query_count_get(struct bnxt_ulp_context *ctxt,\n \n \tdo {\n \t\trc = ulp_flow_db_resource_get(ctxt,\n-\t\t\t\t\t      BNXT_ULP_REGULAR_FLOW_TABLE,\n+\t\t\t\t\t      BNXT_ULP_FDB_TYPE_REGULAR,\n \t\t\t\t\t      flow_id,\n \t\t\t\t\t      &nxt_resource_index,\n \t\t\t\t\t      &params);\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_flow_db.c b/drivers/net/bnxt/tf_ulp/ulp_flow_db.c\nindex 9a2d375..0a3fb01 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_flow_db.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_flow_db.c\n@@ -27,49 +27,66 @@\n #define ULP_FLOW_DB_RES_NXT_RESET(dst)\t((dst) &= ~(ULP_FLOW_DB_RES_NXT_MASK))\n \n /*\n- * Helper function to set the bit in the active flow table\n+ * Helper function to set the bit in the active flows\n  * No validation is done in this function.\n  *\n- * flow_tbl [in] Ptr to flow table\n+ * flow_db [in] Ptr to flow database\n+ * flow_type [in] - specify default or regular\n  * idx [in] The index to bit to be set or reset.\n  * flag [in] 1 to set and 0 to reset.\n  *\n  * returns none\n  */\n static void\n-ulp_flow_db_active_flow_set(struct bnxt_ulp_flow_tbl\t*flow_tbl,\n-\t\t\t    uint32_t\t\t\tidx,\n-\t\t\t    uint32_t\t\t\tflag)\n+ulp_flow_db_active_flows_bit_set(struct bnxt_ulp_flow_db *flow_db,\n+\t\t\t\t enum bnxt_ulp_fdb_type flow_type,\n+\t\t\t\t uint32_t idx,\n+\t\t\t\t uint32_t flag)\n {\n-\tuint32_t\t\tactive_index;\n-\n-\tactive_index = idx / ULP_INDEX_BITMAP_SIZE;\n-\tif (flag)\n-\t\tULP_INDEX_BITMAP_SET(flow_tbl->active_flow_tbl[active_index],\n-\t\t\t\t     idx);\n-\telse\n-\t\tULP_INDEX_BITMAP_RESET(flow_tbl->active_flow_tbl[active_index],\n-\t\t\t\t       idx);\n+\tstruct bnxt_ulp_flow_tbl *f_tbl = &flow_db->flow_tbl;\n+\tuint32_t a_idx = idx / ULP_INDEX_BITMAP_SIZE;\n+\n+\tif (flag) {\n+\t\tif (flow_type == BNXT_ULP_FDB_TYPE_REGULAR)\n+\t\t\tULP_INDEX_BITMAP_SET(f_tbl->active_reg_flows[a_idx],\n+\t\t\t\t\t     idx);\n+\t\telse\n+\t\t\tULP_INDEX_BITMAP_SET(f_tbl->active_dflt_flows[a_idx],\n+\t\t\t\t\t     idx);\n+\t} else {\n+\t\tif (flow_type == BNXT_ULP_FDB_TYPE_REGULAR)\n+\t\t\tULP_INDEX_BITMAP_RESET(f_tbl->active_reg_flows[a_idx],\n+\t\t\t\t\t     idx);\n+\t\telse\n+\t\t\tULP_INDEX_BITMAP_RESET(f_tbl->active_dflt_flows[a_idx],\n+\t\t\t\t\t     idx);\n+\t}\n }\n \n /*\n- * Helper function to allocate the flow table and initialize\n- * is set.No validation being done in this function.\n+ * Helper function to check if given fid is active flow.\n+ * No validation being done in this function.\n  *\n- * flow_tbl [in] Ptr to flow table\n+ * flow_db [in] Ptr to flow database\n+ * flow_type [in] - specify default or regular\n  * idx [in] The index to bit to be set or reset.\n  *\n  * returns 1 on set or 0 if not set.\n  */\n static int32_t\n-ulp_flow_db_active_flow_is_set(struct bnxt_ulp_flow_tbl\t*flow_tbl,\n-\t\t\t       uint32_t\t\t\tidx)\n+ulp_flow_db_active_flows_bit_is_set(struct bnxt_ulp_flow_db *flow_db,\n+\t\t\t\t    enum bnxt_ulp_fdb_type flow_type,\n+\t\t\t\t    uint32_t idx)\n {\n-\tuint32_t\t\tactive_index;\n+\tstruct bnxt_ulp_flow_tbl *f_tbl = &flow_db->flow_tbl;\n+\tuint32_t a_idx = idx / ULP_INDEX_BITMAP_SIZE;\n \n-\tactive_index = idx / ULP_INDEX_BITMAP_SIZE;\n-\treturn ULP_INDEX_BITMAP_GET(flow_tbl->active_flow_tbl[active_index],\n-\t\t\t\t    idx);\n+\tif (flow_type == BNXT_ULP_FDB_TYPE_REGULAR)\n+\t\treturn ULP_INDEX_BITMAP_GET(f_tbl->active_reg_flows[a_idx],\n+\t\t\t\t\t    idx);\n+\telse\n+\t\treturn ULP_INDEX_BITMAP_GET(f_tbl->active_dflt_flows[a_idx],\n+\t\t\t\t\t    idx);\n }\n \n static uint8_t\n@@ -163,19 +180,17 @@ ulp_flow_db_res_info_to_params(struct ulp_fdb_resource_info *resource_info,\n  * the stack for allocation operations.\n  *\n  * flow_db [in] Ptr to flow database structure\n- * tbl_idx [in] The index to table creation.\n  *\n  * Returns 0 on success or negative number on failure.\n  */\n static int32_t\n-ulp_flow_db_alloc_resource(struct bnxt_ulp_flow_db *flow_db,\n-\t\t\t   enum bnxt_ulp_flow_db_tables tbl_idx)\n+ulp_flow_db_alloc_resource(struct bnxt_ulp_flow_db *flow_db)\n {\n \tuint32_t\t\t\tidx = 0;\n \tstruct bnxt_ulp_flow_tbl\t*flow_tbl;\n \tuint32_t\t\t\tsize;\n \n-\tflow_tbl = &flow_db->flow_tbl[tbl_idx];\n+\tflow_tbl = &flow_db->flow_tbl;\n \n \tsize = sizeof(struct ulp_fdb_resource_info) * flow_tbl->num_resources;\n \tflow_tbl->flow_resources =\n@@ -192,9 +207,15 @@ ulp_flow_db_alloc_resource(struct bnxt_ulp_flow_db *flow_db,\n \t\treturn -ENOMEM;\n \t}\n \tsize = (flow_tbl->num_flows / sizeof(uint64_t)) + 1;\n-\tflow_tbl->active_flow_tbl = rte_zmalloc(\"active flow tbl\", size, 0);\n-\tif (!flow_tbl->active_flow_tbl) {\n-\t\tBNXT_TF_DBG(ERR, \"Failed to alloc memory active tbl\\n\");\n+\tflow_tbl->active_reg_flows = rte_zmalloc(\"active reg flows\", size, 0);\n+\tif (!flow_tbl->active_reg_flows) {\n+\t\tBNXT_TF_DBG(ERR, \"Failed to alloc memory active reg flows\\n\");\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tflow_tbl->active_dflt_flows = rte_zmalloc(\"active dflt flows\", size, 0);\n+\tif (!flow_tbl->active_dflt_flows) {\n+\t\tBNXT_TF_DBG(ERR, \"Failed to alloc memory active dflt flows\\n\");\n \t\treturn -ENOMEM;\n \t}\n \n@@ -213,22 +234,22 @@ ulp_flow_db_alloc_resource(struct bnxt_ulp_flow_db *flow_db,\n  * Helper function to deallocate the flow table.\n  *\n  * flow_db [in] Ptr to flow database structure\n- * tbl_idx [in] The index to table creation.\n  *\n  * Returns none.\n  */\n static void\n-ulp_flow_db_dealloc_resource(struct bnxt_ulp_flow_db *flow_db,\n-\t\t\t     enum bnxt_ulp_flow_db_tables tbl_idx)\n+ulp_flow_db_dealloc_resource(struct bnxt_ulp_flow_db *flow_db)\n {\n-\tstruct bnxt_ulp_flow_tbl\t*flow_tbl;\n-\n-\tflow_tbl = &flow_db->flow_tbl[tbl_idx];\n+\tstruct bnxt_ulp_flow_tbl *flow_tbl = &flow_db->flow_tbl;\n \n \t/* Free all the allocated tables in the flow table. */\n-\tif (flow_tbl->active_flow_tbl) {\n-\t\trte_free(flow_tbl->active_flow_tbl);\n-\t\tflow_tbl->active_flow_tbl = NULL;\n+\tif (flow_tbl->active_reg_flows) {\n+\t\trte_free(flow_tbl->active_reg_flows);\n+\t\tflow_tbl->active_reg_flows = NULL;\n+\t}\n+\tif (flow_tbl->active_dflt_flows) {\n+\t\trte_free(flow_tbl->active_dflt_flows);\n+\t\tflow_tbl->active_dflt_flows = NULL;\n \t}\n \n \tif (flow_tbl->flow_tbl_stack) {\n@@ -271,12 +292,13 @@ ulp_flow_db_func_id_set(struct bnxt_ulp_flow_db *flow_db,\n  *\n  * Returns 0 on success or negative number on failure.\n  */\n-int32_t\tulp_flow_db_init(struct bnxt_ulp_context *ulp_ctxt)\n+int32_t\n+ulp_flow_db_init(struct bnxt_ulp_context *ulp_ctxt)\n {\n-\tstruct bnxt_ulp_device_params\t\t*dparms;\n-\tstruct bnxt_ulp_flow_tbl\t\t*flow_tbl;\n-\tstruct bnxt_ulp_flow_db\t\t\t*flow_db;\n-\tuint32_t\t\t\t\tdev_id;\n+\tstruct bnxt_ulp_device_params *dparms;\n+\tstruct bnxt_ulp_flow_tbl *flow_tbl;\n+\tstruct bnxt_ulp_flow_db *flow_db;\n+\tuint32_t dev_id;\n \n \t/* Get the dev specific number of flows that needed to be supported. */\n \tif (bnxt_ulp_cntxt_dev_id_get(ulp_ctxt, &dev_id)) {\n@@ -302,25 +324,22 @@ int32_t\tulp_flow_db_init(struct bnxt_ulp_context *ulp_ctxt)\n \tbnxt_ulp_cntxt_ptr2_flow_db_set(ulp_ctxt, flow_db);\n \n \t/* Populate the regular flow table limits. */\n-\tflow_tbl = &flow_db->flow_tbl[BNXT_ULP_REGULAR_FLOW_TABLE];\n+\tflow_tbl = &flow_db->flow_tbl;\n \tflow_tbl->num_flows = dparms->flow_db_num_entries + 1;\n-\tflow_tbl->num_resources = (flow_tbl->num_flows *\n+\tflow_tbl->num_resources = ((dparms->flow_db_num_entries + 1) *\n \t\t\t\t   dparms->num_resources_per_flow);\n \n-\t/* Populate the default flow table limits. */\n-\tflow_tbl = &flow_db->flow_tbl[BNXT_ULP_DEFAULT_FLOW_TABLE];\n-\tflow_tbl->num_flows = BNXT_FLOW_DB_DEFAULT_NUM_FLOWS + 1;\n-\tflow_tbl->num_resources = (flow_tbl->num_flows *\n-\t\t\t\t   BNXT_FLOW_DB_DEFAULT_NUM_RESOURCES);\n+\t/* Include the default flow table limits. */\n+\tflow_tbl->num_flows += (BNXT_FLOW_DB_DEFAULT_NUM_FLOWS + 1);\n+\tflow_tbl->num_resources += ((BNXT_FLOW_DB_DEFAULT_NUM_FLOWS + 1) *\n+\t\t\t\t    BNXT_FLOW_DB_DEFAULT_NUM_RESOURCES);\n \n-\t/* Allocate the resource for the regular flow table. */\n-\tif (ulp_flow_db_alloc_resource(flow_db, BNXT_ULP_REGULAR_FLOW_TABLE))\n-\t\tgoto error_free;\n-\tif (ulp_flow_db_alloc_resource(flow_db, BNXT_ULP_DEFAULT_FLOW_TABLE))\n+\t/* Allocate the resource for the flow table. */\n+\tif (ulp_flow_db_alloc_resource(flow_db))\n \t\tgoto error_free;\n \n \t/* add 1 since we are not using index 0 for flow id */\n-\tflow_db->func_id_tbl_size = dparms->flow_db_num_entries + 1;\n+\tflow_db->func_id_tbl_size = flow_tbl->num_flows + 1;\n \t/* Allocate the function Id table */\n \tflow_db->func_id_tbl = rte_zmalloc(\"bnxt_ulp_flow_db_func_id_table\",\n \t\t\t\t\t   flow_db->func_id_tbl_size *\n@@ -346,9 +365,10 @@ int32_t\tulp_flow_db_init(struct bnxt_ulp_context *ulp_ctxt)\n  *\n  * Returns 0 on success.\n  */\n-int32_t\tulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt)\n+int32_t\n+ulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt)\n {\n-\tstruct bnxt_ulp_flow_db\t\t\t*flow_db;\n+\tstruct bnxt_ulp_flow_db *flow_db;\n \n \tflow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt);\n \tif (!flow_db)\n@@ -358,8 +378,7 @@ int32_t\tulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt)\n \tbnxt_ulp_cntxt_ptr2_flow_db_set(ulp_ctxt, NULL);\n \n \t/* Free up all the memory. */\n-\tulp_flow_db_dealloc_resource(flow_db, BNXT_ULP_REGULAR_FLOW_TABLE);\n-\tulp_flow_db_dealloc_resource(flow_db, BNXT_ULP_DEFAULT_FLOW_TABLE);\n+\tulp_flow_db_dealloc_resource(flow_db);\n \trte_free(flow_db->func_id_tbl);\n \trte_free(flow_db);\n \n@@ -370,15 +389,17 @@ int32_t\tulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt)\n  * Allocate the flow database entry\n  *\n  * ulp_ctxt [in] Ptr to ulp_context\n- * tbl_idx [in] Specify it is regular or default flow\n+ * flow_type [in] - specify default or regular\n+ * func_id [in].function id of the ingress port\n  * fid [out] The index to the flow entry\n  *\n  * returns 0 on success and negative on failure.\n  */\n-int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt,\n-\t\t\t      enum bnxt_ulp_flow_db_tables tbl_idx,\n-\t\t\t      uint16_t func_id,\n-\t\t\t      uint32_t *fid)\n+int32_t\n+ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt,\n+\t\t      enum bnxt_ulp_fdb_type flow_type,\n+\t\t      uint16_t func_id,\n+\t\t      uint32_t *fid)\n {\n \tstruct bnxt_ulp_flow_db *flow_db;\n \tstruct bnxt_ulp_flow_tbl *flow_tbl;\n@@ -390,7 +411,12 @@ int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt,\n \t\treturn -EINVAL;\n \t}\n \n-\tflow_tbl = &flow_db->flow_tbl[tbl_idx];\n+\tif (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) {\n+\t\tBNXT_TF_DBG(ERR, \"Invalid flow type\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tflow_tbl = &flow_db->flow_tbl;\n \t/* check for max flows */\n \tif (flow_tbl->num_flows <= flow_tbl->head_index) {\n \t\tBNXT_TF_DBG(ERR, \"Flow database has reached max flows\\n\");\n@@ -402,13 +428,15 @@ int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt,\n \t}\n \t*fid = flow_tbl->flow_tbl_stack[flow_tbl->head_index];\n \tflow_tbl->head_index++;\n-\tulp_flow_db_active_flow_set(flow_tbl, *fid, 1);\n \n-\t/* The function id update is only valid for regular flow table */\n-\tif (tbl_idx == BNXT_ULP_REGULAR_FLOW_TABLE)\n+\t/* Set the flow type */\n+\tulp_flow_db_active_flows_bit_set(flow_db, flow_type, *fid, 1);\n+\n+\t/* function id update is only valid for regular flow table */\n+\tif (flow_type == BNXT_ULP_FDB_TYPE_REGULAR)\n \t\tulp_flow_db_func_id_set(flow_db, *fid, func_id);\n \n-\t/* all good, return success */\n+\t/* return success */\n \treturn 0;\n }\n \n@@ -417,21 +445,22 @@ int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt,\n  * The params->critical_resource has to be set to 0 to allocate a new resource.\n  *\n  * ulp_ctxt [in] Ptr to ulp_context\n- * tbl_idx [in] Specify it is regular or default flow\n+ * flow_type [in] Specify it is regular or default flow\n  * fid [in] The index to the flow entry\n  * params [in] The contents to be copied into resource\n  *\n  * returns 0 on success and negative on failure.\n  */\n-int32_t\tulp_flow_db_resource_add(struct bnxt_ulp_context\t*ulp_ctxt,\n-\t\t\t\t enum bnxt_ulp_flow_db_tables\ttbl_idx,\n-\t\t\t\t uint32_t\t\t\tfid,\n-\t\t\t\t struct ulp_flow_db_res_params\t*params)\n+int32_t\n+ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt,\n+\t\t\t enum bnxt_ulp_fdb_type flow_type,\n+\t\t\t uint32_t fid,\n+\t\t\t struct ulp_flow_db_res_params *params)\n {\n-\tstruct bnxt_ulp_flow_db\t\t*flow_db;\n-\tstruct bnxt_ulp_flow_tbl\t*flow_tbl;\n-\tstruct ulp_fdb_resource_info\t*resource, *fid_resource;\n-\tuint32_t\t\t\tidx;\n+\tstruct bnxt_ulp_flow_db *flow_db;\n+\tstruct bnxt_ulp_flow_tbl *flow_tbl;\n+\tstruct ulp_fdb_resource_info *resource, *fid_resource;\n+\tuint32_t idx;\n \n \tflow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt);\n \tif (!flow_db) {\n@@ -439,12 +468,12 @@ int32_t\tulp_flow_db_resource_add(struct bnxt_ulp_context\t*ulp_ctxt,\n \t\treturn -EINVAL;\n \t}\n \n-\tif (tbl_idx >= BNXT_ULP_FLOW_TABLE_MAX) {\n-\t\tBNXT_TF_DBG(ERR, \"Invalid table index\\n\");\n+\tif (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) {\n+\t\tBNXT_TF_DBG(ERR, \"Invalid flow type\\n\");\n \t\treturn -EINVAL;\n \t}\n-\tflow_tbl = &flow_db->flow_tbl[tbl_idx];\n \n+\tflow_tbl = &flow_db->flow_tbl;\n \t/* check for max flows */\n \tif (fid >= flow_tbl->num_flows || !fid) {\n \t\tBNXT_TF_DBG(ERR, \"Invalid flow index\\n\");\n@@ -452,7 +481,7 @@ int32_t\tulp_flow_db_resource_add(struct bnxt_ulp_context\t*ulp_ctxt,\n \t}\n \n \t/* check if the flow is active or not */\n-\tif (!ulp_flow_db_active_flow_is_set(flow_tbl, fid)) {\n+\tif (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type, fid)) {\n \t\tBNXT_TF_DBG(ERR, \"flow does not exist\\n\");\n \t\treturn -EINVAL;\n \t}\n@@ -507,22 +536,23 @@ int32_t\tulp_flow_db_resource_add(struct bnxt_ulp_context\t*ulp_ctxt,\n  * The params->critical_resource has to be set to 1 to free the first resource.\n  *\n  * ulp_ctxt [in] Ptr to ulp_context\n- * tbl_idx [in] Specify it is regular or default flow\n+ * flow_type [in] Specify it is regular or default flow\n  * fid [in] The index to the flow entry\n  * params [in/out] The contents to be copied into params.\n  * Onlythe critical_resource needs to be set by the caller.\n  *\n  * Returns 0 on success and negative on failure.\n  */\n-int32_t\tulp_flow_db_resource_del(struct bnxt_ulp_context\t*ulp_ctxt,\n-\t\t\t\t enum bnxt_ulp_flow_db_tables\ttbl_idx,\n-\t\t\t\t uint32_t\t\t\tfid,\n-\t\t\t\t struct ulp_flow_db_res_params\t*params)\n+int32_t\n+ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt,\n+\t\t\t enum bnxt_ulp_fdb_type flow_type,\n+\t\t\t uint32_t fid,\n+\t\t\t struct ulp_flow_db_res_params *params)\n {\n-\tstruct bnxt_ulp_flow_db\t\t*flow_db;\n-\tstruct bnxt_ulp_flow_tbl\t*flow_tbl;\n-\tstruct ulp_fdb_resource_info\t*nxt_resource, *fid_resource;\n-\tuint32_t\t\t\tnxt_idx = 0;\n+\tstruct bnxt_ulp_flow_db *flow_db;\n+\tstruct bnxt_ulp_flow_tbl *flow_tbl;\n+\tstruct ulp_fdb_resource_info *nxt_resource, *fid_resource;\n+\tuint32_t nxt_idx = 0;\n \n \tflow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt);\n \tif (!flow_db) {\n@@ -530,12 +560,12 @@ int32_t\tulp_flow_db_resource_del(struct bnxt_ulp_context\t*ulp_ctxt,\n \t\treturn -EINVAL;\n \t}\n \n-\tif (tbl_idx >= BNXT_ULP_FLOW_TABLE_MAX) {\n-\t\tBNXT_TF_DBG(ERR, \"Invalid table index\\n\");\n+\tif (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) {\n+\t\tBNXT_TF_DBG(ERR, \"Invalid flow type\\n\");\n \t\treturn -EINVAL;\n \t}\n-\tflow_tbl = &flow_db->flow_tbl[tbl_idx];\n \n+\tflow_tbl = &flow_db->flow_tbl;\n \t/* check for max flows */\n \tif (fid >= flow_tbl->num_flows || !fid) {\n \t\tBNXT_TF_DBG(ERR, \"Invalid flow index\\n\");\n@@ -543,7 +573,7 @@ int32_t\tulp_flow_db_resource_del(struct bnxt_ulp_context\t*ulp_ctxt,\n \t}\n \n \t/* check if the flow is active or not */\n-\tif (!ulp_flow_db_active_flow_is_set(flow_tbl, fid)) {\n+\tif (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type, fid)) {\n \t\tBNXT_TF_DBG(ERR, \"flow does not exist\\n\");\n \t\treturn -EINVAL;\n \t}\n@@ -607,17 +637,18 @@ int32_t\tulp_flow_db_resource_del(struct bnxt_ulp_context\t*ulp_ctxt,\n  * Free the flow database entry\n  *\n  * ulp_ctxt [in] Ptr to ulp_context\n- * tbl_idx [in] Specify it is regular or default flow\n+ * flow_type [in] - specify default or regular\n  * fid [in] The index to the flow entry\n  *\n  * returns 0 on success and negative on failure.\n  */\n-int32_t\tulp_flow_db_fid_free(struct bnxt_ulp_context\t\t*ulp_ctxt,\n-\t\t\t     enum bnxt_ulp_flow_db_tables\ttbl_idx,\n-\t\t\t     uint32_t\t\t\t\tfid)\n+int32_t\n+ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt,\n+\t\t     enum bnxt_ulp_fdb_type flow_type,\n+\t\t     uint32_t fid)\n {\n-\tstruct bnxt_ulp_flow_db\t\t*flow_db;\n-\tstruct bnxt_ulp_flow_tbl\t*flow_tbl;\n+\tstruct bnxt_ulp_flow_db *flow_db;\n+\tstruct bnxt_ulp_flow_tbl *flow_tbl;\n \n \tflow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt);\n \tif (!flow_db) {\n@@ -625,12 +656,12 @@ int32_t\tulp_flow_db_fid_free(struct bnxt_ulp_context\t\t*ulp_ctxt,\n \t\treturn -EINVAL;\n \t}\n \n-\tif (tbl_idx >= BNXT_ULP_FLOW_TABLE_MAX) {\n-\t\tBNXT_TF_DBG(ERR, \"Invalid table index\\n\");\n+\tif (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) {\n+\t\tBNXT_TF_DBG(ERR, \"Invalid flow type\\n\");\n \t\treturn -EINVAL;\n \t}\n \n-\tflow_tbl = &flow_db->flow_tbl[tbl_idx];\n+\tflow_tbl = &flow_db->flow_tbl;\n \n \t/* check for limits of fid */\n \tif (fid >= flow_tbl->num_flows || !fid) {\n@@ -639,7 +670,7 @@ int32_t\tulp_flow_db_fid_free(struct bnxt_ulp_context\t\t*ulp_ctxt,\n \t}\n \n \t/* check if the flow is active or not */\n-\tif (!ulp_flow_db_active_flow_is_set(flow_tbl, fid)) {\n+\tif (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type, fid)) {\n \t\tBNXT_TF_DBG(ERR, \"flow does not exist\\n\");\n \t\treturn -EINVAL;\n \t}\n@@ -649,8 +680,11 @@ int32_t\tulp_flow_db_fid_free(struct bnxt_ulp_context\t\t*ulp_ctxt,\n \t\treturn -ENOENT;\n \t}\n \tflow_tbl->flow_tbl_stack[flow_tbl->head_index] = fid;\n-\tulp_flow_db_active_flow_set(flow_tbl, fid, 0);\n-\tif (tbl_idx == BNXT_ULP_REGULAR_FLOW_TABLE)\n+\n+\t/* Clear the flows bitmap */\n+\tulp_flow_db_active_flows_bit_set(flow_db, flow_type, fid, 0);\n+\n+\tif (flow_type == BNXT_ULP_FDB_TYPE_REGULAR)\n \t\tulp_flow_db_func_id_set(flow_db, fid, 0);\n \n \t/* all good, return success */\n@@ -661,22 +695,23 @@ int32_t\tulp_flow_db_fid_free(struct bnxt_ulp_context\t\t*ulp_ctxt,\n  * Get the flow database entry details\n  *\n  * ulp_ctxt [in] Ptr to ulp_context\n- * tbl_idx [in] Specify it is regular or default flow\n+ * flow_type [in] - specify default or regular\n  * fid [in] The index to the flow entry\n  * nxt_idx [in/out] the index to the next entry\n  * params [out] The contents to be copied into params.\n  *\n  * returns 0 on success and negative on failure.\n  */\n-int32_t\tulp_flow_db_resource_get(struct bnxt_ulp_context\t*ulp_ctxt,\n-\t\t\t\t enum bnxt_ulp_flow_db_tables\ttbl_idx,\n-\t\t\t\t uint32_t\t\t\tfid,\n-\t\t\t\t uint32_t\t\t\t*nxt_idx,\n-\t\t\t\t struct ulp_flow_db_res_params\t*params)\n+int32_t\n+ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt,\n+\t\t\t enum bnxt_ulp_fdb_type flow_type,\n+\t\t\t uint32_t fid,\n+\t\t\t uint32_t *nxt_idx,\n+\t\t\t struct ulp_flow_db_res_params *params)\n {\n-\tstruct bnxt_ulp_flow_db\t\t*flow_db;\n-\tstruct bnxt_ulp_flow_tbl\t*flow_tbl;\n-\tstruct ulp_fdb_resource_info\t*nxt_resource, *fid_resource;\n+\tstruct bnxt_ulp_flow_db *flow_db;\n+\tstruct bnxt_ulp_flow_tbl *flow_tbl;\n+\tstruct ulp_fdb_resource_info *nxt_resource, *fid_resource;\n \n \tflow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt);\n \tif (!flow_db) {\n@@ -684,12 +719,12 @@ int32_t\tulp_flow_db_resource_get(struct bnxt_ulp_context\t*ulp_ctxt,\n \t\treturn -EINVAL;\n \t}\n \n-\tif (tbl_idx >= BNXT_ULP_FLOW_TABLE_MAX) {\n-\t\tBNXT_TF_DBG(ERR, \"Invalid table index\\n\");\n+\tif (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) {\n+\t\tBNXT_TF_DBG(ERR, \"Invalid flow type\\n\");\n \t\treturn -EINVAL;\n \t}\n \n-\tflow_tbl = &flow_db->flow_tbl[tbl_idx];\n+\tflow_tbl = &flow_db->flow_tbl;\n \n \t/* check for limits of fid */\n \tif (fid >= flow_tbl->num_flows || !fid) {\n@@ -698,7 +733,7 @@ int32_t\tulp_flow_db_resource_get(struct bnxt_ulp_context\t*ulp_ctxt,\n \t}\n \n \t/* check if the flow is active or not */\n-\tif (!ulp_flow_db_active_flow_is_set(flow_tbl, fid)) {\n+\tif (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type, fid)) {\n \t\tBNXT_TF_DBG(ERR, \"flow does not exist\\n\");\n \t\treturn -EINVAL;\n \t}\n@@ -724,17 +759,26 @@ int32_t\tulp_flow_db_resource_get(struct bnxt_ulp_context\t*ulp_ctxt,\n  * Get the flow database entry iteratively\n  *\n  * flow_tbl [in] Ptr to flow table\n+ * flow_type [in] - specify default or regular\n  * fid [in/out] The index to the flow entry\n  *\n  * returns 0 on success and negative on failure.\n  */\n static int32_t\n-ulp_flow_db_next_entry_get(struct bnxt_ulp_flow_tbl\t*flowtbl,\n-\t\t\t   uint32_t\t\t\t*fid)\n+ulp_flow_db_next_entry_get(struct bnxt_ulp_flow_db *flow_db,\n+\t\t\t   enum bnxt_ulp_fdb_type flow_type,\n+\t\t\t   uint32_t *fid)\n {\n-\tuint32_t\tlfid = *fid;\n-\tuint32_t\tidx, s_idx, mod_fid;\n-\tuint64_t\tbs;\n+\tuint32_t lfid = *fid;\n+\tuint32_t idx, s_idx, mod_fid;\n+\tuint64_t bs;\n+\tuint64_t *active_flows;\n+\tstruct bnxt_ulp_flow_tbl *flowtbl = &flow_db->flow_tbl;\n+\n+\tif (flow_type == BNXT_ULP_FDB_TYPE_REGULAR)\n+\t\tactive_flows = flowtbl->active_reg_flows;\n+\telse\n+\t\tactive_flows = flowtbl->active_dflt_flows;\n \n \tdo {\n \t\t/* increment the flow id to find the next valid flow id */\n@@ -744,7 +788,7 @@ ulp_flow_db_next_entry_get(struct bnxt_ulp_flow_tbl\t*flowtbl,\n \t\tidx = lfid / ULP_INDEX_BITMAP_SIZE;\n \t\tmod_fid = lfid % ULP_INDEX_BITMAP_SIZE;\n \t\ts_idx = idx;\n-\t\twhile (!(bs = flowtbl->active_flow_tbl[idx])) {\n+\t\twhile (!(bs = active_flows[idx])) {\n \t\t\tidx++;\n \t\t\tif ((idx * ULP_INDEX_BITMAP_SIZE) >= flowtbl->num_flows)\n \t\t\t\treturn -ENOENT;\n@@ -761,7 +805,8 @@ ulp_flow_db_next_entry_get(struct bnxt_ulp_flow_tbl\t*flowtbl,\n \t\t\tBNXT_TF_DBG(ERR, \"Flow Database is corrupt\\n\");\n \t\t\treturn -ENOENT;\n \t\t}\n-\t} while (!ulp_flow_db_active_flow_is_set(flowtbl, lfid));\n+\t} while (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type,\n+\t\t\t\t\t\t      lfid));\n \n \t/* all good, return success */\n \t*fid = lfid;\n@@ -772,16 +817,16 @@ ulp_flow_db_next_entry_get(struct bnxt_ulp_flow_tbl\t*flowtbl,\n  * Flush all flows in the flow database.\n  *\n  * ulp_ctxt [in] Ptr to ulp context\n- * tbl_idx [in] The index to table\n+ * flow_type [in] - specify default or regular\n  *\n  * returns 0 on success or negative number on failure\n  */\n-int32_t\tulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx,\n-\t\t\t\tuint32_t\t\tidx)\n+int32_t\n+ulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx,\n+\t\t\tenum bnxt_ulp_fdb_type flow_type)\n {\n-\tuint32_t\t\t\tfid = 0;\n-\tstruct bnxt_ulp_flow_db\t\t*flow_db;\n-\tstruct bnxt_ulp_flow_tbl\t*flow_tbl;\n+\tuint32_t fid = 0;\n+\tstruct bnxt_ulp_flow_db *flow_db;\n \n \tif (!ulp_ctx) {\n \t\tBNXT_TF_DBG(ERR, \"Invalid Argument\\n\");\n@@ -798,9 +843,8 @@ int32_t\tulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx,\n \t\treturn -EINVAL;\n \t}\n \n-\tflow_tbl = &flow_db->flow_tbl[idx];\n-\twhile (!ulp_flow_db_next_entry_get(flow_tbl, &fid))\n-\t\tulp_mapper_resources_free(ulp_ctx, fid, idx);\n+\twhile (!ulp_flow_db_next_entry_get(flow_db, flow_type, &fid))\n+\t\tulp_mapper_resources_free(ulp_ctx, flow_type, fid);\n \n \tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n \n@@ -811,7 +855,7 @@ int32_t\tulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx,\n  * Flush all flows in the flow database that belong to a device function.\n  *\n  * ulp_ctxt [in] Ptr to ulp context\n- * tbl_idx [in] The index to table\n+ * func_id [in] - The port function id\n  *\n  * returns 0 on success or negative number on failure\n  */\n@@ -821,7 +865,6 @@ ulp_flow_db_function_flow_flush(struct bnxt_ulp_context *ulp_ctx,\n {\n \tuint32_t flow_id = 0;\n \tstruct bnxt_ulp_flow_db *flow_db;\n-\tstruct bnxt_ulp_flow_tbl *flow_tbl;\n \n \tif (!ulp_ctx || !func_id) {\n \t\tBNXT_TF_DBG(ERR, \"Invalid Argument\\n\");\n@@ -837,11 +880,13 @@ ulp_flow_db_function_flow_flush(struct bnxt_ulp_context *ulp_ctx,\n \t\tBNXT_TF_DBG(ERR, \"Flow db lock acquire failed\\n\");\n \t\treturn -EINVAL;\n \t}\n-\tflow_tbl = &flow_db->flow_tbl[BNXT_ULP_REGULAR_FLOW_TABLE];\n-\twhile (!ulp_flow_db_next_entry_get(flow_tbl, &flow_id)) {\n+\n+\twhile (!ulp_flow_db_next_entry_get(flow_db, BNXT_ULP_FDB_TYPE_REGULAR,\n+\t\t\t\t\t   &flow_id)) {\n \t\tif (flow_db->func_id_tbl[flow_id] == func_id)\n-\t\t\tulp_mapper_resources_free(ulp_ctx, flow_id,\n-\t\t\t\t\t\t  BNXT_ULP_REGULAR_FLOW_TABLE);\n+\t\t\tulp_mapper_resources_free(ulp_ctx,\n+\t\t\t\t\t\t  BNXT_ULP_FDB_TYPE_REGULAR,\n+\t\t\t\t\t\t  flow_id);\n \t}\n \tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n \treturn 0;\n@@ -861,7 +906,7 @@ ulp_flow_db_session_flow_flush(struct bnxt_ulp_context *ulp_ctx)\n \t * TBD: Tf core implementation of FW session flush shall change this\n \t * implementation.\n \t */\n-\treturn ulp_flow_db_flush_flows(ulp_ctx, BNXT_ULP_REGULAR_FLOW_TABLE);\n+\treturn ulp_flow_db_flush_flows(ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR);\n }\n \n /*\n@@ -904,7 +949,7 @@ ulp_flow_db_validate_flow_func(struct bnxt_ulp_context *ulp_ctx,\n  */\n static int32_t\n ulp_flow_db_resource_hndl_get(struct bnxt_ulp_context *ulp_ctx,\n-\t\t\t      enum bnxt_ulp_flow_db_tables tbl_idx,\n+\t\t\t      enum bnxt_ulp_fdb_type flow_type,\n \t\t\t      uint32_t flow_id,\n \t\t\t      uint32_t resource_func,\n \t\t\t      uint32_t res_subtype,\n@@ -921,7 +966,12 @@ ulp_flow_db_resource_hndl_get(struct bnxt_ulp_context *ulp_ctx,\n \t\treturn -EINVAL;\n \t}\n \n-\tflow_tbl = &flow_db->flow_tbl[tbl_idx];\n+\tif (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) {\n+\t\tBNXT_TF_DBG(ERR, \"Invalid flow type\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tflow_tbl = &flow_db->flow_tbl;\n \n \t/* check for limits of fid */\n \tif (flow_id >= flow_tbl->num_flows || !flow_id) {\n@@ -930,7 +980,7 @@ ulp_flow_db_resource_hndl_get(struct bnxt_ulp_context *ulp_ctx,\n \t}\n \n \t/* check if the flow is active or not */\n-\tif (!ulp_flow_db_active_flow_is_set(flow_tbl, flow_id)) {\n+\tif (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type, flow_id)) {\n \t\tBNXT_TF_DBG(ERR, \"flow does not exist\\n\");\n \t\treturn -EINVAL;\n \t}\n@@ -978,7 +1028,7 @@ ulp_default_flow_db_cfa_action_get(struct bnxt_ulp_context *ulp_ctx,\n \tint32_t rc;\n \n \trc = ulp_flow_db_resource_hndl_get(ulp_ctx,\n-\t\t\t\t\t   BNXT_ULP_DEFAULT_FLOW_TABLE,\n+\t\t\t\t\t   BNXT_ULP_FDB_TYPE_DEFAULT,\n \t\t\t\t\t   flow_id,\n \t\t\t\t\t   BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,\n \t\t\t\t\t   sub_type, &hndl);\n@@ -990,80 +1040,3 @@ ulp_default_flow_db_cfa_action_get(struct bnxt_ulp_context *ulp_ctx,\n \t*cfa_action = hndl;\n \treturn 0;\n }\n-\n-#ifdef RTE_LIBRTE_BNXT_TRUFLOW_DEBUG\n-/*\n- * Dump the entry details\n- *\n- * ulp_ctxt [in] Ptr to ulp_context\n- *\n- * returns none\n- */\n-static void ulp_flow_db_res_dump(struct ulp_fdb_resource_info\t*r,\n-\t\t\t\t uint32_t\t*nxt_res)\n-{\n-\tuint8_t res_func = ulp_flow_db_resource_func_get(r);\n-\n-\tBNXT_TF_DBG(DEBUG, \"Resource func = %x, nxt_resource_idx = %x\\n\",\n-\t\t    res_func, (ULP_FLOW_DB_RES_NXT_MASK & r->nxt_resource_idx));\n-\tif (res_func == BNXT_ULP_RESOURCE_FUNC_EXT_EM_TABLE ||\n-\t    res_func == BNXT_ULP_RESOURCE_FUNC_INT_EM_TABLE)\n-\t\tBNXT_TF_DBG(DEBUG, \"EM Handle = 0x%016\" PRIX64 \"\\n\",\n-\t\t\t    r->resource_em_handle);\n-\telse\n-\t\tBNXT_TF_DBG(DEBUG, \"Handle = 0x%08x\\n\", r->resource_hndl);\n-\n-\t*nxt_res = 0;\n-\tULP_FLOW_DB_RES_NXT_SET(*nxt_res,\n-\t\t\t\tr->nxt_resource_idx);\n-}\n-\n-/*\n- * Dump the flow database entry details\n- *\n- * ulp_ctxt [in] Ptr to ulp_context\n- *\n- * returns none\n- */\n-int32_t\tulp_flow_db_debug_dump(struct bnxt_ulp_context\t*ulp_ctxt)\n-{\n-\tstruct bnxt_ulp_flow_db\t\t*flow_db;\n-\tstruct bnxt_ulp_flow_tbl\t*flow_tbl;\n-\tstruct ulp_fdb_resource_info\t*r;\n-\tuint32_t\t\t\tnxt_res = 0;\n-\tenum bnxt_ulp_flow_db_tables\ttbl_idx;\n-\tuint32_t\t\t\tfid;\n-\n-\tif (!ulp_ctxt || !ulp_ctxt->cfg_data) {\n-\t\tBNXT_TF_DBG(ERR, \"Invalid Arguments\\n\");\n-\t\treturn -EINVAL;\n-\t}\n-\tflow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt);\n-\tif (!flow_db) {\n-\t\tBNXT_TF_DBG(ERR, \"Invalid Arguments\\n\");\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tfor (tbl_idx = 0; tbl_idx < BNXT_ULP_FLOW_TABLE_MAX; tbl_idx++) {\n-\t\tflow_tbl = &flow_db->flow_tbl[tbl_idx];\n-\t\tBNXT_TF_DBG(DEBUG, \"Dump Tbl index = %u, flows = %u:%u\\n\",\n-\t\t\t    tbl_idx, flow_tbl->num_flows,\n-\t\t\t    flow_tbl->num_resources);\n-\t\tBNXT_TF_DBG(DEBUG, \"Head_index = %u, Tail_index = %u\\n\",\n-\t\t\t    flow_tbl->head_index, flow_tbl->tail_index);\n-\t\tfor (fid = 0; fid < flow_tbl->num_flows; fid++) {\n-\t\t\tif (ulp_flow_db_active_flow_is_set(flow_tbl, fid)) {\n-\t\t\t\tBNXT_TF_DBG(DEBUG, \"fid = %u\\n\", fid);\n-\t\t\t\t/* iterate the resource */\n-\t\t\t\tnxt_res = fid;\n-\t\t\t\tdo {\n-\t\t\t\t\tr = &flow_tbl->flow_resources[nxt_res];\n-\t\t\t\t\tulp_flow_db_res_dump(r, &nxt_res);\n-\t\t\t\t} while (nxt_res);\n-\t\t\t}\n-\t\t}\n-\t\tBNXT_TF_DBG(DEBUG, \"Done.\\n\");\n-\t}\n-\treturn 0;\n-}\n-#endif\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_flow_db.h b/drivers/net/bnxt/tf_ulp/ulp_flow_db.h\nindex 8c83664..7ec4b8a 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_flow_db.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_flow_db.h\n@@ -46,21 +46,15 @@ struct bnxt_ulp_flow_tbl {\n \tuint32_t\ttail_index;\n \n \t/* Table to track the active flows. */\n-\tuint64_t\t*active_flow_tbl;\n+\tuint64_t\t*active_reg_flows;\n+\tuint64_t\t*active_dflt_flows;\n \tuint32_t\tnum_flows;\n \tuint32_t\tnum_resources;\n };\n \n-/* Flow database supports two tables. */\n-enum bnxt_ulp_flow_db_tables {\n-\tBNXT_ULP_REGULAR_FLOW_TABLE,\n-\tBNXT_ULP_DEFAULT_FLOW_TABLE,\n-\tBNXT_ULP_FLOW_TABLE_MAX\n-};\n-\n /* Structure for the flow database resource information. */\n struct bnxt_ulp_flow_db {\n-\tstruct bnxt_ulp_flow_tbl\tflow_tbl[BNXT_ULP_FLOW_TABLE_MAX];\n+\tstruct bnxt_ulp_flow_tbl\tflow_tbl;\n \tuint16_t\t\t\t*func_id_tbl;\n \tuint32_t\t\t\tfunc_id_tbl_size;\n };\n@@ -107,10 +101,11 @@ int32_t\tulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt);\n  *\n  * returns 0 on success and negative on failure.\n  */\n-int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt,\n-\t\t\t      enum bnxt_ulp_flow_db_tables tbl_idx,\n-\t\t\t      uint16_t func_id,\n-\t\t\t      uint32_t *fid);\n+int32_t\n+ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt,\n+\t\t      enum bnxt_ulp_fdb_type flow_type,\n+\t\t      uint16_t func_id,\n+\t\t      uint32_t *fid);\n \n /*\n  * Allocate the flow database entry.\n@@ -123,10 +118,11 @@ int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt,\n  *\n  * returns 0 on success and negative on failure.\n  */\n-int32_t\tulp_flow_db_resource_add(struct bnxt_ulp_context\t*ulp_ctxt,\n-\t\t\t\t enum bnxt_ulp_flow_db_tables\ttbl_idx,\n-\t\t\t\t uint32_t\t\t\tfid,\n-\t\t\t\t struct ulp_flow_db_res_params\t*params);\n+int32_t\n+ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt,\n+\t\t\t enum bnxt_ulp_fdb_type flow_type,\n+\t\t\t uint32_t fid,\n+\t\t\t struct ulp_flow_db_res_params *params);\n \n /*\n  * Free the flow database entry.\n@@ -140,10 +136,11 @@ int32_t\tulp_flow_db_resource_add(struct bnxt_ulp_context\t*ulp_ctxt,\n  *\n  * Returns 0 on success and negative on failure.\n  */\n-int32_t\tulp_flow_db_resource_del(struct bnxt_ulp_context\t*ulp_ctxt,\n-\t\t\t\t enum bnxt_ulp_flow_db_tables\ttbl_idx,\n-\t\t\t\t uint32_t\t\t\tfid,\n-\t\t\t\t struct ulp_flow_db_res_params\t*params);\n+int32_t\n+ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt,\n+\t\t\t enum bnxt_ulp_fdb_type flow_type,\n+\t\t\t uint32_t fid,\n+\t\t\t struct ulp_flow_db_res_params *params);\n \n /*\n  * Free the flow database entry\n@@ -154,9 +151,10 @@ int32_t\tulp_flow_db_resource_del(struct bnxt_ulp_context\t*ulp_ctxt,\n  *\n  * returns 0 on success and negative on failure.\n  */\n-int32_t\tulp_flow_db_fid_free(struct bnxt_ulp_context\t\t*ulp_ctxt,\n-\t\t\t     enum bnxt_ulp_flow_db_tables\ttbl_idx,\n-\t\t\t     uint32_t\t\t\t\tfid);\n+int32_t\n+ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt,\n+\t\t     enum bnxt_ulp_fdb_type tbl_idx,\n+\t\t     uint32_t fid);\n \n /*\n  *Get the flow database entry details\n@@ -169,11 +167,12 @@ int32_t\tulp_flow_db_fid_free(struct bnxt_ulp_context\t\t*ulp_ctxt,\n  *\n  * returns 0 on success and negative on failure.\n  */\n-int32_t\tulp_flow_db_resource_get(struct bnxt_ulp_context\t*ulp_ctxt,\n-\t\t\t\t enum bnxt_ulp_flow_db_tables\ttbl_idx,\n-\t\t\t\t uint32_t\t\t\tfid,\n-\t\t\t\t uint32_t\t\t\t*nxt_idx,\n-\t\t\t\t struct ulp_flow_db_res_params\t*params);\n+int32_t\n+ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt,\n+\t\t\t enum bnxt_ulp_fdb_type flow_type,\n+\t\t\t uint32_t fid,\n+\t\t\t uint32_t *nxt_idx,\n+\t\t\t struct ulp_flow_db_res_params *params);\n \n /*\n  * Flush all flows in the flow database.\n@@ -183,8 +182,9 @@ int32_t\tulp_flow_db_resource_get(struct bnxt_ulp_context\t*ulp_ctxt,\n  *\n  * returns 0 on success or negative number on failure\n  */\n-int32_t\tulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx,\n-\t\t\t\tuint32_t\t\tidx);\n+int32_t\n+ulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx,\n+\t\t\tuint32_t idx);\n \n /*\n  * Flush all flows in the flow database that belong to a device function.\n@@ -212,7 +212,7 @@ ulp_flow_db_session_flow_flush(struct bnxt_ulp_context *ulp_ctx);\n  * Check that flow id matches the function id or not\n  *\n  * ulp_ctxt [in] Ptr to ulp context\n- * flow_db [in] Ptr to flow table\n+ * flow_id [in] flow id of the flow.\n  * func_id [in] The func_id to be set, for reset pass zero.\n  *\n  * returns true on success or false on failure\n@@ -236,15 +236,4 @@ ulp_default_flow_db_cfa_action_get(struct bnxt_ulp_context *ulp_ctx,\n \t\t\t\t   uint32_t flow_id,\n \t\t\t\t   uint16_t *cfa_action);\n \n-#ifdef RTE_LIBRTE_BNXT_TRUFLOW_DEBUG\n-/*\n- * Dump the flow database entry details\n- *\n- * ulp_ctxt [in] Ptr to ulp_context\n- *\n- * returns none\n- */\n-int32_t\tulp_flow_db_debug_dump(struct bnxt_ulp_context\t*ulp_ctxt);\n-#endif\n-\n #endif /* _ULP_FLOW_DB_H_ */\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.c b/drivers/net/bnxt/tf_ulp/ulp_mapper.c\nindex 5ed481a..0f55f4f 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.c\n@@ -2482,12 +2482,12 @@ ulp_mapper_resource_free(struct bnxt_ulp_context *ulp,\n }\n \n int32_t\n-ulp_mapper_resources_free(struct bnxt_ulp_context\t*ulp_ctx,\n-\t\t\t  uint32_t fid,\n-\t\t\t  enum bnxt_ulp_flow_db_tables\ttbl_type)\n+ulp_mapper_resources_free(struct bnxt_ulp_context *ulp_ctx,\n+\t\t\t  enum bnxt_ulp_fdb_type flow_type,\n+\t\t\t  uint32_t fid)\n {\n-\tstruct ulp_flow_db_res_params\tres_parms = { 0 };\n-\tint32_t\t\t\t\trc, trc;\n+\tstruct ulp_flow_db_res_params res_parms = { 0 };\n+\tint32_t rc, trc;\n \n \tif (!ulp_ctx) {\n \t\tBNXT_TF_DBG(ERR, \"Invalid parms, unable to free flow\\n\");\n@@ -2499,7 +2499,7 @@ ulp_mapper_resources_free(struct bnxt_ulp_context\t*ulp_ctx,\n \t * while status is good\n \t */\n \tres_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_YES;\n-\trc = ulp_flow_db_resource_del(ulp_ctx, tbl_type, fid, &res_parms);\n+\trc = ulp_flow_db_resource_del(ulp_ctx, flow_type, fid, &res_parms);\n \n \tif (rc) {\n \t\t/*\n@@ -2507,7 +2507,7 @@ ulp_mapper_resources_free(struct bnxt_ulp_context\t*ulp_ctx,\n \t\t * It likely means that the flow did not exist in the flow db.\n \t\t */\n \t\tBNXT_TF_DBG(ERR, \"Flow[%d][0x%08x] failed to free (rc=%d)\\n\",\n-\t\t\t    tbl_type, fid, rc);\n+\t\t\t    flow_type, fid, rc);\n \t\treturn rc;\n \t}\n \n@@ -2521,20 +2521,20 @@ ulp_mapper_resources_free(struct bnxt_ulp_context\t*ulp_ctx,\n \t\t\tBNXT_TF_DBG(ERR,\n \t\t\t\t    \"Flow[%d][0x%x] Res[%d][0x%016\" PRIx64\n \t\t\t\t    \"] failed rc=%d.\\n\",\n-\t\t\t\t    tbl_type, fid, res_parms.resource_func,\n+\t\t\t\t    flow_type, fid, res_parms.resource_func,\n \t\t\t\t    res_parms.resource_hndl, trc);\n \n \t\t/* All subsequent call require the non-critical_resource */\n \t\tres_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO;\n \n \t\trc = ulp_flow_db_resource_del(ulp_ctx,\n-\t\t\t\t\t      tbl_type,\n+\t\t\t\t\t      flow_type,\n \t\t\t\t\t      fid,\n \t\t\t\t\t      &res_parms);\n \t}\n \n \t/* Free the Flow ID since we've removed all resources */\n-\trc = ulp_flow_db_fid_free(ulp_ctx, tbl_type, fid);\n+\trc = ulp_flow_db_fid_free(ulp_ctx, flow_type, fid);\n \n \treturn rc;\n }\n@@ -2568,8 +2568,9 @@ ulp_mapper_glb_resource_info_deinit(struct bnxt_ulp_context *ulp_ctx,\n }\n \n int32_t\n-ulp_mapper_flow_destroy(struct bnxt_ulp_context\t*ulp_ctx, uint32_t fid,\n-\t\t\tenum bnxt_ulp_flow_db_tables flow_tbl_type)\n+ulp_mapper_flow_destroy(struct bnxt_ulp_context *ulp_ctx,\n+\t\t\tenum bnxt_ulp_fdb_type flow_type,\n+\t\t\tuint32_t fid)\n {\n \tint32_t rc;\n \n@@ -2582,7 +2583,7 @@ ulp_mapper_flow_destroy(struct bnxt_ulp_context\t*ulp_ctx, uint32_t fid,\n \t\treturn -EINVAL;\n \t}\n \n-\trc = ulp_mapper_resources_free(ulp_ctx, fid, flow_tbl_type);\n+\trc = ulp_mapper_resources_free(ulp_ctx, flow_type, fid);\n \tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n \treturn rc;\n \n@@ -2624,7 +2625,7 @@ ulp_mapper_glb_template_table_init(struct bnxt_ulp_context *ulp_ctx)\n \t\tparms.ulp_ctx = ulp_ctx;\n \t\tparms.dev_id = dev_id;\n \t\tparms.mapper_data = mapper_data;\n-\t\tparms.flow_type = BNXT_ULP_DEFAULT_FLOW_TABLE;\n+\t\tparms.flow_type = BNXT_ULP_FDB_TYPE_DEFAULT;\n \t\tparms.tmpl_type = BNXT_ULP_TEMPLATE_TYPE_CLASS;\n \n \t\t/* Get the class table entry from dev id and class id */\n@@ -2758,8 +2759,8 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx,\n flow_error:\n \tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n \t/* Free all resources that were allocated during flow creation */\n-\ttrc = ulp_mapper_flow_destroy(ulp_ctx, parms.fid,\n-\t\t\t\t      BNXT_ULP_REGULAR_FLOW_TABLE);\n+\ttrc = ulp_mapper_flow_destroy(ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR,\n+\t\t\t\t      parms.fid);\n \tif (trc)\n \t\tBNXT_TF_DBG(ERR, \"Failed to free all resources rc=%d\\n\", trc);\n \ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.h b/drivers/net/bnxt/tf_ulp/ulp_mapper.h\nindex 936fb9a..6f93bcd 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.h\n@@ -111,16 +111,17 @@ ulp_mapper_flow_create(struct bnxt_ulp_context\t*ulp_ctx,\n \n /* Function that frees all resources associated with the flow. */\n int32_t\n-ulp_mapper_flow_destroy(struct bnxt_ulp_context\t*ulp_ctx, uint32_t fid,\n-\t\t\tenum bnxt_ulp_flow_db_tables flow_tbl_type);\n+ulp_mapper_flow_destroy(struct bnxt_ulp_context *ulp_ctx,\n+\t\t\tenum bnxt_ulp_fdb_type flow_type,\n+\t\t\tuint32_t fid);\n \n /*\n  * Function that frees all resources and can be called on default or regular\n  * flows\n  */\n int32_t\n-ulp_mapper_resources_free(struct bnxt_ulp_context\t*ulp_ctx,\n-\t\t\t  uint32_t fid,\n-\t\t\t  enum bnxt_ulp_flow_db_tables\ttbl_type);\n+ulp_mapper_resources_free(struct bnxt_ulp_context *ulp_ctx,\n+\t\t\t  enum bnxt_ulp_fdb_type flow_type,\n+\t\t\t  uint32_t fid);\n \n #endif /* _ULP_MAPPER_H_ */\n",
    "prefixes": [
        "06/13"
    ]
}