get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 58397,
    "url": "http://patches.dpdk.org/api/patches/58397/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20190902121734.926-18-akhil.goyal@nxp.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": "<20190902121734.926-18-akhil.goyal@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190902121734.926-18-akhil.goyal@nxp.com",
    "date": "2019-09-02T12:17:31",
    "name": "[17/20] crypto/dpaa2_sec: Support snow3g cipher/integrity",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a3b75ec6a5618a1678b045c63235b2c2e8e180c8",
    "submitter": {
        "id": 517,
        "url": "http://patches.dpdk.org/api/people/517/?format=api",
        "name": "Akhil Goyal",
        "email": "akhil.goyal@nxp.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/20190902121734.926-18-akhil.goyal@nxp.com/mbox/",
    "series": [
        {
            "id": 6199,
            "url": "http://patches.dpdk.org/api/series/6199/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=6199",
            "date": "2019-09-02T12:17:14",
            "name": "crypto/dpaaX_sec: Support Wireless algos",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/6199/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/58397/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/58397/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 [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 130BD1E9C5;\n\tMon,  2 Sep 2019 14:32:55 +0200 (CEST)",
            "from inva021.nxp.com (inva021.nxp.com [92.121.34.21])\n\tby dpdk.org (Postfix) with ESMTP id 1939C1D448\n\tfor <dev@dpdk.org>; Mon,  2 Sep 2019 14:32:11 +0200 (CEST)",
            "from inva021.nxp.com (localhost [127.0.0.1])\n\tby inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id EDDB12006CB;\n\tMon,  2 Sep 2019 14:32:10 +0200 (CEST)",
            "from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com\n\t[165.114.16.14])\n\tby inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id E69B72006C8;\n\tMon,  2 Sep 2019 14:32:08 +0200 (CEST)",
            "from GDB1.ap.freescale.net (GDB1.ap.freescale.net [10.232.132.179])\n\tby invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id 9C450402F0;\n\tMon,  2 Sep 2019 20:32:06 +0800 (SGT)"
        ],
        "From": "Akhil Goyal <akhil.goyal@nxp.com>",
        "To": "dev@dpdk.org",
        "Cc": "hemant.agrawal@nxp.com,\n\tvakul.garg@nxp.com",
        "Date": "Mon,  2 Sep 2019 17:47:31 +0530",
        "Message-Id": "<20190902121734.926-18-akhil.goyal@nxp.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20190902121734.926-1-akhil.goyal@nxp.com>",
        "References": "<20190902121734.926-1-akhil.goyal@nxp.com>",
        "X-Virus-Scanned": "ClamAV using ClamSMTP",
        "Subject": "[dpdk-dev] [PATCH 17/20] crypto/dpaa2_sec: Support snow3g\n\tcipher/integrity",
        "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\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Hemant Agrawal <hemant.agrawal@nxp.com>\n\nAdding basic framework to use snow3g f8 and f9 based\nciphering or integrity with direct crypto apis.\nThis patch does not support any combo usages yet.\n\nSigned-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>\nAcked-by: Akhil Goyal <akhil.goyal@nxp.com>\n---\n drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c | 236 ++++++++++++++------\n drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h   |  46 +++-\n drivers/crypto/dpaa2_sec/hw/desc/algo.h     |  30 +++\n 3 files changed, 244 insertions(+), 68 deletions(-)",
    "diff": "diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\nindex c9029e989..3dd9112a7 100644\n--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\n+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\n@@ -957,11 +957,26 @@ build_auth_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n \tstruct qbman_fle *fle, *sge;\n \tstruct sec_flow_context *flc;\n \tstruct ctxt_priv *priv = sess->ctxt;\n+\tint data_len, data_offset;\n \tuint8_t *old_digest;\n \tint retval;\n \n \tPMD_INIT_FUNC_TRACE();\n \n+\tdata_len = sym_op->auth.data.length;\n+\tdata_offset = sym_op->auth.data.offset;\n+\n+\tif (sess->auth_alg == RTE_CRYPTO_AUTH_SNOW3G_UIA2 ||\n+\t    sess->auth_alg == RTE_CRYPTO_AUTH_ZUC_EIA3) {\n+\t\tif ((data_len & 7) || (data_offset & 7)) {\n+\t\t\tDPAA2_SEC_ERR(\"AUTH: len/offset must be full bytes\");\n+\t\t\treturn -1;\n+\t\t}\n+\n+\t\tdata_len = data_len >> 3;\n+\t\tdata_offset = data_offset >> 3;\n+\t}\n+\n \tretval = rte_mempool_get(priv->fle_pool, (void **)(&fle));\n \tif (retval) {\n \t\tDPAA2_SEC_ERR(\"AUTH Memory alloc failed for SGE\");\n@@ -977,64 +992,72 @@ build_auth_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n \tDPAA2_SET_FLE_ADDR(fle, (size_t)op);\n \tDPAA2_FLE_SAVE_CTXT(fle, (ptrdiff_t)priv);\n \tfle = fle + 1;\n+\tsge = fle + 2;\n \n \tif (likely(bpid < MAX_BPID)) {\n \t\tDPAA2_SET_FD_BPID(fd, bpid);\n \t\tDPAA2_SET_FLE_BPID(fle, bpid);\n \t\tDPAA2_SET_FLE_BPID(fle + 1, bpid);\n+\t\tDPAA2_SET_FLE_BPID(sge, bpid);\n+\t\tDPAA2_SET_FLE_BPID(sge + 1, bpid);\n \t} else {\n \t\tDPAA2_SET_FD_IVP(fd);\n \t\tDPAA2_SET_FLE_IVP(fle);\n \t\tDPAA2_SET_FLE_IVP((fle + 1));\n+\t\tDPAA2_SET_FLE_IVP(sge);\n+\t\tDPAA2_SET_FLE_IVP((sge + 1));\n \t}\n+\n \tflc = &priv->flc_desc[DESC_INITFINAL].flc;\n \tDPAA2_SET_FD_FLC(fd, DPAA2_VADDR_TO_IOVA(flc));\n+\tDPAA2_SET_FD_ADDR(fd, DPAA2_VADDR_TO_IOVA(fle));\n+\tDPAA2_SET_FD_COMPOUND_FMT(fd);\n \n \tDPAA2_SET_FLE_ADDR(fle, DPAA2_VADDR_TO_IOVA(sym_op->auth.digest.data));\n \tfle->length = sess->digest_length;\n-\n-\tDPAA2_SET_FD_ADDR(fd, DPAA2_VADDR_TO_IOVA(fle));\n-\tDPAA2_SET_FD_COMPOUND_FMT(fd);\n \tfle++;\n \n-\tif (sess->dir == DIR_ENC) {\n-\t\tDPAA2_SET_FLE_ADDR(fle,\n-\t\t\t\t   DPAA2_MBUF_VADDR_TO_IOVA(sym_op->m_src));\n-\t\tDPAA2_SET_FLE_OFFSET(fle, sym_op->auth.data.offset +\n-\t\t\t\t     sym_op->m_src->data_off);\n-\t\tDPAA2_SET_FD_LEN(fd, sym_op->auth.data.length);\n-\t\tfle->length = sym_op->auth.data.length;\n-\t} else {\n-\t\tsge = fle + 2;\n-\t\tDPAA2_SET_FLE_SG_EXT(fle);\n-\t\tDPAA2_SET_FLE_ADDR(fle, DPAA2_VADDR_TO_IOVA(sge));\n+\t/* Setting input FLE */\n+\tDPAA2_SET_FLE_ADDR(fle, DPAA2_VADDR_TO_IOVA(sge));\n+\tDPAA2_SET_FLE_SG_EXT(fle);\n+\tfle->length = data_len;\n \n-\t\tif (likely(bpid < MAX_BPID)) {\n-\t\t\tDPAA2_SET_FLE_BPID(sge, bpid);\n-\t\t\tDPAA2_SET_FLE_BPID(sge + 1, bpid);\n+\tif (sess->iv.length) {\n+\t\tuint8_t *iv_ptr;\n+\n+\t\tiv_ptr = rte_crypto_op_ctod_offset(op, uint8_t *,\n+\t\t\t\t\t\t   sess->iv.offset);\n+\n+\t\tif (sess->auth_alg == RTE_CRYPTO_AUTH_SNOW3G_UIA2) {\n+\t\t\tiv_ptr = conv_to_snow_f9_iv(iv_ptr);\n+\t\t\tsge->length = 12;\n \t\t} else {\n-\t\t\tDPAA2_SET_FLE_IVP(sge);\n-\t\t\tDPAA2_SET_FLE_IVP((sge + 1));\n+\t\t\tsge->length = sess->iv.length;\n \t\t}\n-\t\tDPAA2_SET_FLE_ADDR(sge,\n-\t\t\t\t   DPAA2_MBUF_VADDR_TO_IOVA(sym_op->m_src));\n-\t\tDPAA2_SET_FLE_OFFSET(sge, sym_op->auth.data.offset +\n-\t\t\t\t     sym_op->m_src->data_off);\n \n-\t\tDPAA2_SET_FD_LEN(fd, sym_op->auth.data.length +\n-\t\t\t\t sess->digest_length);\n-\t\tsge->length = sym_op->auth.data.length;\n+\t\tDPAA2_SET_FLE_ADDR(sge, DPAA2_VADDR_TO_IOVA(iv_ptr));\n+\t\tfle->length = fle->length + sge->length;\n+\t\tsge++;\n+\t}\n+\n+\t/* Setting data to authenticate */\n+\tDPAA2_SET_FLE_ADDR(sge, DPAA2_MBUF_VADDR_TO_IOVA(sym_op->m_src));\n+\tDPAA2_SET_FLE_OFFSET(sge, data_offset + sym_op->m_src->data_off);\n+\tsge->length = data_len;\n+\n+\tif (sess->dir == DIR_DEC) {\n \t\tsge++;\n \t\told_digest = (uint8_t *)(sge + 1);\n \t\trte_memcpy(old_digest, sym_op->auth.digest.data,\n \t\t\t   sess->digest_length);\n \t\tDPAA2_SET_FLE_ADDR(sge, DPAA2_VADDR_TO_IOVA(old_digest));\n \t\tsge->length = sess->digest_length;\n-\t\tfle->length = sym_op->auth.data.length +\n-\t\t\t\tsess->digest_length;\n-\t\tDPAA2_SET_FLE_FIN(sge);\n+\t\tfle->length = fle->length + sess->digest_length;\n \t}\n+\n+\tDPAA2_SET_FLE_FIN(sge);\n \tDPAA2_SET_FLE_FIN(fle);\n+\tDPAA2_SET_FD_LEN(fd, fle->length);\n \n \treturn 0;\n }\n@@ -1045,6 +1068,7 @@ build_cipher_sg_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n {\n \tstruct rte_crypto_sym_op *sym_op = op->sym;\n \tstruct qbman_fle *ip_fle, *op_fle, *sge, *fle;\n+\tint data_len, data_offset;\n \tstruct sec_flow_context *flc;\n \tstruct ctxt_priv *priv = sess->ctxt;\n \tstruct rte_mbuf *mbuf;\n@@ -1053,6 +1077,20 @@ build_cipher_sg_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n \n \tPMD_INIT_FUNC_TRACE();\n \n+\tdata_len = sym_op->cipher.data.length;\n+\tdata_offset = sym_op->cipher.data.offset;\n+\n+\tif (sess->cipher_alg == RTE_CRYPTO_CIPHER_SNOW3G_UEA2 ||\n+\t\tsess->cipher_alg == RTE_CRYPTO_CIPHER_ZUC_EEA3) {\n+\t\tif ((data_len & 7) || (data_offset & 7)) {\n+\t\t\tDPAA2_SEC_ERR(\"CIPHER: len/offset must be full bytes\");\n+\t\t\treturn -1;\n+\t\t}\n+\n+\t\tdata_len = data_len >> 3;\n+\t\tdata_offset = data_offset >> 3;\n+\t}\n+\n \tif (sym_op->m_dst)\n \t\tmbuf = sym_op->m_dst;\n \telse\n@@ -1078,20 +1116,20 @@ build_cipher_sg_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n \tDPAA2_SEC_DP_DEBUG(\n \t\t\"CIPHER SG: cipher_off: 0x%x/length %d, ivlen=%d\"\n \t\t\" data_off: 0x%x\\n\",\n-\t\tsym_op->cipher.data.offset,\n-\t\tsym_op->cipher.data.length,\n+\t\tdata_offset,\n+\t\tdata_len,\n \t\tsess->iv.length,\n \t\tsym_op->m_src->data_off);\n \n \t/* o/p fle */\n \tDPAA2_SET_FLE_ADDR(op_fle, DPAA2_VADDR_TO_IOVA(sge));\n-\top_fle->length = sym_op->cipher.data.length;\n+\top_fle->length = data_len;\n \tDPAA2_SET_FLE_SG_EXT(op_fle);\n \n \t/* o/p 1st seg */\n \tDPAA2_SET_FLE_ADDR(sge, DPAA2_MBUF_VADDR_TO_IOVA(mbuf));\n-\tDPAA2_SET_FLE_OFFSET(sge, sym_op->cipher.data.offset + mbuf->data_off);\n-\tsge->length = mbuf->data_len - sym_op->cipher.data.offset;\n+\tDPAA2_SET_FLE_OFFSET(sge, data_offset + mbuf->data_off);\n+\tsge->length = mbuf->data_len - data_offset;\n \n \tmbuf = mbuf->next;\n \t/* o/p segs */\n@@ -1113,7 +1151,7 @@ build_cipher_sg_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n \tmbuf = sym_op->m_src;\n \tsge++;\n \tDPAA2_SET_FLE_ADDR(ip_fle, DPAA2_VADDR_TO_IOVA(sge));\n-\tip_fle->length = sess->iv.length + sym_op->cipher.data.length;\n+\tip_fle->length = sess->iv.length + data_len;\n \tDPAA2_SET_FLE_SG_EXT(ip_fle);\n \n \t/* i/p IV */\n@@ -1125,9 +1163,8 @@ build_cipher_sg_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n \n \t/* i/p 1st seg */\n \tDPAA2_SET_FLE_ADDR(sge, DPAA2_MBUF_VADDR_TO_IOVA(mbuf));\n-\tDPAA2_SET_FLE_OFFSET(sge, sym_op->cipher.data.offset +\n-\t\t\t     mbuf->data_off);\n-\tsge->length = mbuf->data_len - sym_op->cipher.data.offset;\n+\tDPAA2_SET_FLE_OFFSET(sge, data_offset + mbuf->data_off);\n+\tsge->length = mbuf->data_len - data_offset;\n \n \tmbuf = mbuf->next;\n \t/* i/p segs */\n@@ -1164,7 +1201,7 @@ build_cipher_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n {\n \tstruct rte_crypto_sym_op *sym_op = op->sym;\n \tstruct qbman_fle *fle, *sge;\n-\tint retval;\n+\tint retval, data_len, data_offset;\n \tstruct sec_flow_context *flc;\n \tstruct ctxt_priv *priv = sess->ctxt;\n \tuint8_t *iv_ptr = rte_crypto_op_ctod_offset(op, uint8_t *,\n@@ -1173,6 +1210,20 @@ build_cipher_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n \n \tPMD_INIT_FUNC_TRACE();\n \n+\tdata_len = sym_op->cipher.data.length;\n+\tdata_offset = sym_op->cipher.data.offset;\n+\n+\tif (sess->cipher_alg == RTE_CRYPTO_CIPHER_SNOW3G_UEA2 ||\n+\t\tsess->cipher_alg == RTE_CRYPTO_CIPHER_ZUC_EEA3) {\n+\t\tif ((data_len & 7) || (data_offset & 7)) {\n+\t\t\tDPAA2_SEC_ERR(\"CIPHER: len/offset must be full bytes\");\n+\t\t\treturn -1;\n+\t\t}\n+\n+\t\tdata_len = data_len >> 3;\n+\t\tdata_offset = data_offset >> 3;\n+\t}\n+\n \tif (sym_op->m_dst)\n \t\tdst = sym_op->m_dst;\n \telse\n@@ -1211,24 +1262,22 @@ build_cipher_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n \n \tflc = &priv->flc_desc[0].flc;\n \tDPAA2_SET_FD_ADDR(fd, DPAA2_VADDR_TO_IOVA(fle));\n-\tDPAA2_SET_FD_LEN(fd, sym_op->cipher.data.length +\n-\t\t\t sess->iv.length);\n+\tDPAA2_SET_FD_LEN(fd, data_len + sess->iv.length);\n \tDPAA2_SET_FD_COMPOUND_FMT(fd);\n \tDPAA2_SET_FD_FLC(fd, DPAA2_VADDR_TO_IOVA(flc));\n \n \tDPAA2_SEC_DP_DEBUG(\n \t\t\"CIPHER: cipher_off: 0x%x/length %d, ivlen=%d,\"\n \t\t\" data_off: 0x%x\\n\",\n-\t\tsym_op->cipher.data.offset,\n-\t\tsym_op->cipher.data.length,\n+\t\tdata_offset,\n+\t\tdata_len,\n \t\tsess->iv.length,\n \t\tsym_op->m_src->data_off);\n \n \tDPAA2_SET_FLE_ADDR(fle, DPAA2_MBUF_VADDR_TO_IOVA(dst));\n-\tDPAA2_SET_FLE_OFFSET(fle, sym_op->cipher.data.offset +\n-\t\t\t     dst->data_off);\n+\tDPAA2_SET_FLE_OFFSET(fle, data_offset + dst->data_off);\n \n-\tfle->length = sym_op->cipher.data.length + sess->iv.length;\n+\tfle->length = data_len + sess->iv.length;\n \n \tDPAA2_SEC_DP_DEBUG(\n \t\t\"CIPHER: 1 - flc = %p, fle = %p FLEaddr = %x-%x, length %d\\n\",\n@@ -1238,7 +1287,7 @@ build_cipher_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n \tfle++;\n \n \tDPAA2_SET_FLE_ADDR(fle, DPAA2_VADDR_TO_IOVA(sge));\n-\tfle->length = sym_op->cipher.data.length + sess->iv.length;\n+\tfle->length = data_len + sess->iv.length;\n \n \tDPAA2_SET_FLE_SG_EXT(fle);\n \n@@ -1247,10 +1296,9 @@ build_cipher_fd(dpaa2_sec_session *sess, struct rte_crypto_op *op,\n \n \tsge++;\n \tDPAA2_SET_FLE_ADDR(sge, DPAA2_MBUF_VADDR_TO_IOVA(sym_op->m_src));\n-\tDPAA2_SET_FLE_OFFSET(sge, sym_op->cipher.data.offset +\n-\t\t\t     sym_op->m_src->data_off);\n+\tDPAA2_SET_FLE_OFFSET(sge, data_offset + sym_op->m_src->data_off);\n \n-\tsge->length = sym_op->cipher.data.length;\n+\tsge->length = data_len;\n \tDPAA2_SET_FLE_FIN(sge);\n \tDPAA2_SET_FLE_FIN(fle);\n \n@@ -1761,32 +1809,60 @@ dpaa2_sec_cipher_init(struct rte_cryptodev *dev,\n \t/* Set IV parameters */\n \tsession->iv.offset = xform->cipher.iv.offset;\n \tsession->iv.length = xform->cipher.iv.length;\n+\tsession->dir = (xform->cipher.op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) ?\n+\t\t\t\tDIR_ENC : DIR_DEC;\n \n \tswitch (xform->cipher.algo) {\n \tcase RTE_CRYPTO_CIPHER_AES_CBC:\n \t\tcipherdata.algtype = OP_ALG_ALGSEL_AES;\n \t\tcipherdata.algmode = OP_ALG_AAI_CBC;\n \t\tsession->cipher_alg = RTE_CRYPTO_CIPHER_AES_CBC;\n+\t\tbufsize = cnstr_shdsc_blkcipher(priv->flc_desc[0].desc, 1, 0,\n+\t\t\t\t\t\tSHR_NEVER, &cipherdata, NULL,\n+\t\t\t\t\t\tsession->iv.length,\n+\t\t\t\t\t\tsession->dir);\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_3DES_CBC:\n \t\tcipherdata.algtype = OP_ALG_ALGSEL_3DES;\n \t\tcipherdata.algmode = OP_ALG_AAI_CBC;\n \t\tsession->cipher_alg = RTE_CRYPTO_CIPHER_3DES_CBC;\n+\t\tbufsize = cnstr_shdsc_blkcipher(priv->flc_desc[0].desc, 1, 0,\n+\t\t\t\t\t\tSHR_NEVER, &cipherdata, NULL,\n+\t\t\t\t\t\tsession->iv.length,\n+\t\t\t\t\t\tsession->dir);\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_AES_CTR:\n \t\tcipherdata.algtype = OP_ALG_ALGSEL_AES;\n \t\tcipherdata.algmode = OP_ALG_AAI_CTR;\n \t\tsession->cipher_alg = RTE_CRYPTO_CIPHER_AES_CTR;\n+\t\tbufsize = cnstr_shdsc_blkcipher(priv->flc_desc[0].desc, 1, 0,\n+\t\t\t\t\t\tSHR_NEVER, &cipherdata, NULL,\n+\t\t\t\t\t\tsession->iv.length,\n+\t\t\t\t\t\tsession->dir);\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_3DES_CTR:\n+\t\tcipherdata.algtype = OP_ALG_ALGSEL_3DES;\n+\t\tcipherdata.algmode = OP_ALG_AAI_CTR;\n+\t\tsession->cipher_alg = RTE_CRYPTO_CIPHER_3DES_CTR;\n+\t\tbufsize = cnstr_shdsc_blkcipher(priv->flc_desc[0].desc, 1, 0,\n+\t\t\t\t\t\tSHR_NEVER, &cipherdata, NULL,\n+\t\t\t\t\t\tsession->iv.length,\n+\t\t\t\t\t\tsession->dir);\n+\t\tbreak;\n+\tcase RTE_CRYPTO_CIPHER_SNOW3G_UEA2:\n+\t\tcipherdata.algtype = OP_ALG_ALGSEL_SNOW_F8;\n+\t\tsession->cipher_alg = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;\n+\t\tbufsize = cnstr_shdsc_snow_f8(priv->flc_desc[0].desc, 1, 0,\n+\t\t\t\t\t      &cipherdata,\n+\t\t\t\t\t      session->dir);\n+\t\tbreak;\n+\tcase RTE_CRYPTO_CIPHER_KASUMI_F8:\n+\tcase RTE_CRYPTO_CIPHER_ZUC_EEA3:\n+\tcase RTE_CRYPTO_CIPHER_AES_F8:\n \tcase RTE_CRYPTO_CIPHER_AES_ECB:\n \tcase RTE_CRYPTO_CIPHER_3DES_ECB:\n \tcase RTE_CRYPTO_CIPHER_AES_XTS:\n-\tcase RTE_CRYPTO_CIPHER_AES_F8:\n \tcase RTE_CRYPTO_CIPHER_ARC4:\n-\tcase RTE_CRYPTO_CIPHER_KASUMI_F8:\n-\tcase RTE_CRYPTO_CIPHER_SNOW3G_UEA2:\n-\tcase RTE_CRYPTO_CIPHER_ZUC_EEA3:\n \tcase RTE_CRYPTO_CIPHER_NULL:\n \t\tDPAA2_SEC_ERR(\"Crypto: Unsupported Cipher alg %u\",\n \t\t\txform->cipher.algo);\n@@ -1796,12 +1872,7 @@ dpaa2_sec_cipher_init(struct rte_cryptodev *dev,\n \t\t\txform->cipher.algo);\n \t\tgoto error_out;\n \t}\n-\tsession->dir = (xform->cipher.op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) ?\n-\t\t\t\tDIR_ENC : DIR_DEC;\n \n-\tbufsize = cnstr_shdsc_blkcipher(priv->flc_desc[0].desc, 1, 0, SHR_NEVER,\n-\t\t\t\t\t&cipherdata, NULL, session->iv.length,\n-\t\t\t\t\tsession->dir);\n \tif (bufsize < 0) {\n \t\tDPAA2_SEC_ERR(\"Crypto: Descriptor build failed\");\n \t\tgoto error_out;\n@@ -1864,40 +1935,77 @@ dpaa2_sec_auth_init(struct rte_cryptodev *dev,\n \tauthdata.key_type = RTA_DATA_IMM;\n \n \tsession->digest_length = xform->auth.digest_length;\n+\tsession->dir = (xform->auth.op == RTE_CRYPTO_AUTH_OP_GENERATE) ?\n+\t\t\t\tDIR_ENC : DIR_DEC;\n \n \tswitch (xform->auth.algo) {\n \tcase RTE_CRYPTO_AUTH_SHA1_HMAC:\n \t\tauthdata.algtype = OP_ALG_ALGSEL_SHA1;\n \t\tauthdata.algmode = OP_ALG_AAI_HMAC;\n \t\tsession->auth_alg = RTE_CRYPTO_AUTH_SHA1_HMAC;\n+\t\tbufsize = cnstr_shdsc_hmac(priv->flc_desc[DESC_INITFINAL].desc,\n+\t\t\t\t\t   1, 0, SHR_NEVER, &authdata,\n+\t\t\t\t\t   !session->dir,\n+\t\t\t\t\t   session->digest_length);\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_MD5_HMAC:\n \t\tauthdata.algtype = OP_ALG_ALGSEL_MD5;\n \t\tauthdata.algmode = OP_ALG_AAI_HMAC;\n \t\tsession->auth_alg = RTE_CRYPTO_AUTH_MD5_HMAC;\n+\t\tbufsize = cnstr_shdsc_hmac(priv->flc_desc[DESC_INITFINAL].desc,\n+\t\t\t\t\t   1, 0, SHR_NEVER, &authdata,\n+\t\t\t\t\t   !session->dir,\n+\t\t\t\t\t   session->digest_length);\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA256_HMAC:\n \t\tauthdata.algtype = OP_ALG_ALGSEL_SHA256;\n \t\tauthdata.algmode = OP_ALG_AAI_HMAC;\n \t\tsession->auth_alg = RTE_CRYPTO_AUTH_SHA256_HMAC;\n+\t\tbufsize = cnstr_shdsc_hmac(priv->flc_desc[DESC_INITFINAL].desc,\n+\t\t\t\t\t   1, 0, SHR_NEVER, &authdata,\n+\t\t\t\t\t   !session->dir,\n+\t\t\t\t\t   session->digest_length);\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA384_HMAC:\n \t\tauthdata.algtype = OP_ALG_ALGSEL_SHA384;\n \t\tauthdata.algmode = OP_ALG_AAI_HMAC;\n \t\tsession->auth_alg = RTE_CRYPTO_AUTH_SHA384_HMAC;\n+\t\tbufsize = cnstr_shdsc_hmac(priv->flc_desc[DESC_INITFINAL].desc,\n+\t\t\t\t\t   1, 0, SHR_NEVER, &authdata,\n+\t\t\t\t\t   !session->dir,\n+\t\t\t\t\t   session->digest_length);\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA512_HMAC:\n \t\tauthdata.algtype = OP_ALG_ALGSEL_SHA512;\n \t\tauthdata.algmode = OP_ALG_AAI_HMAC;\n \t\tsession->auth_alg = RTE_CRYPTO_AUTH_SHA512_HMAC;\n+\t\tbufsize = cnstr_shdsc_hmac(priv->flc_desc[DESC_INITFINAL].desc,\n+\t\t\t\t\t   1, 0, SHR_NEVER, &authdata,\n+\t\t\t\t\t   !session->dir,\n+\t\t\t\t\t   session->digest_length);\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA224_HMAC:\n \t\tauthdata.algtype = OP_ALG_ALGSEL_SHA224;\n \t\tauthdata.algmode = OP_ALG_AAI_HMAC;\n \t\tsession->auth_alg = RTE_CRYPTO_AUTH_SHA224_HMAC;\n+\t\tbufsize = cnstr_shdsc_hmac(priv->flc_desc[DESC_INITFINAL].desc,\n+\t\t\t\t\t   1, 0, SHR_NEVER, &authdata,\n+\t\t\t\t\t   !session->dir,\n+\t\t\t\t\t   session->digest_length);\n \t\tbreak;\n-\tcase RTE_CRYPTO_AUTH_AES_XCBC_MAC:\n \tcase RTE_CRYPTO_AUTH_SNOW3G_UIA2:\n+\t\tauthdata.algtype = OP_ALG_ALGSEL_SNOW_F9;\n+\t\tauthdata.algmode = OP_ALG_AAI_F9;\n+\t\tsession->auth_alg = RTE_CRYPTO_AUTH_SNOW3G_UIA2;\n+\t\tsession->iv.offset = xform->auth.iv.offset;\n+\t\tsession->iv.length = xform->auth.iv.length;\n+\t\tbufsize = cnstr_shdsc_snow_f9(priv->flc_desc[DESC_INITFINAL].desc,\n+\t\t\t\t\t      1, 0, &authdata,\n+\t\t\t\t\t      !session->dir,\n+\t\t\t\t\t      session->digest_length);\n+\t\tbreak;\n+\tcase RTE_CRYPTO_AUTH_KASUMI_F9:\n+\tcase RTE_CRYPTO_AUTH_ZUC_EIA3:\n \tcase RTE_CRYPTO_AUTH_NULL:\n \tcase RTE_CRYPTO_AUTH_SHA1:\n \tcase RTE_CRYPTO_AUTH_SHA256:\n@@ -1906,10 +2014,9 @@ dpaa2_sec_auth_init(struct rte_cryptodev *dev,\n \tcase RTE_CRYPTO_AUTH_SHA384:\n \tcase RTE_CRYPTO_AUTH_MD5:\n \tcase RTE_CRYPTO_AUTH_AES_GMAC:\n-\tcase RTE_CRYPTO_AUTH_KASUMI_F9:\n+\tcase RTE_CRYPTO_AUTH_AES_XCBC_MAC:\n \tcase RTE_CRYPTO_AUTH_AES_CMAC:\n \tcase RTE_CRYPTO_AUTH_AES_CBC_MAC:\n-\tcase RTE_CRYPTO_AUTH_ZUC_EIA3:\n \t\tDPAA2_SEC_ERR(\"Crypto: Unsupported auth alg %un\",\n \t\t\t      xform->auth.algo);\n \t\tgoto error_out;\n@@ -1918,12 +2025,7 @@ dpaa2_sec_auth_init(struct rte_cryptodev *dev,\n \t\t\t      xform->auth.algo);\n \t\tgoto error_out;\n \t}\n-\tsession->dir = (xform->auth.op == RTE_CRYPTO_AUTH_OP_GENERATE) ?\n-\t\t\t\tDIR_ENC : DIR_DEC;\n \n-\tbufsize = cnstr_shdsc_hmac(priv->flc_desc[DESC_INITFINAL].desc,\n-\t\t\t\t   1, 0, SHR_NEVER, &authdata, !session->dir,\n-\t\t\t\t   session->digest_length);\n \tif (bufsize < 0) {\n \t\tDPAA2_SEC_ERR(\"Crypto: Invalid buffer length\");\n \t\tgoto error_out;\ndiff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h b/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h\nindex d0933d660..41734b471 100644\n--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h\n+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h\n@@ -408,7 +408,51 @@ static const struct rte_cryptodev_capabilities dpaa2_sec_capabilities[] = {\n \t\t\t}, }\n \t\t}, }\n \t},\n-\n+\t{\t/* SNOW 3G (UIA2) */\n+\t\t.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,\n+\t\t{.sym = {\n+\t\t\t.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,\n+\t\t\t{.auth = {\n+\t\t\t\t.algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,\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.digest_size = {\n+\t\t\t\t\t.min = 4,\n+\t\t\t\t\t.max = 4,\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+\t{\t/* SNOW 3G (UEA2) */\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_SNOW3G_UEA2,\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 \ndiff --git a/drivers/crypto/dpaa2_sec/hw/desc/algo.h b/drivers/crypto/dpaa2_sec/hw/desc/algo.h\nindex 5e8e5e79c..e01b9b4c9 100644\n--- a/drivers/crypto/dpaa2_sec/hw/desc/algo.h\n+++ b/drivers/crypto/dpaa2_sec/hw/desc/algo.h\n@@ -57,6 +57,36 @@ cnstr_shdsc_snow_f8(uint32_t *descbuf, bool ps, bool swap,\n \treturn PROGRAM_FINALIZE(p);\n }\n \n+/**\n+ * conv_to_snow_f9_iv - SNOW/f9 (UIA2) IV 16bit to 12 bit convert\n+ * funtion for 3G.\n+ * @iv: 16 bit original IV data\n+ *\n+ * Return: 12 bit IV data as understood by SEC HW\n+ */\n+\n+static inline uint8_t *conv_to_snow_f9_iv(uint8_t *iv)\n+{\n+\tuint8_t temp = (iv[8] == iv[0]) ? 0 : 4;\n+\n+\tiv[12] = iv[4];\n+\tiv[13] = iv[5];\n+\tiv[14] = iv[6];\n+\tiv[15] = iv[7];\n+\n+\tiv[8] = temp;\n+\tiv[9] = 0x00;\n+\tiv[10] = 0x00;\n+\tiv[11] = 0x00;\n+\n+\tiv[4] = iv[0];\n+\tiv[5] = iv[1];\n+\tiv[6] = iv[2];\n+\tiv[7] = iv[3];\n+\n+\treturn (iv + 4);\n+}\n+\n /**\n  * cnstr_shdsc_snow_f9 - SNOW/f9 (UIA2) as a shared descriptor\n  * @descbuf: pointer to descriptor-under-construction buffer\n",
    "prefixes": [
        "17/20"
    ]
}