event/cnxk: reduce workslot memory consumption
[dpdk.git] / drivers / crypto / openssl / rte_openssl_pmd.c
index b820f61..5794ed8 100644 (file)
@@ -5,7 +5,7 @@
 #include <rte_common.h>
 #include <rte_hexdump.h>
 #include <rte_cryptodev.h>
-#include <rte_cryptodev_pmd.h>
+#include <cryptodev_pmd.h>
 #include <rte_bus_vdev.h>
 #include <rte_malloc.h>
 #include <rte_cpuflags.h>
@@ -18,7 +18,6 @@
 
 #define DES_BLOCK_SIZE 8
 
-int openssl_logtype_driver;
 static uint8_t cryptodev_driver_id;
 
 #if (OPENSSL_VERSION_NUMBER < 0x10100000L)
@@ -1115,7 +1114,7 @@ process_openssl_auth_encryption_ccm(struct rte_mbuf *mbuf_src, int offset,
                if (EVP_EncryptUpdate(ctx, NULL, &len, aad + 18, aadlen) <= 0)
                        goto process_auth_encryption_ccm_err;
 
-       if (srclen > 0)
+       if (srclen >= 0)
                if (process_openssl_encryption_update(mbuf_src, offset, &dst,
                                srclen, ctx, 0))
                        goto process_auth_encryption_ccm_err;
@@ -1198,7 +1197,7 @@ process_openssl_auth_decryption_ccm(struct rte_mbuf *mbuf_src, int offset,
                if (EVP_DecryptUpdate(ctx, NULL, &len, aad + 18, aadlen) <= 0)
                        goto process_auth_decryption_ccm_err;
 
-       if (srclen > 0)
+       if (srclen >= 0)
                if (process_openssl_decryption_update(mbuf_src, offset, &dst,
                                srclen, ctx, 0))
                        return -EFAULT;
@@ -2038,6 +2037,26 @@ process_asym_op(struct openssl_qp *qp, struct rte_crypto_op *op,
        return retval;
 }
 
+static void
+copy_plaintext(struct rte_mbuf *m_src, struct rte_mbuf *m_dst,
+               struct rte_crypto_op *op)
+{
+       uint8_t *p_src, *p_dst;
+
+       p_src = rte_pktmbuf_mtod(m_src, uint8_t *);
+       p_dst = rte_pktmbuf_mtod(m_dst, uint8_t *);
+
+       /**
+        * Copy the content between cipher offset and auth offset
+        * for generating correct digest.
+        */
+       if (op->sym->cipher.data.offset > op->sym->auth.data.offset)
+               memcpy(p_dst + op->sym->auth.data.offset,
+                               p_src + op->sym->auth.data.offset,
+                               op->sym->cipher.data.offset -
+                               op->sym->auth.data.offset);
+}
+
 /** Process crypto operation for mbuf */
 static int
 process_op(struct openssl_qp *qp, struct rte_crypto_op *op,
@@ -2060,6 +2079,9 @@ process_op(struct openssl_qp *qp, struct rte_crypto_op *op,
                break;
        case OPENSSL_CHAIN_CIPHER_AUTH:
                process_openssl_cipher_op(op, sess, msrc, mdst);
+               /* OOP */
+               if (msrc != mdst)
+                       copy_plaintext(msrc, mdst, op);
                process_openssl_auth_op(qp, op, sess, mdst, mdst);
                break;
        case OPENSSL_CHAIN_AUTH_CIPHER:
@@ -2184,12 +2206,15 @@ cryptodev_openssl_create(const char *name,
                        RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT |
                        RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO |
                        RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_EXP |
-                       RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_QT;
+                       RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_QT |
+                       RTE_CRYPTODEV_FF_SYM_SESSIONLESS;
 
        internals = dev->data->dev_private;
 
        internals->max_nb_qpairs = init_params->max_nb_queue_pairs;
 
+       rte_cryptodev_pmd_probing_finish(dev);
+
        return 0;
 
 init_error:
@@ -2255,8 +2280,4 @@ RTE_PMD_REGISTER_PARAM_STRING(CRYPTODEV_NAME_OPENSSL_PMD,
        "socket_id=<int>");
 RTE_PMD_REGISTER_CRYPTO_DRIVER(openssl_crypto_drv,
                cryptodev_openssl_pmd_drv.driver, cryptodev_driver_id);
-
-RTE_INIT(openssl_init_log)
-{
-       openssl_logtype_driver = rte_log_register("pmd.crypto.openssl");
-}
+RTE_LOG_REGISTER_DEFAULT(openssl_logtype_driver, INFO);