get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 76569,
    "url": "http://patches.dpdk.org/api/patches/76569/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200904152539.20608-4-roy.fan.zhang@intel.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": "<20200904152539.20608-4-roy.fan.zhang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200904152539.20608-4-roy.fan.zhang@intel.com",
    "date": "2020-09-04T15:25:38",
    "name": "[v8,3/4] test/crypto: add unit-test for cryptodev direct APIs",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "6f786cccf0c7aede8f9454c4e27a2442b5150ee6",
    "submitter": {
        "id": 304,
        "url": "http://patches.dpdk.org/api/people/304/?format=api",
        "name": "Fan Zhang",
        "email": "roy.fan.zhang@intel.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200904152539.20608-4-roy.fan.zhang@intel.com/mbox/",
    "series": [
        {
            "id": 11956,
            "url": "http://patches.dpdk.org/api/series/11956/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=11956",
            "date": "2020-09-04T15:25:35",
            "name": "cryptodev: add data-path service APIs",
            "version": 8,
            "mbox": "http://patches.dpdk.org/series/11956/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/76569/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/76569/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id EC1FBA04C5;\n\tFri,  4 Sep 2020 17:26:29 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id A29421C0DA;\n\tFri,  4 Sep 2020 17:25:59 +0200 (CEST)",
            "from mga12.intel.com (mga12.intel.com [192.55.52.136])\n by dpdk.org (Postfix) with ESMTP id DD3EC1C113\n for <dev@dpdk.org>; Fri,  4 Sep 2020 17:25:56 +0200 (CEST)",
            "from orsmga005.jf.intel.com ([10.7.209.41])\n by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 04 Sep 2020 08:25:56 -0700",
            "from silpixa00398673.ir.intel.com (HELO\n silpixa00398673.ger.corp.intel.com) ([10.237.223.136])\n by orsmga005.jf.intel.com with ESMTP; 04 Sep 2020 08:25:54 -0700"
        ],
        "IronPort-SDR": [
            "\n oxNtVtBpJuPvhsN5F73HrSkbhX544EJviiyPz4QJ3jEWky1QL/FSI387YXnDXtL95m18M3xIkn\n WjOMDFVgXLgQ==",
            "\n btCk/Qr4MkC/e2o7TMXAOZYGiCYOzMn93/wVlrhwTYRRIJngLXnVaF1fAeMELYrs1Z8OQMKw5P\n pZYGEJpFQESw=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9734\"; a=\"137280805\"",
            "E=Sophos;i=\"5.76,389,1592895600\"; d=\"scan'208\";a=\"137280805\"",
            "E=Sophos;i=\"5.76,389,1592895600\"; d=\"scan'208\";a=\"478540576\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Fan Zhang <roy.fan.zhang@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "akhil.goyal@nxp.com, fiona.trahe@intel.com, arkadiuszx.kusztal@intel.com,\n adamx.dybkowski@intel.com, Fan Zhang <roy.fan.zhang@intel.com>",
        "Date": "Fri,  4 Sep 2020 16:25:38 +0100",
        "Message-Id": "<20200904152539.20608-4-roy.fan.zhang@intel.com>",
        "X-Mailer": "git-send-email 2.20.1",
        "In-Reply-To": "<20200904152539.20608-1-roy.fan.zhang@intel.com>",
        "References": "<20200828125815.21614-1-roy.fan.zhang@intel.com>\n <20200904152539.20608-1-roy.fan.zhang@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [dpdk-dev v8 3/4] test/crypto: add unit-test for\n\tcryptodev direct APIs",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "This patch adds the QAT test to use cryptodev symmetric crypto\ndirect APIs.\n\nSigned-off-by: Fan Zhang <roy.fan.zhang@intel.com>\n---\n app/test/test_cryptodev.c             | 452 +++++++++++++++++++++++---\n app/test/test_cryptodev.h             |   7 +\n app/test/test_cryptodev_blockcipher.c |  51 ++-\n 3 files changed, 447 insertions(+), 63 deletions(-)",
    "diff": "diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c\nindex 70bf6fe2c..387a3cf15 100644\n--- a/app/test/test_cryptodev.c\n+++ b/app/test/test_cryptodev.c\n@@ -49,6 +49,8 @@\n #define VDEV_ARGS_SIZE 100\n #define MAX_NB_SESSIONS 4\n \n+#define MAX_DRV_SERVICE_CTX_SIZE 256\n+\n #define IN_PLACE 0\n #define OUT_OF_PLACE 1\n \n@@ -57,6 +59,8 @@ static int gbl_driver_id;\n static enum rte_security_session_action_type gbl_action_type =\n \tRTE_SECURITY_ACTION_TYPE_NONE;\n \n+int cryptodev_dp_test;\n+\n struct crypto_testsuite_params {\n \tstruct rte_mempool *mbuf_pool;\n \tstruct rte_mempool *large_mbuf_pool;\n@@ -147,6 +151,173 @@ ceil_byte_length(uint32_t num_bits)\n \t\treturn (num_bits >> 3);\n }\n \n+void\n+process_sym_hw_api_op(uint8_t dev_id, uint16_t qp_id, struct rte_crypto_op *op,\n+\t\tuint8_t is_cipher, uint8_t is_auth, uint8_t len_in_bits,\n+\t\tuint8_t cipher_iv_len)\n+{\n+\tint32_t n;\n+\tstruct rte_crypto_sym_op *sop;\n+\tstruct rte_crypto_op *ret_op = NULL;\n+\tstruct rte_crypto_vec data_vec[UINT8_MAX];\n+\tunion rte_crypto_sym_additional_data a_data;\n+\tunion rte_crypto_sym_ofs ofs;\n+\tint32_t status;\n+\tuint32_t max_len;\n+\tunion rte_cryptodev_session_ctx sess;\n+\tenum rte_crypto_dp_service service_type;\n+\tuint32_t count = 0;\n+\tuint8_t service_data[MAX_DRV_SERVICE_CTX_SIZE] = {0};\n+\tstruct rte_crypto_dp_service_ctx *ctx = (void *)service_data;\n+\tuint32_t cipher_offset = 0, cipher_len = 0, auth_offset = 0,\n+\t\t\tauth_len = 0;\n+\tint ctx_service_size;\n+\n+\tsop = op->sym;\n+\n+\tsess.crypto_sess = sop->session;\n+\n+\tif (is_cipher && is_auth) {\n+\t\tservice_type = RTE_CRYPTO_DP_SYM_CHAIN;\n+\t\tcipher_offset = sop->cipher.data.offset;\n+\t\tcipher_len = sop->cipher.data.length;\n+\t\tauth_offset = sop->auth.data.offset;\n+\t\tauth_len = sop->auth.data.length;\n+\t\tmax_len = RTE_MAX(cipher_offset + cipher_len,\n+\t\t\t\tauth_offset + auth_len);\n+\t} else if (is_cipher) {\n+\t\tservice_type = RTE_CRYPTO_DP_SYM_CIPHER_ONLY;\n+\t\tcipher_offset = sop->cipher.data.offset;\n+\t\tcipher_len = sop->cipher.data.length;\n+\t\tmax_len = cipher_len + cipher_offset;\n+\t} else if (is_auth) {\n+\t\tservice_type = RTE_CRYPTO_DP_SYM_AUTH_ONLY;\n+\t\tauth_offset = sop->auth.data.offset;\n+\t\tauth_len = sop->auth.data.length;\n+\t\tmax_len = auth_len + auth_offset;\n+\t} else { /* aead */\n+\t\tservice_type = RTE_CRYPTO_DP_SYM_AEAD;\n+\t\tcipher_offset = sop->aead.data.offset;\n+\t\tcipher_len = sop->aead.data.length;\n+\t\tmax_len = cipher_len + cipher_offset;\n+\t}\n+\n+\tif (len_in_bits) {\n+\t\tmax_len = max_len >> 3;\n+\t\tcipher_offset = cipher_offset >> 3;\n+\t\tauth_offset = auth_offset >> 3;\n+\t\tcipher_len = cipher_len >> 3;\n+\t\tauth_len = auth_len >> 3;\n+\t}\n+\n+\tctx_service_size = rte_cryptodev_dp_get_service_ctx_data_size(dev_id);\n+\tassert(ctx_service_size <= MAX_DRV_SERVICE_CTX_SIZE &&\n+\t\t\tctx_service_size > 0);\n+\n+\tif (rte_cryptodev_dp_configure_service(dev_id, qp_id, service_type,\n+\t\t\tRTE_CRYPTO_OP_WITH_SESSION, sess, ctx, 0) < 0) {\n+\t\top->status = RTE_CRYPTO_OP_STATUS_ERROR;\n+\t\treturn;\n+\t}\n+\n+\t/* test update service */\n+\tif (rte_cryptodev_dp_configure_service(dev_id, qp_id, service_type,\n+\t\t\tRTE_CRYPTO_OP_WITH_SESSION, sess, ctx, 1) < 0) {\n+\t\top->status = RTE_CRYPTO_OP_STATUS_ERROR;\n+\t\treturn;\n+\t}\n+\n+\tn = rte_crypto_mbuf_to_vec(sop->m_src, 0, max_len,\n+\t\t\tdata_vec, RTE_DIM(data_vec));\n+\tif (n < 0 || n > sop->m_src->nb_segs) {\n+\t\top->status = RTE_CRYPTO_OP_STATUS_ERROR;\n+\t\treturn;\n+\t}\n+\n+\tofs.raw = 0;\n+\n+\tswitch (service_type) {\n+\tcase RTE_CRYPTO_DP_SYM_AEAD:\n+\t\tofs.ofs.cipher.head = cipher_offset;\n+\t\tofs.ofs.cipher.tail = max_len - cipher_offset - cipher_len;\n+\t\ta_data.aead.iv_ptr = rte_crypto_op_ctod_offset(op, void *,\n+\t\t\t\tIV_OFFSET);\n+\t\ta_data.aead.iv_iova = rte_crypto_op_ctophys_offset(op,\n+\t\t\t\tIV_OFFSET);\n+\t\ta_data.aead.aad_ptr = (void *)sop->aead.aad.data;\n+\t\ta_data.aead.aad_iova = sop->aead.aad.phys_addr;\n+\t\ta_data.aead.digest_ptr = (void *)sop->aead.digest.data;\n+\t\ta_data.aead.digest_iova = sop->aead.digest.phys_addr;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_DP_SYM_CIPHER_ONLY:\n+\t\tofs.ofs.cipher.head = cipher_offset;\n+\t\tofs.ofs.cipher.tail = max_len - cipher_offset - cipher_len;\n+\t\ta_data.cipher_auth.cipher_iv_ptr = rte_crypto_op_ctod_offset(\n+\t\t\t\top, void *, IV_OFFSET);\n+\t\ta_data.cipher_auth.cipher_iv_iova =\n+\t\t\t\trte_crypto_op_ctophys_offset(op, IV_OFFSET);\n+\t\tbreak;\n+\tcase RTE_CRYPTO_DP_SYM_AUTH_ONLY:\n+\t\tofs.ofs.auth.head = auth_offset;\n+\t\tofs.ofs.auth.tail = max_len - auth_offset - auth_len;\n+\t\ta_data.cipher_auth.auth_iv_ptr = rte_crypto_op_ctod_offset(\n+\t\t\t\top, void *, IV_OFFSET + cipher_iv_len);\n+\t\ta_data.cipher_auth.auth_iv_iova =\n+\t\t\t\trte_crypto_op_ctophys_offset(op, IV_OFFSET +\n+\t\t\t\t\t\tcipher_iv_len);\n+\t\ta_data.cipher_auth.digest_ptr = (void *)sop->auth.digest.data;\n+\t\ta_data.cipher_auth.digest_iova = sop->auth.digest.phys_addr;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_DP_SYM_CHAIN:\n+\t\tofs.ofs.cipher.head = cipher_offset;\n+\t\tofs.ofs.cipher.tail = max_len - cipher_offset - cipher_len;\n+\t\tofs.ofs.auth.head = auth_offset;\n+\t\tofs.ofs.auth.tail = max_len - auth_offset - auth_len;\n+\t\ta_data.cipher_auth.cipher_iv_ptr = rte_crypto_op_ctod_offset(\n+\t\t\t\top, void *, IV_OFFSET);\n+\t\ta_data.cipher_auth.cipher_iv_iova =\n+\t\t\t\trte_crypto_op_ctophys_offset(op, IV_OFFSET);\n+\t\ta_data.cipher_auth.auth_iv_ptr = rte_crypto_op_ctod_offset(\n+\t\t\t\top, void *, IV_OFFSET + cipher_iv_len);\n+\t\ta_data.cipher_auth.auth_iv_iova =\n+\t\t\t\trte_crypto_op_ctophys_offset(op, IV_OFFSET +\n+\t\t\t\t\t\tcipher_iv_len);\n+\t\ta_data.cipher_auth.digest_ptr = (void *)sop->auth.digest.data;\n+\t\ta_data.cipher_auth.digest_iova = sop->auth.digest.phys_addr;\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n+\t}\n+\n+\tstatus = rte_cryptodev_dp_sym_submit_single_job(ctx, data_vec, n, ofs,\n+\t\t&a_data, (void *)op);\n+\tif (status < 0) {\n+\t\top->status = RTE_CRYPTO_OP_STATUS_ERROR;\n+\t\treturn;\n+\t}\n+\n+\trte_cryptodev_dp_sym_submit_done(ctx, 1);\n+\n+\tstatus = -1;\n+\twhile (count++ < 65535 && status == -1) {\n+\t\tstatus = rte_cryptodev_dp_sym_dequeue_single_job(ctx,\n+\t\t\t\t(void **)&ret_op);\n+\t\tif (status == -1)\n+\t\t\trte_pause();\n+\t}\n+\n+\tif (status != -1)\n+\t\trte_cryptodev_dp_sym_dequeue_done(ctx, 1);\n+\n+\tif (count == 65536 || status != 1 || ret_op != op) {\n+\t\top->status = RTE_CRYPTO_OP_STATUS_ERROR;\n+\t\treturn;\n+\t}\n+\n+\top->status = status == 1 ? RTE_CRYPTO_OP_STATUS_SUCCESS :\n+\t\t\tRTE_CRYPTO_OP_STATUS_ERROR;\n+}\n+\n static void\n process_cpu_aead_op(uint8_t dev_id, struct rte_crypto_op *op)\n {\n@@ -1656,6 +1827,9 @@ test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,\n \tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n \t\tprocess_cpu_crypt_auth_op(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n+\telse if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 0, 0);\n \telse\n \t\tTEST_ASSERT_NOT_NULL(\n \t\t\t\tprocess_crypto_request(ts_params->valid_devs[0],\n@@ -1710,12 +1884,18 @@ test_AES_cipheronly_all(void)\n static int\n test_AES_docsis_all(void)\n {\n+\t/* Data-path service does not support DOCSIS yet */\n+\tif (cryptodev_dp_test)\n+\t\treturn -ENOTSUP;\n \treturn test_blockcipher(BLKCIPHER_AES_DOCSIS_TYPE);\n }\n \n static int\n test_DES_docsis_all(void)\n {\n+\t/* Data-path service does not support DOCSIS yet */\n+\tif (cryptodev_dp_test)\n+\t\treturn -ENOTSUP;\n \treturn test_blockcipher(BLKCIPHER_DES_DOCSIS_TYPE);\n }\n \n@@ -2470,7 +2650,11 @@ test_snow3g_authentication(const struct snow3g_hash_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 1, 1, 0);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\t\tut_params->op);\n \tut_params->obuf = ut_params->op->sym->m_src;\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n@@ -2549,7 +2733,11 @@ test_snow3g_authentication_verify(const struct snow3g_hash_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 1, 1, 0);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \tut_params->obuf = ut_params->op->sym->m_src;\n@@ -2619,6 +2807,9 @@ test_kasumi_authentication(const struct kasumi_hash_test_data *tdata)\n \tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n \t\tprocess_cpu_crypt_auth_op(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n+\telse if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 1, 1, 0);\n \telse\n \t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n@@ -2690,7 +2881,11 @@ test_kasumi_authentication_verify(const struct kasumi_hash_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 1, 1, 0);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \tut_params->obuf = ut_params->op->sym->m_src;\n@@ -2897,8 +3092,12 @@ test_kasumi_encryption(const struct kasumi_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n-\t\t\t\t\t\tut_params->op);\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 0, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\t\t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \n \tut_params->obuf = ut_params->op->sym->m_dst;\n@@ -2983,7 +3182,11 @@ test_kasumi_encryption_sgl(const struct kasumi_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 0, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\t\t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \n@@ -3026,8 +3229,9 @@ test_kasumi_encryption_oop(const struct kasumi_test_data *tdata)\n \tstruct rte_cryptodev_sym_capability_idx cap_idx;\n \tcap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;\n \tcap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;\n+\t/* Data-path service does not support OOP */\n \tif (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],\n-\t\t\t&cap_idx) == NULL)\n+\t\t\t&cap_idx) == NULL || cryptodev_dp_test)\n \t\treturn -ENOTSUP;\n \n \t/* Create KASUMI session */\n@@ -3107,8 +3311,9 @@ test_kasumi_encryption_oop_sgl(const struct kasumi_test_data *tdata)\n \tstruct rte_cryptodev_sym_capability_idx cap_idx;\n \tcap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;\n \tcap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;\n+\t/* Data-path service does not support OOP */\n \tif (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],\n-\t\t\t&cap_idx) == NULL)\n+\t\t\t&cap_idx) == NULL || cryptodev_dp_test)\n \t\treturn -ENOTSUP;\n \n \trte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);\n@@ -3192,8 +3397,9 @@ test_kasumi_decryption_oop(const struct kasumi_test_data *tdata)\n \tstruct rte_cryptodev_sym_capability_idx cap_idx;\n \tcap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;\n \tcap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8;\n+\t/* Data-path service does not support OOP */\n \tif (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],\n-\t\t\t&cap_idx) == NULL)\n+\t\t\t&cap_idx) == NULL || cryptodev_dp_test)\n \t\treturn -ENOTSUP;\n \n \t/* Create KASUMI session */\n@@ -3306,7 +3512,11 @@ test_kasumi_decryption(const struct kasumi_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 0, 1, 0);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\t\t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \n@@ -3381,7 +3591,11 @@ test_snow3g_encryption(const struct snow3g_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 0, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\t\t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \n@@ -3419,7 +3633,7 @@ test_snow3g_encryption_oop(const struct snow3g_test_data *tdata)\n \tcap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;\n \tcap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;\n \tif (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],\n-\t\t\t&cap_idx) == NULL)\n+\t\t\t&cap_idx) == NULL || cryptodev_dp_test)\n \t\treturn -ENOTSUP;\n \n \t/* Create SNOW 3G session */\n@@ -3502,7 +3716,7 @@ test_snow3g_encryption_oop_sgl(const struct snow3g_test_data *tdata)\n \tcap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;\n \tcap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;\n \tif (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],\n-\t\t\t&cap_idx) == NULL)\n+\t\t\t&cap_idx) == NULL || cryptodev_dp_test)\n \t\treturn -ENOTSUP;\n \n \trte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);\n@@ -3621,7 +3835,7 @@ test_snow3g_encryption_offset_oop(const struct snow3g_test_data *tdata)\n \tcap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;\n \tcap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;\n \tif (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],\n-\t\t\t&cap_idx) == NULL)\n+\t\t\t&cap_idx) == NULL || cryptodev_dp_test)\n \t\treturn -ENOTSUP;\n \n \t/* Create SNOW 3G session */\n@@ -3756,7 +3970,11 @@ static int test_snow3g_decryption(const struct snow3g_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 0, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\t\t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \tut_params->obuf = ut_params->op->sym->m_dst;\n@@ -3791,7 +4009,7 @@ static int test_snow3g_decryption_oop(const struct snow3g_test_data *tdata)\n \tcap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;\n \tcap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;\n \tif (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],\n-\t\t\t&cap_idx) == NULL)\n+\t\t\t&cap_idx) == NULL || cryptodev_dp_test)\n \t\treturn -ENOTSUP;\n \n \t/* Create SNOW 3G session */\n@@ -3924,7 +4142,11 @@ test_zuc_cipher_auth(const struct wireless_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \tut_params->obuf = ut_params->op->sym->m_src;\n@@ -4019,7 +4241,11 @@ test_snow3g_cipher_auth(const struct snow3g_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \tut_params->obuf = ut_params->op->sym->m_src;\n@@ -4087,6 +4313,8 @@ test_snow3g_auth_cipher(const struct snow3g_test_data *tdata,\n \t\t\tprintf(\"Device doesn't support digest encrypted.\\n\");\n \t\t\treturn -ENOTSUP;\n \t\t}\n+\t\tif (cryptodev_dp_test)\n+\t\t\treturn -ENOTSUP;\n \t}\n \n \t/* Create SNOW 3G session */\n@@ -4155,7 +4383,11 @@ test_snow3g_auth_cipher(const struct snow3g_test_data *tdata,\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n@@ -4266,6 +4498,8 @@ test_snow3g_auth_cipher_sgl(const struct snow3g_test_data *tdata,\n \t\t\treturn -ENOTSUP;\n \t\t}\n \t} else {\n+\t\tif (cryptodev_dp_test)\n+\t\t\treturn -ENOTSUP;\n \t\tif (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {\n \t\t\tprintf(\"Device doesn't support out-of-place scatter-gather \"\n \t\t\t\t\t\"in both input and output mbufs.\\n\");\n@@ -4344,7 +4578,11 @@ test_snow3g_auth_cipher_sgl(const struct snow3g_test_data *tdata,\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n@@ -4453,6 +4691,8 @@ test_kasumi_auth_cipher(const struct kasumi_test_data *tdata,\n \tuint64_t feat_flags = dev_info.feature_flags;\n \n \tif (op_mode == OUT_OF_PLACE) {\n+\t\tif (cryptodev_dp_test)\n+\t\t\treturn -ENOTSUP;\n \t\tif (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) {\n \t\t\tprintf(\"Device doesn't support digest encrypted.\\n\");\n \t\t\treturn -ENOTSUP;\n@@ -4526,7 +4766,11 @@ test_kasumi_auth_cipher(const struct kasumi_test_data *tdata,\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n@@ -4638,6 +4882,8 @@ test_kasumi_auth_cipher_sgl(const struct kasumi_test_data *tdata,\n \t\t\treturn -ENOTSUP;\n \t\t}\n \t} else {\n+\t\tif (cryptodev_dp_test)\n+\t\t\treturn -ENOTSUP;\n \t\tif (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {\n \t\t\tprintf(\"Device doesn't support out-of-place scatter-gather \"\n \t\t\t\t\t\"in both input and output mbufs.\\n\");\n@@ -4716,7 +4962,11 @@ test_kasumi_auth_cipher_sgl(const struct kasumi_test_data *tdata,\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n@@ -4857,7 +5107,11 @@ test_kasumi_cipher_auth(const struct kasumi_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \n@@ -4944,7 +5198,11 @@ test_zuc_encryption(const struct wireless_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 0, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\t\t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \n@@ -5031,7 +5289,11 @@ test_zuc_encryption_sgl(const struct wireless_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 0, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\t\t\t\tut_params->op);\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \n@@ -5119,7 +5381,11 @@ test_zuc_authentication(const struct wireless_test_data *tdata)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 1, 1, 0);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\t\tut_params->op);\n \tut_params->obuf = ut_params->op->sym->m_src;\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n@@ -5177,6 +5443,8 @@ test_zuc_auth_cipher(const struct wireless_test_data *tdata,\n \t\t\treturn -ENOTSUP;\n \t\t}\n \t} else {\n+\t\tif (cryptodev_dp_test)\n+\t\t\treturn -ENOTSUP;\n \t\tif (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {\n \t\t\tprintf(\"Device doesn't support out-of-place scatter-gather \"\n \t\t\t\t\t\"in both input and output mbufs.\\n\");\n@@ -5251,7 +5519,11 @@ test_zuc_auth_cipher(const struct wireless_test_data *tdata,\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n@@ -5359,6 +5631,8 @@ test_zuc_auth_cipher_sgl(const struct wireless_test_data *tdata,\n \t\t\treturn -ENOTSUP;\n \t\t}\n \t} else {\n+\t\tif (cryptodev_dp_test)\n+\t\t\treturn -ENOTSUP;\n \t\tif (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) {\n \t\t\tprintf(\"Device doesn't support out-of-place scatter-gather \"\n \t\t\t\t\t\"in both input and output mbufs.\\n\");\n@@ -5437,7 +5711,11 @@ test_zuc_auth_cipher_sgl(const struct wireless_test_data *tdata,\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 1, tdata->cipher_iv.len);\n+\telse\n+\t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n@@ -5580,6 +5858,9 @@ test_kasumi_decryption_test_case_2(void)\n static int\n test_kasumi_decryption_test_case_3(void)\n {\n+\t/* rte_crypto_mbuf_to_vec does not support incomplete mbuf build */\n+\tif (cryptodev_dp_test)\n+\t\treturn -ENOTSUP;\n \treturn test_kasumi_decryption(&kasumi_test_case_3);\n }\n \n@@ -5779,6 +6060,9 @@ test_snow3g_auth_cipher_part_digest_enc_oop(void)\n static int\n test_snow3g_auth_cipher_test_case_3_sgl(void)\n {\n+\t/* rte_crypto_mbuf_to_vec does not support incomplete mbuf build */\n+\tif (cryptodev_dp_test)\n+\t\treturn -ENOTSUP;\n \treturn test_snow3g_auth_cipher_sgl(\n \t\t&snow3g_auth_cipher_test_case_3, IN_PLACE, 0);\n }\n@@ -5793,6 +6077,9 @@ test_snow3g_auth_cipher_test_case_3_oop_sgl(void)\n static int\n test_snow3g_auth_cipher_part_digest_enc_sgl(void)\n {\n+\t/* rte_crypto_mbuf_to_vec does not support incomplete mbuf build */\n+\tif (cryptodev_dp_test)\n+\t\treturn -ENOTSUP;\n \treturn test_snow3g_auth_cipher_sgl(\n \t\t&snow3g_auth_cipher_partial_digest_encryption,\n \t\t\tIN_PLACE, 0);\n@@ -6146,10 +6433,9 @@ test_mixed_auth_cipher(const struct mixed_cipher_auth_test_data *tdata,\n \tunsigned int ciphertext_len;\n \n \tstruct rte_cryptodev_info dev_info;\n-\tstruct rte_crypto_op *op;\n \n \t/* Check if device supports particular algorithms separately */\n-\tif (test_mixed_check_if_unsupported(tdata))\n+\tif (test_mixed_check_if_unsupported(tdata) || cryptodev_dp_test)\n \t\treturn -ENOTSUP;\n \n \trte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);\n@@ -6161,6 +6447,9 @@ test_mixed_auth_cipher(const struct mixed_cipher_auth_test_data *tdata,\n \t\treturn -ENOTSUP;\n \t}\n \n+\tif (op_mode == OUT_OF_PLACE)\n+\t\treturn -ENOTSUP;\n+\n \t/* Create the session */\n \tif (verify)\n \t\tretval = create_wireless_algo_cipher_auth_session(\n@@ -6192,9 +6481,11 @@ test_mixed_auth_cipher(const struct mixed_cipher_auth_test_data *tdata,\n \t/* clear mbuf payload */\n \tmemset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,\n \t\trte_pktmbuf_tailroom(ut_params->ibuf));\n-\tif (op_mode == OUT_OF_PLACE)\n+\tif (op_mode == OUT_OF_PLACE) {\n+\n \t\tmemset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,\n \t\t\t\trte_pktmbuf_tailroom(ut_params->obuf));\n+\t}\n \n \tciphertext_len = ceil_byte_length(tdata->ciphertext.len_bits);\n \tplaintext_len = ceil_byte_length(tdata->plaintext.len_bits);\n@@ -6235,18 +6526,17 @@ test_mixed_auth_cipher(const struct mixed_cipher_auth_test_data *tdata,\n \tif (retval < 0)\n \t\treturn retval;\n \n-\top = process_crypto_request(ts_params->valid_devs[0],\n+\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \n \t/* Check if the op failed because the device doesn't */\n \t/* support this particular combination of algorithms */\n-\tif (op == NULL && ut_params->op->status ==\n+\tif (ut_params->op == NULL && ut_params->op->status ==\n \t\t\tRTE_CRYPTO_OP_STATUS_INVALID_SESSION) {\n \t\tprintf(\"Device doesn't support this mixed combination. \"\n \t\t\t\t\"Test Skipped.\\n\");\n \t\treturn -ENOTSUP;\n \t}\n-\tut_params->op = op;\n \n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \n@@ -6337,10 +6627,9 @@ test_mixed_auth_cipher_sgl(const struct mixed_cipher_auth_test_data *tdata,\n \tuint8_t digest_buffer[10000];\n \n \tstruct rte_cryptodev_info dev_info;\n-\tstruct rte_crypto_op *op;\n \n \t/* Check if device supports particular algorithms */\n-\tif (test_mixed_check_if_unsupported(tdata))\n+\tif (test_mixed_check_if_unsupported(tdata) || cryptodev_dp_test)\n \t\treturn -ENOTSUP;\n \n \trte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);\n@@ -6440,20 +6729,18 @@ test_mixed_auth_cipher_sgl(const struct mixed_cipher_auth_test_data *tdata,\n \tif (retval < 0)\n \t\treturn retval;\n \n-\top = process_crypto_request(ts_params->valid_devs[0],\n+\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \n \t/* Check if the op failed because the device doesn't */\n \t/* support this particular combination of algorithms */\n-\tif (op == NULL && ut_params->op->status ==\n+\tif (ut_params->op == NULL && ut_params->op->status ==\n \t\t\tRTE_CRYPTO_OP_STATUS_INVALID_SESSION) {\n \t\tprintf(\"Device doesn't support this mixed combination. \"\n \t\t\t\t\"Test Skipped.\\n\");\n \t\treturn -ENOTSUP;\n \t}\n \n-\tut_params->op = op;\n-\n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed to retrieve obuf\");\n \n \tut_params->obuf = (op_mode == IN_PLACE ?\n@@ -7043,6 +7330,9 @@ test_authenticated_encryption(const struct aead_test_data *tdata)\n \t/* Process crypto operation */\n \tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n \t\tprocess_cpu_aead_op(ts_params->valid_devs[0], ut_params->op);\n+\telse if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 0, 0, 0);\n \telse\n \t\tTEST_ASSERT_NOT_NULL(\n \t\t\tprocess_crypto_request(ts_params->valid_devs[0],\n@@ -8540,6 +8830,9 @@ test_authenticated_decryption(const struct aead_test_data *tdata)\n \t/* Process crypto operation */\n \tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n \t\tprocess_cpu_aead_op(ts_params->valid_devs[0], ut_params->op);\n+\telse if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 0, 0, 0);\n \telse\n \t\tTEST_ASSERT_NOT_NULL(\n \t\t\tprocess_crypto_request(ts_params->valid_devs[0],\n@@ -8833,6 +9126,9 @@ test_authenticated_encryption_oop(const struct aead_test_data *tdata)\n \tif (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],\n \t\t\t&cap_idx) == NULL)\n \t\treturn -ENOTSUP;\n+\t/* Data-path service does not support OOP */\n+\tif (cryptodev_dp_test)\n+\t\treturn -ENOTSUP;\n \n \t/* not supported with CPU crypto */\n \tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n@@ -8923,8 +9219,9 @@ test_authenticated_decryption_oop(const struct aead_test_data *tdata)\n \t\t\t&cap_idx) == NULL)\n \t\treturn -ENOTSUP;\n \n-\t/* not supported with CPU crypto */\n-\tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n+\t/* not supported with CPU crypto and data-path service*/\n+\tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO ||\n+\t\t\tcryptodev_dp_test)\n \t\treturn -ENOTSUP;\n \n \t/* Create AEAD session */\n@@ -9151,8 +9448,13 @@ test_authenticated_decryption_sessionless(\n \t\t\t\"crypto op session type not sessionless\");\n \n \t/* Process crypto operation */\n-\tTEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],\n-\t\t\tut_params->op), \"failed to process sym crypto op\");\n+\tif (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 0, 0, 0);\n+\telse\n+\t\tTEST_ASSERT_NOT_NULL(process_crypto_request(\n+\t\t\tts_params->valid_devs[0], ut_params->op),\n+\t\t\t\t\"failed to process sym crypto op\");\n \n \tTEST_ASSERT_NOT_NULL(ut_params->op, \"failed crypto process\");\n \n@@ -9472,6 +9774,9 @@ test_MD5_HMAC_generate(const struct HMAC_MD5_vector *test_case)\n \tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n \t\tprocess_cpu_crypt_auth_op(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n+\telse if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 1, 0, 0);\n \telse\n \t\tTEST_ASSERT_NOT_NULL(\n \t\t\tprocess_crypto_request(ts_params->valid_devs[0],\n@@ -9530,6 +9835,9 @@ test_MD5_HMAC_verify(const struct HMAC_MD5_vector *test_case)\n \tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n \t\tprocess_cpu_crypt_auth_op(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n+\telse if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 1, 0, 0);\n \telse\n \t\tTEST_ASSERT_NOT_NULL(\n \t\t\tprocess_crypto_request(ts_params->valid_devs[0],\n@@ -10098,6 +10406,9 @@ test_AES_GMAC_authentication(const struct gmac_test_data *tdata)\n \tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n \t\tprocess_cpu_crypt_auth_op(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n+\telse if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 1, 0, 0);\n \telse\n \t\tTEST_ASSERT_NOT_NULL(\n \t\t\tprocess_crypto_request(ts_params->valid_devs[0],\n@@ -10215,6 +10526,9 @@ test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata)\n \tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n \t\tprocess_cpu_crypt_auth_op(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n+\telse if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 1, 0, 0);\n \telse\n \t\tTEST_ASSERT_NOT_NULL(\n \t\t\tprocess_crypto_request(ts_params->valid_devs[0],\n@@ -10780,7 +11094,10 @@ test_authentication_verify_fail_when_data_corruption(\n \t\tTEST_ASSERT_NOT_EQUAL(ut_params->op->status,\n \t\t\tRTE_CRYPTO_OP_STATUS_SUCCESS,\n \t\t\t\"authentication not failed\");\n-\t} else {\n+\t} else if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 1, 0, 0);\n+\telse {\n \t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \t\tTEST_ASSERT_NULL(ut_params->op, \"authentication not failed\");\n@@ -10851,7 +11168,10 @@ test_authentication_verify_GMAC_fail_when_corruption(\n \t\tTEST_ASSERT_NOT_EQUAL(ut_params->op->status,\n \t\t\tRTE_CRYPTO_OP_STATUS_SUCCESS,\n \t\t\t\"authentication not failed\");\n-\t} else {\n+\t} else if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 1, 0, 0);\n+\telse {\n \t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \t\tTEST_ASSERT_NULL(ut_params->op, \"authentication not failed\");\n@@ -10926,7 +11246,10 @@ test_authenticated_decryption_fail_when_corruption(\n \t\tTEST_ASSERT_NOT_EQUAL(ut_params->op->status,\n \t\t\tRTE_CRYPTO_OP_STATUS_SUCCESS,\n \t\t\t\"authentication not failed\");\n-\t} else {\n+\t} else if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 0, 0);\n+\telse {\n \t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n \t\tTEST_ASSERT_NULL(ut_params->op, \"authentication not failed\");\n@@ -11021,6 +11344,9 @@ test_authenticated_encryt_with_esn(\n \tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n \t\tprocess_cpu_crypt_auth_op(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n+\telse if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 0, 0);\n \telse\n \t\tut_params->op = process_crypto_request(\n \t\t\tts_params->valid_devs[0], ut_params->op);\n@@ -11141,6 +11467,9 @@ test_authenticated_decrypt_with_esn(\n \tif (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n \t\tprocess_cpu_crypt_auth_op(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n+\telse if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 1, 1, 0, 0);\n \telse\n \t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n@@ -11285,6 +11614,9 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,\n \t\tunsigned int sgl_in = fragsz < tdata->plaintext.len;\n \t\tunsigned int sgl_out = (fragsz_oop ? fragsz_oop : fragsz) <\n \t\t\t\ttdata->plaintext.len;\n+\t\t/* Data path service does not support OOP */\n+\t\tif (cryptodev_dp_test)\n+\t\t\treturn -ENOTSUP;\n \t\tif (sgl_in && !sgl_out) {\n \t\t\tif (!(dev_info.feature_flags &\n \t\t\t\t\tRTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT))\n@@ -11480,6 +11812,9 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,\n \tif (oop == IN_PLACE &&\n \t\t\tgbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO)\n \t\tprocess_cpu_aead_op(ts_params->valid_devs[0], ut_params->op);\n+\telse if (cryptodev_dp_test)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 0, 0, 0);\n \telse\n \t\tTEST_ASSERT_NOT_NULL(\n \t\t\tprocess_crypto_request(ts_params->valid_devs[0],\n@@ -13041,6 +13376,29 @@ test_cryptodev_nitrox(void)\n \treturn unit_test_suite_runner(&cryptodev_nitrox_testsuite);\n }\n \n+static int\n+test_qat_sym_direct_api(void /*argv __rte_unused, int argc __rte_unused*/)\n+{\n+\tint ret;\n+\n+\tgbl_driver_id =\trte_cryptodev_driver_id_get(\n+\t\t\tRTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD));\n+\n+\tif (gbl_driver_id == -1) {\n+\t\tRTE_LOG(ERR, USER1, \"QAT PMD must be loaded. Check that both \"\n+\t\t\"CONFIG_RTE_LIBRTE_PMD_QAT and CONFIG_RTE_LIBRTE_PMD_QAT_SYM \"\n+\t\t\"are enabled in config file to run this testsuite.\\n\");\n+\t\treturn TEST_SKIPPED;\n+\t}\n+\n+\tcryptodev_dp_test = 1;\n+\tret = unit_test_suite_runner(&cryptodev_testsuite);\n+\tcryptodev_dp_test = 0;\n+\n+\treturn ret;\n+}\n+\n+REGISTER_TEST_COMMAND(cryptodev_qat_sym_api_autotest, test_qat_sym_direct_api);\n REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);\n REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);\n REGISTER_TEST_COMMAND(cryptodev_cpu_aesni_mb_autotest,\ndiff --git a/app/test/test_cryptodev.h b/app/test/test_cryptodev.h\nindex 41542e055..e4e4c7626 100644\n--- a/app/test/test_cryptodev.h\n+++ b/app/test/test_cryptodev.h\n@@ -71,6 +71,8 @@\n #define CRYPTODEV_NAME_CAAM_JR_PMD\tcrypto_caam_jr\n #define CRYPTODEV_NAME_NITROX_PMD\tcrypto_nitrox_sym\n \n+extern int cryptodev_dp_test;\n+\n /**\n  * Write (spread) data from buffer to mbuf data\n  *\n@@ -209,4 +211,9 @@ create_segmented_mbuf(struct rte_mempool *mbuf_pool, int pkt_len,\n \treturn NULL;\n }\n \n+void\n+process_sym_hw_api_op(uint8_t dev_id, uint16_t qp_id, struct rte_crypto_op *op,\n+\t\tuint8_t is_cipher, uint8_t is_auth, uint8_t len_in_bits,\n+\t\tuint8_t cipher_iv_len);\n+\n #endif /* TEST_CRYPTODEV_H_ */\ndiff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c\nindex 221262341..311b34c15 100644\n--- a/app/test/test_cryptodev_blockcipher.c\n+++ b/app/test/test_cryptodev_blockcipher.c\n@@ -462,25 +462,44 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t,\n \t}\n \n \t/* Process crypto operation */\n-\tif (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {\n-\t\tsnprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,\n-\t\t\t\"line %u FAILED: %s\",\n-\t\t\t__LINE__, \"Error sending packet for encryption\");\n-\t\tstatus = TEST_FAILED;\n-\t\tgoto error_exit;\n-\t}\n+\tif (cryptodev_dp_test) {\n+\t\tuint8_t is_cipher = 0, is_auth = 0;\n \n-\top = NULL;\n+\t\tif (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_OOP) {\n+\t\t\tRTE_LOG(DEBUG, USER1,\n+\t\t\t\"QAT direct API does not support OOP, Test Skipped.\\n\");\n+\t\t\tsnprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, \"SKIPPED\");\n+\t\t\tstatus = TEST_SUCCESS;\n+\t\t\tgoto error_exit;\n+\t\t}\n+\t\tif (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER)\n+\t\t\tis_cipher = 1;\n+\t\tif (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH)\n+\t\t\tis_auth = 1;\n \n-\twhile (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)\n-\t\trte_pause();\n+\t\tprocess_sym_hw_api_op(dev_id, 0, op, is_cipher, is_auth, 0,\n+\t\t\t\ttdata->iv.len);\n+\t} else {\n+\t\tif (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {\n+\t\t\tsnprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,\n+\t\t\t\t\"line %u FAILED: %s\",\n+\t\t\t\t__LINE__, \"Error sending packet for encryption\");\n+\t\t\tstatus = TEST_FAILED;\n+\t\t\tgoto error_exit;\n+\t\t}\n \n-\tif (!op) {\n-\t\tsnprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,\n-\t\t\t\"line %u FAILED: %s\",\n-\t\t\t__LINE__, \"Failed to process sym crypto op\");\n-\t\tstatus = TEST_FAILED;\n-\t\tgoto error_exit;\n+\t\top = NULL;\n+\n+\t\twhile (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)\n+\t\t\trte_pause();\n+\n+\t\tif (!op) {\n+\t\t\tsnprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,\n+\t\t\t\t\"line %u FAILED: %s\",\n+\t\t\t\t__LINE__, \"Failed to process sym crypto op\");\n+\t\t\tstatus = TEST_FAILED;\n+\t\t\tgoto error_exit;\n+\t\t}\n \t}\n \n \tdebug_hexdump(stdout, \"m_src(after):\",\n",
    "prefixes": [
        "v8",
        "3/4"
    ]
}