1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2015 Intel Corporation
5 #ifndef _AESNI_MB_OPS_H_
6 #define _AESNI_MB_OPS_H_
12 #include <intel-ipsec-mb.h>
15 * IMB_VERSION_NUM macro was introduced in version Multi-buffer 0.50,
16 * so if macro is not defined, it means that the version is 0.49.
18 #if !defined(IMB_VERSION_NUM)
19 #define IMB_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
20 #define IMB_VERSION_NUM IMB_VERSION(0, 49, 0)
23 enum aesni_mb_vector_mode {
24 RTE_AESNI_MB_NOT_SUPPORTED = 0,
31 typedef void (*md5_one_block_t)(const void *data, void *digest);
33 typedef void (*sha1_one_block_t)(const void *data, void *digest);
34 typedef void (*sha224_one_block_t)(const void *data, void *digest);
35 typedef void (*sha256_one_block_t)(const void *data, void *digest);
36 typedef void (*sha384_one_block_t)(const void *data, void *digest);
37 typedef void (*sha512_one_block_t)(const void *data, void *digest);
39 typedef void (*aes_keyexp_128_t)
40 (const void *key, void *enc_exp_keys, void *dec_exp_keys);
41 typedef void (*aes_keyexp_192_t)
42 (const void *key, void *enc_exp_keys, void *dec_exp_keys);
43 typedef void (*aes_keyexp_256_t)
44 (const void *key, void *enc_exp_keys, void *dec_exp_keys);
45 typedef void (*aes_xcbc_expand_key_t)
46 (const void *key, void *exp_k1, void *k2, void *k3);
47 typedef void (*aes_cmac_sub_key_gen_t)
48 (const void *exp_key, void *k2, void *k3);
49 typedef void (*aes_cmac_keyexp_t)
50 (const void *key, void *keyexp);
51 typedef void (*aes_gcm_keyexp_t)
52 (const void *key, struct gcm_key_data *keyexp);
54 /** Multi-buffer library function pointer table */
55 struct aesni_mb_op_fns {
57 init_mb_mgr_t init_mgr;
58 /**< Initialise scheduler */
59 get_next_job_t get_next;
60 /**< Get next free job structure */
62 /**< Submit job to scheduler */
63 get_completed_job_t get_completed_job;
64 /**< Get completed job */
65 flush_job_t flush_job;
66 /**< flush jobs from manager */
68 /**< multi buffer manager functions */
73 /**< MD5 one block hash */
74 sha1_one_block_t sha1;
75 /**< SHA1 one block hash */
76 sha224_one_block_t sha224;
77 /**< SHA224 one block hash */
78 sha256_one_block_t sha256;
79 /**< SHA256 one block hash */
80 sha384_one_block_t sha384;
81 /**< SHA384 one block hash */
82 sha512_one_block_t sha512;
83 /**< SHA512 one block hash */
85 /**< one block hash functions */
88 aes_keyexp_128_t aes128;
89 /**< AES128 key expansions */
90 aes_keyexp_192_t aes192;
91 /**< AES192 key expansions */
92 aes_keyexp_256_t aes256;
93 /**< AES256 key expansions */
94 aes_xcbc_expand_key_t aes_xcbc;
95 /**< AES XCBC key epansions */
96 aes_cmac_sub_key_gen_t aes_cmac_subkey;
97 /**< AES CMAC subkey expansions */
98 aes_cmac_keyexp_t aes_cmac_expkey;
99 /**< AES CMAC key expansions */
100 aes_gcm_keyexp_t aes_gcm_128;
101 /**< AES GCM 128 key expansions */
102 aes_gcm_keyexp_t aes_gcm_192;
103 /**< AES GCM 192 key expansions */
104 aes_gcm_keyexp_t aes_gcm_256;
105 /**< AES GCM 256 key expansions */
107 /**< Key expansion functions */
108 #if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
116 /** multi block hash functions */
119 /**< Auxiliary functions */
123 static const struct aesni_mb_op_fns job_ops[] = {
124 [RTE_AESNI_MB_NOT_SUPPORTED] = {
135 #if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
143 [RTE_AESNI_MB_SSE] = {
148 get_completed_job_sse,
155 sha224_one_block_sse,
156 sha256_one_block_sse,
157 sha384_one_block_sse,
164 aes_xcbc_expand_key_sse,
165 aes_cmac_subkey_gen_sse,
166 aes_keyexp_128_enc_sse,
171 #if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
182 [RTE_AESNI_MB_AVX] = {
187 get_completed_job_avx,
194 sha224_one_block_avx,
195 sha256_one_block_avx,
196 sha384_one_block_avx,
203 aes_xcbc_expand_key_avx,
204 aes_cmac_subkey_gen_avx,
205 aes_keyexp_128_enc_avx,
206 aes_gcm_pre_128_avx_gen2,
207 aes_gcm_pre_192_avx_gen2,
208 aes_gcm_pre_256_avx_gen2
210 #if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
221 [RTE_AESNI_MB_AVX2] = {
226 get_completed_job_avx2,
233 sha224_one_block_avx2,
234 sha256_one_block_avx2,
235 sha384_one_block_avx2,
236 sha512_one_block_avx2
242 aes_xcbc_expand_key_avx2,
243 aes_cmac_subkey_gen_avx2,
244 aes_keyexp_128_enc_avx2,
245 aes_gcm_pre_128_avx_gen4,
246 aes_gcm_pre_192_avx_gen4,
247 aes_gcm_pre_256_avx_gen4
249 #if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
260 [RTE_AESNI_MB_AVX512] = {
265 get_completed_job_avx512,
270 md5_one_block_avx512,
271 sha1_one_block_avx512,
272 sha224_one_block_avx512,
273 sha256_one_block_avx512,
274 sha384_one_block_avx512,
275 sha512_one_block_avx512
278 aes_keyexp_128_avx512,
279 aes_keyexp_192_avx512,
280 aes_keyexp_256_avx512,
281 aes_xcbc_expand_key_avx512,
282 aes_cmac_subkey_gen_avx512,
283 aes_keyexp_128_enc_avx512,
284 aes_gcm_pre_128_avx_gen4,
285 aes_gcm_pre_192_avx_gen4,
286 aes_gcm_pre_256_avx_gen4
288 #if IMB_VERSION_NUM >= IMB_VERSION(0, 50, 0)
302 #endif /* _AESNI_MB_OPS_H_ */