net/bnxt: add PCI IDs for 57500 series NPAR devices
[dpdk.git] / drivers / crypto / aesni_mb / rte_aesni_mb_pmd_private.h
index a33b2f6..b794d4b 100644 (file)
@@ -5,37 +5,35 @@
 #ifndef _RTE_AESNI_MB_PMD_PRIVATE_H_
 #define _RTE_AESNI_MB_PMD_PRIVATE_H_
 
-#include "aesni_mb_ops.h"
+#include <intel-ipsec-mb.h>
+
+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
+};
 
 #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[] = {
+               [NULL_HASH]     = 0,
                [MD5]           = 64,
                [SHA1]          = 64,
                [SHA_224]       = 64,
@@ -44,6 +42,13 @@ static const unsigned auth_blocksize[] = {
                [SHA_512]       = 128,
                [AES_XCBC]      = 16,
                [AES_CCM]       = 16,
+               [AES_CMAC]      = 16,
+               [AES_GMAC]      = 16,
+               [PLAIN_SHA1]    = 64,
+               [PLAIN_SHA_224] = 64,
+               [PLAIN_SHA_256] = 64,
+               [PLAIN_SHA_384] = 128,
+               [PLAIN_SHA_512] = 128
 };
 
 /**
@@ -66,9 +71,15 @@ static const unsigned auth_truncated_digest_byte_lengths[] = {
                [SHA_384]       = 24,
                [SHA_512]       = 32,
                [AES_XCBC]      = 12,
-               [AES_CMAC]      = 16,
+               [AES_CMAC]      = 12,
                [AES_CCM]       = 8,
-               [NULL_HASH]     = 0
+               [NULL_HASH]     = 0,
+               [AES_GMAC]      = 16,
+               [PLAIN_SHA1]    = 20,
+               [PLAIN_SHA_224] = 28,
+               [PLAIN_SHA_256] = 32,
+               [PLAIN_SHA_384] = 48,
+               [PLAIN_SHA_512] = 64
 };
 
 /**
@@ -93,11 +104,21 @@ static const unsigned auth_digest_byte_lengths[] = {
                [SHA_512]       = 64,
                [AES_XCBC]      = 16,
                [AES_CMAC]      = 16,
-               [NULL_HASH]             = 0
+               [AES_CCM]       = 16,
+               [AES_GMAC]      = 12,
+               [NULL_HASH]     = 0,
+               [PLAIN_SHA1]    = 20,
+               [PLAIN_SHA_224] = 28,
+               [PLAIN_SHA_256] = 32,
+               [PLAIN_SHA_384] = 48,
+               [PLAIN_SHA_512] = 64
+       /**< 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
@@ -124,8 +145,8 @@ 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 */
+       MB_MGR *mb_mgr;
+       /**< Multi-buffer instance */
 };
 
 /** AESNI Multi buffer queue pair */
@@ -134,14 +155,14 @@ struct aesni_mb_qp {
        /**< Queue Pair Identifier */
        char name[RTE_CRYPTODEV_NAME_MAX_LEN];
        /**< 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;
+       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;
@@ -164,7 +185,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;
@@ -173,12 +196,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:
@@ -224,8 +255,10 @@ struct aesni_mb_session {
                        } cmac;
                        /**< Expanded XCBC authentication keys */
                };
-       /** digest size */
-       uint16_t digest_len;
+       /** 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 {
@@ -234,16 +267,11 @@ struct aesni_mb_session {
        } aead;
 } __rte_cache_aligned;
 
-
-/**
- *
- */
 extern int
-aesni_mb_set_session_parameters(const struct aesni_mb_op_fns *mb_ops,
+aesni_mb_set_session_parameters(const MB_MGR *mb_mgr,
                struct aesni_mb_session *sess,
                const struct rte_crypto_sym_xform *xform);
 
-
 /** device specific operations function pointer structure */
 extern struct rte_cryptodev_ops *rte_aesni_mb_pmd_ops;