New upstream version 18.08
[deb_dpdk.git] / drivers / crypto / aesni_mb / aesni_mb_ops.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2015 Intel Corporation
3  */
4
5 #ifndef _AESNI_MB_OPS_H_
6 #define _AESNI_MB_OPS_H_
7
8 #ifndef LINUX
9 #define LINUX
10 #endif
11
12 #include <intel-ipsec-mb.h>
13
14 enum aesni_mb_vector_mode {
15         RTE_AESNI_MB_NOT_SUPPORTED = 0,
16         RTE_AESNI_MB_SSE,
17         RTE_AESNI_MB_AVX,
18         RTE_AESNI_MB_AVX2,
19         RTE_AESNI_MB_AVX512
20 };
21
22 typedef void (*md5_one_block_t)(const void *data, void *digest);
23
24 typedef void (*sha1_one_block_t)(const void *data, void *digest);
25 typedef void (*sha224_one_block_t)(const void *data, void *digest);
26 typedef void (*sha256_one_block_t)(const void *data, void *digest);
27 typedef void (*sha384_one_block_t)(const void *data, void *digest);
28 typedef void (*sha512_one_block_t)(const void *data, void *digest);
29
30 typedef void (*aes_keyexp_128_t)
31                 (const void *key, void *enc_exp_keys, void *dec_exp_keys);
32 typedef void (*aes_keyexp_192_t)
33                 (const void *key, void *enc_exp_keys, void *dec_exp_keys);
34 typedef void (*aes_keyexp_256_t)
35                 (const void *key, void *enc_exp_keys, void *dec_exp_keys);
36 typedef void (*aes_xcbc_expand_key_t)
37                 (const void *key, void *exp_k1, void *k2, void *k3);
38 typedef void (*aes_cmac_sub_key_gen_t)
39                 (const void *exp_key, void *k2, void *k3);
40 typedef void (*aes_cmac_keyexp_t)
41                 (const void *key, void *keyexp);
42
43 /** Multi-buffer library function pointer table */
44 struct aesni_mb_op_fns {
45         struct {
46                 init_mb_mgr_t init_mgr;
47                 /**< Initialise scheduler  */
48                 get_next_job_t get_next;
49                 /**< Get next free job structure */
50                 submit_job_t submit;
51                 /**< Submit job to scheduler */
52                 get_completed_job_t get_completed_job;
53                 /**< Get completed job */
54                 flush_job_t flush_job;
55                 /**< flush jobs from manager */
56         } job;
57         /**< multi buffer manager functions */
58
59         struct {
60                 struct {
61                         md5_one_block_t md5;
62                         /**< MD5 one block hash */
63                         sha1_one_block_t sha1;
64                         /**< SHA1 one block hash */
65                         sha224_one_block_t sha224;
66                         /**< SHA224 one block hash */
67                         sha256_one_block_t sha256;
68                         /**< SHA256 one block hash */
69                         sha384_one_block_t sha384;
70                         /**< SHA384 one block hash */
71                         sha512_one_block_t sha512;
72                         /**< SHA512 one block hash */
73                 } one_block;
74                 /**< one block hash functions */
75
76                 struct {
77                         aes_keyexp_128_t aes128;
78                         /**< AES128 key expansions */
79                         aes_keyexp_192_t aes192;
80                         /**< AES192 key expansions */
81                         aes_keyexp_256_t aes256;
82                         /**< AES256 key expansions */
83                         aes_xcbc_expand_key_t aes_xcbc;
84                         /**< AES XCBC key epansions */
85                         aes_cmac_sub_key_gen_t aes_cmac_subkey;
86                         /**< AES CMAC subkey expansions */
87                         aes_cmac_keyexp_t aes_cmac_expkey;
88                         /**< AES CMAC key expansions */
89                 } keyexp;
90                 /**< Key expansion functions */
91         } aux;
92         /**< Auxiliary functions */
93 };
94
95
96 static const struct aesni_mb_op_fns job_ops[] = {
97                 [RTE_AESNI_MB_NOT_SUPPORTED] = {
98                         .job = {
99                                 NULL
100                         },
101                         .aux = {
102                                 .one_block = {
103                                         NULL
104                                 },
105                                 .keyexp = {
106                                         NULL
107                                 }
108                         }
109                 },
110                 [RTE_AESNI_MB_SSE] = {
111                         .job = {
112                                 init_mb_mgr_sse,
113                                 get_next_job_sse,
114                                 submit_job_sse,
115                                 get_completed_job_sse,
116                                 flush_job_sse
117                         },
118                         .aux = {
119                                 .one_block = {
120                                         md5_one_block_sse,
121                                         sha1_one_block_sse,
122                                         sha224_one_block_sse,
123                                         sha256_one_block_sse,
124                                         sha384_one_block_sse,
125                                         sha512_one_block_sse
126                                 },
127                                 .keyexp = {
128                                         aes_keyexp_128_sse,
129                                         aes_keyexp_192_sse,
130                                         aes_keyexp_256_sse,
131                                         aes_xcbc_expand_key_sse,
132                                         aes_cmac_subkey_gen_sse,
133                                         aes_keyexp_128_enc_sse
134                                 }
135                         }
136                 },
137                 [RTE_AESNI_MB_AVX] = {
138                         .job = {
139                                 init_mb_mgr_avx,
140                                 get_next_job_avx,
141                                 submit_job_avx,
142                                 get_completed_job_avx,
143                                 flush_job_avx
144                         },
145                         .aux = {
146                                 .one_block = {
147                                         md5_one_block_avx,
148                                         sha1_one_block_avx,
149                                         sha224_one_block_avx,
150                                         sha256_one_block_avx,
151                                         sha384_one_block_avx,
152                                         sha512_one_block_avx
153                                 },
154                                 .keyexp = {
155                                         aes_keyexp_128_avx,
156                                         aes_keyexp_192_avx,
157                                         aes_keyexp_256_avx,
158                                         aes_xcbc_expand_key_avx,
159                                         aes_cmac_subkey_gen_avx,
160                                         aes_keyexp_128_enc_avx
161                                 }
162                         }
163                 },
164                 [RTE_AESNI_MB_AVX2] = {
165                         .job = {
166                                 init_mb_mgr_avx2,
167                                 get_next_job_avx2,
168                                 submit_job_avx2,
169                                 get_completed_job_avx2,
170                                 flush_job_avx2
171                         },
172                         .aux = {
173                                 .one_block = {
174                                         md5_one_block_avx2,
175                                         sha1_one_block_avx2,
176                                         sha224_one_block_avx2,
177                                         sha256_one_block_avx2,
178                                         sha384_one_block_avx2,
179                                         sha512_one_block_avx2
180                                 },
181                                 .keyexp = {
182                                         aes_keyexp_128_avx2,
183                                         aes_keyexp_192_avx2,
184                                         aes_keyexp_256_avx2,
185                                         aes_xcbc_expand_key_avx2,
186                                         aes_cmac_subkey_gen_avx2,
187                                         aes_keyexp_128_enc_avx2
188                                 }
189                         }
190                 },
191                 [RTE_AESNI_MB_AVX512] = {
192                         .job = {
193                                 init_mb_mgr_avx512,
194                                 get_next_job_avx512,
195                                 submit_job_avx512,
196                                 get_completed_job_avx512,
197                                 flush_job_avx512
198                         },
199                         .aux = {
200                                 .one_block = {
201                                         md5_one_block_avx512,
202                                         sha1_one_block_avx512,
203                                         sha224_one_block_avx512,
204                                         sha256_one_block_avx512,
205                                         sha384_one_block_avx512,
206                                         sha512_one_block_avx512
207                                 },
208                                 .keyexp = {
209                                         aes_keyexp_128_avx512,
210                                         aes_keyexp_192_avx512,
211                                         aes_keyexp_256_avx512,
212                                         aes_xcbc_expand_key_avx512,
213                                         aes_cmac_subkey_gen_avx512,
214                                         aes_keyexp_128_enc_avx512
215                                 }
216                         }
217                 }
218 };
219
220
221 #endif /* _AESNI_MB_OPS_H_ */