get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 72989,
    "url": "https://patches.dpdk.org/api/patches/72989/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20200703110923.26452-7-roy.fan.zhang@intel.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<20200703110923.26452-7-roy.fan.zhang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200703110923.26452-7-roy.fan.zhang@intel.com",
    "date": "2020-07-03T11:09:22",
    "name": "[v3,3/4] test/crypto: add unit-test for cryptodev direct APIs",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "361a75923d976c2932dbf9ad8e2a05a438ac2b33",
    "submitter": {
        "id": 304,
        "url": "https://patches.dpdk.org/api/people/304/?format=api",
        "name": "Fan Zhang",
        "email": "roy.fan.zhang@intel.com"
    },
    "delegate": {
        "id": 6690,
        "url": "https://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20200703110923.26452-7-roy.fan.zhang@intel.com/mbox/",
    "series": [
        {
            "id": 10772,
            "url": "https://patches.dpdk.org/api/series/10772/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=10772",
            "date": "2020-07-03T11:09:22",
            "name": null,
            "version": 3,
            "mbox": "https://patches.dpdk.org/series/10772/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/72989/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/72989/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 4F08AA0519;\n\tFri,  3 Jul 2020 13:10:30 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 5639C1DB75;\n\tFri,  3 Jul 2020 13:09:42 +0200 (CEST)",
            "from mga12.intel.com (mga12.intel.com [192.55.52.136])\n by dpdk.org (Postfix) with ESMTP id 9DCE11DB5D\n for <dev@dpdk.org>; Fri,  3 Jul 2020 13:09:38 +0200 (CEST)",
            "from fmsmga004.fm.intel.com ([10.253.24.48])\n by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 03 Jul 2020 04:09:38 -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; 03 Jul 2020 04:09:36 -0700"
        ],
        "IronPort-SDR": [
            "\n LvfBrQgyO9q0W5xOSOZYJQaPs0SDkzRe5+h3AOTGznsqtNQ+a+gGJu30TPq/UW8iJ/DrJcuiR3\n zal8+6K7fbmg==",
            "\n A0mhi7FLbEw/9VYIz5pcz8eyKwvqCBxQyGz/TdzgYwtLom6er/d9bVsgICxWUeFJeeMTe+F7cJ\n /iZjD4nvI/OQ=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9670\"; a=\"126745856\"",
            "E=Sophos;i=\"5.75,308,1589266800\"; d=\"scan'208\";a=\"126745856\"",
            "E=Sophos;i=\"5.75,308,1589266800\"; d=\"scan'208\";a=\"304556004\""
        ],
        "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": "fiona.trahe@intel.com, akhil.goyal@nxp.com, thomas@monjalon.net,\n jerinjacobk@gmail.com, Fan Zhang <roy.fan.zhang@intel.com>",
        "Date": "Fri,  3 Jul 2020 12:09:22 +0100",
        "Message-Id": "<20200703110923.26452-7-roy.fan.zhang@intel.com>",
        "X-Mailer": "git-send-email 2.20.1",
        "In-Reply-To": "<20200703110923.26452-1-roy.fan.zhang@intel.com>",
        "References": "<20200625133138.42827-1-roy.fan.zhang@intel.com>\n <20200703110923.26452-1-roy.fan.zhang@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [dpdk-dev v3 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             | 353 ++++++++++++++++++++++++--\n app/test/test_cryptodev.h             |   6 +\n app/test/test_cryptodev_blockcipher.c |  50 ++--\n 3 files changed, 372 insertions(+), 37 deletions(-)",
    "diff": "diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c\nindex 8f631468b..9fbbe1d6c 100644\n--- a/app/test/test_cryptodev.c\n+++ b/app/test/test_cryptodev.c\n@@ -55,6 +55,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 qat_api_test;\n+\n struct crypto_testsuite_params {\n \tstruct rte_mempool *mbuf_pool;\n \tstruct rte_mempool *large_mbuf_pool;\n@@ -142,6 +144,154 @@ 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_hw_ops hw_ops;\n+\tstruct rte_crypto_op *op_ret;\n+\tstruct rte_crypto_sym_op *sop;\n+\tstruct rte_crypto_sym_job job;\n+\tstruct rte_crypto_sgl sgl;\n+\tstruct rte_crypto_vec vec[UINT8_MAX] = { {0} };\n+\tint ret;\n+\tuint32_t min_ofs = 0, max_len = 0;\n+\tuint64_t drv_data;\n+\tuint64_t flags = RTE_CRYPTO_HW_ENQ_FLAG_START |\n+\t\t\tRTE_CRYPTO_HW_ENQ_FLAG_END |\n+\t\t\tRTE_CRYPTO_HW_ENQ_FLAG_SET_OPAQUE;\n+\tenum {\n+\t\tcipher = 0,\n+\t\tauth,\n+\t\tchain,\n+\t\taead\n+\t} qat_api_test_type;\n+\tuint32_t count = 0;\n+\n+\tmemset(&job, 0, sizeof(job));\n+\n+\tret = rte_cryptodev_sym_get_hw_ops(dev_id, qp_id, &hw_ops);\n+\tif (ret) {\n+\t\top->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED;\n+\t\treturn;\n+\t}\n+\n+\tsop = op->sym;\n+\n+\tif (is_cipher && is_auth) {\n+\t\tqat_api_test_type = 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\tqat_api_test_type = cipher;\n+\t\tmin_ofs = sop->cipher.data.offset;\n+\t\tmax_len = sop->cipher.data.length;\n+\t} else if (is_auth) {\n+\t\tqat_api_test_type = auth;\n+\t\tmin_ofs = sop->auth.data.offset;\n+\t\tmax_len = sop->auth.data.length;\n+\t} else { /* aead */\n+\t\tqat_api_test_type = 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+\tn = rte_crypto_mbuf_to_vec(sop->m_src, min_ofs, max_len,\n+\t\t\tvec, RTE_DIM(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+\tif (n > 1) {\n+\t\tsgl.vec = vec;\n+\t\tsgl.num = n;\n+\t\tflags |= RTE_CRYPTO_HW_ENQ_FLAG_IS_SGL;\n+\t\tjob.sgl = &sgl;\n+\t} else\n+\t\tjob.data_iova = rte_pktmbuf_iova(sop->m_src);\n+\n+\n+\tswitch (qat_api_test_type) {\n+\tcase aead:\n+\t\tjob.iv = rte_crypto_op_ctod_offset(op, void *, IV_OFFSET);\n+\t\tjob.iv_iova = rte_crypto_op_ctophys_offset(op, IV_OFFSET);\n+\t\tjob.aead.aead_ofs = min_ofs;\n+\t\tjob.aead.aead_len = max_len;\n+\t\tjob.aead.aad = sop->aead.aad.data;\n+\t\tjob.aead.aad_iova = sop->aead.aad.phys_addr;\n+\t\tjob.aead.tag_iova = sop->aead.digest.phys_addr;\n+\t\tret = hw_ops.enqueue_aead(hw_ops.qp, sop->session, &job,\n+\t\t\t\t(void *)op, &drv_data, flags);\n+\t\tbreak;\n+\tcase cipher:\n+\t\tjob.iv = rte_crypto_op_ctod_offset(op, void *, IV_OFFSET);\n+\t\tjob.cipher_only.cipher_ofs = min_ofs;\n+\t\tjob.cipher_only.cipher_len = max_len;\n+\t\tret = hw_ops.enqueue_cipher(hw_ops.qp, sop->session, &job,\n+\t\t\t\t(void *)op, &drv_data, flags);\n+\t\tbreak;\n+\tcase auth:\n+\t\tjob.auth_only.auth_ofs = min_ofs;\n+\t\tjob.auth_only.auth_len = max_len;\n+\t\tjob.auth_only.digest_iova = sop->auth.digest.phys_addr;\n+\t\tret = hw_ops.enqueue_auth(hw_ops.qp, sop->session, &job,\n+\t\t\t\t(void *)op, &drv_data, flags);\n+\t\tbreak;\n+\tcase chain:\n+\t\tjob.iv = rte_crypto_op_ctod_offset(op, void *, IV_OFFSET);\n+\t\tjob.iv_iova = rte_crypto_op_ctophys_offset(op, IV_OFFSET);\n+\t\tjob.chain.cipher_ofs = sop->cipher.data.offset;\n+\t\tjob.chain.cipher_len = sop->cipher.data.length;\n+\t\tif (len_in_bits) {\n+\t\t\tjob.chain.cipher_len = job.chain.cipher_len >> 3;\n+\t\t\tjob.chain.cipher_ofs = job.chain.cipher_ofs >> 3;\n+\t\t}\n+\t\tjob.chain.auth_ofs = sop->auth.data.offset;\n+\t\tjob.chain.auth_len = sop->auth.data.length;\n+\t\tif (len_in_bits) {\n+\t\t\tjob.chain.auth_len = job.chain.auth_len >> 3;\n+\t\t\tjob.chain.auth_ofs = job.chain.auth_ofs >> 3;\n+\t\t}\n+\t\tjob.chain.digest_iova = sop->auth.digest.phys_addr;\n+\t\tret = hw_ops.enqueue_chain(hw_ops.qp, sop->session, &job,\n+\t\t\t\t(void *)op, &drv_data, flags);\n+\t\tbreak;\n+\t}\n+\n+\tif (ret < 0) {\n+\t\top->status = RTE_CRYPTO_OP_STATUS_ERROR;\n+\t\treturn;\n+\t}\n+\n+\tret = 0;\n+\n+\twhile (ret == 0 && count++ < 1024) {\n+\t\tret = hw_ops.query_processed(hw_ops.qp, 1);\n+\t\tif (!ret)\n+\t\t\trte_delay_ms(1);\n+\t}\n+\tif (ret < 0 || count >= 1024) {\n+\t\top->status = RTE_CRYPTO_OP_STATUS_ERROR;\n+\t\treturn;\n+\t}\n+\n+\tflags = RTE_CRYPTO_HW_DEQ_FLAG_START;\n+\top_ret = hw_ops.dequeue_one(hw_ops.qp, &drv_data, flags, &ret);\n+\tif (op_ret != op || ret != 1)\n+\t\top->status = RTE_CRYPTO_OP_STATUS_ERROR;\n+\telse\n+\t\top->status = RTE_CRYPTO_OP_STATUS_SUCCESS;\n+}\n+\n static void\n process_cpu_aead_op(uint8_t dev_id, struct rte_crypto_op *op)\n {\n@@ -2451,7 +2601,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 (qat_api_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@@ -2530,7 +2684,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 (qat_api_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@@ -2600,6 +2758,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 (qat_api_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@@ -2671,7 +2832,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 (qat_api_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@@ -2878,8 +3043,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 (qat_api_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@@ -2964,7 +3133,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 (qat_api_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@@ -3287,7 +3460,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 (qat_api_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@@ -3362,7 +3539,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 (qat_api_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@@ -3737,7 +3918,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 (qat_api_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@@ -3905,7 +4090,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 (qat_api_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@@ -4000,7 +4189,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 (qat_api_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@@ -4136,7 +4329,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 (qat_api_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@@ -4325,7 +4522,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 (qat_api_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@@ -4507,7 +4708,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 (qat_api_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@@ -4697,7 +4902,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 (qat_api_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@@ -4838,7 +5047,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 (qat_api_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@@ -4925,7 +5138,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 (qat_api_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@@ -5012,7 +5229,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 (qat_api_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@@ -5100,7 +5321,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 (qat_api_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@@ -5232,7 +5457,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 (qat_api_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@@ -5418,7 +5647,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 (qat_api_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@@ -7024,6 +7257,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 (qat_api_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@@ -7993,6 +8229,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 (qat_api_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@@ -11284,6 +11523,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 && qat_api_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@@ -13241,6 +13483,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+\tqat_api_test = 1;\n+\tret = unit_test_suite_runner(&cryptodev_sym_direct_api_testsuite);\n+\tqat_api_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..2854115aa 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 qat_api_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 642b54971..dfa74a449 100644\n--- a/app/test/test_cryptodev_blockcipher.c\n+++ b/app/test/test_cryptodev_blockcipher.c\n@@ -461,25 +461,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 (qat_api_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": [
        "v3",
        "3/4"
    ]
}