get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 45054,
    "url": "https://patches.dpdk.org/api/patches/45054/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1537465276-77264-1-git-send-email-nikhil.rao@intel.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": "<1537465276-77264-1-git-send-email-nikhil.rao@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1537465276-77264-1-git-send-email-nikhil.rao@intel.com",
    "date": "2018-09-20T17:41:12",
    "name": "[v4,1/5] eventdev: add eth Tx adapter APIs",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "36203b5a4baeb78e6cf16dc2cd659c714b704237",
    "submitter": {
        "id": 528,
        "url": "https://patches.dpdk.org/api/people/528/?format=api",
        "name": "Rao, Nikhil",
        "email": "nikhil.rao@intel.com"
    },
    "delegate": {
        "id": 310,
        "url": "https://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1537465276-77264-1-git-send-email-nikhil.rao@intel.com/mbox/",
    "series": [
        {
            "id": 1426,
            "url": "https://patches.dpdk.org/api/series/1426/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=1426",
            "date": "2018-09-20T17:41:12",
            "name": "[v4,1/5] eventdev: add eth Tx adapter APIs",
            "version": 4,
            "mbox": "https://patches.dpdk.org/series/1426/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/45054/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/45054/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 39AB21B127;\n\tThu, 20 Sep 2018 19:42:11 +0200 (CEST)",
            "from mga17.intel.com (mga17.intel.com [192.55.52.151])\n\tby dpdk.org (Postfix) with ESMTP id EDDA71B123\n\tfor <dev@dpdk.org>; Thu, 20 Sep 2018 19:42:08 +0200 (CEST)",
            "from orsmga006.jf.intel.com ([10.7.209.51])\n\tby fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t20 Sep 2018 10:42:07 -0700",
            "from unknown (HELO localhost.localdomain.localdomain)\n\t([10.224.122.193])\n\tby orsmga006.jf.intel.com with ESMTP; 20 Sep 2018 10:42:04 -0700"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.54,281,1534834800\"; d=\"scan'208\";a=\"75970048\"",
        "From": "Nikhil Rao <nikhil.rao@intel.com>",
        "To": "jerin.jacob@caviumnetworks.com, olivier.matz@6wind.com,\n\tmarko.kovacevic@intel.com, john.mcnamara@intel.com",
        "Cc": "dev@dpdk.org,\n\tNikhil Rao <nikhil.rao@intel.com>",
        "Date": "Thu, 20 Sep 2018 23:11:12 +0530",
        "Message-Id": "<1537465276-77264-1-git-send-email-nikhil.rao@intel.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1535694069-88757-1-git-send-email-nikhil.rao@intel.com>",
        "References": "<1535694069-88757-1-git-send-email-nikhil.rao@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v4 1/5] eventdev: add eth Tx adapter APIs",
        "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 ethernet Tx adapter abstracts the transmit stage of an\nevent driven packet processing application. The transmit\nstage may be implemented with eventdev PMD support or use a\nrte_service function implemented in the adapter. These APIs\nprovide a common configuration and control interface and\nan transmit API for the eventdev PMD implementation.\n\nThe transmit port is specified using mbuf::port. The transmit\nqueue is specified using the rte_event_eth_tx_adapter_txq_set()\nfunction.\n\nSigned-off-by: Nikhil Rao <nikhil.rao@intel.com>\nAcked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>\n---\n lib/librte_eventdev/rte_event_eth_tx_adapter.h | 462 +++++++++++++++++++++++++\n lib/librte_mbuf/rte_mbuf.h                     |   5 +-\n MAINTAINERS                                    |   5 +\n doc/api/doxy-api-index.md                      |   1 +\n 4 files changed, 472 insertions(+), 1 deletion(-)\n create mode 100644 lib/librte_eventdev/rte_event_eth_tx_adapter.h",
    "diff": "diff --git a/lib/librte_eventdev/rte_event_eth_tx_adapter.h b/lib/librte_eventdev/rte_event_eth_tx_adapter.h\nnew file mode 100644\nindex 0000000..3e0d5c6\n--- /dev/null\n+++ b/lib/librte_eventdev/rte_event_eth_tx_adapter.h\n@@ -0,0 +1,462 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018 Intel Corporation.\n+ */\n+\n+#ifndef _RTE_EVENT_ETH_TX_ADAPTER_\n+#define _RTE_EVENT_ETH_TX_ADAPTER_\n+\n+/**\n+ * @file\n+ *\n+ * RTE Event Ethernet Tx Adapter\n+ *\n+ * The event ethernet Tx adapter provides configuration and data path APIs\n+ * for the ethernet transmit stage of an event driven packet processing\n+ * application. These APIs abstract the implementation of the transmit stage\n+ * and allow the application to use eventdev PMD support or a common\n+ * implementation.\n+ *\n+ * In the common implementation, the application enqueues mbufs to the adapter\n+ * which runs as a rte_service function. The service function dequeues events\n+ * from its event port and transmits the mbufs referenced by these events.\n+ *\n+ * The ethernet Tx event adapter APIs are:\n+ *\n+ *  - rte_event_eth_tx_adapter_create()\n+ *  - rte_event_eth_tx_adapter_create_ext()\n+ *  - rte_event_eth_tx_adapter_free()\n+ *  - rte_event_eth_tx_adapter_start()\n+ *  - rte_event_eth_tx_adapter_stop()\n+ *  - rte_event_eth_tx_adapter_queue_add()\n+ *  - rte_event_eth_tx_adapter_queue_del()\n+ *  - rte_event_eth_tx_adapter_stats_get()\n+ *  - rte_event_eth_tx_adapter_stats_reset()\n+ *  - rte_event_eth_tx_adapter_enqueue()\n+ *  - rte_event_eth_tx_adapter_event_port_get()\n+ *  - rte_event_eth_tx_adapter_service_id_get()\n+ *\n+ * The application creates the adapter using\n+ * rte_event_eth_tx_adapter_create() or rte_event_eth_tx_adapter_create_ext().\n+ *\n+ * The adapter will use the common implementation when the eventdev PMD\n+ * does not have the RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT capability.\n+ * The common implementation uses an event port that is created using the port\n+ * configuration parameter passed to rte_event_eth_tx_adapter_create(). The\n+ * application can get the port identifier using\n+ * rte_event_eth_tx_adapter_event_port_get() and must link an event queue to\n+ * this port.\n+ *\n+ * If the eventdev PMD has the RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT\n+ * flags set, Tx adapter events should be enqueued using the\n+ * rte_event_eth_tx_adapter_enqueue() function, else the application should\n+ * use rte_event_enqueue_burst().\n+ *\n+ * Transmit queues can be added and deleted from the adapter using\n+ * rte_event_eth_tx_adapter_queue_add()/del() APIs respectively.\n+ *\n+ * The application can start and stop the adapter using the\n+ * rte_event_eth_tx_adapter_start/stop() calls.\n+ *\n+ * The common adapter implementation uses an EAL service function as described\n+ * before and its execution is controlled using the rte_service APIs. The\n+ * rte_event_eth_tx_adapter_service_id_get()\n+ * function can be used to retrieve the adapter's service function ID.\n+ *\n+ * The ethernet port and transmit queue index to transmit the mbuf on are\n+ * specified using the mbuf port and the higher 16 bits of\n+ * struct rte_mbuf::hash::sched:hi. The application should use the\n+ * rte_event_eth_tx_adapter_txq_set() and rte_event_eth_tx_adapter_txq_get()\n+ * functions to access the transmit queue index since it is expected that the\n+ * transmit queue will be eventually defined within struct rte_mbuf and using\n+ * these macros will help with minimizing application impact due to\n+ * a change in how the transmit queue index is specified.\n+ */\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include <stdint.h>\n+\n+#include <rte_mbuf.h>\n+\n+#include \"rte_eventdev.h\"\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Adapter configuration structure\n+ *\n+ * @see rte_event_eth_tx_adapter_create_ext\n+ * @see rte_event_eth_tx_adapter_conf_cb\n+ */\n+struct rte_event_eth_tx_adapter_conf {\n+\tuint8_t event_port_id;\n+\t/**< Event port identifier, the adapter service function dequeues mbuf\n+\t * events from this port.\n+\t * @see RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT\n+\t */\n+\tuint32_t max_nb_tx;\n+\t/**< The adapter can return early if it has processed at least\n+\t * max_nb_tx mbufs. This isn't treated as a requirement; batching may\n+\t * cause the adapter to process more than max_nb_tx mbufs.\n+\t */\n+};\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Function type used for adapter configuration callback. The callback is\n+ * used to fill in members of the struct rte_event_eth_tx_adapter_conf, this\n+ * callback is invoked when creating a RTE service function based\n+ * adapter implementation.\n+ *\n+ * @param id\n+ *  Adapter identifier.\n+ * @param dev_id\n+ *  Event device identifier.\n+ * @param [out] conf\n+ *  Structure that needs to be populated by this callback.\n+ * @param arg\n+ *  Argument to the callback. This is the same as the conf_arg passed to the\n+ *  rte_event_eth_tx_adapter_create_ext().\n+ *\n+ * @return\n+ *   - 0: Success\n+ *   - <0: Error code on failure\n+ */\n+typedef int (*rte_event_eth_tx_adapter_conf_cb) (uint8_t id, uint8_t dev_id,\n+\t\t\t\tstruct rte_event_eth_tx_adapter_conf *conf,\n+\t\t\t\tvoid *arg);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * A structure used to retrieve statistics for an ethernet Tx adapter instance.\n+ */\n+struct rte_event_eth_tx_adapter_stats {\n+\tuint64_t tx_retry;\n+\t/**< Number of transmit retries */\n+\tuint64_t tx_packets;\n+\t/**< Number of packets transmitted */\n+\tuint64_t tx_dropped;\n+\t/**< Number of packets dropped */\n+};\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Create a new ethernet Tx adapter with the specified identifier.\n+ *\n+ * @param id\n+ *  The identifier of the ethernet Tx adapter.\n+ * @param dev_id\n+ *  The event device identifier.\n+ * @param port_config\n+ *  Event port configuration, the adapter uses this configuration to\n+ *  create an event port if needed.\n+ * @return\n+ *   - 0: Success\n+ *   - <0: Error code on failure\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_create(uint8_t id, uint8_t dev_id,\n+\t\t\t\tstruct rte_event_port_conf *port_config);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Create a new ethernet Tx adapter with the specified identifier.\n+ *\n+ * @param id\n+ *  The identifier of the ethernet Tx adapter.\n+ * @param dev_id\n+ *  The event device identifier.\n+ * @param conf_cb\n+ *  Callback function that initializes members of the\n+ *  struct rte_event_eth_tx_adapter_conf struct passed into\n+ *  it.\n+ * @param conf_arg\n+ *  Argument that is passed to the conf_cb function.\n+ * @return\n+ *   - 0: Success\n+ *   - <0: Error code on failure\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_create_ext(uint8_t id, uint8_t dev_id,\n+\t\t\t\trte_event_eth_tx_adapter_conf_cb conf_cb,\n+\t\t\t\tvoid *conf_arg);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Free an ethernet Tx adapter\n+ *\n+ * @param id\n+ *  Adapter identifier.\n+ * @return\n+ *   - 0: Success\n+ *   - <0: Error code on failure, If the adapter still has Tx queues\n+ *      added to it, the function returns -EBUSY.\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_free(uint8_t id);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Start ethernet Tx adapter\n+ *\n+ * @param id\n+ *  Adapter identifier.\n+ * @return\n+ *  - 0: Success, Adapter started correctly.\n+ *  - <0: Error code on failure.\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_start(uint8_t id);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Stop ethernet Tx adapter\n+ *\n+ * @param id\n+ *  Adapter identifier.\n+ * @return\n+ *  - 0: Success.\n+ *  - <0: Error code on failure.\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_stop(uint8_t id);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\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 id\n+ *  Adapter identifier.\n+ * @param eth_dev_id\n+ *  Ethernet Port Identifier.\n+ * @param queue\n+ *  Tx queue index.\n+ * @return\n+ *  - 0: Success, Queues added successfully.\n+ *  - <0: Error code on failure.\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_queue_add(uint8_t id,\n+\t\t\t\tuint16_t eth_dev_id,\n+\t\t\t\tint32_t queue);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\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 id\n+ *  Adapter identifier.\n+ * @param eth_dev_id\n+ *  Ethernet Port Identifier.\n+ * @param queue\n+ *  Tx queue index.\n+ * @return\n+ *  - 0: Success, Queues deleted successfully.\n+ *  - <0: Error code on failure.\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_queue_del(uint8_t id,\n+\t\t\t\tuint16_t eth_dev_id,\n+\t\t\t\tint32_t queue);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Set Tx queue in the mbuf. This queue is used by the  adapter\n+ * to transmit the mbuf.\n+ *\n+ * @param pkt\n+ *  Pointer to the mbuf.\n+ * @param queue\n+ *  Tx queue index.\n+ */\n+static __rte_always_inline void __rte_experimental\n+rte_event_eth_tx_adapter_txq_set(struct rte_mbuf *pkt, uint16_t queue)\n+{\n+\tuint16_t *p = (uint16_t *)&pkt->hash.sched.hi;\n+\tp[1] = queue;\n+}\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Retrieve Tx queue from the mbuf.\n+ *\n+ * @param pkt\n+ *  Pointer to the mbuf.\n+ * @return\n+ *  Tx queue identifier.\n+ *\n+ * @see rte_event_eth_tx_adapter_txq_set()\n+ */\n+static __rte_always_inline uint16_t __rte_experimental\n+rte_event_eth_tx_adapter_txq_get(struct rte_mbuf *pkt)\n+{\n+\tuint16_t *p = (uint16_t *)&pkt->hash.sched.hi;\n+\treturn p[1];\n+}\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\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+ * ethernet Tx capabilities of the event device.\n+ *\n+ * @param id\n+ *  Adapter Identifier.\n+ * @param[out] event_port_id\n+ *  Event port pointer.\n+ * @return\n+ *   - 0: Success.\n+ *   - <0: Error code on failure.\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_event_port_get(uint8_t id, uint8_t *event_port_id);\n+\n+/**\n+ * Enqueue a burst of events objects or an event object supplied in *rte_event*\n+ * structure on an  event device designated by its *dev_id* through the event\n+ * port specified by *port_id*. This function is supported if the eventdev PMD\n+ * has the RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT capability flag set.\n+ *\n+ * The *nb_events* parameter is the number of event objects to enqueue which are\n+ * supplied in the *ev* array of *rte_event* structure.\n+ *\n+ * The rte_event_eth_tx_adapter_enqueue() function returns the number of\n+ * events objects it actually enqueued. A return value equal to *nb_events*\n+ * means that all event objects have been enqueued.\n+ *\n+ * @param dev_id\n+ *  The identifier of the device.\n+ * @param port_id\n+ *  The identifier of the event port.\n+ * @param ev\n+ *  Points to an array of *nb_events* objects of type *rte_event* structure\n+ *  which contain the event object enqueue operations to be processed.\n+ * @param nb_events\n+ *  The number of event objects to enqueue, typically number of\n+ *  rte_event_port_enqueue_depth() available for this port.\n+ *\n+ * @return\n+ *   The number of event objects actually enqueued on the event device. The\n+ *   return value can be less than the value of the *nb_events* parameter when\n+ *   the event devices queue is full or if invalid parameters are specified in a\n+ *   *rte_event*. If the return value is less than *nb_events*, the remaining\n+ *   events at the end of ev[] are not consumed and the caller has to take care\n+ *   of them, and rte_errno is set accordingly. Possible errno values include:\n+ *   - -EINVAL  The port ID is invalid, device ID is invalid, an event's queue\n+ *              ID is invalid, or an event's sched type doesn't match the\n+ *              capabilities of the destination queue.\n+ *   - -ENOSPC  The event port was backpressured and unable to enqueue\n+ *              one or more events. This error code is only applicable to\n+ *              closed systems.\n+ */\n+static inline uint16_t __rte_experimental\n+rte_event_eth_tx_adapter_enqueue(uint8_t dev_id,\n+\t\t\t\tuint8_t port_id,\n+\t\t\t\tstruct rte_event ev[],\n+\t\t\t\tuint16_t nb_events)\n+{\n+\tconst struct rte_eventdev *dev = &rte_eventdevs[dev_id];\n+\n+#ifdef RTE_LIBRTE_EVENTDEV_DEBUG\n+\tif (dev_id >= RTE_EVENT_MAX_DEVS ||\n+\t\t!rte_eventdevs[dev_id].attached) {\n+\t\trte_errno = -EINVAL;\n+\t\treturn 0;\n+\t}\n+\n+\tif (port_id >= dev->data->nb_ports) {\n+\t\trte_errno = -EINVAL;\n+\t\treturn 0;\n+\t}\n+#endif\n+\treturn dev->txa_enqueue(dev->data->ports[port_id], ev, nb_events);\n+}\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Retrieve statistics for an adapter\n+ *\n+ * @param id\n+ *  Adapter identifier.\n+ * @param [out] stats\n+ *  A pointer to structure used to retrieve statistics for an adapter.\n+ * @return\n+ *  - 0: Success, statistics retrieved successfully.\n+ *  - <0: Error code on failure.\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_stats_get(uint8_t id,\n+\t\t\t\tstruct rte_event_eth_tx_adapter_stats *stats);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Reset statistics for an adapter.\n+ *\n+ * @param id\n+ *  Adapter identifier.\n+ * @return\n+ *  - 0: Success, statistics reset successfully.\n+ *  - <0: Error code on failure.\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_stats_reset(uint8_t id);\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Retrieve the service ID of an adapter. If the adapter doesn't use\n+ * a rte_service function, this function returns -ESRCH.\n+ *\n+ * @param id\n+ *  Adapter identifier.\n+ * @param [out] service_id\n+ *  A pointer to a uint32_t, to be filled in with the service id.\n+ * @return\n+ *  - 0: Success\n+ *  - <0: Error code on failure, if the adapter doesn't use a rte_service\n+ * function, this function returns -ESRCH.\n+ */\n+int __rte_experimental\n+rte_event_eth_tx_adapter_service_id_get(uint8_t id, uint32_t *service_id);\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+#endif\t/* _RTE_EVENT_ETH_TX_ADAPTER_ */\ndiff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h\nindex a50b05c..b47a5c5 100644\n--- a/lib/librte_mbuf/rte_mbuf.h\n+++ b/lib/librte_mbuf/rte_mbuf.h\n@@ -464,7 +464,9 @@ struct rte_mbuf {\n \t};\n \tuint16_t nb_segs;         /**< Number of segments. */\n \n-\t/** Input port (16 bits to support more than 256 virtual ports). */\n+\t/** Input port (16 bits to support more than 256 virtual ports).\n+\t * The event eth Tx adapter uses this field to specify the output port.\n+\t */\n \tuint16_t port;\n \n \tuint64_t ol_flags;        /**< Offload features. */\n@@ -530,6 +532,7 @@ struct rte_mbuf {\n \t\tstruct {\n \t\t\tuint32_t lo;\n \t\t\tuint32_t hi;\n+\t\t\t/**< @see rte_event_eth_tx_adapter_txq_set */\n \t\t} sched;          /**< Hierarchical scheduler */\n \t\tuint32_t usr;\t  /**< User defined tags. See rte_distributor_process() */\n \t} hash;                   /**< hash information */\ndiff --git a/MAINTAINERS b/MAINTAINERS\nindex f222701..3f06b56 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -391,6 +391,11 @@ F: lib/librte_eventdev/*crypto_adapter*\n F: test/test/test_event_crypto_adapter.c\n F: doc/guides/prog_guide/event_crypto_adapter.rst\n \n+Eventdev Ethdev Tx Adapter API - EXPERIMENTAL\n+M: Nikhil Rao <nikhil.rao@intel.com>\n+T: git://dpdk.org/next/dpdk-next-eventdev\n+F: lib/librte_eventdev/*eth_tx_adapter*\n+\n Raw device API - EXPERIMENTAL\n M: Shreyansh Jain <shreyansh.jain@nxp.com>\n M: Hemant Agrawal <hemant.agrawal@nxp.com>\ndiff --git a/doc/api/doxy-api-index.md b/doc/api/doxy-api-index.md\nindex 9265907..911a902 100644\n--- a/doc/api/doxy-api-index.md\n+++ b/doc/api/doxy-api-index.md\n@@ -24,6 +24,7 @@ The public API headers are grouped by topics:\n   [event_eth_rx_adapter]   (@ref rte_event_eth_rx_adapter.h),\n   [event_timer_adapter]    (@ref rte_event_timer_adapter.h),\n   [event_crypto_adapter]   (@ref rte_event_crypto_adapter.h),\n+  [event_eth_tx_adapter]   (@ref rte_event_eth_tx_adapter.h),\n   [rawdev]             (@ref rte_rawdev.h),\n   [metrics]            (@ref rte_metrics.h),\n   [bitrate]            (@ref rte_bitrate.h),\n",
    "prefixes": [
        "v4",
        "1/5"
    ]
}