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