get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 42449,
    "url": "http://patchwork.dpdk.org/api/patches/42449/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/1530859329-160189-2-git-send-email-nikhil.rao@intel.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": "<1530859329-160189-2-git-send-email-nikhil.rao@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1530859329-160189-2-git-send-email-nikhil.rao@intel.com",
    "date": "2018-07-06T06:42:07",
    "name": "[2/4] eventdev: add caps API and PMD callbacks for eth Tx adapter",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "975da87f2d91f993f6b32e73a56417e0ae67b3c4",
    "submitter": {
        "id": 528,
        "url": "http://patchwork.dpdk.org/api/people/528/?format=api",
        "name": "Rao, Nikhil",
        "email": "nikhil.rao@intel.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patchwork.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/1530859329-160189-2-git-send-email-nikhil.rao@intel.com/mbox/",
    "series": [
        {
            "id": 447,
            "url": "http://patchwork.dpdk.org/api/series/447/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=447",
            "date": "2018-07-06T06:42:07",
            "name": "[1/4] eventdev: add eth Tx adapter APIs",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/447/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/42449/comments/",
    "check": "fail",
    "checks": "http://patchwork.dpdk.org/api/patches/42449/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 7B3BE1BEA3;\n\tFri,  6 Jul 2018 08:42:24 +0200 (CEST)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n\tby dpdk.org (Postfix) with ESMTP id 625A51BE4F\n\tfor <dev@dpdk.org>; Fri,  6 Jul 2018 08:42:23 +0200 (CEST)",
            "from fmsmga008.fm.intel.com ([10.253.24.58])\n\tby fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t05 Jul 2018 23:42:22 -0700",
            "from unknown (HELO localhost.localdomain.localdomain)\n\t([10.224.122.193])\n\tby fmsmga008.fm.intel.com with ESMTP; 05 Jul 2018 23:42:15 -0700"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.51,315,1526367600\"; d=\"scan'208\";a=\"53007586\"",
        "From": "Nikhil Rao <nikhil.rao@intel.com>",
        "To": "jerin.jacob@caviumnetworks.com,\n\tolivier.matz@6wind.com",
        "Cc": "nikhil.rao@intel.com,\n\tdev@dpdk.org",
        "Date": "Fri,  6 Jul 2018 12:12:07 +0530",
        "Message-Id": "<1530859329-160189-2-git-send-email-nikhil.rao@intel.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1530859329-160189-1-git-send-email-nikhil.rao@intel.com>",
        "References": "<1530859329-160189-1-git-send-email-nikhil.rao@intel.com>",
        "Subject": "[dpdk-dev] [PATCH 2/4] eventdev: add caps API and PMD callbacks for\n\teth Tx adapter",
        "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\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "The caps API allows the application to query if the transmit\nstage is implemented in the eventdev PMD or uses the common\nrte_service function. The PMD callbacks support the\neventdev PMD implementation of the adapter.\n\nSigned-off-by: Nikhil Rao <nikhil.rao@intel.com>\n---\n lib/librte_eventdev/rte_eventdev.h     |  30 ++++-\n lib/librte_eventdev/rte_eventdev_pmd.h | 193 +++++++++++++++++++++++++++++++++\n lib/librte_eventdev/rte_eventdev.c     |  19 ++++\n 3 files changed, 241 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/lib/librte_eventdev/rte_eventdev.h b/lib/librte_eventdev/rte_eventdev.h\nindex b6fd6ee..e8df526 100644\n--- a/lib/librte_eventdev/rte_eventdev.h\n+++ b/lib/librte_eventdev/rte_eventdev.h\n@@ -1186,6 +1186,28 @@ struct rte_event {\n rte_event_crypto_adapter_caps_get(uint8_t dev_id, uint8_t cdev_id,\n \t\t\t\t  uint32_t *caps);\n \n+/* Ethdev Tx adapter capability bitmap flags */\n+#define RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT\t0x1\n+/**< This flag is sent when the PMD supports a packet transmit callback\n+ */\n+\n+/**\n+ * Retrieve the event device's eth Tx adapter capabilities\n+ *\n+ * @param dev_id\n+ *   The identifier of the device.\n+ *\n+ * @param[out] caps\n+ *   A pointer to memory filled with eth Tx adapter capabilities.\n+ *\n+ * @return\n+ *   - 0: Success, driver provides eth Tx adapter capabilities.\n+ *   - <0: Error code returned by the driver function.\n+ *\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_caps_get(uint8_t dev_id, uint32_t *caps);\n+\n struct rte_eventdev_ops;\n struct rte_eventdev;\n \n@@ -1204,6 +1226,11 @@ typedef uint16_t (*event_dequeue_burst_t)(void *port, struct rte_event ev[],\n \t\tuint16_t nb_events, uint64_t timeout_ticks);\n /**< @internal Dequeue burst of events from port of a device */\n \n+typedef uint16_t (*event_tx_adapter_enqueue)(void *adapter,\n+\t\t\tconst struct rte_eventdev *dev, void *port,\n+\t\t\tstruct rte_event ev[], uint16_t nb_events);\n+/**< @internal Enqueue burst of events on port of a device */\n+\n #define RTE_EVENTDEV_NAME_MAX_LEN\t(64)\n /**< @internal Max length of name of event PMD */\n \n@@ -1266,7 +1293,8 @@ struct rte_eventdev {\n \t/**< Pointer to PMD dequeue function. */\n \tevent_dequeue_burst_t dequeue_burst;\n \t/**< Pointer to PMD dequeue burst function. */\n-\n+\tevent_tx_adapter_enqueue txa_enqueue;\n+\t/**< Pointer to PMD eth Tx adapter enqueue function. */\n \tstruct rte_eventdev_data *data;\n \t/**< Pointer to device data */\n \tstruct rte_eventdev_ops *dev_ops;\ndiff --git a/lib/librte_eventdev/rte_eventdev_pmd.h b/lib/librte_eventdev/rte_eventdev_pmd.h\nindex 3fbb4d2..ccf07a8 100644\n--- a/lib/librte_eventdev/rte_eventdev_pmd.h\n+++ b/lib/librte_eventdev/rte_eventdev_pmd.h\n@@ -789,6 +789,178 @@ typedef int (*eventdev_crypto_adapter_stats_reset)\n \t\t\t(const struct rte_eventdev *dev,\n \t\t\t const struct rte_cryptodev *cdev);\n \n+/**\n+ * Retrieve the event device's eth Tx adapter capabilities.\n+ *\n+ * @param dev\n+ *   Event device pointer\n+ *\n+ * @param[out] caps\n+ *   A pointer to memory filled with eth Tx adapter capabilities.\n+ *\n+ * @return\n+ *   - 0: Success, driver provides eth Tx adapter capabilities\n+ *   - <0: Error code returned by the driver function.\n+ *\n+ */\n+typedef int (*eventdev_eth_tx_adapter_caps_get_t)\n+\t\t\t\t\t(const struct rte_eventdev *dev,\n+\t\t\t\t\tuint32_t *caps);\n+\n+struct rte_event_eth_tx_adapter;\n+\n+/**\n+ * Retrieve the adapter event port. The adapter creates an event port if\n+ * the RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT is not set in the\n+ * eth Tx capabilities of the event device.\n+ *\n+ * @param txa\n+ *  Adapter pointer\n+ *\n+ * @param[out] event_port_id\n+ *  Event port pointer\n+ *\n+ * @return\n+ *   - 0: Success.\n+ *   - <0: Error code on failure.\n+ */\n+typedef int (*eventdev_eth_tx_adapter_event_port_get)\n+\t\t\t\t\t(struct rte_event_eth_tx_adapter *txa,\n+\t\t\t\t\tuint8_t *port);\n+\n+/**\n+ * Initialize adapter PMD resources. This callback is invoked when\n+ * adding the first Tx queue to the adapter.\n+ *\n+ * @param txa\n+ *  Adapter pointer\n+ *\n+ * @return\n+ *   - 0: Success.\n+ *   - <0: Error code on failure.\n+ */\n+typedef int (*eventdev_eth_tx_adapter_init_t)(\n+\t\t\t\t\tstruct rte_event_eth_tx_adapter *txa);\n+\n+/**\n+ * Free adapter PMD resources. This callback is invoked after the last queue\n+ * has been deleted from the adapter.\n+ *\n+ * @param txa\n+ *  Adapter pointer\n+ *\n+ * @return\n+ *   - 0: Success.\n+ *   - <0: Error code on failure.\n+ */\n+typedef int (*eventdev_eth_tx_adapter_free_t)(\n+\t\t\t\t\tstruct rte_event_eth_tx_adapter *txa);\n+\n+/**\n+ * Add a Tx queue to the adapter.\n+ * A queue value of -1 is used to indicate all\n+ * queues within the device.\n+ *\n+ * @param txa\n+ *  Adapter pointer\n+ *\n+ * @param eth_dev\n+ *  Pointer to ethernet device\n+ *\n+ * @param tx_queue_id\n+ *  Transmt queue index\n+ *\n+ * @return\n+ *   - 0: Success.\n+ *   - <0: Error code on failure.\n+ */\n+typedef int (*eventdev_eth_tx_adapter_queue_add_t)(\n+\t\t\t\t\tstruct rte_event_eth_tx_adapter *txa,\n+\t\t\t\t\tconst struct rte_eth_dev *eth_dev,\n+\t\t\t\t\tint32_t tx_queue_id);\n+\n+/**\n+ * Delete a Tx queue from the adapter.\n+ * A queue value of -1 is used to indicate all\n+ * queues within the device, that have been added to this\n+ * adapter.\n+ *\n+ * @param txa\n+ *  Adapter pointer\n+ *\n+ * @param eth_dev_id\n+ *  Ethernet Port Identifier\n+ *\n+ * @param queue\n+ *  Tx queue index\n+ *\n+ * @return\n+ *  - 0: Success, Queues deleted successfully.\n+ *  - <0: Error code on failure.\n+ */\n+typedef int (*eventdev_eth_tx_adapter_queue_del_t)(\n+\t\t\t\t\tstruct rte_event_eth_tx_adapter *txa,\n+\t\t\t\t\tconst struct rte_eth_dev *eth_dev,\n+\t\t\t\t\tint32_t tx_queue_id);\n+\n+/**\n+ * Start the adapter.\n+ *\n+ * @param txa\n+ *  Adapter pointer\n+ *\n+ * @return\n+ *  - 0: Success, Adapter started correctly.\n+ *  - <0: Error code on failure.\n+ */\n+typedef int (*eventdev_eth_tx_adapter_start_t)(\n+\t\t\t\t\tstruct rte_event_eth_tx_adapter *txa);\n+\n+/**\n+ * Stop the adapter.\n+ *\n+ * @param txa\n+ *  Adapter pointer\n+ *\n+ * @return\n+ *  - 0: Success.\n+ *  - <0: Error code on failure.\n+ */\n+typedef int (*eventdev_eth_tx_adapter_stop_t)(\n+\t\t\t\t\tstruct rte_event_eth_tx_adapter *txa);\n+\n+struct rte_event_eth_tx_adapter_stats;\n+\n+/**\n+ * Retrieve statistics for an adapter\n+ *\n+ * @param txa\n+ *  Adapter Pointer\n+ *\n+ * @param [out] stats\n+ *  A pointer to structure used to retrieve statistics for an adapter\n+ *\n+ * @return\n+ *  - 0: Success, statistics retrieved successfully.\n+ *  - <0: Error code on failure.\n+ */\n+typedef int (*eventdev_eth_tx_adapter_stats_get_t)(\n+\t\t\t\tstruct rte_event_eth_tx_adapter *txa,\n+\t\t\t\tstruct rte_event_eth_tx_adapter_stats *stats);\n+\n+/**\n+ * Reset statistics for an adapter\n+ *\n+ * @param txa\n+ *  Adapter Pointer\n+ *\n+ * @return\n+ *  - 0: Success, statistics retrieved successfully.\n+ *  - <0: Error code on failure.\n+ */\n+typedef int (*eventdev_eth_tx_adapter_stats_reset_t)(\n+\t\t\t\t\tstruct rte_event_eth_tx_adapter *txa);\n+\n /** Event device operations function pointer table */\n struct rte_eventdev_ops {\n \teventdev_info_get_t dev_infos_get;\t/**< Get device info. */\n@@ -862,6 +1034,27 @@ struct rte_eventdev_ops {\n \teventdev_crypto_adapter_stats_reset crypto_adapter_stats_reset;\n \t/**< Reset crypto stats */\n \n+\teventdev_eth_tx_adapter_caps_get_t eth_tx_adapter_caps_get;\n+\t/**< Get ethernet Tx adapter capabilities */\n+\teventdev_eth_tx_adapter_event_port_get eth_tx_adapter_event_port_get;\n+\t/**< Get event port */\n+\teventdev_eth_tx_adapter_init_t eth_tx_adapter_init;\n+\t/**< Initialize eth Tx adapter */\n+\teventdev_eth_tx_adapter_free_t eth_tx_adapter_free;\n+\t/**< Free ethernet Tx adapter resources */\n+\teventdev_eth_tx_adapter_queue_add_t eth_tx_adapter_queue_add;\n+\t/**< Add Tx queues to the eth Tx adapter */\n+\teventdev_eth_tx_adapter_queue_del_t eth_tx_adapter_queue_del;\n+\t/**< Delete Tx queues from the eth Tx adapter */\n+\teventdev_eth_tx_adapter_start_t eth_tx_adapter_start;\n+\t/**< Start eth Tx adapter */\n+\teventdev_eth_tx_adapter_stop_t eth_tx_adapter_stop;\n+\t/**< Stop eth Tx adapter */\n+\teventdev_eth_tx_adapter_stats_get_t eth_tx_adapter_stats_get;\n+\t/**< Get eth Tx adapter statistics */\n+\teventdev_eth_tx_adapter_stats_reset_t eth_tx_adapter_stats_reset;\n+\t/**< Reset eth Tx adapter statistics */\n+\n \teventdev_selftest dev_selftest;\n \t/**< Start eventdev Selftest */\n \ndiff --git a/lib/librte_eventdev/rte_eventdev.c b/lib/librte_eventdev/rte_eventdev.c\nindex 801810e..a29fae1 100644\n--- a/lib/librte_eventdev/rte_eventdev.c\n+++ b/lib/librte_eventdev/rte_eventdev.c\n@@ -175,6 +175,25 @@\n \t\t(dev, cdev, caps) : -ENOTSUP;\n }\n \n+int __rte_experimental\n+rte_event_eth_tx_adapter_caps_get(uint8_t dev_id, uint32_t *caps)\n+{\n+\tstruct rte_eventdev *dev;\n+\n+\tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n+\n+\tdev = &rte_eventdevs[dev_id];\n+\n+\tif (caps == NULL)\n+\t\treturn -EINVAL;\n+\t*caps = 0;\n+\n+\treturn dev->dev_ops->eth_tx_adapter_caps_get ?\n+\t\t\t\t(*dev->dev_ops->eth_tx_adapter_caps_get)(dev,\n+\t\t\t\t\t\t\t\t\tcaps)\n+\t\t\t\t: 0;\n+}\n+\n static inline int\n rte_event_dev_queue_config(struct rte_eventdev *dev, uint8_t nb_queues)\n {\n",
    "prefixes": [
        "2/4"
    ]
}