get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 46888,
    "url": "http://patches.dpdk.org/api/patches/46888/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20181016103352.2678-4-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": "<20181016103352.2678-4-akhil.goyal@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20181016103352.2678-4-akhil.goyal@nxp.com",
    "date": "2018-10-16T10:39:12",
    "name": "[v5,3/3] crypto/dpaa2_sec: support pdcp offload",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "657a36772b4d926cac4d4ea6ef22c1b25b129eb5",
    "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/20181016103352.2678-4-akhil.goyal@nxp.com/mbox/",
    "series": [
        {
            "id": 1919,
            "url": "http://patches.dpdk.org/api/series/1919/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=1919",
            "date": "2018-10-16T10:38:54",
            "name": "security: support for pdcp",
            "version": 5,
            "mbox": "http://patches.dpdk.org/series/1919/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/46888/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/46888/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 9908B58EC;\n\tTue, 16 Oct 2018 12:39:15 +0200 (CEST)",
            "from EUR04-HE1-obe.outbound.protection.outlook.com\n\t(mail-eopbgr70082.outbound.protection.outlook.com [40.107.7.82])\n\tby dpdk.org (Postfix) with ESMTP id D9A7A548B\n\tfor <dev@dpdk.org>; Tue, 16 Oct 2018 12:39:13 +0200 (CEST)",
            "from VI1PR04MB4893.eurprd04.prod.outlook.com (20.177.49.154) by\n\tVI1PR04MB3231.eurprd04.prod.outlook.com (10.170.227.28) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.1228.31; Tue, 16 Oct 2018 10:39:12 +0000",
            "from VI1PR04MB4893.eurprd04.prod.outlook.com\n\t([fe80::cc19:b6c6:27db:3fec]) by\n\tVI1PR04MB4893.eurprd04.prod.outlook.com\n\t([fe80::cc19:b6c6:27db:3fec%3]) with mapi id 15.20.1228.027;\n\tTue, 16 Oct 2018 10:39:12 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=XONOKgx2DqsFAH5qH9dJ0bVE7MzKNTWDnSyOGQ8hgEI=;\n\tb=E3XzhzMte/XCrp3FillIcsBvgpmJ/J0zwPTWzPKtcrbj6mF3GBzzPRpjAuYCeY/wdjReWUUkd8l2AyH38NfzNefbDDD6rcL0AkLQf8cxB792jrjUCKqKUNoGLgGxc4YrbJCl0WYmL7sXXUQL3F2ZnnIaWpb0+UyT9Pk9LyYzuJM=",
        "From": "Akhil Goyal <akhil.goyal@nxp.com>",
        "To": "\"dev@dpdk.org\" <dev@dpdk.org>",
        "CC": "\"pablo.de.lara.guarch@intel.com\" <pablo.de.lara.guarch@intel.com>,\n\t\"radu.nicolau@intel.com\" <radu.nicolau@intel.com>,\n\t\"jerin.jacob@caviumnetworks.com\" <jerin.jacob@caviumnetworks.com>,\n\t\"narayanaprasad.athreya@caviumnetworks.com\"\n\t<narayanaprasad.athreya@caviumnetworks.com>,\n\t\"Shally.Verma@caviumnetworks.com\" <Shally.Verma@caviumnetworks.com>, \n\t\"Anoob.Joseph@caviumnetworks.com\" <Anoob.Joseph@caviumnetworks.com>, \n\t\"Vidya.Velumuri@caviumnetworks.com\" <Vidya.Velumuri@caviumnetworks.com>, \n\tHemant Agrawal <hemant.agrawal@nxp.com>,\n\tAkhil Goyal <akhil.goyal@nxp.com>",
        "Thread-Topic": "[PATCH v5 3/3] crypto/dpaa2_sec: support pdcp offload",
        "Thread-Index": "AQHUZTx6lO7HDUOT0kqLcL70gdxmOw==",
        "Date": "Tue, 16 Oct 2018 10:39:12 +0000",
        "Message-ID": "<20181016103352.2678-4-akhil.goyal@nxp.com>",
        "References": "<20181015124858.5562-1-akhil.goyal@nxp.com>\n\t<20181016103352.2678-1-akhil.goyal@nxp.com>",
        "In-Reply-To": "<20181016103352.2678-1-akhil.goyal@nxp.com>",
        "Accept-Language": "en-IN, en-US",
        "Content-Language": "en-US",
        "X-MS-Has-Attach": "",
        "X-MS-TNEF-Correlator": "",
        "x-clientproxiedby": "TYAPR01CA0026.jpnprd01.prod.outlook.com\n\t(2603:1096:404:28::14) To VI1PR04MB4893.eurprd04.prod.outlook.com\n\t(2603:10a6:803:56::26)",
        "authentication-results": "spf=none (sender IP is )\n\tsmtp.mailfrom=akhil.goyal@nxp.com; ",
        "x-ms-exchange-messagesentrepresentingtype": "1",
        "x-originating-ip": "[14.143.30.134]",
        "x-ms-publictraffictype": "Email",
        "x-microsoft-exchange-diagnostics": "1; VI1PR04MB3231;\n\t6:549yu5BfDK8KcVKuwOCnegdZIDbcvUrxHlnfr2aF3h4o+CpdnuZhHOf/aNii8DA8yq8KQWnXXtqXJ0ZUOOUTNn69aHGw22AqpCPlpBq+nc8VRigpWVX0/P8iENV/5Z33mSYI9fH83poNXzz1p9eslEzZk+K9lRNv/hAZOjhqqynRz3oRfLLh9XZ42B7sOg10/LN9C1+cI/n98/L28arLHARX+EWOaKyxZ8sWYIN0K6eml5Pp0ezUJac8w8KB4hARPFQgI2h4hML+6qwoaQ7UmC6CFqO3BoWUhP7h1SVaRbbGM8B1VronV+ZTsoTl7Zi3XNVlOcQS3HhWLJjxnKe7owhaAfyHY/OBgrBpc2R+MfTpnwwMzm0s9SR79X88CbZLiQc5+9E/GDLGTxWCgjN8ik0ZaHmP49ZGiuEx2Uv0lsdJ5Uep/4IplAvrchEvRzuQaPMon4Dg2bNAHRyMI1FC0w==;\n\t5:ycmt9+NWD4zn9W7Ha0YPqzJpiY3r32YkyaBLNdhKgxjZy37AND/se5y0LSQA3sm0pNYYXCBZL7/ij58ChQmqsG3/e9gQldHw2ckap3dvPvsO220HZ46vixtISdBHoPWCG7N9EAWoiQYYaMicHVc86zKEtdHzUZJ5tyUc2+gqHvE=;\n\t7:R2QuwP9mNXFxgj8VGUcCxA1EQYd+NnpFEDgRP1zBQPhIMu6b9uia0ldjNejcs7AJcU2bNPvs5oOztPiaqC5oS8N1hG5bDg6Z06ry/brWXXWobJ3VO50I+acj0djyGJ3MEMZlBOaaYOA2ghAuV9UPjIM6GtcGFzdF99cdIpLTpKnPnX6U1s5Wi9EIFU7UcVYPYT0vA/vkx5Hfx4wRnSetui99UDXJpdrlIz86o3FXr2U39IgZCMKcPFxo9MP5jgte",
        "x-ms-office365-filtering-correlation-id": "cf55e0bb-eb2a-476f-ce7d-08d633539c51",
        "x-ms-office365-filtering-ht": "Tenant",
        "x-microsoft-antispam": "BCL:0; PCL:0;\n\tRULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);\n\tSRVR:VI1PR04MB3231; ",
        "x-ms-traffictypediagnostic": "VI1PR04MB3231:",
        "x-microsoft-antispam-prvs": "<VI1PR04MB32310BFCFC6998EDA298E55FE6FE0@VI1PR04MB3231.eurprd04.prod.outlook.com>",
        "x-exchange-antispam-report-test": "UriScan:(269456686620040)(163750095850)(185117386973197); ",
        "x-ms-exchange-senderadcheck": "1",
        "x-exchange-antispam-report-cfa-test": "BCL:0; PCL:0;\n\tRULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(6055026)(149066)(150057)(6041310)(20161123560045)(20161123558120)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);\n\tSRVR:VI1PR04MB3231; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3231; ",
        "x-forefront-prvs": "0827D7ACB9",
        "x-forefront-antispam-report": "SFV:NSPM;\n\tSFS:(10009020)(136003)(39860400002)(396003)(346002)(366004)(376002)(189003)(199004)(1076002)(53936002)(6512007)(14444005)(256004)(6916009)(3846002)(86362001)(44832011)(97736004)(5640700003)(476003)(68736007)(6436002)(4744004)(55236004)(66066001)(6116002)(76176011)(2900100001)(36756003)(6506007)(6486002)(386003)(71200400001)(71190400001)(105586002)(2351001)(5250100002)(106356001)(99286004)(102836004)(8936002)(1730700003)(8676002)(2906002)(305945005)(478600001)(25786009)(81166006)(446003)(4326008)(81156014)(7736002)(316002)(54906003)(14454004)(2501003)(2616005)(486006)(186003)(11346002)(52116002)(26005)(5660300001);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3231;\n\tH:VI1PR04MB4893.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en;\n\tPTR:InfoNoRecords; MX:1; A:1; ",
        "received-spf": "None (protection.outlook.com: nxp.com does not designate\n\tpermitted sender hosts)",
        "x-microsoft-antispam-message-info": "I7da8VP9z5aIh5koVKminZCUBEIDh0zZTq8fcJEQvFo4zEX2u8IAStlAgP9538XJBu+zL3P6e+xXtJmeJCBXd/zja4vuZVLTwxbA8z75FF/YkuFwrLGXbeMUxANAbdUM2Xq8YGM7EjJeChENPakr3rP3fMCizWENRVf9tvZk69SdLTQ1TzW8Ta45lVJqdOYUd5DwQrpbzkPeP+F/ha9DythFBuxIYuhsIc/dRz9p4RSPI6gTpHbKk40Pfta7cjYp5e0cWvuzAyoW4vgYOaqLSCjbvVwyQ3a8oT5IvwO+7gQnlmHLWoKZOP2Dv86ZU5v9QJBq13hHF5sigsokGcWBPXKW5eAk2NZZmFT04SLa8hc=",
        "spamdiagnosticoutput": "1:99",
        "spamdiagnosticmetadata": "NSPM",
        "Content-Type": "text/plain; charset=\"iso-8859-1\"",
        "Content-Transfer-Encoding": "quoted-printable",
        "MIME-Version": "1.0",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "cf55e0bb-eb2a-476f-ce7d-08d633539c51",
        "X-MS-Exchange-CrossTenant-originalarrivaltime": "16 Oct 2018 10:39:12.1786\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-fromentityheader": "Hosted",
        "X-MS-Exchange-CrossTenant-id": "686ea1d3-bc2b-4c6f-a92c-d99c5c301635",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "VI1PR04MB3231",
        "Subject": "[dpdk-dev] [PATCH v5 3/3] crypto/dpaa2_sec: support pdcp offload",
        "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: Akhil Goyal <akhil.goyal@nxp.com>\n\nPDCP session configuration for lookaside protocol offload\nand data path is added.\n\nSigned-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>\nSigned-off-by: Akhil Goyal <akhil.goyal@nxp.com>\n---\n drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c | 257 ++++++++++++++++++++\n drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h   | 208 +++++++++++++++-\n 2 files changed, 457 insertions(+), 8 deletions(-)",
    "diff": "diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\nindex 0336d5f4b..fe769a932 100644\n--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\n+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c\n@@ -35,6 +35,7 @@ typedef uint64_t\tdma_addr_t;\n \n /* RTA header files */\n #include <hw/desc/ipsec.h>\n+#include <hw/desc/pdcp.h>\n #include <hw/desc/algo.h>\n \n /* Minimum job descriptor consists of a oneword job descriptor HEADER and\n@@ -74,6 +75,9 @@ build_proto_compound_fd(dpaa2_sec_session *sess,\n \tstruct rte_mbuf *dst_mbuf = sym_op->m_dst;\n \tint retval;\n \n+\tif (!dst_mbuf)\n+\t\tdst_mbuf = src_mbuf;\n+\n \t/* Save the shared descriptor */\n \tflc = &priv->flc_desc[0].flc;\n \n@@ -118,6 +122,15 @@ build_proto_compound_fd(dpaa2_sec_session *sess,\n \tDPAA2_SET_FD_LEN(fd, ip_fle->length);\n \tDPAA2_SET_FLE_FIN(ip_fle);\n \n+#ifdef ENABLE_HFN_OVERRIDE\n+\tif (sess->ctxt_type == DPAA2_SEC_PDCP && sess->pdcp.hfn_ovd) {\n+\t\t/*enable HFN override override */\n+\t\tDPAA2_SET_FLE_INTERNAL_JD(ip_fle, sess->pdcp.hfn_ovd);\n+\t\tDPAA2_SET_FLE_INTERNAL_JD(op_fle, sess->pdcp.hfn_ovd);\n+\t\tDPAA2_SET_FD_INTERNAL_JD(fd, sess->pdcp.hfn_ovd);\n+\t}\n+#endif\n+\n \treturn 0;\n \n }\n@@ -1188,6 +1201,9 @@ build_sec_fd(struct rte_crypto_op *op,\n \t\tcase DPAA2_SEC_IPSEC:\n \t\t\tret = build_proto_fd(sess, op, fd, bpid);\n \t\t\tbreak;\n+\t\tcase DPAA2_SEC_PDCP:\n+\t\t\tret = build_proto_compound_fd(sess, op, fd, bpid);\n+\t\t\tbreak;\n \t\tcase DPAA2_SEC_HASH_CIPHER:\n \t\tdefault:\n \t\t\tDPAA2_SEC_ERR(\"error: Unsupported session\");\n@@ -2551,6 +2567,243 @@ dpaa2_sec_set_ipsec_session(struct rte_cryptodev *dev,\n \treturn ret;\n }\n \n+static int\n+dpaa2_sec_set_pdcp_session(struct rte_cryptodev *dev,\n+\t\t\t   struct rte_security_session_conf *conf,\n+\t\t\t   void *sess)\n+{\n+\tstruct rte_security_pdcp_xform *pdcp_xform = &conf->pdcp;\n+\tstruct rte_crypto_sym_xform *xform = conf->crypto_xform;\n+\tstruct rte_crypto_auth_xform *auth_xform = NULL;\n+\tstruct rte_crypto_cipher_xform *cipher_xform;\n+\tdpaa2_sec_session *session = (dpaa2_sec_session *)sess;\n+\tstruct ctxt_priv *priv;\n+\tstruct dpaa2_sec_dev_private *dev_priv = dev->data->dev_private;\n+\tstruct alginfo authdata, cipherdata;\n+\tint bufsize = -1;\n+\tstruct sec_flow_context *flc;\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\tint swap = true;\n+#else\n+\tint swap = false;\n+#endif\n+\n+\tPMD_INIT_FUNC_TRACE();\n+\n+\tmemset(session, 0, sizeof(dpaa2_sec_session));\n+\n+\tpriv = (struct ctxt_priv *)rte_zmalloc(NULL,\n+\t\t\t\tsizeof(struct ctxt_priv) +\n+\t\t\t\tsizeof(struct sec_flc_desc),\n+\t\t\t\tRTE_CACHE_LINE_SIZE);\n+\n+\tif (priv == NULL) {\n+\t\tDPAA2_SEC_ERR(\"No memory for priv CTXT\");\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tpriv->fle_pool = dev_priv->fle_pool;\n+\tflc = &priv->flc_desc[0].flc;\n+\n+\t/* find xfrm types */\n+\tif (xform->type == RTE_CRYPTO_SYM_XFORM_CIPHER && xform->next == NULL) {\n+\t\tcipher_xform = &xform->cipher;\n+\t} else if (xform->type == RTE_CRYPTO_SYM_XFORM_CIPHER &&\n+\t\t   xform->next->type == RTE_CRYPTO_SYM_XFORM_AUTH) {\n+\t\tsession->ext_params.aead_ctxt.auth_cipher_text = true;\n+\t\tcipher_xform = &xform->cipher;\n+\t\tauth_xform = &xform->next->auth;\n+\t} else if (xform->type == RTE_CRYPTO_SYM_XFORM_AUTH &&\n+\t\t   xform->next->type == RTE_CRYPTO_SYM_XFORM_CIPHER) {\n+\t\tsession->ext_params.aead_ctxt.auth_cipher_text = false;\n+\t\tcipher_xform = &xform->next->cipher;\n+\t\tauth_xform = &xform->auth;\n+\t} else {\n+\t\tDPAA2_SEC_ERR(\"Invalid crypto type\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tsession->ctxt_type = DPAA2_SEC_PDCP;\n+\tif (cipher_xform) {\n+\t\tsession->cipher_key.data = rte_zmalloc(NULL,\n+\t\t\t\t\t       cipher_xform->key.length,\n+\t\t\t\t\t       RTE_CACHE_LINE_SIZE);\n+\t\tif (session->cipher_key.data == NULL &&\n+\t\t\t\tcipher_xform->key.length > 0) {\n+\t\t\tDPAA2_SEC_ERR(\"No Memory for cipher key\");\n+\t\t\trte_free(priv);\n+\t\t\treturn -ENOMEM;\n+\t\t}\n+\t\tsession->cipher_key.length = cipher_xform->key.length;\n+\t\tmemcpy(session->cipher_key.data, cipher_xform->key.data,\n+\t\t\tcipher_xform->key.length);\n+\t\tsession->dir = (cipher_xform->op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) ?\n+\t\t\t\t\tDIR_ENC : DIR_DEC;\n+\t\tsession->cipher_alg = cipher_xform->algo;\n+\t} else {\n+\t\tsession->cipher_key.data = NULL;\n+\t\tsession->cipher_key.length = 0;\n+\t\tsession->cipher_alg = RTE_CRYPTO_CIPHER_NULL;\n+\t\tsession->dir = DIR_ENC;\n+\t}\n+\n+\tsession->pdcp.domain = pdcp_xform->domain;\n+\tsession->pdcp.bearer = pdcp_xform->bearer;\n+\tsession->pdcp.pkt_dir = pdcp_xform->pkt_dir;\n+\tsession->pdcp.sn_size = pdcp_xform->sn_size;\n+#ifdef ENABLE_HFN_OVERRIDE\n+\tsession->pdcp.hfn_ovd = pdcp_xform->hfn_ovd;\n+#endif\n+\tsession->pdcp.hfn = pdcp_xform->hfn;\n+\tsession->pdcp.hfn_threshold = pdcp_xform->hfn_threshold;\n+\n+\tcipherdata.key = (size_t)session->cipher_key.data;\n+\tcipherdata.keylen = session->cipher_key.length;\n+\tcipherdata.key_enc_flags = 0;\n+\tcipherdata.key_type = RTA_DATA_IMM;\n+\n+\tswitch (session->cipher_alg) {\n+\tcase RTE_CRYPTO_CIPHER_SNOW3G_UEA2:\n+\t\tcipherdata.algtype = PDCP_CIPHER_TYPE_SNOW;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_CIPHER_ZUC_EEA3:\n+\t\tcipherdata.algtype = PDCP_CIPHER_TYPE_ZUC;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_CIPHER_AES_CTR:\n+\t\tcipherdata.algtype = PDCP_CIPHER_TYPE_AES;\n+\t\tbreak;\n+\tcase RTE_CRYPTO_CIPHER_NULL:\n+\t\tcipherdata.algtype = PDCP_CIPHER_TYPE_NULL;\n+\t\tbreak;\n+\tdefault:\n+\t\tDPAA2_SEC_ERR(\"Crypto: Undefined Cipher specified %u\",\n+\t\t\t      session->cipher_alg);\n+\t\tgoto out;\n+\t}\n+\n+\t/* Auth is only applicable for control mode operation. */\n+\tif (pdcp_xform->domain == RTE_SECURITY_PDCP_MODE_CONTROL) {\n+\t\tif (pdcp_xform->sn_size != RTE_SECURITY_PDCP_SN_SIZE_5) {\n+\t\t\tDPAA2_SEC_ERR(\n+\t\t\t\t\"PDCP Seq Num size should be 5 bits for cmode\");\n+\t\t\tgoto out;\n+\t\t}\n+\t\tif (auth_xform) {\n+\t\t\tsession->auth_key.data = rte_zmalloc(NULL,\n+\t\t\t\t\t\t\tauth_xform->key.length,\n+\t\t\t\t\t\t\tRTE_CACHE_LINE_SIZE);\n+\t\t\tif (session->auth_key.data == NULL &&\n+\t\t\t\t\tauth_xform->key.length > 0) {\n+\t\t\t\tDPAA2_SEC_ERR(\"No Memory for auth key\");\n+\t\t\t\trte_free(session->cipher_key.data);\n+\t\t\t\trte_free(priv);\n+\t\t\t\treturn -ENOMEM;\n+\t\t\t}\n+\t\t\tsession->auth_key.length = auth_xform->key.length;\n+\t\t\tmemcpy(session->auth_key.data, auth_xform->key.data,\n+\t\t\t\t\tauth_xform->key.length);\n+\t\t\tsession->auth_alg = auth_xform->algo;\n+\t\t} else {\n+\t\t\tsession->auth_key.data = NULL;\n+\t\t\tsession->auth_key.length = 0;\n+\t\t\tsession->auth_alg = RTE_CRYPTO_AUTH_NULL;\n+\t\t}\n+\t\tauthdata.key = (size_t)session->auth_key.data;\n+\t\tauthdata.keylen = session->auth_key.length;\n+\t\tauthdata.key_enc_flags = 0;\n+\t\tauthdata.key_type = RTA_DATA_IMM;\n+\n+\t\tswitch (session->auth_alg) {\n+\t\tcase RTE_CRYPTO_AUTH_SNOW3G_UIA2:\n+\t\t\tauthdata.algtype = PDCP_AUTH_TYPE_SNOW;\n+\t\t\tbreak;\n+\t\tcase RTE_CRYPTO_AUTH_ZUC_EIA3:\n+\t\t\tauthdata.algtype = PDCP_AUTH_TYPE_ZUC;\n+\t\t\tbreak;\n+\t\tcase RTE_CRYPTO_AUTH_AES_CMAC:\n+\t\t\tauthdata.algtype = PDCP_AUTH_TYPE_AES;\n+\t\t\tbreak;\n+\t\tcase RTE_CRYPTO_AUTH_NULL:\n+\t\t\tauthdata.algtype = PDCP_AUTH_TYPE_NULL;\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tDPAA2_SEC_ERR(\"Crypto: Unsupported auth alg %u\",\n+\t\t\t\t      session->auth_alg);\n+\t\t\tgoto out;\n+\t\t}\n+\n+\t\tif (session->dir == DIR_ENC)\n+\t\t\tbufsize = cnstr_shdsc_pdcp_c_plane_encap(\n+\t\t\t\t\tpriv->flc_desc[0].desc, 1, swap,\n+\t\t\t\t\tpdcp_xform->hfn,\n+\t\t\t\t\tpdcp_xform->bearer,\n+\t\t\t\t\tpdcp_xform->pkt_dir,\n+\t\t\t\t\tpdcp_xform->hfn_threshold,\n+\t\t\t\t\t&cipherdata, &authdata,\n+\t\t\t\t\t0);\n+\t\telse if (session->dir == DIR_DEC)\n+\t\t\tbufsize = cnstr_shdsc_pdcp_c_plane_decap(\n+\t\t\t\t\tpriv->flc_desc[0].desc, 1, swap,\n+\t\t\t\t\tpdcp_xform->hfn,\n+\t\t\t\t\tpdcp_xform->bearer,\n+\t\t\t\t\tpdcp_xform->pkt_dir,\n+\t\t\t\t\tpdcp_xform->hfn_threshold,\n+\t\t\t\t\t&cipherdata, &authdata,\n+\t\t\t\t\t0);\n+\t} else {\n+\t\tif (session->dir == DIR_ENC)\n+\t\t\tbufsize = cnstr_shdsc_pdcp_u_plane_encap(\n+\t\t\t\t\tpriv->flc_desc[0].desc, 1, swap,\n+\t\t\t\t\tpdcp_xform->sn_size,\n+\t\t\t\t\tpdcp_xform->hfn,\n+\t\t\t\t\tpdcp_xform->bearer,\n+\t\t\t\t\tpdcp_xform->pkt_dir,\n+\t\t\t\t\tpdcp_xform->hfn_threshold,\n+\t\t\t\t\t&cipherdata, 0);\n+\t\telse if (session->dir == DIR_DEC)\n+\t\t\tbufsize = cnstr_shdsc_pdcp_u_plane_decap(\n+\t\t\t\t\tpriv->flc_desc[0].desc, 1, swap,\n+\t\t\t\t\tpdcp_xform->sn_size,\n+\t\t\t\t\tpdcp_xform->hfn,\n+\t\t\t\t\tpdcp_xform->bearer,\n+\t\t\t\t\tpdcp_xform->pkt_dir,\n+\t\t\t\t\tpdcp_xform->hfn_threshold,\n+\t\t\t\t\t&cipherdata, 0);\n+\t}\n+\n+\tif (bufsize < 0) {\n+\t\tDPAA2_SEC_ERR(\"Crypto: Invalid buffer length\");\n+\t\tgoto out;\n+\t}\n+\n+\t/* Enable the stashing control bit */\n+\tDPAA2_SET_FLC_RSC(flc);\n+\tflc->word2_rflc_31_0 = lower_32_bits(\n+\t\t\t(size_t)&(((struct dpaa2_sec_qp *)\n+\t\t\tdev->data->queue_pairs[0])->rx_vq) | 0x14);\n+\tflc->word3_rflc_63_32 = upper_32_bits(\n+\t\t\t(size_t)&(((struct dpaa2_sec_qp *)\n+\t\t\tdev->data->queue_pairs[0])->rx_vq));\n+\n+\tflc->word1_sdl = (uint8_t)bufsize;\n+\n+\t/* Set EWS bit i.e. enable write-safe */\n+\tDPAA2_SET_FLC_EWS(flc);\n+\t/* Set BS = 1 i.e reuse input buffers as output buffers */\n+\tDPAA2_SET_FLC_REUSE_BS(flc);\n+\t/* Set FF = 10; reuse input buffers if they provide sufficient space */\n+\tDPAA2_SET_FLC_REUSE_FF(flc);\n+\n+\tsession->ctxt = priv;\n+\n+\treturn 0;\n+out:\n+\trte_free(session->auth_key.data);\n+\trte_free(session->cipher_key.data);\n+\trte_free(priv);\n+\treturn -1;\n+}\n+\n static int\n dpaa2_sec_security_session_create(void *dev,\n \t\t\t\t  struct rte_security_session_conf *conf,\n@@ -2573,6 +2826,10 @@ dpaa2_sec_security_session_create(void *dev,\n \t\tbreak;\n \tcase RTE_SECURITY_PROTOCOL_MACSEC:\n \t\treturn -ENOTSUP;\n+\tcase RTE_SECURITY_PROTOCOL_PDCP:\n+\t\tret = dpaa2_sec_set_pdcp_session(cdev, conf,\n+\t\t\t\tsess_private_data);\n+\t\tbreak;\n \tdefault:\n \t\treturn -EINVAL;\n \t}\ndiff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h b/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h\nindex bce9633c0..51751103d 100644\n--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h\n+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h\n@@ -137,6 +137,19 @@ struct dpaa2_sec_aead_ctxt {\n \tuint8_t auth_cipher_text;       /**< Authenticate/cipher ordering */\n };\n \n+/*\n+ * The structure is to be filled by user for PDCP Protocol\n+ */\n+struct dpaa2_pdcp_ctxt {\n+\tenum rte_security_pdcp_domain domain; /*!< Data/Control mode*/\n+\tint8_t bearer;\t/*!< PDCP bearer ID */\n+\tint8_t pkt_dir;/*!< PDCP Frame Direction 0:UL 1:DL*/\n+\tint8_t hfn_ovd;/*!< Overwrite HFN per packet*/\n+\tuint32_t hfn;\t/*!< Hyper Frame Number */\n+\tuint32_t hfn_threshold;\t/*!< HFN Threashold for key renegotiation */\n+\tuint8_t sn_size;\t/*!< Sequence number size, 7/12/15 */\n+};\n+\n typedef struct dpaa2_sec_session_entry {\n \tvoid *ctxt;\n \tuint8_t ctxt_type;\n@@ -160,15 +173,20 @@ typedef struct dpaa2_sec_session_entry {\n \t\t\t} auth_key;\n \t\t};\n \t};\n-\tstruct {\n-\t\tuint16_t length; /**< IV length in bytes */\n-\t\tuint16_t offset; /**< IV offset in bytes */\n-\t} iv;\n-\tuint16_t digest_length;\n-\tuint8_t status;\n \tunion {\n-\t\tstruct dpaa2_sec_aead_ctxt aead_ctxt;\n-\t} ext_params;\n+\t\tstruct {\n+\t\t\tstruct {\n+\t\t\t\tuint16_t length; /**< IV length in bytes */\n+\t\t\t\tuint16_t offset; /**< IV offset in bytes */\n+\t\t\t} iv;\n+\t\t\tuint16_t digest_length;\n+\t\t\tuint8_t status;\n+\t\t\tunion {\n+\t\t\t\tstruct dpaa2_sec_aead_ctxt aead_ctxt;\n+\t\t\t} ext_params;\n+\t\t};\n+\t\tstruct dpaa2_pdcp_ctxt pdcp;\n+\t};\n } dpaa2_sec_session;\n \n static const struct rte_cryptodev_capabilities dpaa2_sec_capabilities[] = {\n@@ -392,6 +410,162 @@ static const struct rte_cryptodev_capabilities dpaa2_sec_capabilities[] = {\n \tRTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()\n };\n \n+static const struct rte_cryptodev_capabilities dpaa2_pdcp_capabilities[] = {\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+\t{\t/* AES CTR */\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_AES_CTR,\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 = 32,\n+\t\t\t\t\t.increment = 8\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/* NULL (AUTH) */\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_NULL,\n+\t\t\t\t.block_size = 1,\n+\t\t\t\t.key_size = {\n+\t\t\t\t\t.min = 0,\n+\t\t\t\t\t.max = 0,\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 = 0,\n+\t\t\t\t\t.max = 0,\n+\t\t\t\t\t.increment = 0\n+\t\t\t\t},\n+\t\t\t\t.iv_size = { 0 }\n+\t\t\t}, },\n+\t\t}, },\n+\t},\n+\t{\t/* NULL (CIPHER) */\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_NULL,\n+\t\t\t\t.block_size = 1,\n+\t\t\t\t.key_size = {\n+\t\t\t\t\t.min = 0,\n+\t\t\t\t\t.max = 0,\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 = 0,\n+\t\t\t\t\t.max = 0,\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/* 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+\t{\t/* ZUC (EIA3) */\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_ZUC_EIA3,\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+\n+\tRTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()\n+};\n+\n static const struct rte_security_capability dpaa2_sec_security_cap[] = {\n \t{ /* IPsec Lookaside Protocol offload ESP Transport Egress */\n \t\t.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,\n@@ -415,6 +589,24 @@ static const struct rte_security_capability dpaa2_sec_security_cap[] = {\n \t\t},\n \t\t.crypto_capabilities = dpaa2_sec_capabilities\n \t},\n+\t{ /* PDCP Lookaside Protocol offload Data */\n+\t\t.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,\n+\t\t.protocol = RTE_SECURITY_PROTOCOL_PDCP,\n+\t\t.pdcp = {\n+\t\t\t.domain = RTE_SECURITY_PDCP_MODE_DATA,\n+\t\t\t.capa_flags = 0\n+\t\t},\n+\t\t.crypto_capabilities = dpaa2_pdcp_capabilities\n+\t},\n+\t{ /* PDCP Lookaside Protocol offload Control */\n+\t\t.action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,\n+\t\t.protocol = RTE_SECURITY_PROTOCOL_PDCP,\n+\t\t.pdcp = {\n+\t\t\t.domain = RTE_SECURITY_PDCP_MODE_CONTROL,\n+\t\t\t.capa_flags = 0\n+\t\t},\n+\t\t.crypto_capabilities = dpaa2_pdcp_capabilities\n+\t},\n \t{\n \t\t.action = RTE_SECURITY_ACTION_TYPE_NONE\n \t}\n",
    "prefixes": [
        "v5",
        "3/3"
    ]
}