Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/42449/?format=api
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" ] }{ "id": 42449, "url": "