get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 91448,
    "url": "http://patchwork.dpdk.org/api/patches/91448/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20210414122036.1262579-2-gakhil@marvell.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": "<20210414122036.1262579-2-gakhil@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210414122036.1262579-2-gakhil@marvell.com",
    "date": "2021-04-14T12:20:33",
    "name": "[v9,1/4] eventdev: introduce crypto adapter enqueue API",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "03ca9c2f9df49903784196d062e34e3d28dc025f",
    "submitter": {
        "id": 2094,
        "url": "http://patchwork.dpdk.org/api/people/2094/?format=api",
        "name": "Akhil Goyal",
        "email": "gakhil@marvell.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/20210414122036.1262579-2-gakhil@marvell.com/mbox/",
    "series": [
        {
            "id": 16370,
            "url": "http://patchwork.dpdk.org/api/series/16370/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=16370",
            "date": "2021-04-14T12:20:32",
            "name": "Enhancements to crypto adapter forward mode",
            "version": 9,
            "mbox": "http://patchwork.dpdk.org/series/16370/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/91448/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/91448/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 C9BCCA0562;\n\tWed, 14 Apr 2021 14:20:56 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id B2AB2161A3B;\n\tWed, 14 Apr 2021 14:20:56 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n [67.231.148.174])\n by mails.dpdk.org (Postfix) with ESMTP id 005B7161A3A\n for <dev@dpdk.org>; Wed, 14 Apr 2021 14:20:54 +0200 (CEST)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n by mx0a-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id\n 13EC9STu027557; Wed, 14 Apr 2021 05:20:51 -0700",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0a-0016f401.pphosted.com with ESMTP id 37wn4wsyvp-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Wed, 14 Apr 2021 05:20:51 -0700",
            "from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.2;\n Wed, 14 Apr 2021 05:20:50 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.2 via Frontend\n Transport; Wed, 14 Apr 2021 05:20:50 -0700",
            "from localhost.localdomain (unknown [10.28.36.185])\n by maili.marvell.com (Postfix) with ESMTP id 3B52A3F703F;\n Wed, 14 Apr 2021 05:20:44 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0220;\n bh=Nnqo0yymsgVozqfSaxt0tN9IRU1o7oD+HMXHn2h8FT8=;\n b=M4/p+mUSjKR3CQxlLAk2dLTwLMSY0XuzcbvX8uwNZ2044pqsUEBDvT7OO5yFMOkFtRbf\n Zv6dodbNjQvTA4p4oiWCeh94vbRCm0rgbHVMTsI807ATUEnSOrPQT7ntFM9zA+fGcfPF\n SBaSjcowN44o5y5ik57SPS3j+gvXcEEtdoGNA9dcp4W+xBPVy945V3zFRlVHZDTCPCKj\n 2aR9utCJJsRjjT+cRWROoMT7DemfxbfwgYrZNBP8PjGbLnUPtEJtPRN8V1eLFWLq+8Ju\n +tJA5xiSSV186pPXLDEDWPTvZdJ5AFfH2ydzNMvqIshN3HRm2iLzn9vK85ewgNhy55vJ Eg==",
        "From": "<gakhil@marvell.com>",
        "To": "<jerinj@marvell.com>, <thomas@monjalon.net>, <dev@dpdk.org>,\n <mdr@ashroe.eu>, <david.marchand@redhat.com>",
        "CC": "<abhinandan.gujjar@intel.com>, <hemant.agrawal@nxp.com>,\n <nipun.gupta@nxp.com>, <sachin.saxena@oss.nxp.com>,\n <anoobj@marvell.com>, <matan@nvidia.com>, <roy.fan.zhang@intel.com>,\n <g.singh@nxp.com>, <erik.g.carrillo@intel.com>,\n <jay.jayatheerthan@intel.com>, <pbhagavatula@marvell.com>,\n <harry.van.haaren@intel.com>, <sthotton@marvell.com>,\n Akhil Goyal <gakhil@marvell.com>",
        "Date": "Wed, 14 Apr 2021 17:50:33 +0530",
        "Message-ID": "<20210414122036.1262579-2-gakhil@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20210414122036.1262579-1-gakhil@marvell.com>",
        "References": "\n <561328fb16b18404a30a2401c6bfb3a7f373a0f4.1618309291.git.sthotton@marvell.com>\n <20210414122036.1262579-1-gakhil@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "fSjCMvV_EgeE1aYj71g13Lsk53KQg3gd",
        "X-Proofpoint-GUID": "fSjCMvV_EgeE1aYj71g13Lsk53KQg3gd",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:6.0.391, 18.0.761\n definitions=2021-04-14_07:2021-04-14,\n 2021-04-14 signatures=0",
        "Subject": "[dpdk-dev] [PATCH v9 1/4] eventdev: introduce crypto adapter\n enqueue API",
        "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": "From: Akhil Goyal <gakhil@marvell.com>\n\nIn case an event from a previous stage is required to be forwarded\nto a crypto adapter and PMD supports internal event port in crypto\nadapter, exposed via capability\nRTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD, we do not have\na way to check in the API rte_event_enqueue_burst(), whether it is\nfor crypto adapter or for eth tx adapter.\n\nHence we need a new API similar to rte_event_eth_tx_adapter_enqueue(),\nwhich can send to a crypto adapter.\n\nNote that RTE_EVENT_TYPE_* cannot be used to make that decision,\nas it is meant for event source and not event destination.\nAnd event port designated for crypto adapter is designed to be used\nfor OP_NEW mode.\n\nHence, in order to support an event PMD which has an internal event port\nin crypto adapter (RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD mode), exposed\nvia capability RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD,\napplication should use rte_event_crypto_adapter_enqueue() API to enqueue\nevents.\n\nWhen internal port is not available(RTE_EVENT_CRYPTO_ADAPTER_OP_NEW mode),\napplication can use API rte_event_enqueue_burst() as it was doing earlier,\ni.e. retrieve event port used by crypto adapter and bind its event queues\nto that port and enqueue events using the API rte_event_enqueue_burst().\n\nSigned-off-by: Akhil Goyal <gakhil@marvell.com>\nAcked-by: Abhinandan Gujjar <abhinandan.gujjar@intel.com>\n---\n devtools/libabigail.abignore                  |  7 +-\n .../prog_guide/event_crypto_adapter.rst       | 69 ++++++++++++-------\n doc/guides/rel_notes/deprecation.rst          |  4 ++\n doc/guides/rel_notes/release_21_05.rst        |  6 ++\n lib/librte_eventdev/eventdev_trace_points.c   |  3 +\n .../rte_event_crypto_adapter.h                | 63 +++++++++++++++++\n lib/librte_eventdev/rte_eventdev.c            | 10 +++\n lib/librte_eventdev/rte_eventdev.h            |  9 ++-\n lib/librte_eventdev/rte_eventdev_trace_fp.h   | 10 +++\n lib/librte_eventdev/version.map               |  1 +\n 10 files changed, 154 insertions(+), 28 deletions(-)",
    "diff": "diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore\nindex 6c0b38984..46a5a6af5 100644\n--- a/devtools/libabigail.abignore\n+++ b/devtools/libabigail.abignore\n@@ -19,4 +19,9 @@\n ; Ignore fields inserted in cacheline boundary of rte_cryptodev\n [suppress_type]\n         name = rte_cryptodev\n-        has_data_member_inserted_between = {offset_after(attached), end}\n\\ No newline at end of file\n+        has_data_member_inserted_between = {offset_after(attached), end}\n+\n+; Ignore fields inserted in place of reserved fields of rte_eventdev\n+[suppress_type]\n+\tname = rte_eventdev\n+\thas_data_member_inserted_between = {offset_after(attached), end}\ndiff --git a/doc/guides/prog_guide/event_crypto_adapter.rst b/doc/guides/prog_guide/event_crypto_adapter.rst\nindex 1e3eb7139..4fb5c688e 100644\n--- a/doc/guides/prog_guide/event_crypto_adapter.rst\n+++ b/doc/guides/prog_guide/event_crypto_adapter.rst\n@@ -55,21 +55,22 @@ which is needed to enqueue an event after the crypto operation is completed.\n RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD mode\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n \n-In the RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD mode, if HW supports\n-RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability the application\n-can directly submit the crypto operations to the cryptodev.\n-If not, application retrieves crypto adapter's event port using\n-rte_event_crypto_adapter_event_port_get() API. Then, links its event\n-queue to this port and starts enqueuing crypto operations as events\n-to the eventdev. The adapter then dequeues the events and submits the\n-crypto operations to the cryptodev. After the crypto completions, the\n-adapter enqueues events to the event device.\n-Application can use this mode, when ingress packet ordering is needed.\n-In this mode, events dequeued from the adapter will be treated as\n-forwarded events. The application needs to specify the cryptodev ID\n-and queue pair ID (request information) needed to enqueue a crypto\n-operation in addition to the event information (response information)\n-needed to enqueue an event after the crypto operation has completed.\n+In the ``RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD`` mode, if the event PMD and crypto\n+PMD supports internal event port\n+(``RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD``), the application should\n+use ``rte_event_crypto_adapter_enqueue()`` API to enqueue crypto operations as\n+events to crypto adapter. If not, application retrieves crypto adapter's event\n+port using ``rte_event_crypto_adapter_event_port_get()`` API, links its event\n+queue to this port and starts enqueuing crypto operations as events to eventdev\n+using ``rte_event_enqueue_burst()``. The adapter then dequeues the events and\n+submits the crypto operations to the cryptodev. After the crypto operation is\n+complete, the adapter enqueues events to the event device. The application can\n+use this mode when ingress packet ordering is needed. In this mode, events\n+dequeued from the adapter will be treated as forwarded events. The application\n+needs to specify the cryptodev ID and queue pair ID (request information) needed\n+to enqueue a crypto operation in addition to the event information (response\n+information) needed to enqueue an event after the crypto operation has\n+completed.\n \n .. _figure_event_crypto_adapter_op_forward:\n \n@@ -120,28 +121,44 @@ service function and needs to create an event port for it. The callback is\n expected to fill the ``struct rte_event_crypto_adapter_conf`` structure\n passed to it.\n \n-For RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD mode, the event port created by adapter\n-can be retrieved using ``rte_event_crypto_adapter_event_port_get()`` API.\n-Application can use this event port to link with event queue on which it\n-enqueues events towards the crypto adapter.\n+In the ``RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD`` mode, if the event PMD and crypto\n+PMD supports internal event port\n+(``RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD``), events with crypto\n+operations should be enqueued to the crypto adapter using\n+``rte_event_crypto_adapter_enqueue()`` API. If not, the event port created by\n+the adapter can be retrieved using ``rte_event_crypto_adapter_event_port_get()``\n+API. An application can use this event port to link with an event queue, on\n+which it enqueues events towards the crypto adapter using\n+``rte_event_enqueue_burst()``.\n \n .. code-block:: c\n \n-        uint8_t id, evdev, crypto_ev_port_id, app_qid;\n+        uint8_t id, evdev_id, cdev_id, crypto_ev_port_id, app_qid;\n         struct rte_event ev;\n+        uint32_t cap;\n         int ret;\n \n-        ret = rte_event_crypto_adapter_event_port_get(id, &crypto_ev_port_id);\n-        ret = rte_event_queue_setup(evdev, app_qid, NULL);\n-        ret = rte_event_port_link(evdev, crypto_ev_port_id, &app_qid, NULL, 1);\n-\n         // Fill in event info and update event_ptr with rte_crypto_op\n         memset(&ev, 0, sizeof(ev));\n-        ev.queue_id = app_qid;\n         .\n         .\n         ev.event_ptr = op;\n-        ret = rte_event_enqueue_burst(evdev, app_ev_port_id, ev, nb_events);\n+\n+        ret = rte_event_crypto_adapter_caps_get(evdev_id, cdev_id, &cap);\n+        if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) {\n+                ret = rte_event_crypto_adapter_enqueue(evdev_id, app_ev_port_id,\n+                                                       ev, nb_events);\n+        } else {\n+                ret = rte_event_crypto_adapter_event_port_get(id,\n+                                                        &crypto_ev_port_id);\n+                ret = rte_event_queue_setup(evdev_id, app_qid, NULL);\n+                ret = rte_event_port_link(evdev_id, crypto_ev_port_id, &app_qid,\n+                                          NULL, 1);\n+                ev.queue_id = app_qid;\n+                ret = rte_event_enqueue_burst(evdev_id, app_ev_port_id, ev,\n+                                              nb_events);\n+        }\n+\n \n Querying adapter capabilities\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst\nindex 2afc84c39..a973de4a9 100644\n--- a/doc/guides/rel_notes/deprecation.rst\n+++ b/doc/guides/rel_notes/deprecation.rst\n@@ -127,6 +127,10 @@ Deprecation Notices\n   values to the function ``rte_event_eth_rx_adapter_queue_add`` using\n   the structure ``rte_event_eth_rx_adapter_queue_add``.\n \n+* eventdev: The function pointer ``ca_enqueue`` in structure ``rte_eventdev``\n+  will be moved after ``txa_enqueue`` so that all enqueue/dequeue\n+  function pointers are adjacent to each other.\n+\n * sched: To allow more traffic classes, flexible mapping of pipe queues to\n   traffic classes, and subport level configuration of pipes and queues\n   changes will be made to macros, data structures and API functions defined\ndiff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst\nindex a6ea9d593..48f1860cc 100644\n--- a/doc/guides/rel_notes/release_21_05.rst\n+++ b/doc/guides/rel_notes/release_21_05.rst\n@@ -177,6 +177,12 @@ New Features\n   * Added command to display Rx queue used descriptor count.\n     ``show port (port_id) rxq (queue_id) desc used count``\n \n+* **Enhanced crypto adapter forward mode.**\n+\n+  * Added ``rte_event_crypto_adapter_enqueue()`` API to enqueue events to crypto\n+    adapter if forward mode is supported by driver.\n+  * Added support for crypto adapter forward mode in octeontx2 event and crypto\n+    device driver.\n \n Removed Items\n -------------\ndiff --git a/lib/librte_eventdev/eventdev_trace_points.c b/lib/librte_eventdev/eventdev_trace_points.c\nindex 1a0ccc448..3867ec800 100644\n--- a/lib/librte_eventdev/eventdev_trace_points.c\n+++ b/lib/librte_eventdev/eventdev_trace_points.c\n@@ -118,3 +118,6 @@ RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_crypto_adapter_start,\n \n RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_crypto_adapter_stop,\n \tlib.eventdev.crypto.stop)\n+\n+RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_crypto_adapter_enqueue,\n+\tlib.eventdev.crypto.enq)\ndiff --git a/lib/librte_eventdev/rte_event_crypto_adapter.h b/lib/librte_eventdev/rte_event_crypto_adapter.h\nindex 60630ef66..f8c6cca87 100644\n--- a/lib/librte_eventdev/rte_event_crypto_adapter.h\n+++ b/lib/librte_eventdev/rte_event_crypto_adapter.h\n@@ -171,6 +171,7 @@ extern \"C\" {\n #include <stdint.h>\n \n #include \"rte_eventdev.h\"\n+#include \"eventdev_pmd.h\"\n \n /**\n  * Crypto event adapter mode\n@@ -522,6 +523,68 @@ rte_event_crypto_adapter_service_id_get(uint8_t id, uint32_t *service_id);\n int\n rte_event_crypto_adapter_event_port_get(uint8_t id, uint8_t *event_port_id);\n \n+/**\n+ * Enqueue a burst of crypto operations as event objects supplied in *rte_event*\n+ * structure on an event crypto adapter designated by its event *dev_id* through\n+ * the event port specified by *port_id*. This function is supported if the\n+ * eventdev PMD has the #RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD\n+ * 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_crypto_adapter_enqueue() function returns the number of\n+ * event 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_attr_get(...RTE_EVENT_PORT_ATTR_ENQ_DEPTH...)\n+ *  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\n+rte_event_crypto_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+\tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n+\n+\tif (port_id >= dev->data->nb_ports) {\n+\t\trte_errno = EINVAL;\n+\t\treturn 0;\n+\t}\n+#endif\n+\trte_eventdev_trace_crypto_adapter_enqueue(dev_id, port_id, ev,\n+\t\tnb_events);\n+\n+\treturn dev->ca_enqueue(dev->data->ports[port_id], ev, nb_events);\n+}\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/librte_eventdev/rte_eventdev.c b/lib/librte_eventdev/rte_eventdev.c\nindex c9bb5d227..594dd5e75 100644\n--- a/lib/librte_eventdev/rte_eventdev.c\n+++ b/lib/librte_eventdev/rte_eventdev.c\n@@ -1454,6 +1454,15 @@ rte_event_tx_adapter_enqueue(__rte_unused void *port,\n \treturn 0;\n }\n \n+static uint16_t\n+rte_event_crypto_adapter_enqueue(__rte_unused void *port,\n+\t\t\t__rte_unused struct rte_event ev[],\n+\t\t\t__rte_unused uint16_t nb_events)\n+{\n+\trte_errno = ENOTSUP;\n+\treturn 0;\n+}\n+\n struct rte_eventdev *\n rte_event_pmd_allocate(const char *name, int socket_id)\n {\n@@ -1476,6 +1485,7 @@ rte_event_pmd_allocate(const char *name, int socket_id)\n \n \teventdev->txa_enqueue = rte_event_tx_adapter_enqueue;\n \teventdev->txa_enqueue_same_dest = rte_event_tx_adapter_enqueue;\n+\teventdev->ca_enqueue = rte_event_crypto_adapter_enqueue;\n \n \tif (eventdev->data == NULL) {\n \t\tstruct rte_eventdev_data *eventdev_data = NULL;\ndiff --git a/lib/librte_eventdev/rte_eventdev.h b/lib/librte_eventdev/rte_eventdev.h\nindex 5f1f544cc..a9c496fb6 100644\n--- a/lib/librte_eventdev/rte_eventdev.h\n+++ b/lib/librte_eventdev/rte_eventdev.h\n@@ -1352,6 +1352,10 @@ typedef uint16_t (*event_tx_adapter_enqueue_same_dest)(void *port,\n  * burst having same destination Ethernet port & Tx queue.\n  */\n \n+typedef uint16_t (*event_crypto_adapter_enqueue)(void *port,\n+\t\t\t\tstruct rte_event ev[], uint16_t nb_events);\n+/**< @internal Enqueue burst of events on crypto adapter */\n+\n #define RTE_EVENTDEV_NAME_MAX_LEN\t(64)\n /**< @internal Max length of name of event PMD */\n \n@@ -1434,8 +1438,11 @@ struct rte_eventdev {\n \tuint8_t attached : 1;\n \t/**< Flag indicating the device is attached */\n \n+\tevent_crypto_adapter_enqueue ca_enqueue;\n+\t/**< Pointer to PMD crypto adapter enqueue function. */\n+\n \tuint64_t reserved_64s[4]; /**< Reserved for future fields */\n-\tvoid *reserved_ptrs[4];   /**< Reserved for future fields */\n+\tvoid *reserved_ptrs[3];   /**< Reserved for future fields */\n } __rte_cache_aligned;\n \n extern struct rte_eventdev *rte_eventdevs;\ndiff --git a/lib/librte_eventdev/rte_eventdev_trace_fp.h b/lib/librte_eventdev/rte_eventdev_trace_fp.h\nindex 349129c0f..5639e0b83 100644\n--- a/lib/librte_eventdev/rte_eventdev_trace_fp.h\n+++ b/lib/librte_eventdev/rte_eventdev_trace_fp.h\n@@ -49,6 +49,16 @@ RTE_TRACE_POINT_FP(\n \trte_trace_point_emit_u8(flags);\n )\n \n+RTE_TRACE_POINT_FP(\n+\trte_eventdev_trace_crypto_adapter_enqueue,\n+\tRTE_TRACE_POINT_ARGS(uint8_t dev_id, uint8_t port_id, void *ev_table,\n+\t\tuint16_t nb_events),\n+\trte_trace_point_emit_u8(dev_id);\n+\trte_trace_point_emit_u8(port_id);\n+\trte_trace_point_emit_ptr(ev_table);\n+\trte_trace_point_emit_u16(nb_events);\n+)\n+\n RTE_TRACE_POINT_FP(\n \trte_eventdev_trace_timer_arm_burst,\n \tRTE_TRACE_POINT_ARGS(const void *adapter, void **evtims_table,\ndiff --git a/lib/librte_eventdev/version.map b/lib/librte_eventdev/version.map\nindex 902df0ae3..7e264d3b8 100644\n--- a/lib/librte_eventdev/version.map\n+++ b/lib/librte_eventdev/version.map\n@@ -143,6 +143,7 @@ EXPERIMENTAL {\n \trte_event_vector_pool_create;\n \trte_event_eth_rx_adapter_vector_limits_get;\n \trte_event_eth_rx_adapter_queue_event_vector_config;\n+\t__rte_eventdev_trace_crypto_adapter_enqueue;\n };\n \n INTERNAL {\n",
    "prefixes": [
        "v9",
        "1/4"
    ]
}