get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 75643,
    "url": "http://patches.dpdk.org/api/patches/75643/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200818162833.20219-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": "<20200818162833.20219-4-roy.fan.zhang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200818162833.20219-4-roy.fan.zhang@intel.com",
    "date": "2020-08-18T16:28:32",
    "name": "[v6,3/4] test/crypto: add unit-test for cryptodev direct APIs",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "b99e455a5ce9a53d86eaecf7f863c3455c105848",
    "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/20200818162833.20219-4-roy.fan.zhang@intel.com/mbox/",
    "series": [
        {
            "id": 11694,
            "url": "http://patches.dpdk.org/api/series/11694/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=11694",
            "date": "2020-08-18T16:28:29",
            "name": "cryptodev: add data-path service APIs",
            "version": 6,
            "mbox": "http://patches.dpdk.org/series/11694/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/75643/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/75643/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 D01B8A0353;\n\tTue, 18 Aug 2020 18:29:40 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id E285C1C0B2;\n\tTue, 18 Aug 2020 18:28:56 +0200 (CEST)",
            "from mga17.intel.com (mga17.intel.com [192.55.52.151])\n by dpdk.org (Postfix) with ESMTP id 0DB2F2A62\n for <dev@dpdk.org>; Tue, 18 Aug 2020 18:28:50 +0200 (CEST)",
            "from fmsmga004.fm.intel.com ([10.253.24.48])\n by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 18 Aug 2020 09:28:44 -0700",
            "from silpixa00398673.ir.intel.com (HELO\n silpixa00398673.ger.corp.intel.com) ([10.237.223.136])\n by fmsmga004.fm.intel.com with ESMTP; 18 Aug 2020 09:28:42 -0700"
        ],
        "IronPort-SDR": [
            "\n LO2ktDG9uWoEJBnNmEDoZbqw2XszoZ4gCnZVEyxDy8Edn0gf3R7+unP3n4fqmxiZZkp9U9Uhsd\n Iwe6cxU4hR6g==",
            "\n KZY+GZW8LexV3F//jjUfvEXfkaF98GrBH7/35i6IwjQYsHcU3g+TXCzocCiL0v2gcDAyL82hJq\n FxpPVYTV2VWA=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9716\"; a=\"135011839\"",
            "E=Sophos;i=\"5.76,328,1592895600\"; d=\"scan'208\";a=\"135011839\"",
            "E=Sophos;i=\"5.76,328,1592895600\"; d=\"scan'208\";a=\"320148814\""
        ],
        "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": "Tue, 18 Aug 2020 17:28:32 +0100",
        "Message-Id": "<20200818162833.20219-4-roy.fan.zhang@intel.com>",
        "X-Mailer": "git-send-email 2.20.1",
        "In-Reply-To": "<20200818162833.20219-1-roy.fan.zhang@intel.com>",
        "References": "<20200818162833.20219-1-roy.fan.zhang@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [dpdk-dev v6 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             | 354 ++++++++++++++++++++++++--\n app/test/test_cryptodev.h             |   6 +\n app/test/test_cryptodev_blockcipher.c |  50 ++--\n 3 files changed, 373 insertions(+), 37 deletions(-)",
    "diff": "diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c\nindex 70bf6fe2c..d6909984d 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 hw_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,153 @@ 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+{\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+\tstruct rte_crypto_data iv_vec, aad_vec, digest_vec;\n+\tunion rte_crypto_sym_ofs ofs;\n+\tint32_t status;\n+\tuint32_t min_ofs, 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+\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\tmin_ofs = RTE_MIN(sop->cipher.data.offset,\n+\t\t\t\tsop->auth.data.offset);\n+\t\tmax_len = RTE_MAX(sop->cipher.data.length,\n+\t\t\t\tsop->auth.data.length);\n+\t} else if (is_cipher) {\n+\t\tservice_type = RTE_CRYPTO_DP_SYM_CIPHER_ONLY;\n+\t\tmin_ofs = sop->cipher.data.offset;\n+\t\tmax_len = sop->cipher.data.length;\n+\t} else if (is_auth) {\n+\t\tservice_type = RTE_CRYPTO_DP_SYM_AUTH_ONLY;\n+\t\tmin_ofs = sop->auth.data.offset;\n+\t\tmax_len = sop->auth.data.length;\n+\t} else { /* aead */\n+\t\tservice_type = RTE_CRYPTO_DP_SYM_AEAD;\n+\t\tmin_ofs = sop->aead.data.offset;\n+\t\tmax_len = sop->aead.data.length;\n+\t}\n+\n+\tif (len_in_bits) {\n+\t\tmax_len = max_len >> 3;\n+\t\tmin_ofs = min_ofs >> 3;\n+\t}\n+\n+\tctx_service_size = rte_cryptodev_get_dp_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, min_ofs + 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+\tiv_vec.base = rte_crypto_op_ctod_offset(op, void *, IV_OFFSET);\n+\tiv_vec.iova = rte_crypto_op_ctophys_offset(op, IV_OFFSET);\n+\n+\tswitch (service_type) {\n+\tcase RTE_CRYPTO_DP_SYM_AEAD:\n+\t\tofs.ofs.cipher.head = sop->cipher.data.offset;\n+\t\taad_vec.base = (void *)sop->aead.aad.data;\n+\t\taad_vec.iova = sop->aead.aad.phys_addr;\n+\t\tdigest_vec.base = (void *)sop->aead.digest.data;\n+\t\tdigest_vec.iova = sop->aead.digest.phys_addr;\n+\t\tif (len_in_bits) {\n+\t\t\tofs.ofs.cipher.head >>= 3;\n+\t\t\tofs.ofs.cipher.tail >>= 3;\n+\t\t}\n+\t\tbreak;\n+\tcase RTE_CRYPTO_DP_SYM_CIPHER_ONLY:\n+\t\tofs.ofs.cipher.head = sop->cipher.data.offset;\n+\t\tif (len_in_bits) {\n+\t\t\tofs.ofs.cipher.head >>= 3;\n+\t\t\tofs.ofs.cipher.tail >>= 3;\n+\t\t}\n+\t\tbreak;\n+\tcase RTE_CRYPTO_DP_SYM_AUTH_ONLY:\n+\t\tofs.ofs.auth.head = sop->auth.data.offset;\n+\t\tdigest_vec.base = (void *)sop->auth.digest.data;\n+\t\tdigest_vec.iova = sop->auth.digest.phys_addr;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_DP_SYM_CHAIN:\n+\t\tofs.ofs.cipher.head =\n+\t\t\tsop->cipher.data.offset - sop->auth.data.offset;\n+\t\tofs.ofs.cipher.tail =\n+\t\t\t(sop->auth.data.offset + sop->auth.data.length) -\n+\t\t\t(sop->cipher.data.offset + sop->cipher.data.length);\n+\t\tif (len_in_bits) {\n+\t\t\tofs.ofs.cipher.head >>= 3;\n+\t\t\tofs.ofs.cipher.tail >>= 3;\n+\t\t}\n+\t\tdigest_vec.base = (void *)sop->auth.digest.data;\n+\t\tdigest_vec.iova = sop->auth.digest.phys_addr;\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n+\t}\n+\n+\tstatus = rte_cryptodev_dp_submit_single_job(ctx, data_vec, n, ofs,\n+\t\t&iv_vec, &digest_vec, &aad_vec, (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_submit_done(ctx, 1);\n+\n+\tstatus = -1;\n+\twhile (count++ < 1024 && 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_dequeue_done(ctx, 1);\n+\n+\tif (count == 1025 || 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@@ -2470,7 +2621,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 (hw_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);\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 +2704,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 (hw_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);\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 +2778,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 (hw_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);\n \telse\n \t\tut_params->op = process_crypto_request(ts_params->valid_devs[0],\n \t\t\tut_params->op);\n@@ -2690,7 +2852,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 (hw_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);\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 +3063,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 (hw_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);\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 +3153,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 (hw_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);\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@@ -3306,7 +3480,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 (hw_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);\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 +3559,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 (hw_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);\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@@ -3756,7 +3938,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 (hw_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);\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@@ -3924,7 +4110,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 (hw_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);\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 +4209,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 (hw_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);\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@@ -4155,7 +4349,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 (hw_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);\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@@ -4344,7 +4542,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 (hw_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);\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@@ -4526,7 +4728,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 (hw_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);\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@@ -4716,7 +4922,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 (hw_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);\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 +5067,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 (hw_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);\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 +5158,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 (hw_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);\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 +5249,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 (hw_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);\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 +5341,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 (hw_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);\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@@ -5251,7 +5477,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 (hw_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);\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@@ -5437,7 +5667,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 (hw_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);\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@@ -7043,6 +7277,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 (hw_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);\n \telse\n \t\tTEST_ASSERT_NOT_NULL(\n \t\t\tprocess_crypto_request(ts_params->valid_devs[0],\n@@ -8540,6 +8777,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 (hw_dp_test == 1)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 0, 0, 0);\n \telse\n \t\tTEST_ASSERT_NOT_NULL(\n \t\t\tprocess_crypto_request(ts_params->valid_devs[0],\n@@ -11480,6 +11720,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 (oop == IN_PLACE && hw_dp_test == 1)\n+\t\tprocess_sym_hw_api_op(ts_params->valid_devs[0], 0,\n+\t\t\t\tut_params->op, 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 +13284,75 @@ test_cryptodev_nitrox(void)\n \treturn unit_test_suite_runner(&cryptodev_nitrox_testsuite);\n }\n \n+static struct unit_test_suite cryptodev_sym_direct_api_testsuite = {\n+\t.suite_name = \"Crypto Sym direct API Test Suite\",\n+\t.setup = testsuite_setup,\n+\t.teardown = testsuite_teardown,\n+\t.unit_test_cases = {\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_snow3g_encryption_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_snow3g_decryption_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_snow3g_auth_cipher_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_snow3g_auth_cipher_verify_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_kasumi_hash_generate_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_kasumi_hash_verify_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_kasumi_encryption_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_kasumi_decryption_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_cipheronly_all),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_authonly_all),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_all),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_CCM_authenticated_encryption_test_case_128_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_CCM_authenticated_decryption_test_case_128_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GCM_authenticated_encryption_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GCM_authenticated_decryption_test_case_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GCM_auth_encryption_test_case_192_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GCM_auth_decryption_test_case_192_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GCM_auth_encryption_test_case_256_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GCM_auth_decryption_test_case_256_1),\n+\t\tTEST_CASE_ST(ut_setup, ut_teardown,\n+\t\t\ttest_AES_GCM_auth_encrypt_SGL_in_place_1500B),\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n+\t}\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+\thw_dp_test = 1;\n+\tret = unit_test_suite_runner(&cryptodev_sym_direct_api_testsuite);\n+\thw_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..c382c12c4 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 hw_dp_test;\n+\n /**\n  * Write (spread) data from buffer to mbuf data\n  *\n@@ -209,4 +211,8 @@ 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+\n #endif /* TEST_CRYPTODEV_H_ */\ndiff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c\nindex 221262341..fc540e362 100644\n--- a/app/test/test_cryptodev_blockcipher.c\n+++ b/app/test/test_cryptodev_blockcipher.c\n@@ -462,25 +462,43 @@ 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 (hw_dp_test) {\n+\t\tuint8_t is_cipher = 0, is_auth = 0;\n+\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+\t\tprocess_sym_hw_api_op(dev_id, 0, op, is_cipher, is_auth, 0);\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-\top = NULL;\n+\t\top = NULL;\n \n-\twhile (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)\n-\t\trte_pause();\n+\t\twhile (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)\n+\t\t\trte_pause();\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\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": [
        "v6",
        "3/4"
    ]
}