xref: /dpdk/drivers/crypto/openssl/rte_openssl_pmd_ops.c (revision 5566a3e35866ce9e5eacf886c27b460ebfcd6ee9)
1*5566a3e3SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
2*5566a3e3SBruce Richardson  * Copyright(c) 2016-2017 Intel Corporation
38a9867a6SSlawomir Mrozowicz  */
48a9867a6SSlawomir Mrozowicz 
58a9867a6SSlawomir Mrozowicz #include <string.h>
68a9867a6SSlawomir Mrozowicz 
78a9867a6SSlawomir Mrozowicz #include <rte_common.h>
88a9867a6SSlawomir Mrozowicz #include <rte_malloc.h>
98a9867a6SSlawomir Mrozowicz #include <rte_cryptodev_pmd.h>
108a9867a6SSlawomir Mrozowicz 
118a9867a6SSlawomir Mrozowicz #include "rte_openssl_pmd_private.h"
128a9867a6SSlawomir Mrozowicz 
138a9867a6SSlawomir Mrozowicz 
148a9867a6SSlawomir Mrozowicz static const struct rte_cryptodev_capabilities openssl_pmd_capabilities[] = {
158a9867a6SSlawomir Mrozowicz 	{	/* MD5 HMAC */
168a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
178a9867a6SSlawomir Mrozowicz 		{.sym = {
188a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
198a9867a6SSlawomir Mrozowicz 			{.auth = {
208a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_MD5_HMAC,
218a9867a6SSlawomir Mrozowicz 				.block_size = 64,
228a9867a6SSlawomir Mrozowicz 				.key_size = {
23e5e7bc71SPablo de Lara 					.min = 1,
248a9867a6SSlawomir Mrozowicz 					.max = 64,
25e5e7bc71SPablo de Lara 					.increment = 1
268a9867a6SSlawomir Mrozowicz 				},
278a9867a6SSlawomir Mrozowicz 				.digest_size = {
288a9867a6SSlawomir Mrozowicz 					.min = 16,
298a9867a6SSlawomir Mrozowicz 					.max = 16,
308a9867a6SSlawomir Mrozowicz 					.increment = 0
318a9867a6SSlawomir Mrozowicz 				},
32acf86169SPablo de Lara 				.iv_size = { 0 }
338a9867a6SSlawomir Mrozowicz 			}, }
348a9867a6SSlawomir Mrozowicz 		}, }
358a9867a6SSlawomir Mrozowicz 	},
368a9867a6SSlawomir Mrozowicz 	{	/* MD5 */
378a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
388a9867a6SSlawomir Mrozowicz 		{.sym = {
398a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
408a9867a6SSlawomir Mrozowicz 			{.auth = {
418a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_MD5,
428a9867a6SSlawomir Mrozowicz 				.block_size = 64,
438a9867a6SSlawomir Mrozowicz 				.key_size = {
448a9867a6SSlawomir Mrozowicz 					.min = 0,
458a9867a6SSlawomir Mrozowicz 					.max = 0,
468a9867a6SSlawomir Mrozowicz 					.increment = 0
478a9867a6SSlawomir Mrozowicz 				},
488a9867a6SSlawomir Mrozowicz 				.digest_size = {
498a9867a6SSlawomir Mrozowicz 					.min = 16,
508a9867a6SSlawomir Mrozowicz 					.max = 16,
518a9867a6SSlawomir Mrozowicz 					.increment = 0
528a9867a6SSlawomir Mrozowicz 				},
53acf86169SPablo de Lara 				.iv_size = { 0 }
548a9867a6SSlawomir Mrozowicz 			}, }
558a9867a6SSlawomir Mrozowicz 		}, }
568a9867a6SSlawomir Mrozowicz 	},
578a9867a6SSlawomir Mrozowicz 	{	/* SHA1 HMAC */
588a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
598a9867a6SSlawomir Mrozowicz 		{.sym = {
608a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
618a9867a6SSlawomir Mrozowicz 			{.auth = {
628a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
638a9867a6SSlawomir Mrozowicz 				.block_size = 64,
648a9867a6SSlawomir Mrozowicz 				.key_size = {
65e5e7bc71SPablo de Lara 					.min = 1,
668a9867a6SSlawomir Mrozowicz 					.max = 64,
67e5e7bc71SPablo de Lara 					.increment = 1
688a9867a6SSlawomir Mrozowicz 				},
698a9867a6SSlawomir Mrozowicz 				.digest_size = {
708a9867a6SSlawomir Mrozowicz 					.min = 20,
718a9867a6SSlawomir Mrozowicz 					.max = 20,
728a9867a6SSlawomir Mrozowicz 					.increment = 0
738a9867a6SSlawomir Mrozowicz 				},
74acf86169SPablo de Lara 				.iv_size = { 0 }
758a9867a6SSlawomir Mrozowicz 			}, }
768a9867a6SSlawomir Mrozowicz 		}, }
778a9867a6SSlawomir Mrozowicz 	},
788a9867a6SSlawomir Mrozowicz 	{	/* SHA1 */
798a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
808a9867a6SSlawomir Mrozowicz 		{.sym = {
818a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
828a9867a6SSlawomir Mrozowicz 			{.auth = {
838a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_SHA1,
848a9867a6SSlawomir Mrozowicz 				.block_size = 64,
858a9867a6SSlawomir Mrozowicz 				.key_size = {
868a9867a6SSlawomir Mrozowicz 					.min = 0,
878a9867a6SSlawomir Mrozowicz 					.max = 0,
888a9867a6SSlawomir Mrozowicz 					.increment = 0
898a9867a6SSlawomir Mrozowicz 				},
908a9867a6SSlawomir Mrozowicz 				.digest_size = {
918a9867a6SSlawomir Mrozowicz 					.min = 20,
928a9867a6SSlawomir Mrozowicz 					.max = 20,
938a9867a6SSlawomir Mrozowicz 					.increment = 0
948a9867a6SSlawomir Mrozowicz 				},
95acf86169SPablo de Lara 				.iv_size = { 0 }
968a9867a6SSlawomir Mrozowicz 			}, }
978a9867a6SSlawomir Mrozowicz 		}, }
988a9867a6SSlawomir Mrozowicz 	},
998a9867a6SSlawomir Mrozowicz 	{	/* SHA224 HMAC */
1008a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1018a9867a6SSlawomir Mrozowicz 		{.sym = {
1028a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1038a9867a6SSlawomir Mrozowicz 			{.auth = {
1048a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
1058a9867a6SSlawomir Mrozowicz 				.block_size = 64,
1068a9867a6SSlawomir Mrozowicz 				.key_size = {
107e5e7bc71SPablo de Lara 					.min = 1,
1088a9867a6SSlawomir Mrozowicz 					.max = 64,
109e5e7bc71SPablo de Lara 					.increment = 1
1108a9867a6SSlawomir Mrozowicz 				},
1118a9867a6SSlawomir Mrozowicz 				.digest_size = {
1128a9867a6SSlawomir Mrozowicz 					.min = 28,
1138a9867a6SSlawomir Mrozowicz 					.max = 28,
1148a9867a6SSlawomir Mrozowicz 					.increment = 0
1158a9867a6SSlawomir Mrozowicz 				},
116acf86169SPablo de Lara 				.iv_size = { 0 }
1178a9867a6SSlawomir Mrozowicz 			}, }
1188a9867a6SSlawomir Mrozowicz 		}, }
1198a9867a6SSlawomir Mrozowicz 	},
1208a9867a6SSlawomir Mrozowicz 	{	/* SHA224 */
1218a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1228a9867a6SSlawomir Mrozowicz 		{.sym = {
1238a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1248a9867a6SSlawomir Mrozowicz 			{.auth = {
1258a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_SHA224,
1268a9867a6SSlawomir Mrozowicz 				.block_size = 64,
1278a9867a6SSlawomir Mrozowicz 				.key_size = {
1288a9867a6SSlawomir Mrozowicz 					.min = 0,
1298a9867a6SSlawomir Mrozowicz 					.max = 0,
1308a9867a6SSlawomir Mrozowicz 					.increment = 0
1318a9867a6SSlawomir Mrozowicz 				},
1328a9867a6SSlawomir Mrozowicz 				.digest_size = {
1338a9867a6SSlawomir Mrozowicz 					.min = 28,
1348a9867a6SSlawomir Mrozowicz 					.max = 28,
1358a9867a6SSlawomir Mrozowicz 					.increment = 0
1368a9867a6SSlawomir Mrozowicz 				},
137acf86169SPablo de Lara 				.iv_size = { 0 }
1388a9867a6SSlawomir Mrozowicz 			}, }
1398a9867a6SSlawomir Mrozowicz 		}, }
1408a9867a6SSlawomir Mrozowicz 	},
1418a9867a6SSlawomir Mrozowicz 	{	/* SHA256 HMAC */
1428a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1438a9867a6SSlawomir Mrozowicz 		{.sym = {
1448a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1458a9867a6SSlawomir Mrozowicz 			{.auth = {
1468a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
1478a9867a6SSlawomir Mrozowicz 				.block_size = 64,
1488a9867a6SSlawomir Mrozowicz 				.key_size = {
149e5e7bc71SPablo de Lara 					.min = 1,
1508a9867a6SSlawomir Mrozowicz 					.max = 64,
151e5e7bc71SPablo de Lara 					.increment = 1
1528a9867a6SSlawomir Mrozowicz 				},
1538a9867a6SSlawomir Mrozowicz 				.digest_size = {
1548a9867a6SSlawomir Mrozowicz 					.min = 32,
1558a9867a6SSlawomir Mrozowicz 					.max = 32,
1568a9867a6SSlawomir Mrozowicz 					.increment = 0
1578a9867a6SSlawomir Mrozowicz 				},
158acf86169SPablo de Lara 				.iv_size = { 0 }
1598a9867a6SSlawomir Mrozowicz 			}, }
1608a9867a6SSlawomir Mrozowicz 		}, }
1618a9867a6SSlawomir Mrozowicz 	},
1628a9867a6SSlawomir Mrozowicz 	{	/* SHA256 */
1638a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1648a9867a6SSlawomir Mrozowicz 		{.sym = {
1658a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1668a9867a6SSlawomir Mrozowicz 			{.auth = {
1678a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_SHA256,
1688a9867a6SSlawomir Mrozowicz 				.block_size = 64,
1698a9867a6SSlawomir Mrozowicz 				.key_size = {
1708a9867a6SSlawomir Mrozowicz 					.min = 0,
1718a9867a6SSlawomir Mrozowicz 					.max = 0,
1728a9867a6SSlawomir Mrozowicz 					.increment = 0
1738a9867a6SSlawomir Mrozowicz 				},
1748a9867a6SSlawomir Mrozowicz 				.digest_size = {
1758a9867a6SSlawomir Mrozowicz 					.min = 32,
1768a9867a6SSlawomir Mrozowicz 					.max = 32,
1778a9867a6SSlawomir Mrozowicz 					.increment = 0
1788a9867a6SSlawomir Mrozowicz 				},
179acf86169SPablo de Lara 				.iv_size = { 0 }
1808a9867a6SSlawomir Mrozowicz 			}, }
1818a9867a6SSlawomir Mrozowicz 		}, }
1828a9867a6SSlawomir Mrozowicz 	},
1838a9867a6SSlawomir Mrozowicz 	{	/* SHA384 HMAC */
1848a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1858a9867a6SSlawomir Mrozowicz 		{.sym = {
1868a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1878a9867a6SSlawomir Mrozowicz 			{.auth = {
1888a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
1898a9867a6SSlawomir Mrozowicz 				.block_size = 128,
1908a9867a6SSlawomir Mrozowicz 				.key_size = {
191e5e7bc71SPablo de Lara 					.min = 1,
1928a9867a6SSlawomir Mrozowicz 					.max = 128,
193e5e7bc71SPablo de Lara 					.increment = 1
1948a9867a6SSlawomir Mrozowicz 				},
1958a9867a6SSlawomir Mrozowicz 				.digest_size = {
1968a9867a6SSlawomir Mrozowicz 					.min = 48,
1978a9867a6SSlawomir Mrozowicz 					.max = 48,
1988a9867a6SSlawomir Mrozowicz 					.increment = 0
1998a9867a6SSlawomir Mrozowicz 				},
200acf86169SPablo de Lara 				.iv_size = { 0 }
2018a9867a6SSlawomir Mrozowicz 			}, }
2028a9867a6SSlawomir Mrozowicz 		}, }
2038a9867a6SSlawomir Mrozowicz 	},
2048a9867a6SSlawomir Mrozowicz 	{	/* SHA384 */
2058a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
2068a9867a6SSlawomir Mrozowicz 		{.sym = {
2078a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
2088a9867a6SSlawomir Mrozowicz 			{.auth = {
2098a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_SHA384,
2108a9867a6SSlawomir Mrozowicz 				.block_size = 128,
2118a9867a6SSlawomir Mrozowicz 				.key_size = {
2128a9867a6SSlawomir Mrozowicz 					.min = 0,
2138a9867a6SSlawomir Mrozowicz 					.max = 0,
2148a9867a6SSlawomir Mrozowicz 					.increment = 0
2158a9867a6SSlawomir Mrozowicz 				},
2168a9867a6SSlawomir Mrozowicz 				.digest_size = {
2178a9867a6SSlawomir Mrozowicz 					.min = 48,
2188a9867a6SSlawomir Mrozowicz 					.max = 48,
2198a9867a6SSlawomir Mrozowicz 					.increment = 0
2208a9867a6SSlawomir Mrozowicz 				},
221acf86169SPablo de Lara 				.iv_size = { 0 }
2228a9867a6SSlawomir Mrozowicz 			}, }
2238a9867a6SSlawomir Mrozowicz 		}, }
2248a9867a6SSlawomir Mrozowicz 	},
2258a9867a6SSlawomir Mrozowicz 	{	/* SHA512 HMAC */
2268a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
2278a9867a6SSlawomir Mrozowicz 		{.sym = {
2288a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
2298a9867a6SSlawomir Mrozowicz 			{.auth = {
2308a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
2318a9867a6SSlawomir Mrozowicz 				.block_size = 128,
2328a9867a6SSlawomir Mrozowicz 				.key_size = {
233e5e7bc71SPablo de Lara 					.min = 1,
2348a9867a6SSlawomir Mrozowicz 					.max = 128,
235e5e7bc71SPablo de Lara 					.increment = 1
2368a9867a6SSlawomir Mrozowicz 				},
2378a9867a6SSlawomir Mrozowicz 				.digest_size = {
2388a9867a6SSlawomir Mrozowicz 					.min = 64,
2398a9867a6SSlawomir Mrozowicz 					.max = 64,
2408a9867a6SSlawomir Mrozowicz 					.increment = 0
2418a9867a6SSlawomir Mrozowicz 				},
242acf86169SPablo de Lara 				.iv_size = { 0 }
2438a9867a6SSlawomir Mrozowicz 			}, }
2448a9867a6SSlawomir Mrozowicz 		}, }
2458a9867a6SSlawomir Mrozowicz 	},
2468a9867a6SSlawomir Mrozowicz 	{	/* SHA512  */
2478a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
2488a9867a6SSlawomir Mrozowicz 		{.sym = {
2498a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
2508a9867a6SSlawomir Mrozowicz 			{.auth = {
2518a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_SHA512,
2528a9867a6SSlawomir Mrozowicz 				.block_size = 128,
2538a9867a6SSlawomir Mrozowicz 				.key_size = {
2548a9867a6SSlawomir Mrozowicz 					.min = 0,
2558a9867a6SSlawomir Mrozowicz 					.max = 0,
2568a9867a6SSlawomir Mrozowicz 					.increment = 0
2578a9867a6SSlawomir Mrozowicz 				},
2588a9867a6SSlawomir Mrozowicz 				.digest_size = {
2598a9867a6SSlawomir Mrozowicz 					.min = 64,
2608a9867a6SSlawomir Mrozowicz 					.max = 64,
2618a9867a6SSlawomir Mrozowicz 					.increment = 0
2628a9867a6SSlawomir Mrozowicz 				},
263acf86169SPablo de Lara 				.iv_size = { 0 }
2648a9867a6SSlawomir Mrozowicz 			}, }
2658a9867a6SSlawomir Mrozowicz 		}, }
2668a9867a6SSlawomir Mrozowicz 	},
2678a9867a6SSlawomir Mrozowicz 	{	/* AES CBC */
2688a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
2698a9867a6SSlawomir Mrozowicz 		{.sym = {
2708a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
2718a9867a6SSlawomir Mrozowicz 			{.cipher = {
2728a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_CIPHER_AES_CBC,
2738a9867a6SSlawomir Mrozowicz 				.block_size = 16,
2748a9867a6SSlawomir Mrozowicz 				.key_size = {
2758a9867a6SSlawomir Mrozowicz 					.min = 16,
2768a9867a6SSlawomir Mrozowicz 					.max = 32,
2778a9867a6SSlawomir Mrozowicz 					.increment = 8
2788a9867a6SSlawomir Mrozowicz 				},
2798a9867a6SSlawomir Mrozowicz 				.iv_size = {
2808a9867a6SSlawomir Mrozowicz 					.min = 16,
2818a9867a6SSlawomir Mrozowicz 					.max = 16,
2828a9867a6SSlawomir Mrozowicz 					.increment = 0
2838a9867a6SSlawomir Mrozowicz 				}
2848a9867a6SSlawomir Mrozowicz 			}, }
2858a9867a6SSlawomir Mrozowicz 		}, }
2868a9867a6SSlawomir Mrozowicz 	},
2878a9867a6SSlawomir Mrozowicz 	{	/* AES CTR */
2888a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
2898a9867a6SSlawomir Mrozowicz 		{.sym = {
2908a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
2918a9867a6SSlawomir Mrozowicz 			{.cipher = {
2928a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_CIPHER_AES_CTR,
2938a9867a6SSlawomir Mrozowicz 				.block_size = 16,
2948a9867a6SSlawomir Mrozowicz 				.key_size = {
2958a9867a6SSlawomir Mrozowicz 					.min = 16,
2968a9867a6SSlawomir Mrozowicz 					.max = 32,
2978a9867a6SSlawomir Mrozowicz 					.increment = 8
2988a9867a6SSlawomir Mrozowicz 				},
2998a9867a6SSlawomir Mrozowicz 				.iv_size = {
3008a9867a6SSlawomir Mrozowicz 					.min = 16,
3018a9867a6SSlawomir Mrozowicz 					.max = 16,
3028a9867a6SSlawomir Mrozowicz 					.increment = 0
3038a9867a6SSlawomir Mrozowicz 				}
3048a9867a6SSlawomir Mrozowicz 			}, }
3058a9867a6SSlawomir Mrozowicz 		}, }
3068a9867a6SSlawomir Mrozowicz 	},
307b79e4c00SPablo de Lara 	{	/* AES GCM */
3088a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
3098a9867a6SSlawomir Mrozowicz 		{.sym = {
310b79e4c00SPablo de Lara 			.xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
311b79e4c00SPablo de Lara 			{.aead = {
312b79e4c00SPablo de Lara 				.algo = RTE_CRYPTO_AEAD_AES_GCM,
3138a9867a6SSlawomir Mrozowicz 				.block_size = 16,
3148a9867a6SSlawomir Mrozowicz 				.key_size = {
3158a9867a6SSlawomir Mrozowicz 					.min = 16,
3168a9867a6SSlawomir Mrozowicz 					.max = 32,
3178a9867a6SSlawomir Mrozowicz 					.increment = 8
3188a9867a6SSlawomir Mrozowicz 				},
3198a9867a6SSlawomir Mrozowicz 				.digest_size = {
3208a9867a6SSlawomir Mrozowicz 					.min = 16,
3218a9867a6SSlawomir Mrozowicz 					.max = 16,
3228a9867a6SSlawomir Mrozowicz 					.increment = 0
3238a9867a6SSlawomir Mrozowicz 				},
3248a9867a6SSlawomir Mrozowicz 				.aad_size = {
3250625598aSArek Kusztal 					.min = 0,
3260625598aSArek Kusztal 					.max = 65535,
3270625598aSArek Kusztal 					.increment = 1
328acf86169SPablo de Lara 				},
3298a9867a6SSlawomir Mrozowicz 				.iv_size = {
3308a9867a6SSlawomir Mrozowicz 					.min = 12,
3318a9867a6SSlawomir Mrozowicz 					.max = 16,
3328a9867a6SSlawomir Mrozowicz 					.increment = 4
333b79e4c00SPablo de Lara 				},
3348a9867a6SSlawomir Mrozowicz 			}, }
3358a9867a6SSlawomir Mrozowicz 		}, }
3368a9867a6SSlawomir Mrozowicz 	},
3371a4998dcSPablo de Lara 	{	/* AES CCM */
3381a4998dcSPablo de Lara 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
3391a4998dcSPablo de Lara 		{.sym = {
3401a4998dcSPablo de Lara 			.xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
3411a4998dcSPablo de Lara 			{.aead = {
3421a4998dcSPablo de Lara 				.algo = RTE_CRYPTO_AEAD_AES_CCM,
3431a4998dcSPablo de Lara 				.block_size = 16,
3441a4998dcSPablo de Lara 				.key_size = {
3451a4998dcSPablo de Lara 					.min = 16,
3461a4998dcSPablo de Lara 					.max = 32,
3471a4998dcSPablo de Lara 					.increment = 8
3481a4998dcSPablo de Lara 				},
3491a4998dcSPablo de Lara 				.digest_size = {
3501a4998dcSPablo de Lara 					.min = 4,
3511a4998dcSPablo de Lara 					.max = 16,
3521a4998dcSPablo de Lara 					.increment = 2
3531a4998dcSPablo de Lara 				},
3541a4998dcSPablo de Lara 				.aad_size = {
3551a4998dcSPablo de Lara 					.min = 0,
3561a4998dcSPablo de Lara 					.max = 65535,
3571a4998dcSPablo de Lara 					.increment = 1
3581a4998dcSPablo de Lara 				},
3591a4998dcSPablo de Lara 				.iv_size = {
3601a4998dcSPablo de Lara 					.min = 7,
3611a4998dcSPablo de Lara 					.max = 13,
3621a4998dcSPablo de Lara 					.increment = 1
3631a4998dcSPablo de Lara 				},
3641a4998dcSPablo de Lara 			}, }
3651a4998dcSPablo de Lara 		}, }
3661a4998dcSPablo de Lara 	},
3678a9867a6SSlawomir Mrozowicz 	{	/* AES GMAC (AUTH) */
3688a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
3698a9867a6SSlawomir Mrozowicz 		{.sym = {
3708a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
3718a9867a6SSlawomir Mrozowicz 			{.auth = {
3728a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_AUTH_AES_GMAC,
3738a9867a6SSlawomir Mrozowicz 				.block_size = 16,
3748a9867a6SSlawomir Mrozowicz 				.key_size = {
3758a9867a6SSlawomir Mrozowicz 					.min = 16,
3768a9867a6SSlawomir Mrozowicz 					.max = 32,
3778a9867a6SSlawomir Mrozowicz 					.increment = 8
3788a9867a6SSlawomir Mrozowicz 				},
3798a9867a6SSlawomir Mrozowicz 				.digest_size = {
3808a9867a6SSlawomir Mrozowicz 					.min = 16,
3818a9867a6SSlawomir Mrozowicz 					.max = 16,
3828a9867a6SSlawomir Mrozowicz 					.increment = 0
3838a9867a6SSlawomir Mrozowicz 				},
384e32e4fa8SPablo de Lara 				.iv_size = {
385e32e4fa8SPablo de Lara 					.min = 12,
386e32e4fa8SPablo de Lara 					.max = 16,
3878a9867a6SSlawomir Mrozowicz 					.increment = 4
388e32e4fa8SPablo de Lara 				}
3898a9867a6SSlawomir Mrozowicz 			}, }
3908a9867a6SSlawomir Mrozowicz 		}, }
3918a9867a6SSlawomir Mrozowicz 	},
3928a9867a6SSlawomir Mrozowicz 	{	/* 3DES CBC */
3938a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
3948a9867a6SSlawomir Mrozowicz 		{.sym = {
3958a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
3968a9867a6SSlawomir Mrozowicz 			{.cipher = {
3978a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_CIPHER_3DES_CBC,
3988a9867a6SSlawomir Mrozowicz 				.block_size = 8,
3998a9867a6SSlawomir Mrozowicz 				.key_size = {
4008a9867a6SSlawomir Mrozowicz 					.min = 16,
4018a9867a6SSlawomir Mrozowicz 					.max = 24,
4028a9867a6SSlawomir Mrozowicz 					.increment = 8
4038a9867a6SSlawomir Mrozowicz 				},
4048a9867a6SSlawomir Mrozowicz 				.iv_size = {
4058a9867a6SSlawomir Mrozowicz 					.min = 8,
4068a9867a6SSlawomir Mrozowicz 					.max = 8,
4078a9867a6SSlawomir Mrozowicz 					.increment = 0
4088a9867a6SSlawomir Mrozowicz 				}
4098a9867a6SSlawomir Mrozowicz 			}, }
4108a9867a6SSlawomir Mrozowicz 		}, }
4118a9867a6SSlawomir Mrozowicz 	},
4128a9867a6SSlawomir Mrozowicz 	{	/* 3DES CTR */
4138a9867a6SSlawomir Mrozowicz 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
4148a9867a6SSlawomir Mrozowicz 		{.sym = {
4158a9867a6SSlawomir Mrozowicz 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
4168a9867a6SSlawomir Mrozowicz 			{.cipher = {
4178a9867a6SSlawomir Mrozowicz 				.algo = RTE_CRYPTO_CIPHER_3DES_CTR,
4188a9867a6SSlawomir Mrozowicz 				.block_size = 8,
4198a9867a6SSlawomir Mrozowicz 				.key_size = {
4208a9867a6SSlawomir Mrozowicz 					.min = 16,
4218a9867a6SSlawomir Mrozowicz 					.max = 24,
4228a9867a6SSlawomir Mrozowicz 					.increment = 8
4238a9867a6SSlawomir Mrozowicz 				},
4248a9867a6SSlawomir Mrozowicz 				.iv_size = {
4258a9867a6SSlawomir Mrozowicz 					.min = 8,
4268a9867a6SSlawomir Mrozowicz 					.max = 8,
4278a9867a6SSlawomir Mrozowicz 					.increment = 0
4288a9867a6SSlawomir Mrozowicz 				}
4298a9867a6SSlawomir Mrozowicz 			}, }
4308a9867a6SSlawomir Mrozowicz 		}, }
4318a9867a6SSlawomir Mrozowicz 	},
432c1734807SPablo de Lara 	{	/* DES CBC */
433c1734807SPablo de Lara 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
434c1734807SPablo de Lara 		{.sym = {
435c1734807SPablo de Lara 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
436c1734807SPablo de Lara 			{.cipher = {
437c1734807SPablo de Lara 				.algo = RTE_CRYPTO_CIPHER_DES_CBC,
438c1734807SPablo de Lara 				.block_size = 8,
439c1734807SPablo de Lara 				.key_size = {
440c1734807SPablo de Lara 					.min = 8,
441c1734807SPablo de Lara 					.max = 8,
442c1734807SPablo de Lara 					.increment = 0
443c1734807SPablo de Lara 				},
444c1734807SPablo de Lara 				.iv_size = {
445c1734807SPablo de Lara 					.min = 8,
446c1734807SPablo de Lara 					.max = 8,
447c1734807SPablo de Lara 					.increment = 0
448c1734807SPablo de Lara 				}
449c1734807SPablo de Lara 			}, }
450c1734807SPablo de Lara 		}, }
451c1734807SPablo de Lara 	},
4521dee7bc7SPablo de Lara 	{	/* DES DOCSIS BPI */
4531dee7bc7SPablo de Lara 		.op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
4541dee7bc7SPablo de Lara 		{.sym = {
4551dee7bc7SPablo de Lara 			.xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
4561dee7bc7SPablo de Lara 			{.cipher = {
4571dee7bc7SPablo de Lara 				.algo = RTE_CRYPTO_CIPHER_DES_DOCSISBPI,
4581dee7bc7SPablo de Lara 				.block_size = 8,
4591dee7bc7SPablo de Lara 				.key_size = {
4601dee7bc7SPablo de Lara 					.min = 8,
4611dee7bc7SPablo de Lara 					.max = 8,
4621dee7bc7SPablo de Lara 					.increment = 0
4631dee7bc7SPablo de Lara 				},
4641dee7bc7SPablo de Lara 				.iv_size = {
4651dee7bc7SPablo de Lara 					.min = 8,
4661dee7bc7SPablo de Lara 					.max = 8,
4671dee7bc7SPablo de Lara 					.increment = 0
4681dee7bc7SPablo de Lara 				}
4691dee7bc7SPablo de Lara 			}, }
4701dee7bc7SPablo de Lara 		}, }
4711dee7bc7SPablo de Lara 	},
4728a9867a6SSlawomir Mrozowicz 
4738a9867a6SSlawomir Mrozowicz 	RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
4748a9867a6SSlawomir Mrozowicz };
4758a9867a6SSlawomir Mrozowicz 
4768a9867a6SSlawomir Mrozowicz 
4778a9867a6SSlawomir Mrozowicz /** Configure device */
4788a9867a6SSlawomir Mrozowicz static int
47960e686c2SFan Zhang openssl_pmd_config(__rte_unused struct rte_cryptodev *dev,
48060e686c2SFan Zhang 		__rte_unused struct rte_cryptodev_config *config)
4818a9867a6SSlawomir Mrozowicz {
4828a9867a6SSlawomir Mrozowicz 	return 0;
4838a9867a6SSlawomir Mrozowicz }
4848a9867a6SSlawomir Mrozowicz 
4858a9867a6SSlawomir Mrozowicz /** Start device */
4868a9867a6SSlawomir Mrozowicz static int
4878a9867a6SSlawomir Mrozowicz openssl_pmd_start(__rte_unused struct rte_cryptodev *dev)
4888a9867a6SSlawomir Mrozowicz {
4898a9867a6SSlawomir Mrozowicz 	return 0;
4908a9867a6SSlawomir Mrozowicz }
4918a9867a6SSlawomir Mrozowicz 
4928a9867a6SSlawomir Mrozowicz /** Stop device */
4938a9867a6SSlawomir Mrozowicz static void
4948a9867a6SSlawomir Mrozowicz openssl_pmd_stop(__rte_unused struct rte_cryptodev *dev)
4958a9867a6SSlawomir Mrozowicz {
4968a9867a6SSlawomir Mrozowicz }
4978a9867a6SSlawomir Mrozowicz 
4988a9867a6SSlawomir Mrozowicz /** Close device */
4998a9867a6SSlawomir Mrozowicz static int
5008a9867a6SSlawomir Mrozowicz openssl_pmd_close(__rte_unused struct rte_cryptodev *dev)
5018a9867a6SSlawomir Mrozowicz {
5028a9867a6SSlawomir Mrozowicz 	return 0;
5038a9867a6SSlawomir Mrozowicz }
5048a9867a6SSlawomir Mrozowicz 
5058a9867a6SSlawomir Mrozowicz 
5068a9867a6SSlawomir Mrozowicz /** Get device statistics */
5078a9867a6SSlawomir Mrozowicz static void
5088a9867a6SSlawomir Mrozowicz openssl_pmd_stats_get(struct rte_cryptodev *dev,
5098a9867a6SSlawomir Mrozowicz 		struct rte_cryptodev_stats *stats)
5108a9867a6SSlawomir Mrozowicz {
5118a9867a6SSlawomir Mrozowicz 	int qp_id;
5128a9867a6SSlawomir Mrozowicz 
5138a9867a6SSlawomir Mrozowicz 	for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {
5148a9867a6SSlawomir Mrozowicz 		struct openssl_qp *qp = dev->data->queue_pairs[qp_id];
5158a9867a6SSlawomir Mrozowicz 
5168a9867a6SSlawomir Mrozowicz 		stats->enqueued_count += qp->stats.enqueued_count;
5178a9867a6SSlawomir Mrozowicz 		stats->dequeued_count += qp->stats.dequeued_count;
5188a9867a6SSlawomir Mrozowicz 
5198a9867a6SSlawomir Mrozowicz 		stats->enqueue_err_count += qp->stats.enqueue_err_count;
5208a9867a6SSlawomir Mrozowicz 		stats->dequeue_err_count += qp->stats.dequeue_err_count;
5218a9867a6SSlawomir Mrozowicz 	}
5228a9867a6SSlawomir Mrozowicz }
5238a9867a6SSlawomir Mrozowicz 
5248a9867a6SSlawomir Mrozowicz /** Reset device statistics */
5258a9867a6SSlawomir Mrozowicz static void
5268a9867a6SSlawomir Mrozowicz openssl_pmd_stats_reset(struct rte_cryptodev *dev)
5278a9867a6SSlawomir Mrozowicz {
5288a9867a6SSlawomir Mrozowicz 	int qp_id;
5298a9867a6SSlawomir Mrozowicz 
5308a9867a6SSlawomir Mrozowicz 	for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {
5318a9867a6SSlawomir Mrozowicz 		struct openssl_qp *qp = dev->data->queue_pairs[qp_id];
5328a9867a6SSlawomir Mrozowicz 
5338a9867a6SSlawomir Mrozowicz 		memset(&qp->stats, 0, sizeof(qp->stats));
5348a9867a6SSlawomir Mrozowicz 	}
5358a9867a6SSlawomir Mrozowicz }
5368a9867a6SSlawomir Mrozowicz 
5378a9867a6SSlawomir Mrozowicz 
5388a9867a6SSlawomir Mrozowicz /** Get device info */
5398a9867a6SSlawomir Mrozowicz static void
5408a9867a6SSlawomir Mrozowicz openssl_pmd_info_get(struct rte_cryptodev *dev,
5418a9867a6SSlawomir Mrozowicz 		struct rte_cryptodev_info *dev_info)
5428a9867a6SSlawomir Mrozowicz {
5438a9867a6SSlawomir Mrozowicz 	struct openssl_private *internals = dev->data->dev_private;
5448a9867a6SSlawomir Mrozowicz 
5458a9867a6SSlawomir Mrozowicz 	if (dev_info != NULL) {
5467a364faeSSlawomir Mrozowicz 		dev_info->driver_id = dev->driver_id;
5478a9867a6SSlawomir Mrozowicz 		dev_info->feature_flags = dev->feature_flags;
5488a9867a6SSlawomir Mrozowicz 		dev_info->capabilities = openssl_pmd_capabilities;
5498a9867a6SSlawomir Mrozowicz 		dev_info->max_nb_queue_pairs = internals->max_nb_qpairs;
5508a9867a6SSlawomir Mrozowicz 		dev_info->sym.max_nb_sessions = internals->max_nb_sessions;
5518a9867a6SSlawomir Mrozowicz 	}
5528a9867a6SSlawomir Mrozowicz }
5538a9867a6SSlawomir Mrozowicz 
5548a9867a6SSlawomir Mrozowicz /** Release queue pair */
5558a9867a6SSlawomir Mrozowicz static int
5568a9867a6SSlawomir Mrozowicz openssl_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
5578a9867a6SSlawomir Mrozowicz {
5588a9867a6SSlawomir Mrozowicz 	if (dev->data->queue_pairs[qp_id] != NULL) {
5598a9867a6SSlawomir Mrozowicz 		rte_free(dev->data->queue_pairs[qp_id]);
5608a9867a6SSlawomir Mrozowicz 		dev->data->queue_pairs[qp_id] = NULL;
5618a9867a6SSlawomir Mrozowicz 	}
5628a9867a6SSlawomir Mrozowicz 	return 0;
5638a9867a6SSlawomir Mrozowicz }
5648a9867a6SSlawomir Mrozowicz 
5658a9867a6SSlawomir Mrozowicz /** set a unique name for the queue pair based on it's name, dev_id and qp_id */
5668a9867a6SSlawomir Mrozowicz static int
5678a9867a6SSlawomir Mrozowicz openssl_pmd_qp_set_unique_name(struct rte_cryptodev *dev,
5688a9867a6SSlawomir Mrozowicz 		struct openssl_qp *qp)
5698a9867a6SSlawomir Mrozowicz {
5708a9867a6SSlawomir Mrozowicz 	unsigned int n = snprintf(qp->name, sizeof(qp->name),
5718a9867a6SSlawomir Mrozowicz 			"openssl_pmd_%u_qp_%u",
5728a9867a6SSlawomir Mrozowicz 			dev->data->dev_id, qp->id);
5738a9867a6SSlawomir Mrozowicz 
5746ab25e63STomasz Duszynski 	if (n >= sizeof(qp->name))
5758a9867a6SSlawomir Mrozowicz 		return -1;
5768a9867a6SSlawomir Mrozowicz 
5778a9867a6SSlawomir Mrozowicz 	return 0;
5788a9867a6SSlawomir Mrozowicz }
5798a9867a6SSlawomir Mrozowicz 
5808a9867a6SSlawomir Mrozowicz 
5818a9867a6SSlawomir Mrozowicz /** Create a ring to place processed operations on */
5828a9867a6SSlawomir Mrozowicz static struct rte_ring *
5838a9867a6SSlawomir Mrozowicz openssl_pmd_qp_create_processed_ops_ring(struct openssl_qp *qp,
5848a9867a6SSlawomir Mrozowicz 		unsigned int ring_size, int socket_id)
5858a9867a6SSlawomir Mrozowicz {
5868a9867a6SSlawomir Mrozowicz 	struct rte_ring *r;
5878a9867a6SSlawomir Mrozowicz 
5888a9867a6SSlawomir Mrozowicz 	r = rte_ring_lookup(qp->name);
5898a9867a6SSlawomir Mrozowicz 	if (r) {
590636e7392SBruce Richardson 		if (rte_ring_get_size(r) >= ring_size) {
5918a9867a6SSlawomir Mrozowicz 			OPENSSL_LOG_INFO(
5928a9867a6SSlawomir Mrozowicz 				"Reusing existing ring %s for processed ops",
5938a9867a6SSlawomir Mrozowicz 				 qp->name);
5948a9867a6SSlawomir Mrozowicz 			return r;
5958a9867a6SSlawomir Mrozowicz 		}
5968a9867a6SSlawomir Mrozowicz 
5978a9867a6SSlawomir Mrozowicz 		OPENSSL_LOG_ERR(
5988a9867a6SSlawomir Mrozowicz 			"Unable to reuse existing ring %s for processed ops",
5998a9867a6SSlawomir Mrozowicz 			 qp->name);
6008a9867a6SSlawomir Mrozowicz 		return NULL;
6018a9867a6SSlawomir Mrozowicz 	}
6028a9867a6SSlawomir Mrozowicz 
6038a9867a6SSlawomir Mrozowicz 	return rte_ring_create(qp->name, ring_size, socket_id,
6048a9867a6SSlawomir Mrozowicz 			RING_F_SP_ENQ | RING_F_SC_DEQ);
6058a9867a6SSlawomir Mrozowicz }
6068a9867a6SSlawomir Mrozowicz 
6078a9867a6SSlawomir Mrozowicz 
6088a9867a6SSlawomir Mrozowicz /** Setup a queue pair */
6098a9867a6SSlawomir Mrozowicz static int
6108a9867a6SSlawomir Mrozowicz openssl_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
6118a9867a6SSlawomir Mrozowicz 		const struct rte_cryptodev_qp_conf *qp_conf,
612f7db6f82SPablo de Lara 		int socket_id, struct rte_mempool *session_pool)
6138a9867a6SSlawomir Mrozowicz {
6148a9867a6SSlawomir Mrozowicz 	struct openssl_qp *qp = NULL;
6158a9867a6SSlawomir Mrozowicz 
6168a9867a6SSlawomir Mrozowicz 	/* Free memory prior to re-allocation if needed. */
6178a9867a6SSlawomir Mrozowicz 	if (dev->data->queue_pairs[qp_id] != NULL)
6188a9867a6SSlawomir Mrozowicz 		openssl_pmd_qp_release(dev, qp_id);
6198a9867a6SSlawomir Mrozowicz 
6208a9867a6SSlawomir Mrozowicz 	/* Allocate the queue pair data structure. */
6218a9867a6SSlawomir Mrozowicz 	qp = rte_zmalloc_socket("OPENSSL PMD Queue Pair", sizeof(*qp),
6228a9867a6SSlawomir Mrozowicz 					RTE_CACHE_LINE_SIZE, socket_id);
6238a9867a6SSlawomir Mrozowicz 	if (qp == NULL)
6248a9867a6SSlawomir Mrozowicz 		return -ENOMEM;
6258a9867a6SSlawomir Mrozowicz 
6268a9867a6SSlawomir Mrozowicz 	qp->id = qp_id;
6278a9867a6SSlawomir Mrozowicz 	dev->data->queue_pairs[qp_id] = qp;
6288a9867a6SSlawomir Mrozowicz 
6298a9867a6SSlawomir Mrozowicz 	if (openssl_pmd_qp_set_unique_name(dev, qp))
6308a9867a6SSlawomir Mrozowicz 		goto qp_setup_cleanup;
6318a9867a6SSlawomir Mrozowicz 
6328a9867a6SSlawomir Mrozowicz 	qp->processed_ops = openssl_pmd_qp_create_processed_ops_ring(qp,
6338a9867a6SSlawomir Mrozowicz 			qp_conf->nb_descriptors, socket_id);
6348a9867a6SSlawomir Mrozowicz 	if (qp->processed_ops == NULL)
6358a9867a6SSlawomir Mrozowicz 		goto qp_setup_cleanup;
6368a9867a6SSlawomir Mrozowicz 
637f7db6f82SPablo de Lara 	qp->sess_mp = session_pool;
6388a9867a6SSlawomir Mrozowicz 
6398a9867a6SSlawomir Mrozowicz 	memset(&qp->stats, 0, sizeof(qp->stats));
6408a9867a6SSlawomir Mrozowicz 
6418a9867a6SSlawomir Mrozowicz 	return 0;
6428a9867a6SSlawomir Mrozowicz 
6438a9867a6SSlawomir Mrozowicz qp_setup_cleanup:
6448a9867a6SSlawomir Mrozowicz 	if (qp)
6458a9867a6SSlawomir Mrozowicz 		rte_free(qp);
6468a9867a6SSlawomir Mrozowicz 
6478a9867a6SSlawomir Mrozowicz 	return -1;
6488a9867a6SSlawomir Mrozowicz }
6498a9867a6SSlawomir Mrozowicz 
6508a9867a6SSlawomir Mrozowicz /** Start queue pair */
6518a9867a6SSlawomir Mrozowicz static int
6528a9867a6SSlawomir Mrozowicz openssl_pmd_qp_start(__rte_unused struct rte_cryptodev *dev,
6538a9867a6SSlawomir Mrozowicz 		__rte_unused uint16_t queue_pair_id)
6548a9867a6SSlawomir Mrozowicz {
6558a9867a6SSlawomir Mrozowicz 	return -ENOTSUP;
6568a9867a6SSlawomir Mrozowicz }
6578a9867a6SSlawomir Mrozowicz 
6588a9867a6SSlawomir Mrozowicz /** Stop queue pair */
6598a9867a6SSlawomir Mrozowicz static int
6608a9867a6SSlawomir Mrozowicz openssl_pmd_qp_stop(__rte_unused struct rte_cryptodev *dev,
6618a9867a6SSlawomir Mrozowicz 		__rte_unused uint16_t queue_pair_id)
6628a9867a6SSlawomir Mrozowicz {
6638a9867a6SSlawomir Mrozowicz 	return -ENOTSUP;
6648a9867a6SSlawomir Mrozowicz }
6658a9867a6SSlawomir Mrozowicz 
6668a9867a6SSlawomir Mrozowicz /** Return the number of allocated queue pairs */
6678a9867a6SSlawomir Mrozowicz static uint32_t
6688a9867a6SSlawomir Mrozowicz openssl_pmd_qp_count(struct rte_cryptodev *dev)
6698a9867a6SSlawomir Mrozowicz {
6708a9867a6SSlawomir Mrozowicz 	return dev->data->nb_queue_pairs;
6718a9867a6SSlawomir Mrozowicz }
6728a9867a6SSlawomir Mrozowicz 
6738a9867a6SSlawomir Mrozowicz /** Returns the size of the session structure */
6748a9867a6SSlawomir Mrozowicz static unsigned
6758a9867a6SSlawomir Mrozowicz openssl_pmd_session_get_size(struct rte_cryptodev *dev __rte_unused)
6768a9867a6SSlawomir Mrozowicz {
6778a9867a6SSlawomir Mrozowicz 	return sizeof(struct openssl_session);
6788a9867a6SSlawomir Mrozowicz }
6798a9867a6SSlawomir Mrozowicz 
6808a9867a6SSlawomir Mrozowicz /** Configure the session from a crypto xform chain */
681b3bbd9e5SSlawomir Mrozowicz static int
6828a9867a6SSlawomir Mrozowicz openssl_pmd_session_configure(struct rte_cryptodev *dev __rte_unused,
683b3bbd9e5SSlawomir Mrozowicz 		struct rte_crypto_sym_xform *xform,
684b3bbd9e5SSlawomir Mrozowicz 		struct rte_cryptodev_sym_session *sess,
685b3bbd9e5SSlawomir Mrozowicz 		struct rte_mempool *mempool)
6868a9867a6SSlawomir Mrozowicz {
687b3bbd9e5SSlawomir Mrozowicz 	void *sess_private_data;
68827391b53SPablo de Lara 	int ret;
689b3bbd9e5SSlawomir Mrozowicz 
6908a9867a6SSlawomir Mrozowicz 	if (unlikely(sess == NULL)) {
6918a9867a6SSlawomir Mrozowicz 		OPENSSL_LOG_ERR("invalid session struct");
69227391b53SPablo de Lara 		return -EINVAL;
693b3bbd9e5SSlawomir Mrozowicz 	}
694b3bbd9e5SSlawomir Mrozowicz 
695b3bbd9e5SSlawomir Mrozowicz 	if (rte_mempool_get(mempool, &sess_private_data)) {
696b3bbd9e5SSlawomir Mrozowicz 		CDEV_LOG_ERR(
697b3bbd9e5SSlawomir Mrozowicz 			"Couldn't get object from session mempool");
69827391b53SPablo de Lara 		return -ENOMEM;
6998a9867a6SSlawomir Mrozowicz 	}
7008a9867a6SSlawomir Mrozowicz 
70127391b53SPablo de Lara 	ret = openssl_set_session_parameters(sess_private_data, xform);
70227391b53SPablo de Lara 	if (ret != 0) {
7038a9867a6SSlawomir Mrozowicz 		OPENSSL_LOG_ERR("failed configure session parameters");
704b3bbd9e5SSlawomir Mrozowicz 
705b3bbd9e5SSlawomir Mrozowicz 		/* Return session to mempool */
706b3bbd9e5SSlawomir Mrozowicz 		rte_mempool_put(mempool, sess_private_data);
70727391b53SPablo de Lara 		return ret;
7088a9867a6SSlawomir Mrozowicz 	}
7098a9867a6SSlawomir Mrozowicz 
710b3bbd9e5SSlawomir Mrozowicz 	set_session_private_data(sess, dev->driver_id,
711b3bbd9e5SSlawomir Mrozowicz 			sess_private_data);
712b3bbd9e5SSlawomir Mrozowicz 
713b3bbd9e5SSlawomir Mrozowicz 	return 0;
7148a9867a6SSlawomir Mrozowicz }
7158a9867a6SSlawomir Mrozowicz 
7168a9867a6SSlawomir Mrozowicz 
7178a9867a6SSlawomir Mrozowicz /** Clear the memory of session so it doesn't leave key material behind */
7188a9867a6SSlawomir Mrozowicz static void
719b3bbd9e5SSlawomir Mrozowicz openssl_pmd_session_clear(struct rte_cryptodev *dev,
720b3bbd9e5SSlawomir Mrozowicz 		struct rte_cryptodev_sym_session *sess)
7218a9867a6SSlawomir Mrozowicz {
722b3bbd9e5SSlawomir Mrozowicz 	uint8_t index = dev->driver_id;
723b3bbd9e5SSlawomir Mrozowicz 	void *sess_priv = get_session_private_data(sess, index);
724b3bbd9e5SSlawomir Mrozowicz 
725b3bbd9e5SSlawomir Mrozowicz 	/* Zero out the whole structure */
726b3bbd9e5SSlawomir Mrozowicz 	if (sess_priv) {
727b3bbd9e5SSlawomir Mrozowicz 		openssl_reset_session(sess_priv);
728b3bbd9e5SSlawomir Mrozowicz 		memset(sess_priv, 0, sizeof(struct openssl_session));
729b3bbd9e5SSlawomir Mrozowicz 		struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv);
730b3bbd9e5SSlawomir Mrozowicz 		set_session_private_data(sess, index, NULL);
731b3bbd9e5SSlawomir Mrozowicz 		rte_mempool_put(sess_mp, sess_priv);
7328a9867a6SSlawomir Mrozowicz 	}
7338a9867a6SSlawomir Mrozowicz }
7348a9867a6SSlawomir Mrozowicz 
7358a9867a6SSlawomir Mrozowicz struct rte_cryptodev_ops openssl_pmd_ops = {
7368a9867a6SSlawomir Mrozowicz 		.dev_configure		= openssl_pmd_config,
7378a9867a6SSlawomir Mrozowicz 		.dev_start		= openssl_pmd_start,
7388a9867a6SSlawomir Mrozowicz 		.dev_stop		= openssl_pmd_stop,
7398a9867a6SSlawomir Mrozowicz 		.dev_close		= openssl_pmd_close,
7408a9867a6SSlawomir Mrozowicz 
7418a9867a6SSlawomir Mrozowicz 		.stats_get		= openssl_pmd_stats_get,
7428a9867a6SSlawomir Mrozowicz 		.stats_reset		= openssl_pmd_stats_reset,
7438a9867a6SSlawomir Mrozowicz 
7448a9867a6SSlawomir Mrozowicz 		.dev_infos_get		= openssl_pmd_info_get,
7458a9867a6SSlawomir Mrozowicz 
7468a9867a6SSlawomir Mrozowicz 		.queue_pair_setup	= openssl_pmd_qp_setup,
7478a9867a6SSlawomir Mrozowicz 		.queue_pair_release	= openssl_pmd_qp_release,
7488a9867a6SSlawomir Mrozowicz 		.queue_pair_start	= openssl_pmd_qp_start,
7498a9867a6SSlawomir Mrozowicz 		.queue_pair_stop	= openssl_pmd_qp_stop,
7508a9867a6SSlawomir Mrozowicz 		.queue_pair_count	= openssl_pmd_qp_count,
7518a9867a6SSlawomir Mrozowicz 
7528a9867a6SSlawomir Mrozowicz 		.session_get_size	= openssl_pmd_session_get_size,
7538a9867a6SSlawomir Mrozowicz 		.session_configure	= openssl_pmd_session_configure,
7548a9867a6SSlawomir Mrozowicz 		.session_clear		= openssl_pmd_session_clear
7558a9867a6SSlawomir Mrozowicz };
7568a9867a6SSlawomir Mrozowicz 
7578a9867a6SSlawomir Mrozowicz struct rte_cryptodev_ops *rte_openssl_pmd_ops = &openssl_pmd_ops;
758