get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 20980,
    "url": "https://patches.dpdk.org/api/patches/20980/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1488354962-12144-2-git-send-email-arkadiuszx.kusztal@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": "<1488354962-12144-2-git-send-email-arkadiuszx.kusztal@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1488354962-12144-2-git-send-email-arkadiuszx.kusztal@intel.com",
    "date": "2017-03-01T07:56:01",
    "name": "[dpdk-dev,1/2] crypto/qat: add ZUC EEA3 cipher capability",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "d39a205a7c38605feb9a0f364c451de122135a35",
    "submitter": {
        "id": 452,
        "url": "https://patches.dpdk.org/api/people/452/?format=api",
        "name": "Arkadiusz Kusztal",
        "email": "arkadiuszx.kusztal@intel.com"
    },
    "delegate": {
        "id": 22,
        "url": "https://patches.dpdk.org/api/users/22/?format=api",
        "username": "pdelarag",
        "first_name": "Pablo",
        "last_name": "de Lara Guarch",
        "email": "pablo.de.lara.guarch@intel.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1488354962-12144-2-git-send-email-arkadiuszx.kusztal@intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/20980/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/20980/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 9D70E6CB4;\n\tWed,  1 Mar 2017 08:56:33 +0100 (CET)",
            "from mga06.intel.com (mga06.intel.com [134.134.136.31])\n\tby dpdk.org (Postfix) with ESMTP id 168EF2B86\n\tfor <dev@dpdk.org>; Wed,  1 Mar 2017 08:56:08 +0100 (CET)",
            "from fmsmga001.fm.intel.com ([10.253.24.23])\n\tby orsmga104.jf.intel.com with ESMTP; 28 Feb 2017 23:56:08 -0800",
            "from sivswdev03.ir.intel.com (HELO localhost.localdomain)\n\t([10.237.217.157])\n\tby fmsmga001.fm.intel.com with ESMTP; 28 Feb 2017 23:56:05 -0800"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos; i=\"5.35,224,1484035200\"; d=\"scan'208\";\n\ta=\"1116947052\"",
        "From": "Arek Kusztal <arkadiuszx.kusztal@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "fiona.trahe@intel.com, pablo.de.lara.guarch@intel.com,\n\tjohn.griffin@intel.com, deepak.k.jain@intel.com,\n\tArek Kusztal <arkadiuszx.kusztal@intel.com>",
        "Date": "Wed,  1 Mar 2017 07:56:01 +0000",
        "Message-Id": "<1488354962-12144-2-git-send-email-arkadiuszx.kusztal@intel.com>",
        "X-Mailer": "git-send-email 1.7.0.7",
        "In-Reply-To": "<1488354962-12144-1-git-send-email-arkadiuszx.kusztal@intel.com>",
        "References": "<1488354962-12144-1-git-send-email-arkadiuszx.kusztal@intel.com>",
        "Subject": "[dpdk-dev] [PATCH 1/2] crypto/qat: add ZUC EEA3 cipher capability",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "This commit adds ZUC EEA3 cipher capability to Intel(R) QuickAssist\nTechnology driver\n\nSigned-off-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>\n---\n doc/guides/cryptodevs/qat.rst                    |  2 +\n drivers/crypto/qat/qat_adf/qat_algs.h            | 11 ++-\n drivers/crypto/qat/qat_adf/qat_algs_build_desc.c | 97 ++++++++++++++++++++----\n drivers/crypto/qat/qat_crypto.c                  | 34 ++++++++-\n 4 files changed, 125 insertions(+), 19 deletions(-)",
    "diff": "diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst\nindex 9ecd19b..79b9c9d 100644\n--- a/doc/guides/cryptodevs/qat.rst\n+++ b/doc/guides/cryptodevs/qat.rst\n@@ -55,6 +55,7 @@ Cipher algorithms:\n * ``RTE_CRYPTO_CIPHER_NULL``\n * ``RTE_CRYPTO_CIPHER_KASUMI_F8``\n * ``RTE_CRYPTO_CIPHER_DES_CBC``\n+* ``RTE_CRYPTO_CIPHER_ZUC_EEA3``\n \n Hash algorithms:\n \n@@ -79,6 +80,7 @@ Limitations\n * SNOW 3G (UEA2) and KASUMI (F8) supported only if cipher length, cipher offset fields are byte-aligned.\n * SNOW 3G (UIA2) and KASUMI (F9) supported only if hash length, hash offset fields are byte-aligned.\n * No BSD support as BSD QAT kernel driver not available.\n+* ZUC EEA3 is not supported by dh895xcc devices\n \n \n Installation\ndiff --git a/drivers/crypto/qat/qat_adf/qat_algs.h b/drivers/crypto/qat/qat_adf/qat_algs.h\nindex b9e3fd6..37f64d4 100644\n--- a/drivers/crypto/qat/qat_adf/qat_algs.h\n+++ b/drivers/crypto/qat/qat_adf/qat_algs.h\n@@ -80,6 +80,14 @@ struct qat_alg_buf {\n \tuint64_t addr;\n } __rte_packed;\n \n+enum qat_crypto_proto_flag {\n+\tQAT_CRYPTO_PROTO_FLAG_NONE = 0,\n+\tQAT_CRYPTO_PROTO_FLAG_CCM = 1,\n+\tQAT_CRYPTO_PROTO_FLAG_GCM = 2,\n+\tQAT_CRYPTO_PROTO_FLAG_SNOW3G = 3,\n+\tQAT_CRYPTO_PROTO_FLAG_ZUC = 4\n+};\n+\n /*\n  * Maximum number of SGL entries\n  */\n@@ -143,7 +151,7 @@ int qat_alg_aead_session_create_content_desc_auth(struct qat_session *cdesc,\n \t\t\t\t\t\tunsigned int operation);\n \n void qat_alg_init_common_hdr(struct icp_qat_fw_comn_req_hdr *header,\n-\t\t\t\t\t\tuint16_t proto);\n+\t\t\t\t\t\tenum qat_crypto_proto_flag proto_flags);\n \n void qat_alg_ablkcipher_init_enc(struct qat_alg_ablkcipher_cd *cd,\n \t\t\t\t\tint alg, const uint8_t *key,\n@@ -158,4 +166,5 @@ int qat_alg_validate_snow3g_key(int key_len, enum icp_qat_hw_cipher_algo *alg);\n int qat_alg_validate_kasumi_key(int key_len, enum icp_qat_hw_cipher_algo *alg);\n int qat_alg_validate_3des_key(int key_len, enum icp_qat_hw_cipher_algo *alg);\n int qat_alg_validate_des_key(int key_len, enum icp_qat_hw_cipher_algo *alg);\n+int qat_alg_validate_zuc_key(int key_len, enum icp_qat_hw_cipher_algo *alg);\n #endif\ndiff --git a/drivers/crypto/qat/qat_adf/qat_algs_build_desc.c b/drivers/crypto/qat/qat_adf/qat_algs_build_desc.c\nindex fbeef0a..3831d19 100644\n--- a/drivers/crypto/qat/qat_adf/qat_algs_build_desc.c\n+++ b/drivers/crypto/qat/qat_adf/qat_algs_build_desc.c\n@@ -422,7 +422,7 @@ static int qat_alg_do_precomputes(enum icp_qat_hw_auth_algo hash_alg,\n }\n \n void qat_alg_init_common_hdr(struct icp_qat_fw_comn_req_hdr *header,\n-\t\tuint16_t proto)\n+\t\tenum qat_crypto_proto_flag proto_flags)\n {\n \tPMD_INIT_FUNC_TRACE();\n \theader->hdr_flags =\n@@ -435,14 +435,60 @@ void qat_alg_init_common_hdr(struct icp_qat_fw_comn_req_hdr *header,\n \t\t\t\t  ICP_QAT_FW_LA_PARTIAL_NONE);\n \tICP_QAT_FW_LA_CIPH_IV_FLD_FLAG_SET(header->serv_specif_flags,\n \t\t\t\t\t   ICP_QAT_FW_CIPH_IV_16BYTE_DATA);\n-\tICP_QAT_FW_LA_PROTO_SET(header->serv_specif_flags,\n-\t\t\t\tproto);\n+\n+\tswitch (proto_flags)\t\t{\n+\tcase QAT_CRYPTO_PROTO_FLAG_NONE:\n+\t\tICP_QAT_FW_LA_PROTO_SET(header->serv_specif_flags,\n+\t\t\t\t\tICP_QAT_FW_LA_NO_PROTO);\n+\t\tbreak;\n+\tcase QAT_CRYPTO_PROTO_FLAG_CCM:\n+\t\tICP_QAT_FW_LA_PROTO_SET(header->serv_specif_flags,\n+\t\t\t\t\tICP_QAT_FW_LA_CCM_PROTO);\n+\t\tbreak;\n+\tcase QAT_CRYPTO_PROTO_FLAG_GCM:\n+\t\tICP_QAT_FW_LA_PROTO_SET(header->serv_specif_flags,\n+\t\t\t\t\tICP_QAT_FW_LA_GCM_PROTO);\n+\t\tbreak;\n+\tcase QAT_CRYPTO_PROTO_FLAG_SNOW3G:\n+\t\tICP_QAT_FW_LA_PROTO_SET(header->serv_specif_flags,\n+\t\t\t\t\tICP_QAT_FW_LA_SNOW_3G_PROTO);\n+\t\tbreak;\n+\tcase QAT_CRYPTO_PROTO_FLAG_ZUC:\n+\t\tICP_QAT_FW_LA_ZUC_3G_PROTO_FLAG_SET(header->serv_specif_flags,\n+\t\t\tICP_QAT_FW_LA_ZUC_3G_PROTO);\n+\t\tbreak;\n+\t}\n+\n \tICP_QAT_FW_LA_UPDATE_STATE_SET(header->serv_specif_flags,\n \t\t\t\t\t   ICP_QAT_FW_LA_NO_UPDATE_STATE);\n \tICP_QAT_FW_LA_DIGEST_IN_BUFFER_SET(header->serv_specif_flags,\n \t\t\t\t\tICP_QAT_FW_LA_NO_DIGEST_IN_BUFFER);\n }\n \n+/*\n+ *\tSnow3G and ZUC should never use this function\n+ *\tand set its protocol flag in both cipher and auth part of content\n+ *\tdescriptor building function\n+ */\n+static enum qat_crypto_proto_flag\n+qat_get_crypto_proto_flag(uint16_t flags)\n+{\n+\tint proto = ICP_QAT_FW_LA_PROTO_GET(flags);\n+\tenum qat_crypto_proto_flag qat_proto_flag =\n+\t\t\tQAT_CRYPTO_PROTO_FLAG_NONE;\n+\n+\tswitch (proto) {\n+\tcase ICP_QAT_FW_LA_GCM_PROTO:\n+\t\tqat_proto_flag = QAT_CRYPTO_PROTO_FLAG_GCM;\n+\t\tbreak;\n+\tcase ICP_QAT_FW_LA_CCM_PROTO:\n+\t\tqat_proto_flag = QAT_CRYPTO_PROTO_FLAG_CCM;\n+\t\tbreak;\n+\t}\n+\n+\treturn qat_proto_flag;\n+}\n+\n int qat_alg_aead_session_create_content_desc_cipher(struct qat_session *cdesc,\n \t\t\t\t\t\tuint8_t *cipherkey,\n \t\t\t\t\t\tuint32_t cipherkeylen)\n@@ -455,8 +501,9 @@ int qat_alg_aead_session_create_content_desc_cipher(struct qat_session *cdesc,\n \tstruct icp_qat_fw_cipher_cd_ctrl_hdr *cipher_cd_ctrl = ptr;\n \tstruct icp_qat_fw_auth_cd_ctrl_hdr *hash_cd_ctrl = ptr;\n \tenum icp_qat_hw_cipher_convert key_convert;\n+\tenum qat_crypto_proto_flag qat_proto_flag =\n+\t\tQAT_CRYPTO_PROTO_FLAG_NONE;\n \tuint32_t total_key_size;\n-\tuint16_t proto = ICP_QAT_FW_LA_NO_PROTO;\t/* no CCM/GCM/SNOW 3G */\n \tuint16_t cipher_offset, cd_size;\n \tuint32_t wordIndex  = 0;\n \tuint32_t *temp_key = NULL;\n@@ -496,7 +543,8 @@ int qat_alg_aead_session_create_content_desc_cipher(struct qat_session *cdesc,\n \t\t */\n \t\tcdesc->qat_dir = ICP_QAT_HW_CIPHER_ENCRYPT;\n \t\tkey_convert = ICP_QAT_HW_CIPHER_NO_CONVERT;\n-\t} else if (cdesc->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_SNOW_3G_UEA2)\n+\t} else if (cdesc->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_SNOW_3G_UEA2\n+\t\t|| cdesc->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_ZUC_3G_128_EEA3)\n \t\tkey_convert = ICP_QAT_HW_CIPHER_KEY_CONVERT;\n \telse if (cdesc->qat_dir == ICP_QAT_HW_CIPHER_ENCRYPT)\n \t\tkey_convert = ICP_QAT_HW_CIPHER_NO_CONVERT;\n@@ -508,7 +556,8 @@ int qat_alg_aead_session_create_content_desc_cipher(struct qat_session *cdesc,\n \t\t\tICP_QAT_HW_SNOW_3G_UEA2_IV_SZ;\n \t\tcipher_cd_ctrl->cipher_state_sz =\n \t\t\tICP_QAT_HW_SNOW_3G_UEA2_IV_SZ >> 3;\n-\t\tproto = ICP_QAT_FW_LA_SNOW_3G_PROTO;\n+\t\tqat_proto_flag = QAT_CRYPTO_PROTO_FLAG_SNOW3G;\n+\n \t} else if (cdesc->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_KASUMI) {\n \t\ttotal_key_size = ICP_QAT_HW_KASUMI_F8_KEY_SZ;\n \t\tcipher_cd_ctrl->cipher_state_sz = ICP_QAT_HW_KASUMI_BLK_SZ >> 3;\n@@ -517,25 +566,30 @@ int qat_alg_aead_session_create_content_desc_cipher(struct qat_session *cdesc,\n \t} else if (cdesc->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_3DES) {\n \t\ttotal_key_size = ICP_QAT_HW_3DES_KEY_SZ;\n \t\tcipher_cd_ctrl->cipher_state_sz = ICP_QAT_HW_3DES_BLK_SZ >> 3;\n-\t\tproto = ICP_QAT_FW_LA_PROTO_GET(header->serv_specif_flags);\n+\t\tqat_proto_flag = qat_get_crypto_proto_flag(header->serv_specif_flags);\n \t} else if (cdesc->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_DES) {\n \t\ttotal_key_size = ICP_QAT_HW_DES_KEY_SZ;\n \t\tcipher_cd_ctrl->cipher_state_sz = ICP_QAT_HW_DES_BLK_SZ >> 3;\n-\t\tproto = ICP_QAT_FW_LA_PROTO_GET(header->serv_specif_flags);\n+\t\tqat_proto_flag = qat_get_crypto_proto_flag(header->serv_specif_flags);\n+\t} else if (cdesc->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_ZUC_3G_128_EEA3) {\n+\t\ttotal_key_size = ICP_QAT_HW_ZUC_3G_EEA3_KEY_SZ +\n+\t\t\tICP_QAT_HW_ZUC_3G_EEA3_IV_SZ;\n+\t\tcipher_cd_ctrl->cipher_state_sz =\n+\t\t\tICP_QAT_HW_ZUC_3G_EEA3_IV_SZ >> 3;\n+\t\tqat_proto_flag = QAT_CRYPTO_PROTO_FLAG_ZUC;\n \t} else {\n \t\ttotal_key_size = cipherkeylen;\n \t\tcipher_cd_ctrl->cipher_state_sz = ICP_QAT_HW_AES_BLK_SZ >> 3;\n-\t\tproto = ICP_QAT_FW_LA_PROTO_GET(header->serv_specif_flags);\n+\t\tqat_proto_flag = qat_get_crypto_proto_flag(header->serv_specif_flags);\n \t}\n \tcipher_cd_ctrl->cipher_key_sz = total_key_size >> 3;\n \tcipher_offset = cdesc->cd_cur_ptr-((uint8_t *)&cdesc->cd);\n \tcipher_cd_ctrl->cipher_cfg_offset = cipher_offset >> 3;\n \n \theader->service_cmd_id = cdesc->qat_cmd;\n-\tqat_alg_init_common_hdr(header, proto);\n+\tqat_alg_init_common_hdr(header, qat_proto_flag);\n \n \tcipher = (struct icp_qat_hw_cipher_algo_blk *)cdesc->cd_cur_ptr;\n-\n \tcipher->cipher_config.val =\n \t    ICP_QAT_HW_CIPHER_CONFIG_BUILD(cdesc->qat_mode,\n \t\t\t\t\tcdesc->qat_cipher_alg, key_convert,\n@@ -596,12 +650,13 @@ int qat_alg_aead_session_create_content_desc_auth(struct qat_session *cdesc,\n \t\t(struct icp_qat_fw_la_auth_req_params *)\n \t\t((char *)&req_tmpl->serv_specif_rqpars +\n \t\tsizeof(struct icp_qat_fw_la_cipher_req_params));\n-\tuint16_t proto = ICP_QAT_FW_LA_NO_PROTO;\t/* no CCM/GCM/SNOW 3G */\n \tuint16_t state1_size = 0, state2_size = 0;\n \tuint16_t hash_offset, cd_size;\n \tuint32_t *aad_len = NULL;\n \tuint32_t wordIndex  = 0;\n \tuint32_t *pTempKey;\n+\tenum qat_crypto_proto_flag qat_proto_flag =\n+\t\tQAT_CRYPTO_PROTO_FLAG_NONE;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -714,7 +769,7 @@ int qat_alg_aead_session_create_content_desc_auth(struct qat_session *cdesc,\n \t\tbreak;\n \tcase ICP_QAT_HW_AUTH_ALGO_GALOIS_128:\n \tcase ICP_QAT_HW_AUTH_ALGO_GALOIS_64:\n-\t\tproto = ICP_QAT_FW_LA_GCM_PROTO;\n+\t\tqat_proto_flag = QAT_CRYPTO_PROTO_FLAG_GCM;\n \t\tstate1_size = ICP_QAT_HW_GALOIS_128_STATE1_SZ;\n \t\tif (qat_alg_do_precomputes(cdesc->qat_hash_alg,\n \t\t\tauthkey, authkeylen, cdesc->cd_cur_ptr + state1_size,\n@@ -736,7 +791,7 @@ int qat_alg_aead_session_create_content_desc_auth(struct qat_session *cdesc,\n \t\t*aad_len = rte_bswap32(add_auth_data_length);\n \t\tbreak;\n \tcase ICP_QAT_HW_AUTH_ALGO_SNOW_3G_UIA2:\n-\t\tproto = ICP_QAT_FW_LA_SNOW_3G_PROTO;\n+\t\tqat_proto_flag = QAT_CRYPTO_PROTO_FLAG_SNOW3G;\n \t\tstate1_size = qat_hash_get_state1_size(\n \t\t\t\tICP_QAT_HW_AUTH_ALGO_SNOW_3G_UIA2);\n \t\tstate2_size = ICP_QAT_HW_SNOW_3G_UIA2_STATE2_SZ;\n@@ -794,7 +849,7 @@ int qat_alg_aead_session_create_content_desc_auth(struct qat_session *cdesc,\n \t}\n \n \t/* Request template setup */\n-\tqat_alg_init_common_hdr(header, proto);\n+\tqat_alg_init_common_hdr(header, qat_proto_flag);\n \theader->service_cmd_id = cdesc->qat_cmd;\n \n \t/* Auth CD config setup */\n@@ -886,3 +941,15 @@ int qat_alg_validate_3des_key(int key_len, enum icp_qat_hw_cipher_algo *alg)\n \t}\n \treturn 0;\n }\n+\n+int qat_alg_validate_zuc_key(int key_len, enum icp_qat_hw_cipher_algo *alg)\n+{\n+\tswitch (key_len) {\n+\tcase ICP_QAT_HW_ZUC_3G_EEA3_KEY_SZ:\n+\t\t*alg = ICP_QAT_HW_CIPHER_ALGO_ZUC_3G_128_EEA3;\n+\t\tbreak;\n+\tdefault:\n+\t\treturn -EINVAL;\n+\t}\n+\treturn 0;\n+}\ndiff --git a/drivers/crypto/qat/qat_crypto.c b/drivers/crypto/qat/qat_crypto.c\nindex 43e1d00..fff51c8 100644\n--- a/drivers/crypto/qat/qat_crypto.c\n+++ b/drivers/crypto/qat/qat_crypto.c\n@@ -516,6 +516,26 @@ static const struct rte_cryptodev_capabilities qat_pmd_capabilities[] = {\n \t\t\t}, }\n \t\t}, }\n \t},\n+\t\t{\t/* ZUC (EEA3) */\n+\t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n+\t\t{.sym = {\n+\t\t\t.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,\n+\t\t\t{.cipher = {\n+\t\t\t\t.algo = RTE_CRYPTO_CIPHER_ZUC_EEA3,\n+\t\t\t\t.block_size = 16,\n+\t\t\t\t.key_size = {\n+\t\t\t\t\t.min = 16,\n+\t\t\t\t\t.max = 16,\n+\t\t\t\t\t.increment = 0\n+\t\t\t\t},\n+\t\t\t\t.iv_size = {\n+\t\t\t\t\t.min = 16,\n+\t\t\t\t\t.max = 16,\n+\t\t\t\t\t.increment = 0\n+\t\t\t\t}\n+\t\t\t}, }\n+\t\t}, }\n+\t},\n \tRTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()\n };\n \n@@ -674,13 +694,20 @@ qat_crypto_sym_configure_session_cipher(struct rte_cryptodev *dev,\n \t\t}\n \t\tsession->qat_mode = ICP_QAT_HW_CIPHER_CTR_MODE;\n \t\tbreak;\n+\tcase RTE_CRYPTO_CIPHER_ZUC_EEA3:\n+\t\tif (qat_alg_validate_zuc_key(cipher_xform->key.length,\n+\t\t\t\t&session->qat_cipher_alg) != 0) {\n+\t\t\tPMD_DRV_LOG(ERR, \"Invalid ZUC cipher key size\");\n+\t\t\tgoto error_out;\n+\t\t}\n+\t\tsession->qat_mode = ICP_QAT_HW_CIPHER_ECB_MODE;\n+\t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_3DES_ECB:\n \tcase RTE_CRYPTO_CIPHER_AES_ECB:\n \tcase RTE_CRYPTO_CIPHER_AES_CCM:\n \tcase RTE_CRYPTO_CIPHER_AES_F8:\n \tcase RTE_CRYPTO_CIPHER_AES_XTS:\n \tcase RTE_CRYPTO_CIPHER_ARC4:\n-\tcase RTE_CRYPTO_CIPHER_ZUC_EEA3:\n \t\tPMD_DRV_LOG(ERR, \"Crypto QAT PMD: Unsupported Cipher alg %u\",\n \t\t\t\tcipher_xform->algo);\n \t\tgoto error_out;\n@@ -1085,14 +1112,15 @@ qat_write_hw_desc_entry(struct rte_crypto_op *op, uint8_t *out_msg,\n \n \t\tif (ctx->qat_cipher_alg ==\n \t\t\t\t\t ICP_QAT_HW_CIPHER_ALGO_SNOW_3G_UEA2 ||\n-\t\t\tctx->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_KASUMI) {\n+\t\t\tctx->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_KASUMI\t||\n+\t\t\tctx->qat_cipher_alg == ICP_QAT_HW_CIPHER_ALGO_ZUC_3G_128_EEA3) {\n \n \t\t\tif (unlikely(\n \t\t\t\t(cipher_param->cipher_length % BYTE_LENGTH != 0)\n \t\t\t\t || (cipher_param->cipher_offset\n \t\t\t\t\t\t\t% BYTE_LENGTH != 0))) {\n \t\t\t\tPMD_DRV_LOG(ERR,\n-\t\t  \"SNOW3G/KASUMI in QAT PMD only supports byte aligned values\");\n+\t\t  \"SNOW3G/KASUMI/ZUC in QAT PMD only supports byte aligned values\");\n \t\t\t\top->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS;\n \t\t\t\treturn -EINVAL;\n \t\t\t}\n",
    "prefixes": [
        "dpdk-dev",
        "1/2"
    ]
}