get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 131939,
    "url": "http://patches.dpdk.org/api/patches/131939/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230926103233.3956431-2-amitprakashs@marvell.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": "<20230926103233.3956431-2-amitprakashs@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230926103233.3956431-2-amitprakashs@marvell.com",
    "date": "2023-09-26T10:32:22",
    "name": "[v4,01/12] eventdev: introduce event DMA adapter library",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "33d3acc090fb48d6467abad2cf99e970d93564c0",
    "submitter": {
        "id": 2699,
        "url": "http://patches.dpdk.org/api/people/2699/?format=api",
        "name": "Amit Prakash Shukla",
        "email": "amitprakashs@marvell.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20230926103233.3956431-2-amitprakashs@marvell.com/mbox/",
    "series": [
        {
            "id": 29634,
            "url": "http://patches.dpdk.org/api/series/29634/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=29634",
            "date": "2023-09-26T10:32:21",
            "name": "event DMA adapter library support",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/29634/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/131939/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/131939/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 2E06942642;\n\tTue, 26 Sep 2023 12:32:59 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 15ECC402E2;\n\tTue, 26 Sep 2023 12:32:59 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id A5A3B40266\n for <dev@dpdk.org>; Tue, 26 Sep 2023 12:32:57 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id\n 38QA1T0P029934; Tue, 26 Sep 2023 03:32:57 -0700",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3t9yhm0h80-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Tue, 26 Sep 2023 03:32:56 -0700",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48;\n Tue, 26 Sep 2023 03:32:53 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend\n Transport; Tue, 26 Sep 2023 03:32:53 -0700",
            "from localhost.localdomain (unknown [10.28.36.157])\n by maili.marvell.com (Postfix) with ESMTP id 04D393F70A6;\n Tue, 26 Sep 2023 03:32:47 -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-type : content-transfer-encoding; s=pfpt0220;\n bh=2W0HbM4tCDNeb/09vJ7dHSbrmOBda0ss8aKRqhp/50E=;\n b=QIvaEYSTg1Qz/z/5yL5YeUGCC/3AQuoCVexjycL8hhsjvB834FU8z5aM8Caw3+VeSFfi\n 3UUIGsE9KliQ93E0lFpvCVsAEFubHvXny29VNCN3yzho5/51Km/v0rIomJXCzQXZBHrr\n eYZwNPz9Gn6P9HR2N1kILpMdyjUgsVLWI5DZopaopC2+nj57GVTc8L+n3EETgxBRT4lA\n 54W9q2Y7/e//xEiEP8Mwp3wMN1Y5ThQL847mUW1dQkxqSEWKTVq+NNhDYLvQOpDKFZIB\n zwpG4ooo4bjb3LJyhNkd3S5tJ3UM1PiLvXA7u/qlHehZ+Mh0aHDfCwa5jrzB5RbY+c/X GA==",
        "From": "Amit Prakash Shukla <amitprakashs@marvell.com>",
        "To": "Thomas Monjalon <thomas@monjalon.net>, Amit Prakash Shukla\n <amitprakashs@marvell.com>, Jerin Jacob <jerinj@marvell.com>",
        "CC": "<dev@dpdk.org>, <fengchengwen@huawei.com>, <kevin.laatz@intel.com>,\n <bruce.richardson@intel.com>, <conor.walsh@intel.com>,\n <vattunuru@marvell.com>, <g.singh@nxp.com>,\n <sachin.saxena@oss.nxp.com>, <hemant.agrawal@nxp.com>,\n <cheng1.jiang@intel.com>, <ndabilpuram@marvell.com>,\n <anoobj@marvell.com>, <mb@smartsharesystems.com>",
        "Subject": "[PATCH v4 01/12] eventdev: introduce event DMA adapter library",
        "Date": "Tue, 26 Sep 2023 16:02:22 +0530",
        "Message-ID": "<20230926103233.3956431-2-amitprakashs@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20230926103233.3956431-1-amitprakashs@marvell.com>",
        "References": "<20230923133449.3780841-1-amitprakashs@marvell.com>\n <20230926103233.3956431-1-amitprakashs@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"UTF-8\"",
        "Content-Transfer-Encoding": "8bit",
        "X-Proofpoint-GUID": "K4vvxAHgANufQWQfV20pI8Og6A4Bsof6",
        "X-Proofpoint-ORIG-GUID": "K4vvxAHgANufQWQfV20pI8Og6A4Bsof6",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26\n definitions=2023-09-26_07,2023-09-25_01,2023-05-22_02",
        "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"
    },
    "content": "Introduce event DMA adapter APIs. The change provides information\non adapter modes and usage. Application can use this event adapter\ninterface to transfer packets between DMA device and event device.\n\nSigned-off-by: Amit Prakash Shukla <amitprakashs@marvell.com>\n---\n MAINTAINERS                                   |    5 +\n doc/api/doxy-api-index.md                     |    1 +\n doc/guides/eventdevs/features/default.ini     |    8 +\n doc/guides/prog_guide/event_dma_adapter.rst   |  264 ++++\n doc/guides/prog_guide/eventdev.rst            |    8 +-\n .../img/event_dma_adapter_op_forward.svg      | 1086 +++++++++++++++++\n .../img/event_dma_adapter_op_new.svg          | 1079 ++++++++++++++++\n doc/guides/prog_guide/index.rst               |    1 +\n doc/guides/rel_notes/release_23_11.rst        |    4 +-\n lib/eventdev/eventdev_pmd.h                   |  175 ++-\n lib/eventdev/eventdev_private.c               |   10 +\n lib/eventdev/meson.build                      |    1 +\n lib/eventdev/rte_event_dma_adapter.h          |  582 +++++++++\n lib/eventdev/rte_eventdev.h                   |   44 +\n lib/eventdev/rte_eventdev_core.h              |    8 +-\n lib/eventdev/version.map                      |   16 +\n 16 files changed, 3286 insertions(+), 6 deletions(-)\n create mode 100644 doc/guides/prog_guide/event_dma_adapter.rst\n create mode 100644 doc/guides/prog_guide/img/event_dma_adapter_op_forward.svg\n create mode 100644 doc/guides/prog_guide/img/event_dma_adapter_op_new.svg\n create mode 100644 lib/eventdev/rte_event_dma_adapter.h",
    "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex a926155f26..a6b8fc88d0 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -548,6 +548,11 @@ F: drivers/raw/skeleton/\n F: app/test/test_rawdev.c\n F: doc/guides/prog_guide/rawdev.rst\n \n+Eventdev DMA Adapter API\n+M: Amit Prakash Shukla <amitprakashs@marvell.com>\n+T: git://dpdk.org/next/dpdk-next-eventdev\n+F: lib/eventdev/*dma_adapter*\n+F: doc/guides/prog_guide/event_dma_adapter.rst\n \n Memory Pool Drivers\n -------------------\ndiff --git a/doc/api/doxy-api-index.md b/doc/api/doxy-api-index.md\nindex fdeda13932..b7df7be4d9 100644\n--- a/doc/api/doxy-api-index.md\n+++ b/doc/api/doxy-api-index.md\n@@ -29,6 +29,7 @@ The public API headers are grouped by topics:\n   [event_eth_tx_adapter](@ref rte_event_eth_tx_adapter.h),\n   [event_timer_adapter](@ref rte_event_timer_adapter.h),\n   [event_crypto_adapter](@ref rte_event_crypto_adapter.h),\n+  [event_dma_adapter](@ref rte_event_dma_adapter.h),\n   [rawdev](@ref rte_rawdev.h),\n   [metrics](@ref rte_metrics.h),\n   [bitrate](@ref rte_bitrate.h),\ndiff --git a/doc/guides/eventdevs/features/default.ini b/doc/guides/eventdevs/features/default.ini\nindex 00360f60c6..73a52d915b 100644\n--- a/doc/guides/eventdevs/features/default.ini\n+++ b/doc/guides/eventdevs/features/default.ini\n@@ -44,6 +44,14 @@ internal_port_op_fwd       =\n internal_port_qp_ev_bind   =\n session_private_data       =\n \n+;\n+; Features of a default DMA adapter.\n+;\n+[DMA adapter Features]\n+internal_port_op_new       =\n+internal_port_op_fwd       =\n+internal_port_vchan_ev_bind =\n+\n ;\n ; Features of a default Timer adapter.\n ;\ndiff --git a/doc/guides/prog_guide/event_dma_adapter.rst b/doc/guides/prog_guide/event_dma_adapter.rst\nnew file mode 100644\nindex 0000000000..eeb9ce6dfd\n--- /dev/null\n+++ b/doc/guides/prog_guide/event_dma_adapter.rst\n@@ -0,0 +1,264 @@\n+..  SPDX-License-Identifier: BSD-3-Clause\n+    Copyright (c) 2023 Marvell.\n+\n+Event DMA Adapter Library\n+=========================\n+\n+DPDK :doc:`Eventdev library <eventdev>` provides event driven programming model with features\n+to schedule events. :doc:`DMA Device library <dmadev>` provides an interface to DMA poll mode\n+drivers that support DMA operations. Event DMA Adapter is intended to bridge between the event\n+device and the DMA device.\n+\n+Packet flow from DMA device to the event device can be accomplished using software and hardware\n+based transfer mechanisms. The adapter queries an eventdev PMD to determine which mechanism to\n+be used. The adapter uses an EAL service core function for software based packet transfer and\n+uses the eventdev PMD functions to configure hardware based packet transfer between DMA device\n+and the event device. DMA adapter uses a new event type called ``RTE_EVENT_TYPE_DMADEV`` to\n+indicate the source of event.\n+\n+Application can choose to submit an DMA operation directly to an DMA device or send it to an DMA\n+adapter via eventdev based on RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability. The\n+first mode is known as the event new (RTE_EVENT_DMA_ADAPTER_OP_NEW) mode and the second as the\n+event forward (RTE_EVENT_DMA_ADAPTER_OP_FORWARD) mode. Choice of mode can be specified while\n+creating the adapter. In the former mode, it is the application's responsibility to enable\n+ingress packet ordering. In the latter mode, it is the adapter's responsibility to enable\n+ingress packet ordering.\n+\n+\n+Adapter Modes\n+-------------\n+\n+RTE_EVENT_DMA_ADAPTER_OP_NEW mode\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+In the RTE_EVENT_DMA_ADAPTER_OP_NEW mode, application submits DMA operations directly to an DMA\n+device. The adapter then dequeues DMA completions from the DMA device and enqueues them as events\n+to the event device. This mode does not ensure ingress ordering as the application directly\n+enqueues to the dmadev without going through DMA/atomic stage. In this mode, events dequeued\n+from the adapter are treated as new events. The application has to specify event information\n+(response information) which is needed to enqueue an event after the DMA operation is completed.\n+\n+.. _figure_event_dma_adapter_op_new:\n+\n+.. figure:: img/event_dma_adapter_op_new.*\n+\n+   Working model of ``RTE_EVENT_DMA_ADAPTER_OP_NEW`` mode\n+\n+\n+RTE_EVENT_DMA_ADAPTER_OP_FORWARD mode\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+In the ``RTE_EVENT_DMA_ADAPTER_OP_FORWARD`` mode, if the event PMD and DMA PMD supports internal\n+event port (``RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD``), the application should use\n+``rte_event_dma_adapter_enqueue()`` API to enqueue DMA operations as events to DMA adapter. If\n+not, application retrieves DMA adapter's event port using ``rte_event_dma_adapter_event_port_get()``\n+API, links its event queue to this port and starts enqueuing DMA operations as events to eventdev\n+using ``rte_event_enqueue_burst()``. The adapter then dequeues the events and submits the DMA\n+operations to the dmadev. After the DMA operation is complete, the adapter enqueues events to the\n+event device.\n+\n+Applications can use this mode when ingress packet ordering is needed. In this mode, events\n+dequeued from the adapter will be treated as forwarded events. Application has to specify event\n+information (response information) needed to enqueue the event after the DMA operation has\n+completed.\n+\n+.. _figure_event_dma_adapter_op_forward:\n+\n+.. figure:: img/event_dma_adapter_op_forward.*\n+\n+   Working model of ``RTE_EVENT_DMA_ADAPTER_OP_FORWARD`` mode\n+\n+\n+API Overview\n+------------\n+\n+This section has a brief introduction to the event DMA adapter APIs. The application is expected\n+to create an adapter which is associated with a single eventdev, then add dmadev and vchan to the\n+adapter instance.\n+\n+\n+Create an adapter instance\n+~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+An adapter instance is created using ``rte_event_dma_adapter_create()``. This function is called\n+with event device to be associated with the adapter and port configuration for the adapter to\n+setup an event port (if the adapter needs to use a service function).\n+\n+Adapter can be started in ``RTE_EVENT_DMA_ADAPTER_OP_NEW`` or ``RTE_EVENT_DMA_ADAPTER_OP_FORWARD``\n+mode.\n+\n+.. code-block:: c\n+\n+        enum rte_event_dma_adapter_mode mode;\n+        struct rte_event_dev_info dev_info;\n+        struct rte_event_port_conf conf;\n+        uint8_t evdev_id;\n+        uint8_t dma_id;\n+        int ret;\n+\n+        ret = rte_event_dev_info_get(dma_id, &dev_info);\n+\n+        conf.new_event_threshold = dev_info.max_num_events;\n+        conf.dequeue_depth = dev_info.max_event_port_dequeue_depth;\n+        conf.enqueue_depth = dev_info.max_event_port_enqueue_depth;\n+        mode = RTE_EVENT_DMA_ADAPTER_OP_FORWARD;\n+        ret = rte_event_dma_adapter_create(dma_id, evdev_id, &conf, mode);\n+\n+\n+``rte_event_dma_adapter_create_ext()`` function can be used by the application to have a finer\n+control on eventdev port allocation and setup. The ``rte_event_dma_adapter_create_ext()``\n+function is passed a callback function. The callback function is invoked if the adapter creates\n+a service function and uses an event port for it. The callback is expected to fill the\n+``struct rte_event_dma_adapter_conf`` structure passed to it.\n+\n+In the ``RTE_EVENT_DMA_ADAPTER_OP_FORWARD`` mode, if the event PMD and DMA PMD supports internal\n+event port (``RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD``), events with DMA operations should\n+be enqueued to the DMA adapter using ``rte_event_dma_adapter_enqueue()`` API. If not, the event port\n+created by the adapter can be retrieved using ``rte_event_dma_adapter_event_port_get()`` API. An\n+application can use this event port to link with an event queue, on which it enqueues events\n+towards the DMA adapter using ``rte_event_enqueue_burst()``.\n+\n+.. code-block:: c\n+\n+        uint8_t dma_adpt_id, evdev_id, dma_dev_id, dma_ev_port_id, app_qid;\n+        struct rte_event ev;\n+        uint32_t cap;\n+        int ret;\n+\n+        // Fill in event info and update event_ptr with rte_dma_op\n+        memset(&ev, 0, sizeof(ev));\n+        .\n+        .\n+        ev.event_ptr = op;\n+\n+        ret = rte_event_dma_adapter_caps_get(evdev_id, dma_dev_id, &cap);\n+        if (cap & RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) {\n+                ret = rte_event_dma_adapter_enqueue(evdev_id, app_ev_port_id, ev, nb_events);\n+        } else {\n+                ret = rte_event_dma_adapter_event_port_get(dma_adpt_id, &dma_ev_port_id);\n+                ret = rte_event_queue_setup(evdev_id, app_qid, NULL);\n+                ret = rte_event_port_link(evdev_id, dma_ev_port_id, &app_qid, NULL, 1);\n+                ev.queue_id = app_qid;\n+                ret = rte_event_enqueue_burst(evdev_id, app_ev_port_id, ev, nb_events);\n+        }\n+\n+\n+Event device configuration for service based adapter\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+When ``rte_event_dma_adapter_create()`` is used for creating adapter instance,\n+``rte_event_dev_config::nb_event_ports`` is automatically incremented, and event device is\n+reconfigured with additional event port during service initialization. This event device\n+reconfigure logic also increments the ``rte_event_dev_config::nb_single_link_event_port_queues``\n+parameter if the adapter event port config is of type ``RTE_EVENT_PORT_CFG_SINGLE_LINK``.\n+\n+Applications using this mode of adapter creation need not configure the event device with\n+``rte_event_dev_config::nb_event_ports`` and\n+``rte_event_dev_config::nb_single_link_event_port_queues`` parameters required for DMA adapter when\n+the adapter is created using the above-mentioned API.\n+\n+\n+Querying adapter capabilities\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+The ``rte_event_dma_adapter_caps_get()`` function allows the application to query the adapter\n+capabilities for an eventdev and dmadev combination. This API provides whether dmadev and eventdev\n+are connected using internal HW port or not.\n+\n+.. code-block:: c\n+\n+        rte_event_dma_adapter_caps_get(dev_id, dma_dev_id, &cap);\n+\n+\n+Adding vchan to the adapter instance\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+dmadev device id and vchan are configured using dmadev APIs. For more information\n+see :doc:`here  <dmadev>`.\n+\n+.. code-block:: c\n+\n+        struct rte_dma_vchan_conf vchan_conf;\n+        struct rte_dma_conf dev_conf;\n+        uint8_t dev_id = 0;\n+        uint16_t vchan = 0;\n+\n+        rte_dma_configure(dev_id, &dev_conf);\n+        rte_dma_vchan_setup(dev_id, vhcan, &vchan_conf);\n+\n+These dmadev id and vchan are added to the instance using the\n+``rte_event_dma_adapter_vchan_add()`` API. The same is removed using\n+``rte_event_dma_adapter_vchan_del()`` API. If hardware supports\n+``RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND`` capability, event information must be passed to the add API.\n+\n+.. code-block:: c\n+\n+        uint32_t cap;\n+        int ret;\n+\n+        ret = rte_event_dma_adapter_caps_get(evdev_id, dma_dev_id, &cap);\n+        if (cap & RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND) {\n+                struct rte_event event;\n+\n+                rte_event_dma_adapter_vchan_add(id, dma_dev_id, vchan, &conf);\n+        } else\n+                rte_event_dma_adapter_vchan_add(id, dma_dev_id, vchan, NULL);\n+\n+\n+Configuring service function\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+If the adapter uses a service function, the application is required to assign a service core to\n+the service function as show below.\n+\n+.. code-block:: c\n+\n+        uint32_t service_id;\n+\n+        if (rte_event_dma_adapter_service_id_get(dma_id, &service_id) == 0)\n+                rte_service_map_lcore_set(service_id, CORE_ID);\n+\n+\n+Set event response information\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+In the RTE_EVENT_DMA_ADAPTER_OP_FORWARD / RTE_EVENT_DMA_ADAPTER_OP_NEW mode, the application\n+specifies the dmadev ID and vchan ID in ``struct rte_event_dma_adapter_op`` and the event\n+information (response information) needed to enqueue an event after the DMA operation has\n+completed. The response information is specified in ``struct rte_event`` and appended to the\n+``struct rte_event_dma_adapter_op``.\n+\n+\n+Start the adapter instance\n+~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+The application calls ``rte_event_dma_adapter_start()`` to start the adapter. This function calls\n+the start callbacks of the eventdev PMDs for hardware based eventdev-dmadev connections and\n+``rte_service_run_state_set()`` to enable the service function if one exists.\n+\n+.. code-block:: c\n+\n+        rte_event_dma_adapter_start(id);\n+\n+.. Note::\n+\n+         The eventdev to which the event_dma_adapter is connected should be started before calling\n+         rte_event_dma_adapter_start().\n+\n+\n+Get adapter statistics\n+~~~~~~~~~~~~~~~~~~~~~~\n+\n+The  ``rte_event_dma_adapter_stats_get()`` function reports counters defined in struct\n+``rte_event_dma_adapter_stats``. The received packet and enqueued event counts are a sum of the\n+counts from the eventdev PMD callbacks if the callback is supported, and the counts maintained by\n+the service function, if one exists.\n+\n+Set/Get adapter runtime configuration parameters\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+The runtime configuration parameters of adapter can be set/get using\n+``rte_event_dma_adapter_runtime_params_set()`` and\n+``rte_event_dma_adapter_runtime_params_get()`` respectively.\n+The parameters that can be set/get are defined in\n+``struct rte_event_dma_adapter_runtime_params``.\ndiff --git a/doc/guides/prog_guide/eventdev.rst b/doc/guides/prog_guide/eventdev.rst\nindex 2c83176846..ff55115d0d 100644\n--- a/doc/guides/prog_guide/eventdev.rst\n+++ b/doc/guides/prog_guide/eventdev.rst\n@@ -333,7 +333,8 @@ eventdev.\n .. Note::\n \n          EventDev needs to be started before starting the event producers such\n-         as event_eth_rx_adapter, event_timer_adapter and event_crypto_adapter.\n+         as event_eth_rx_adapter, event_timer_adapter, event_crypto_adapter and\n+         event_dma_adapter.\n \n Ingress of New Events\n ~~~~~~~~~~~~~~~~~~~~~\n@@ -445,8 +446,9 @@ using ``rte_event_dev_stop_flush_callback_register()`` function.\n .. Note::\n \n         The event producers such as ``event_eth_rx_adapter``,\n-        ``event_timer_adapter`` and ``event_crypto_adapter``\n-        need to be stopped before stopping the event device.\n+        ``event_timer_adapter``, ``event_crypto_adapter`` and\n+        ``event_dma_adapter`` need to be stopped before stopping\n+        the event device.\n \n Summary\n -------\ndiff --git a/doc/guides/prog_guide/img/event_dma_adapter_op_forward.svg b/doc/guides/prog_guide/img/event_dma_adapter_op_forward.svg\nnew file mode 100644\nindex 0000000000..b7fe1fecf2\n--- /dev/null\n+++ b/doc/guides/prog_guide/img/event_dma_adapter_op_forward.svg\n@@ -0,0 +1,1086 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- SPDX-License-Identifier: BSD-3-Clause -->\n+<!-- Copyright (c) 2023 Marvell. -->\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"720px\"\n+   height=\"486px\"\n+   id=\"svg13237\"\n+   version=\"1.1\"\n+   inkscape:version=\"1.2.1 (9c6d41e410, 2022-07-14)\"\n+   sodipodi:docname=\"event_dma_adapter_op_forward.svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\"\n+   xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n+   xmlns:cc=\"http://creativecommons.org/ns#\"\n+   xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n+   xmlns:v=\"http://schemas.microsoft.com/visio/2003/SVGExtensions/\">\n+  <defs\n+     id=\"defs13239\">\n+    <marker\n+       inkscape:stockid=\"Arrow1Sstart\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Sstart\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8416\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.2) translate(6,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Send\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Send\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8419\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.2) rotate(180) translate(6,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"DiamondL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"DiamondL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8483\"\n+         d=\"M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"DotL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"DotL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8465\"\n+         d=\"M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8) translate(7.4, 1)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"SquareL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"SquareL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8474\"\n+         d=\"M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"TriangleOutL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"TriangleOutL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8546\"\n+         d=\"M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Lstart\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8404\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8) translate(12.5,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Mend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Mend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8413\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.4) rotate(180) translate(10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow2Lend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow2Lend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8425\"\n+         style=\"fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;\"\n+         d=\"M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z \"\n+         transform=\"scale(1.1) rotate(180) translate(1,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Lend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8407\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.8) rotate(180) translate(12.5,0)\" />\n+    </marker>\n+    <filter\n+       id=\"filter_2\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-0\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-7\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-0-8\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-7-7\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-9\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-6\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-6\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-63\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-91\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-3\" />\n+    </filter>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-5\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-3\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-6\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-0\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lstart-7\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8404-0\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(0.8,0,0,0.8,10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-51\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-1\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-3\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-6\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-62\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-9\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-2\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-7\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lstart-7-9\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8404-0-3\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(0.8,0,0,0.8,10,0)\" />\n+    </marker>\n+    <filter\n+       id=\"filter_2-3-6-1\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-63-8\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-92\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-2\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-94\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-7\" />\n+    </filter>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lstart-7-6\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8404-0-1\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(0.8,0,0,0.8,10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-55\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-4\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+  </defs>\n+  <sodipodi:namedview\n+     id=\"base\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pageshadow=\"2\"\n+     inkscape:zoom=\"1\"\n+     inkscape:cx=\"233.5\"\n+     inkscape:cy=\"288\"\n+     inkscape:document-units=\"px\"\n+     inkscape:current-layer=\"layer1\"\n+     showgrid=\"false\"\n+     inkscape:window-width=\"1920\"\n+     inkscape:window-height=\"1017\"\n+     inkscape:window-x=\"-8\"\n+     inkscape:window-y=\"-8\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:snap-nodes=\"false\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\">\n+    <inkscape:grid\n+       type=\"xygrid\"\n+       id=\"grid13454\" />\n+  </sodipodi:namedview>\n+  <metadata\n+     id=\"metadata13242\">\n+    <rdf:RDF>\n+      <cc:Work\n+         rdf:about=\"\">\n+        <dc:format>image/svg+xml</dc:format>\n+        <dc:type\n+           rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" />\n+        <dc:title />\n+      </cc:Work>\n+    </rdf:RDF>\n+  </metadata>\n+  <g\n+     id=\"layer1\"\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\">\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-4\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,88.874699,-812.39909)\">\n+      <title\n+         id=\"title22-7-5\">Square</title>\n+      <desc\n+         id=\"desc24-7-8\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-5\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-7\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-91)\" />\n+      </g>\n+      <g\n+         id=\"g13515-33\">\n+        <g\n+           id=\"g13534-8\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-95\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.712265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart-7);marker-end:none\"\n+       d=\"M 312.28671,240.74335 H 227.99897\"\n+       id=\"path17209\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.718986px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)\"\n+       d=\"m 221.6484,77.57125 h 94.28101\"\n+       id=\"path17209-8\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,314.24227,-811.89589)\">\n+      <title\n+         id=\"title22-7\">Square</title>\n+      <desc\n+         id=\"desc24-7\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3)\" />\n+      </g>\n+      <g\n+         id=\"g13515\">\n+        <g\n+           id=\"g13534\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.724714;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:none\"\n+       d=\"M 89.025329,74.39932 H 24.750043\"\n+       id=\"path17209-3\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-4.325033,28.642983)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-3\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-1.93108,192.80833)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-1\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.751412;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart-7);marker-end:none\"\n+       d=\"M 18.763392,120.7432 H 87.758545\"\n+       id=\"path17209-3-0\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-218.16394,72.68276)\" />\n+    <path\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-2\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-217.40136,26.716271)\" />\n+    <g\n+       id=\"g29167-4\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-217.31662,28.007562)\">\n+      <text\n+         id=\"text29163-9\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-9\"\n+           sodipodi:role=\"line\">1</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-9\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-4.9726112,28.689051)\">\n+      <text\n+         id=\"text29163-3\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-3\"\n+           sodipodi:role=\"line\">2</tspan></text>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.678033px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart-7);marker-end:none\"\n+       d=\"M 181,214.66098 V 145.33902\"\n+       id=\"path17211-7-1-6\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <g\n+       id=\"g29167\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-218.07919,73.10621)\">\n+      <text\n+         id=\"text29163\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165\"\n+           sodipodi:role=\"line\">8</tspan></text>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.678033px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart-7);marker-end:none\"\n+       d=\"m 131,145.8531 v 69.32197\"\n+       id=\"path17211-7-1\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-140.37076,129.97088)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-8\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <g\n+       id=\"g29167-2\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-140.28602,131.01695)\">\n+      <text\n+         id=\"text29163-92\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-8\"\n+           sodipodi:role=\"line\">7</tspan></text>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.718986px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)\"\n+       d=\"m 317.1405,116 h -94.281\"\n+       id=\"path17209-8-0\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-3.4914,66.68745)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-6\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <g\n+       id=\"g29167-46\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-4.40666,67.48829)\">\n+      <text\n+         id=\"text29163-1\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-5\"\n+           sodipodi:role=\"line\">3</tspan></text>\n+    </g>\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-90.692582,130.31695)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-8-6\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <g\n+       id=\"g29167-6\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-90.84634,131.60918)\">\n+      <text\n+         id=\"text29163-17\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-2\"\n+           sodipodi:role=\"line\">4</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-2-0\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-2.424397,194.0216)\">\n+      <text\n+         id=\"text29163-92-6\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-8-2\"\n+           sodipodi:role=\"line\">5</tspan></text>\n+    </g>\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-8\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,93.82055,-648.98949)\">\n+      <title\n+         id=\"title22-7-97\">Square</title>\n+      <desc\n+         id=\"desc24-7-3\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-6\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-12\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-92)\" />\n+      </g>\n+      <g\n+         id=\"g13515-9\">\n+        <g\n+           id=\"g13534-3\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-1\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-84\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,314.82055,-648.98949)\">\n+      <title\n+         id=\"title22-7-50\">Square</title>\n+      <desc\n+         id=\"desc24-7-36\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-1\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-0\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-94)\" />\n+      </g>\n+      <g\n+         id=\"g13515-6\">\n+        <g\n+           id=\"g13534-32\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-0\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.712265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Lend)\"\n+       d=\"M 313.14387,285 H 228.85613\"\n+       id=\"path17209-7\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-2.692582,236.31695)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-1-6\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <g\n+       id=\"g29167-2-0-5\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-2.424397,237.0216)\">\n+      <text\n+         id=\"text29163-92-6-6\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-8-2-9\"\n+           sodipodi:role=\"line\">6</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-154.60784,51.117791)\">\n+      <text\n+         id=\"text29163-9-6\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-9-7\"\n+           sodipodi:role=\"line\">Eventdev</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-5\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-144.65044,201.97821)\">\n+      <text\n+         id=\"text29163-9-6-3\"\n+         y=\"70\"\n+         x=\"412.93716\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"70\"\n+           x=\"412.93716\"\n+           id=\"tspan29165-9-7-5\"\n+           sodipodi:role=\"line\">DMA</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"100.26363\"\n+           x=\"412.93716\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3201\">Adapter</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-5-6\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,79.53518,46.62529)\">\n+      <text\n+         id=\"text29163-9-6-3-2\"\n+         y=\"48.801659\"\n+         x=\"412.93716\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"48.801659\"\n+           x=\"412.93716\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3155\">Application</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"98.801659\"\n+           x=\"412.93716\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3201-1\">in ordered</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"148.80167\"\n+           x=\"412.93716\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3161\">stage</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-5-2\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,77.535182,213.62529)\">\n+      <text\n+         id=\"text29163-9-6-3-7\"\n+         y=\"70\"\n+         x=\"412.93716\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"70\"\n+           x=\"412.93716\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3201-9\">DMA Device</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-5-3\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,188.53518,-3.37471)\">\n+      <text\n+         id=\"text29163-9-6-3-6\"\n+         y=\"70\"\n+         x=\"375.65271\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3201-6\">1. Events from the previous stage.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"93.538376\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3260\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"117.07675\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3262\">2. Application in ordered stage</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"140.61513\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3288\">    dequeues events from eventdev.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"164.1535\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3264\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"187.69188\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3266\">3. Application enqueues DMA</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"211.23026\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3290\">    operations as events to eventdev.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"234.76863\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3268\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"258.30701\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3270\">4. DMA adapter dequeues event</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"281.84537\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3292\">    from eventdev.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"305.38376\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3272\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"328.92212\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3274\">5. DMA adapter submits DMA</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"352.46051\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3294\">    operations to DMA Device (Atomic</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"375.99887\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3296\">    stage)</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"399.53726\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3276\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"423.07562\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3278\">6. DMA adapter dequeues DMA</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"446.61401\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3298\">    completions from DMA Device</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"470.15237\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3280\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"493.69073\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3282\">7. DMA adapter enqueues events</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"517.22913\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3300\">    to the eventdev</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"540.76752\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3284\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8307px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"564.30585\"\n+           x=\"375.65271\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3286\">8. Events to the next stage</tspan></text>\n+    </g>\n+  </g>\n+</svg>\ndiff --git a/doc/guides/prog_guide/img/event_dma_adapter_op_new.svg b/doc/guides/prog_guide/img/event_dma_adapter_op_new.svg\nnew file mode 100644\nindex 0000000000..e9e8bb2b98\n--- /dev/null\n+++ b/doc/guides/prog_guide/img/event_dma_adapter_op_new.svg\n@@ -0,0 +1,1079 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- SPDX-License-Identifier: BSD-3-Clause -->\n+<!-- Copyright (c) 2023 Marvell. -->\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"720px\"\n+   height=\"486px\"\n+   id=\"svg13237\"\n+   version=\"1.1\"\n+   inkscape:version=\"1.2.1 (9c6d41e410, 2022-07-14)\"\n+   sodipodi:docname=\"event_dma_adapter_op_new.svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\"\n+   xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n+   xmlns:cc=\"http://creativecommons.org/ns#\"\n+   xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n+   xmlns:v=\"http://schemas.microsoft.com/visio/2003/SVGExtensions/\">\n+  <defs\n+     id=\"defs13239\">\n+    <marker\n+       inkscape:stockid=\"Arrow1Sstart\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Sstart\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8416\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.2) translate(6,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Send\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Send\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8419\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.2) rotate(180) translate(6,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"DiamondL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"DiamondL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8483\"\n+         d=\"M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"DotL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"DotL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8465\"\n+         d=\"M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8) translate(7.4, 1)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"SquareL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"SquareL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8474\"\n+         d=\"M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"TriangleOutL\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"TriangleOutL\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8546\"\n+         d=\"M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Lstart\"\n+       style=\"overflow:visible\">\n+      <path\n+         id=\"path8404\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt\"\n+         transform=\"scale(0.8) translate(12.5,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Mend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Mend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8413\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.4) rotate(180) translate(10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow2Lend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow2Lend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8425\"\n+         style=\"fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;\"\n+         d=\"M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z \"\n+         transform=\"scale(1.1) rotate(180) translate(1,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0.0\"\n+       refX=\"0.0\"\n+       id=\"Arrow1Lend\"\n+       style=\"overflow:visible;\">\n+      <path\n+         id=\"path8407\"\n+         d=\"M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z \"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;\"\n+         transform=\"scale(0.8) rotate(180) translate(12.5,0)\" />\n+    </marker>\n+    <filter\n+       id=\"filter_2\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-0\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-7\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-0-8\"\n+       color-interpolation-filters=\"sRGB\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-7-7\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-9\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-6\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-6\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-63\" />\n+    </filter>\n+    <filter\n+       id=\"filter_2-3-91\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-3\" />\n+    </filter>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-5\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-3\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-6\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-0\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lstart\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lstart-7\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8404-0\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(0.8,0,0,0.8,10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-51\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-1\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-3\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-6\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-62\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-9\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <marker\n+       inkscape:stockid=\"Arrow1Lend\"\n+       orient=\"auto\"\n+       refY=\"0\"\n+       refX=\"0\"\n+       id=\"Arrow1Lend-2\"\n+       style=\"overflow:visible\">\n+      <path\n+         inkscape:connector-curvature=\"0\"\n+         id=\"path8407-7\"\n+         d=\"M 0,0 5,-5 -12.5,0 5,5 0,0 z\"\n+         style=\"fill-rule:evenodd;stroke:#000000;stroke-width:1pt\"\n+         transform=\"matrix(-0.8,0,0,-0.8,-10,0)\" />\n+    </marker>\n+    <filter\n+       id=\"filter_2-3-91-3\"\n+       color-interpolation-filters=\"sRGB\"\n+       x=\"-0.086178862\"\n+       y=\"-0.086178862\"\n+       width=\"1.1723577\"\n+       height=\"1.1723577\">\n+      <feGaussianBlur\n+         stdDeviation=\"2\"\n+         id=\"feGaussianBlur15-1-3-6\" />\n+    </filter>\n+  </defs>\n+  <sodipodi:namedview\n+     id=\"base\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pageshadow=\"2\"\n+     inkscape:zoom=\"1\"\n+     inkscape:cx=\"385.5\"\n+     inkscape:cy=\"234\"\n+     inkscape:document-units=\"px\"\n+     inkscape:current-layer=\"layer1\"\n+     showgrid=\"false\"\n+     inkscape:window-width=\"1920\"\n+     inkscape:window-height=\"1017\"\n+     inkscape:window-x=\"-8\"\n+     inkscape:window-y=\"-8\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:snap-nodes=\"false\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\">\n+    <inkscape:grid\n+       type=\"xygrid\"\n+       id=\"grid13454\" />\n+  </sodipodi:namedview>\n+  <metadata\n+     id=\"metadata13242\">\n+    <rdf:RDF>\n+      <cc:Work\n+         rdf:about=\"\">\n+        <dc:format>image/svg+xml</dc:format>\n+        <dc:type\n+           rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" />\n+        <dc:title />\n+      </cc:Work>\n+    </rdf:RDF>\n+  </metadata>\n+  <g\n+     id=\"layer1\"\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\">\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-0\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,323.2187,-540.25927)\">\n+      <title\n+         id=\"title22-7-6\">Square</title>\n+      <desc\n+         id=\"desc24-7-4\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-0\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-9\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-9)\" />\n+      </g>\n+      <g\n+         id=\"g13515-4\">\n+        <g\n+           id=\"g13534-5\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-4\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-4\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.165886,88.874699,-447.8809)\">\n+      <title\n+         id=\"title22-7-5\">Square</title>\n+      <desc\n+         id=\"desc24-7-8\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-5\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-7\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-91)\" />\n+      </g>\n+      <g\n+         id=\"g13515-33\">\n+        <g\n+           id=\"g13534-8\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-95\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-9\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,88.874699,-538.24651)\">\n+      <title\n+         id=\"title22-7-9\">Square</title>\n+      <desc\n+         id=\"desc24-7-5\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-2\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-1\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-6)\" />\n+      </g>\n+      <g\n+         id=\"g13515-3\">\n+        <g\n+           id=\"g13534-0\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-9\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.743466px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)\"\n+       d=\"M 220.66064,98.57125 H 321.88592\"\n+       id=\"path17209-8\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.5671361,322.24227,-811.89589)\">\n+      <title\n+         id=\"title22-7\">Square</title>\n+      <desc\n+         id=\"desc24-7\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3)\" />\n+      </g>\n+      <g\n+         id=\"g13515\">\n+        <g\n+           id=\"g13534\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <g\n+       id=\"g13518\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,25.29268,348.89752)\">\n+      <g\n+         id=\"g13526\">\n+        <flowRoot\n+           xml:space=\"preserve\"\n+           id=\"flowRoot13464-9\"\n+           style=\"font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+           transform=\"translate(-12.00521,-129.65179)\"><flowRegion\n+             id=\"flowRegion13466-1\"\n+             style=\"font-family:sans-serif\"><rect\n+               id=\"rect13468-2\"\n+               width=\"195.99997\"\n+               height=\"112.00001\"\n+               x=\"273.33334\"\n+               y=\"175.33333\"\n+               style=\"text-align:center;text-anchor:middle\" /></flowRegion><flowPara\n+             style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+             id=\"flowPara13511\"> </flowPara></flowRoot>\n+      </g>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.751455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:none\"\n+       d=\"m 176.26096,124.64833 v 69.24854\"\n+       id=\"path17209-3\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-4.325033,50.642983)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-3\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.743466px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)\"\n+       d=\"M 322.61264,375 H 221.38736\"\n+       id=\"path17209-8-0\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,0.0689171,324.80833)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-1\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.629082px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)\"\n+       d=\"M 155,324.19955 V 264.82863\"\n+       id=\"path17211-7-1\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-116.37076,245.97088)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-8\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:0.75059;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart-7);marker-end:none\"\n+       d=\"m 126.26097,124.99178 v 69.24941\"\n+       id=\"path17209-3-0\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-146.16394,110.68276)\" />\n+    <path\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-2\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-95.40136,110.71627)\" />\n+    <g\n+       id=\"g29167-4\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-95.31662,112.00756)\">\n+      <text\n+         id=\"text29163-9\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-9\"\n+           sodipodi:role=\"line\">1</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-9\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-4.9726112,50.689051)\">\n+      <text\n+         id=\"text29163-3\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-3\"\n+           sodipodi:role=\"line\">2</tspan></text>\n+    </g>\n+    <path\n+       style=\"fill:none;stroke:#000000;stroke-width:1.04033px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)\"\n+       d=\"M 388.20118,147.93341 V 321.89308\"\n+       id=\"path17211-7\"\n+       inkscape:connector-type=\"orthogonal\"\n+       inkscape:connector-curvature=\"0\" />\n+    <path\n+       transform=\"matrix(0.73232502,0,0,0.75477602,116.5086,136.68745)\"\n+       sodipodi:type=\"arc\"\n+       style=\"fill:#539de6;fill-opacity:1;stroke:#0000ea;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none\"\n+       id=\"path29161-6\"\n+       sodipodi:cx=\"371\"\n+       sodipodi:cy=\"64.5\"\n+       sodipodi:rx=\"17\"\n+       sodipodi:ry=\"15.5\"\n+       d=\"m 388,64.5 a 17,15.5 0 1 1 -34,0 17,15.5 0 1 1 34,0 z\" />\n+    <g\n+       id=\"g29167-46\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,116.59334,137.48829)\">\n+      <text\n+         id=\"text29163-1\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-5\"\n+           sodipodi:role=\"line\">3</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-6\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,0.1536639,325.60918)\">\n+      <text\n+         id=\"text29163-17\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-2\"\n+           sodipodi:role=\"line\">4</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-146.07919,111.10621)\">\n+      <text\n+         id=\"text29163\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165\"\n+           sodipodi:role=\"line\">6</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-117.60784,180.11779)\">\n+      <text\n+         id=\"text29163-9-6\"\n+         y=\"70\"\n+         x=\"321.30356\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"321.30356\"\n+           id=\"tspan29165-9-7\"\n+           sodipodi:role=\"line\">Eventdev</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-5\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,55.34956,26.97821)\">\n+      <text\n+         id=\"text29163-9-6-3\"\n+         y=\"70\"\n+         x=\"454.74152\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"70\"\n+           x=\"454.74152\"\n+           id=\"tspan29165-9-7-5\"\n+           sodipodi:role=\"line\">A<tspan\n+   style=\"line-height:100%;font-family:sans-serif\"\n+   id=\"tspan3374\">tomic Stage</tspan></tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"94.210899\"\n+           x=\"454.74152\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3320\">+</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"115.7317\"\n+           x=\"454.74152\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3322\">Enqueue to</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"137.2525\"\n+           x=\"454.74152\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3324\">DMA Device</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-2\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-116.28602,248.01695)\">\n+      <text\n+         id=\"text29163-92\"\n+         y=\"70\"\n+         x=\"365\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"365\"\n+           id=\"tspan29165-8\"\n+           sodipodi:role=\"line\">5</tspan></text>\n+    </g>\n+    <flowRoot\n+       xml:space=\"preserve\"\n+       id=\"flowRoot3376\"\n+       style=\"font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\"><flowRegion\n+         id=\"flowRegion3378\"\n+         style=\"font-family:sans-serif\"><rect\n+           id=\"rect3380\"\n+           width=\"100\"\n+           height=\"37\"\n+           x=\"109\"\n+           y=\"259\" /></flowRegion><flowPara\n+         id=\"flowPara3382\"\n+         style=\"font-size:18px;line-height:1.25;font-family:sans-serif\"> </flowPara></flowRoot>\n+    <g\n+       id=\"g29167-4-3-1\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,109.34956,323.97821)\">\n+      <text\n+         id=\"text29163-9-6-8\"\n+         y=\"70\"\n+         x=\"321.30356\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"321.30356\"\n+           id=\"tspan29165-9-7-7\"\n+           sodipodi:role=\"line\">DMA Device</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-1-9\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-114.48565,314.20704)\">\n+      <text\n+         id=\"text29163-9-6-8-2\"\n+         y=\"70\"\n+         x=\"368.01718\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"70\"\n+           x=\"368.01718\"\n+           id=\"tspan29165-9-7-7-0\"\n+           sodipodi:role=\"line\">DMA</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;writing-mode:lr-tb;text-anchor:middle\"\n+           y=\"100.26363\"\n+           x=\"368.01718\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3488\">Adapter</tspan></text>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-1-9-2\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,250.96804,192.62529)\">\n+      <text\n+         id=\"text29163-9-6-8-2-3\"\n+         y=\"-188.35481\"\n+         x=\"318.61978\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-188.35481\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3543\">1. Application dequeues</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-161.45381\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3196\">    events from the previous</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-134.55281\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3232\">    stage</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-107.65182\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3519\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-80.750816\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3551\">2. Application prepares the</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-53.849815\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3203\">    DMA operations.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-26.948814\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3523\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"-0.0478158\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3541\">3. DMA operations are</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"26.853184\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3207\">    submitted to dmadev</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"53.754185\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3209\">    by application.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"80.655182\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3527\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"107.55618\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3547\">4. DMA adapter dequeues</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"134.45718\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3216\">    DMA completions from</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"161.35818\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3218\">    DMA device.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"188.25919\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3531\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"215.16019\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3549\">5. DMA adapter enqueues</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"242.06119\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3222\">    events to the eventdev.</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"268.96219\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3535\"> </tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"295.86319\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3537\">6. Application dequeues from</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"322.76419\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3224\">    eventdev and prepare for</tspan><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.5208px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"349.66519\"\n+           x=\"318.61978\"\n+           sodipodi:role=\"line\"\n+           id=\"tspan3226\">    further processing</tspan></text>\n+    </g>\n+    <g\n+       style=\"font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible\"\n+       id=\"shape1-1-2-4-7\"\n+       v:mID=\"1\"\n+       v:groupContext=\"shape\"\n+       transform=\"matrix(2.1604167,0,0,1.165886,90.820551,-587.97129)\">\n+      <title\n+         id=\"title22-7-5-5\">Square</title>\n+      <desc\n+         id=\"desc24-7-8-3\">Atomic Queue #1</desc>\n+      <v:userDefs>\n+        <v:ud\n+           v:nameU=\"visVersion\"\n+           v:val=\"VT0(15):26\" />\n+      </v:userDefs>\n+      <v:textBlock\n+         v:margins=\"rect(4,4,4,4)\" />\n+      <v:textRect\n+         cx=\"30.75\"\n+         cy=\"581.25\"\n+         width=\"61.5\"\n+         height=\"61.5\" />\n+      <g\n+         id=\"shadow1-2-9-5-5\"\n+         v:groupContext=\"shadow\"\n+         v:shadowOffsetX=\"0.345598\"\n+         v:shadowOffsetY=\"-1.97279\"\n+         v:shadowType=\"1\"\n+         transform=\"translate(0.345598,1.97279)\"\n+         class=\"st1\"\n+         style=\"visibility:visible\">\n+        <rect\n+           x=\"0\"\n+           y=\"550.5\"\n+           width=\"61.5\"\n+           height=\"61.5\"\n+           class=\"st2\"\n+           id=\"rect27-8-7-6\"\n+           style=\"fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-3-91-3)\" />\n+      </g>\n+      <g\n+         id=\"g13515-33-2\">\n+        <g\n+           id=\"g13534-8-9\">\n+          <rect\n+             x=\"0\"\n+             y=\"550.5\"\n+             width=\"61.5\"\n+             height=\"61.5\"\n+             class=\"st3\"\n+             id=\"rect29-1-95-1\"\n+             style=\"fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25\" />\n+        </g>\n+      </g>\n+    </g>\n+    <g\n+       id=\"g29167-4-3-2\"\n+       transform=\"matrix(0.73232502,0,0,0.75477602,-125.66199,44.027402)\">\n+      <text\n+         id=\"text29163-9-6-7\"\n+         y=\"70\"\n+         x=\"321.30356\"\n+         style=\"font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none\"\n+         xml:space=\"preserve\"><tspan\n+           style=\"font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.2109px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start\"\n+           y=\"70\"\n+           x=\"321.30356\"\n+           id=\"tspan29165-9-7-0\"\n+           sodipodi:role=\"line\">Application</tspan></text>\n+    </g>\n+  </g>\n+</svg>\ndiff --git a/doc/guides/prog_guide/index.rst b/doc/guides/prog_guide/index.rst\nindex 52a6d9e7aa..beaa4b8869 100644\n--- a/doc/guides/prog_guide/index.rst\n+++ b/doc/guides/prog_guide/index.rst\n@@ -60,6 +60,7 @@ Programmer's Guide\n     event_ethernet_tx_adapter\n     event_timer_adapter\n     event_crypto_adapter\n+    event_dma_adapter\n     qos_framework\n     power_man\n     packet_classif_access_ctrl\ndiff --git a/doc/guides/rel_notes/release_23_11.rst b/doc/guides/rel_notes/release_23_11.rst\nindex b34ddc0860..70f2e7e03c 100644\n--- a/doc/guides/rel_notes/release_23_11.rst\n+++ b/doc/guides/rel_notes/release_23_11.rst\n@@ -44,7 +44,9 @@ New Features\n .. This section should contain new features added in this release.\n    Sample format:\n \n-   * **Add a title in the past tense with a full stop.**\n+   * **Added eventdev DMA adapter library.**\n+\n+     Added API to DMA transfer data using event mechanism.\n \n      Add a short 1-2 sentence description in the past tense.\n      The description should be enough to allow someone scanning\ndiff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h\nindex f62f42e140..8e5fd420f6 100644\n--- a/lib/eventdev/eventdev_pmd.h\n+++ b/lib/eventdev/eventdev_pmd.h\n@@ -178,8 +178,12 @@ struct rte_eventdev {\n \tevent_tx_adapter_enqueue_t txa_enqueue;\n \t/**< Pointer to PMD eth Tx adapter enqueue function. */\n \tevent_crypto_adapter_enqueue_t ca_enqueue;\n+\t/**< Pointer to PMD crypto adapter enqueue function. */\n \n-\tuint64_t reserved_64s[4]; /**< Reserved for future fields */\n+\tevent_dma_adapter_enqueue_t dma_enqueue;\n+\t/**< Pointer to PMD DMA adapter enqueue function. */\n+\n+\tuint64_t reserved_64s[3]; /**< Reserved for future fields */\n \tvoid *reserved_ptrs[3];\t  /**< Reserved for future fields */\n } __rte_cache_aligned;\n \n@@ -1320,6 +1324,160 @@ typedef int (*eventdev_eth_tx_adapter_queue_stop)\n \n #define eventdev_stop_flush_t rte_eventdev_stop_flush_t\n \n+/**\n+ * Retrieve the event device's DMA adapter capabilities for the\n+ * specified DMA device\n+ *\n+ * @param dev\n+ *   Event device pointer\n+ *\n+ * @param dma_dev_id\n+ *   DMA device identification\n+ *\n+ * @param[out] caps\n+ *   A pointer to memory filled with event adapter capabilities.\n+ *   It is expected to be pre-allocated & initialized by caller.\n+ *\n+ * @return\n+ *   - 0: Success, driver provides event adapter capabilities for the\n+ *\tDMADEV.\n+ *   - <0: Error code returned by the driver function.\n+ *\n+ */\n+typedef int (*eventdev_dma_adapter_caps_get_t)(const struct rte_eventdev *dev,\n+\t\t\t\t\t       const int16_t dma_dev_id, uint32_t *caps);\n+\n+/**\n+ * This API may change without prior notice\n+ *\n+ * Add DMA vchan queue to event device. This callback is invoked if\n+ * the caps returned from rte_event_dma_adapter_caps_get(, dmadev_id)\n+ * has RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_* set.\n+ *\n+ * @param dev\n+ *   Event device pointer\n+ *\n+ * @param dma_dev_id\n+ *   DMADEV identification\n+ *\n+ * @param vchan_id\n+ *   DMADEV vchan queue identifier.\n+ *\n+ * @param event\n+ *  Event information required for binding dmadev queue pair to event queue.\n+ * This structure will have a valid value for only those HW PMDs supporting\n+ * @see RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND capability.\n+ *\n+ * @return\n+ *   - 0: Success, dmadev vchan added successfully.\n+ *   - <0: Error code returned by the driver function.\n+ *\n+ */\n+typedef int (*eventdev_dma_adapter_vchan_add_t)(const struct rte_eventdev *dev,\n+\t\t\t\t\t\tconst int16_t dma_dev_id,\n+\t\t\t\t\t\tuint16_t vchan_id,\n+\t\t\t\t\t\tconst struct rte_event *event);\n+\n+/**\n+ * This API may change without prior notice\n+ *\n+ * Delete DMA vhcan to event device. This callback is invoked if\n+ * the caps returned from rte_event_dma_adapter_caps_get(, dmadev_id)\n+ * has RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_* set.\n+ *\n+ * @param dev\n+ *   Event device pointer\n+ *\n+ * @param dma_dev_id\n+ *   DMADEV identification\n+ *\n+ * @param vchan_id\n+ *   dmadev vchan identifier.\n+ *\n+ * @return\n+ *   - 0: Success, dmadev vchan deleted successfully.\n+ *   - <0: Error code returned by the driver function.\n+ *\n+ */\n+typedef int (*eventdev_dma_adapter_vchan_del_t)(const struct rte_eventdev *dev,\n+\t\t\t\t\t\tconst int16_t dma_dev_id,\n+\t\t\t\t\t\tuint16_t vchan_id);\n+\n+/**\n+ * Start DMA adapter. This callback is invoked if\n+ * the caps returned from rte_event_dma_adapter_caps_get(.., dmadev_id)\n+ * has RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_* set and vchan for dmadev_id\n+ * have been added to the event device.\n+ *\n+ * @param dev\n+ *   Event device pointer\n+ *\n+ * @param dma_dev_id\n+ *   DMA device identification\n+ *\n+ * @return\n+ *   - 0: Success, DMA adapter started successfully.\n+ *   - <0: Error code returned by the driver function.\n+ */\n+typedef int (*eventdev_dma_adapter_start_t)(const struct rte_eventdev *dev,\n+\t\t\t\t\t    const int16_t dma_dev_id);\n+\n+/**\n+ * Stop DMA adapter. This callback is invoked if\n+ * the caps returned from rte_event_dma_adapter_caps_get(.., dmadev_id)\n+ * has RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_* set and vchan for dmadev_id\n+ * have been added to the event device.\n+ *\n+ * @param dev\n+ *   Event device pointer\n+ *\n+ * @param dma_dev_id\n+ *   DMA device identification\n+ *\n+ * @return\n+ *   - 0: Success, DMA adapter stopped successfully.\n+ *   - <0: Error code returned by the driver function.\n+ */\n+typedef int (*eventdev_dma_adapter_stop_t)(const struct rte_eventdev *dev,\n+\t\t\t\t\t   const int16_t dma_dev_id);\n+\n+struct rte_event_dma_adapter_stats;\n+\n+/**\n+ * Retrieve DMA adapter statistics.\n+ *\n+ * @param dev\n+ *   Event device pointer\n+ *\n+ * @param dma_dev_id\n+ *   DMA device identification\n+ *\n+ * @param[out] stats\n+ *   Pointer to stats structure\n+ *\n+ * @return\n+ *   Return 0 on success.\n+ */\n+typedef int (*eventdev_dma_adapter_stats_get)(const struct rte_eventdev *dev,\n+\t\t\t\t\t      const int16_t dma_dev_id,\n+\t\t\t\t\t      struct rte_event_dma_adapter_stats *stats);\n+\n+/**\n+ * Reset DMA adapter statistics.\n+ *\n+ * @param dev\n+ *   Event device pointer\n+ *\n+ * @param dma_dev_id\n+ *   DMA device identification\n+ *\n+ * @return\n+ *   Return 0 on success.\n+ */\n+typedef int (*eventdev_dma_adapter_stats_reset)(const struct rte_eventdev *dev,\n+\t\t\t\t\t\tconst int16_t dma_dev_id);\n+\n+\n /** Event device operations function pointer table */\n struct eventdev_ops {\n \teventdev_info_get_t dev_infos_get;\t/**< Get device info. */\n@@ -1440,6 +1598,21 @@ struct eventdev_ops {\n \teventdev_eth_tx_adapter_queue_stop eth_tx_adapter_queue_stop;\n \t/**< Stop Tx queue assigned to Tx adapter instance */\n \n+\teventdev_dma_adapter_caps_get_t dma_adapter_caps_get;\n+\t/**< Get DMA adapter capabilities */\n+\teventdev_dma_adapter_vchan_add_t dma_adapter_vchan_add;\n+\t/**< Add vchan queue to DMA adapter */\n+\teventdev_dma_adapter_vchan_del_t dma_adapter_vchan_del;\n+\t/**< Delete vchan queue from DMA adapter */\n+\teventdev_dma_adapter_start_t dma_adapter_start;\n+\t/**< Start DMA adapter */\n+\teventdev_dma_adapter_stop_t dma_adapter_stop;\n+\t/**< Stop DMA adapter */\n+\teventdev_dma_adapter_stats_get dma_adapter_stats_get;\n+\t/**< Get DMA stats */\n+\teventdev_dma_adapter_stats_reset dma_adapter_stats_reset;\n+\t/**< Reset DMA stats */\n+\n \teventdev_selftest dev_selftest;\n \t/**< Start eventdev Selftest */\n \ndiff --git a/lib/eventdev/eventdev_private.c b/lib/eventdev/eventdev_private.c\nindex 1d3d9d357e..18ed8bf3c8 100644\n--- a/lib/eventdev/eventdev_private.c\n+++ b/lib/eventdev/eventdev_private.c\n@@ -81,6 +81,14 @@ dummy_event_crypto_adapter_enqueue(__rte_unused void *port,\n \treturn 0;\n }\n \n+static uint16_t\n+dummy_event_dma_adapter_enqueue(__rte_unused void *port, __rte_unused struct rte_event ev[],\n+\t\t\t       __rte_unused uint16_t nb_events)\n+{\n+\tRTE_EDEV_LOG_ERR(\"event DMA adapter enqueue requested for unconfigured event device\");\n+\treturn 0;\n+}\n+\n void\n event_dev_fp_ops_reset(struct rte_event_fp_ops *fp_op)\n {\n@@ -97,6 +105,7 @@ event_dev_fp_ops_reset(struct rte_event_fp_ops *fp_op)\n \t\t.txa_enqueue_same_dest =\n \t\t\tdummy_event_tx_adapter_enqueue_same_dest,\n \t\t.ca_enqueue = dummy_event_crypto_adapter_enqueue,\n+\t\t.dma_enqueue = dummy_event_dma_adapter_enqueue,\n \t\t.data = dummy_data,\n \t};\n \n@@ -117,5 +126,6 @@ event_dev_fp_ops_set(struct rte_event_fp_ops *fp_op,\n \tfp_op->txa_enqueue = dev->txa_enqueue;\n \tfp_op->txa_enqueue_same_dest = dev->txa_enqueue_same_dest;\n \tfp_op->ca_enqueue = dev->ca_enqueue;\n+\tfp_op->dma_enqueue = dev->dma_enqueue;\n \tfp_op->data = dev->data->ports;\n }\ndiff --git a/lib/eventdev/meson.build b/lib/eventdev/meson.build\nindex 6edf98dfa5..21347f7c4c 100644\n--- a/lib/eventdev/meson.build\n+++ b/lib/eventdev/meson.build\n@@ -25,6 +25,7 @@ sources = files(\n )\n headers = files(\n         'rte_event_crypto_adapter.h',\n+        'rte_event_dma_adapter.h',\n         'rte_event_eth_rx_adapter.h',\n         'rte_event_eth_tx_adapter.h',\n         'rte_event_ring.h',\ndiff --git a/lib/eventdev/rte_event_dma_adapter.h b/lib/eventdev/rte_event_dma_adapter.h\nnew file mode 100644\nindex 0000000000..d413d31a61\n--- /dev/null\n+++ b/lib/eventdev/rte_event_dma_adapter.h\n@@ -0,0 +1,582 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright (c) 2023 Marvell.\n+ */\n+\n+#ifndef RTE_EVENT_DMA_ADAPTER\n+#define RTE_EVENT_DMA_ADAPTER\n+\n+/**\n+ * @file rte_event_dma_adapter.h\n+ *\n+ * @warning\n+ * @b EXPERIMENTAL:\n+ * All functions in this file may be changed or removed without prior notice.\n+ *\n+ * DMA Event Adapter API.\n+ *\n+ * Eventdev library provides adapters to bridge between various components for providing new\n+ * event source. The event DMA adapter is one of those adapters which is intended to bridge\n+ * between event devices and DMA devices.\n+ *\n+ * The DMA adapter adds support to enqueue / dequeue DMA operations to / from event device. The\n+ * packet flow between DMA device and the event device can be accomplished using both SW and HW\n+ * based transfer mechanisms. The adapter uses an EAL service core function for SW based packet\n+ * transfer and uses the eventdev PMD functions to configure HW based packet transfer between the\n+ * DMA device and the event device.\n+ *\n+ * The application can choose to submit a DMA operation directly to an DMA device or send it to the\n+ * DMA adapter via eventdev based on RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability. The\n+ * first mode is known as the event new (RTE_EVENT_DMA_ADAPTER_OP_NEW) mode and the second as the\n+ * event forward (RTE_EVENT_DMA_ADAPTER_OP_FORWARD) mode. The choice of mode can be specified while\n+ * creating the adapter. In the former mode, it is an application responsibility to enable ingress\n+ * packet ordering. In the latter mode, it is the adapter responsibility to enable the ingress\n+ * packet ordering.\n+ *\n+ *\n+ * Working model of RTE_EVENT_DMA_ADAPTER_OP_NEW mode:\n+ *\n+ *                +--------------+         +--------------+\n+ *                |              |         |   DMA stage  |\n+ *                | Application  |---[2]-->| + enqueue to |\n+ *                |              |         |     dmadev   |\n+ *                +--------------+         +--------------+\n+ *                    ^   ^                       |\n+ *                    |   |                      [3]\n+ *                   [6] [1]                      |\n+ *                    |   |                       |\n+ *                +--------------+                |\n+ *                |              |                |\n+ *                | Event device |                |\n+ *                |              |                |\n+ *                +--------------+                |\n+ *                       ^                        |\n+ *                       |                        |\n+ *                      [5]                       |\n+ *                       |                        v\n+ *                +--------------+         +--------------+\n+ *                |              |         |              |\n+ *                |  DMA adapter |<--[4]---|    dmadev    |\n+ *                |              |         |              |\n+ *                +--------------+         +--------------+\n+ *\n+ *\n+ *         [1] Application dequeues events from the previous stage.\n+ *         [2] Application prepares the DMA operations.\n+ *         [3] DMA operations are submitted to dmadev by application.\n+ *         [4] DMA adapter dequeues DMA completions from dmadev.\n+ *         [5] DMA adapter enqueues events to the eventdev.\n+ *         [6] Application dequeues from eventdev for further processing.\n+ *\n+ * In the RTE_EVENT_DMA_ADAPTER_OP_NEW mode, application submits DMA operations directly to DMA\n+ * device. The DMA adapter then dequeues DMA completions from DMA device and enqueue events to the\n+ * event device. This mode does not ensure ingress ordering, if the application directly enqueues\n+ * to dmadev without going through DMA / atomic stage i.e. removing item [1] and [2].\n+ *\n+ * Events dequeued from the adapter will be treated as new events. In this mode, application needs\n+ * to specify event information (response information) which is needed to enqueue an event after the\n+ * DMA operation is completed.\n+ *\n+ *\n+ * Working model of RTE_EVENT_DMA_ADAPTER_OP_FORWARD mode:\n+ *\n+ *                +--------------+         +--------------+\n+ *        --[1]-->|              |---[2]-->|  Application |\n+ *                | Event device |         |      in      |\n+ *        <--[8]--|              |<--[3]---| Ordered stage|\n+ *                +--------------+         +--------------+\n+ *                    ^      |\n+ *                    |     [4]\n+ *                   [7]     |\n+ *                    |      v\n+ *               +----------------+       +--------------+\n+ *               |                |--[5]->|              |\n+ *               |   DMA adapter  |       |     dmadev   |\n+ *               |                |<-[6]--|              |\n+ *               +----------------+       +--------------+\n+ *\n+ *\n+ *         [1] Events from the previous stage.\n+ *         [2] Application in ordered stage dequeues events from eventdev.\n+ *         [3] Application enqueues DMA operations as events to eventdev.\n+ *         [4] DMA adapter dequeues event from eventdev.\n+ *         [5] DMA adapter submits DMA operations to dmadev (Atomic stage).\n+ *         [6] DMA adapter dequeues DMA completions from dmadev\n+ *         [7] DMA adapter enqueues events to the eventdev\n+ *         [8] Events to the next stage\n+ *\n+ * In the event forward (RTE_EVENT_DMA_ADAPTER_OP_FORWARD) mode, if the HW supports the capability\n+ * RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD, application can directly submit the DMA\n+ * operations to the dmadev. If not, application retrieves the event port of the DMA adapter\n+ * through the API, rte_event_DMA_adapter_event_port_get(). Then, links its event queue to this\n+ * port and starts enqueuing DMA operations as events to the eventdev. The adapter then dequeues\n+ * the events and submits the DMA operations to the dmadev. After the DMA completions, the adapter\n+ * enqueues events to the event device.\n+ *\n+ * Application can use this mode, when ingress packet ordering is needed. Events dequeued from the\n+ * adapter will be treated as forwarded events. In this mode, the application needs to specify the\n+ * dmadev ID and queue pair ID (request information) needed to enqueue an DMA operation in addition\n+ * to the event information (response information) needed to enqueue an event after the DMA\n+ * operation has completed.\n+ *\n+ * The event DMA adapter provides common APIs to configure the packet flow from the DMA device to\n+ * event devices for both SW and HW based transfers. The DMA event adapter's functions are:\n+ *\n+ *  - rte_event_dma_adapter_create_ext()\n+ *  - rte_event_dma_adapter_create()\n+ *  - rte_event_dma_adapter_free()\n+ *  - rte_event_dma_adapter_vchan_add()\n+ *  - rte_event_dma_adapter_vchan_del()\n+ *  - rte_event_dma_adapter_start()\n+ *  - rte_event_dma_adapter_stop()\n+ *  - rte_event_dma_adapter_stats_get()\n+ *  - rte_event_dma_adapter_stats_reset()\n+ *\n+ * The application creates an instance using rte_event_dma_adapter_create() or\n+ * rte_event_dma_adapter_create_ext().\n+ *\n+ * dmadev queue pair addition / deletion is done using the rte_event_dma_adapter_vchan_add() /\n+ * rte_event_dma_adapter_vchan_del() APIs. If HW supports the capability\n+ * RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND, event information must be passed to the\n+ * add API.\n+ *\n+ */\n+\n+#include <stdint.h>\n+\n+#include <rte_eventdev.h>\n+#include <rte_common.h>\n+#include <rte_dmadev_pmd.h>\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+/**\n+ * A structure used to hold event based DMA operation entry. All the information\n+ * required for a DMA transfer shall be populated in \"struct rte_event_dma_adapter_op\"\n+ * instance.\n+ */\n+struct rte_event_dma_adapter_op {\n+\tstruct rte_dma_sge *src_seg;\n+\t/**< Source segments. */\n+\tstruct rte_dma_sge *dst_seg;\n+\t/**< Destination segments. */\n+\tuint16_t nb_src;\n+\t/**< Number of source segments. */\n+\tuint16_t nb_dst;\n+\t/**< Number of destination segments. */\n+\tuint64_t flags;\n+\t/**< Flags related to the operation.\n+\t * @see RTE_DMA_OP_FLAG_*\n+\t */\n+\tint16_t dma_dev_id;\n+\t/**< DMA device ID to be used */\n+\tuint16_t vchan;\n+\t/**< DMA vchan ID to be used */\n+\tstruct rte_mempool *op_mp;\n+\t/**< Mempool from which op is allocated. */\n+};\n+\n+/**\n+ *  DMA event adapter mode\n+ */\n+enum rte_event_dma_adapter_mode {\n+\tRTE_EVENT_DMA_ADAPTER_OP_NEW,\n+\t/**< Start the DMA adapter in event new mode.\n+\t * @see RTE_EVENT_OP_NEW.\n+\t *\n+\t * Application submits DMA operations to the dmadev. Adapter only dequeues the DMA\n+\t * completions from dmadev and enqueue events to the eventdev.\n+\t */\n+\n+\tRTE_EVENT_DMA_ADAPTER_OP_FORWARD,\n+\t/**< Start the DMA adapter in event forward mode.\n+\t * @see RTE_EVENT_OP_FORWARD.\n+\t *\n+\t * Application submits DMA requests as events to the DMA adapter or DMA device based on\n+\t * RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability. DMA completions are enqueued\n+\t * back to the eventdev by DMA adapter.\n+\t */\n+};\n+\n+/**\n+ * Adapter configuration structure that the adapter configuration callback function is expected to\n+ * fill out.\n+ *\n+ * @see rte_event_dma_adapter_conf_cb\n+ */\n+struct rte_event_dma_adapter_conf {\n+\tuint8_t event_port_id;\n+\t/** < Event port identifier, the adapter enqueues events to this port and dequeues DMA\n+\t * request events in RTE_EVENT_DMA_ADAPTER_OP_FORWARD mode.\n+\t */\n+\n+\tuint32_t max_nb;\n+\t/**< The adapter can return early if it has processed at least max_nb DMA ops. This isn't\n+\t * treated as a requirement; batching may cause the adapter to process more than max_nb DMA\n+\t * ops.\n+\t */\n+};\n+\n+/**\n+ * Adapter runtime configuration parameters\n+ */\n+struct rte_event_dma_adapter_runtime_params {\n+\tuint32_t max_nb;\n+\t/**< The adapter can return early if it has processed at least max_nb DMA ops. This isn't\n+\t * treated as a requirement; batching may cause the adapter to process more than max_nb DMA\n+\t * ops.\n+\t *\n+\t * Callback function passed to rte_event_dma_adapter_create_ext() configures the adapter\n+\t * with default value of max_nb.\n+\t * rte_event_dma_adapter_runtime_params_set() allows to re-configure max_nb during runtime\n+\t * (after adding at least one queue pair)\n+\t *\n+\t * This is valid for the devices without RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD or\n+\t * RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_NEW capability.\n+\t */\n+\n+\tuint32_t rsvd[15];\n+\t/**< Reserved fields for future expansion */\n+};\n+\n+/**\n+ * Function type used for adapter configuration callback. The callback is used to fill in members of\n+ * the struct rte_event_dma_adapter_conf, this callback is invoked when creating a SW service for\n+ * packet transfer from dmadev vchan to the event device. The SW service is created within the\n+ * function, rte_event_dma_adapter_vchan_add(), if SW based packet transfers from dmadev vchan\n+ * to the event device are required.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param evdev_id\n+ *     Event device identifier.\n+ * @param 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_dma_adapter_create_ext().\n+ */\n+typedef int (*rte_event_dma_adapter_conf_cb)(uint8_t id, uint8_t evdev_id,\n+\t\t\t\t\t     struct rte_event_dma_adapter_conf *conf, void *arg);\n+\n+/**\n+ * A structure used to retrieve statistics for an event DMA adapter instance.\n+ */\n+struct rte_event_dma_adapter_stats {\n+\tuint64_t event_poll_count;\n+\t/**< Event port poll count */\n+\n+\tuint64_t event_deq_count;\n+\t/**< Event dequeue count */\n+\n+\tuint64_t dma_enq_count;\n+\t/**< dmadev enqueue count */\n+\n+\tuint64_t dma_enq_fail_count;\n+\t/**< dmadev enqueue failed count */\n+\n+\tuint64_t dma_deq_count;\n+\t/**< dmadev dequeue count */\n+\n+\tuint64_t event_enq_count;\n+\t/**< Event enqueue count */\n+\n+\tuint64_t event_enq_retry_count;\n+\t/**< Event enqueue retry count */\n+\n+\tuint64_t event_enq_fail_count;\n+\t/**< Event enqueue fail count */\n+};\n+\n+/**\n+ * Create a new event DMA adapter with the specified identifier.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param evdev_id\n+ *     Event device identifier.\n+ * @param conf_cb\n+ *     Callback function that fills in members of a struct rte_event_dma_adapter_conf struct passed\n+ * into it.\n+ * @param mode\n+ *     Flag to indicate the mode of the adapter.\n+ *     @see rte_event_dma_adapter_mode\n+ * @param conf_arg\n+ *     Argument that is passed to the conf_cb function.\n+ *\n+ * @return\n+ *     - 0: Success\n+ *     - <0: Error code on failure\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_create_ext(uint8_t id, uint8_t evdev_id,\n+\t\t\t\t     rte_event_dma_adapter_conf_cb conf_cb,\n+\t\t\t\t     enum rte_event_dma_adapter_mode mode, void *conf_arg);\n+\n+/**\n+ * Create a new event DMA adapter with the specified identifier. This function uses an internal\n+ * configuration function that creates an event port. This default function reconfigures the event\n+ * device with an additional event port and set up the event port using the port_config parameter\n+ * passed into this function. In case the application needs more control in configuration of the\n+ * service, it should use the rte_event_dma_adapter_create_ext() version.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param evdev_id\n+ *     Event device identifier.\n+ * @param port_config\n+ *     Argument of type *rte_event_port_conf* that is passed to the conf_cb function.\n+ * @param mode\n+ *     Flag to indicate the mode of the adapter.\n+ *     @see rte_event_dma_adapter_mode\n+ *\n+ * @return\n+ *     - 0: Success\n+ *     - <0: Error code on failure\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_create(uint8_t id, uint8_t evdev_id,\n+\t\t\t\t struct rte_event_port_conf *port_config,\n+\t\t\t\t enum rte_event_dma_adapter_mode mode);\n+\n+/**\n+ * Free an event DMA adapter\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @return\n+ *     - 0: Success\n+ *     - <0: Error code on failure, If the adapter still has queue pairs added to it, the function\n+ * returns -EBUSY.\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_free(uint8_t id);\n+\n+/**\n+ * Retrieve the event port of an adapter.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ *\n+ * @param [out] event_port_id\n+ *     Application links its event queue to this adapter port which is used in\n+ * RTE_EVENT_DMA_ADAPTER_OP_FORWARD mode.\n+ *\n+ * @return\n+ *     - 0: Success\n+ *     - <0: Error code on failure.\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_event_port_get(uint8_t id, uint8_t *event_port_id);\n+\n+/**\n+ * Add a vchan to an event DMA adapter.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param dmadev_id\n+ *     dmadev identifier.\n+ * @param vchan\n+ *     DMA device vchan identifier. If vchan is set -1, adapter adds all the\n+ * preconfigured vchan to the instance.\n+ * @param event\n+ *     If HW supports dmadev vchan to event queue binding, application is expected to fill in\n+ * event information, else it will be NULL.\n+ *     @see RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND\n+ *\n+ * @return\n+ *     - 0: Success, vchan added correctly.\n+ *     - <0: Error code on failure.\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_vchan_add(uint8_t id, int16_t dmadev_id, uint16_t vchan,\n+\t\t\t\t    const struct rte_event *event);\n+\n+/**\n+ * Delete a vchan from an event DMA adapter.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ * @param dmadev_id\n+ *     DMA device identifier.\n+ * @param vchan\n+ *     DMA device vchan identifier.\n+ *\n+ * @return\n+ *     - 0: Success, vchan deleted successfully.\n+ *     - <0: Error code on failure.\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_vchan_del(uint8_t id, int16_t dmadev_id, uint16_t vchan);\n+\n+/**\n+ * Retrieve the service ID of an adapter. If the adapter doesn't use a rte_service function, this\n+ * 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+ *\n+ * @return\n+ *     - 0: Success\n+ *     - <0: Error code on failure, if the adapter doesn't use a rte_service function, this function\n+ * returns -ESRCH.\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_service_id_get(uint8_t id, uint32_t *service_id);\n+\n+/**\n+ * Start event DMA adapter\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ *\n+ * @return\n+ *     - 0: Success, adapter started successfully.\n+ *     - <0: Error code on failure.\n+ *\n+ * @note The eventdev and dmadev to which the event_dma_adapter is connected should be started\n+ * before calling rte_event_dma_adapter_start().\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_start(uint8_t id);\n+\n+/**\n+ * Stop event DMA adapter\n+ *\n+ * @param id\n+ *  Adapter identifier.\n+ *\n+ * @return\n+ *  - 0: Success, adapter stopped successfully.\n+ *  - <0: Error code on failure.\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_stop(uint8_t id);\n+\n+/**\n+ * Initialize the adapter runtime configuration parameters\n+ *\n+ * @param params\n+ *  A pointer to structure of type struct rte_event_dma_adapter_runtime_params\n+ *\n+ * @return\n+ *  -  0: Success\n+ *  - <0: Error code on failure\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_runtime_params_init(struct rte_event_dma_adapter_runtime_params *params);\n+\n+/**\n+ * Set the adapter runtime configuration parameters\n+ *\n+ * @param id\n+ *  Adapter identifier\n+ *\n+ * @param params\n+ *  A pointer to structure of type struct rte_event_dma_adapter_runtime_params with configuration\n+ * parameter values. The reserved fields of this structure must be initialized to zero and the valid\n+ * fields need to be set appropriately. This struct can be initialized using\n+ * rte_event_dma_adapter_runtime_params_init() API to default values or application may reset this\n+ * struct and update required fields.\n+ *\n+ * @return\n+ *  -  0: Success\n+ *  - <0: Error code on failure\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_runtime_params_set(uint8_t id,\n+\t\t\t\t\t     struct rte_event_dma_adapter_runtime_params *params);\n+\n+/**\n+ * Get the adapter runtime configuration parameters\n+ *\n+ * @param id\n+ *  Adapter identifier\n+ *\n+ * @param[out] params\n+ *  A pointer to structure of type struct rte_event_dma_adapter_runtime_params containing valid\n+ * adapter parameters when return value is 0.\n+ *\n+ * @return\n+ *  -  0: Success\n+ *  - <0: Error code on failure\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_runtime_params_get(uint8_t id,\n+\t\t\t\t\t     struct rte_event_dma_adapter_runtime_params *params);\n+\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+ *\n+ * @return\n+ *     - 0: Success, retrieved successfully.\n+ *     - <0: Error code on failure.\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_stats_get(uint8_t id, struct rte_event_dma_adapter_stats *stats);\n+\n+/**\n+ * Reset statistics for an adapter.\n+ *\n+ * @param id\n+ *     Adapter identifier.\n+ *\n+ * @return\n+ *     - 0: Success, statistics reset successfully.\n+ *     - <0: Error code on failure.\n+ */\n+__rte_experimental\n+int rte_event_dma_adapter_stats_reset(uint8_t id);\n+\n+/**\n+ * Enqueue a burst of DMA operations as event objects supplied in *rte_event* structure on an event\n+ * DMA adapter designated by its event *evdev_id* through the event port specified by *port_id*.\n+ * This function is supported if the eventdev PMD has the\n+ * #RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability flag set.\n+ *\n+ * The *nb_events* parameter is the number of event objects to enqueue that are supplied in the\n+ * *ev* array of *rte_event* structure.\n+ *\n+ * The rte_event_dma_adapter_enqueue() function returns the number of event objects it actually\n+ * enqueued. A return value equal to *nb_events* means that all event objects have been enqueued.\n+ *\n+ * @param evdev_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 which contain the\n+ * 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...) available for this port.\n+ *\n+ * @return\n+ *     The number of event objects actually enqueued on the event device. The return value can be\n+ * less than the value of the *nb_events* parameter when the event devices queue is full or if\n+ * invalid parameters are specified in a *rte_event*. If the return value is less than *nb_events*,\n+ * the remaining events at the end of ev[] are not consumed and the caller has to take care of them,\n+ * and rte_errno is set accordingly. Possible errno values include:\n+ *\n+ *     - EINVAL: The port ID is invalid, device ID is invalid, an event's queue ID is invalid, or an\n+ * event's sched type doesn't match the capabilities of the destination queue.\n+ *     - ENOSPC: The event port was backpressured and unable to enqueue one or more events. This\n+ * error code is only applicable to closed systems.\n+ */\n+__rte_experimental\n+uint16_t rte_event_dma_adapter_enqueue(uint8_t evdev_id, uint8_t port_id, struct rte_event ev[],\n+\t\t\t\t       uint16_t nb_events);\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* RTE_EVENT_DMA_ADAPTER */\ndiff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h\nindex 2ba8a7b090..2c6ecc7f8f 100644\n--- a/lib/eventdev/rte_eventdev.h\n+++ b/lib/eventdev/rte_eventdev.h\n@@ -1197,6 +1197,8 @@ struct rte_event_vector {\n  */\n #define RTE_EVENT_TYPE_ETH_RX_ADAPTER   0x4\n /**< The event generated from event eth Rx adapter */\n+#define RTE_EVENT_TYPE_DMADEV           0x5\n+/**< The event generated from dma subsystem */\n #define RTE_EVENT_TYPE_VECTOR           0x8\n /**< Indicates that event is a vector.\n  * All vector event types should be a logical OR of EVENT_TYPE_VECTOR.\n@@ -1462,6 +1464,48 @@ int\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+/* DMA adapter capability bitmap flag */\n+#define RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_NEW 0x1\n+/**< Flag indicates HW is capable of generating events in\n+ * RTE_EVENT_OP_NEW enqueue operation. DMADEV will send\n+ * packets to the event device as new events using an\n+ * internal event port.\n+ */\n+\n+#define RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD 0x2\n+/**< Flag indicates HW is capable of generating events in\n+ * RTE_EVENT_OP_FORWARD enqueue operation. DMADEV will send\n+ * packets to the event device as forwarded event using an\n+ * internal event port.\n+ */\n+\n+#define RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND 0x4\n+/**< Flag indicates HW is capable of mapping DMA vchan to event queue. */\n+\n+/**\n+ * Retrieve the event device's DMA adapter capabilities for the\n+ * specified dmadev device\n+ *\n+ * @param dev_id\n+ *   The identifier of the device.\n+ *\n+ * @param dmadev_id\n+ *   The identifier of the dmadev device.\n+ *\n+ * @param[out] caps\n+ *   A pointer to memory filled with event adapter capabilities.\n+ *   It is expected to be pre-allocated & initialized by caller.\n+ *\n+ * @return\n+ *   - 0: Success, driver provides event adapter capabilities for the\n+ *     dmadev device.\n+ *   - <0: Error code returned by the driver function.\n+ *\n+ */\n+__rte_experimental\n+int\n+rte_event_dma_adapter_caps_get(uint8_t dev_id, int16_t dmadev_id, 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\ndiff --git a/lib/eventdev/rte_eventdev_core.h b/lib/eventdev/rte_eventdev_core.h\nindex c27a52ccc0..83e8736c71 100644\n--- a/lib/eventdev/rte_eventdev_core.h\n+++ b/lib/eventdev/rte_eventdev_core.h\n@@ -42,6 +42,10 @@ typedef uint16_t (*event_crypto_adapter_enqueue_t)(void *port,\n \t\t\t\t\t\t   uint16_t nb_events);\n /**< @internal Enqueue burst of events on crypto adapter */\n \n+typedef uint16_t (*event_dma_adapter_enqueue_t)(void *port, struct rte_event ev[],\n+\t\t\t\t\t\tuint16_t nb_events);\n+/**< @internal Enqueue burst of events on DMA adapter */\n+\n struct rte_event_fp_ops {\n \tvoid **data;\n \t/**< points to array of internal port data pointers */\n@@ -65,7 +69,9 @@ struct rte_event_fp_ops {\n \t/**< PMD Tx adapter enqueue same destination function. */\n \tevent_crypto_adapter_enqueue_t ca_enqueue;\n \t/**< PMD Crypto adapter enqueue function. */\n-\tuintptr_t reserved[5];\n+\tevent_dma_adapter_enqueue_t dma_enqueue;\n+\t/**< PMD DMA adapter enqueue function. */\n+\tuintptr_t reserved[4];\n } __rte_cache_aligned;\n \n extern struct rte_event_fp_ops rte_event_fp_ops[RTE_EVENT_MAX_DEVS];\ndiff --git a/lib/eventdev/version.map b/lib/eventdev/version.map\nindex 7ce09a87bb..5d644b1759 100644\n--- a/lib/eventdev/version.map\n+++ b/lib/eventdev/version.map\n@@ -133,6 +133,22 @@ EXPERIMENTAL {\n \trte_event_timer_remaining_ticks_get;\n \n \t# added in 23.11\n+\trte_event_dma_adapter_caps_get;\n+\trte_event_dma_adapter_create_ext;\n+\trte_event_dma_adapter_create;\n+\trte_event_dma_adapter_event_port_get;\n+\trte_event_dma_adapter_enqueue;\n+\trte_event_dma_adapter_free;\n+\trte_event_dma_adapter_runtime_params_init;\n+\trte_event_dma_adapter_runtime_params_set;\n+\trte_event_dma_adapter_runtime_params_get;\n+\trte_event_dma_adapter_service_id_get;\n+\trte_event_dma_adapter_start;\n+\trte_event_dma_adapter_stop;\n+\trte_event_dma_adapter_stats_get;\n+\trte_event_dma_adapter_stats_reset;\n+\trte_event_dma_adapter_vchan_add;\n+\trte_event_dma_adapter_vchan_del;\n \trte_event_eth_rx_adapter_create_ext_with_params;\n };\n \n",
    "prefixes": [
        "v4",
        "01/12"
    ]
}