get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 68566,
    "url": "http://patchwork.dpdk.org/api/patches/68566/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/1586962156-11179-10-git-send-email-venkatkumar.duvvuru@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": "<1586962156-11179-10-git-send-email-venkatkumar.duvvuru@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1586962156-11179-10-git-send-email-venkatkumar.duvvuru@broadcom.com",
    "date": "2020-04-15T14:49:14",
    "name": "[09/11] net/bnxt: default identifiers added to ulp mapper",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "90e7a19cf914fdd80474f6694819cdbbb3cb191a",
    "submitter": {
        "id": 1635,
        "url": "http://patchwork.dpdk.org/api/people/1635/?format=api",
        "name": "Venkat Duvvuru",
        "email": "venkatkumar.duvvuru@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/1586962156-11179-10-git-send-email-venkatkumar.duvvuru@broadcom.com/mbox/",
    "series": [
        {
            "id": 9397,
            "url": "http://patchwork.dpdk.org/api/series/9397/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=9397",
            "date": "2020-04-15T14:49:05",
            "name": "enhancements to host based flow table management",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/9397/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/68566/comments/",
    "check": "fail",
    "checks": "http://patchwork.dpdk.org/api/patches/68566/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 ACDD3A0563;\n\tWed, 15 Apr 2020 16:52:14 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id BD6E71D92A;\n\tWed, 15 Apr 2020 16:50:52 +0200 (CEST)",
            "from mail-pj1-f66.google.com (mail-pj1-f66.google.com\n [209.85.216.66]) by dpdk.org (Postfix) with ESMTP id F40381D919\n for <dev@dpdk.org>; Wed, 15 Apr 2020 16:50:50 +0200 (CEST)",
            "by mail-pj1-f66.google.com with SMTP id nu11so6790259pjb.1\n for <dev@dpdk.org>; Wed, 15 Apr 2020 07:50:50 -0700 (PDT)",
            "from S60.dhcp.broadcom.net ([192.19.234.250])\n by smtp.gmail.com with ESMTPSA id 11sm13767969pfz.91.2020.04.15.07.50.44\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Wed, 15 Apr 2020 07:50:46 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com;\n s=google;\n h=from:to:cc:subject:date:message-id:in-reply-to:references;\n bh=hl0SxbQ9UYiiYMvWIipaXl1ff0MbzjYx8buRlIippIA=;\n b=WlE4UOJ78cWvFDPDCuZwQeNzJVk5oGUPzjxrLma70IVr5o+VT89cYbUurud2iy07YB\n xKVtvCuF7wOyJ46w3sn6kYix31nhigvN7hJqhqZqh1Ig4MBocceGKr58x4GBCnUSFGIo\n Uk2f3r75A07Wi3OYas/JM2qYxPP9+zUBhXeUs=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20161025;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n :references;\n bh=hl0SxbQ9UYiiYMvWIipaXl1ff0MbzjYx8buRlIippIA=;\n b=tl10w7ugy748hizzAdfZs+TVekXFRzJjQOOWndn6OWTP6EQPPqaWe+drAkuQ3Va6sp\n mIxyrcBD41//0D2xq+x+INmvknECS/tuSupFTA0mzy1+AyGe1fpAoPN4UQ2PWG0S9wZg\n saZsgBAk5oAGSREg39gPqX/UNkrErjTq8gfI3H894VHtNuTeLhfN6uz+JzQgauH6bDkg\n m0ClvV1Bv0zOmMOOpG5Lh9QIk/w6YDZcNM0PcGscU8cGnRn9EjCkPnwwAkAf7ndpsAOE\n yll/TbWH+I9oj/aLCL/XZkd3iv9PvYHcCY7Zh/qRjzuBzVYzGFIlLxfYCTaig7zsYQzc\n CvTw==",
        "X-Gm-Message-State": "AGi0PuaGFtyAFfaR25+g8PSuTzlgVngcQbBb70MCN5LHFNMbybnzEVwo\n kPnr920oyZjbeAc99zYMTfLIU7SqDMLhKWKaYfLEk1soZCkFuJ+l+XFktJz5XJEWtiiv8JRKTeC\n RxHiAEfPzL7GhEG4BHSAxkcdZAwQKgfVCOc9b2i3FN85VpOmlyZPNNd/PfwMYrVf4VMoO",
        "X-Google-Smtp-Source": "\n APiQypIjf632D9AzI7wkDYK07wFv47HtYqZ49Kg2Y/eGPfGjBFn7El1UTlTt0Cv4ookhBCMpR1ZJDg==",
        "X-Received": "by 2002:a17:902:6ac9:: with SMTP id\n i9mr5452577plt.35.1586962246961;\n Wed, 15 Apr 2020 07:50:46 -0700 (PDT)",
        "From": "Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "Mike Baucom <michael.baucom@broadcom.com>,\n Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "Date": "Wed, 15 Apr 2020 20:19:14 +0530",
        "Message-Id": "\n <1586962156-11179-10-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "\n <1586962156-11179-1-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "References": "\n <1586962156-11179-1-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH 09/11] net/bnxt: default identifiers added to ulp\n\tmapper",
        "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: Mike Baucom <michael.baucom@broadcom.com>\n\n- Added ulp_mapper_init/deinit to allocate/deallocate mapper data for\n  storing the default identifiers\n- Modified the template_db to include the new opcode for accessing the\n  default ids.\n- Modified the result and key field builders to use the new opcode for\n  writing the default ids into blobs\n\nReviewed-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\nSigned-off-by: Mike Baucom <michael.baucom@broadcom.com>\nSigned-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\n---\n drivers/net/bnxt/tf_ulp/bnxt_ulp.c            |  33 ++++\n drivers/net/bnxt/tf_ulp/bnxt_ulp.h            |  10 +\n drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c       |   8 +-\n drivers/net/bnxt/tf_ulp/ulp_mapper.c          | 251 +++++++++++++++++++++++++-\n drivers/net/bnxt/tf_ulp/ulp_mapper.h          |  22 ++-\n drivers/net/bnxt/tf_ulp/ulp_template_db.c     |  35 ++--\n drivers/net/bnxt/tf_ulp/ulp_template_db.h     |  25 ++-\n drivers/net/bnxt/tf_ulp/ulp_template_struct.h |  11 ++\n 8 files changed, 363 insertions(+), 32 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\nindex 4c36747..202b4a5 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c\n@@ -19,6 +19,7 @@\n #include \"ulp_template_struct.h\"\n #include \"ulp_mark_mgr.h\"\n #include \"ulp_flow_db.h\"\n+#include \"ulp_mapper.h\"\n \n /* Linked list of all TF sessions. */\n STAILQ_HEAD(, bnxt_ulp_session_state) bnxt_ulp_session_list =\n@@ -485,6 +486,12 @@ bnxt_ulp_init(struct bnxt *bp)\n \t\tgoto jump_to_error;\n \t}\n \n+\trc = ulp_mapper_init(&bp->ulp_ctx);\n+\tif (rc) {\n+\t\tBNXT_TF_DBG(ERR, \"Failed to initialize ulp mapper\\n\");\n+\t\tgoto jump_to_error;\n+\t}\n+\n \treturn rc;\n \n jump_to_error:\n@@ -529,6 +536,9 @@ bnxt_ulp_deinit(struct bnxt *bp)\n \t/* Delete the Mark database */\n \tulp_mark_db_deinit(&bp->ulp_ctx);\n \n+\t/* cleanup the ulp mapper */\n+\tulp_mapper_deinit(&bp->ulp_ctx);\n+\n \t/* Delete the ulp context and tf session */\n \tulp_ctx_detach(bp, session);\n \n@@ -690,3 +700,26 @@ bnxt_ulp_eth_dev_ptr2_cntxt_get(struct rte_eth_dev\t*dev)\n \treturn &bp->ulp_ctx;\n }\n \n+int32_t\n+bnxt_ulp_cntxt_ptr2_mapper_data_set(struct bnxt_ulp_context *ulp_ctx,\n+\t\t\t\t    void *mapper_data)\n+{\n+\tif (!ulp_ctx || !ulp_ctx->cfg_data) {\n+\t\tBNXT_TF_DBG(ERR, \"Invalid ulp context data\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tulp_ctx->cfg_data->mapper_data = mapper_data;\n+\treturn 0;\n+}\n+\n+void *\n+bnxt_ulp_cntxt_ptr2_mapper_data_get(struct bnxt_ulp_context *ulp_ctx)\n+{\n+\tif (!ulp_ctx || !ulp_ctx->cfg_data) {\n+\t\tBNXT_TF_DBG(ERR, \"Invalid ulp context data\\n\");\n+\t\treturn NULL;\n+\t}\n+\n+\treturn ulp_ctx->cfg_data->mapper_data;\n+}\ndiff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h\nindex b3e9e96..d2ca178 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h\n@@ -18,6 +18,7 @@ struct bnxt_ulp_data {\n \tuint32_t\t\t\tdev_id; /* Hardware device id */\n \tuint32_t\t\t\tref_cnt;\n \tstruct bnxt_ulp_flow_db\t\t*flow_db;\n+\tvoid\t\t\t\t*mapper_data;\n };\n \n struct bnxt_ulp_context {\n@@ -107,4 +108,13 @@ bnxt_ulp_cntxt_ptr2_flow_db_get(struct bnxt_ulp_context\t*ulp_ctx);\n struct bnxt_ulp_context\t*\n bnxt_ulp_eth_dev_ptr2_cntxt_get(struct rte_eth_dev *dev);\n \n+/* Function to add the ulp mapper data to the ulp context */\n+int32_t\n+bnxt_ulp_cntxt_ptr2_mapper_data_set(struct bnxt_ulp_context *ulp_ctx,\n+\t\t\t\t    void *mapper_data);\n+\n+/* Function to get the ulp mapper data from the ulp context */\n+void *\n+bnxt_ulp_cntxt_ptr2_mapper_data_get(struct bnxt_ulp_context *ulp_ctx);\n+\n #endif /* _BNXT_ULP_H_ */\ndiff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c\nindex f0c812c..7783f85 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c\n@@ -110,7 +110,6 @@ bnxt_ulp_flow_create(struct rte_eth_dev *dev,\n \t\tgoto parse_error;\n \n \tret = ulp_matcher_pattern_match(&params, &class_id);\n-\n \tif (ret != BNXT_TF_RC_SUCCESS)\n \t\tgoto parse_error;\n \n@@ -126,11 +125,10 @@ bnxt_ulp_flow_create(struct rte_eth_dev *dev,\n \tmapper_cparms.class_tid = class_id;\n \tmapper_cparms.act_tid = act_tmpl;\n \tmapper_cparms.func_id = bnxt_get_fw_func_id(dev->data->port_id);\n+\tmapper_cparms.dir = params.dir;\n \n-\t/* call the ulp mapper to create the flow in the hardware */\n-\tret = ulp_mapper_flow_create(ulp_ctx,\n-\t\t\t\t     &mapper_cparms,\n-\t\t\t\t     &fid);\n+\t/* Call the ulp mapper to create the flow in the hardware. */\n+\tret = ulp_mapper_flow_create(ulp_ctx, &mapper_cparms, &fid);\n \tif (!ret) {\n \t\tflow_id = (struct rte_flow *)((uintptr_t)fid);\n \t\treturn flow_id;\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.c b/drivers/net/bnxt/tf_ulp/ulp_mapper.c\nindex 8675247..76addf2 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.c\n@@ -4,6 +4,7 @@\n  */\n \n #include <rte_log.h>\n+#include <rte_malloc.h>\n #include \"bnxt.h\"\n #include \"ulp_template_db.h\"\n #include \"ulp_template_struct.h\"\n@@ -16,6 +17,55 @@\n #include \"ulp_flow_db.h\"\n #include \"ulp_mapper.h\"\n \n+static struct bnxt_ulp_def_ident_info *\n+ulp_mapper_def_ident_info_list_get(uint32_t *num_entries)\n+{\n+\tif (!num_entries)\n+\t\treturn NULL;\n+\t*num_entries = BNXT_ULP_DEF_IDENT_INFO_TBL_MAX_SZ;\n+\treturn ulp_def_ident_tbl;\n+}\n+\n+/*\n+ * Read a default identifier from the mapper regfile.\n+ *\n+ * The regval is always returned in big-endian.\n+ *\n+ * returns 0 on success\n+ */\n+static int32_t\n+ulp_mapper_def_regfile_read(struct bnxt_ulp_mapper_data *mapper_data,\n+\t\t\t    enum tf_dir dir,\n+\t\t\t    uint16_t idx,\n+\t\t\t    uint64_t *regval)\n+{\n+\tif (!mapper_data || !regval ||\n+\t    dir >= TF_DIR_MAX || idx >= BNXT_ULP_DEF_REGFILE_INDEX_LAST)\n+\t\treturn -EINVAL;\n+\t*regval = mapper_data->dflt_ids[dir][idx].ident;\n+\treturn 0;\n+}\n+\n+/*\n+ * Write a default identifier to the mapper regfile\n+ *\n+ * The regval value must be in big-endian.\n+ *\n+ * return 0 on success.\n+ */\n+static int32_t\n+ulp_mapper_def_regfile_write(struct bnxt_ulp_mapper_data *mapper_data,\n+\t\t\t     enum tf_dir dir,\n+\t\t\t     uint16_t idx,\n+\t\t\t     uint64_t regval)\n+{\n+\tif (!mapper_data || dir >= TF_DIR_MAX ||\n+\t    idx >= BNXT_ULP_DEF_REGFILE_INDEX_LAST)\n+\t\treturn -EINVAL;\n+\tmapper_data->dflt_ids[dir][idx].ident = regval;\n+\treturn 0;\n+}\n+\n /*\n  * Get the size of the action property for a given index.\n  *\n@@ -364,6 +414,7 @@ ulp_mapper_ident_process(struct bnxt_ulp_mapper_parms *parms,\n \n static int32_t\n ulp_mapper_result_field_process(struct bnxt_ulp_mapper_parms *parms,\n+\t\t\t\tenum tf_dir dir,\n \t\t\t\tstruct bnxt_ulp_mapper_result_field_info *fld,\n \t\t\t\tstruct ulp_blob *blob,\n \t\t\t\tconst char *name)\n@@ -458,6 +509,27 @@ ulp_mapper_result_field_process(struct bnxt_ulp_mapper_parms *parms,\n \t\t\treturn -EINVAL;\n \t\t}\n \t\tbreak;\n+\tcase BNXT_ULP_RESULT_OPC_SET_TO_DEF_REGFILE:\n+\t\tif (!ulp_operand_read(fld->result_operand,\n+\t\t\t\t      (uint8_t *)&idx,\n+\t\t\t\t      sizeof(uint16_t))) {\n+\t\t\tBNXT_TF_DBG(ERR, \"%s key operand read failed.\\n\", name);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t\tidx = tfp_be_to_cpu_16(idx);\n+\t\tif (ulp_mapper_def_regfile_read(parms->mapper_data,\n+\t\t\t\t\t\tdir,\n+\t\t\t\t\t\tidx, &regval)) {\n+\t\t\tBNXT_TF_DBG(ERR, \"%s regfile[%d] read failed.\\n\",\n+\t\t\t\t    name, idx);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t\tval = ulp_blob_push_64(blob, &regval, fld->field_bit_size);\n+\t\tif (!val) {\n+\t\t\tBNXT_TF_DBG(ERR, \"%s push to key blob failed\\n\", name);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t\tbreak;\n \tdefault:\n \t\treturn -EINVAL;\n \t}\n@@ -467,12 +539,13 @@ ulp_mapper_result_field_process(struct bnxt_ulp_mapper_parms *parms,\n /* Function to alloc action record and set the table. */\n static int32_t\n ulp_mapper_keymask_field_process(struct bnxt_ulp_mapper_parms *parms,\n+\t\t\t\t enum tf_dir dir,\n \t\t\t\t struct bnxt_ulp_mapper_class_key_field_info *f,\n \t\t\t\t struct ulp_blob *blob,\n \t\t\t\t uint8_t is_key,\n \t\t\t\t const char *name)\n {\n-\tuint64_t regval;\n+\tuint64_t val64;\n \tuint16_t idx, bitlen;\n \tuint32_t opcode;\n \tuint8_t *operand;\n@@ -541,17 +614,38 @@ ulp_mapper_keymask_field_process(struct bnxt_ulp_mapper_parms *parms,\n \t\t}\n \t\tidx = tfp_be_to_cpu_16(idx);\n \n-\t\tif (!ulp_regfile_read(regfile, idx, &regval)) {\n+\t\tif (!ulp_regfile_read(regfile, idx, &val64)) {\n \t\t\tBNXT_TF_DBG(ERR, \"%s regfile[%d] read failed.\\n\",\n \t\t\t\t    name, idx);\n \t\t\treturn -EINVAL;\n \t\t}\n \n-\t\tval = ulp_blob_push_64(blob, &regval, bitlen);\n+\t\tval = ulp_blob_push_64(blob, &val64, bitlen);\n+\t\tif (!val) {\n+\t\t\tBNXT_TF_DBG(ERR, \"%s push to key blob failed\\n\", name);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t\tbreak;\n+\tcase BNXT_ULP_SPEC_OPC_SET_TO_DEF_REGFILE:\n+\t\tif (!ulp_operand_read(operand, (uint8_t *)&idx,\n+\t\t\t\t      sizeof(uint16_t))) {\n+\t\t\tBNXT_TF_DBG(ERR, \"%s key operand read failed.\\n\", name);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t\tidx = tfp_be_to_cpu_16(idx);\n+\t\tif (ulp_mapper_def_regfile_read(parms->mapper_data,\n+\t\t\t\t\t\tdir,\n+\t\t\t\t\t\tidx, &val64)) {\n+\t\t\tBNXT_TF_DBG(ERR, \"%s regfile[%d] read failed.\\n\",\n+\t\t\t\t    name, idx);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t\tval = ulp_blob_push_64(blob, &val64, bitlen);\n \t\tif (!val) {\n \t\t\tBNXT_TF_DBG(ERR, \"%s push to key blob failed\\n\", name);\n \t\t\treturn -EINVAL;\n \t\t}\n+\t\tbreak;\n \tdefault:\n \t\tbreak;\n \t}\n@@ -716,6 +810,7 @@ ulp_mapper_action_info_process(struct bnxt_ulp_mapper_parms *parms,\n \tfor (i = 0; i < (num_flds + encap_flds); i++) {\n \t\tfld = &flds[i];\n \t\trc = ulp_mapper_result_field_process(parms,\n+\t\t\t\t\t\t     tbl->direction,\n \t\t\t\t\t\t     fld,\n \t\t\t\t\t\t     &blob,\n \t\t\t\t\t\t     \"Action\");\n@@ -779,7 +874,8 @@ ulp_mapper_tcam_tbl_process(struct bnxt_ulp_mapper_parms *parms,\n \t */\n \tfor (i = 0; i < num_kflds; i++) {\n \t\t/* Setup the key */\n-\t\trc = ulp_mapper_keymask_field_process(parms, &kflds[i],\n+\t\trc = ulp_mapper_keymask_field_process(parms, tbl->direction,\n+\t\t\t\t\t\t      &kflds[i],\n \t\t\t\t\t\t      &key, 1, \"TCAM Key\");\n \t\tif (rc) {\n \t\t\tBNXT_TF_DBG(ERR, \"Key field set failed.\\n\");\n@@ -787,7 +883,8 @@ ulp_mapper_tcam_tbl_process(struct bnxt_ulp_mapper_parms *parms,\n \t\t}\n \n \t\t/* Setup the mask */\n-\t\trc = ulp_mapper_keymask_field_process(parms, &kflds[i],\n+\t\trc = ulp_mapper_keymask_field_process(parms, tbl->direction,\n+\t\t\t\t\t\t      &kflds[i],\n \t\t\t\t\t\t      &mask, 0, \"TCAM Mask\");\n \t\tif (rc) {\n \t\t\tBNXT_TF_DBG(ERR, \"Mask field set failed.\\n\");\n@@ -854,6 +951,7 @@ ulp_mapper_tcam_tbl_process(struct bnxt_ulp_mapper_parms *parms,\n \n \t\tfor (i = 0; i < num_dflds; i++) {\n \t\t\trc = ulp_mapper_result_field_process(parms,\n+\t\t\t\t\t\t\t     tbl->direction,\n \t\t\t\t\t\t\t     &dflds[i],\n \t\t\t\t\t\t\t     &data,\n \t\t\t\t\t\t\t     \"TCAM Result\");\n@@ -958,7 +1056,8 @@ ulp_mapper_em_tbl_process(struct bnxt_ulp_mapper_parms *parms,\n \t/* create the key */\n \tfor (i = 0; i < num_kflds; i++) {\n \t\t/* Setup the key */\n-\t\trc = ulp_mapper_keymask_field_process(parms, &kflds[i],\n+\t\trc = ulp_mapper_keymask_field_process(parms, tbl->direction,\n+\t\t\t\t\t\t      &kflds[i],\n \t\t\t\t\t\t      &key, 1, \"EM Key\");\n \t\tif (rc) {\n \t\t\tBNXT_TF_DBG(ERR, \"Key field set failed.\\n\");\n@@ -984,6 +1083,7 @@ ulp_mapper_em_tbl_process(struct bnxt_ulp_mapper_parms *parms,\n \t\tfld = &dflds[i];\n \n \t\trc = ulp_mapper_result_field_process(parms,\n+\t\t\t\t\t\t     tbl->direction,\n \t\t\t\t\t\t     fld,\n \t\t\t\t\t\t     &data,\n \t\t\t\t\t\t     \"EM Result\");\n@@ -1134,6 +1234,7 @@ ulp_mapper_index_tbl_process(struct bnxt_ulp_mapper_parms *parms,\n \n \tfor (i = 0; i < num_flds; i++) {\n \t\trc = ulp_mapper_result_field_process(parms,\n+\t\t\t\t\t\t     tbl->direction,\n \t\t\t\t\t\t     &flds[i],\n \t\t\t\t\t\t     &data,\n \t\t\t\t\t\t     \"Indexed Result\");\n@@ -1436,6 +1537,17 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx,\n \t\treturn -EINVAL;\n \t}\n \n+\t/*\n+\t * Get the mapper data for dynamic mapper data such as default\n+\t * ids.\n+\t */\n+\tparms.mapper_data = (struct bnxt_ulp_mapper_data *)\n+\t\tbnxt_ulp_cntxt_ptr2_mapper_data_get(ulp_ctx);\n+\tif (!parms.mapper_data) {\n+\t\tBNXT_TF_DBG(ERR, \"Failed to get the ulp mapper data\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n \t/* Get the action table entry from device id and act context id */\n \tparms.act_tid = cparms->act_tid;\n \tparms.atbls = ulp_mapper_action_tbl_list_get(parms.dev_id,\n@@ -1515,3 +1627,130 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx,\n \n \treturn rc;\n }\n+\n+int32_t\n+ulp_mapper_init(struct bnxt_ulp_context *ulp_ctx)\n+{\n+\tstruct tf_alloc_identifier_parms iparms;\n+\tstruct bnxt_ulp_mapper_data *data;\n+\tstruct bnxt_ulp_def_ident_info *dflt_ids;\n+\tuint32_t i, num_dflt_ids, reg_idx;\n+\tuint64_t regval;\n+\tstruct tf *tfp;\n+\tint32_t rc;\n+\n+\tif (!ulp_ctx)\n+\t\treturn -EINVAL;\n+\n+\ttfp = bnxt_ulp_cntxt_tfp_get(ulp_ctx);\n+\tif (!tfp)\n+\t\treturn -EINVAL;\n+\n+\tdata = rte_zmalloc(\"ulp_mapper_data\",\n+\t\t\t   sizeof(struct bnxt_ulp_mapper_data), 0);\n+\tif (!data) {\n+\t\tBNXT_TF_DBG(ERR, \"Failed to allocate the mapper data\\n\");\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tif (bnxt_ulp_cntxt_ptr2_mapper_data_set(ulp_ctx, data)) {\n+\t\tBNXT_TF_DBG(ERR, \"Failed to set mapper data in context\\n\");\n+\t\t/* Don't call deinit since the prof_func wasn't allocated. */\n+\t\trte_free(data);\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\t/* Allocate the default ids. */\n+\tdflt_ids = ulp_mapper_def_ident_info_list_get(&num_dflt_ids);\n+\tfor (i = 0; i < num_dflt_ids; i++) {\n+\t\tiparms.ident_type = dflt_ids[i].ident_type;\n+\t\tiparms.dir = dflt_ids[i].direction;\n+\n+\t\trc = tf_alloc_identifier(tfp, &iparms);\n+\t\tif (rc) {\n+\t\t\tBNXT_TF_DBG(ERR, \"Failed to alloc dflt \"\n+\t\t\t\t    \"identifier [%s][%d]\\n\",\n+\t\t\t\t    (iparms.dir == TF_DIR_RX) ? \"RX\" : \"TX\",\n+\t\t\t\t    iparms.ident_type);\n+\t\t\tgoto error;\n+\t\t}\n+\t\treg_idx = dflt_ids[i].def_regfile_index;\n+\t\t/* All regfile entries are stored as 64bit big-endian values. */\n+\t\tregval = tfp_cpu_to_be_64((uint64_t)iparms.id);\n+\t\tif (ulp_mapper_def_regfile_write(data,\n+\t\t\t\t\t\t iparms.dir,\n+\t\t\t\t\t\t reg_idx,\n+\t\t\t\t\t\t regval)) {\n+\t\t\tBNXT_TF_DBG(ERR, \"Failed to write to default \"\n+\t\t\t\t    \"regfile.\\n\");\n+\t\t\tgoto error;\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+error:\n+\t/* Ignore the return code in favor of returning the original error. */\n+\tulp_mapper_deinit(ulp_ctx);\n+\treturn rc;\n+}\n+\n+void\n+ulp_mapper_deinit(struct bnxt_ulp_context *ulp_ctx)\n+{\n+\tstruct tf_free_identifier_parms free_parms;\n+\tstruct bnxt_ulp_def_ident_info *dflt_ids;\n+\tstruct bnxt_ulp_mapper_data *data;\n+\tuint32_t i, num_dflt_ids, reg_idx;\n+\tenum tf_dir dir;\n+\tuint64_t regval;\n+\tstruct tf *tfp;\n+\n+\tif (!ulp_ctx) {\n+\t\tBNXT_TF_DBG(ERR,\n+\t\t\t    \"Failed to acquire ulp context, so data may \"\n+\t\t\t    \"not be released.\\n\");\n+\t\treturn;\n+\t}\n+\n+\tdata = (struct bnxt_ulp_mapper_data *)\n+\t\tbnxt_ulp_cntxt_ptr2_mapper_data_get(ulp_ctx);\n+\tif (!data) {\n+\t\t/* Go ahead and return since there is no allocated data. */\n+\t\tBNXT_TF_DBG(ERR, \"No data appears to have been allocated.\\n\");\n+\t\treturn;\n+\t}\n+\n+\ttfp = bnxt_ulp_cntxt_tfp_get(ulp_ctx);\n+\tif (!tfp) {\n+\t\tBNXT_TF_DBG(ERR, \"Failed to acquire tfp.\\n\");\n+\t\t/* Free the mapper data regardless of errors. */\n+\t\tgoto free_mapper_data;\n+\t}\n+\n+\t/* Free the default prof func ids per direction. */\n+\tdflt_ids = ulp_mapper_def_ident_info_list_get(&num_dflt_ids);\n+\tfor (i = 0; i < num_dflt_ids; i++) {\n+\t\treg_idx = dflt_ids[i].def_regfile_index;\n+\t\tdir = dflt_ids[i].direction;\n+\t\tfree_parms.ident_type = dflt_ids[i].ident_type;\n+\t\tfree_parms.dir = dir;\n+\t\tif (ulp_mapper_def_regfile_read(data, dir, reg_idx, &regval)) {\n+\t\t\tBNXT_TF_DBG(ERR, \"Failed to read def regfile to free \"\n+\t\t\t\t    \"identifier.\\n\");\n+\t\t\tcontinue;\n+\t\t}\n+\t\t/*\n+\t\t * All regfile entries are stored as 64bit big-endian.  Need\n+\t\t * to convert the value to cpu before calling tf.\n+\t\t */\n+\t\tregval = tfp_be_to_cpu_64(regval);\n+\t\tfree_parms.id = (uint16_t)regval;\n+\t\t/* Ignore errors and free the remaining identifers. */\n+\t\ttf_free_identifier(tfp, &free_parms);\n+\t}\n+\n+free_mapper_data:\n+\trte_free(data);\n+\t/* Reset the data pointer within the ulp_ctx. */\n+\tbnxt_ulp_cntxt_ptr2_mapper_data_set(ulp_ctx, NULL);\n+}\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.h b/drivers/net/bnxt/tf_ulp/ulp_mapper.h\nindex 2fa6ffc..fb47f1c 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.h\n@@ -6,10 +6,10 @@\n #ifndef _ULP_MAPPER_H_\n #define _ULP_MAPPER_H_\n \n-#include <tf_core.h>\n #include <rte_log.h>\n #include <rte_flow.h>\n #include <rte_flow_driver.h>\n+#include \"tf_core.h\"\n #include \"ulp_template_db.h\"\n #include \"ulp_template_struct.h\"\n #include \"bnxt_ulp.h\"\n@@ -17,6 +17,16 @@\n \n #define ULP_SZ_BITS2BYTES(x) (((x) + 7) / 8)\n \n+struct bnxt_ulp_mapper_def_id_entry {\n+\tenum tf_identifier_type ident_type;\n+\tuint64_t ident;\n+};\n+\n+struct bnxt_ulp_mapper_data {\n+\tstruct bnxt_ulp_mapper_def_id_entry\n+\t\tdflt_ids[TF_DIR_MAX][BNXT_ULP_DEF_IDENT_INFO_TBL_MAX_SZ];\n+};\n+\n /* Internal Structure for passing the arguments around */\n struct bnxt_ulp_mapper_parms {\n \tuint32_t\t\t\t\tdev_id;\n@@ -36,6 +46,7 @@ struct bnxt_ulp_mapper_parms {\n \tuint8_t\t\t\t\t\tencap_byte_swap;\n \tuint32_t\t\t\t\tfid;\n \tenum bnxt_ulp_flow_db_tables\t\ttbl_idx;\n+\tstruct bnxt_ulp_mapper_data\t\t*mapper_data;\n };\n \n struct bnxt_ulp_mapper_create_parms {\n@@ -47,8 +58,17 @@ struct bnxt_ulp_mapper_create_parms {\n \tuint32_t\t\t\tclass_tid;\n \tuint32_t\t\t\tact_tid;\n \tuint16_t\t\t\tfunc_id;\n+\tenum ulp_direction_type\t\tdir;\n };\n \n+/* Function to initialize any dynamic mapper data. */\n+int32_t\n+ulp_mapper_init(struct bnxt_ulp_context\t*ulp_ctx);\n+\n+/* Function to release all dynamic mapper data. */\n+void\n+ulp_mapper_deinit(struct bnxt_ulp_context *ulp_ctx);\n+\n /*\n  * Function to handle the mapping of the Flow to be compatible\n  * with the underlying hardware.\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db.c b/drivers/net/bnxt/tf_ulp/ulp_template_db.c\nindex 25a558a..cd3f65f 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_db.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db.c\n@@ -297,6 +297,15 @@ struct bnxt_ulp_rte_act_info ulp_act_info[] = {\n \t}\n };\n \n+struct bnxt_ulp_def_ident_info ulp_def_ident_tbl[] = {\n+\t[0] = {\n+\t\t.ident_type              = TF_IDENT_TYPE_PROF_FUNC,\n+\t\t.def_regfile_index       =\n+\t\t\tBNXT_ULP_DEF_REGFILE_INDEX_DEF_PROF_FUNC_ID,\n+\t\t.direction               = TF_DIR_RX\n+\t}\n+};\n+\n struct bnxt_ulp_device_params ulp_device_params[] = {\n \t[BNXT_ULP_DEVICE_ID_WH_PLUS] = {\n \t\t.global_fid_enable       = BNXT_ULP_SYM_YES,\n@@ -577,7 +586,7 @@ struct bnxt_ulp_mapper_class_tbl_info ulp_class_tbl_list[] = {\n \t.result_bit_size = 64,\n \t.result_num_fields = 13,\n \t.ident_start_idx = 0,\n-\t.ident_nums = 2,\n+\t.ident_nums = 1,\n \t.mark_enable = BNXT_ULP_MARK_ENABLE_NO,\n \t.critical_resource = 0,\n \t.regfile_wr_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED\n@@ -595,7 +604,7 @@ struct bnxt_ulp_mapper_class_tbl_info ulp_class_tbl_list[] = {\n \t.result_start_idx = 13,\n \t.result_bit_size = 38,\n \t.result_num_fields = 8,\n-\t.ident_start_idx = 2,\n+\t.ident_start_idx = 1,\n \t.ident_nums = 1,\n \t.mark_enable = BNXT_ULP_MARK_ENABLE_NO,\n \t.critical_resource = 0,\n@@ -614,6 +623,7 @@ struct bnxt_ulp_mapper_class_tbl_info ulp_class_tbl_list[] = {\n \t.result_start_idx = 21,\n \t.result_bit_size = 64,\n \t.result_num_fields = 9,\n+\t.ident_start_idx = 2,\n \t.ident_nums = 0,\n \t.mark_enable = BNXT_ULP_MARK_ENABLE_YES,\n \t.critical_resource = 1,\n@@ -1088,9 +1098,10 @@ struct bnxt_ulp_mapper_class_key_field_info ulp_class_key_field_list[] = {\n \t.mask_opcode = BNXT_ULP_MASK_OPC_SET_TO_CONSTANT,\n \t.mask_operand = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n \t\t0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},\n-\t.spec_opcode = BNXT_ULP_SPEC_OPC_SET_TO_REGFILE,\n-\t.spec_operand = {(BNXT_ULP_REGFILE_INDEX_PROF_FUNC_ID_0 >> 8) & 0xff,\n-\t\tBNXT_ULP_REGFILE_INDEX_PROF_FUNC_ID_0 & 0xff,\n+\t.spec_opcode = BNXT_ULP_SPEC_OPC_SET_TO_DEF_REGFILE,\n+\t.spec_operand = {\n+\t\t(BNXT_ULP_DEF_REGFILE_INDEX_DEF_PROF_FUNC_ID >> 8) & 0xff,\n+\t\tBNXT_ULP_DEF_REGFILE_INDEX_DEF_PROF_FUNC_ID & 0xff,\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}\n \t},\n@@ -1256,9 +1267,10 @@ struct bnxt_ulp_mapper_result_field_info ulp_class_result_field_list[] = {\n \t},\n \t{\n \t.field_bit_size = 7,\n-\t.result_opcode = BNXT_ULP_RESULT_OPC_SET_TO_REGFILE,\n-\t.result_operand = {(BNXT_ULP_REGFILE_INDEX_PROF_FUNC_ID_0 >> 8) & 0xff,\n-\t\tBNXT_ULP_REGFILE_INDEX_PROF_FUNC_ID_0 & 0xff,\n+\t.result_opcode = BNXT_ULP_RESULT_OPC_SET_TO_DEF_REGFILE,\n+\t.result_operand = {\n+\t\t(BNXT_ULP_DEF_REGFILE_INDEX_DEF_PROF_FUNC_ID >> 8) & 0xff,\n+\t\tBNXT_ULP_DEF_REGFILE_INDEX_DEF_PROF_FUNC_ID & 0xff,\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n \t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}\n \t},\n@@ -1443,13 +1455,6 @@ struct bnxt_ulp_mapper_result_field_info ulp_class_result_field_list[] = {\n struct bnxt_ulp_mapper_ident_info ulp_ident_list[] = {\n \t{\n \t.resource_func = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,\n-\t.ident_type = TF_IDENT_TYPE_PROF_FUNC,\n-\t.regfile_wr_idx = BNXT_ULP_REGFILE_INDEX_PROF_FUNC_ID_0,\n-\t.ident_bit_size = 7,\n-\t.ident_bit_pos = 47\n-\t},\n-\t{\n-\t.resource_func = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,\n \t.ident_type = TF_IDENT_TYPE_L2_CTXT,\n \t.regfile_wr_idx = BNXT_ULP_REGFILE_INDEX_L2_CNTXT_ID_0,\n \t.ident_bit_size = 10,\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db.h b/drivers/net/bnxt/tf_ulp/ulp_template_db.h\nindex 94d4253..cf4ff9f 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_db.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db.h\n@@ -28,6 +28,7 @@\n #define BNXT_ULP_ACT_HID_SHFTR 0\n #define BNXT_ULP_ACT_HID_SHFTL 23\n #define BNXT_ULP_ACT_HID_MASK 255\n+#define BNXT_ULP_DEF_IDENT_INFO_TBL_MAX_SZ 1\n \n enum bnxt_ulp_action_bit {\n \tBNXT_ULP_ACTION_BIT_MARK             = 0x0000000000000001,\n@@ -112,6 +113,11 @@ enum bnxt_ulp_chf_idx {\n \tBNXT_ULP_CHF_IDX_LAST = 14\n };\n \n+enum bnxt_ulp_def_regfile_index {\n+\tBNXT_ULP_DEF_REGFILE_INDEX_DEF_PROF_FUNC_ID = 0,\n+\tBNXT_ULP_DEF_REGFILE_INDEX_LAST = 1\n+};\n+\n enum bnxt_ulp_device_id {\n \tBNXT_ULP_DEVICE_ID_WH_PLUS = 0,\n \tBNXT_ULP_DEVICE_ID_THOR = 1,\n@@ -120,6 +126,12 @@ enum bnxt_ulp_device_id {\n \tBNXT_ULP_DEVICE_ID_LAST = 4\n };\n \n+enum bnxt_ulp_direction {\n+\tBNXT_ULP_DIRECTION_INGRESS = 0,\n+\tBNXT_ULP_DIRECTION_EGRESS = 1,\n+\tBNXT_ULP_DIRECTION_LAST = 2\n+};\n+\n enum bnxt_ulp_hdr_type {\n \tBNXT_ULP_HDR_TYPE_NOT_SUPPORTED = 0,\n \tBNXT_ULP_HDR_TYPE_SUPPORTED = 1,\n@@ -137,8 +149,9 @@ enum bnxt_ulp_mask_opc {\n \tBNXT_ULP_MASK_OPC_SET_TO_CONSTANT = 0,\n \tBNXT_ULP_MASK_OPC_SET_TO_HDR_FIELD = 1,\n \tBNXT_ULP_MASK_OPC_SET_TO_REGFILE = 2,\n-\tBNXT_ULP_MASK_OPC_ADD_PAD = 3,\n-\tBNXT_ULP_MASK_OPC_LAST = 4\n+\tBNXT_ULP_MASK_OPC_SET_TO_DEF_REGFILE = 3,\n+\tBNXT_ULP_MASK_OPC_ADD_PAD = 4,\n+\tBNXT_ULP_MASK_OPC_LAST = 5\n };\n \n enum bnxt_ulp_match_type {\n@@ -193,7 +206,8 @@ enum bnxt_ulp_result_opc {\n \tBNXT_ULP_RESULT_OPC_SET_TO_ACT_PROP = 1,\n \tBNXT_ULP_RESULT_OPC_SET_TO_ENCAP_ACT_PROP_SZ = 2,\n \tBNXT_ULP_RESULT_OPC_SET_TO_REGFILE = 3,\n-\tBNXT_ULP_RESULT_OPC_LAST = 4\n+\tBNXT_ULP_RESULT_OPC_SET_TO_DEF_REGFILE = 4,\n+\tBNXT_ULP_RESULT_OPC_LAST = 5\n };\n \n enum bnxt_ulp_search_before_alloc {\n@@ -206,8 +220,9 @@ enum bnxt_ulp_spec_opc {\n \tBNXT_ULP_SPEC_OPC_SET_TO_CONSTANT = 0,\n \tBNXT_ULP_SPEC_OPC_SET_TO_HDR_FIELD = 1,\n \tBNXT_ULP_SPEC_OPC_SET_TO_REGFILE = 2,\n-\tBNXT_ULP_SPEC_OPC_ADD_PAD = 3,\n-\tBNXT_ULP_SPEC_OPC_LAST = 4\n+\tBNXT_ULP_SPEC_OPC_SET_TO_DEF_REGFILE = 3,\n+\tBNXT_ULP_SPEC_OPC_ADD_PAD = 4,\n+\tBNXT_ULP_SPEC_OPC_LAST = 5\n };\n \n enum bnxt_ulp_encap_vtag_encoding {\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\nindex c2d3ccb..476d5b9 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\n@@ -222,6 +222,12 @@ struct bnxt_ulp_mapper_ident_info {\n \tenum bnxt_ulp_regfile_index\tregfile_wr_idx;\n };\n \n+struct bnxt_ulp_def_ident_info {\n+\tenum tf_dir direction;\n+\tenum tf_identifier_type ident_type;\n+\tenum bnxt_ulp_def_regfile_index def_regfile_index;\n+};\n+\n /*\n  * Flow Mapper Static Data Externs:\n  * Access to the below static data should be done through access functions and\n@@ -285,4 +291,9 @@ extern struct bnxt_ulp_mapper_ident_info\tulp_ident_list[];\n  */\n extern uint32_t ulp_act_prop_map_table[];\n \n+/*\n+ * The ulp_def_ident_tbl provides the list of default identifiers that need to\n+ * be initialized and where to store them.\n+ */\n+extern struct bnxt_ulp_def_ident_info ulp_def_ident_tbl[];\n #endif /* _ULP_TEMPLATE_STRUCT_H_ */\n",
    "prefixes": [
        "09/11"
    ]
}