crypto/dpaa: update the flib RTA
[dpdk.git] / drivers / crypto / dpaa_sec / dpaa_sec.c
index e456fd5..8cd1820 100644 (file)
@@ -103,13 +103,6 @@ dpaa_mem_vtop(void *vaddr)
        return (size_t)NULL;
 }
 
-/* virtual address conversin when mempool support is available for ctx */
-static inline phys_addr_t
-dpaa_mem_vtop_ctx(struct dpaa_sec_op_ctx *ctx, void *vaddr)
-{
-       return (size_t)vaddr - ctx->vtop_offset;
-}
-
 static inline void *
 dpaa_mem_ptov(rte_iova_t paddr)
 {
@@ -495,13 +488,15 @@ dpaa_sec_prep_cdb(dpaa_sec_session *ses)
                        if (ses->dir == DIR_ENC) {
                                shared_desc_len = cnstr_shdsc_ipsec_new_encap(
                                                cdb->sh_desc,
-                                               true, swap, &ses->encap_pdb,
+                                               true, swap, SHR_SERIAL,
+                                               &ses->encap_pdb,
                                                (uint8_t *)&ses->ip4_hdr,
                                                &alginfo_c, &alginfo_a);
                        } else if (ses->dir == DIR_DEC) {
                                shared_desc_len = cnstr_shdsc_ipsec_new_decap(
                                                cdb->sh_desc,
-                                               true, swap, &ses->decap_pdb,
+                                               true, swap, SHR_SERIAL,
+                                               &ses->decap_pdb,
                                                &alginfo_c, &alginfo_a);
                        }
                } else {
@@ -533,12 +528,25 @@ 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;
+       int num_rx_bufs, ret;
        struct qm_dqrr_entry *dq;
+       uint32_t vdqcr_flags = 0;
 
        fq = &qp->outq;
-       ret = qman_set_vdq(fq, (nb_ops > DPAA_MAX_DEQUEUE_NUM_FRAMES) ?
-                               DPAA_MAX_DEQUEUE_NUM_FRAMES : nb_ops);
+       /*
+        * Until request for four buffers, we provide exact number of buffers.
+        * Otherwise we do not set the QM_VDQCR_EXACT flag.
+        * Not setting QM_VDQCR_EXACT flag can provide two more buffers than
+        * requested, so we request two less in this case.
+        */
+       if (nb_ops < 4) {
+               vdqcr_flags = QM_VDQCR_EXACT;
+               num_rx_bufs = nb_ops;
+       } else {
+               num_rx_bufs = nb_ops > DPAA_MAX_DEQUEUE_NUM_FRAMES ?
+                       (DPAA_MAX_DEQUEUE_NUM_FRAMES - 2) : (nb_ops - 2);
+       }
+       ret = qman_set_vdq(fq, num_rx_bufs, vdqcr_flags);
        if (ret)
                return 0;
 
@@ -630,7 +638,7 @@ build_auth_only_sg(struct rte_crypto_op *op, dpaa_sec_session *ses)
        in_sg->extension = 1;
        in_sg->final = 1;
        in_sg->length = sym->auth.data.length;
-       qm_sg_entry_set64(in_sg, dpaa_mem_vtop_ctx(ctx, &cf->sg[2]));
+       qm_sg_entry_set64(in_sg, dpaa_mem_vtop(&cf->sg[2]));
 
        /* 1st seg */
        sg = in_sg + 1;
@@ -654,7 +662,7 @@ build_auth_only_sg(struct rte_crypto_op *op, dpaa_sec_session *ses)
                sg++;
                rte_memcpy(old_digest, sym->auth.digest.data,
                                ses->digest_length);
-               start_addr = dpaa_mem_vtop_ctx(ctx, old_digest);
+               start_addr = dpaa_mem_vtop(old_digest);
                qm_sg_entry_set64(sg, start_addr);
                sg->length = ses->digest_length;
                in_sg->length += ses->digest_length;
@@ -708,7 +716,7 @@ build_auth_only(struct rte_crypto_op *op, dpaa_sec_session *ses)
        if (is_decode(ses)) {
                /* need to extend the input to a compound frame */
                sg->extension = 1;
-               qm_sg_entry_set64(sg, dpaa_mem_vtop_ctx(ctx, &cf->sg[2]));
+               qm_sg_entry_set64(sg, dpaa_mem_vtop(&cf->sg[2]));
                sg->length = sym->auth.data.length + ses->digest_length;
                sg->final = 1;
                cpu_to_hw_sg(sg);
@@ -722,7 +730,7 @@ build_auth_only(struct rte_crypto_op *op, dpaa_sec_session *ses)
                cpu_to_hw_sg(sg);
 
                /* let's check digest by hw */
-               start_addr = dpaa_mem_vtop_ctx(ctx, old_digest);
+               start_addr = dpaa_mem_vtop(old_digest);
                sg++;
                qm_sg_entry_set64(sg, start_addr);
                sg->length = ses->digest_length;
@@ -775,7 +783,7 @@ build_cipher_only_sg(struct rte_crypto_op *op, dpaa_sec_session *ses)
        out_sg = &cf->sg[0];
        out_sg->extension = 1;
        out_sg->length = sym->cipher.data.length;
-       qm_sg_entry_set64(out_sg, dpaa_mem_vtop_ctx(ctx, &cf->sg[2]));
+       qm_sg_entry_set64(out_sg, dpaa_mem_vtop(&cf->sg[2]));
        cpu_to_hw_sg(out_sg);
 
        /* 1st seg */
@@ -804,7 +812,7 @@ build_cipher_only_sg(struct rte_crypto_op *op, dpaa_sec_session *ses)
        in_sg->length = sym->cipher.data.length + ses->iv.length;
 
        sg++;
-       qm_sg_entry_set64(in_sg, dpaa_mem_vtop_ctx(ctx, sg));
+       qm_sg_entry_set64(in_sg, dpaa_mem_vtop(sg));
        cpu_to_hw_sg(in_sg);
 
        /* IV */
@@ -871,7 +879,7 @@ build_cipher_only(struct rte_crypto_op *op, dpaa_sec_session *ses)
        sg->extension = 1;
        sg->final = 1;
        sg->length = sym->cipher.data.length + ses->iv.length;
-       qm_sg_entry_set64(sg, dpaa_mem_vtop_ctx(ctx, &cf->sg[2]));
+       qm_sg_entry_set64(sg, dpaa_mem_vtop(&cf->sg[2]));
        cpu_to_hw_sg(sg);
 
        sg = &cf->sg[2];
@@ -937,7 +945,7 @@ build_cipher_auth_gcm_sg(struct rte_crypto_op *op, dpaa_sec_session *ses)
 
        /* output sg entries */
        sg = &cf->sg[2];
-       qm_sg_entry_set64(out_sg, dpaa_mem_vtop_ctx(ctx, sg));
+       qm_sg_entry_set64(out_sg, dpaa_mem_vtop(sg));
        cpu_to_hw_sg(out_sg);
 
        /* 1st seg */
@@ -981,7 +989,7 @@ build_cipher_auth_gcm_sg(struct rte_crypto_op *op, dpaa_sec_session *ses)
 
        /* input sg entries */
        sg++;
-       qm_sg_entry_set64(in_sg, dpaa_mem_vtop_ctx(ctx, sg));
+       qm_sg_entry_set64(in_sg, dpaa_mem_vtop(sg));
        cpu_to_hw_sg(in_sg);
 
        /* 1st seg IV */
@@ -1018,7 +1026,7 @@ build_cipher_auth_gcm_sg(struct rte_crypto_op *op, dpaa_sec_session *ses)
                sg++;
                memcpy(ctx->digest, sym->aead.digest.data,
                        ses->digest_length);
-               qm_sg_entry_set64(sg, dpaa_mem_vtop_ctx(ctx, ctx->digest));
+               qm_sg_entry_set64(sg, dpaa_mem_vtop(ctx->digest));
                sg->length = ses->digest_length;
        }
        sg->final = 1;
@@ -1056,7 +1064,7 @@ build_cipher_auth_gcm(struct rte_crypto_op *op, dpaa_sec_session *ses)
        /* input */
        rte_prefetch0(cf->sg);
        sg = &cf->sg[2];
-       qm_sg_entry_set64(&cf->sg[1], dpaa_mem_vtop_ctx(ctx, sg));
+       qm_sg_entry_set64(&cf->sg[1], dpaa_mem_vtop(sg));
        if (is_encode(ses)) {
                qm_sg_entry_set64(sg, dpaa_mem_vtop(IV_ptr));
                sg->length = ses->iv.length;
@@ -1101,7 +1109,7 @@ build_cipher_auth_gcm(struct rte_crypto_op *op, dpaa_sec_session *ses)
                       ses->digest_length);
                sg++;
 
-               qm_sg_entry_set64(sg, dpaa_mem_vtop_ctx(ctx, ctx->digest));
+               qm_sg_entry_set64(sg, dpaa_mem_vtop(ctx->digest));
                sg->length = ses->digest_length;
                length += sg->length;
                sg->final = 1;
@@ -1115,7 +1123,7 @@ build_cipher_auth_gcm(struct rte_crypto_op *op, dpaa_sec_session *ses)
 
        /* output */
        sg++;
-       qm_sg_entry_set64(&cf->sg[0], dpaa_mem_vtop_ctx(ctx, sg));
+       qm_sg_entry_set64(&cf->sg[0], dpaa_mem_vtop(sg));
        qm_sg_entry_set64(sg,
                dst_start_addr + sym->aead.data.offset - ses->auth_only_len);
        sg->length = sym->aead.data.length + ses->auth_only_len;
@@ -1184,7 +1192,7 @@ build_cipher_auth_sg(struct rte_crypto_op *op, dpaa_sec_session *ses)
 
        /* output sg entries */
        sg = &cf->sg[2];
-       qm_sg_entry_set64(out_sg, dpaa_mem_vtop_ctx(ctx, sg));
+       qm_sg_entry_set64(out_sg, dpaa_mem_vtop(sg));
        cpu_to_hw_sg(out_sg);
 
        /* 1st seg */
@@ -1226,7 +1234,7 @@ build_cipher_auth_sg(struct rte_crypto_op *op, dpaa_sec_session *ses)
 
        /* input sg entries */
        sg++;
-       qm_sg_entry_set64(in_sg, dpaa_mem_vtop_ctx(ctx, sg));
+       qm_sg_entry_set64(in_sg, dpaa_mem_vtop(sg));
        cpu_to_hw_sg(in_sg);
 
        /* 1st seg IV */
@@ -1256,7 +1264,7 @@ build_cipher_auth_sg(struct rte_crypto_op *op, dpaa_sec_session *ses)
                sg++;
                memcpy(ctx->digest, sym->auth.digest.data,
                        ses->digest_length);
-               qm_sg_entry_set64(sg, dpaa_mem_vtop_ctx(ctx, ctx->digest));
+               qm_sg_entry_set64(sg, dpaa_mem_vtop(ctx->digest));
                sg->length = ses->digest_length;
        }
        sg->final = 1;
@@ -1293,7 +1301,7 @@ build_cipher_auth(struct rte_crypto_op *op, dpaa_sec_session *ses)
        /* input */
        rte_prefetch0(cf->sg);
        sg = &cf->sg[2];
-       qm_sg_entry_set64(&cf->sg[1], dpaa_mem_vtop_ctx(ctx, sg));
+       qm_sg_entry_set64(&cf->sg[1], dpaa_mem_vtop(sg));
        if (is_encode(ses)) {
                qm_sg_entry_set64(sg, dpaa_mem_vtop(IV_ptr));
                sg->length = ses->iv.length;
@@ -1323,7 +1331,7 @@ build_cipher_auth(struct rte_crypto_op *op, dpaa_sec_session *ses)
                       ses->digest_length);
                sg++;
 
-               qm_sg_entry_set64(sg, dpaa_mem_vtop_ctx(ctx, ctx->digest));
+               qm_sg_entry_set64(sg, dpaa_mem_vtop(ctx->digest));
                sg->length = ses->digest_length;
                length += sg->length;
                sg->final = 1;
@@ -1337,7 +1345,7 @@ build_cipher_auth(struct rte_crypto_op *op, dpaa_sec_session *ses)
 
        /* output */
        sg++;
-       qm_sg_entry_set64(&cf->sg[0], dpaa_mem_vtop_ctx(ctx, sg));
+       qm_sg_entry_set64(&cf->sg[0], dpaa_mem_vtop(sg));
        qm_sg_entry_set64(sg, dst_start_addr + sym->cipher.data.offset);
        sg->length = sym->cipher.data.length;
        length = sg->length;
@@ -1412,7 +1420,6 @@ dpaa_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops,
        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];
 
@@ -1424,7 +1431,7 @@ dpaa_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops,
                        switch (op->sess_type) {
                        case RTE_CRYPTO_OP_WITH_SESSION:
                                ses = (dpaa_sec_session *)
-                                       get_session_private_data(
+                                       get_sym_session_private_data(
                                                        op->sym->session,
                                                        cryptodev_driver_id);
                                break;
@@ -1497,8 +1504,7 @@ dpaa_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops,
                        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));
+                       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
@@ -1594,26 +1600,6 @@ dpaa_sec_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id,
        return 0;
 }
 
-/** Start queue pair */
-static int
-dpaa_sec_queue_pair_start(__rte_unused struct rte_cryptodev *dev,
-                         __rte_unused uint16_t queue_pair_id)
-{
-       PMD_INIT_FUNC_TRACE();
-
-       return 0;
-}
-
-/** Stop queue pair */
-static int
-dpaa_sec_queue_pair_stop(__rte_unused struct rte_cryptodev *dev,
-                        __rte_unused uint16_t queue_pair_id)
-{
-       PMD_INIT_FUNC_TRACE();
-
-       return 0;
-}
-
 /** Return the number of allocated queue pairs */
 static uint32_t
 dpaa_sec_queue_pair_count(struct rte_cryptodev *dev)
@@ -1625,7 +1611,7 @@ dpaa_sec_queue_pair_count(struct rte_cryptodev *dev)
 
 /** Returns the size of session structure */
 static unsigned int
-dpaa_sec_session_get_size(struct rte_cryptodev *dev __rte_unused)
+dpaa_sec_sym_session_get_size(struct rte_cryptodev *dev __rte_unused)
 {
        PMD_INIT_FUNC_TRACE();
 
@@ -1763,34 +1749,6 @@ dpaa_sec_attach_sess_q(struct dpaa_sec_qp *qp, dpaa_sec_session *sess)
        return ret;
 }
 
-static int
-dpaa_sec_qp_attach_sess(struct rte_cryptodev *dev __rte_unused,
-                       uint16_t qp_id __rte_unused,
-                       void *ses __rte_unused)
-{
-       PMD_INIT_FUNC_TRACE();
-       return 0;
-}
-
-static int
-dpaa_sec_qp_detach_sess(struct rte_cryptodev *dev,
-                       uint16_t qp_id  __rte_unused,
-                       void *ses)
-{
-       dpaa_sec_session *sess = ses;
-       struct dpaa_sec_dev_private *qi = dev->data->dev_private;
-
-       PMD_INIT_FUNC_TRACE();
-
-       if (sess->inq)
-               dpaa_sec_detach_rxq(qi, sess->inq);
-       sess->inq = NULL;
-
-       sess->qp = NULL;
-
-       return 0;
-}
-
 static int
 dpaa_sec_set_session_parameters(struct rte_cryptodev *dev,
                            struct rte_crypto_sym_xform *xform, void *sess)
@@ -1868,7 +1826,7 @@ err1:
 }
 
 static int
-dpaa_sec_session_configure(struct rte_cryptodev *dev,
+dpaa_sec_sym_session_configure(struct rte_cryptodev *dev,
                struct rte_crypto_sym_xform *xform,
                struct rte_cryptodev_sym_session *sess,
                struct rte_mempool *mempool)
@@ -1892,7 +1850,7 @@ dpaa_sec_session_configure(struct rte_cryptodev *dev,
                return ret;
        }
 
-       set_session_private_data(sess, dev->driver_id,
+       set_sym_session_private_data(sess, dev->driver_id,
                        sess_private_data);
 
 
@@ -1901,12 +1859,12 @@ dpaa_sec_session_configure(struct rte_cryptodev *dev,
 
 /** Clear the memory of session so it doesn't leave key material behind */
 static void
-dpaa_sec_session_clear(struct rte_cryptodev *dev,
+dpaa_sec_sym_session_clear(struct rte_cryptodev *dev,
                struct rte_cryptodev_sym_session *sess)
 {
        struct dpaa_sec_dev_private *qi = dev->data->dev_private;
        uint8_t index = dev->driver_id;
-       void *sess_priv = get_session_private_data(sess, index);
+       void *sess_priv = get_sym_session_private_data(sess, index);
 
        PMD_INIT_FUNC_TRACE();
 
@@ -1920,7 +1878,7 @@ dpaa_sec_session_clear(struct rte_cryptodev *dev,
                rte_free(s->cipher_key.data);
                rte_free(s->auth_key.data);
                memset(s, 0, sizeof(dpaa_sec_session));
-               set_session_private_data(sess, index, NULL);
+               set_sym_session_private_data(sess, index, NULL);
                rte_mempool_put(sess_mp, sess_priv);
        }
 }
@@ -2224,9 +2182,6 @@ dpaa_sec_dev_infos_get(struct rte_cryptodev *dev,
                info->feature_flags = dev->feature_flags;
                info->capabilities = dpaa_sec_capabilities;
                info->sym.max_nb_sessions = internals->max_nb_sessions;
-               info->sym.max_nb_sessions_per_qp =
-                       RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS /
-                       RTE_DPAA_MAX_NB_SEC_QPS;
                info->driver_id = cryptodev_driver_id;
        }
 }
@@ -2239,14 +2194,10 @@ static struct rte_cryptodev_ops crypto_ops = {
        .dev_infos_get        = dpaa_sec_dev_infos_get,
        .queue_pair_setup     = dpaa_sec_queue_pair_setup,
        .queue_pair_release   = dpaa_sec_queue_pair_release,
-       .queue_pair_start     = dpaa_sec_queue_pair_start,
-       .queue_pair_stop      = dpaa_sec_queue_pair_stop,
        .queue_pair_count     = dpaa_sec_queue_pair_count,
-       .session_get_size     = dpaa_sec_session_get_size,
-       .session_configure    = dpaa_sec_session_configure,
-       .session_clear        = dpaa_sec_session_clear,
-       .qp_attach_session    = dpaa_sec_qp_attach_sess,
-       .qp_detach_session    = dpaa_sec_qp_detach_sess,
+       .sym_session_get_size     = dpaa_sec_sym_session_get_size,
+       .sym_session_configure    = dpaa_sec_sym_session_configure,
+       .sym_session_clear        = dpaa_sec_sym_session_clear
 };
 
 static const struct rte_security_capability *
@@ -2305,7 +2256,11 @@ dpaa_sec_dev_init(struct rte_cryptodev *cryptodev)
                        RTE_CRYPTODEV_FF_HW_ACCELERATED |
                        RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |
                        RTE_CRYPTODEV_FF_SECURITY |
-                       RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER;
+                       RTE_CRYPTODEV_FF_IN_PLACE_SGL |
+                       RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT |
+                       RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT |
+                       RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT |
+                       RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT;
 
        internals = cryptodev->data->dev_private;
        internals->max_nb_queue_pairs = RTE_DPAA_MAX_NB_SEC_QPS;
@@ -2363,7 +2318,7 @@ init_error:
 }
 
 static int
-cryptodev_dpaa_sec_probe(struct rte_dpaa_driver *dpaa_drv,
+cryptodev_dpaa_sec_probe(struct rte_dpaa_driver *dpaa_drv __rte_unused,
                                struct rte_dpaa_device *dpaa_dev)
 {
        struct rte_cryptodev *cryptodev;
@@ -2391,7 +2346,6 @@ cryptodev_dpaa_sec_probe(struct rte_dpaa_driver *dpaa_drv,
 
        dpaa_dev->crypto_dev = cryptodev;
        cryptodev->device = &dpaa_dev->device;
-       cryptodev->device->driver = &dpaa_drv->driver;
 
        /* init user callbacks */
        TAILQ_INIT(&(cryptodev->link_intr_cbs));
@@ -2458,9 +2412,7 @@ RTE_PMD_REGISTER_DPAA(CRYPTODEV_NAME_DPAA_SEC_PMD, rte_dpaa_sec_driver);
 RTE_PMD_REGISTER_CRYPTO_DRIVER(dpaa_sec_crypto_drv, rte_dpaa_sec_driver.driver,
                cryptodev_driver_id);
 
-RTE_INIT(dpaa_sec_init_log);
-static void
-dpaa_sec_init_log(void)
+RTE_INIT(dpaa_sec_init_log)
 {
        dpaa_logtype_sec = rte_log_register("pmd.crypto.dpaa");
        if (dpaa_logtype_sec >= 0)