get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 88073,
    "url": "http://patches.dpdk.org/api/patches/88073/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1613963747-30047-4-git-send-email-wei.huang@intel.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<1613963747-30047-4-git-send-email-wei.huang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1613963747-30047-4-git-send-email-wei.huang@intel.com",
    "date": "2021-02-22T03:15:46",
    "name": "[v14,3/4] raw/ifpga: add miscellaneous APIs",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "1aaffcb152f989a4077eb9350642a325fa04b219",
    "submitter": {
        "id": 2033,
        "url": "http://patches.dpdk.org/api/people/2033/?format=api",
        "name": "Wei Huang",
        "email": "wei.huang@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1613963747-30047-4-git-send-email-wei.huang@intel.com/mbox/",
    "series": [
        {
            "id": 15324,
            "url": "http://patches.dpdk.org/api/series/15324/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=15324",
            "date": "2021-02-22T03:15:43",
            "name": "raw/ifpga: add extra OPAE APIs",
            "version": 14,
            "mbox": "http://patches.dpdk.org/series/15324/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/88073/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/88073/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 26D11A034F;\n\tMon, 22 Feb 2021 04:16:15 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id C85ED22A30E;\n\tMon, 22 Feb 2021 04:15:54 +0100 (CET)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n by mails.dpdk.org (Postfix) with ESMTP id 690F522A300;\n Mon, 22 Feb 2021 04:15:51 +0100 (CET)",
            "from orsmga003.jf.intel.com ([10.7.209.27])\n by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 21 Feb 2021 19:15:51 -0800",
            "from unknown (HELO sh_lab5_1.sh.intel.com) ([10.238.175.190])\n by orsmga003.jf.intel.com with ESMTP; 21 Feb 2021 19:15:48 -0800"
        ],
        "IronPort-SDR": [
            "\n +mi4pASRWPz6YWkvJsGk+sQ3TVGnRWgpE+X305lGEp4f+Dhsfx3hZMWc8aeuGb2rAQjnK1N6SP\n 3i+5CEKvjvkA==",
            "\n 8OrOaFFT4j8E6mVjeFcRwpemtFMBiJ720w++GR7AOzEHDxT4FXpmAcqPg70u+jvgOurV0up+Er\n +Nu4Fr6V72Jg=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9902\"; a=\"203705893\"",
            "E=Sophos;i=\"5.81,195,1610438400\"; d=\"scan'208\";a=\"203705893\"",
            "E=Sophos;i=\"5.81,195,1610438400\"; d=\"scan'208\";a=\"363814032\""
        ],
        "X-ExtLoop1": "1",
        "From": "Wei Huang <wei.huang@intel.com>",
        "To": "dev@dpdk.org,\n\trosen.xu@intel.com,\n\tqi.z.zhang@intel.com",
        "Cc": "stable@dpdk.org, tianfei.zhang@intel.com, ferruh.yigit@intel.com,\n Wei Huang <wei.huang@intel.com>",
        "Date": "Sun, 21 Feb 2021 22:15:46 -0500",
        "Message-Id": "<1613963747-30047-4-git-send-email-wei.huang@intel.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1613963747-30047-1-git-send-email-wei.huang@intel.com>",
        "References": "<1612921738-26208-1-git-send-email-wei.huang@intel.com>\n <1613963747-30047-1-git-send-email-wei.huang@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v14 3/4] raw/ifpga: add miscellaneous APIs",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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": "Below miscellaneous APIs are used to implement OPAE application.\n1. rte_pmd_ifpga_get_pci_bus() get PCI bus ifpga driver registered.\n2. rte_pmd_ifpga_partial_reconfigure() do partial reconfiguration.\n3. rte_pmd_ifpga_cleanup() free software resources allocated by driver.\n4. rte_pmd_ifpga_set_rsu_status() set status of rsu process.\n\nSigned-off-by: Wei Huang <wei.huang@intel.com>\nAcked-by: Tianfei Zhang <tianfei.zhang@intel.com>\nAcked-by: Rosen Xu <rosen.xu@intel.com>\n---\nv2: implement APIs in rte_pmd_ifpga.c\n---\n drivers/raw/ifpga/ifpga_rawdev.c  | 30 ++++++++++++++\n drivers/raw/ifpga/ifpga_rawdev.h  |  7 +++-\n drivers/raw/ifpga/rte_pmd_ifpga.c | 45 +++++++++++++++++++++\n drivers/raw/ifpga/rte_pmd_ifpga.h | 66 +++++++++++++++++++++++++++++++\n drivers/raw/ifpga/version.map     |  4 ++\n 5 files changed, 151 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c\nindex 27129b133e..05d79bfcc2 100644\n--- a/drivers/raw/ifpga/ifpga_rawdev.c\n+++ b/drivers/raw/ifpga/ifpga_rawdev.c\n@@ -1737,3 +1737,33 @@ RTE_PMD_REGISTER_PARAM_STRING(ifpga_rawdev_cfg,\n \t\"ifpga=<string> \"\n \t\"port=<int> \"\n \t\"afu_bts=<path>\");\n+\n+struct rte_pci_bus *ifpga_get_pci_bus(void)\n+{\n+\treturn rte_ifpga_rawdev_pmd.bus;\n+}\n+\n+int ifpga_rawdev_partial_reconfigure(struct rte_rawdev *dev, int port,\n+\tconst char *file)\n+{\n+\tif (!dev) {\n+\t\tIFPGA_RAWDEV_PMD_ERR(\"Input parameter is invalid\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\treturn rte_fpga_do_pr(dev, port, file);\n+}\n+\n+void ifpga_rawdev_cleanup(void)\n+{\n+\tstruct ifpga_rawdev *dev;\n+\tunsigned int i;\n+\n+\tfor (i = 0; i < IFPGA_RAWDEV_NUM; i++) {\n+\t\tdev = &ifpga_rawdevices[i];\n+\t\tif (dev->rawdev) {\n+\t\t\trte_rawdev_pmd_release(dev->rawdev);\n+\t\t\tdev->rawdev = NULL;\n+\t\t}\n+\t}\n+}\ndiff --git a/drivers/raw/ifpga/ifpga_rawdev.h b/drivers/raw/ifpga/ifpga_rawdev.h\nindex 7754beb02b..9bbe9a4278 100644\n--- a/drivers/raw/ifpga/ifpga_rawdev.h\n+++ b/drivers/raw/ifpga/ifpga_rawdev.h\n@@ -43,7 +43,7 @@ enum ifpga_rawdev_device_state {\n static inline struct opae_adapter *\n ifpga_rawdev_get_priv(const struct rte_rawdev *rawdev)\n {\n-\treturn rawdev->dev_private;\n+\treturn (struct opae_adapter *)rawdev->dev_private;\n }\n \n #define IFPGA_RAWDEV_MSIX_IRQ_NUM 7\n@@ -76,4 +76,9 @@ int\n ifpga_unregister_msix_irq(enum ifpga_irq_type type,\n \t\tint vec_start, rte_intr_callback_fn handler, void *arg);\n \n+struct rte_pci_bus *ifpga_get_pci_bus(void);\n+int ifpga_rawdev_partial_reconfigure(struct rte_rawdev *dev, int port,\n+\tconst char *file);\n+void ifpga_rawdev_cleanup(void);\n+\n #endif /* _IFPGA_RAWDEV_H_ */\ndiff --git a/drivers/raw/ifpga/rte_pmd_ifpga.c b/drivers/raw/ifpga/rte_pmd_ifpga.c\nindex 8e04e22d5f..6e23a2581a 100644\n--- a/drivers/raw/ifpga/rte_pmd_ifpga.c\n+++ b/drivers/raw/ifpga/rte_pmd_ifpga.c\n@@ -122,6 +122,25 @@ rte_pmd_ifpga_get_rsu_status(uint16_t dev_id, uint32_t *stat, uint32_t *prog)\n \treturn 0;\n }\n \n+int\n+rte_pmd_ifpga_set_rsu_status(uint16_t dev_id, uint32_t stat, uint32_t prog)\n+{\n+\tstruct opae_adapter *adapter = NULL;\n+\topae_share_data *sd = NULL;\n+\n+\tadapter = get_opae_adapter(dev_id);\n+\tif (!adapter)\n+\t\treturn -ENODEV;\n+\n+\tsd = get_share_data(adapter);\n+\tif (!sd)\n+\t\treturn -ENOMEM;\n+\n+\tsd->rsu_stat = IFPGA_RSU_STATUS(stat, prog);\n+\n+\treturn 0;\n+}\n+\n static int\n ifpga_is_rebooting(struct opae_adapter *adapter)\n {\n@@ -382,3 +401,29 @@ rte_pmd_ifpga_reload(uint16_t dev_id, int type, int page)\n \n \treturn opae_mgr_reload(adapter->mgr, type, page);\n }\n+\n+const struct rte_pci_bus *\n+rte_pmd_ifpga_get_pci_bus(void)\n+{\n+\treturn ifpga_get_pci_bus();\n+}\n+\n+int\n+rte_pmd_ifpga_partial_reconfigure(uint16_t dev_id, int port, const char *file)\n+{\n+\tstruct rte_rawdev *dev = NULL;\n+\n+\tdev = get_rte_rawdev(dev_id);\n+\tif (!dev) {\n+\t\tIFPGA_RAWDEV_PMD_ERR(\"Device ID %u is invalid.\", dev_id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\treturn ifpga_rawdev_partial_reconfigure(dev, port, file);\n+}\n+\n+void\n+rte_pmd_ifpga_cleanup(void)\n+{\n+\tifpga_rawdev_cleanup();\n+}\ndiff --git a/drivers/raw/ifpga/rte_pmd_ifpga.h b/drivers/raw/ifpga/rte_pmd_ifpga.h\nindex 633f6e9d1b..47d66ba655 100644\n--- a/drivers/raw/ifpga/rte_pmd_ifpga.h\n+++ b/drivers/raw/ifpga/rte_pmd_ifpga.h\n@@ -107,6 +107,27 @@ __rte_experimental\n int\n rte_pmd_ifpga_get_rsu_status(uint16_t dev_id, uint32_t *stat, uint32_t *prog);\n \n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice\n+ *\n+ * Set current RSU status of the specified Intel FPGA device\n+ *\n+ * @param dev_id\n+ *    The raw device ID of specified Intel FPGA device.\n+ * @param stat\n+ *    The RSU status value to set.\n+ * @param prog\n+ *    The RSU progress value to set.\n+ * @return\n+ *   - (0) if successful.\n+ *   - (-ENODEV) if dev_id is invalid.\n+ *   - (-ENOMEM) if share data is not initialized.\n+ */\n+__rte_experimental\n+int\n+rte_pmd_ifpga_set_rsu_status(uint16_t dev_id, uint32_t stat, uint32_t prog);\n+\n /**\n  * @warning\n  * @b EXPERIMENTAL: this API may change, or be removed, without prior notice\n@@ -235,6 +256,51 @@ __rte_experimental\n int\n rte_pmd_ifpga_reload(uint16_t dev_id, int type, int page);\n \n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice\n+ *\n+ * Get PCI bus the Intel FPGA driver register to\n+ *\n+ * @return\n+ *   - (valid pointer) if successful.\n+ *   - (NULL) if the Intel FPGA driver is not registered to any PCI bus.\n+ */\n+__rte_experimental\n+const struct rte_pci_bus *\n+rte_pmd_ifpga_get_pci_bus(void);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice\n+ *\n+ * Perform PR (partial reconfiguration) on specified Intel FPGA device\n+ *\n+ * @param dev_id\n+ *   The raw device ID of specified Intel FPGA device.\n+ * @param port\n+ *   The port index of the partial reconfiguration area.\n+ * @param file\n+ *   The GBS (Green BitStream) image file name string.\n+ * @return\n+ *   - (0) if successful.\n+ *   - (-EINVAL) if bad parameter or operation failed.\n+ *   - (-ENOMEM) if failed to allocate memory.\n+ */\n+__rte_experimental\n+int\n+rte_pmd_ifpga_partial_reconfigure(uint16_t dev_id, int port, const char *file);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice\n+ *\n+ * Free software resources allocated by Intel FPGA PMD\n+ */\n+__rte_experimental\n+void\n+rte_pmd_ifpga_cleanup(void);\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/drivers/raw/ifpga/version.map b/drivers/raw/ifpga/version.map\nindex ca6f7f5810..995c419a9b 100644\n--- a/drivers/raw/ifpga/version.map\n+++ b/drivers/raw/ifpga/version.map\n@@ -8,10 +8,14 @@ EXPERIMENTAL {\n \t# added in 21.05\n \trte_pmd_ifpga_get_dev_id;\n \trte_pmd_ifpga_get_rsu_status;\n+\trte_pmd_ifpga_set_rsu_status;\n \trte_pmd_ifpga_get_property;\n \trte_pmd_ifpga_get_phy_info;\n \trte_pmd_ifpga_update_flash;\n \trte_pmd_ifpga_stop_update;\n \trte_pmd_ifpga_reboot_try;\n \trte_pmd_ifpga_reload;\n+\trte_pmd_ifpga_get_pci_bus;\n+\trte_pmd_ifpga_partial_reconfigure;\n+\trte_pmd_ifpga_cleanup;\n };\n",
    "prefixes": [
        "v14",
        "3/4"
    ]
}