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