From patchwork Thu Jan 11 11:44:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil Goyal X-Patchwork-Id: 33585 X-Patchwork-Delegate: pablo.de.lara.guarch@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4D005A48C; Thu, 11 Jan 2018 12:48:09 +0100 (CET) Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0083.outbound.protection.outlook.com [104.47.33.83]) by dpdk.org (Postfix) with ESMTP id 40CF9726F for ; Thu, 11 Jan 2018 12:48:07 +0100 (CET) Received: from MWHPR03CA0025.namprd03.prod.outlook.com (10.174.173.142) by BN3PR03MB2354.namprd03.prod.outlook.com (10.166.74.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Thu, 11 Jan 2018 11:48:05 +0000 Received: from BN1BFFO11FD018.protection.gbl (2a01:111:f400:7c10::1:189) by MWHPR03CA0025.outlook.office365.com (2603:10b6:301:3b::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.407.7 via Frontend Transport; Thu, 11 Jan 2018 11:48:05 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; NXP1.onmicrosoft.com; dkim=none (message not signed) header.d=none;NXP1.onmicrosoft.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1BFFO11FD018.mail.protection.outlook.com (10.58.144.81) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.345.12 via Frontend Transport; Thu, 11 Jan 2018 11:47:33 +0000 Received: from netperf2.ap.freescale.net ([10.232.133.164]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id w0BBm1NG012615; Thu, 11 Jan 2018 04:48:02 -0700 From: Akhil Goyal To: CC: , , Akhil Goyal , Nipun Gupta Date: Thu, 11 Jan 2018 17:14:06 +0530 Message-ID: <20180111114406.19785-1-akhil.goyal@nxp.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20171213135659.32648-6-akhil.goyal@nxp.com> References: <20171213135659.32648-6-akhil.goyal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131601448533883330; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(39380400002)(39860400002)(376002)(346002)(396003)(2980300002)(1109001)(1110001)(339900001)(199004)(189003)(2906002)(8656006)(68736007)(16586007)(5890100001)(81166006)(8936002)(105606002)(50226002)(54906003)(966005)(106466001)(50466002)(498600001)(85426001)(48376002)(1076002)(97736004)(296002)(316002)(4326008)(2351001)(76176011)(77096006)(59450400001)(2950100002)(6916009)(51416003)(36756003)(356003)(8676002)(104016004)(53376002)(53936002)(6306002)(47776003)(305945005)(86362001)(5660300001)(81156014); DIR:OUT; SFP:1101; SCL:1; SRVR:BN3PR03MB2354; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD018; 1:wCBPu5EcloLgkM7vx1OX70H7NIqJ9+c3YH8h/orih8Ps/7OaqZxbZ2ehMbwKDwXr7cCYUtclXMsLlOLrI5ETN6I4hdQz7P/IGQN0HFYSoTcEVY+pND/Li35X+vIfGG+K MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 82c6720b-4733-4888-f9c2-08d558e91a40 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4534020)(4628075)(201703131517081)(2017052603307); SRVR:BN3PR03MB2354; X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB2354; 3:UXoTW/yeojF9GEeayLNrvbYPN1LtBDlHfMpnDRE0ajBoTqSLDeNhg9aFYNF9MlN+X/zY+ourN3r3EMSBumXU9FNrGNiNk2VBQNQq5EAZi0kYhLqWeTLntb+mI8omHgD5dhJB7MFGSv1az1UIsvHz0XLNNH+3maq0CeyjB1WNiJrYgryuJ4Ht5L3o2u/lUKoFI6BZNNKLffVJMOr9q1wQQpfKfAIa15y72quNTU3+h4eM3VmnDMcrtlB8nan/chcWzrDoCxYl9KuNbnGTDhKcD2dDpkJwtyTmaVpX7I2fGc32ZAT1cBP11/Ic2mfRlSqLCPShD85clR3GU37UQCqnx3RMiZArgCa/txSDBLblLno=; 25:khv/PhslD4bFh5EqIj8H/4hjWxg8OjrCnDwlOmZQghyKyIU5DY0Dx+DL44CSU3H6zILjkY3n7iAawgaSQDl9ummPsmZTI8z4tXC5XT77D/a/s0bOkpIoquaxujawQ5K011/UNExk7wAJFkaFE+as9pqP6LoPAJJ4lTY9MVHn+ZvkSkOX4nXfFm6Rs67Hk7pKwM6iuCFKBBWKM10fDzyfzGxAd6zzBDPZH9UYVAaI7jk5N2fQSNBlezHWQCBcms1vZsGh1C/QVOlIsBHqul86zWsEHMj96x1mtP2yS5j3xkKEU24HpWSUYbGZwgqRctUQtClqW16ghxB7u8UXPd4kPA== X-MS-TrafficTypeDiagnostic: BN3PR03MB2354: X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB2354; 31:CuRjqbQzaz3gzVYskCl4cHYT0MT0Bu7hwcdaUGnyjNSL3osUxzyTd5M55HuwwklEcyZC3Tjq4cBdu+Qx1zFahU/FOcQWgFtM2dakP2nwFdVVq3DBGqwXmJlDlIR09WYYEoy+MWlqH2An6RVGifDczIrAnTmlANGDZsnCWCazsF9g1eiOTabEGBt2MZl06vrsw5S+0hxuEA0s9XQUSBaYArqU8FLSHZEvaCrvvWF3/Tc=; 4:K5TLCp3AaQxUXmudqHqxWNiL4J7WJ1uPsuoYca4IZcrfHRXdLvugJYx7RFeln5pOteJZfh+wsSrd3tvZkX2GvZbQB3ncfXL2+ylPBOzA7oXXFmF/jhl8uwHOFUpmb8UiMN3maRTqcZKWjdUiuUvKWmzORqlApY3NKnEPwktr83GEqekyvIW+6h1DpzOaA3TAXKYhqIamVulnHgUJN0jEs2DWsznfwX0nOp0Q5jcp4S5pQjhaKWl3kkHgORLAfpkY1eSakO1+7WrzZzQnRG4VmliJe3nq+iRlsXA7kgwl2z4Udc21Jd3EdI3JiuMaRX9D X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(3231023)(944510075)(944921075)(946801075)(946901075)(6055026)(6096035)(20161123559100)(20161123565025)(20161123561025)(20161123556025)(201703131430075)(201703131520075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123563025)(201708071742011); SRVR:BN3PR03MB2354; BCL:0; PCL:0; RULEID:(100000803101)(100110400095)(400006); SRVR:BN3PR03MB2354; X-Forefront-PRVS: 0549E6FD50 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR03MB2354; 23:/0Wdrp19f/i84mRgaT2Q/M+UAAkU2Ex+mlq96DRyZ?= mxp7DlkRbGozprlNJWvEzondNHxQuApSyiNZIZYeIjNGexPXHGd5CJQA9YUAx6/eR4xA9h54zA3SmcPHzqvSqibi3n+CFkXbriqSagpFpLcl72l94Qpd3k16yIgutToH+Ny1Pe71MdTVnM1jay54mxPDz50r0j51zDsZGKBkC8aMM5Z7LNJyl2zy5HVAHWfiGXgRPA/6Wj17Dr7RpWUDSdQU2NmddDcIyjETRuIN3ZWibA0sZjbnoL2xyf4UpnEzCs7IlNv13JCMt2QW/eOybEx1wChzruvQZ2a/fC6w2bG6IyNhZZu7NaxF/jyaoYYKQkq+UDutjH/If5FVeqVRs4TjIJo9cmpCKGAGKPpKHraLXFrLuzLZBUoSv2kTV+Oe7KyN3XJ6pL1G9ZIy4/gb6wTfYfzciEa27EOw1hwPp829hvUDvAQZf6oCk5tst5hSHqb5YJXvdqVPROSD9kC2dsagyowgAkVHvMGEZZqPennL8/gjN6a2+3qXeeMSW5+pzC9gpGR7SCueOuJKEyTeSvG79uQqRzbmpI0AororuUo7rn16uPXxdsDvZPc+t8YyywIQGToUiFQ+T4Fp/3B7QP2aPjmCcFBO7PMtdJ9XZgbPNWPDcw3jT++l97T1W7C708NqHkLcMiMGqYpGoJm5gIarPrBs2MxA7ZYMeAHdaZgFYKRVbLZJaA62GhxyDsNq0ETmnAtg+v6vNKHfilTuUATasdvjo4VojfECWAuH50wYJDaapiBKE0ZIUX0gcGVD2ms089oRFELaMLUrQU/6dORznbHzgdLq5J7dT3sMJBpmr+PPdN/HSCNGh0KKNm31EQdjuUCQCUkyboO29/sQJvO3ct4BSZbl3vExJ2CH8KKAtOEKyynTWamGz6W+t+XBxchUq7TE4uG3QtXwotVVCm3fUfvqzokJdW/Wfr4xVv11yCYDtRErfWaJteW+AfUnzOjcajVXJl5ncSmD2t2FfuzVw86KK283FRNQzgdE3lnRg/JWgLW8aDaRFOCdx55bIOTWx2BfCFj/dkeampd2fo/JriMH2et+oqQbF0Ay0HA+hrh9/oNMr49Kcp9hIm74CVwQYdAgEnXdIn4pODTjT6c1DNSJWtcGsmNmDgZl902rAVkZDcdniCW0flEMzJpoJA= X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB2354; 6:BGCHYWUAjqHVjfIc6Dg2DjKt4MV3LoVCgg/eEXRYZUKDqcYy8JfFHRhJwcfKGmLIuK3pL+USmJBL28fIkWAEMkeyaVR6XEUnzAP3gFNcb1sk14ij4yxe1yCV68Hsvkg5ClFERJxpQp5BjPZIbRh5n+mounqZexnJq8CFUPsmFxbePBQKaI7V5OUDP0RBLr50tZ+r1cT8DMfdrkLtwdCox7Wv0qlrbRggPa4znMqKgWCImYNjFNksSgve9T7BdrzeqlFN7rI8u+3nk9B1XeTgY8czp/rfquCQ06T3q+DLkm4dNQA6SQV4V1GBeacw4J09TmP12OJONe4YiCYzZovtqgiO7iuVHCIsnLoPzKI5744=; 5:VeGvKZ6XYiTwCtVSk5907etSNeKLrbzL87TmmCjxNV9DN1VNy/McWUmvFpKB5o0D9bziAPeqWefYCgPliTH+9AkZ8oVCRuqZhZZ98SpghbnVEIYsbT5Mipzt0t8gj9Bn5+EumCJJq6s+pUvQHt96hAcRS1/36mGcMrOg3NAgZGE=; 24:xKRvr9AQ1qdAgJ2LPQKjVfojX9TTqaC9JqiAPQIzh3tP+nDQyExDPyM1XzBlOu8h0qTyW54fo1HKCOBqJq+RPyWsfoofg6t7X3SZ57xeRg4=; 7:Xp+eWB8F+x5Tk1MKe2tjHrVJFu3pQ417qKtSU9Myff/U+B+CygDcquV6i4j3MYYgaCBrHSULEekP7MU7/uAJWAzgHClViuh+ac4YObZUaVXBlm9h2m46XimwLs1MNL8CL5e4GMXNceQzSiny7mofaO1BngtnYPZmzQq4JUJR6DZMLqdT/0LsCEbERmfOaJKbXxT0gzDGP+3xQVTumsKmiPFdHqaYsUKcm9gP+yO1zqx0pCYL1R+0KB2i4iJnv2NF SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jan 2018 11:47:33.2167 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 82c6720b-4733-4888-f9c2-08d558e91a40 X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR03MB2354 Subject: [dpdk-dev] [PATCH v2] crypto/dpaa_sec: rewrite Rx/Tx path X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Rx and Tx patch are rewritten with improved internal APIs to improve performance. Signed-off-by: Akhil Goyal Signed-off-by: Nipun Gupta --- changes in v2: Incorporated comments from Hemant. split patch from the patch series to remove dependancy of other patches on bus/dpaa patch Note: This patch is dependent on [1](already merged in net subtree) and [2](under review) [1] c7b3891464c9 ("bus/dpaa: support for enqueue frames of multiple queues") [2] http://dpdk.org/ml/archives/dev/2018-January/086674.html drivers/crypto/dpaa_sec/dpaa_sec.c | 259 +++++++++++++++++++++---------------- drivers/crypto/dpaa_sec/dpaa_sec.h | 3 +- 2 files changed, 153 insertions(+), 109 deletions(-) diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c index 66828b5..586ebb6 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.c +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c @@ -537,46 +537,66 @@ dpaa_sec_prep_cdb(dpaa_sec_session *ses) return 0; } -static inline unsigned int -dpaa_volatile_deq(struct qman_fq *fq, unsigned int len, bool exact) -{ - unsigned int pkts = 0; - int ret; - struct qm_mcr_queryfq_np np; - enum qman_fq_state state; - uint32_t flags; - uint32_t vdqcr; - - qman_query_fq_np(fq, &np); - if (np.frm_cnt) { - vdqcr = QM_VDQCR_NUMFRAMES_SET(len); - if (exact) - vdqcr |= QM_VDQCR_EXACT; - ret = qman_volatile_dequeue(fq, 0, vdqcr); - if (ret) - return 0; - do { - pkts += qman_poll_dqrr(len); - qman_fq_state(fq, &state, &flags); - } while (flags & QMAN_FQ_STATE_VDQCR); - } - return pkts; -} - /* qp is lockless, should be accessed by only one thread */ static int dpaa_sec_deq(struct dpaa_sec_qp *qp, struct rte_crypto_op **ops, int nb_ops) { struct qman_fq *fq; + unsigned int pkts = 0; + int ret; + struct qm_dqrr_entry *dq; fq = &qp->outq; - dpaa_sec_op_nb = 0; - dpaa_sec_ops = ops; + ret = qman_set_vdq(fq, (nb_ops > DPAA_MAX_DEQUEUE_NUM_FRAMES) ? + DPAA_MAX_DEQUEUE_NUM_FRAMES : nb_ops); + if (ret) + return 0; + + do { + const struct qm_fd *fd; + struct dpaa_sec_job *job; + struct dpaa_sec_op_ctx *ctx; + struct rte_crypto_op *op; + + dq = qman_dequeue(fq); + if (!dq) + continue; + + fd = &dq->fd; + /* sg is embedded in an op ctx, + * sg[0] is for output + * sg[1] for input + */ + job = dpaa_mem_ptov(qm_fd_addr_get64(fd)); + + ctx = container_of(job, struct dpaa_sec_op_ctx, job); + ctx->fd_status = fd->status; + op = ctx->op; + if (op->sess_type == RTE_CRYPTO_OP_SECURITY_SESSION) { + struct qm_sg_entry *sg_out; + uint32_t len; + + sg_out = &job->sg[0]; + hw_sg_to_cpu(sg_out); + len = sg_out->length; + op->sym->m_src->pkt_len = len; + op->sym->m_src->data_len = len; + } + if (!ctx->fd_status) { + op->status = RTE_CRYPTO_OP_STATUS_SUCCESS; + } else { + printf("\nSEC return err: 0x%x", ctx->fd_status); + op->status = RTE_CRYPTO_OP_STATUS_ERROR; + } + ops[pkts++] = op; - if (unlikely(nb_ops > DPAA_SEC_BURST)) - nb_ops = DPAA_SEC_BURST; + /* report op status to sym->op and then free the ctx memeory */ + rte_mempool_put(ctx->ctx_pool, (void *)ctx); - return dpaa_volatile_deq(fq, nb_ops, 1); + qman_dqrr_consume(fq, dq); + } while (fq->flags & QMAN_FQ_STATE_VDQCR); + + return pkts; } /** @@ -949,95 +969,118 @@ build_proto(struct rte_crypto_op *op, dpaa_sec_session *ses) return cf; } -static int -dpaa_sec_enqueue_op(struct rte_crypto_op *op, struct dpaa_sec_qp *qp) -{ - struct dpaa_sec_job *cf; - dpaa_sec_session *ses; - struct qm_fd fd; - int ret; - uint32_t auth_only_len = op->sym->auth.data.length - - op->sym->cipher.data.length; - - if (op->sess_type == RTE_CRYPTO_OP_WITH_SESSION) - ses = (dpaa_sec_session *)get_session_private_data( - op->sym->session, cryptodev_driver_id); - else if (op->sess_type == RTE_CRYPTO_OP_SECURITY_SESSION) - ses = (dpaa_sec_session *)get_sec_session_private_data( - op->sym->sec_session); - else - return -ENOTSUP; - - if (unlikely(!ses->qp || ses->qp != qp)) { - PMD_INIT_LOG(DEBUG, "sess->qp - %p qp %p", ses->qp, qp); - if (dpaa_sec_attach_sess_q(qp, ses)) - return -1; - } - - /* - * Segmented buffer is not supported. - */ - if (!rte_pktmbuf_is_contiguous(op->sym->m_src)) { - op->status = RTE_CRYPTO_OP_STATUS_ERROR; - return -ENOTSUP; - } - if (is_auth_only(ses)) { - cf = build_auth_only(op, ses); - } else if (is_cipher_only(ses)) { - cf = build_cipher_only(op, ses); - } else if (is_aead(ses)) { - cf = build_cipher_auth_gcm(op, ses); - auth_only_len = ses->auth_only_len; - } else if (is_auth_cipher(ses)) { - cf = build_cipher_auth(op, ses); - } else if (is_proto_ipsec(ses)) { - cf = build_proto(op, ses); - } else { - PMD_TX_LOG(ERR, "not supported sec op"); - return -ENOTSUP; - } - if (unlikely(!cf)) - return -ENOMEM; - - memset(&fd, 0, sizeof(struct qm_fd)); - qm_fd_addr_set64(&fd, dpaa_mem_vtop(cf->sg)); - fd._format1 = qm_fd_compound; - fd.length29 = 2 * sizeof(struct qm_sg_entry); - /* Auth_only_len is set as 0 in descriptor and it is overwritten - * here in the fd.cmd which will update the DPOVRD reg. - */ - if (auth_only_len) - fd.cmd = 0x80000000 | auth_only_len; - do { - ret = qman_enqueue(ses->inq, &fd, 0); - } while (ret != 0); - - return 0; -} - static uint16_t dpaa_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops, uint16_t nb_ops) { /* Function to transmit the frames to given device and queuepair */ uint32_t loop; - int32_t ret; struct dpaa_sec_qp *dpaa_qp = (struct dpaa_sec_qp *)qp; uint16_t num_tx = 0; + struct qm_fd fds[DPAA_SEC_BURST], *fd; + uint32_t frames_to_send; + struct rte_crypto_op *op; + struct dpaa_sec_job *cf; + dpaa_sec_session *ses; + struct dpaa_sec_op_ctx *ctx; + uint32_t auth_only_len; + struct qman_fq *inq[DPAA_SEC_BURST]; + + while (nb_ops) { + frames_to_send = (nb_ops > DPAA_SEC_BURST) ? + DPAA_SEC_BURST : nb_ops; + for (loop = 0; loop < frames_to_send; loop++) { + op = *(ops++); + switch (op->sess_type) { + case RTE_CRYPTO_OP_WITH_SESSION: + ses = (dpaa_sec_session *) + get_session_private_data( + op->sym->session, + cryptodev_driver_id); + break; + case RTE_CRYPTO_OP_SECURITY_SESSION: + ses = (dpaa_sec_session *) + get_sec_session_private_data( + op->sym->sec_session); + break; + default: + PMD_TX_LOG(ERR, + "sessionless crypto op not supported"); + frames_to_send = loop; + nb_ops = loop; + goto send_pkts; + } + if (unlikely(!ses->qp || ses->qp != qp)) { + PMD_INIT_LOG(DEBUG, "sess->qp - %p qp %p", + ses->qp, qp); + if (dpaa_sec_attach_sess_q(qp, ses)) { + frames_to_send = loop; + nb_ops = loop; + goto send_pkts; + } + } - if (unlikely(nb_ops == 0)) - return 0; + /* + * Segmented buffer is not supported. + */ + if (!rte_pktmbuf_is_contiguous(op->sym->m_src)) { + op->status = RTE_CRYPTO_OP_STATUS_ERROR; + frames_to_send = loop; + nb_ops = loop; + goto send_pkts; + } + auth_only_len = op->sym->auth.data.length - + op->sym->cipher.data.length; + + if (is_auth_only(ses)) { + cf = build_auth_only(op, ses); + } else if (is_cipher_only(ses)) { + cf = build_cipher_only(op, ses); + } else if (is_aead(ses)) { + cf = build_cipher_auth_gcm(op, ses); + auth_only_len = ses->auth_only_len; + } else if (is_auth_cipher(ses)) { + cf = build_cipher_auth(op, ses); + } else if (is_proto_ipsec(ses)) { + cf = build_proto(op, ses); + } else { + PMD_TX_LOG(ERR, "not supported sec op"); + frames_to_send = loop; + nb_ops = loop; + goto send_pkts; + } + if (unlikely(!cf)) { + frames_to_send = loop; + nb_ops = loop; + goto send_pkts; + } - /*Prepare each packet which is to be sent*/ - for (loop = 0; loop < nb_ops; loop++) { - if (ops[loop]->sess_type == RTE_CRYPTO_OP_SESSIONLESS) { - PMD_TX_LOG(ERR, "sessionless crypto op not supported"); - return 0; + fd = &fds[loop]; + inq[loop] = ses->inq; + fd->opaque_addr = 0; + fd->cmd = 0; + ctx = container_of(cf, struct dpaa_sec_op_ctx, job); + qm_fd_addr_set64(fd, dpaa_mem_vtop_ctx(ctx, cf->sg)); + fd->_format1 = qm_fd_compound; + fd->length29 = 2 * sizeof(struct qm_sg_entry); + /* Auth_only_len is set as 0 in descriptor and it is + * overwritten here in the fd.cmd which will update + * the DPOVRD reg. + */ + if (auth_only_len) + fd->cmd = 0x80000000 | auth_only_len; + + } +send_pkts: + loop = 0; + while (loop < frames_to_send) { + loop += qman_enqueue_multi_fq(&inq[loop], &fds[loop], + frames_to_send - loop); } - ret = dpaa_sec_enqueue_op(ops[loop], dpaa_qp); - if (!ret) - num_tx++; + nb_ops -= frames_to_send; + num_tx += frames_to_send; } + dpaa_qp->tx_pkts += num_tx; dpaa_qp->tx_errs += nb_ops - num_tx; diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.h b/drivers/crypto/dpaa_sec/dpaa_sec.h index 578c46a..c53d9ae 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.h +++ b/drivers/crypto/dpaa_sec/dpaa_sec.h @@ -8,7 +8,7 @@ #define _DPAA_SEC_H_ #define NUM_POOL_CHANNELS 4 -#define DPAA_SEC_BURST 32 +#define DPAA_SEC_BURST 7 #define DPAA_SEC_ALG_UNSUPPORT (-1) #define TDES_CBC_IV_LEN 8 #define AES_CBC_IV_LEN 16 @@ -135,6 +135,7 @@ struct dpaa_sec_qp { #define RTE_DPAA_MAX_NB_SEC_QPS 1 #define RTE_DPAA_MAX_RX_QUEUE RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS +#define DPAA_MAX_DEQUEUE_NUM_FRAMES 63 /* internal sec queue interface */ struct dpaa_sec_dev_private {