aboutsummaryrefslogtreecommitdiffstats
path: root/common/dpdk/recipes-extended/dpdk/dpdk/dpdk-dev-v4-04-20-crypto-ccp-support-session-related-crypto-pmd-ops.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/dpdk/recipes-extended/dpdk/dpdk/dpdk-dev-v4-04-20-crypto-ccp-support-session-related-crypto-pmd-ops.patch')
-rw-r--r--common/dpdk/recipes-extended/dpdk/dpdk/dpdk-dev-v4-04-20-crypto-ccp-support-session-related-crypto-pmd-ops.patch782
1 files changed, 0 insertions, 782 deletions
diff --git a/common/dpdk/recipes-extended/dpdk/dpdk/dpdk-dev-v4-04-20-crypto-ccp-support-session-related-crypto-pmd-ops.patch b/common/dpdk/recipes-extended/dpdk/dpdk/dpdk-dev-v4-04-20-crypto-ccp-support-session-related-crypto-pmd-ops.patch
deleted file mode 100644
index 4cac48af..00000000
--- a/common/dpdk/recipes-extended/dpdk/dpdk/dpdk-dev-v4-04-20-crypto-ccp-support-session-related-crypto-pmd-ops.patch
+++ /dev/null
@@ -1,782 +0,0 @@
-From patchwork Fri Mar 9 08:35:04 2018
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [dpdk-dev, v4,
- 04/20] crypto/ccp: support session related crypto pmd ops
-From: Ravi Kumar <ravi1.kumar@amd.com>
-X-Patchwork-Id: 35803
-X-Patchwork-Delegate: pablo.de.lara.guarch@intel.com
-Message-Id: <1520584520-130522-4-git-send-email-Ravi1.kumar@amd.com>
-List-Id: dev.dpdk.org
-To: dev@dpdk.org
-Cc: pablo.de.lara.guarch@intel.com
-Date: Fri, 9 Mar 2018 03:35:04 -0500
-
-Signed-off-by: Ravi Kumar <Ravi1.kumar@amd.com>
----
- drivers/crypto/ccp/Makefile | 3 +-
- drivers/crypto/ccp/ccp_crypto.c | 229 +++++++++++++++++++++++++++++++++
- drivers/crypto/ccp/ccp_crypto.h | 267 +++++++++++++++++++++++++++++++++++++++
- drivers/crypto/ccp/ccp_dev.h | 129 +++++++++++++++++++
- drivers/crypto/ccp/ccp_pmd_ops.c | 61 ++++++++-
- 5 files changed, 685 insertions(+), 4 deletions(-)
- create mode 100644 drivers/crypto/ccp/ccp_crypto.c
- create mode 100644 drivers/crypto/ccp/ccp_crypto.h
-
-diff --git a/drivers/crypto/ccp/Makefile b/drivers/crypto/ccp/Makefile
-index 5e58c31..5241465 100644
---- a/drivers/crypto/ccp/Makefile
-+++ b/drivers/crypto/ccp/Makefile
-@@ -51,8 +51,9 @@ EXPORT_MAP := rte_pmd_ccp_version.map
-
- # library source files
- SRCS-$(CONFIG_RTE_LIBRTE_PMD_CCP) += rte_ccp_pmd.c
--SRCS-$(CONFIG_RTE_LIBRTE_PMD_CCP) += ccp_pmd_ops.c
-+SRCS-$(CONFIG_RTE_LIBRTE_PMD_CCP) += ccp_crypto.c
- SRCS-$(CONFIG_RTE_LIBRTE_PMD_CCP) += ccp_dev.c
- SRCS-$(CONFIG_RTE_LIBRTE_PMD_CCP) += ccp_pci.c
-+SRCS-$(CONFIG_RTE_LIBRTE_PMD_CCP) += ccp_pmd_ops.c
-
- include $(RTE_SDK)/mk/rte.lib.mk
-diff --git a/drivers/crypto/ccp/ccp_crypto.c b/drivers/crypto/ccp/ccp_crypto.c
-new file mode 100644
-index 0000000..c365c0f
---- /dev/null
-+++ b/drivers/crypto/ccp/ccp_crypto.c
-@@ -0,0 +1,229 @@
-+/*-
-+ * Copyright(c) 2018 Advanced Micro Devices, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * * Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * * Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * * Neither the name of the copyright holder nor the names of its
-+ * contributors may be used to endorse or promote products derived from
-+ * this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#include <dirent.h>
-+#include <fcntl.h>
-+#include <stdio.h>
-+#include <string.h>
-+#include <sys/mman.h>
-+#include <sys/queue.h>
-+#include <sys/types.h>
-+#include <unistd.h>
-+
-+#include <rte_hexdump.h>
-+#include <rte_memzone.h>
-+#include <rte_malloc.h>
-+#include <rte_memory.h>
-+#include <rte_spinlock.h>
-+#include <rte_string_fns.h>
-+#include <rte_cryptodev_pmd.h>
-+
-+#include "ccp_dev.h"
-+#include "ccp_crypto.h"
-+#include "ccp_pci.h"
-+#include "ccp_pmd_private.h"
-+
-+static enum ccp_cmd_order
-+ccp_get_cmd_id(const struct rte_crypto_sym_xform *xform)
-+{
-+ enum ccp_cmd_order res = CCP_CMD_NOT_SUPPORTED;
-+
-+ if (xform == NULL)
-+ return res;
-+ if (xform->type == RTE_CRYPTO_SYM_XFORM_AUTH) {
-+ if (xform->next == NULL)
-+ return CCP_CMD_AUTH;
-+ else if (xform->next->type == RTE_CRYPTO_SYM_XFORM_CIPHER)
-+ return CCP_CMD_HASH_CIPHER;
-+ }
-+ if (xform->type == RTE_CRYPTO_SYM_XFORM_CIPHER) {
-+ if (xform->next == NULL)
-+ return CCP_CMD_CIPHER;
-+ else if (xform->next->type == RTE_CRYPTO_SYM_XFORM_AUTH)
-+ return CCP_CMD_CIPHER_HASH;
-+ }
-+ if (xform->type == RTE_CRYPTO_SYM_XFORM_AEAD)
-+ return CCP_CMD_COMBINED;
-+ return res;
-+}
-+
-+/* configure session */
-+static int
-+ccp_configure_session_cipher(struct ccp_session *sess,
-+ const struct rte_crypto_sym_xform *xform)
-+{
-+ const struct rte_crypto_cipher_xform *cipher_xform = NULL;
-+
-+ cipher_xform = &xform->cipher;
-+
-+ /* set cipher direction */
-+ if (cipher_xform->op == RTE_CRYPTO_CIPHER_OP_ENCRYPT)
-+ sess->cipher.dir = CCP_CIPHER_DIR_ENCRYPT;
-+ else
-+ sess->cipher.dir = CCP_CIPHER_DIR_DECRYPT;
-+
-+ /* set cipher key */
-+ sess->cipher.key_length = cipher_xform->key.length;
-+ rte_memcpy(sess->cipher.key, cipher_xform->key.data,
-+ cipher_xform->key.length);
-+
-+ /* set iv parameters */
-+ sess->iv.offset = cipher_xform->iv.offset;
-+ sess->iv.length = cipher_xform->iv.length;
-+
-+ switch (cipher_xform->algo) {
-+ default:
-+ CCP_LOG_ERR("Unsupported cipher algo");
-+ return -1;
-+ }
-+
-+
-+ switch (sess->cipher.engine) {
-+ default:
-+ CCP_LOG_ERR("Invalid CCP Engine");
-+ return -ENOTSUP;
-+ }
-+ return 0;
-+}
-+
-+static int
-+ccp_configure_session_auth(struct ccp_session *sess,
-+ const struct rte_crypto_sym_xform *xform)
-+{
-+ const struct rte_crypto_auth_xform *auth_xform = NULL;
-+
-+ auth_xform = &xform->auth;
-+
-+ sess->auth.digest_length = auth_xform->digest_length;
-+ if (auth_xform->op == RTE_CRYPTO_AUTH_OP_GENERATE)
-+ sess->auth.op = CCP_AUTH_OP_GENERATE;
-+ else
-+ sess->auth.op = CCP_AUTH_OP_VERIFY;
-+ switch (auth_xform->algo) {
-+ default:
-+ CCP_LOG_ERR("Unsupported hash algo");
-+ return -ENOTSUP;
-+ }
-+ return 0;
-+}
-+
-+static int
-+ccp_configure_session_aead(struct ccp_session *sess,
-+ const struct rte_crypto_sym_xform *xform)
-+{
-+ const struct rte_crypto_aead_xform *aead_xform = NULL;
-+
-+ aead_xform = &xform->aead;
-+
-+ sess->cipher.key_length = aead_xform->key.length;
-+ rte_memcpy(sess->cipher.key, aead_xform->key.data,
-+ aead_xform->key.length);
-+
-+ if (aead_xform->op == RTE_CRYPTO_AEAD_OP_ENCRYPT) {
-+ sess->cipher.dir = CCP_CIPHER_DIR_ENCRYPT;
-+ sess->auth.op = CCP_AUTH_OP_GENERATE;
-+ } else {
-+ sess->cipher.dir = CCP_CIPHER_DIR_DECRYPT;
-+ sess->auth.op = CCP_AUTH_OP_VERIFY;
-+ }
-+ sess->auth.aad_length = aead_xform->aad_length;
-+ sess->auth.digest_length = aead_xform->digest_length;
-+
-+ /* set iv parameters */
-+ sess->iv.offset = aead_xform->iv.offset;
-+ sess->iv.length = aead_xform->iv.length;
-+
-+ switch (aead_xform->algo) {
-+ default:
-+ CCP_LOG_ERR("Unsupported aead algo");
-+ return -ENOTSUP;
-+ }
-+ return 0;
-+}
-+
-+int
-+ccp_set_session_parameters(struct ccp_session *sess,
-+ const struct rte_crypto_sym_xform *xform)
-+{
-+ const struct rte_crypto_sym_xform *cipher_xform = NULL;
-+ const struct rte_crypto_sym_xform *auth_xform = NULL;
-+ const struct rte_crypto_sym_xform *aead_xform = NULL;
-+ int ret = 0;
-+
-+ sess->cmd_id = ccp_get_cmd_id(xform);
-+
-+ switch (sess->cmd_id) {
-+ case CCP_CMD_CIPHER:
-+ cipher_xform = xform;
-+ break;
-+ case CCP_CMD_AUTH:
-+ auth_xform = xform;
-+ break;
-+ case CCP_CMD_CIPHER_HASH:
-+ cipher_xform = xform;
-+ auth_xform = xform->next;
-+ break;
-+ case CCP_CMD_HASH_CIPHER:
-+ auth_xform = xform;
-+ cipher_xform = xform->next;
-+ break;
-+ case CCP_CMD_COMBINED:
-+ aead_xform = xform;
-+ break;
-+ default:
-+ CCP_LOG_ERR("Unsupported cmd_id");
-+ return -1;
-+ }
-+
-+ /* Default IV length = 0 */
-+ sess->iv.length = 0;
-+ if (cipher_xform) {
-+ ret = ccp_configure_session_cipher(sess, cipher_xform);
-+ if (ret != 0) {
-+ CCP_LOG_ERR("Invalid/unsupported cipher parameters");
-+ return ret;
-+ }
-+ }
-+ if (auth_xform) {
-+ ret = ccp_configure_session_auth(sess, auth_xform);
-+ if (ret != 0) {
-+ CCP_LOG_ERR("Invalid/unsupported auth parameters");
-+ return ret;
-+ }
-+ }
-+ if (aead_xform) {
-+ ret = ccp_configure_session_aead(sess, aead_xform);
-+ if (ret != 0) {
-+ CCP_LOG_ERR("Invalid/unsupported aead parameters");
-+ return ret;
-+ }
-+ }
-+ return ret;
-+}
-diff --git a/drivers/crypto/ccp/ccp_crypto.h b/drivers/crypto/ccp/ccp_crypto.h
-new file mode 100644
-index 0000000..346d5ee
---- /dev/null
-+++ b/drivers/crypto/ccp/ccp_crypto.h
-@@ -0,0 +1,267 @@
-+/*-
-+ * Copyright(c) 2018 Advanced Micro Devices, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * * Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * * Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * * Neither the name of the copyright holder nor the names of its
-+ * contributors may be used to endorse or promote products derived from
-+ * this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#ifndef _CCP_CRYPTO_H_
-+#define _CCP_CRYPTO_H_
-+
-+#include <limits.h>
-+#include <stdbool.h>
-+#include <stdint.h>
-+#include <string.h>
-+
-+#include <rte_atomic.h>
-+#include <rte_byteorder.h>
-+#include <rte_io.h>
-+#include <rte_pci.h>
-+#include <rte_spinlock.h>
-+#include <rte_crypto_sym.h>
-+#include <rte_cryptodev.h>
-+
-+#include "ccp_dev.h"
-+
-+#define CCP_SHA3_CTX_SIZE 200
-+/**
-+ * CCP supported AES modes
-+ */
-+enum ccp_aes_mode {
-+ CCP_AES_MODE_ECB = 0,
-+ CCP_AES_MODE_CBC,
-+ CCP_AES_MODE_OFB,
-+ CCP_AES_MODE_CFB,
-+ CCP_AES_MODE_CTR,
-+ CCP_AES_MODE_CMAC,
-+ CCP_AES_MODE_GHASH,
-+ CCP_AES_MODE_GCTR,
-+ CCP_AES_MODE__LAST,
-+};
-+
-+/**
-+ * CCP AES GHASH mode
-+ */
-+enum ccp_aes_ghash_mode {
-+ CCP_AES_MODE_GHASH_AAD = 0,
-+ CCP_AES_MODE_GHASH_FINAL
-+};
-+
-+/**
-+ * CCP supported AES types
-+ */
-+enum ccp_aes_type {
-+ CCP_AES_TYPE_128 = 0,
-+ CCP_AES_TYPE_192,
-+ CCP_AES_TYPE_256,
-+ CCP_AES_TYPE__LAST,
-+};
-+
-+/***** 3DES engine *****/
-+
-+/**
-+ * CCP supported DES/3DES modes
-+ */
-+enum ccp_des_mode {
-+ CCP_DES_MODE_ECB = 0, /* Not supported */
-+ CCP_DES_MODE_CBC,
-+ CCP_DES_MODE_CFB,
-+};
-+
-+/**
-+ * CCP supported DES types
-+ */
-+enum ccp_des_type {
-+ CCP_DES_TYPE_128 = 0, /* 112 + 16 parity */
-+ CCP_DES_TYPE_192, /* 168 + 24 parity */
-+ CCP_DES_TYPE__LAST,
-+};
-+
-+/***** SHA engine *****/
-+
-+/**
-+ * ccp_sha_type - type of SHA operation
-+ *
-+ * @CCP_SHA_TYPE_1: SHA-1 operation
-+ * @CCP_SHA_TYPE_224: SHA-224 operation
-+ * @CCP_SHA_TYPE_256: SHA-256 operation
-+ */
-+enum ccp_sha_type {
-+ CCP_SHA_TYPE_1 = 1,
-+ CCP_SHA_TYPE_224,
-+ CCP_SHA_TYPE_256,
-+ CCP_SHA_TYPE_384,
-+ CCP_SHA_TYPE_512,
-+ CCP_SHA_TYPE_RSVD1,
-+ CCP_SHA_TYPE_RSVD2,
-+ CCP_SHA3_TYPE_224,
-+ CCP_SHA3_TYPE_256,
-+ CCP_SHA3_TYPE_384,
-+ CCP_SHA3_TYPE_512,
-+ CCP_SHA_TYPE__LAST,
-+};
-+
-+/**
-+ * CCP supported cipher algorithms
-+ */
-+enum ccp_cipher_algo {
-+ CCP_CIPHER_ALGO_AES_CBC = 0,
-+ CCP_CIPHER_ALGO_AES_ECB,
-+ CCP_CIPHER_ALGO_AES_CTR,
-+ CCP_CIPHER_ALGO_AES_GCM,
-+ CCP_CIPHER_ALGO_3DES_CBC,
-+};
-+
-+/**
-+ * CCP cipher operation type
-+ */
-+enum ccp_cipher_dir {
-+ CCP_CIPHER_DIR_DECRYPT = 0,
-+ CCP_CIPHER_DIR_ENCRYPT = 1,
-+};
-+
-+/**
-+ * CCP supported hash algorithms
-+ */
-+enum ccp_hash_algo {
-+ CCP_AUTH_ALGO_SHA1 = 0,
-+ CCP_AUTH_ALGO_SHA1_HMAC,
-+ CCP_AUTH_ALGO_SHA224,
-+ CCP_AUTH_ALGO_SHA224_HMAC,
-+ CCP_AUTH_ALGO_SHA3_224,
-+ CCP_AUTH_ALGO_SHA3_224_HMAC,
-+ CCP_AUTH_ALGO_SHA256,
-+ CCP_AUTH_ALGO_SHA256_HMAC,
-+ CCP_AUTH_ALGO_SHA3_256,
-+ CCP_AUTH_ALGO_SHA3_256_HMAC,
-+ CCP_AUTH_ALGO_SHA384,
-+ CCP_AUTH_ALGO_SHA384_HMAC,
-+ CCP_AUTH_ALGO_SHA3_384,
-+ CCP_AUTH_ALGO_SHA3_384_HMAC,
-+ CCP_AUTH_ALGO_SHA512,
-+ CCP_AUTH_ALGO_SHA512_HMAC,
-+ CCP_AUTH_ALGO_SHA3_512,
-+ CCP_AUTH_ALGO_SHA3_512_HMAC,
-+ CCP_AUTH_ALGO_AES_CMAC,
-+ CCP_AUTH_ALGO_AES_GCM,
-+#ifdef RTE_LIBRTE_PMD_CCP_CPU_AUTH
-+ CCP_AUTH_ALGO_MD5_HMAC,
-+#endif
-+};
-+
-+/**
-+ * CCP hash operation type
-+ */
-+enum ccp_hash_op {
-+ CCP_AUTH_OP_GENERATE = 0,
-+ CCP_AUTH_OP_VERIFY = 1,
-+};
-+
-+/* CCP crypto private session structure */
-+struct ccp_session {
-+ enum ccp_cmd_order cmd_id;
-+ /**< chain order mode */
-+ struct {
-+ uint16_t length;
-+ uint16_t offset;
-+ } iv;
-+ /**< IV parameters */
-+ struct {
-+ enum ccp_cipher_algo algo;
-+ enum ccp_engine engine;
-+ union {
-+ enum ccp_aes_mode aes_mode;
-+ enum ccp_des_mode des_mode;
-+ } um;
-+ union {
-+ enum ccp_aes_type aes_type;
-+ enum ccp_des_type des_type;
-+ } ut;
-+ enum ccp_cipher_dir dir;
-+ uint64_t key_length;
-+ /**< max cipher key size 256 bits */
-+ uint8_t key[32];
-+ /**ccp key format*/
-+ uint8_t key_ccp[32];
-+ phys_addr_t key_phys;
-+ /**AES-ctr nonce(4) iv(8) ctr*/
-+ uint8_t nonce[32];
-+ phys_addr_t nonce_phys;
-+ } cipher;
-+ /**< Cipher Parameters */
-+
-+ struct {
-+ enum ccp_hash_algo algo;
-+ enum ccp_engine engine;
-+ union {
-+ enum ccp_aes_mode aes_mode;
-+ } um;
-+ union {
-+ enum ccp_sha_type sha_type;
-+ enum ccp_aes_type aes_type;
-+ } ut;
-+ enum ccp_hash_op op;
-+ uint64_t key_length;
-+ /**< max hash key size 144 bytes (struct capabilties) */
-+ uint8_t key[144];
-+ /**< max be key size of AES is 32*/
-+ uint8_t key_ccp[32];
-+ phys_addr_t key_phys;
-+ uint64_t digest_length;
-+ void *ctx;
-+ int ctx_len;
-+ int offset;
-+ int block_size;
-+ /**< Buffer to store Software generated precomute values*/
-+ /**< For HMAC H(ipad ^ key) and H(opad ^ key) */
-+ /**< For CMAC K1 IV and K2 IV*/
-+ uint8_t pre_compute[2 * CCP_SHA3_CTX_SIZE];
-+ /**< SHA3 initial ctx all zeros*/
-+ uint8_t sha3_ctx[200];
-+ int aad_length;
-+ } auth;
-+ /**< Authentication Parameters */
-+ enum rte_crypto_aead_algorithm aead_algo;
-+ /**< AEAD Algorithm */
-+
-+ uint32_t reserved;
-+} __rte_cache_aligned;
-+
-+extern uint8_t ccp_cryptodev_driver_id;
-+
-+struct ccp_qp;
-+
-+/**
-+ * Set and validate CCP crypto session parameters
-+ *
-+ * @param sess ccp private session
-+ * @param xform crypto xform for this session
-+ * @return 0 on success otherwise -1
-+ */
-+int ccp_set_session_parameters(struct ccp_session *sess,
-+ const struct rte_crypto_sym_xform *xform);
-+
-+#endif /* _CCP_CRYPTO_H_ */
-diff --git a/drivers/crypto/ccp/ccp_dev.h b/drivers/crypto/ccp/ccp_dev.h
-index b321530..a16ba81 100644
---- a/drivers/crypto/ccp/ccp_dev.h
-+++ b/drivers/crypto/ccp/ccp_dev.h
-@@ -225,6 +225,123 @@ struct ccp_device {
- /**< current queue index */
- } __rte_cache_aligned;
-
-+/**< CCP H/W engine related */
-+/**
-+ * ccp_engine - CCP operation identifiers
-+ *
-+ * @CCP_ENGINE_AES: AES operation
-+ * @CCP_ENGINE_XTS_AES: 128-bit XTS AES operation
-+ * @CCP_ENGINE_3DES: DES/3DES operation
-+ * @CCP_ENGINE_SHA: SHA operation
-+ * @CCP_ENGINE_RSA: RSA operation
-+ * @CCP_ENGINE_PASSTHRU: pass-through operation
-+ * @CCP_ENGINE_ZLIB_DECOMPRESS: unused
-+ * @CCP_ENGINE_ECC: ECC operation
-+ */
-+enum ccp_engine {
-+ CCP_ENGINE_AES = 0,
-+ CCP_ENGINE_XTS_AES_128,
-+ CCP_ENGINE_3DES,
-+ CCP_ENGINE_SHA,
-+ CCP_ENGINE_RSA,
-+ CCP_ENGINE_PASSTHRU,
-+ CCP_ENGINE_ZLIB_DECOMPRESS,
-+ CCP_ENGINE_ECC,
-+ CCP_ENGINE__LAST,
-+};
-+
-+/* Passthru engine */
-+/**
-+ * ccp_passthru_bitwise - type of bitwise passthru operation
-+ *
-+ * @CCP_PASSTHRU_BITWISE_NOOP: no bitwise operation performed
-+ * @CCP_PASSTHRU_BITWISE_AND: perform bitwise AND of src with mask
-+ * @CCP_PASSTHRU_BITWISE_OR: perform bitwise OR of src with mask
-+ * @CCP_PASSTHRU_BITWISE_XOR: perform bitwise XOR of src with mask
-+ * @CCP_PASSTHRU_BITWISE_MASK: overwrite with mask
-+ */
-+enum ccp_passthru_bitwise {
-+ CCP_PASSTHRU_BITWISE_NOOP = 0,
-+ CCP_PASSTHRU_BITWISE_AND,
-+ CCP_PASSTHRU_BITWISE_OR,
-+ CCP_PASSTHRU_BITWISE_XOR,
-+ CCP_PASSTHRU_BITWISE_MASK,
-+ CCP_PASSTHRU_BITWISE__LAST,
-+};
-+
-+/**
-+ * ccp_passthru_byteswap - type of byteswap passthru operation
-+ *
-+ * @CCP_PASSTHRU_BYTESWAP_NOOP: no byte swapping performed
-+ * @CCP_PASSTHRU_BYTESWAP_32BIT: swap bytes within 32-bit words
-+ * @CCP_PASSTHRU_BYTESWAP_256BIT: swap bytes within 256-bit words
-+ */
-+enum ccp_passthru_byteswap {
-+ CCP_PASSTHRU_BYTESWAP_NOOP = 0,
-+ CCP_PASSTHRU_BYTESWAP_32BIT,
-+ CCP_PASSTHRU_BYTESWAP_256BIT,
-+ CCP_PASSTHRU_BYTESWAP__LAST,
-+};
-+
-+/**
-+ * CCP passthru
-+ */
-+struct ccp_passthru {
-+ phys_addr_t src_addr;
-+ phys_addr_t dest_addr;
-+ enum ccp_passthru_bitwise bit_mod;
-+ enum ccp_passthru_byteswap byte_swap;
-+ int len;
-+ int dir;
-+};
-+
-+/* CCP version 5: Union to define the function field (cmd_reg1/dword0) */
-+union ccp_function {
-+ struct {
-+ uint16_t size:7;
-+ uint16_t encrypt:1;
-+ uint16_t mode:5;
-+ uint16_t type:2;
-+ } aes;
-+ struct {
-+ uint16_t size:7;
-+ uint16_t encrypt:1;
-+ uint16_t mode:5;
-+ uint16_t type:2;
-+ } des;
-+ struct {
-+ uint16_t size:7;
-+ uint16_t encrypt:1;
-+ uint16_t rsvd:5;
-+ uint16_t type:2;
-+ } aes_xts;
-+ struct {
-+ uint16_t rsvd1:10;
-+ uint16_t type:4;
-+ uint16_t rsvd2:1;
-+ } sha;
-+ struct {
-+ uint16_t mode:3;
-+ uint16_t size:12;
-+ } rsa;
-+ struct {
-+ uint16_t byteswap:2;
-+ uint16_t bitwise:3;
-+ uint16_t reflect:2;
-+ uint16_t rsvd:8;
-+ } pt;
-+ struct {
-+ uint16_t rsvd:13;
-+ } zlib;
-+ struct {
-+ uint16_t size:10;
-+ uint16_t type:2;
-+ uint16_t mode:3;
-+ } ecc;
-+ uint16_t raw;
-+};
-+
-+
- /**
- * descriptor for version 5 CPP commands
- * 8 32-bit words:
-@@ -291,6 +408,18 @@ struct ccp_desc {
- struct dword7 dw7;
- };
-
-+/**
-+ * cmd id to follow order
-+ */
-+enum ccp_cmd_order {
-+ CCP_CMD_CIPHER = 0,
-+ CCP_CMD_AUTH,
-+ CCP_CMD_CIPHER_HASH,
-+ CCP_CMD_HASH_CIPHER,
-+ CCP_CMD_COMBINED,
-+ CCP_CMD_NOT_SUPPORTED,
-+};
-+
- static inline uint32_t
- low32_value(unsigned long addr)
- {
-diff --git a/drivers/crypto/ccp/ccp_pmd_ops.c b/drivers/crypto/ccp/ccp_pmd_ops.c
-index b6f8c48..ad0a670 100644
---- a/drivers/crypto/ccp/ccp_pmd_ops.c
-+++ b/drivers/crypto/ccp/ccp_pmd_ops.c
-@@ -36,6 +36,7 @@
-
- #include "ccp_pmd_private.h"
- #include "ccp_dev.h"
-+#include "ccp_crypto.h"
-
- static const struct rte_cryptodev_capabilities ccp_pmd_capabilities[] = {
- RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
-@@ -81,6 +82,60 @@ ccp_pmd_info_get(struct rte_cryptodev *dev,
- }
- }
-
-+static unsigned
-+ccp_pmd_session_get_size(struct rte_cryptodev *dev __rte_unused)
-+{
-+ return sizeof(struct ccp_session);
-+}
-+
-+static int
-+ccp_pmd_session_configure(struct rte_cryptodev *dev,
-+ struct rte_crypto_sym_xform *xform,
-+ struct rte_cryptodev_sym_session *sess,
-+ struct rte_mempool *mempool)
-+{
-+ int ret;
-+ void *sess_private_data;
-+
-+ if (unlikely(sess == NULL || xform == NULL)) {
-+ CCP_LOG_ERR("Invalid session struct or xform");
-+ return -ENOMEM;
-+ }
-+
-+ if (rte_mempool_get(mempool, &sess_private_data)) {
-+ CCP_LOG_ERR("Couldn't get object from session mempool");
-+ return -ENOMEM;
-+ }
-+ ret = ccp_set_session_parameters(sess_private_data, xform);
-+ if (ret != 0) {
-+ CCP_LOG_ERR("failed configure session parameters");
-+
-+ /* Return session to mempool */
-+ rte_mempool_put(mempool, sess_private_data);
-+ return ret;
-+ }
-+ set_session_private_data(sess, dev->driver_id,
-+ sess_private_data);
-+
-+ return 0;
-+}
-+
-+static void
-+ccp_pmd_session_clear(struct rte_cryptodev *dev,
-+ struct rte_cryptodev_sym_session *sess)
-+{
-+ uint8_t index = dev->driver_id;
-+ void *sess_priv = get_session_private_data(sess, index);
-+
-+ if (sess_priv) {
-+ struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv);
-+
-+ rte_mempool_put(sess_mp, sess_priv);
-+ memset(sess_priv, 0, sizeof(struct ccp_session));
-+ set_session_private_data(sess, index, NULL);
-+ }
-+}
-+
- struct rte_cryptodev_ops ccp_ops = {
- .dev_configure = ccp_pmd_config,
- .dev_start = ccp_pmd_start,
-@@ -98,9 +153,9 @@ struct rte_cryptodev_ops ccp_ops = {
- .queue_pair_stop = NULL,
- .queue_pair_count = NULL,
-
-- .session_get_size = NULL,
-- .session_configure = NULL,
-- .session_clear = NULL,
-+ .session_get_size = ccp_pmd_session_get_size,
-+ .session_configure = ccp_pmd_session_configure,
-+ .session_clear = ccp_pmd_session_clear,
- };
-
- struct rte_cryptodev_ops *ccp_pmd_ops = &ccp_ops;