get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 56775,
    "url": "http://patches.dpdk.org/api/patches/56775/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20190719123309.24417-9-rnagadheeraj@marvell.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": "<20190719123309.24417-9-rnagadheeraj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190719123309.24417-9-rnagadheeraj@marvell.com",
    "date": "2019-07-19T12:33:43",
    "name": "[v2,08/10] crypto/nitrox: add burst enqueue and dequeue operations",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "9a8450fe2d008a6662c8cd283827dc7b57d84a15",
    "submitter": {
        "id": 1365,
        "url": "http://patches.dpdk.org/api/people/1365/?format=api",
        "name": "Nagadheeraj Rottela",
        "email": "rnagadheeraj@marvell.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/20190719123309.24417-9-rnagadheeraj@marvell.com/mbox/",
    "series": [
        {
            "id": 5622,
            "url": "http://patches.dpdk.org/api/series/5622/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=5622",
            "date": "2019-07-19T12:33:30",
            "name": "add Nitrox crypto device support",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/5622/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/56775/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/56775/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 D4CA01B9CD;\n\tFri, 19 Jul 2019 14:34:04 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n\t[67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 5D4B41B956\n\tfor <dev@dpdk.org>; Fri, 19 Jul 2019 14:33:47 +0200 (CEST)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n\tby mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id\n\tx6JCQVM6013467 for <dev@dpdk.org>; Fri, 19 Jul 2019 05:33:46 -0700",
            "from sc-exch03.marvell.com ([199.233.58.183])\n\tby mx0a-0016f401.pphosted.com with ESMTP id 2ts07vse64-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT)\n\tfor <dev@dpdk.org>; Fri, 19 Jul 2019 05:33:46 -0700",
            "from SC-EXCH04.marvell.com (10.93.176.84) by SC-EXCH03.marvell.com\n\t(10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1367.3;\n\tFri, 19 Jul 2019 05:33:45 -0700",
            "from NAM03-BY2-obe.outbound.protection.outlook.com (104.47.42.50)\n\tby SC-EXCH04.marvell.com (10.93.176.84) with Microsoft SMTP Server\n\t(TLS) id\n\t15.0.1367.3 via Frontend Transport; Fri, 19 Jul 2019 05:33:45 -0700",
            "from MN2PR18MB2797.namprd18.prod.outlook.com (20.179.22.16) by\n\tMN2PR18MB2527.namprd18.prod.outlook.com (20.179.82.202) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.2073.14; Fri, 19 Jul 2019 12:33:44 +0000",
            "from MN2PR18MB2797.namprd18.prod.outlook.com\n\t([fe80::5d53:ac2e:80ec:cd8f]) by\n\tMN2PR18MB2797.namprd18.prod.outlook.com\n\t([fe80::5d53:ac2e:80ec:cd8f%6]) with mapi id 15.20.2094.011;\n\tFri, 19 Jul 2019 12:33:44 +0000"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n\th=from : to : cc :\n\tsubject : date : message-id : references : in-reply-to : content-type\n\t: content-transfer-encoding : mime-version; s=pfpt0818;\n\tbh=BopgPuU9BTudWZosKkdIPK8sB/pDodrDjPPkbRBlUqc=;\n\tb=LC4I4IT+Eaz/bW2mCPSr5YRwQObYbacNlPIihx7zx8n7iUCY7Q1oHQ1KPybjBxyNFiiR\n\trT6cVztczgxhBPvvn3n1kQ0cdJY6iroo2lIwyH38VMiaFtD9CF6ZLK5MYvnMpn0INqgJ\n\t5iysoJCVH5dJb6XZrK5r+7H4Yusd8I8eJNfffHE92YdMV6rRkEGq1vsSE5EIMeOBHdPS\n\t5/iDRFuWIr1DBD73nkY0IucDaP7qJ2YMmVWs8zwkRG480q55W00CtGBFcp8qpXYiPbIZ\n\tmhe04AnxITA6udMbAcP4o30Lgtqi5Yza7ZlvJuZ5+Ao+3PrB49ZwfwYjkXSFOxdfFM0I\n\tbg== ",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=marvell.onmicrosoft.com; s=selector2-marvell-onmicrosoft-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=BopgPuU9BTudWZosKkdIPK8sB/pDodrDjPPkbRBlUqc=;\n\tb=lSanHi5U3Zls30UOPT24K6kFN5tdwEkBc3TxvIu7npgKj2cO4Li2oC1J3lCvygto+a0v/EcdagPYVLYPgR7t0LO1hAQCFu3lGoMLaIB+foqOx2eVFrWlUlDDqbHlAhuXhZH5u7e3amPEjKXizg/wdc7CWPa2Bayi/QvDnyOFF/k="
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n\tb=bECMGCyFwXdw6a76bAmfxDaaZXhVwKlqc+4y4GAUlpfZgYRpchlQieZh/xlmyjJ/DQr98lRTF2jpqW4x5pXQC/KnEjtOCcZh/0l6ypsuQ0Qt2YiAqLRZgvCkE2NUabP4DzqixYPjozJxI3HeRbji0/MKAY9Y85XRB0Rz+i81CPagZZ/kgo65cQ2wVK2uys4G6r8iQoFf7sN1Pf7pWw2g5X9xvICtHwdRsuGjclj/orXePqTA1aQFtQrQdof7Llubfcruj+yKcr5YxZCPdz9Fln25hFjQGZcoHNcQqPN+OIrkOORGgwrrRswIF2N7nCkhe74M++2MKk4zm4o3VQdg/w==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector9901;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=BopgPuU9BTudWZosKkdIPK8sB/pDodrDjPPkbRBlUqc=;\n\tb=Y5uOKGiFVBYbkTlO5iSJn/ANzbOXpZUCDNjASrKSRGDxhBWTOAFHaN0lgLlI98YS939nLpLsxOTtnaNIZ2IL8RMpZe5VqtTcu0hPl/8GPCu+CJi0NDFtby0x+qAvrtlE1jeBpRbYMYeh4Y2gdkhRshsYEvUOSPdQa8pEtwjiATdgmhcFoPr72VPcVJWZmKqdyZ8SQuRbFsqWkwroZzTeeZMfd2lQve0d6NibaVO317wvbfPwpcrVL1UzNzbmJTk6lK8e7JwNRBWqXKxtt6XT5HqBkcoreQS3H+L/IK6cLltautCp0x6k3wNP6zf6udZgszFbKezI5pNoccue7jY+Yg==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1;spf=pass\n\tsmtp.mailfrom=marvell.com;dmarc=pass action=none\n\theader.from=marvell.com;dkim=pass header.d=marvell.com;arc=none",
        "From": "Nagadheeraj Rottela <rnagadheeraj@marvell.com>",
        "To": "\"dev@dpdk.org\" <dev@dpdk.org>",
        "CC": "Srikanth Jampala <jsrikanth@marvell.com>, Nagadheeraj Rottela\n\t<rnagadheeraj@marvell.com>",
        "Thread-Topic": "[PATCH v2 08/10] crypto/nitrox: add burst enqueue and dequeue\n\toperations",
        "Thread-Index": "AQHVPi4zMoPjfO6JJ0WP7m84w+HMCg==",
        "Date": "Fri, 19 Jul 2019 12:33:43 +0000",
        "Message-ID": "<20190719123309.24417-9-rnagadheeraj@marvell.com>",
        "References": "<20190717052837.647-1-rnagadheeraj@marvell.com>\n\t<20190719123309.24417-1-rnagadheeraj@marvell.com>",
        "In-Reply-To": "<20190719123309.24417-1-rnagadheeraj@marvell.com>",
        "Accept-Language": "en-IN, en-US",
        "Content-Language": "en-US",
        "X-MS-Has-Attach": "",
        "X-MS-TNEF-Correlator": "",
        "x-clientproxiedby": "BM1PR0101CA0048.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:b00:1a::34) To MN2PR18MB2797.namprd18.prod.outlook.com\n\t(2603:10b6:208:a0::16)",
        "x-ms-exchange-messagesentrepresentingtype": "1",
        "x-mailer": "git-send-email 2.13.6",
        "x-originating-ip": "[115.113.156.2]",
        "x-ms-publictraffictype": "Email",
        "x-ms-office365-filtering-correlation-id": "67a533fe-0caa-4f35-40b2-08d70c455661",
        "x-microsoft-antispam": "BCL:0; PCL:0;\n\tRULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);\n\tSRVR:MN2PR18MB2527; ",
        "x-ms-traffictypediagnostic": "MN2PR18MB2527:",
        "x-microsoft-antispam-prvs": "<MN2PR18MB25274978E50A91D33ED8C729D6CB0@MN2PR18MB2527.namprd18.prod.outlook.com>",
        "x-ms-oob-tlc-oobclassifiers": "OLM:119;",
        "x-forefront-prvs": "01039C93E4",
        "x-forefront-antispam-report": "SFV:NSPM;\n\tSFS:(10009020)(4636009)(136003)(346002)(39860400002)(396003)(366004)(376002)(199004)(189003)(2616005)(6486002)(107886003)(36756003)(486006)(5660300002)(316002)(99286004)(30864003)(6116002)(14454004)(102836004)(1076003)(476003)(86362001)(6916009)(6512007)(5640700003)(8936002)(76176011)(53936002)(186003)(26005)(54906003)(6436002)(2501003)(8676002)(81166006)(1730700003)(81156014)(478600001)(3846002)(66476007)(66446008)(64756008)(52116002)(25786009)(68736007)(50226002)(4326008)(2906002)(66946007)(71200400001)(446003)(71190400001)(11346002)(14444005)(66066001)(55236004)(2351001)(7736002)(6506007)(305945005)(66556008)(256004)(386003);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR18MB2527;\n\tH:MN2PR18MB2797.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en;\n\tPTR:InfoNoRecords; A:1; MX:1; ",
        "received-spf": "None (protection.outlook.com: marvell.com does not designate\n\tpermitted sender hosts)",
        "x-ms-exchange-senderadcheck": "1",
        "x-microsoft-antispam-message-info": "86M0HUVRwrpBklNL178KVjEzF+fnLDfdb+KTxnmXxKZcoMcn35sKK1G7L/B+b3p5xOqhjhwauqCYD8VM2N3l15gdBxX0Fze7WTD6SgoN+yTYX5GtGzANDHX0GfOwYktSZ6H4J5Gsm7Stugs0/afZf/OhSwJBlEwEvYDmitc6RnhS9goLsXiGgEJWDSqDP/IQ6nEKhLb1Vd3oYIWJpGRgqWgKMGf9gbvDcCqWAK7YYQoMQ+5aorthPK5RoobJ1SYG7mHCJ/p870po72cyp1loOCIw0NgemIEvEhKcMNNRLWq7pKzHHIydl18k35trX7Ww+QD6fpR2GxvlQ0B4b3tIAobeA7yUQ/2kQdmxFgrmRlX42qHY6Vdwxdr5xz3GE+qDrXC1mYRd++Abs1HES780G61pz2wusfLZJgMqYGAo2OE=",
        "Content-Type": "text/plain; charset=\"iso-8859-1\"",
        "Content-Transfer-Encoding": "quoted-printable",
        "MIME-Version": "1.0",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "67a533fe-0caa-4f35-40b2-08d70c455661",
        "X-MS-Exchange-CrossTenant-originalarrivaltime": "19 Jul 2019 12:33:43.9304\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-fromentityheader": "Hosted",
        "X-MS-Exchange-CrossTenant-id": "70e1fb47-1155-421d-87fc-2e58f638b6e0",
        "X-MS-Exchange-CrossTenant-mailboxtype": "HOSTED",
        "X-MS-Exchange-CrossTenant-userprincipalname": "rnagadheeraj@marvell.com",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MN2PR18MB2527",
        "X-OriginatorOrg": "marvell.com",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:5.22.84,1.0.8\n\tdefinitions=2019-07-19_09:2019-07-19,2019-07-19 signatures=0",
        "Subject": "[dpdk-dev] [PATCH v2 08/10] crypto/nitrox: add burst enqueue and\n\tdequeue operations",
        "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": "Add burst enqueue and dequeue operations along with interface for\nsymmetric request manager.\n\nSigned-off-by: Nagadheeraj Rottela <rnagadheeraj@marvell.com>\n---\n drivers/crypto/nitrox/nitrox_qp.h         |  55 ++++++++++\n drivers/crypto/nitrox/nitrox_sym.c        | 123 ++++++++++++++++++++-\n drivers/crypto/nitrox/nitrox_sym_reqmgr.c | 174 ++++++++++++++++++++++++++++++\n drivers/crypto/nitrox/nitrox_sym_reqmgr.h |  10 ++\n 4 files changed, 360 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/drivers/crypto/nitrox/nitrox_qp.h b/drivers/crypto/nitrox/nitrox_qp.h\nindex 0244c4dbf..645fa8925 100644\n--- a/drivers/crypto/nitrox/nitrox_qp.h\n+++ b/drivers/crypto/nitrox/nitrox_qp.h\n@@ -34,12 +34,67 @@ struct nitrox_qp {\n \trte_atomic16_t pending_count;\n };\n \n+static inline uint16_t\n+nitrox_qp_free_count(struct nitrox_qp *qp)\n+{\n+\tuint16_t pending_count = rte_atomic16_read(&qp->pending_count);\n+\n+\tRTE_ASSERT(qp->count >= pending_count);\n+\treturn (qp->count - pending_count);\n+}\n+\n static inline bool\n nitrox_qp_is_empty(struct nitrox_qp *qp)\n {\n \treturn (rte_atomic16_read(&qp->pending_count) == 0);\n }\n \n+static inline uint16_t\n+nitrox_qp_used_count(struct nitrox_qp *qp)\n+{\n+\treturn rte_atomic16_read(&qp->pending_count);\n+}\n+\n+static inline struct nitrox_softreq *\n+nitrox_qp_get_softreq(struct nitrox_qp *qp)\n+{\n+\tuint32_t tail = qp->tail % qp->count;\n+\n+\treturn qp->ridq[tail].sr;\n+}\n+\n+static inline void\n+nitrox_ring_dbell(struct nitrox_qp *qp, uint16_t cnt)\n+{\n+\tstruct command_queue *cmdq = &qp->cmdq;\n+\n+\tif (!cnt)\n+\t\treturn;\n+\n+\trte_write64(cnt, cmdq->dbell_csr_addr);\n+}\n+\n+static inline void\n+nitrox_qp_enqueue(struct nitrox_qp *qp, void *instr, struct nitrox_softreq *sr)\n+{\n+\tuint32_t head = qp->head % qp->count;\n+\n+\tmemcpy(&qp->cmdq.ring[head * qp->cmdq.instr_size],\n+\t       instr, qp->cmdq.instr_size);\n+\tqp->ridq[head].sr = sr;\n+\tqp->head++;\n+\trte_atomic16_inc(&qp->pending_count);\n+\trte_wmb();\n+}\n+\n+static inline void\n+nitrox_qp_dequeue(struct nitrox_qp *qp)\n+{\n+\tqp->tail++;\n+\trte_atomic16_dec(&qp->pending_count);\n+\trte_smp_mb();\n+}\n+\n int nitrox_qp_setup(struct nitrox_qp *qp, uint8_t *bar_addr,\n \t\t    const char *dev_name, uint32_t nb_descriptors,\n \t\t    uint8_t inst_size, int socket_id);\ndiff --git a/drivers/crypto/nitrox/nitrox_sym.c b/drivers/crypto/nitrox/nitrox_sym.c\nindex 34c62b02e..9ccc28755 100644\n--- a/drivers/crypto/nitrox/nitrox_sym.c\n+++ b/drivers/crypto/nitrox/nitrox_sym.c\n@@ -521,6 +521,125 @@ nitrox_sym_dev_sess_clear(struct rte_cryptodev *cdev,\n \trte_mempool_put(sess_mp, ctx);\n }\n \n+static struct nitrox_crypto_ctx *\n+get_crypto_ctx(struct rte_crypto_op *op)\n+{\n+\tif (op->sess_type == RTE_CRYPTO_OP_WITH_SESSION) {\n+\t\tif (likely(op->sym->session))\n+\t\t\treturn get_sym_session_private_data(op->sym->session,\n+\t\t\t\t\t\t\t   nitrox_sym_drv_id);\n+\n+\t}\n+\n+\treturn NULL;\n+}\n+\n+static int\n+nitrox_enq_single_op(struct nitrox_qp *qp, struct rte_crypto_op *op)\n+{\n+\tstruct nitrox_crypto_ctx *ctx;\n+\tstruct nitrox_softreq *sr;\n+\tint err;\n+\n+\top->status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED;\n+\n+\tctx = get_crypto_ctx(op);\n+\tif (unlikely(!ctx)) {\n+\t\top->status = RTE_CRYPTO_OP_STATUS_INVALID_SESSION;\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (unlikely(rte_mempool_get(qp->sr_mp, (void **)&sr)))\n+\t\treturn -ENOMEM;\n+\n+\terr = nitrox_process_se_req(qp->qno, op, ctx, sr);\n+\tif (unlikely(err)) {\n+\t\trte_mempool_put(qp->sr_mp, sr);\n+\t\top->status = RTE_CRYPTO_OP_STATUS_ERROR;\n+\t\treturn err;\n+\t}\n+\n+\tnitrox_qp_enqueue(qp, nitrox_sym_instr_addr(sr), sr);\n+\treturn 0;\n+}\n+\n+static uint16_t\n+nitrox_sym_dev_enq_burst(void *queue_pair, struct rte_crypto_op **ops,\n+\t\t\t uint16_t nb_ops)\n+{\n+\tstruct nitrox_qp *qp = queue_pair;\n+\tuint16_t free_slots = 0;\n+\tuint16_t cnt = 0;\n+\tbool err = false;\n+\n+\tfree_slots = nitrox_qp_free_count(qp);\n+\tif (nb_ops > free_slots)\n+\t\tnb_ops = free_slots;\n+\n+\tfor (cnt = 0; cnt < nb_ops; cnt++) {\n+\t\tif (unlikely(nitrox_enq_single_op(qp, ops[cnt]))) {\n+\t\t\terr = true;\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\tnitrox_ring_dbell(qp, cnt);\n+\tqp->stats.enqueued_count += cnt;\n+\tif (unlikely(err))\n+\t\tqp->stats.enqueue_err_count++;\n+\n+\treturn cnt;\n+}\n+\n+static int\n+nitrox_deq_single_op(struct nitrox_qp *qp, struct rte_crypto_op **op_ptr)\n+{\n+\tstruct nitrox_softreq *sr;\n+\tint ret;\n+\tstruct rte_crypto_op *op;\n+\n+\tsr = nitrox_qp_get_softreq(qp);\n+\tret = nitrox_check_se_req(sr, op_ptr);\n+\tif (ret < 0)\n+\t\treturn -EAGAIN;\n+\n+\top = *op_ptr;\n+\tnitrox_qp_dequeue(qp);\n+\trte_mempool_put(qp->sr_mp, sr);\n+\tif (!ret) {\n+\t\top->status = RTE_CRYPTO_OP_STATUS_SUCCESS;\n+\t\tqp->stats.dequeued_count++;\n+\n+\t\treturn 0;\n+\t}\n+\n+\tif (ret == MC_MAC_MISMATCH_ERR_CODE)\n+\t\top->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED;\n+\telse\n+\t\top->status = RTE_CRYPTO_OP_STATUS_ERROR;\n+\tqp->stats.dequeue_err_count++;\n+\n+\treturn 0;\n+}\n+\n+static uint16_t\n+nitrox_sym_dev_deq_burst(void *queue_pair, struct rte_crypto_op **ops,\n+\t\t\t uint16_t nb_ops)\n+{\n+\tstruct nitrox_qp *qp = queue_pair;\n+\tuint16_t filled_slots = nitrox_qp_used_count(qp);\n+\tint cnt = 0;\n+\n+\tif (nb_ops > filled_slots)\n+\t\tnb_ops = filled_slots;\n+\n+\tfor (cnt = 0; cnt < nb_ops; cnt++)\n+\t\tif (nitrox_deq_single_op(qp, &ops[cnt]))\n+\t\t\tbreak;\n+\n+\treturn cnt;\n+}\n+\n static struct rte_cryptodev_ops nitrox_cryptodev_ops = {\n \t.dev_configure\t\t= nitrox_sym_dev_config,\n \t.dev_start\t\t= nitrox_sym_dev_start,\n@@ -565,8 +684,8 @@ nitrox_sym_pmd_create(struct nitrox_device *ndev)\n \tndev->rte_sym_dev.name = cdev->data->name;\n \tcdev->driver_id = nitrox_sym_drv_id;\n \tcdev->dev_ops = &nitrox_cryptodev_ops;\n-\tcdev->enqueue_burst = NULL;\n-\tcdev->dequeue_burst = NULL;\n+\tcdev->enqueue_burst = nitrox_sym_dev_enq_burst;\n+\tcdev->dequeue_burst = nitrox_sym_dev_deq_burst;\n \tcdev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |\n \t\tRTE_CRYPTODEV_FF_HW_ACCELERATED |\n \t\tRTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |\ndiff --git a/drivers/crypto/nitrox/nitrox_sym_reqmgr.c b/drivers/crypto/nitrox/nitrox_sym_reqmgr.c\nindex 42d67317c..a37b754f2 100644\n--- a/drivers/crypto/nitrox/nitrox_sym_reqmgr.c\n+++ b/drivers/crypto/nitrox/nitrox_sym_reqmgr.c\n@@ -4,12 +4,113 @@\n \n #include <rte_crypto.h>\n #include <rte_cryptodev.h>\n+#include <rte_cycles.h>\n #include <rte_errno.h>\n \n #include \"nitrox_sym_reqmgr.h\"\n #include \"nitrox_logs.h\"\n \n+#define PENDING_SIG 0xFFFFFFFFFFFFFFFFUL\n+#define CMD_TIMEOUT 2\n+\n+union pkt_instr_hdr {\n+\tuint64_t value;\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz_48_63 : 16;\n+\t\tuint64_t g : 1;\n+\t\tuint64_t gsz : 7;\n+\t\tuint64_t ihi : 1;\n+\t\tuint64_t ssz : 7;\n+\t\tuint64_t raz_30_31 : 2;\n+\t\tuint64_t fsz : 6;\n+\t\tuint64_t raz_16_23 : 8;\n+\t\tuint64_t tlen : 16;\n+#else\n+\t\tuint64_t tlen : 16;\n+\t\tuint64_t raz_16_23 : 8;\n+\t\tuint64_t fsz : 6;\n+\t\tuint64_t raz_30_31 : 2;\n+\t\tuint64_t ssz : 7;\n+\t\tuint64_t ihi : 1;\n+\t\tuint64_t gsz : 7;\n+\t\tuint64_t g : 1;\n+\t\tuint64_t raz_48_63 : 16;\n+#endif\n+\t} s;\n+};\n+\n+union pkt_hdr {\n+\tuint64_t value[2];\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t opcode : 8;\n+\t\tuint64_t arg : 8;\n+\t\tuint64_t ctxc : 2;\n+\t\tuint64_t unca : 1;\n+\t\tuint64_t raz_44 : 1;\n+\t\tuint64_t info : 3;\n+\t\tuint64_t destport : 9;\n+\t\tuint64_t unc : 8;\n+\t\tuint64_t raz_19_23 : 5;\n+\t\tuint64_t grp : 3;\n+\t\tuint64_t raz_15 : 1;\n+\t\tuint64_t ctxl : 7;\n+\t\tuint64_t uddl : 8;\n+#else\n+\t\tuint64_t uddl : 8;\n+\t\tuint64_t ctxl : 7;\n+\t\tuint64_t raz_15 : 1;\n+\t\tuint64_t grp : 3;\n+\t\tuint64_t raz_19_23 : 5;\n+\t\tuint64_t unc : 8;\n+\t\tuint64_t destport : 9;\n+\t\tuint64_t info : 3;\n+\t\tuint64_t raz_44 : 1;\n+\t\tuint64_t unca : 1;\n+\t\tuint64_t ctxc : 2;\n+\t\tuint64_t arg : 8;\n+\t\tuint64_t opcode : 8;\n+#endif\n+\t\tuint64_t ctxp;\n+\t} s;\n+};\n+\n+union slc_store_info {\n+\tuint64_t value[2];\n+\tstruct {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\tuint64_t raz_39_63 : 25;\n+\t\tuint64_t ssz : 7;\n+\t\tuint64_t raz_0_31 : 32;\n+#else\n+\t\tuint64_t raz_0_31 : 32;\n+\t\tuint64_t ssz : 7;\n+\t\tuint64_t raz_39_63 : 25;\n+#endif\n+\t\tuint64_t rptr;\n+\t} s;\n+};\n+\n+struct nps_pkt_instr {\n+\tuint64_t dptr0;\n+\tunion pkt_instr_hdr ih;\n+\tunion pkt_hdr irh;\n+\tunion slc_store_info slc;\n+\tuint64_t fdata[2];\n+};\n+\n+struct resp_hdr {\n+\tuint64_t orh;\n+\tuint64_t completion;\n+};\n+\n struct nitrox_softreq {\n+\tstruct nitrox_crypto_ctx *ctx;\n+\tstruct rte_crypto_op *op;\n+\tstruct nps_pkt_instr instr;\n+\tstruct resp_hdr resp;\n+\tuint64_t timeout;\n \trte_iova_t iova;\n };\n \n@@ -20,6 +121,79 @@ softreq_init(struct nitrox_softreq *sr, rte_iova_t iova)\n \tsr->iova = iova;\n }\n \n+static int\n+process_cipher_auth_data(struct nitrox_softreq *sr)\n+{\n+\tRTE_SET_USED(sr);\n+\treturn 0;\n+}\n+\n+static int\n+process_softreq(struct nitrox_softreq *sr)\n+{\n+\tstruct nitrox_crypto_ctx *ctx = sr->ctx;\n+\tint err = 0;\n+\n+\tswitch (ctx->nitrox_chain) {\n+\tcase NITROX_CHAIN_CIPHER_AUTH:\n+\tcase NITROX_CHAIN_AUTH_CIPHER:\n+\t\terr = process_cipher_auth_data(sr);\n+\t\tbreak;\n+\tdefault:\n+\t\terr = -EINVAL;\n+\t\tbreak;\n+\t}\n+\n+\treturn err;\n+}\n+\n+int\n+nitrox_process_se_req(uint16_t qno, struct rte_crypto_op *op,\n+\t\t      struct nitrox_crypto_ctx *ctx,\n+\t\t      struct nitrox_softreq *sr)\n+{\n+\tRTE_SET_USED(qno);\n+\tsoftreq_init(sr, sr->iova);\n+\tsr->ctx = ctx;\n+\tsr->op = op;\n+\tprocess_softreq(sr);\n+\tsr->timeout = rte_get_timer_cycles() + CMD_TIMEOUT * rte_get_timer_hz();\n+\treturn 0;\n+}\n+\n+int\n+nitrox_check_se_req(struct nitrox_softreq *sr, struct rte_crypto_op **op)\n+{\n+\tuint64_t cc;\n+\tuint64_t orh;\n+\tint err;\n+\n+\trte_rmb();\n+\tcc = *(volatile uint64_t *)(&sr->resp.completion);\n+\torh = *(volatile uint64_t *)(&sr->resp.orh);\n+\tif (cc != PENDING_SIG)\n+\t\terr = 0;\n+\telse if ((orh != PENDING_SIG) && (orh & 0xff))\n+\t\terr = orh & 0xff;\n+\telse if (rte_get_timer_cycles() >= sr->timeout)\n+\t\terr = 0xff;\n+\telse\n+\t\treturn -EAGAIN;\n+\n+\tif (unlikely(err))\n+\t\tNITROX_LOG(ERR, \"Request err 0x%x, orh 0x%\"PRIx64\"\\n\", err,\n+\t\t\t   sr->resp.orh);\n+\n+\t*op = sr->op;\n+\treturn err;\n+}\n+\n+void *\n+nitrox_sym_instr_addr(struct nitrox_softreq *sr)\n+{\n+\treturn &sr->instr;\n+}\n+\n static void\n req_pool_obj_init(__rte_unused struct rte_mempool *mp,\n \t\t  __rte_unused void *opaque, void *obj,\ndiff --git a/drivers/crypto/nitrox/nitrox_sym_reqmgr.h b/drivers/crypto/nitrox/nitrox_sym_reqmgr.h\nindex 5953c958c..fa2637bdb 100644\n--- a/drivers/crypto/nitrox/nitrox_sym_reqmgr.h\n+++ b/drivers/crypto/nitrox/nitrox_sym_reqmgr.h\n@@ -5,6 +5,16 @@\n #ifndef _NITROX_SYM_REQMGR_H_\n #define _NITROX_SYM_REQMGR_H_\n \n+#include \"nitrox_sym_ctx.h\"\n+\n+struct nitrox_qp;\n+struct nitrox_softreq;\n+\n+int nitrox_process_se_req(uint16_t qno, struct rte_crypto_op *op,\n+\t\t\t  struct nitrox_crypto_ctx *ctx,\n+\t\t\t  struct nitrox_softreq *sr);\n+int nitrox_check_se_req(struct nitrox_softreq *sr, struct rte_crypto_op **op);\n+void *nitrox_sym_instr_addr(struct nitrox_softreq *sr);\n struct rte_mempool *nitrox_sym_req_pool_create(struct rte_cryptodev *cdev,\n \t\t\t\t\t       uint32_t nobjs, uint16_t qp_id,\n \t\t\t\t\t       int socket_id);\n",
    "prefixes": [
        "v2",
        "08/10"
    ]
}