xref: /dpdk/drivers/crypto/ccp/ccp_pmd_ops.c (revision 2a440d6ab362de705d99c6740b27a3e0755a87f4)
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