get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 29360,
    "url": "https://patches.dpdk.org/api/patches/29360/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20170928141329.73874-24-ajit.khaparde@broadcom.com/",
    "project": {
        "id": 1,
        "url": "https://patches.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": "<20170928141329.73874-24-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20170928141329.73874-24-ajit.khaparde@broadcom.com",
    "date": "2017-09-28T14:13:28",
    "name": "[dpdk-dev,v3,23/24] net/bnxt: add support for get/set EEPROM",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "5f0f03afb6261317ff71714c890f35e68ac8df68",
    "submitter": {
        "id": 501,
        "url": "https://patches.dpdk.org/api/people/501/?format=api",
        "name": "Ajit Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20170928141329.73874-24-ajit.khaparde@broadcom.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/29360/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/29360/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id BE8651B25F;\n\tThu, 28 Sep 2017 16:14:23 +0200 (CEST)",
            "from rnd-relay.smtp.broadcom.com (lpdvrndsmtp01.broadcom.com\n\t[192.19.229.170]) by dpdk.org (Postfix) with ESMTP id 305141B20B\n\tfor <dev@dpdk.org>; Thu, 28 Sep 2017 16:13:55 +0200 (CEST)",
            "from mail-irv-17.broadcom.com (mail-irv-17.lvn.broadcom.net\n\t[10.75.224.233])\n\tby rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id 7997F30C00F;\n\tThu, 28 Sep 2017 07:13:54 -0700 (PDT)",
            "from C02PT1RBG8WP.vpn.broadcom.net (unknown [10.10.116.190])\n\tby mail-irv-17.broadcom.com (Postfix) with ESMTP id A396281EB5;\n\tThu, 28 Sep 2017 07:13:53 -0700 (PDT)"
        ],
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com,\n\tSomnath Kotur <somnath.kotur@broadcom.com>",
        "Date": "Thu, 28 Sep 2017 09:13:28 -0500",
        "Message-Id": "<20170928141329.73874-24-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.13.5 (Apple Git-94)",
        "In-Reply-To": "<20170928141329.73874-1-ajit.khaparde@broadcom.com>",
        "References": "<20170928141329.73874-1-ajit.khaparde@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH v3 23/24] net/bnxt: add support for get/set EEPROM",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Somnath Kotur <somnath.kotur@broadcom.com>\n\nAdd support for get/set_eeprom, get_eeprom_length dev_ops.\nDefined the structures required to get/set the eeprom length/data\nin hsi_struct_defs hdr file along with implementation.\n\nSigned-off-by: Somnath Kotur <somnath.kotur@broadcom.com>\nSigned-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n doc/guides/nics/features/bnxt.ini      |   1 +\n drivers/net/bnxt/bnxt_ethdev.c         | 140 ++++++++++++++++++++++++++++\n drivers/net/bnxt/bnxt_hwrm.c           | 161 +++++++++++++++++++++++++++++++++\n drivers/net/bnxt/bnxt_hwrm.h           |  11 +++\n drivers/net/bnxt/bnxt_nvm_defs.h       |  75 +++++++++++++++\n drivers/net/bnxt/hsi_struct_def_dpdk.h | 138 ++++++++++++++++++++++++++++\n 6 files changed, 526 insertions(+)\n create mode 100644 drivers/net/bnxt/bnxt_nvm_defs.h",
    "diff": "diff --git a/doc/guides/nics/features/bnxt.ini b/doc/guides/nics/features/bnxt.ini\nindex 119132e16..0dcf07cc3 100644\n--- a/doc/guides/nics/features/bnxt.ini\n+++ b/doc/guides/nics/features/bnxt.ini\n@@ -21,6 +21,7 @@ Basic stats          = Y\n Extended stats       = Y\n FW version           = Y\n LED                  = Y\n+EEPROM dump          = Y\n Linux UIO            = Y\n Linux VFIO           = Y\n x86-64               = Y\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex 23eec6ab0..81f66cadd 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -53,6 +53,7 @@\n #include \"bnxt_txr.h\"\n #include \"bnxt_vnic.h\"\n #include \"hsi_struct_def_dpdk.h\"\n+#include \"bnxt_nvm_defs.h\"\n \n #define DRV_MODULE_NAME\t\t\"bnxt\"\n static const char bnxt_version[] =\n@@ -1854,6 +1855,142 @@ bnxt_dev_supported_ptypes_get_op(struct rte_eth_dev *dev)\n }\n \n \n+\n+static int\n+bnxt_get_eeprom_length_op(struct rte_eth_dev *dev)\n+{\n+\tstruct bnxt *bp = (struct bnxt *)dev->data->dev_private;\n+\tint rc;\n+\tuint32_t dir_entries;\n+\tuint32_t entry_length;\n+\n+\tRTE_LOG(INFO, PMD, \"%s(): %04x:%02x:%02x:%02x\\n\",\n+\t\t__func__, bp->pdev->addr.domain, bp->pdev->addr.bus,\n+\t\tbp->pdev->addr.devid, bp->pdev->addr.function);\n+\n+\trc = bnxt_hwrm_nvm_get_dir_info(bp, &dir_entries, &entry_length);\n+\tif (rc != 0)\n+\t\treturn rc;\n+\n+\treturn dir_entries * entry_length;\n+}\n+\n+static int\n+bnxt_get_eeprom_op(struct rte_eth_dev *dev,\n+\t\tstruct rte_dev_eeprom_info *in_eeprom)\n+{\n+\tstruct bnxt *bp = (struct bnxt *)dev->data->dev_private;\n+\tuint32_t index;\n+\tuint32_t offset;\n+\n+\tRTE_LOG(INFO, PMD, \"%s(): %04x:%02x:%02x:%02x in_eeprom->offset = %d \"\n+\t\t\"len = %d\\n\", __func__, bp->pdev->addr.domain,\n+\t\tbp->pdev->addr.bus, bp->pdev->addr.devid,\n+\t\tbp->pdev->addr.function, in_eeprom->offset, in_eeprom->length);\n+\n+\tif (in_eeprom->offset == 0) /* special offset value to get directory */\n+\t\treturn bnxt_get_nvram_directory(bp, in_eeprom->length,\n+\t\t\t\t\t\tin_eeprom->data);\n+\n+\tindex = in_eeprom->offset >> 24;\n+\toffset = in_eeprom->offset & 0xffffff;\n+\n+\tif (index != 0)\n+\t\treturn bnxt_hwrm_get_nvram_item(bp, index - 1, offset,\n+\t\t\t\t\t   in_eeprom->length, in_eeprom->data);\n+\n+\treturn 0;\n+}\n+\n+static bool bnxt_dir_type_is_ape_bin_format(uint16_t dir_type)\n+{\n+\tswitch (dir_type) {\n+\tcase BNX_DIR_TYPE_CHIMP_PATCH:\n+\tcase BNX_DIR_TYPE_BOOTCODE:\n+\tcase BNX_DIR_TYPE_BOOTCODE_2:\n+\tcase BNX_DIR_TYPE_APE_FW:\n+\tcase BNX_DIR_TYPE_APE_PATCH:\n+\tcase BNX_DIR_TYPE_KONG_FW:\n+\tcase BNX_DIR_TYPE_KONG_PATCH:\n+\tcase BNX_DIR_TYPE_BONO_FW:\n+\tcase BNX_DIR_TYPE_BONO_PATCH:\n+\t\treturn true;\n+\t}\n+\n+\treturn false;\n+}\n+\n+static bool bnxt_dir_type_is_other_exec_format(uint16_t dir_type)\n+{\n+\tswitch (dir_type) {\n+\tcase BNX_DIR_TYPE_AVS:\n+\tcase BNX_DIR_TYPE_EXP_ROM_MBA:\n+\tcase BNX_DIR_TYPE_PCIE:\n+\tcase BNX_DIR_TYPE_TSCF_UCODE:\n+\tcase BNX_DIR_TYPE_EXT_PHY:\n+\tcase BNX_DIR_TYPE_CCM:\n+\tcase BNX_DIR_TYPE_ISCSI_BOOT:\n+\tcase BNX_DIR_TYPE_ISCSI_BOOT_IPV6:\n+\tcase BNX_DIR_TYPE_ISCSI_BOOT_IPV4N6:\n+\t\treturn true;\n+\t}\n+\n+\treturn false;\n+}\n+\n+static bool bnxt_dir_type_is_executable(uint16_t dir_type)\n+{\n+\treturn bnxt_dir_type_is_ape_bin_format(dir_type) ||\n+\t\tbnxt_dir_type_is_other_exec_format(dir_type);\n+}\n+\n+static int\n+bnxt_set_eeprom_op(struct rte_eth_dev *dev,\n+\t\tstruct rte_dev_eeprom_info *in_eeprom)\n+{\n+\tstruct bnxt *bp = (struct bnxt *)dev->data->dev_private;\n+\tuint8_t index, dir_op;\n+\tuint16_t type, ext, ordinal, attr;\n+\n+\tRTE_LOG(INFO, PMD, \"%s(): %04x:%02x:%02x:%02x in_eeprom->offset = %d \"\n+\t\t\"len = %d\\n\", __func__, bp->pdev->addr.domain,\n+\t\tbp->pdev->addr.bus, bp->pdev->addr.devid,\n+\t\tbp->pdev->addr.function, in_eeprom->offset, in_eeprom->length);\n+\n+\tif (!BNXT_PF(bp)) {\n+\t\tRTE_LOG(ERR, PMD, \"NVM write not supported from a VF\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\ttype = in_eeprom->magic >> 16;\n+\n+\tif (type == 0xffff) { /* special value for directory operations */\n+\t\tindex = in_eeprom->magic & 0xff;\n+\t\tdir_op = in_eeprom->magic >> 8;\n+\t\tif (index == 0)\n+\t\t\treturn -EINVAL;\n+\t\tswitch (dir_op) {\n+\t\tcase 0x0e: /* erase */\n+\t\t\tif (in_eeprom->offset != ~in_eeprom->magic)\n+\t\t\t\treturn -EINVAL;\n+\t\t\treturn bnxt_hwrm_erase_nvram_directory(bp, index - 1);\n+\t\tdefault:\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t}\n+\n+\t/* Create or re-write an NVM item: */\n+\tif (bnxt_dir_type_is_executable(type) == true)\n+\t\treturn -EOPNOTSUPP;\n+\text = in_eeprom->magic & 0xffff;\n+\tordinal = in_eeprom->offset >> 16;\n+\tattr = in_eeprom->offset & 0xffff;\n+\n+\treturn bnxt_hwrm_flash_nvram(bp, type, ordinal, ext, attr,\n+\t\t\t\t     in_eeprom->data, in_eeprom->length);\n+\treturn 0;\n+}\n+\n /*\n  * Initialization\n  */\n@@ -1908,6 +2045,9 @@ static const struct eth_dev_ops bnxt_dev_ops = {\n \t.tx_descriptor_status = bnxt_tx_descriptor_status_op,\n \t.filter_ctrl = bnxt_filter_ctrl_op,\n \t.dev_supported_ptypes_get = bnxt_dev_supported_ptypes_get_op,\n+\t.get_eeprom_length    = bnxt_get_eeprom_length_op,\n+\t.get_eeprom           = bnxt_get_eeprom_op,\n+\t.set_eeprom           = bnxt_set_eeprom_op,\n };\n \n static bool bnxt_vf_pciid(uint16_t id)\ndiff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c\nindex 7f146d606..d379850bb 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.c\n+++ b/drivers/net/bnxt/bnxt_hwrm.c\n@@ -2975,6 +2975,167 @@ int bnxt_hwrm_port_led_cfg(struct bnxt *bp, bool led_on)\n \treturn rc;\n }\n \n+int bnxt_hwrm_nvm_get_dir_info(struct bnxt *bp, uint32_t *entries,\n+\t\t\t       uint32_t *length)\n+{\n+\tint rc;\n+\tstruct hwrm_nvm_get_dir_info_input req = {0};\n+\tstruct hwrm_nvm_get_dir_info_output *resp = bp->hwrm_cmd_resp_addr;\n+\n+\tHWRM_PREP(req, NVM_GET_DIR_INFO);\n+\n+\trc = bnxt_hwrm_send_message(bp, &req, sizeof(req));\n+\n+\tHWRM_CHECK_RESULT();\n+\tHWRM_UNLOCK();\n+\n+\tif (!rc) {\n+\t\t*entries = rte_le_to_cpu_32(resp->entries);\n+\t\t*length = rte_le_to_cpu_32(resp->entry_length);\n+\t}\n+\treturn rc;\n+}\n+\n+int bnxt_get_nvram_directory(struct bnxt *bp, uint32_t len, uint8_t *data)\n+{\n+\tint rc;\n+\tuint32_t dir_entries;\n+\tuint32_t entry_length;\n+\tuint8_t *buf;\n+\tsize_t buflen;\n+\tphys_addr_t dma_handle;\n+\tstruct hwrm_nvm_get_dir_entries_input req = {0};\n+\tstruct hwrm_nvm_get_dir_entries_output *resp = bp->hwrm_cmd_resp_addr;\n+\n+\trc = bnxt_hwrm_nvm_get_dir_info(bp, &dir_entries, &entry_length);\n+\tif (rc != 0)\n+\t\treturn rc;\n+\n+\t*data++ = dir_entries;\n+\t*data++ = entry_length;\n+\tlen -= 2;\n+\tmemset(data, 0xff, len);\n+\n+\tbuflen = dir_entries * entry_length;\n+\tbuf = rte_malloc(\"nvm_dir\", buflen, 0);\n+\trte_mem_lock_page(buf);\n+\tif (buf == NULL)\n+\t\treturn -ENOMEM;\n+\tdma_handle = rte_mem_virt2phy(buf);\n+\tif (dma_handle == 0) {\n+\t\tRTE_LOG(ERR, PMD,\n+\t\t\t\"unable to map response address to physical memory\\n\");\n+\t\treturn -ENOMEM;\n+\t}\n+\tHWRM_PREP(req, NVM_GET_DIR_ENTRIES);\n+\treq.host_dest_addr = rte_cpu_to_le_64(dma_handle);\n+\trc = bnxt_hwrm_send_message(bp, &req, sizeof(req));\n+\n+\tHWRM_CHECK_RESULT();\n+\tHWRM_UNLOCK();\n+\n+\tif (rc == 0)\n+\t\tmemcpy(data, buf, len > buflen ? buflen : len);\n+\n+\trte_free(buf);\n+\n+\treturn rc;\n+}\n+\n+int bnxt_hwrm_get_nvram_item(struct bnxt *bp, uint32_t index,\n+\t\t\t     uint32_t offset, uint32_t length,\n+\t\t\t     uint8_t *data)\n+{\n+\tint rc;\n+\tuint8_t *buf;\n+\tphys_addr_t dma_handle;\n+\tstruct hwrm_nvm_read_input req = {0};\n+\tstruct hwrm_nvm_read_output *resp = bp->hwrm_cmd_resp_addr;\n+\n+\tbuf = rte_malloc(\"nvm_item\", length, 0);\n+\trte_mem_lock_page(buf);\n+\tif (!buf)\n+\t\treturn -ENOMEM;\n+\n+\tdma_handle = rte_mem_virt2phy(buf);\n+\tif (dma_handle == 0) {\n+\t\tRTE_LOG(ERR, PMD,\n+\t\t\t\"unable to map response address to physical memory\\n\");\n+\t\treturn -ENOMEM;\n+\t}\n+\tHWRM_PREP(req, NVM_READ);\n+\treq.host_dest_addr = rte_cpu_to_le_64(dma_handle);\n+\treq.dir_idx = rte_cpu_to_le_16(index);\n+\treq.offset = rte_cpu_to_le_32(offset);\n+\treq.len = rte_cpu_to_le_32(length);\n+\trc = bnxt_hwrm_send_message(bp, &req, sizeof(req));\n+\tHWRM_CHECK_RESULT();\n+\tHWRM_UNLOCK();\n+\tif (rc == 0)\n+\t\tmemcpy(data, buf, length);\n+\n+\trte_free(buf);\n+\treturn rc;\n+}\n+\n+int bnxt_hwrm_erase_nvram_directory(struct bnxt *bp, uint8_t index)\n+{\n+\tint rc;\n+\tstruct hwrm_nvm_erase_dir_entry_input req = {0};\n+\tstruct hwrm_nvm_erase_dir_entry_output *resp = bp->hwrm_cmd_resp_addr;\n+\n+\tHWRM_PREP(req, NVM_ERASE_DIR_ENTRY);\n+\treq.dir_idx = rte_cpu_to_le_16(index);\n+\trc = bnxt_hwrm_send_message(bp, &req, sizeof(req));\n+\tHWRM_CHECK_RESULT();\n+\tHWRM_UNLOCK();\n+\n+\treturn rc;\n+}\n+\n+\n+int bnxt_hwrm_flash_nvram(struct bnxt *bp, uint16_t dir_type,\n+\t\t\t  uint16_t dir_ordinal, uint16_t dir_ext,\n+\t\t\t  uint16_t dir_attr, const uint8_t *data,\n+\t\t\t  size_t data_len)\n+{\n+\tint rc;\n+\tstruct hwrm_nvm_write_input req = {0};\n+\tstruct hwrm_nvm_write_output *resp = bp->hwrm_cmd_resp_addr;\n+\tphys_addr_t dma_handle;\n+\tuint8_t *buf;\n+\n+\tHWRM_PREP(req, NVM_WRITE);\n+\n+\treq.dir_type = rte_cpu_to_le_16(dir_type);\n+\treq.dir_ordinal = rte_cpu_to_le_16(dir_ordinal);\n+\treq.dir_ext = rte_cpu_to_le_16(dir_ext);\n+\treq.dir_attr = rte_cpu_to_le_16(dir_attr);\n+\treq.dir_data_length = rte_cpu_to_le_32(data_len);\n+\n+\tbuf = rte_malloc(\"nvm_write\", data_len, 0);\n+\trte_mem_lock_page(buf);\n+\tif (!buf)\n+\t\treturn -ENOMEM;\n+\n+\tdma_handle = rte_mem_virt2phy(buf);\n+\tif (dma_handle == 0) {\n+\t\tRTE_LOG(ERR, PMD,\n+\t\t\t\"unable to map response address to physical memory\\n\");\n+\t\treturn -ENOMEM;\n+\t}\n+\tmemcpy(buf, data, data_len);\n+\treq.host_src_addr = rte_cpu_to_le_64(dma_handle);\n+\n+\trc = bnxt_hwrm_send_message(bp, &req, sizeof(req));\n+\n+\tHWRM_CHECK_RESULT();\n+\tHWRM_UNLOCK();\n+\n+\trte_free(buf);\n+\treturn rc;\n+}\n+\n static void\n bnxt_vnic_count(struct bnxt_vnic_info *vnic __rte_unused, void *cbdata)\n {\ndiff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h\nindex b41cc5af3..85083e619 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.h\n+++ b/drivers/net/bnxt/bnxt_hwrm.h\n@@ -164,4 +164,15 @@ int bnxt_hwrm_set_ntuple_filter(struct bnxt *bp, uint16_t dst_id,\n \t\t\t struct bnxt_filter_info *filter);\n int bnxt_hwrm_clear_ntuple_filter(struct bnxt *bp,\n \t\t\t\tstruct bnxt_filter_info *filter);\n+int bnxt_get_nvram_directory(struct bnxt *bp, uint32_t len, uint8_t *data);\n+int bnxt_hwrm_nvm_get_dir_info(struct bnxt *bp, uint32_t *entries,\n+\t\t\t       uint32_t *length);\n+int bnxt_hwrm_get_nvram_item(struct bnxt *bp, uint32_t index,\n+\t\t\t     uint32_t offset, uint32_t length,\n+\t\t\t     uint8_t *data);\n+int bnxt_hwrm_erase_nvram_directory(struct bnxt *bp, uint8_t index);\n+int bnxt_hwrm_flash_nvram(struct bnxt *bp, uint16_t dir_type,\n+\t\t\t  uint16_t dir_ordinal, uint16_t dir_ext,\n+\t\t\t  uint16_t dir_attr, const uint8_t *data,\n+\t\t\t  size_t data_len);\n #endif\ndiff --git a/drivers/net/bnxt/bnxt_nvm_defs.h b/drivers/net/bnxt/bnxt_nvm_defs.h\nnew file mode 100644\nindex 000000000..c5ccc9bc4\n--- /dev/null\n+++ b/drivers/net/bnxt/bnxt_nvm_defs.h\n@@ -0,0 +1,75 @@\n+/* Broadcom NetXtreme-C/E network driver.\n+ *\n+ * Copyright (c) 2014-2016 Broadcom Corporation\n+ * Copyright (c) 2016-2017 Broadcom Limited\n+ *\n+ * This program is free software; you can redistribute it and/or modify\n+ * it under the terms of the GNU General Public License as published by\n+ * the Free Software Foundation.\n+ */\n+\n+#ifndef _BNXT_NVM_DEFS_H_\n+#define _BNXT_NVM_DEFS_H_\n+\n+enum bnxt_nvm_directory_type {\n+\tBNX_DIR_TYPE_UNUSED = 0,\n+\tBNX_DIR_TYPE_PKG_LOG = 1,\n+\tBNX_DIR_TYPE_UPDATE = 2,\n+\tBNX_DIR_TYPE_CHIMP_PATCH = 3,\n+\tBNX_DIR_TYPE_BOOTCODE = 4,\n+\tBNX_DIR_TYPE_VPD = 5,\n+\tBNX_DIR_TYPE_EXP_ROM_MBA = 6,\n+\tBNX_DIR_TYPE_AVS = 7,\n+\tBNX_DIR_TYPE_PCIE = 8,\n+\tBNX_DIR_TYPE_PORT_MACRO = 9,\n+\tBNX_DIR_TYPE_APE_FW = 10,\n+\tBNX_DIR_TYPE_APE_PATCH = 11,\n+\tBNX_DIR_TYPE_KONG_FW = 12,\n+\tBNX_DIR_TYPE_KONG_PATCH = 13,\n+\tBNX_DIR_TYPE_BONO_FW = 14,\n+\tBNX_DIR_TYPE_BONO_PATCH = 15,\n+\tBNX_DIR_TYPE_TANG_FW = 16,\n+\tBNX_DIR_TYPE_TANG_PATCH = 17,\n+\tBNX_DIR_TYPE_BOOTCODE_2 = 18,\n+\tBNX_DIR_TYPE_CCM = 19,\n+\tBNX_DIR_TYPE_PCI_CFG = 20,\n+\tBNX_DIR_TYPE_TSCF_UCODE = 21,\n+\tBNX_DIR_TYPE_ISCSI_BOOT = 22,\n+\tBNX_DIR_TYPE_ISCSI_BOOT_IPV6 = 24,\n+\tBNX_DIR_TYPE_ISCSI_BOOT_IPV4N6 = 25,\n+\tBNX_DIR_TYPE_ISCSI_BOOT_CFG6 = 26,\n+\tBNX_DIR_TYPE_EXT_PHY = 27,\n+\tBNX_DIR_TYPE_SHARED_CFG = 40,\n+\tBNX_DIR_TYPE_PORT_CFG = 41,\n+\tBNX_DIR_TYPE_FUNC_CFG = 42,\n+\tBNX_DIR_TYPE_MGMT_CFG = 48,\n+\tBNX_DIR_TYPE_MGMT_DATA = 49,\n+\tBNX_DIR_TYPE_MGMT_WEB_DATA = 50,\n+\tBNX_DIR_TYPE_MGMT_WEB_META = 51,\n+\tBNX_DIR_TYPE_MGMT_EVENT_LOG = 52,\n+\tBNX_DIR_TYPE_MGMT_AUDIT_LOG = 53\n+};\n+\n+#define BNX_DIR_ORDINAL_FIRST\t\t\t0\n+\n+#define BNX_DIR_EXT_NONE\t\t\t0\n+#define BNX_DIR_EXT_INACTIVE\t\t\t(1 << 0)\n+#define BNX_DIR_EXT_UPDATE\t\t\t(1 << 1)\n+\n+#define BNX_DIR_ATTR_NONE\t\t\t0\n+#define BNX_DIR_ATTR_NO_CHKSUM\t\t\t(1 << 0)\n+#define BNX_DIR_ATTR_PROP_STREAM\t\t(1 << 1)\n+\n+#define BNX_PKG_LOG_MAX_LENGTH\t\t\t4096\n+\n+enum bnxnvm_pkglog_field_index {\n+\tBNX_PKG_LOG_FIELD_IDX_INSTALLED_TIMESTAMP\t= 0,\n+\tBNX_PKG_LOG_FIELD_IDX_PKG_DESCRIPTION\t\t= 1,\n+\tBNX_PKG_LOG_FIELD_IDX_PKG_VERSION\t\t= 2,\n+\tBNX_PKG_LOG_FIELD_IDX_PKG_TIMESTAMP\t\t= 3,\n+\tBNX_PKG_LOG_FIELD_IDX_PKG_CHECKSUM\t\t= 4,\n+\tBNX_PKG_LOG_FIELD_IDX_INSTALLED_ITEMS\t\t= 5,\n+\tBNX_PKG_LOG_FIELD_IDX_INSTALLED_MASK\t\t= 6\n+};\n+\n+#endif\t\t\t\t/* Don't add anything after this line */\ndiff --git a/drivers/net/bnxt/hsi_struct_def_dpdk.h b/drivers/net/bnxt/hsi_struct_def_dpdk.h\nindex a5f871b8d..1b35466a9 100644\n--- a/drivers/net/bnxt/hsi_struct_def_dpdk.h\n+++ b/drivers/net/bnxt/hsi_struct_def_dpdk.h\n@@ -11315,6 +11315,144 @@ struct hwrm_reject_fwd_resp_output {\n \t */\n } __attribute__((packed));\n \n+/* hwrm_nvm_get_dir_entries */\n+/* Input (24 bytes) */\n+struct hwrm_nvm_get_dir_entries_input {\n+\tuint16_t req_type;\n+\tuint16_t cmpl_ring;\n+\tuint16_t seq_id;\n+\tuint16_t target_id;\n+\tuint64_t resp_addr;\n+\tuint64_t host_dest_addr;\n+} __attribute__((packed));\n+\n+/* Output (16 bytes) */\n+struct hwrm_nvm_get_dir_entries_output {\n+\tuint16_t error_code;\n+\tuint16_t req_type;\n+\tuint16_t seq_id;\n+\tuint16_t resp_len;\n+\tuint32_t unused_0;\n+\tuint8_t unused_1;\n+\tuint8_t unused_2;\n+\tuint8_t unused_3;\n+\tuint8_t valid;\n+} __attribute__((packed));\n+\n+\n+/* hwrm_nvm_erase_dir_entry */\n+/* Input (24 bytes) */\n+struct hwrm_nvm_erase_dir_entry_input {\n+\tuint16_t req_type;\n+\tuint16_t cmpl_ring;\n+\tuint16_t seq_id;\n+\tuint16_t target_id;\n+\tuint64_t resp_addr;\n+\tuint16_t dir_idx;\n+\tuint16_t unused_0[3];\n+};\n+\n+/* Output (16 bytes) */\n+struct hwrm_nvm_erase_dir_entry_output {\n+\tuint16_t error_code;\n+\tuint16_t req_type;\n+\tuint16_t seq_id;\n+\tuint16_t resp_len;\n+\tuint32_t unused_0;\n+\tuint8_t unused_1;\n+\tuint8_t unused_2;\n+\tuint8_t unused_3;\n+\tuint8_t valid;\n+};\n+\n+/* hwrm_nvm_get_dir_info */\n+/* Input (16 bytes) */\n+struct hwrm_nvm_get_dir_info_input {\n+\tuint16_t req_type;\n+\tuint16_t cmpl_ring;\n+\tuint16_t seq_id;\n+\tuint16_t target_id;\n+\tuint64_t resp_addr;\n+} __attribute__((packed));\n+\n+/* Output (24 bytes) */\n+struct hwrm_nvm_get_dir_info_output {\n+\tuint16_t error_code;\n+\tuint16_t req_type;\n+\tuint16_t seq_id;\n+\tuint16_t resp_len;\n+\tuint32_t entries;\n+\tuint32_t entry_length;\n+\tuint32_t unused_0;\n+\tuint8_t unused_1;\n+\tuint8_t unused_2;\n+\tuint8_t unused_3;\n+\tuint8_t valid;\n+} __attribute__((packed));\n+\n+\n+/* hwrm_nvm_write */\n+/* Input (48 bytes) */\n+struct hwrm_nvm_write_input {\n+\tuint16_t req_type;\n+\tuint16_t cmpl_ring;\n+\tuint16_t seq_id;\n+\tuint16_t target_id;\n+\tuint64_t resp_addr;\n+\tuint64_t host_src_addr;\n+\tuint16_t dir_type;\n+\tuint16_t dir_ordinal;\n+\tuint16_t dir_ext;\n+\tuint16_t dir_attr;\n+\tuint32_t dir_data_length;\n+\tuint16_t option;\n+\tuint16_t flags;\n+\t#define NVM_WRITE_REQ_FLAGS_KEEP_ORIG_ACTIVE_IMG\t    0x1UL\n+\tuint32_t dir_item_length;\n+\tuint32_t unused_0;\n+};\n+\n+/* Output (16 bytes) */\n+struct hwrm_nvm_write_output {\n+\tuint16_t error_code;\n+\tuint16_t req_type;\n+\tuint16_t seq_id;\n+\tuint16_t resp_len;\n+\tuint32_t dir_item_length;\n+\tuint16_t dir_idx;\n+\tuint8_t unused_0;\n+\tuint8_t valid;\n+};\n+/* hwrm_nvm_read */\n+/* Input (40 bytes) */\n+struct hwrm_nvm_read_input {\n+\tuint16_t req_type;\n+\tuint16_t cmpl_ring;\n+\tuint16_t seq_id;\n+\tuint16_t target_id;\n+\tuint64_t resp_addr;\n+\tuint64_t host_dest_addr;\n+\tuint16_t dir_idx;\n+\tuint8_t unused_0;\n+\tuint8_t unused_1;\n+\tuint32_t offset;\n+\tuint32_t len;\n+\tuint32_t unused_2;\n+} __attribute__((packed));\n+\n+/* Output (16 bytes) */\n+struct hwrm_nvm_read_output {\n+\tuint16_t error_code;\n+\tuint16_t req_type;\n+\tuint16_t seq_id;\n+\tuint16_t resp_len;\n+\tuint32_t unused_0;\n+\tuint8_t unused_1;\n+\tuint8_t unused_2;\n+\tuint8_t unused_3;\n+\tuint8_t valid;\n+} __attribute__((packed));\n+\n /* Hardware Resource Manager Specification */\n /* Description: This structure is used to specify port description. */\n /*\n",
    "prefixes": [
        "dpdk-dev",
        "v3",
        "23/24"
    ]
}