cryptodev: change queue pair configure structure
[dpdk.git] / drivers / crypto / aesni_mb / rte_aesni_mb_pmd_private.h
index 948e091..61f419d 100644 (file)
@@ -5,36 +5,50 @@
 #ifndef _RTE_AESNI_MB_PMD_PRIVATE_H_
 #define _RTE_AESNI_MB_PMD_PRIVATE_H_
 
+#include <intel-ipsec-mb.h>
+
+
+/*
+ * IMB_VERSION_NUM macro was introduced in version Multi-buffer 0.50,
+ * so if macro is not defined, it means that the version is 0.49.
+ */
+#if !defined(IMB_VERSION_NUM)
+#define IMB_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
+#define IMB_VERSION_NUM IMB_VERSION(0, 49, 0)
+#endif
+
+#if IMB_VERSION_NUM < IMB_VERSION(0, 52, 0)
 #include "aesni_mb_ops.h"
+#endif
+
+#if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
+enum aesni_mb_vector_mode {
+       RTE_AESNI_MB_NOT_SUPPORTED = 0,
+       RTE_AESNI_MB_SSE,
+       RTE_AESNI_MB_AVX,
+       RTE_AESNI_MB_AVX2,
+       RTE_AESNI_MB_AVX512
+};
+#endif
+
 
 #define CRYPTODEV_NAME_AESNI_MB_PMD    crypto_aesni_mb
 /**< AES-NI Multi buffer PMD device name */
 
-#define MB_LOG_ERR(fmt, args...) \
-       RTE_LOG(ERR, CRYPTODEV, "[%s] %s() line %u: " fmt "\n",  \
-                       RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), \
-                       __func__, __LINE__, ## args)
-
-#ifdef RTE_LIBRTE_AESNI_MB_DEBUG
-#define MB_LOG_INFO(fmt, args...) \
-       RTE_LOG(INFO, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \
-                       CRYPTODEV_NAME_AESNI_MB_PMD, \
-                       __func__, __LINE__, ## args)
-
-#define MB_LOG_DBG(fmt, args...) \
-       RTE_LOG(DEBUG, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \
-                       CRYPTODEV_NAME_AESNI_MB_PMD, \
-                       __func__, __LINE__, ## args)
-#else
-#define MB_LOG_INFO(fmt, args...)
-#define MB_LOG_DBG(fmt, args...)
-#endif
+/** AESNI_MB PMD LOGTYPE DRIVER */
+int aesni_mb_logtype_driver;
+
+#define AESNI_MB_LOG(level, fmt, ...)  \
+       rte_log(RTE_LOG_ ## level, aesni_mb_logtype_driver,  \
+                       "%s() line %u: " fmt "\n", __func__, __LINE__,  \
+                                       ## __VA_ARGS__)
+
 
 #define HMAC_IPAD_VALUE                        (0x36)
 #define HMAC_OPAD_VALUE                        (0x5C)
 
-/* Maximum length for digest (SHA-512 truncated needs 32 bytes) */
-#define DIGEST_LENGTH_MAX 32
+/* Maximum length for digest */
+#define DIGEST_LENGTH_MAX 64
 static const unsigned auth_blocksize[] = {
                [MD5]           = 64,
                [SHA1]          = 64,
@@ -66,8 +80,9 @@ static const unsigned auth_truncated_digest_byte_lengths[] = {
                [SHA_384]       = 24,
                [SHA_512]       = 32,
                [AES_XCBC]      = 12,
+               [AES_CMAC]      = 12,
                [AES_CCM]       = 8,
-               [NULL_HASH]     = 0
+               [NULL_HASH]     = 0
 };
 
 /**
@@ -91,11 +106,23 @@ static const unsigned auth_digest_byte_lengths[] = {
                [SHA_384]       = 48,
                [SHA_512]       = 64,
                [AES_XCBC]      = 16,
-               [NULL_HASH]     = 0
+               [AES_CMAC]      = 16,
+               [AES_GMAC]      = 12,
+               [NULL_HASH]     = 0,
+#if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
+               [PLAIN_SHA1]    = 20,
+               [PLAIN_SHA_224] = 28,
+               [PLAIN_SHA_256] = 32,
+               [PLAIN_SHA_384] = 48,
+               [PLAIN_SHA_512] = 64
+#endif
+       /**< Vector mode dependent pointer table of the multi-buffer APIs */
+
 };
 
 /**
- * Get the output digest size in bytes for a specified authentication algorithm
+ * Get the full digest size in bytes for a specified authentication algorithm
+ * (if available in the Multi-buffer library)
  *
  * @Note: this function will not return a valid value for a non-valid
  * authentication algorithm
@@ -122,8 +149,10 @@ struct aesni_mb_private {
        /**< CPU vector instruction set mode */
        unsigned max_nb_queue_pairs;
        /**< Max number of queue pairs supported by device */
-       unsigned max_nb_sessions;
-       /**< Max number of sessions supported by device */
+#if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
+       MB_MGR *mb_mgr;
+       /**< Multi-buffer instance */
+#endif
 };
 
 /** AESNI Multi buffer queue pair */
@@ -131,15 +160,19 @@ struct aesni_mb_qp {
        uint16_t id;
        /**< Queue Pair Identifier */
        char name[RTE_CRYPTODEV_NAME_MAX_LEN];
+#if IMB_VERSION_NUM < IMB_VERSION(0, 52, 0)
        /**< Unique Queue Pair Name */
        const struct aesni_mb_op_fns *op_fns;
-       /**< Vector mode dependent pointer table of the multi-buffer APIs */
-       MB_MGR mb_mgr;
+#endif
+       /**< Unique Queue Pair Name */
+       MB_MGR *mb_mgr;
        /**< Multi-buffer instance */
        struct rte_ring *ingress_queue;
-       /**< Ring for placing operations ready for processing */
+       /**< Ring for placing operations ready for processing */
        struct rte_mempool *sess_mp;
        /**< Session Mempool */
+       struct rte_mempool *sess_mp_priv;
+       /**< Session Private Data Mempool */
        struct rte_cryptodev_stats stats;
        /**< Queue pair statistics */
        uint8_t digest_idx;
@@ -162,7 +195,9 @@ struct aesni_mb_session {
        } iv;
        /**< IV parameters */
 
-       /** Cipher Parameters */
+       /** Cipher Parameters */const struct aesni_mb_op_fns *op_fns;
+       /**< Vector mode dependent pointer table of the multi-buffer APIs */
+
        struct {
                /** Cipher direction - encrypt / decrypt */
                JOB_CIPHER_DIRECTION direction;
@@ -171,12 +206,20 @@ struct aesni_mb_session {
 
                uint64_t key_length_in_bytes;
 
-               struct {
-                       uint32_t encode[60] __rte_aligned(16);
-                       /**< encode key */
-                       uint32_t decode[60] __rte_aligned(16);
-                       /**< decode key */
-               } expanded_aes_keys;
+               union {
+                       struct {
+                               uint32_t encode[60] __rte_aligned(16);
+                               /**< encode key */
+                               uint32_t decode[60] __rte_aligned(16);
+                               /**< decode key */
+                       } expanded_aes_keys;
+                       struct {
+                               const void *ks_ptr[3];
+                               uint64_t key[3][16];
+                       } exp_3des_keys;
+
+                       struct gcm_key_data gcm_key;
+               };
                /**< Expanded AES keys - Allocating space to
                 * contain the maximum expanded key size which
                 * is 240 bytes for 256 bit AES, calculate by:
@@ -211,26 +254,45 @@ struct aesni_mb_session {
                            uint8_t k3[16] __rte_aligned(16);
                            /**< k3. */
                        } xcbc;
+
+                       struct {
+                               uint32_t expkey[60] __rte_aligned(16);
+                                                   /**< k1 (expanded key). */
+                               uint32_t skey1[4] __rte_aligned(16);
+                                                   /**< k2. */
+                               uint32_t skey2[4] __rte_aligned(16);
+                                                   /**< k3. */
+                       } cmac;
                        /**< Expanded XCBC authentication keys */
                };
+       /** Generated digest size by the Multi-buffer library */
+       uint16_t gen_digest_len;
+       /** Requested digest size from Cryptodev */
+       uint16_t req_digest_len;
+
        } auth;
        struct {
                /** AAD data length */
                uint16_t aad_len;
-               /** digest size */
-               uint16_t digest_len;
        } aead;
 } __rte_cache_aligned;
 
 
+
+#if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
 /**
  *
  */
 extern int
+aesni_mb_set_session_parameters(const MB_MGR *mb_mgr,
+               struct aesni_mb_session *sess,
+               const struct rte_crypto_sym_xform *xform);
+#else
+extern int
 aesni_mb_set_session_parameters(const struct aesni_mb_op_fns *mb_ops,
                struct aesni_mb_session *sess,
                const struct rte_crypto_sym_xform *xform);
-
+#endif
 
 /** device specific operations function pointer structure */
 extern struct rte_cryptodev_ops *rte_aesni_mb_pmd_ops;