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