1ef4b04f8SRavi Kumar /* SPDX-License-Identifier: BSD-3-Clause
2ef4b04f8SRavi Kumar * Copyright(c) 2018 Advanced Micro Devices, Inc. All rights reserved.
3ef4b04f8SRavi Kumar */
4ef4b04f8SRavi Kumar
53c20cf98SRavi Kumar #include <string.h>
63c20cf98SRavi Kumar
73c20cf98SRavi Kumar #include <rte_common.h>
8af668035SAkhil Goyal #include <cryptodev_pmd.h>
93c20cf98SRavi Kumar #include <rte_malloc.h>
103c20cf98SRavi Kumar
113c20cf98SRavi Kumar #include "ccp_pmd_private.h"
123c20cf98SRavi Kumar #include "ccp_dev.h"
1329610e41SRavi Kumar #include "ccp_crypto.h"
143c20cf98SRavi Kumar
15e0d88a39SRavi Kumar #define CCP_BASE_SYM_CRYPTO_CAPABILITIES \
16e0d88a39SRavi Kumar { /* SHA1 */ \
17e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
18e0d88a39SRavi Kumar {.sym = { \
19e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
20e0d88a39SRavi Kumar {.auth = { \
21e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA1, \
22e0d88a39SRavi Kumar .block_size = 64, \
23e0d88a39SRavi Kumar .key_size = { \
24e0d88a39SRavi Kumar .min = 0, \
25e0d88a39SRavi Kumar .max = 0, \
26e0d88a39SRavi Kumar .increment = 0 \
27e0d88a39SRavi Kumar }, \
28e0d88a39SRavi Kumar .digest_size = { \
29e0d88a39SRavi Kumar .min = 20, \
30e0d88a39SRavi Kumar .max = 20, \
31e0d88a39SRavi Kumar .increment = 0 \
32e0d88a39SRavi Kumar }, \
33e0d88a39SRavi Kumar .aad_size = { 0 } \
34e0d88a39SRavi Kumar }, } \
35e0d88a39SRavi Kumar }, } \
36e0d88a39SRavi Kumar }, \
37e0d88a39SRavi Kumar { /* SHA1 HMAC */ \
38e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
39e0d88a39SRavi Kumar {.sym = { \
40e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
41e0d88a39SRavi Kumar {.auth = { \
42e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA1_HMAC, \
43e0d88a39SRavi Kumar .block_size = 64, \
44e0d88a39SRavi Kumar .key_size = { \
45e0d88a39SRavi Kumar .min = 1, \
46e0d88a39SRavi Kumar .max = 64, \
47e0d88a39SRavi Kumar .increment = 1 \
48e0d88a39SRavi Kumar }, \
49e0d88a39SRavi Kumar .digest_size = { \
504f8c7b4fSAmaranath Somalapuram .min = 1, \
51e0d88a39SRavi Kumar .max = 20, \
524f8c7b4fSAmaranath Somalapuram .increment = 1 \
53e0d88a39SRavi Kumar }, \
54e0d88a39SRavi Kumar .aad_size = { 0 } \
55e0d88a39SRavi Kumar }, } \
56e0d88a39SRavi Kumar }, } \
57e0d88a39SRavi Kumar }, \
58e0d88a39SRavi Kumar { /* SHA224 */ \
59e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
60e0d88a39SRavi Kumar {.sym = { \
61e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
62e0d88a39SRavi Kumar {.auth = { \
63e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA224, \
64e0d88a39SRavi Kumar .block_size = 64, \
65e0d88a39SRavi Kumar .key_size = { \
66e0d88a39SRavi Kumar .min = 0, \
67e0d88a39SRavi Kumar .max = 0, \
68e0d88a39SRavi Kumar .increment = 0 \
69e0d88a39SRavi Kumar }, \
70e0d88a39SRavi Kumar .digest_size = { \
71e0d88a39SRavi Kumar .min = 28, \
72e0d88a39SRavi Kumar .max = 28, \
73e0d88a39SRavi Kumar .increment = 0 \
74e0d88a39SRavi Kumar }, \
75e0d88a39SRavi Kumar .aad_size = { 0 } \
76e0d88a39SRavi Kumar }, } \
77e0d88a39SRavi Kumar }, } \
78e0d88a39SRavi Kumar }, \
79e0d88a39SRavi Kumar { /* SHA224 HMAC */ \
80e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
81e0d88a39SRavi Kumar {.sym = { \
82e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
83e0d88a39SRavi Kumar {.auth = { \
84e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA224_HMAC, \
85e0d88a39SRavi Kumar .block_size = 64, \
86e0d88a39SRavi Kumar .key_size = { \
87e0d88a39SRavi Kumar .min = 1, \
88e0d88a39SRavi Kumar .max = 64, \
89e0d88a39SRavi Kumar .increment = 1 \
90e0d88a39SRavi Kumar }, \
91e0d88a39SRavi Kumar .digest_size = { \
924f8c7b4fSAmaranath Somalapuram .min = 1, \
93e0d88a39SRavi Kumar .max = 28, \
944f8c7b4fSAmaranath Somalapuram .increment = 1 \
95e0d88a39SRavi Kumar }, \
96e0d88a39SRavi Kumar .aad_size = { 0 } \
97e0d88a39SRavi Kumar }, } \
98e0d88a39SRavi Kumar }, } \
99e0d88a39SRavi Kumar }, \
100e0d88a39SRavi Kumar { /* SHA3-224 */ \
101e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
102e0d88a39SRavi Kumar {.sym = { \
103e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
104e0d88a39SRavi Kumar {.auth = { \
105e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA3_224, \
106e0d88a39SRavi Kumar .block_size = 144, \
107e0d88a39SRavi Kumar .key_size = { \
108e0d88a39SRavi Kumar .min = 0, \
109e0d88a39SRavi Kumar .max = 0, \
110e0d88a39SRavi Kumar .increment = 0 \
111e0d88a39SRavi Kumar }, \
112e0d88a39SRavi Kumar .digest_size = { \
113e0d88a39SRavi Kumar .min = 28, \
114e0d88a39SRavi Kumar .max = 28, \
115e0d88a39SRavi Kumar .increment = 0 \
116e0d88a39SRavi Kumar }, \
117e0d88a39SRavi Kumar .aad_size = { 0 } \
118e0d88a39SRavi Kumar }, } \
119e0d88a39SRavi Kumar }, } \
120e0d88a39SRavi Kumar }, \
121e0d88a39SRavi Kumar { /* SHA3-224 HMAC*/ \
122e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
123e0d88a39SRavi Kumar {.sym = { \
124e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
125e0d88a39SRavi Kumar {.auth = { \
126e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA3_224_HMAC, \
127e0d88a39SRavi Kumar .block_size = 144, \
128e0d88a39SRavi Kumar .key_size = { \
129e0d88a39SRavi Kumar .min = 1, \
130e0d88a39SRavi Kumar .max = 144, \
131e0d88a39SRavi Kumar .increment = 1 \
132e0d88a39SRavi Kumar }, \
133e0d88a39SRavi Kumar .digest_size = { \
134e0d88a39SRavi Kumar .min = 28, \
135e0d88a39SRavi Kumar .max = 28, \
136e0d88a39SRavi Kumar .increment = 0 \
137e0d88a39SRavi Kumar }, \
138e0d88a39SRavi Kumar .aad_size = { 0 } \
139e0d88a39SRavi Kumar }, } \
140e0d88a39SRavi Kumar }, } \
141e0d88a39SRavi Kumar }, \
142e0d88a39SRavi Kumar { /* SHA256 */ \
143e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
144e0d88a39SRavi Kumar {.sym = { \
145e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
146e0d88a39SRavi Kumar {.auth = { \
147e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA256, \
148e0d88a39SRavi Kumar .block_size = 64, \
149e0d88a39SRavi Kumar .key_size = { \
150e0d88a39SRavi Kumar .min = 0, \
151e0d88a39SRavi Kumar .max = 0, \
152e0d88a39SRavi Kumar .increment = 0 \
153e0d88a39SRavi Kumar }, \
154e0d88a39SRavi Kumar .digest_size = { \
155e0d88a39SRavi Kumar .min = 32, \
156e0d88a39SRavi Kumar .max = 32, \
157e0d88a39SRavi Kumar .increment = 0 \
158e0d88a39SRavi Kumar }, \
159e0d88a39SRavi Kumar .aad_size = { 0 } \
160e0d88a39SRavi Kumar }, } \
161e0d88a39SRavi Kumar }, } \
162e0d88a39SRavi Kumar }, \
163e0d88a39SRavi Kumar { /* SHA256 HMAC */ \
164e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
165e0d88a39SRavi Kumar {.sym = { \
166e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
167e0d88a39SRavi Kumar {.auth = { \
168e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA256_HMAC, \
169e0d88a39SRavi Kumar .block_size = 64, \
170e0d88a39SRavi Kumar .key_size = { \
171e0d88a39SRavi Kumar .min = 1, \
172e0d88a39SRavi Kumar .max = 64, \
173e0d88a39SRavi Kumar .increment = 1 \
174e0d88a39SRavi Kumar }, \
175e0d88a39SRavi Kumar .digest_size = { \
1764f8c7b4fSAmaranath Somalapuram .min = 1, \
177e0d88a39SRavi Kumar .max = 32, \
1784f8c7b4fSAmaranath Somalapuram .increment = 1 \
179e0d88a39SRavi Kumar }, \
180e0d88a39SRavi Kumar .aad_size = { 0 } \
181e0d88a39SRavi Kumar }, } \
182e0d88a39SRavi Kumar }, } \
183e0d88a39SRavi Kumar }, \
184e0d88a39SRavi Kumar { /* SHA3-256 */ \
185e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
186e0d88a39SRavi Kumar {.sym = { \
187e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
188e0d88a39SRavi Kumar {.auth = { \
189e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA3_256, \
190e0d88a39SRavi Kumar .block_size = 136, \
191e0d88a39SRavi Kumar .key_size = { \
192e0d88a39SRavi Kumar .min = 0, \
193e0d88a39SRavi Kumar .max = 0, \
194e0d88a39SRavi Kumar .increment = 0 \
195e0d88a39SRavi Kumar }, \
196e0d88a39SRavi Kumar .digest_size = { \
197e0d88a39SRavi Kumar .min = 32, \
198e0d88a39SRavi Kumar .max = 32, \
199e0d88a39SRavi Kumar .increment = 0 \
200e0d88a39SRavi Kumar }, \
201e0d88a39SRavi Kumar .aad_size = { 0 } \
202e0d88a39SRavi Kumar }, } \
203e0d88a39SRavi Kumar }, } \
204e0d88a39SRavi Kumar }, \
205e0d88a39SRavi Kumar { /* SHA3-256-HMAC */ \
206e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
207e0d88a39SRavi Kumar {.sym = { \
208e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
209e0d88a39SRavi Kumar {.auth = { \
210e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA3_256_HMAC, \
211e0d88a39SRavi Kumar .block_size = 136, \
212e0d88a39SRavi Kumar .key_size = { \
213e0d88a39SRavi Kumar .min = 1, \
214e0d88a39SRavi Kumar .max = 136, \
215e0d88a39SRavi Kumar .increment = 1 \
216e0d88a39SRavi Kumar }, \
217e0d88a39SRavi Kumar .digest_size = { \
218e0d88a39SRavi Kumar .min = 32, \
219e0d88a39SRavi Kumar .max = 32, \
220e0d88a39SRavi Kumar .increment = 0 \
221e0d88a39SRavi Kumar }, \
222e0d88a39SRavi Kumar .aad_size = { 0 } \
223e0d88a39SRavi Kumar }, } \
224e0d88a39SRavi Kumar }, } \
225e0d88a39SRavi Kumar }, \
226e0d88a39SRavi Kumar { /* SHA384 */ \
227e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
228e0d88a39SRavi Kumar {.sym = { \
229e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
230e0d88a39SRavi Kumar {.auth = { \
231e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA384, \
232e0d88a39SRavi Kumar .block_size = 128, \
233e0d88a39SRavi Kumar .key_size = { \
234e0d88a39SRavi Kumar .min = 0, \
235e0d88a39SRavi Kumar .max = 0, \
236e0d88a39SRavi Kumar .increment = 0 \
237e0d88a39SRavi Kumar }, \
238e0d88a39SRavi Kumar .digest_size = { \
239e0d88a39SRavi Kumar .min = 48, \
240e0d88a39SRavi Kumar .max = 48, \
241e0d88a39SRavi Kumar .increment = 0 \
242e0d88a39SRavi Kumar }, \
243e0d88a39SRavi Kumar .aad_size = { 0 } \
244e0d88a39SRavi Kumar }, } \
245e0d88a39SRavi Kumar }, } \
246e0d88a39SRavi Kumar }, \
247e0d88a39SRavi Kumar { /* SHA384 HMAC */ \
248e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
249e0d88a39SRavi Kumar {.sym = { \
250e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
251e0d88a39SRavi Kumar {.auth = { \
252e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA384_HMAC, \
253e0d88a39SRavi Kumar .block_size = 128, \
254e0d88a39SRavi Kumar .key_size = { \
255e0d88a39SRavi Kumar .min = 1, \
256e0d88a39SRavi Kumar .max = 128, \
257e0d88a39SRavi Kumar .increment = 1 \
258e0d88a39SRavi Kumar }, \
259e0d88a39SRavi Kumar .digest_size = { \
2604f8c7b4fSAmaranath Somalapuram .min = 1, \
261e0d88a39SRavi Kumar .max = 48, \
2624f8c7b4fSAmaranath Somalapuram .increment = 1 \
263e0d88a39SRavi Kumar }, \
264e0d88a39SRavi Kumar .aad_size = { 0 } \
265e0d88a39SRavi Kumar }, } \
266e0d88a39SRavi Kumar }, } \
267e0d88a39SRavi Kumar }, \
268e0d88a39SRavi Kumar { /* SHA3-384 */ \
269e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
270e0d88a39SRavi Kumar {.sym = { \
271e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
272e0d88a39SRavi Kumar {.auth = { \
273e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA3_384, \
274e0d88a39SRavi Kumar .block_size = 104, \
275e0d88a39SRavi Kumar .key_size = { \
276e0d88a39SRavi Kumar .min = 0, \
277e0d88a39SRavi Kumar .max = 0, \
278e0d88a39SRavi Kumar .increment = 0 \
279e0d88a39SRavi Kumar }, \
280e0d88a39SRavi Kumar .digest_size = { \
281e0d88a39SRavi Kumar .min = 48, \
282e0d88a39SRavi Kumar .max = 48, \
283e0d88a39SRavi Kumar .increment = 0 \
284e0d88a39SRavi Kumar }, \
285e0d88a39SRavi Kumar .aad_size = { 0 } \
286e0d88a39SRavi Kumar }, } \
287e0d88a39SRavi Kumar }, } \
288e0d88a39SRavi Kumar }, \
289e0d88a39SRavi Kumar { /* SHA3-384-HMAC */ \
290e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
291e0d88a39SRavi Kumar {.sym = { \
292e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
293e0d88a39SRavi Kumar {.auth = { \
294e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA3_384_HMAC, \
295e0d88a39SRavi Kumar .block_size = 104, \
296e0d88a39SRavi Kumar .key_size = { \
297e0d88a39SRavi Kumar .min = 1, \
298e0d88a39SRavi Kumar .max = 104, \
299e0d88a39SRavi Kumar .increment = 1 \
300e0d88a39SRavi Kumar }, \
301e0d88a39SRavi Kumar .digest_size = { \
302e0d88a39SRavi Kumar .min = 48, \
303e0d88a39SRavi Kumar .max = 48, \
304e0d88a39SRavi Kumar .increment = 0 \
305e0d88a39SRavi Kumar }, \
306e0d88a39SRavi Kumar .aad_size = { 0 } \
307e0d88a39SRavi Kumar }, } \
308e0d88a39SRavi Kumar }, } \
309e0d88a39SRavi Kumar }, \
310e0d88a39SRavi Kumar { /* SHA512 */ \
311e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
312e0d88a39SRavi Kumar {.sym = { \
313e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
314e0d88a39SRavi Kumar {.auth = { \
315e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA512, \
316e0d88a39SRavi Kumar .block_size = 128, \
317e0d88a39SRavi Kumar .key_size = { \
318e0d88a39SRavi Kumar .min = 0, \
319e0d88a39SRavi Kumar .max = 0, \
320e0d88a39SRavi Kumar .increment = 0 \
321e0d88a39SRavi Kumar }, \
322e0d88a39SRavi Kumar .digest_size = { \
323e0d88a39SRavi Kumar .min = 64, \
324e0d88a39SRavi Kumar .max = 64, \
325e0d88a39SRavi Kumar .increment = 0 \
326e0d88a39SRavi Kumar }, \
327e0d88a39SRavi Kumar .aad_size = { 0 } \
328e0d88a39SRavi Kumar }, } \
329e0d88a39SRavi Kumar }, } \
330e0d88a39SRavi Kumar }, \
331e0d88a39SRavi Kumar { /* SHA512 HMAC */ \
332e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
333e0d88a39SRavi Kumar {.sym = { \
334e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
335e0d88a39SRavi Kumar {.auth = { \
336e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA512_HMAC, \
337e0d88a39SRavi Kumar .block_size = 128, \
338e0d88a39SRavi Kumar .key_size = { \
339e0d88a39SRavi Kumar .min = 1, \
340e0d88a39SRavi Kumar .max = 128, \
341e0d88a39SRavi Kumar .increment = 1 \
342e0d88a39SRavi Kumar }, \
343e0d88a39SRavi Kumar .digest_size = { \
3444f8c7b4fSAmaranath Somalapuram .min = 1, \
345e0d88a39SRavi Kumar .max = 64, \
3464f8c7b4fSAmaranath Somalapuram .increment = 1 \
347e0d88a39SRavi Kumar }, \
348e0d88a39SRavi Kumar .aad_size = { 0 } \
349e0d88a39SRavi Kumar }, } \
350e0d88a39SRavi Kumar }, } \
351e0d88a39SRavi Kumar }, \
352e0d88a39SRavi Kumar { /* SHA3-512 */ \
353e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
354e0d88a39SRavi Kumar {.sym = { \
355e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
356e0d88a39SRavi Kumar {.auth = { \
357e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA3_512, \
358e0d88a39SRavi Kumar .block_size = 72, \
359e0d88a39SRavi Kumar .key_size = { \
360e0d88a39SRavi Kumar .min = 0, \
361e0d88a39SRavi Kumar .max = 0, \
362e0d88a39SRavi Kumar .increment = 0 \
363e0d88a39SRavi Kumar }, \
364e0d88a39SRavi Kumar .digest_size = { \
365e0d88a39SRavi Kumar .min = 64, \
366e0d88a39SRavi Kumar .max = 64, \
367e0d88a39SRavi Kumar .increment = 0 \
368e0d88a39SRavi Kumar }, \
369e0d88a39SRavi Kumar .aad_size = { 0 } \
370e0d88a39SRavi Kumar }, } \
371e0d88a39SRavi Kumar }, } \
372e0d88a39SRavi Kumar }, \
373e0d88a39SRavi Kumar { /* SHA3-512-HMAC */ \
374e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
375e0d88a39SRavi Kumar {.sym = { \
376e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
377e0d88a39SRavi Kumar {.auth = { \
378e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_SHA3_512_HMAC, \
379e0d88a39SRavi Kumar .block_size = 72, \
380e0d88a39SRavi Kumar .key_size = { \
381e0d88a39SRavi Kumar .min = 1, \
382e0d88a39SRavi Kumar .max = 72, \
383e0d88a39SRavi Kumar .increment = 1 \
384e0d88a39SRavi Kumar }, \
385e0d88a39SRavi Kumar .digest_size = { \
3864f8c7b4fSAmaranath Somalapuram .min = 1, \
387e0d88a39SRavi Kumar .max = 64, \
3884f8c7b4fSAmaranath Somalapuram .increment = 1 \
389e0d88a39SRavi Kumar }, \
390e0d88a39SRavi Kumar .aad_size = { 0 } \
391e0d88a39SRavi Kumar }, } \
392e0d88a39SRavi Kumar }, } \
393e0d88a39SRavi Kumar }, \
394e0d88a39SRavi Kumar { /*AES-CMAC */ \
395e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
396e0d88a39SRavi Kumar {.sym = { \
397e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
398e0d88a39SRavi Kumar {.auth = { \
399e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_AES_CMAC, \
400e0d88a39SRavi Kumar .block_size = 16, \
401e0d88a39SRavi Kumar .key_size = { \
402e0d88a39SRavi Kumar .min = 16, \
403e0d88a39SRavi Kumar .max = 32, \
404e0d88a39SRavi Kumar .increment = 8 \
405e0d88a39SRavi Kumar }, \
406e0d88a39SRavi Kumar .digest_size = { \
407e0d88a39SRavi Kumar .min = 16, \
408e0d88a39SRavi Kumar .max = 16, \
409e0d88a39SRavi Kumar .increment = 0 \
410e0d88a39SRavi Kumar }, \
411e0d88a39SRavi Kumar }, } \
412e0d88a39SRavi Kumar }, } \
413e0d88a39SRavi Kumar }, \
414e0d88a39SRavi Kumar { /* AES ECB */ \
415e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
416e0d88a39SRavi Kumar {.sym = { \
417e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, \
418e0d88a39SRavi Kumar {.cipher = { \
419e0d88a39SRavi Kumar .algo = RTE_CRYPTO_CIPHER_AES_ECB, \
420e0d88a39SRavi Kumar .block_size = 16, \
421e0d88a39SRavi Kumar .key_size = { \
422e0d88a39SRavi Kumar .min = 16, \
423e0d88a39SRavi Kumar .max = 32, \
424e0d88a39SRavi Kumar .increment = 8 \
425e0d88a39SRavi Kumar }, \
426e0d88a39SRavi Kumar .iv_size = { \
427e0d88a39SRavi Kumar .min = 0, \
428e0d88a39SRavi Kumar .max = 0, \
429e0d88a39SRavi Kumar .increment = 0 \
430e0d88a39SRavi Kumar } \
431e0d88a39SRavi Kumar }, } \
432e0d88a39SRavi Kumar }, } \
433e0d88a39SRavi Kumar }, \
434e0d88a39SRavi Kumar { /* AES CBC */ \
435e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
436e0d88a39SRavi Kumar {.sym = { \
437e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, \
438e0d88a39SRavi Kumar {.cipher = { \
439e0d88a39SRavi Kumar .algo = RTE_CRYPTO_CIPHER_AES_CBC, \
440e0d88a39SRavi Kumar .block_size = 16, \
441e0d88a39SRavi Kumar .key_size = { \
442e0d88a39SRavi Kumar .min = 16, \
443e0d88a39SRavi Kumar .max = 32, \
444e0d88a39SRavi Kumar .increment = 8 \
445e0d88a39SRavi Kumar }, \
446e0d88a39SRavi Kumar .iv_size = { \
447e0d88a39SRavi Kumar .min = 16, \
448e0d88a39SRavi Kumar .max = 16, \
449e0d88a39SRavi Kumar .increment = 0 \
450e0d88a39SRavi Kumar } \
451e0d88a39SRavi Kumar }, } \
452e0d88a39SRavi Kumar }, } \
453e0d88a39SRavi Kumar }, \
454e0d88a39SRavi Kumar { /* AES CTR */ \
455e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
456e0d88a39SRavi Kumar {.sym = { \
457e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, \
458e0d88a39SRavi Kumar {.cipher = { \
459e0d88a39SRavi Kumar .algo = RTE_CRYPTO_CIPHER_AES_CTR, \
460e0d88a39SRavi Kumar .block_size = 16, \
461e0d88a39SRavi Kumar .key_size = { \
462e0d88a39SRavi Kumar .min = 16, \
463e0d88a39SRavi Kumar .max = 32, \
464e0d88a39SRavi Kumar .increment = 8 \
465e0d88a39SRavi Kumar }, \
466e0d88a39SRavi Kumar .iv_size = { \
467e0d88a39SRavi Kumar .min = 16, \
468e0d88a39SRavi Kumar .max = 16, \
469e0d88a39SRavi Kumar .increment = 0 \
470e0d88a39SRavi Kumar } \
471e0d88a39SRavi Kumar }, } \
472e0d88a39SRavi Kumar }, } \
473e0d88a39SRavi Kumar }, \
474e0d88a39SRavi Kumar { /* 3DES CBC */ \
475e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
476e0d88a39SRavi Kumar {.sym = { \
477e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, \
478e0d88a39SRavi Kumar {.cipher = { \
479e0d88a39SRavi Kumar .algo = RTE_CRYPTO_CIPHER_3DES_CBC, \
480e0d88a39SRavi Kumar .block_size = 8, \
481e0d88a39SRavi Kumar .key_size = { \
482e0d88a39SRavi Kumar .min = 16, \
483e0d88a39SRavi Kumar .max = 24, \
484e0d88a39SRavi Kumar .increment = 8 \
485e0d88a39SRavi Kumar }, \
486e0d88a39SRavi Kumar .iv_size = { \
487e0d88a39SRavi Kumar .min = 8, \
488e0d88a39SRavi Kumar .max = 8, \
489e0d88a39SRavi Kumar .increment = 0 \
490e0d88a39SRavi Kumar } \
491e0d88a39SRavi Kumar }, } \
492e0d88a39SRavi Kumar }, } \
493e0d88a39SRavi Kumar }, \
494e0d88a39SRavi Kumar { /* AES GCM */ \
495e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
496e0d88a39SRavi Kumar {.sym = { \
497e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD, \
498e0d88a39SRavi Kumar {.aead = { \
499e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AEAD_AES_GCM, \
500e0d88a39SRavi Kumar .block_size = 16, \
501e0d88a39SRavi Kumar .key_size = { \
502e0d88a39SRavi Kumar .min = 16, \
503e0d88a39SRavi Kumar .max = 32, \
504e0d88a39SRavi Kumar .increment = 8 \
505e0d88a39SRavi Kumar }, \
506e0d88a39SRavi Kumar .digest_size = { \
507e0d88a39SRavi Kumar .min = 16, \
508e0d88a39SRavi Kumar .max = 16, \
509e0d88a39SRavi Kumar .increment = 0 \
510e0d88a39SRavi Kumar }, \
511e0d88a39SRavi Kumar .aad_size = { \
512e0d88a39SRavi Kumar .min = 0, \
513e0d88a39SRavi Kumar .max = 65535, \
514e0d88a39SRavi Kumar .increment = 1 \
515e0d88a39SRavi Kumar }, \
516e0d88a39SRavi Kumar .iv_size = { \
517e0d88a39SRavi Kumar .min = 12, \
518e0d88a39SRavi Kumar .max = 16, \
519e0d88a39SRavi Kumar .increment = 4 \
520e0d88a39SRavi Kumar }, \
521e0d88a39SRavi Kumar }, } \
522e0d88a39SRavi Kumar }, } \
523d9a9e561SRavi Kumar }
524e0d88a39SRavi Kumar
525e0d88a39SRavi Kumar #define CCP_EXTRA_SYM_CRYPTO_CAPABILITIES \
526e0d88a39SRavi Kumar { /* MD5 HMAC */ \
527e0d88a39SRavi Kumar .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
528e0d88a39SRavi Kumar {.sym = { \
529e0d88a39SRavi Kumar .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
530e0d88a39SRavi Kumar {.auth = { \
531e0d88a39SRavi Kumar .algo = RTE_CRYPTO_AUTH_MD5_HMAC, \
532e0d88a39SRavi Kumar .block_size = 64, \
533e0d88a39SRavi Kumar .key_size = { \
534e0d88a39SRavi Kumar .min = 1, \
535e0d88a39SRavi Kumar .max = 64, \
536e0d88a39SRavi Kumar .increment = 1 \
537e0d88a39SRavi Kumar }, \
538e0d88a39SRavi Kumar .digest_size = { \
5394f8c7b4fSAmaranath Somalapuram .min = 1, \
540e0d88a39SRavi Kumar .max = 16, \
5414f8c7b4fSAmaranath Somalapuram .increment = 1 \
542e0d88a39SRavi Kumar }, \
543e0d88a39SRavi Kumar .aad_size = { 0 } \
544e0d88a39SRavi Kumar }, } \
545e0d88a39SRavi Kumar }, } \
546d9a9e561SRavi Kumar }
547e0d88a39SRavi Kumar
548e0d88a39SRavi Kumar static const struct rte_cryptodev_capabilities ccp_crypto_cap[] = {
549e0d88a39SRavi Kumar CCP_BASE_SYM_CRYPTO_CAPABILITIES,
550e0d88a39SRavi Kumar RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
551e0d88a39SRavi Kumar };
552e0d88a39SRavi Kumar
553e0d88a39SRavi Kumar static const struct rte_cryptodev_capabilities ccp_crypto_cap_complete[] = {
554e0d88a39SRavi Kumar CCP_EXTRA_SYM_CRYPTO_CAPABILITIES,
555e0d88a39SRavi Kumar CCP_BASE_SYM_CRYPTO_CAPABILITIES,
5563c20cf98SRavi Kumar RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
5573c20cf98SRavi Kumar };
5583c20cf98SRavi Kumar
5593c20cf98SRavi Kumar static int
ccp_pmd_config(struct rte_cryptodev * dev __rte_unused,struct rte_cryptodev_config * config __rte_unused)5603c20cf98SRavi Kumar ccp_pmd_config(struct rte_cryptodev *dev __rte_unused,
5613c20cf98SRavi Kumar struct rte_cryptodev_config *config __rte_unused)
5623c20cf98SRavi Kumar {
5633c20cf98SRavi Kumar return 0;
5643c20cf98SRavi Kumar }
5653c20cf98SRavi Kumar
5663c20cf98SRavi Kumar static int
ccp_pmd_start(struct rte_cryptodev * dev)5673c20cf98SRavi Kumar ccp_pmd_start(struct rte_cryptodev *dev)
5683c20cf98SRavi Kumar {
5693c20cf98SRavi Kumar return ccp_dev_start(dev);
5703c20cf98SRavi Kumar }
5713c20cf98SRavi Kumar
5723c20cf98SRavi Kumar static void
ccp_pmd_stop(struct rte_cryptodev * dev __rte_unused)5733c20cf98SRavi Kumar ccp_pmd_stop(struct rte_cryptodev *dev __rte_unused)
5743c20cf98SRavi Kumar {
5753c20cf98SRavi Kumar
5763c20cf98SRavi Kumar }
5773c20cf98SRavi Kumar
5783c20cf98SRavi Kumar static int
ccp_pmd_close(struct rte_cryptodev * dev __rte_unused)5793c20cf98SRavi Kumar ccp_pmd_close(struct rte_cryptodev *dev __rte_unused)
5803c20cf98SRavi Kumar {
5813c20cf98SRavi Kumar return 0;
5823c20cf98SRavi Kumar }
5833c20cf98SRavi Kumar
5843c20cf98SRavi Kumar static void
ccp_pmd_stats_get(struct rte_cryptodev * dev,struct rte_cryptodev_stats * stats)585ba9a6f14SRavi Kumar ccp_pmd_stats_get(struct rte_cryptodev *dev,
586ba9a6f14SRavi Kumar struct rte_cryptodev_stats *stats)
587ba9a6f14SRavi Kumar {
588ba9a6f14SRavi Kumar int qp_id;
589ba9a6f14SRavi Kumar
590ba9a6f14SRavi Kumar for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {
591ba9a6f14SRavi Kumar struct ccp_qp *qp = dev->data->queue_pairs[qp_id];
592ba9a6f14SRavi Kumar
593ba9a6f14SRavi Kumar stats->enqueued_count += qp->qp_stats.enqueued_count;
594ba9a6f14SRavi Kumar stats->dequeued_count += qp->qp_stats.dequeued_count;
595ba9a6f14SRavi Kumar
596ba9a6f14SRavi Kumar stats->enqueue_err_count += qp->qp_stats.enqueue_err_count;
597ba9a6f14SRavi Kumar stats->dequeue_err_count += qp->qp_stats.dequeue_err_count;
598ba9a6f14SRavi Kumar }
599ba9a6f14SRavi Kumar
600ba9a6f14SRavi Kumar }
601ba9a6f14SRavi Kumar
602ba9a6f14SRavi Kumar static void
ccp_pmd_stats_reset(struct rte_cryptodev * dev)603ba9a6f14SRavi Kumar ccp_pmd_stats_reset(struct rte_cryptodev *dev)
604ba9a6f14SRavi Kumar {
605ba9a6f14SRavi Kumar int qp_id;
606ba9a6f14SRavi Kumar
607ba9a6f14SRavi Kumar for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {
608ba9a6f14SRavi Kumar struct ccp_qp *qp = dev->data->queue_pairs[qp_id];
609ba9a6f14SRavi Kumar
610ba9a6f14SRavi Kumar memset(&qp->qp_stats, 0, sizeof(qp->qp_stats));
611ba9a6f14SRavi Kumar }
612ba9a6f14SRavi Kumar }
613ba9a6f14SRavi Kumar
614ba9a6f14SRavi Kumar static void
ccp_pmd_info_get(struct rte_cryptodev * dev,struct rte_cryptodev_info * dev_info)6153c20cf98SRavi Kumar ccp_pmd_info_get(struct rte_cryptodev *dev,
6163c20cf98SRavi Kumar struct rte_cryptodev_info *dev_info)
6173c20cf98SRavi Kumar {
6183c20cf98SRavi Kumar struct ccp_private *internals = dev->data->dev_private;
6193c20cf98SRavi Kumar
6203c20cf98SRavi Kumar if (dev_info != NULL) {
6213c20cf98SRavi Kumar dev_info->driver_id = dev->driver_id;
6223c20cf98SRavi Kumar dev_info->feature_flags = dev->feature_flags;
623e0d88a39SRavi Kumar dev_info->capabilities = ccp_crypto_cap;
624e0d88a39SRavi Kumar if (internals->auth_opt == 1)
625e0d88a39SRavi Kumar dev_info->capabilities = ccp_crypto_cap_complete;
6263c20cf98SRavi Kumar dev_info->max_nb_queue_pairs = internals->max_nb_qpairs;
627e1fc5b76SPablo de Lara /* No limit of number of sessions */
628e1fc5b76SPablo de Lara dev_info->sym.max_nb_sessions = 0;
6293c20cf98SRavi Kumar }
6303c20cf98SRavi Kumar }
631ef4b04f8SRavi Kumar
63262feda38SRavi Kumar static int
ccp_pmd_qp_release(struct rte_cryptodev * dev,uint16_t qp_id)63362feda38SRavi Kumar ccp_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
63462feda38SRavi Kumar {
63562feda38SRavi Kumar struct ccp_qp *qp;
63662feda38SRavi Kumar
63762feda38SRavi Kumar if (dev->data->queue_pairs[qp_id] != NULL) {
63862feda38SRavi Kumar qp = (struct ccp_qp *)dev->data->queue_pairs[qp_id];
63962feda38SRavi Kumar rte_ring_free(qp->processed_pkts);
64062feda38SRavi Kumar rte_mempool_free(qp->batch_mp);
64162feda38SRavi Kumar rte_free(qp);
64262feda38SRavi Kumar dev->data->queue_pairs[qp_id] = NULL;
64362feda38SRavi Kumar }
64462feda38SRavi Kumar return 0;
64562feda38SRavi Kumar }
64662feda38SRavi Kumar
64762feda38SRavi Kumar static int
ccp_pmd_qp_set_unique_name(struct rte_cryptodev * dev,struct ccp_qp * qp)64862feda38SRavi Kumar ccp_pmd_qp_set_unique_name(struct rte_cryptodev *dev,
64962feda38SRavi Kumar struct ccp_qp *qp)
65062feda38SRavi Kumar {
65162feda38SRavi Kumar unsigned int n = snprintf(qp->name, sizeof(qp->name),
65262feda38SRavi Kumar "ccp_pmd_%u_qp_%u",
65362feda38SRavi Kumar dev->data->dev_id, qp->id);
65462feda38SRavi Kumar
65562feda38SRavi Kumar if (n > sizeof(qp->name))
65662feda38SRavi Kumar return -1;
65762feda38SRavi Kumar
65862feda38SRavi Kumar return 0;
65962feda38SRavi Kumar }
66062feda38SRavi Kumar
66162feda38SRavi Kumar static struct rte_ring *
ccp_pmd_qp_create_batch_info_ring(struct ccp_qp * qp,unsigned int ring_size,int socket_id)66262feda38SRavi Kumar ccp_pmd_qp_create_batch_info_ring(struct ccp_qp *qp,
66362feda38SRavi Kumar unsigned int ring_size, int socket_id)
66462feda38SRavi Kumar {
66562feda38SRavi Kumar struct rte_ring *r;
66662feda38SRavi Kumar
66762feda38SRavi Kumar r = rte_ring_lookup(qp->name);
66862feda38SRavi Kumar if (r) {
66962feda38SRavi Kumar if (r->size >= ring_size) {
67062feda38SRavi Kumar CCP_LOG_INFO(
67162feda38SRavi Kumar "Reusing ring %s for processed packets",
67262feda38SRavi Kumar qp->name);
67362feda38SRavi Kumar return r;
67462feda38SRavi Kumar }
67562feda38SRavi Kumar CCP_LOG_INFO(
67662feda38SRavi Kumar "Unable to reuse ring %s for processed packets",
67762feda38SRavi Kumar qp->name);
67862feda38SRavi Kumar return NULL;
67962feda38SRavi Kumar }
68062feda38SRavi Kumar
68162feda38SRavi Kumar return rte_ring_create(qp->name, ring_size, socket_id,
68262feda38SRavi Kumar RING_F_SP_ENQ | RING_F_SC_DEQ);
68362feda38SRavi Kumar }
68462feda38SRavi Kumar
68562feda38SRavi Kumar static int
ccp_pmd_qp_setup(struct rte_cryptodev * dev,uint16_t qp_id,const struct rte_cryptodev_qp_conf * qp_conf,int socket_id)68662feda38SRavi Kumar ccp_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
68762feda38SRavi Kumar const struct rte_cryptodev_qp_conf *qp_conf,
688725d2a7fSFan Zhang int socket_id)
68962feda38SRavi Kumar {
69062feda38SRavi Kumar struct ccp_private *internals = dev->data->dev_private;
69162feda38SRavi Kumar struct ccp_qp *qp;
69262feda38SRavi Kumar int retval = 0;
69362feda38SRavi Kumar
69462feda38SRavi Kumar if (qp_id >= internals->max_nb_qpairs) {
69562feda38SRavi Kumar CCP_LOG_ERR("Invalid qp_id %u, should be less than %u",
69662feda38SRavi Kumar qp_id, internals->max_nb_qpairs);
69762feda38SRavi Kumar return (-EINVAL);
69862feda38SRavi Kumar }
69962feda38SRavi Kumar
70062feda38SRavi Kumar /* Free memory prior to re-allocation if needed. */
70162feda38SRavi Kumar if (dev->data->queue_pairs[qp_id] != NULL)
70262feda38SRavi Kumar ccp_pmd_qp_release(dev, qp_id);
70362feda38SRavi Kumar
70462feda38SRavi Kumar /* Allocate the queue pair data structure. */
70562feda38SRavi Kumar qp = rte_zmalloc_socket("CCP Crypto PMD Queue Pair", sizeof(*qp),
70662feda38SRavi Kumar RTE_CACHE_LINE_SIZE, socket_id);
70762feda38SRavi Kumar if (qp == NULL) {
70862feda38SRavi Kumar CCP_LOG_ERR("Failed to allocate queue pair memory");
70962feda38SRavi Kumar return (-ENOMEM);
71062feda38SRavi Kumar }
71162feda38SRavi Kumar
71262feda38SRavi Kumar qp->dev = dev;
71362feda38SRavi Kumar qp->id = qp_id;
71462feda38SRavi Kumar dev->data->queue_pairs[qp_id] = qp;
71562feda38SRavi Kumar
71662feda38SRavi Kumar retval = ccp_pmd_qp_set_unique_name(dev, qp);
71762feda38SRavi Kumar if (retval) {
71862feda38SRavi Kumar CCP_LOG_ERR("Failed to create unique name for ccp qp");
71962feda38SRavi Kumar goto qp_setup_cleanup;
72062feda38SRavi Kumar }
72162feda38SRavi Kumar
72262feda38SRavi Kumar qp->processed_pkts = ccp_pmd_qp_create_batch_info_ring(qp,
72362feda38SRavi Kumar qp_conf->nb_descriptors, socket_id);
72462feda38SRavi Kumar if (qp->processed_pkts == NULL) {
72562feda38SRavi Kumar CCP_LOG_ERR("Failed to create batch info ring");
72662feda38SRavi Kumar goto qp_setup_cleanup;
72762feda38SRavi Kumar }
72862feda38SRavi Kumar
729725d2a7fSFan Zhang qp->sess_mp = qp_conf->mp_session;
73062feda38SRavi Kumar
73162feda38SRavi Kumar /* mempool for batch info */
73262feda38SRavi Kumar qp->batch_mp = rte_mempool_create(
73362feda38SRavi Kumar qp->name,
73462feda38SRavi Kumar qp_conf->nb_descriptors,
73562feda38SRavi Kumar sizeof(struct ccp_batch_info),
73662feda38SRavi Kumar RTE_CACHE_LINE_SIZE,
73762feda38SRavi Kumar 0, NULL, NULL, NULL, NULL,
73862feda38SRavi Kumar SOCKET_ID_ANY, 0);
73962feda38SRavi Kumar if (qp->batch_mp == NULL)
74062feda38SRavi Kumar goto qp_setup_cleanup;
74162feda38SRavi Kumar memset(&qp->qp_stats, 0, sizeof(qp->qp_stats));
74262feda38SRavi Kumar return 0;
74362feda38SRavi Kumar
74462feda38SRavi Kumar qp_setup_cleanup:
74562feda38SRavi Kumar dev->data->queue_pairs[qp_id] = NULL;
74662feda38SRavi Kumar rte_free(qp);
74762feda38SRavi Kumar return -1;
74862feda38SRavi Kumar }
74962feda38SRavi Kumar
75029610e41SRavi Kumar static unsigned
ccp_pmd_sym_session_get_size(struct rte_cryptodev * dev __rte_unused)751012c5076SPablo de Lara ccp_pmd_sym_session_get_size(struct rte_cryptodev *dev __rte_unused)
75229610e41SRavi Kumar {
75329610e41SRavi Kumar return sizeof(struct ccp_session);
75429610e41SRavi Kumar }
75529610e41SRavi Kumar
75629610e41SRavi Kumar static int
ccp_pmd_sym_session_configure(struct rte_cryptodev * dev,struct rte_crypto_sym_xform * xform,struct rte_cryptodev_sym_session * sess)757012c5076SPablo de Lara ccp_pmd_sym_session_configure(struct rte_cryptodev *dev,
75829610e41SRavi Kumar struct rte_crypto_sym_xform *xform,
759bdce2564SAkhil Goyal struct rte_cryptodev_sym_session *sess)
76029610e41SRavi Kumar {
76129610e41SRavi Kumar int ret;
76229610e41SRavi Kumar void *sess_private_data;
763e0d88a39SRavi Kumar struct ccp_private *internals;
76429610e41SRavi Kumar
76529610e41SRavi Kumar if (unlikely(sess == NULL || xform == NULL)) {
76629610e41SRavi Kumar CCP_LOG_ERR("Invalid session struct or xform");
76729610e41SRavi Kumar return -ENOMEM;
76829610e41SRavi Kumar }
76929610e41SRavi Kumar
770*2a440d6aSAkhil Goyal sess_private_data = CRYPTODEV_GET_SYM_SESS_PRIV(sess);
771bdce2564SAkhil Goyal
772e0d88a39SRavi Kumar internals = (struct ccp_private *)dev->data->dev_private;
773e0d88a39SRavi Kumar ret = ccp_set_session_parameters(sess_private_data, xform, internals);
77429610e41SRavi Kumar if (ret != 0) {
77529610e41SRavi Kumar CCP_LOG_ERR("failed configure session parameters");
77629610e41SRavi Kumar return ret;
77729610e41SRavi Kumar }
77829610e41SRavi Kumar
77929610e41SRavi Kumar return 0;
78029610e41SRavi Kumar }
78129610e41SRavi Kumar
78229610e41SRavi Kumar static void
ccp_pmd_sym_session_clear(struct rte_cryptodev * dev __rte_unused,struct rte_cryptodev_sym_session * sess __rte_unused)783bdce2564SAkhil Goyal ccp_pmd_sym_session_clear(struct rte_cryptodev *dev __rte_unused,
784bdce2564SAkhil Goyal struct rte_cryptodev_sym_session *sess __rte_unused)
785bdce2564SAkhil Goyal {}
78629610e41SRavi Kumar
787ef4b04f8SRavi Kumar struct rte_cryptodev_ops ccp_ops = {
7883c20cf98SRavi Kumar .dev_configure = ccp_pmd_config,
7893c20cf98SRavi Kumar .dev_start = ccp_pmd_start,
7903c20cf98SRavi Kumar .dev_stop = ccp_pmd_stop,
7913c20cf98SRavi Kumar .dev_close = ccp_pmd_close,
792ef4b04f8SRavi Kumar
793ba9a6f14SRavi Kumar .stats_get = ccp_pmd_stats_get,
794ba9a6f14SRavi Kumar .stats_reset = ccp_pmd_stats_reset,
795ef4b04f8SRavi Kumar
7963c20cf98SRavi Kumar .dev_infos_get = ccp_pmd_info_get,
797ef4b04f8SRavi Kumar
79862feda38SRavi Kumar .queue_pair_setup = ccp_pmd_qp_setup,
79962feda38SRavi Kumar .queue_pair_release = ccp_pmd_qp_release,
800ef4b04f8SRavi Kumar
801012c5076SPablo de Lara .sym_session_get_size = ccp_pmd_sym_session_get_size,
802012c5076SPablo de Lara .sym_session_configure = ccp_pmd_sym_session_configure,
803012c5076SPablo de Lara .sym_session_clear = ccp_pmd_sym_session_clear,
804ef4b04f8SRavi Kumar };
805ef4b04f8SRavi Kumar
806ef4b04f8SRavi Kumar struct rte_cryptodev_ops *ccp_pmd_ops = &ccp_ops;
807