Introduce basic data strucure to be used with cpu-crypto data-path.

Signed-off-by: Konstantin Ananyev <konstantin.anan...@intel.com>
---
 lib/librte_cryptodev/rte_crypto_sym.h | 52 +++++++++++++++++++++++++--
 lib/librte_security/rte_security.h    |  6 +++-
 2 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/lib/librte_cryptodev/rte_crypto_sym.h 
b/lib/librte_cryptodev/rte_crypto_sym.h
index ffa038dc4..d8d9e9514 100644
--- a/lib/librte_cryptodev/rte_crypto_sym.h
+++ b/lib/librte_cryptodev/rte_crypto_sym.h
@@ -25,6 +25,30 @@ extern "C" {
 #include <rte_mempool.h>
 #include <rte_common.h>
 
+/**
+  * Crypto IO Vector (in analogy with struct iovec)
+  * Supposed be used to pass input/output data buffers for crypto data-path
+  * functions.
+  */
+struct rte_crypto_vec {
+       /** virtual address of the data buffer */
+       void *base;
+       /** IOVA of the data buffer */
+       rte_iova_t *iova;
+       /** length of the data buffer */
+       uint32_t len;
+};
+
+struct rte_crypto_sym_vec {
+       /** array of SGL vectors */
+       struct rte_crypto_vec *vec;
+       /** array of pointers to IV */
+       void **iv;
+       /** array of pointers to AAD */
+       void **aad;
+       /** array of pointers to digest */
+       void **digest;
+};
 
 /** Symmetric Cipher Algorithms */
 enum rte_crypto_cipher_algorithm {
@@ -116,7 +140,8 @@ struct rte_crypto_cipher_xform {
        struct {
                const uint8_t *data;    /**< pointer to key data */
                uint16_t length;        /**< key length in bytes */
-       } key;
+       } __attribute__((__packed__)) key;
+
        /**< Cipher key
         *
         * For the RTE_CRYPTO_CIPHER_AES_F8 mode of operation, key.data will
@@ -140,6 +165,16 @@ struct rte_crypto_cipher_xform {
         *  - Each key can be either 128 bits (16 bytes) or 256 bits (32 bytes).
         *  - Both keys must have the same size.
         **/
+
+       struct {
+               /**
+                * offset for cipher to start within user provided data buffer.
+                */
+               uint16_t offset;
+       } cpu_crypto;
+
+       uint8_t reserved[4];
+
        struct {
                uint16_t offset;
                /**< Starting point for Initialisation Vector or Counter,
@@ -284,7 +319,7 @@ struct rte_crypto_auth_xform {
        struct {
                const uint8_t *data;    /**< pointer to key data */
                uint16_t length;        /**< key length in bytes */
-       } key;
+       } __attribute__((__packed__)) key;
        /**< Authentication key data.
         * The authentication key length MUST be less than or equal to the
         * block size of the algorithm. It is the callers responsibility to
@@ -292,6 +327,8 @@ struct rte_crypto_auth_xform {
         * (for example RFC 2104, FIPS 198a).
         */
 
+       uint8_t reserved[6];
+
        struct {
                uint16_t offset;
                /**< Starting point for Initialisation Vector or Counter,
@@ -376,7 +413,16 @@ struct rte_crypto_aead_xform {
        struct {
                const uint8_t *data;    /**< pointer to key data */
                uint16_t length;        /**< key length in bytes */
-       } key;
+       } __attribute__((__packed__)) key;
+
+       struct {
+               /**
+                * offset for cipher to start within user provided data buffer.
+                */
+               uint16_t offset;
+       } cpu_crypto;
+
+       uint8_t reserved[4];
 
        struct {
                uint16_t offset;
diff --git a/lib/librte_security/rte_security.h 
b/lib/librte_security/rte_security.h
index aaafdfcd7..fed67ab39 100644
--- a/lib/librte_security/rte_security.h
+++ b/lib/librte_security/rte_security.h
@@ -303,10 +303,14 @@ enum rte_security_session_action_type {
        /**< All security protocol processing is performed inline during
         * transmission
         */
-       RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL
+       RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
        /**< All security protocol processing including crypto is performed
         * on a lookaside accelerator
         */
+       RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO,
+       /**< Crypto processing for security protocol is processed by CPU
+        * synchronously
+        */
 };
 
 /** Security session protocol definition */
-- 
2.17.1

Reply via email to