common/cnxk: fix channel number setting in MCAM entries
[dpdk.git] / lib / cryptodev / rte_cryptodev.c
index 3500a2d..42f3221 100644 (file)
@@ -177,10 +177,17 @@ const char *rte_crypto_asym_op_strings[] = {
        [RTE_CRYPTO_ASYM_OP_ENCRYPT]    = "encrypt",
        [RTE_CRYPTO_ASYM_OP_DECRYPT]    = "decrypt",
        [RTE_CRYPTO_ASYM_OP_SIGN]       = "sign",
-       [RTE_CRYPTO_ASYM_OP_VERIFY]     = "verify",
-       [RTE_CRYPTO_ASYM_OP_PRIVATE_KEY_GENERATE]       = "priv_key_generate",
-       [RTE_CRYPTO_ASYM_OP_PUBLIC_KEY_GENERATE] = "pub_key_generate",
-       [RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE] = "sharedsecret_compute",
+       [RTE_CRYPTO_ASYM_OP_VERIFY]     = "verify"
+};
+
+/**
+ * Asymmetric crypto key exchange operation strings identifiers.
+ */
+const char *rte_crypto_asym_ke_strings[] = {
+       [RTE_CRYPTO_ASYM_KE_PRIV_KEY_GENERATE] = "priv_key_generate",
+       [RTE_CRYPTO_ASYM_KE_PUB_KEY_GENERATE] = "pub_key_generate",
+       [RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE] = "sharedsecret_compute",
+       [RTE_CRYPTO_ASYM_KE_PUB_KEY_VERIFY] = "pub_ec_key_verify"
 };
 
 /**
@@ -2051,6 +2058,8 @@ rte_cryptodev_asym_session_free(uint8_t dev_id, void *sess)
 
        dev->dev_ops->asym_session_clear(dev, sess);
 
+       rte_free(((struct rte_cryptodev_asym_session *)sess)->event_mdata);
+
        /* Return session to mempool */
        sess_mp = rte_mempool_from_obj(sess);
        rte_mempool_put(sess_mp, sess);
@@ -2259,6 +2268,47 @@ rte_cryptodev_configure_raw_dp_ctx(uint8_t dev_id, uint16_t qp_id,
                        sess_type, session_ctx, is_update);
 }
 
+int
+rte_cryptodev_session_event_mdata_set(uint8_t dev_id, void *sess,
+       enum rte_crypto_op_type op_type,
+       enum rte_crypto_op_sess_type sess_type,
+       void *ev_mdata,
+       uint16_t size)
+{
+       struct rte_cryptodev *dev;
+
+       if (sess == NULL || ev_mdata == NULL)
+               return -EINVAL;
+
+       if (!rte_cryptodev_is_valid_dev(dev_id))
+               goto skip_pmd_op;
+
+       dev = rte_cryptodev_pmd_get_dev(dev_id);
+       if (dev->dev_ops->session_ev_mdata_set == NULL)
+               goto skip_pmd_op;
+
+       return (*dev->dev_ops->session_ev_mdata_set)(dev, sess, op_type,
+                       sess_type, ev_mdata);
+
+skip_pmd_op:
+       if (op_type == RTE_CRYPTO_OP_TYPE_SYMMETRIC)
+               return rte_cryptodev_sym_session_set_user_data(sess, ev_mdata,
+                               size);
+       else if (op_type == RTE_CRYPTO_OP_TYPE_ASYMMETRIC) {
+               struct rte_cryptodev_asym_session *s = sess;
+
+               if (s->event_mdata == NULL) {
+                       s->event_mdata = rte_malloc(NULL, size, 0);
+                       if (s->event_mdata == NULL)
+                               return -ENOMEM;
+               }
+               rte_memcpy(s->event_mdata, ev_mdata, size);
+
+               return 0;
+       } else
+               return -ENOTSUP;
+}
+
 uint32_t
 rte_cryptodev_raw_enqueue_burst(struct rte_crypto_raw_dp_ctx *ctx,
        struct rte_crypto_sym_vec *vec, union rte_crypto_sym_ofs ofs,