New upstream version 18.11-rc1
[deb_dpdk.git] / drivers / crypto / aesni_mb / aesni_mb_ops.h
index 5a1cba6..575d6a5 100644 (file)
 
 #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
+
 enum aesni_mb_vector_mode {
        RTE_AESNI_MB_NOT_SUPPORTED = 0,
        RTE_AESNI_MB_SSE,
@@ -39,6 +48,8 @@ typedef void (*aes_cmac_sub_key_gen_t)
                (const void *exp_key, void *k2, void *k3);
 typedef void (*aes_cmac_keyexp_t)
                (const void *key, void *keyexp);
+typedef void (*aes_gcm_keyexp_t)
+               (const void *key, struct gcm_key_data *keyexp);
 
 /** Multi-buffer library function pointer table */
 struct aesni_mb_op_fns {
@@ -86,8 +97,24 @@ struct aesni_mb_op_fns {
                        /**< AES CMAC subkey expansions */
                        aes_cmac_keyexp_t aes_cmac_expkey;
                        /**< AES CMAC key expansions */
+                       aes_gcm_keyexp_t aes_gcm_128;
+                       /**< AES GCM 128 key expansions */
+                       aes_gcm_keyexp_t aes_gcm_192;
+                       /**< AES GCM 192 key expansions */
+                       aes_gcm_keyexp_t aes_gcm_256;
+                       /**< AES GCM 256 key expansions */
                } keyexp;
                /**< Key expansion functions */
+#if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
+               struct {
+                       hash_fn_t sha1;
+                       hash_fn_t sha224;
+                       hash_fn_t sha256;
+                       hash_fn_t sha384;
+                       hash_fn_t sha512;
+               } multi_block;
+               /** multi block hash functions */
+#endif
        } aux;
        /**< Auxiliary functions */
 };
@@ -104,7 +131,13 @@ static const struct aesni_mb_op_fns job_ops[] = {
                                },
                                .keyexp = {
                                        NULL
+                               },
+#if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
+                               .multi_block = {
+                                       NULL
                                }
+#endif
+
                        }
                },
                [RTE_AESNI_MB_SSE] = {
@@ -130,8 +163,20 @@ static const struct aesni_mb_op_fns job_ops[] = {
                                        aes_keyexp_256_sse,
                                        aes_xcbc_expand_key_sse,
                                        aes_cmac_subkey_gen_sse,
-                                       aes_keyexp_128_enc_sse
+                                       aes_keyexp_128_enc_sse,
+                                       aes_gcm_pre_128_sse,
+                                       aes_gcm_pre_192_sse,
+                                       aes_gcm_pre_256_sse
+                               },
+#if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
+                               .multi_block = {
+                                       sha1_sse,
+                                       sha224_sse,
+                                       sha256_sse,
+                                       sha384_sse,
+                                       sha512_sse
                                }
+#endif
                        }
                },
                [RTE_AESNI_MB_AVX] = {
@@ -157,8 +202,20 @@ static const struct aesni_mb_op_fns job_ops[] = {
                                        aes_keyexp_256_avx,
                                        aes_xcbc_expand_key_avx,
                                        aes_cmac_subkey_gen_avx,
-                                       aes_keyexp_128_enc_avx
+                                       aes_keyexp_128_enc_avx,
+                                       aes_gcm_pre_128_avx_gen2,
+                                       aes_gcm_pre_192_avx_gen2,
+                                       aes_gcm_pre_256_avx_gen2
+                               },
+#if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
+                               .multi_block = {
+                                       sha1_avx,
+                                       sha224_avx,
+                                       sha256_avx,
+                                       sha384_avx,
+                                       sha512_avx
                                }
+#endif
                        }
                },
                [RTE_AESNI_MB_AVX2] = {
@@ -184,8 +241,20 @@ static const struct aesni_mb_op_fns job_ops[] = {
                                        aes_keyexp_256_avx2,
                                        aes_xcbc_expand_key_avx2,
                                        aes_cmac_subkey_gen_avx2,
-                                       aes_keyexp_128_enc_avx2
+                                       aes_keyexp_128_enc_avx2,
+                                       aes_gcm_pre_128_avx_gen4,
+                                       aes_gcm_pre_192_avx_gen4,
+                                       aes_gcm_pre_256_avx_gen4
+                               },
+#if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
+                               .multi_block = {
+                                       sha1_avx2,
+                                       sha224_avx2,
+                                       sha256_avx2,
+                                       sha384_avx2,
+                                       sha512_avx2
                                }
+#endif
                        }
                },
                [RTE_AESNI_MB_AVX512] = {
@@ -211,8 +280,20 @@ static const struct aesni_mb_op_fns job_ops[] = {
                                        aes_keyexp_256_avx512,
                                        aes_xcbc_expand_key_avx512,
                                        aes_cmac_subkey_gen_avx512,
-                                       aes_keyexp_128_enc_avx512
+                                       aes_keyexp_128_enc_avx512,
+                                       aes_gcm_pre_128_avx_gen4,
+                                       aes_gcm_pre_192_avx_gen4,
+                                       aes_gcm_pre_256_avx_gen4
+                               },
+#if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
+                               .multi_block = {
+                                       sha1_avx512,
+                                       sha224_avx512,
+                                       sha256_avx512,
+                                       sha384_avx512,
+                                       sha512_avx512
                                }
+#endif
                        }
                }
 };