get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 127510,
    "url": "http://patchwork.dpdk.org/api/patches/127510/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20230525232331.34645-2-nicolas.chautru@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20230525232331.34645-2-nicolas.chautru@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230525232331.34645-2-nicolas.chautru@intel.com",
    "date": "2023-05-25T23:23:28",
    "name": "[v1,1/4] bbdev: add operation type for MLDTS procession",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "8ffe934bc836ded739a6814336e5a0bb4f37df12",
    "submitter": {
        "id": 1314,
        "url": "http://patchwork.dpdk.org/api/people/1314/?format=api",
        "name": "Chautru, Nicolas",
        "email": "nicolas.chautru@intel.com"
    },
    "delegate": {
        "id": 2642,
        "url": "http://patchwork.dpdk.org/api/users/2642/?format=api",
        "username": "mcoquelin",
        "first_name": "Maxime",
        "last_name": "Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20230525232331.34645-2-nicolas.chautru@intel.com/mbox/",
    "series": [
        {
            "id": 28192,
            "url": "http://patchwork.dpdk.org/api/series/28192/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=28192",
            "date": "2023-05-25T23:23:27",
            "name": "bbdev: API extension for 23.11",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/28192/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/127510/comments/",
    "check": "warning",
    "checks": "http://patchwork.dpdk.org/api/patches/127510/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 CA7CA42BA1;\n\tFri, 26 May 2023 01:29:11 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id D3C6841156;\n\tFri, 26 May 2023 01:29:02 +0200 (CEST)",
            "from mga18.intel.com (mga18.intel.com [134.134.136.126])\n by mails.dpdk.org (Postfix) with ESMTP id E438B410FA\n for <dev@dpdk.org>; Fri, 26 May 2023 01:28:57 +0200 (CEST)",
            "from orsmga003.jf.intel.com ([10.7.209.27])\n by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 25 May 2023 16:28:46 -0700",
            "from spr-npg-bds1-eec2.sn.intel.com (HELO spr-npg-bds1-eec2..)\n ([10.233.181.123])\n by orsmga003.jf.intel.com with ESMTP; 25 May 2023 16:28:41 -0700"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1685057339; x=1716593339;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=xIhY4jZXsg/XTy62xUaGhh97ASmWnlaxoqxAWACbRms=;\n b=KagGCt+qdy6hxooRUquC4G7UijopzGHdYEq/sPomTswc2jGjUWH09NPn\n jbimYx4Axcioh7e+pimJF3/A2K/MoWQvVYvJeZzBwYBESBBnzSlomhYD0\n JItc8d5aG6Cf3dR58tujDNsqCwgDE33dZq8tR1VcqPf+lIeCtNZl2CBkh\n GtAjmHii+ZKOM/UYse0NOPbxNrr7ck+ITuUwfsBkJ7oU/O9E+mYnt8uE7\n CXppoesPMCNj+H0uGcnzRmcz2Lukvg9xW/fKHgKX/x86QgLqgfQ47yndg\n O/qK7YqZIaHftdObv6MoMhd6pmhuJ4zoaNBuZk0Ts9IQiIOo21euiUhiq Q==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6600,9927,10721\"; a=\"338653645\"",
            "E=Sophos;i=\"6.00,192,1681196400\"; d=\"scan'208\";a=\"338653645\"",
            "E=McAfee;i=\"6600,9927,10721\"; a=\"655428603\"",
            "E=Sophos;i=\"6.00,192,1681196400\"; d=\"scan'208\";a=\"655428603\""
        ],
        "X-ExtLoop1": "1",
        "From": "Nicolas Chautru <nicolas.chautru@intel.com>",
        "To": "dev@dpdk.org,\n\tmaxime.coquelin@redhat.com",
        "Cc": "trix@redhat.com, hemant.agrawal@nxp.com, david.marchand@redhat.com,\n hernan.vargas@intel.com, Nicolas Chautru <nicolas.chautru@intel.com>",
        "Subject": "[PATCH v1 1/4] bbdev: add operation type for MLDTS procession",
        "Date": "Thu, 25 May 2023 23:23:28 +0000",
        "Message-Id": "<20230525232331.34645-2-nicolas.chautru@intel.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20230525232331.34645-1-nicolas.chautru@intel.com>",
        "References": "<20230525232331.34645-1-nicolas.chautru@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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": "Extended bbdev operations to support MLDTS based operations.\n\nSigned-off-by: Nicolas Chautru <nicolas.chautru@intel.com>\n---\n doc/guides/prog_guide/bbdev.rst |  53 +++++++++++++++\n lib/bbdev/rte_bbdev.c           |  11 ++-\n lib/bbdev/rte_bbdev.h           |  76 +++++++++++++++++++++\n lib/bbdev/rte_bbdev_op.h        | 116 +++++++++++++++++++++++++++++++-\n lib/bbdev/version.map           |   5 ++\n 5 files changed, 259 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/doc/guides/prog_guide/bbdev.rst b/doc/guides/prog_guide/bbdev.rst\nindex 549f1d002a..5b09c92963 100644\n--- a/doc/guides/prog_guide/bbdev.rst\n+++ b/doc/guides/prog_guide/bbdev.rst\n@@ -1165,6 +1165,59 @@ either as 2 INT16 or as 2 FP16 based when the option supported.\n The data layout is based on contiguous concatenation of output data\n first by cyclic shift then by antenna.\n \n+BBDEV MLD-TS Operation\n+~~~~~~~~~~~~~~~~~~~~~~\n+\n+This operation allows to run the Tree Search (TS) portion of a Maximum Likelihood processing (MLD).\n+\n+This alternate equalization option accelerates the exploration of the best combination of\n+transmitted symbols across layers minimizing the Euclidian distance between the received and\n+reconstructed signal, then generates the LLRs to be used by the LDPC Decoder.\n+The input is the results of the Q R decomposition: Q^Hy signal and R matrix.\n+\n+The structure passed for each MLD-TS operation is given below,\n+with the operation flags forming a bitmask in the ``op_flags`` field.\n+\n+  **NOTE:** The actual operation flags that may be used with a specific\n+  bbdev PMD are dependent on the driver capabilities as reported via\n+  ``rte_bbdev_info_get()``, and may be a subset of those below.\n+\n+.. literalinclude:: ../../../lib/bbdev/rte_bbdev_op.h\n+   :language: c\n+   :start-after: Structure rte_bbdev_op_mldts 8<\n+   :end-before: >8 End of structure rte_bbdev_op_mldts.\n+\n++--------------------------------------------------------------------+\n+|Description of MLD-TS capability flags                              |\n++====================================================================+\n+|RTE_BBDEV_MLDTS_REP                                                 |\n+| Set if the option to use repeated data from R channel is supported |\n++--------------------------------------------------------------------+\n+\n+The MLD-TS parameters are set out in the table below.\n+\n++-------------------------+--------------------------------------------------------------+\n+|Parameter                |Description                                                   |\n++=========================+==============================================================+\n+|qhy_input                |input data qHy                                                |\n++-------------------------+--------------------------------------------------------------+\n+|r_input                  |input data R triangular matrix                                |\n++-------------------------+--------------------------------------------------------------+\n+|output                   |output data (LLRs)                                            |\n++-------------------------+--------------------------------------------------------------+\n+|op_flags                 |bitmask of all active operation capabilities                  |\n++-------------------------+--------------------------------------------------------------+\n+|num_rbs                  |number of Resource Blocks                                     |\n++-------------------------+--------------------------------------------------------------+\n+|num_layers               |number of overlapping layers                                  |\n++-------------------------+--------------------------------------------------------------+\n+|q_m                      |array of modulation order for each layer                      |\n++-------------------------+--------------------------------------------------------------+\n+|r_rep                    |optional row repetition for the R matrix (subcarriers)        |\n++-------------------------+--------------------------------------------------------------+\n+|c_rep                    |optional column repetition for the R matrix (symbols)         |\n++-------------------------+--------------------------------------------------------------+\n+\n Sample code\n -----------\n \ndiff --git a/lib/bbdev/rte_bbdev.c b/lib/bbdev/rte_bbdev.c\nindex 1521cdbc53..26fc077bdc 100644\n--- a/lib/bbdev/rte_bbdev.c\n+++ b/lib/bbdev/rte_bbdev.c\n@@ -24,7 +24,7 @@\n #define DEV_NAME \"BBDEV\"\n \n /* Number of supported operation types in *rte_bbdev_op_type*. */\n-#define BBDEV_OP_TYPE_COUNT 6\n+#define BBDEV_OP_TYPE_COUNT 7\n \n /* BBDev library logging ID */\n RTE_LOG_REGISTER_DEFAULT(bbdev_logtype, NOTICE);\n@@ -857,6 +857,9 @@ get_bbdev_op_size(enum rte_bbdev_op_type type)\n \tcase RTE_BBDEV_OP_FFT:\n \t\tresult = sizeof(struct rte_bbdev_fft_op);\n \t\tbreak;\n+\tcase RTE_BBDEV_OP_MLDTS:\n+\t\tresult = sizeof(struct rte_bbdev_mldts_op);\n+\t\tbreak;\n \tdefault:\n \t\tbreak;\n \t}\n@@ -884,6 +887,10 @@ bbdev_op_init(struct rte_mempool *mempool, void *arg, void *element,\n \t\tstruct rte_bbdev_fft_op *op = element;\n \t\tmemset(op, 0, mempool->elt_size);\n \t\top->mempool = mempool;\n+\t} else if (type == RTE_BBDEV_OP_MLDTS) {\n+\t\tstruct rte_bbdev_mldts_op *op = element;\n+\t\tmemset(op, 0, mempool->elt_size);\n+\t\top->mempool = mempool;\n \t}\n }\n \n@@ -1135,6 +1142,7 @@ rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type)\n \t\t\"RTE_BBDEV_OP_LDPC_DEC\",\n \t\t\"RTE_BBDEV_OP_LDPC_ENC\",\n \t\t\"RTE_BBDEV_OP_FFT\",\n+\t\t\"RTE_BBDEV_OP_MLDTS\",\n \t};\n \n \tif (op_type < BBDEV_OP_TYPE_COUNT)\n@@ -1184,3 +1192,4 @@ rte_bbdev_enqueue_status_str(enum rte_bbdev_enqueue_status status)\n \trte_bbdev_log(ERR, \"Invalid enqueue status\");\n \treturn NULL;\n }\n+\ndiff --git a/lib/bbdev/rte_bbdev.h b/lib/bbdev/rte_bbdev.h\nindex 52f6ed9b01..1e78afd9d3 100644\n--- a/lib/bbdev/rte_bbdev.h\n+++ b/lib/bbdev/rte_bbdev.h\n@@ -438,6 +438,12 @@ typedef uint16_t (*rte_bbdev_enqueue_fft_ops_t)(\n \t\tstruct rte_bbdev_fft_op **ops,\n \t\tuint16_t num);\n \n+/** @internal Enqueue MLD-TS operations for processing on queue of a device. */\n+typedef uint16_t (*rte_bbdev_enqueue_mldts_ops_t)(\n+\t\tstruct rte_bbdev_queue_data *q_data,\n+\t\tstruct rte_bbdev_mldts_op **ops,\n+\t\tuint16_t num);\n+\n /** @internal Dequeue encode operations from a queue of a device. */\n typedef uint16_t (*rte_bbdev_dequeue_enc_ops_t)(\n \t\tstruct rte_bbdev_queue_data *q_data,\n@@ -453,6 +459,11 @@ typedef uint16_t (*rte_bbdev_dequeue_fft_ops_t)(\n \t\tstruct rte_bbdev_queue_data *q_data,\n \t\tstruct rte_bbdev_fft_op **ops, uint16_t num);\n \n+/** @internal Dequeue MLDTS operations from a queue of a device. */\n+typedef uint16_t (*rte_bbdev_dequeue_mldts_ops_t)(\n+\t\tstruct rte_bbdev_queue_data *q_data,\n+\t\tstruct rte_bbdev_mldts_op **ops, uint16_t num);\n+\n #define RTE_BBDEV_NAME_MAX_LEN  64  /**< Max length of device name */\n \n /**\n@@ -505,6 +516,10 @@ struct __rte_cache_aligned rte_bbdev {\n \trte_bbdev_enqueue_fft_ops_t enqueue_fft_ops;\n \t/** Dequeue FFT function */\n \trte_bbdev_dequeue_fft_ops_t dequeue_fft_ops;\n+\t/** Enqueue MLD-TS function */\n+\trte_bbdev_enqueue_mldts_ops_t enqueue_mldts_ops;\n+\t/** Dequeue MLD-TS function */\n+\trte_bbdev_dequeue_mldts_ops_t dequeue_mldts_ops;\n \tconst struct rte_bbdev_ops *dev_ops;  /**< Functions exported by PMD */\n \tstruct rte_bbdev_data *data;  /**< Pointer to device data */\n \tenum rte_bbdev_state state;  /**< If device is currently used or not */\n@@ -668,6 +683,36 @@ rte_bbdev_enqueue_fft_ops(uint16_t dev_id, uint16_t queue_id,\n \treturn dev->enqueue_fft_ops(q_data, ops, num_ops);\n }\n \n+/**\n+ * Enqueue a burst of MLDTS operations to a queue of the device.\n+ * This functions only enqueues as many operations as currently possible and\n+ * does not block until @p num_ops entries in the queue are available.\n+ * This function does not provide any error notification to avoid the\n+ * corresponding overhead.\n+ *\n+ * @param dev_id\n+ *   The identifier of the device.\n+ * @param queue_id\n+ *   The index of the queue.\n+ * @param ops\n+ *   Pointer array containing operations to be enqueued Must have at least\n+ *   @p num_ops entries\n+ * @param num_ops\n+ *   The maximum number of operations to enqueue.\n+ *\n+ * @return\n+ *   The number of operations actually enqueued (this is the number of processed\n+ *   entries in the @p ops array).\n+ */\n+static inline uint16_t\n+rte_bbdev_enqueue_mldts_ops(uint16_t dev_id, uint16_t queue_id,\n+\t\tstruct rte_bbdev_mldts_op **ops, uint16_t num_ops)\n+{\n+\tstruct rte_bbdev *dev = &rte_bbdev_devices[dev_id];\n+\tstruct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];\n+\treturn dev->enqueue_mldts_ops(q_data, ops, num_ops);\n+}\n+\n /**\n  * Dequeue a burst of processed encode operations from a queue of the device.\n  * This functions returns only the current contents of the queue,\n@@ -823,6 +868,37 @@ rte_bbdev_dequeue_fft_ops(uint16_t dev_id, uint16_t queue_id,\n \treturn dev->dequeue_fft_ops(q_data, ops, num_ops);\n }\n \n+/**\n+ * Dequeue a burst of MLDTS operations from a queue of the device.\n+ * This functions returns only the current contents of the queue, and does not\n+ * block until @p num_ops is available.\n+ * This function does not provide any error notification to avoid the\n+ * corresponding overhead.\n+ *\n+ * @param dev_id\n+ *   The identifier of the device.\n+ * @param queue_id\n+ *   The index of the queue.\n+ * @param ops\n+ *   Pointer array where operations will be dequeued to. Must have at least\n+ *   @p num_ops entries\n+ * @param num_ops\n+ *   The maximum number of operations to dequeue.\n+ *\n+ * @return\n+ *   The number of operations actually dequeued (this is the number of entries\n+ *   copied into the @p ops array).\n+ */\n+__rte_experimental\n+static inline uint16_t\n+rte_bbdev_dequeue_mldts_ops(uint16_t dev_id, uint16_t queue_id,\n+\t\tstruct rte_bbdev_mldts_op **ops, uint16_t num_ops)\n+{\n+\tstruct rte_bbdev *dev = &rte_bbdev_devices[dev_id];\n+\tstruct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];\n+\treturn dev->dequeue_mldts_ops(q_data, ops, num_ops);\n+}\n+\n /** Definitions of device event types */\n enum rte_bbdev_event_type {\n \tRTE_BBDEV_EVENT_UNKNOWN,  /**< unknown event type */\ndiff --git a/lib/bbdev/rte_bbdev_op.h b/lib/bbdev/rte_bbdev_op.h\nindex 96a390cd9b..990d110fa7 100644\n--- a/lib/bbdev/rte_bbdev_op.h\n+++ b/lib/bbdev/rte_bbdev_op.h\n@@ -50,6 +50,10 @@ extern \"C\" {\n #define RTE_BBDEV_LDPC_MAX_CODE_BLOCKS (256)\n /* 12 CS maximum */\n #define RTE_BBDEV_MAX_CS_2 (6)\n+/* MLD-TS up to 4 layers */\n+#define RTE_BBDEV_MAX_MLD_LAYERS (4)\n+/* 12 SB per RB */\n+#define RTE_BBDEV_SCPERRB (12)\n \n /*\n  * Maximum size to be used to manage the enum rte_bbdev_op_type\n@@ -241,6 +245,12 @@ enum rte_bbdev_op_fft_flag_bitmasks {\n \tRTE_BBDEV_FFT_FP16_OUTPUT = (1ULL << 7)\n };\n \n+/** Flags for MLDTS operation and capability structure */\n+enum rte_bbdev_op_mldts_flag_bitmasks {\n+\t/**  Set if the device supports C/R repetition options.  */\n+\tRTE_BBDEV_MLDTS_REP = (1ULL << 0),\n+};\n+\n /** Flags for the Code Block/Transport block mode  */\n enum rte_bbdev_op_cb_mode {\n \t/** One operation is one or fraction of one transport block  */\n@@ -783,6 +793,36 @@ struct rte_bbdev_op_fft {\n };\n /* >8 End of structure rte_bbdev_op_fft. */\n \n+/** Operation structure for MLDTS processing.\n+ *\n+ * The output mbuf data structure is expected to be allocated by the\n+ * application with enough room for the output data.\n+ */\n+\n+/* Structure rte_bbdev_op_mldts 8< */\n+struct rte_bbdev_op_mldts {\n+\t/** Input data QHy from QR decomposition. */\n+\tstruct rte_bbdev_op_data qhy_input;\n+\t/** Input data R from QR decomposition. */\n+\tstruct rte_bbdev_op_data r_input;\n+\t/** Output data post MLD-TS. */\n+\tstruct rte_bbdev_op_data output;\n+\t/** Flags from *rte_bbdev_op_MLDTS_flag_bitmasks*. */\n+\tuint32_t op_flags;\n+\t/** Number of RBs. */\n+\tuint16_t num_rbs;\n+\t/** Number of layers 2->4. */\n+\tuint16_t num_layers;\n+\t/** Modulation order (2->8 QPSK to 256QAM). */\n+\tuint8_t q_m[RTE_BBDEV_MAX_MLD_LAYERS];\n+\t/** Row repetition for the same R matrix - subcarriers. */\n+\tuint8_t r_rep;\n+\t/** Column repetition for the same R matrix - symbols. */\n+\tuint8_t c_rep;\n+};\n+/* >8 End of structure rte_bbdev_op_mldts. */\n+\n+\n /** List of the capabilities for the Turbo Decoder */\n struct rte_bbdev_op_cap_turbo_dec {\n \t/** Flags from rte_bbdev_op_td_flag_bitmasks */\n@@ -839,6 +879,16 @@ struct rte_bbdev_op_cap_ldpc_enc {\n struct rte_bbdev_op_cap_fft {\n \t/** Flags from *rte_bbdev_op_fft_flag_bitmasks*. */\n \tuint32_t capability_flags;\n+\t/** Num input code block buffers. */\n+\tuint16_t num_buffers_src;\n+\t/** Num output code block buffers. */\n+\tuint16_t num_buffers_dst;\n+};\n+\n+/** List of the capabilities for the MLD */\n+struct rte_bbdev_op_cap_mld {\n+\t/** Flags from rte_bbdev_op_mldts_flag_bitmasks */\n+\tuint32_t capability_flags;\n \t/** Number of input code block buffers. */\n \tuint16_t num_buffers_src;\n \t/** Number of output code block buffers. */\n@@ -856,6 +906,7 @@ enum rte_bbdev_op_type {\n \tRTE_BBDEV_OP_LDPC_DEC,  /**< LDPC decode */\n \tRTE_BBDEV_OP_LDPC_ENC,  /**< LDPC encode */\n \tRTE_BBDEV_OP_FFT,  /**< FFT */\n+\tRTE_BBDEV_OP_MLDTS,  /**< MLD-TS */\n \t/* Note: RTE_BBDEV_OP_TYPE_SIZE_MAX must be larger or equal to maximum enum value */\n };\n \n@@ -864,7 +915,8 @@ enum {\n \tRTE_BBDEV_DRV_ERROR,\n \tRTE_BBDEV_DATA_ERROR,\n \tRTE_BBDEV_CRC_ERROR,\n-\tRTE_BBDEV_SYNDROME_ERROR\n+\tRTE_BBDEV_SYNDROME_ERROR,\n+\tRTE_BBDEV_ENGINE_ERROR\n };\n \n /** Structure specifying a single encode operation */\n@@ -911,6 +963,18 @@ struct rte_bbdev_fft_op {\n \tstruct rte_bbdev_op_fft fft;\n };\n \n+/** Structure specifying a single mldts operation */\n+struct rte_bbdev_mldts_op {\n+\t/** Status of operation that was performed. */\n+\tint status;\n+\t/** Mempool which op instance is in. */\n+\tstruct rte_mempool *mempool;\n+\t/** Opaque pointer for user data. */\n+\tvoid *opaque_data;\n+\t/** Contains turbo decoder specific parameters. */\n+\tstruct rte_bbdev_op_mldts mldts;\n+};\n+\n /** Operation capabilities supported by a device */\n struct rte_bbdev_op_cap {\n \tenum rte_bbdev_op_type type;  /**< Type of operation */\n@@ -920,6 +984,7 @@ struct rte_bbdev_op_cap {\n \t\tstruct rte_bbdev_op_cap_ldpc_dec ldpc_dec;\n \t\tstruct rte_bbdev_op_cap_ldpc_enc ldpc_enc;\n \t\tstruct rte_bbdev_op_cap_fft fft;\n+\t\tstruct rte_bbdev_op_cap_mld mld;\n \t} cap;  /**< Operation-type specific capabilities */\n };\n \n@@ -1058,6 +1123,36 @@ rte_bbdev_fft_op_alloc_bulk(struct rte_mempool *mempool,\n \treturn rte_mempool_get_bulk(mempool, (void **)ops, num_ops);\n }\n \n+/**\n+ * Bulk allocate MLD operations from a mempool with parameter defaults reset.\n+ *\n+ * @param mempool\n+ *   Operation mempool, created by *rte_bbdev_op_pool_create*.\n+ * @param ops\n+ *   Output array to place allocated operations.\n+ * @param num_ops\n+ *   Number of operations to allocate.\n+ *\n+ * @returns\n+ *   - 0 on success.\n+ *   - EINVAL if invalid mempool is provided.\n+ */\n+__rte_experimental\n+static inline int\n+rte_bbdev_mldts_op_alloc_bulk(struct rte_mempool *mempool,\n+\t\tstruct rte_bbdev_mldts_op **ops, uint16_t num_ops)\n+{\n+\tstruct rte_bbdev_op_pool_private *priv;\n+\n+\t/* Check type */\n+\tpriv = (struct rte_bbdev_op_pool_private *)rte_mempool_get_priv(mempool);\n+\tif (unlikely(priv->type != RTE_BBDEV_OP_MLDTS))\n+\t\treturn -EINVAL;\n+\n+\t/* Get elements */\n+\treturn rte_mempool_get_bulk(mempool, (void **)ops, num_ops);\n+}\n+\n /**\n  * Free decode operation structures that were allocated by\n  * rte_bbdev_dec_op_alloc_bulk().\n@@ -1110,6 +1205,25 @@ rte_bbdev_fft_op_free_bulk(struct rte_bbdev_fft_op **ops, unsigned int num_ops)\n \t\trte_mempool_put_bulk(ops[0]->mempool, (void **)ops, num_ops);\n }\n \n+/**\n+ * Free encode operation structures that were allocated by\n+ * rte_bbdev_mldts_op_alloc_bulk().\n+ * All structures must belong to the same mempool.\n+ *\n+ * @param ops\n+ *   Operation structures\n+ * @param num_ops\n+ *   Number of structures\n+ */\n+__rte_experimental\n+static inline void\n+rte_bbdev_mldts_op_free_bulk(struct rte_bbdev_mldts_op **ops, unsigned int num_ops)\n+{\n+\tif (num_ops > 0)\n+\t\trte_mempool_put_bulk(ops[0]->mempool, (void **)ops, num_ops);\n+}\n+\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/bbdev/version.map b/lib/bbdev/version.map\nindex d0bb835255..8f28ae7c68 100644\n--- a/lib/bbdev/version.map\n+++ b/lib/bbdev/version.map\n@@ -50,4 +50,9 @@ EXPERIMENTAL {\n \trte_bbdev_enqueue_status_str;\n \trte_bbdev_fft_op_alloc_bulk;\n \trte_bbdev_fft_op_free_bulk;\n+\t#added in 23.11\n+\trte_bbdev_dequeue_mldts_ops;\n+\trte_bbdev_enqueue_mldts_ops;\n+\trte_bbdev_mldts_op_alloc_bulk;\n+\trte_bbdev_mldts_op_free_bulk;\n };\n",
    "prefixes": [
        "v1",
        "1/4"
    ]
}