18a9867a6SSlawomir Mrozowicz /*- 28a9867a6SSlawomir Mrozowicz * BSD LICENSE 38a9867a6SSlawomir Mrozowicz * 4acf86169SPablo de Lara * Copyright(c) 2016-2017 Intel Corporation. All rights reserved. 58a9867a6SSlawomir Mrozowicz * 68a9867a6SSlawomir Mrozowicz * Redistribution and use in source and binary forms, with or without 78a9867a6SSlawomir Mrozowicz * modification, are permitted provided that the following conditions 88a9867a6SSlawomir Mrozowicz * are met: 98a9867a6SSlawomir Mrozowicz * 108a9867a6SSlawomir Mrozowicz * * Redistributions of source code must retain the above copyright 118a9867a6SSlawomir Mrozowicz * notice, this list of conditions and the following disclaimer. 128a9867a6SSlawomir Mrozowicz * * Redistributions in binary form must reproduce the above copyright 138a9867a6SSlawomir Mrozowicz * notice, this list of conditions and the following disclaimer in 148a9867a6SSlawomir Mrozowicz * the documentation and/or other materials provided with the 158a9867a6SSlawomir Mrozowicz * distribution. 168a9867a6SSlawomir Mrozowicz * * Neither the name of Intel Corporation nor the names of its 178a9867a6SSlawomir Mrozowicz * contributors may be used to endorse or promote products derived 188a9867a6SSlawomir Mrozowicz * from this software without specific prior written permission. 198a9867a6SSlawomir Mrozowicz * 208a9867a6SSlawomir Mrozowicz * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 218a9867a6SSlawomir Mrozowicz * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 228a9867a6SSlawomir Mrozowicz * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 238a9867a6SSlawomir Mrozowicz * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 248a9867a6SSlawomir Mrozowicz * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 258a9867a6SSlawomir Mrozowicz * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 268a9867a6SSlawomir Mrozowicz * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 278a9867a6SSlawomir Mrozowicz * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 288a9867a6SSlawomir Mrozowicz * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 298a9867a6SSlawomir Mrozowicz * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 308a9867a6SSlawomir Mrozowicz * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 318a9867a6SSlawomir Mrozowicz */ 328a9867a6SSlawomir Mrozowicz 338a9867a6SSlawomir Mrozowicz #include <string.h> 348a9867a6SSlawomir Mrozowicz 358a9867a6SSlawomir Mrozowicz #include <rte_common.h> 368a9867a6SSlawomir Mrozowicz #include <rte_malloc.h> 378a9867a6SSlawomir Mrozowicz #include <rte_cryptodev_pmd.h> 388a9867a6SSlawomir Mrozowicz 398a9867a6SSlawomir Mrozowicz #include "rte_openssl_pmd_private.h" 408a9867a6SSlawomir Mrozowicz 418a9867a6SSlawomir Mrozowicz 428a9867a6SSlawomir Mrozowicz static const struct rte_cryptodev_capabilities openssl_pmd_capabilities[] = { 438a9867a6SSlawomir Mrozowicz { /* MD5 HMAC */ 448a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 458a9867a6SSlawomir Mrozowicz {.sym = { 468a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 478a9867a6SSlawomir Mrozowicz {.auth = { 488a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_MD5_HMAC, 498a9867a6SSlawomir Mrozowicz .block_size = 64, 508a9867a6SSlawomir Mrozowicz .key_size = { 51e5e7bc71SPablo de Lara .min = 1, 528a9867a6SSlawomir Mrozowicz .max = 64, 53e5e7bc71SPablo de Lara .increment = 1 548a9867a6SSlawomir Mrozowicz }, 558a9867a6SSlawomir Mrozowicz .digest_size = { 568a9867a6SSlawomir Mrozowicz .min = 16, 578a9867a6SSlawomir Mrozowicz .max = 16, 588a9867a6SSlawomir Mrozowicz .increment = 0 598a9867a6SSlawomir Mrozowicz }, 60acf86169SPablo de Lara .iv_size = { 0 } 618a9867a6SSlawomir Mrozowicz }, } 628a9867a6SSlawomir Mrozowicz }, } 638a9867a6SSlawomir Mrozowicz }, 648a9867a6SSlawomir Mrozowicz { /* MD5 */ 658a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 668a9867a6SSlawomir Mrozowicz {.sym = { 678a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 688a9867a6SSlawomir Mrozowicz {.auth = { 698a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_MD5, 708a9867a6SSlawomir Mrozowicz .block_size = 64, 718a9867a6SSlawomir Mrozowicz .key_size = { 728a9867a6SSlawomir Mrozowicz .min = 0, 738a9867a6SSlawomir Mrozowicz .max = 0, 748a9867a6SSlawomir Mrozowicz .increment = 0 758a9867a6SSlawomir Mrozowicz }, 768a9867a6SSlawomir Mrozowicz .digest_size = { 778a9867a6SSlawomir Mrozowicz .min = 16, 788a9867a6SSlawomir Mrozowicz .max = 16, 798a9867a6SSlawomir Mrozowicz .increment = 0 808a9867a6SSlawomir Mrozowicz }, 81acf86169SPablo de Lara .iv_size = { 0 } 828a9867a6SSlawomir Mrozowicz }, } 838a9867a6SSlawomir Mrozowicz }, } 848a9867a6SSlawomir Mrozowicz }, 858a9867a6SSlawomir Mrozowicz { /* SHA1 HMAC */ 868a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 878a9867a6SSlawomir Mrozowicz {.sym = { 888a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 898a9867a6SSlawomir Mrozowicz {.auth = { 908a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA1_HMAC, 918a9867a6SSlawomir Mrozowicz .block_size = 64, 928a9867a6SSlawomir Mrozowicz .key_size = { 93e5e7bc71SPablo de Lara .min = 1, 948a9867a6SSlawomir Mrozowicz .max = 64, 95e5e7bc71SPablo de Lara .increment = 1 968a9867a6SSlawomir Mrozowicz }, 978a9867a6SSlawomir Mrozowicz .digest_size = { 988a9867a6SSlawomir Mrozowicz .min = 20, 998a9867a6SSlawomir Mrozowicz .max = 20, 1008a9867a6SSlawomir Mrozowicz .increment = 0 1018a9867a6SSlawomir Mrozowicz }, 102acf86169SPablo de Lara .iv_size = { 0 } 1038a9867a6SSlawomir Mrozowicz }, } 1048a9867a6SSlawomir Mrozowicz }, } 1058a9867a6SSlawomir Mrozowicz }, 1068a9867a6SSlawomir Mrozowicz { /* SHA1 */ 1078a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1088a9867a6SSlawomir Mrozowicz {.sym = { 1098a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1108a9867a6SSlawomir Mrozowicz {.auth = { 1118a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA1, 1128a9867a6SSlawomir Mrozowicz .block_size = 64, 1138a9867a6SSlawomir Mrozowicz .key_size = { 1148a9867a6SSlawomir Mrozowicz .min = 0, 1158a9867a6SSlawomir Mrozowicz .max = 0, 1168a9867a6SSlawomir Mrozowicz .increment = 0 1178a9867a6SSlawomir Mrozowicz }, 1188a9867a6SSlawomir Mrozowicz .digest_size = { 1198a9867a6SSlawomir Mrozowicz .min = 20, 1208a9867a6SSlawomir Mrozowicz .max = 20, 1218a9867a6SSlawomir Mrozowicz .increment = 0 1228a9867a6SSlawomir Mrozowicz }, 123acf86169SPablo de Lara .iv_size = { 0 } 1248a9867a6SSlawomir Mrozowicz }, } 1258a9867a6SSlawomir Mrozowicz }, } 1268a9867a6SSlawomir Mrozowicz }, 1278a9867a6SSlawomir Mrozowicz { /* SHA224 HMAC */ 1288a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1298a9867a6SSlawomir Mrozowicz {.sym = { 1308a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1318a9867a6SSlawomir Mrozowicz {.auth = { 1328a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA224_HMAC, 1338a9867a6SSlawomir Mrozowicz .block_size = 64, 1348a9867a6SSlawomir Mrozowicz .key_size = { 135e5e7bc71SPablo de Lara .min = 1, 1368a9867a6SSlawomir Mrozowicz .max = 64, 137e5e7bc71SPablo de Lara .increment = 1 1388a9867a6SSlawomir Mrozowicz }, 1398a9867a6SSlawomir Mrozowicz .digest_size = { 1408a9867a6SSlawomir Mrozowicz .min = 28, 1418a9867a6SSlawomir Mrozowicz .max = 28, 1428a9867a6SSlawomir Mrozowicz .increment = 0 1438a9867a6SSlawomir Mrozowicz }, 144acf86169SPablo de Lara .iv_size = { 0 } 1458a9867a6SSlawomir Mrozowicz }, } 1468a9867a6SSlawomir Mrozowicz }, } 1478a9867a6SSlawomir Mrozowicz }, 1488a9867a6SSlawomir Mrozowicz { /* SHA224 */ 1498a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1508a9867a6SSlawomir Mrozowicz {.sym = { 1518a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1528a9867a6SSlawomir Mrozowicz {.auth = { 1538a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA224, 1548a9867a6SSlawomir Mrozowicz .block_size = 64, 1558a9867a6SSlawomir Mrozowicz .key_size = { 1568a9867a6SSlawomir Mrozowicz .min = 0, 1578a9867a6SSlawomir Mrozowicz .max = 0, 1588a9867a6SSlawomir Mrozowicz .increment = 0 1598a9867a6SSlawomir Mrozowicz }, 1608a9867a6SSlawomir Mrozowicz .digest_size = { 1618a9867a6SSlawomir Mrozowicz .min = 28, 1628a9867a6SSlawomir Mrozowicz .max = 28, 1638a9867a6SSlawomir Mrozowicz .increment = 0 1648a9867a6SSlawomir Mrozowicz }, 165acf86169SPablo de Lara .iv_size = { 0 } 1668a9867a6SSlawomir Mrozowicz }, } 1678a9867a6SSlawomir Mrozowicz }, } 1688a9867a6SSlawomir Mrozowicz }, 1698a9867a6SSlawomir Mrozowicz { /* SHA256 HMAC */ 1708a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1718a9867a6SSlawomir Mrozowicz {.sym = { 1728a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1738a9867a6SSlawomir Mrozowicz {.auth = { 1748a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA256_HMAC, 1758a9867a6SSlawomir Mrozowicz .block_size = 64, 1768a9867a6SSlawomir Mrozowicz .key_size = { 177e5e7bc71SPablo de Lara .min = 1, 1788a9867a6SSlawomir Mrozowicz .max = 64, 179e5e7bc71SPablo de Lara .increment = 1 1808a9867a6SSlawomir Mrozowicz }, 1818a9867a6SSlawomir Mrozowicz .digest_size = { 1828a9867a6SSlawomir Mrozowicz .min = 32, 1838a9867a6SSlawomir Mrozowicz .max = 32, 1848a9867a6SSlawomir Mrozowicz .increment = 0 1858a9867a6SSlawomir Mrozowicz }, 186acf86169SPablo de Lara .iv_size = { 0 } 1878a9867a6SSlawomir Mrozowicz }, } 1888a9867a6SSlawomir Mrozowicz }, } 1898a9867a6SSlawomir Mrozowicz }, 1908a9867a6SSlawomir Mrozowicz { /* SHA256 */ 1918a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1928a9867a6SSlawomir Mrozowicz {.sym = { 1938a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1948a9867a6SSlawomir Mrozowicz {.auth = { 1958a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA256, 1968a9867a6SSlawomir Mrozowicz .block_size = 64, 1978a9867a6SSlawomir Mrozowicz .key_size = { 1988a9867a6SSlawomir Mrozowicz .min = 0, 1998a9867a6SSlawomir Mrozowicz .max = 0, 2008a9867a6SSlawomir Mrozowicz .increment = 0 2018a9867a6SSlawomir Mrozowicz }, 2028a9867a6SSlawomir Mrozowicz .digest_size = { 2038a9867a6SSlawomir Mrozowicz .min = 32, 2048a9867a6SSlawomir Mrozowicz .max = 32, 2058a9867a6SSlawomir Mrozowicz .increment = 0 2068a9867a6SSlawomir Mrozowicz }, 207acf86169SPablo de Lara .iv_size = { 0 } 2088a9867a6SSlawomir Mrozowicz }, } 2098a9867a6SSlawomir Mrozowicz }, } 2108a9867a6SSlawomir Mrozowicz }, 2118a9867a6SSlawomir Mrozowicz { /* SHA384 HMAC */ 2128a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2138a9867a6SSlawomir Mrozowicz {.sym = { 2148a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 2158a9867a6SSlawomir Mrozowicz {.auth = { 2168a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA384_HMAC, 2178a9867a6SSlawomir Mrozowicz .block_size = 128, 2188a9867a6SSlawomir Mrozowicz .key_size = { 219e5e7bc71SPablo de Lara .min = 1, 2208a9867a6SSlawomir Mrozowicz .max = 128, 221e5e7bc71SPablo de Lara .increment = 1 2228a9867a6SSlawomir Mrozowicz }, 2238a9867a6SSlawomir Mrozowicz .digest_size = { 2248a9867a6SSlawomir Mrozowicz .min = 48, 2258a9867a6SSlawomir Mrozowicz .max = 48, 2268a9867a6SSlawomir Mrozowicz .increment = 0 2278a9867a6SSlawomir Mrozowicz }, 228acf86169SPablo de Lara .iv_size = { 0 } 2298a9867a6SSlawomir Mrozowicz }, } 2308a9867a6SSlawomir Mrozowicz }, } 2318a9867a6SSlawomir Mrozowicz }, 2328a9867a6SSlawomir Mrozowicz { /* SHA384 */ 2338a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2348a9867a6SSlawomir Mrozowicz {.sym = { 2358a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 2368a9867a6SSlawomir Mrozowicz {.auth = { 2378a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA384, 2388a9867a6SSlawomir Mrozowicz .block_size = 128, 2398a9867a6SSlawomir Mrozowicz .key_size = { 2408a9867a6SSlawomir Mrozowicz .min = 0, 2418a9867a6SSlawomir Mrozowicz .max = 0, 2428a9867a6SSlawomir Mrozowicz .increment = 0 2438a9867a6SSlawomir Mrozowicz }, 2448a9867a6SSlawomir Mrozowicz .digest_size = { 2458a9867a6SSlawomir Mrozowicz .min = 48, 2468a9867a6SSlawomir Mrozowicz .max = 48, 2478a9867a6SSlawomir Mrozowicz .increment = 0 2488a9867a6SSlawomir Mrozowicz }, 249acf86169SPablo de Lara .iv_size = { 0 } 2508a9867a6SSlawomir Mrozowicz }, } 2518a9867a6SSlawomir Mrozowicz }, } 2528a9867a6SSlawomir Mrozowicz }, 2538a9867a6SSlawomir Mrozowicz { /* SHA512 HMAC */ 2548a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2558a9867a6SSlawomir Mrozowicz {.sym = { 2568a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 2578a9867a6SSlawomir Mrozowicz {.auth = { 2588a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA512_HMAC, 2598a9867a6SSlawomir Mrozowicz .block_size = 128, 2608a9867a6SSlawomir Mrozowicz .key_size = { 261e5e7bc71SPablo de Lara .min = 1, 2628a9867a6SSlawomir Mrozowicz .max = 128, 263e5e7bc71SPablo de Lara .increment = 1 2648a9867a6SSlawomir Mrozowicz }, 2658a9867a6SSlawomir Mrozowicz .digest_size = { 2668a9867a6SSlawomir Mrozowicz .min = 64, 2678a9867a6SSlawomir Mrozowicz .max = 64, 2688a9867a6SSlawomir Mrozowicz .increment = 0 2698a9867a6SSlawomir Mrozowicz }, 270acf86169SPablo de Lara .iv_size = { 0 } 2718a9867a6SSlawomir Mrozowicz }, } 2728a9867a6SSlawomir Mrozowicz }, } 2738a9867a6SSlawomir Mrozowicz }, 2748a9867a6SSlawomir Mrozowicz { /* SHA512 */ 2758a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2768a9867a6SSlawomir Mrozowicz {.sym = { 2778a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 2788a9867a6SSlawomir Mrozowicz {.auth = { 2798a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA512, 2808a9867a6SSlawomir Mrozowicz .block_size = 128, 2818a9867a6SSlawomir Mrozowicz .key_size = { 2828a9867a6SSlawomir Mrozowicz .min = 0, 2838a9867a6SSlawomir Mrozowicz .max = 0, 2848a9867a6SSlawomir Mrozowicz .increment = 0 2858a9867a6SSlawomir Mrozowicz }, 2868a9867a6SSlawomir Mrozowicz .digest_size = { 2878a9867a6SSlawomir Mrozowicz .min = 64, 2888a9867a6SSlawomir Mrozowicz .max = 64, 2898a9867a6SSlawomir Mrozowicz .increment = 0 2908a9867a6SSlawomir Mrozowicz }, 291acf86169SPablo de Lara .iv_size = { 0 } 2928a9867a6SSlawomir Mrozowicz }, } 2938a9867a6SSlawomir Mrozowicz }, } 2948a9867a6SSlawomir Mrozowicz }, 2958a9867a6SSlawomir Mrozowicz { /* AES CBC */ 2968a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2978a9867a6SSlawomir Mrozowicz {.sym = { 2988a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 2998a9867a6SSlawomir Mrozowicz {.cipher = { 3008a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_AES_CBC, 3018a9867a6SSlawomir Mrozowicz .block_size = 16, 3028a9867a6SSlawomir Mrozowicz .key_size = { 3038a9867a6SSlawomir Mrozowicz .min = 16, 3048a9867a6SSlawomir Mrozowicz .max = 32, 3058a9867a6SSlawomir Mrozowicz .increment = 8 3068a9867a6SSlawomir Mrozowicz }, 3078a9867a6SSlawomir Mrozowicz .iv_size = { 3088a9867a6SSlawomir Mrozowicz .min = 16, 3098a9867a6SSlawomir Mrozowicz .max = 16, 3108a9867a6SSlawomir Mrozowicz .increment = 0 3118a9867a6SSlawomir Mrozowicz } 3128a9867a6SSlawomir Mrozowicz }, } 3138a9867a6SSlawomir Mrozowicz }, } 3148a9867a6SSlawomir Mrozowicz }, 3158a9867a6SSlawomir Mrozowicz { /* AES CTR */ 3168a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 3178a9867a6SSlawomir Mrozowicz {.sym = { 3188a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 3198a9867a6SSlawomir Mrozowicz {.cipher = { 3208a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_AES_CTR, 3218a9867a6SSlawomir Mrozowicz .block_size = 16, 3228a9867a6SSlawomir Mrozowicz .key_size = { 3238a9867a6SSlawomir Mrozowicz .min = 16, 3248a9867a6SSlawomir Mrozowicz .max = 32, 3258a9867a6SSlawomir Mrozowicz .increment = 8 3268a9867a6SSlawomir Mrozowicz }, 3278a9867a6SSlawomir Mrozowicz .iv_size = { 3288a9867a6SSlawomir Mrozowicz .min = 16, 3298a9867a6SSlawomir Mrozowicz .max = 16, 3308a9867a6SSlawomir Mrozowicz .increment = 0 3318a9867a6SSlawomir Mrozowicz } 3328a9867a6SSlawomir Mrozowicz }, } 3338a9867a6SSlawomir Mrozowicz }, } 3348a9867a6SSlawomir Mrozowicz }, 335b79e4c00SPablo de Lara { /* AES GCM */ 3368a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 3378a9867a6SSlawomir Mrozowicz {.sym = { 338b79e4c00SPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD, 339b79e4c00SPablo de Lara {.aead = { 340b79e4c00SPablo de Lara .algo = RTE_CRYPTO_AEAD_AES_GCM, 3418a9867a6SSlawomir Mrozowicz .block_size = 16, 3428a9867a6SSlawomir Mrozowicz .key_size = { 3438a9867a6SSlawomir Mrozowicz .min = 16, 3448a9867a6SSlawomir Mrozowicz .max = 32, 3458a9867a6SSlawomir Mrozowicz .increment = 8 3468a9867a6SSlawomir Mrozowicz }, 3478a9867a6SSlawomir Mrozowicz .digest_size = { 3488a9867a6SSlawomir Mrozowicz .min = 16, 3498a9867a6SSlawomir Mrozowicz .max = 16, 3508a9867a6SSlawomir Mrozowicz .increment = 0 3518a9867a6SSlawomir Mrozowicz }, 3528a9867a6SSlawomir Mrozowicz .aad_size = { 3530625598aSArek Kusztal .min = 0, 3540625598aSArek Kusztal .max = 65535, 3550625598aSArek Kusztal .increment = 1 356acf86169SPablo de Lara }, 3578a9867a6SSlawomir Mrozowicz .iv_size = { 3588a9867a6SSlawomir Mrozowicz .min = 12, 3598a9867a6SSlawomir Mrozowicz .max = 16, 3608a9867a6SSlawomir Mrozowicz .increment = 4 361b79e4c00SPablo de Lara }, 3628a9867a6SSlawomir Mrozowicz }, } 3638a9867a6SSlawomir Mrozowicz }, } 3648a9867a6SSlawomir Mrozowicz }, 365*1a4998dcSPablo de Lara { /* AES CCM */ 366*1a4998dcSPablo de Lara .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 367*1a4998dcSPablo de Lara {.sym = { 368*1a4998dcSPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD, 369*1a4998dcSPablo de Lara {.aead = { 370*1a4998dcSPablo de Lara .algo = RTE_CRYPTO_AEAD_AES_CCM, 371*1a4998dcSPablo de Lara .block_size = 16, 372*1a4998dcSPablo de Lara .key_size = { 373*1a4998dcSPablo de Lara .min = 16, 374*1a4998dcSPablo de Lara .max = 32, 375*1a4998dcSPablo de Lara .increment = 8 376*1a4998dcSPablo de Lara }, 377*1a4998dcSPablo de Lara .digest_size = { 378*1a4998dcSPablo de Lara .min = 4, 379*1a4998dcSPablo de Lara .max = 16, 380*1a4998dcSPablo de Lara .increment = 2 381*1a4998dcSPablo de Lara }, 382*1a4998dcSPablo de Lara .aad_size = { 383*1a4998dcSPablo de Lara .min = 0, 384*1a4998dcSPablo de Lara .max = 65535, 385*1a4998dcSPablo de Lara .increment = 1 386*1a4998dcSPablo de Lara }, 387*1a4998dcSPablo de Lara .iv_size = { 388*1a4998dcSPablo de Lara .min = 7, 389*1a4998dcSPablo de Lara .max = 13, 390*1a4998dcSPablo de Lara .increment = 1 391*1a4998dcSPablo de Lara }, 392*1a4998dcSPablo de Lara }, } 393*1a4998dcSPablo de Lara }, } 394*1a4998dcSPablo de Lara }, 3958a9867a6SSlawomir Mrozowicz { /* AES GMAC (AUTH) */ 3968a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 3978a9867a6SSlawomir Mrozowicz {.sym = { 3988a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 3998a9867a6SSlawomir Mrozowicz {.auth = { 4008a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_AES_GMAC, 4018a9867a6SSlawomir Mrozowicz .block_size = 16, 4028a9867a6SSlawomir Mrozowicz .key_size = { 4038a9867a6SSlawomir Mrozowicz .min = 16, 4048a9867a6SSlawomir Mrozowicz .max = 32, 4058a9867a6SSlawomir Mrozowicz .increment = 8 4068a9867a6SSlawomir Mrozowicz }, 4078a9867a6SSlawomir Mrozowicz .digest_size = { 4088a9867a6SSlawomir Mrozowicz .min = 16, 4098a9867a6SSlawomir Mrozowicz .max = 16, 4108a9867a6SSlawomir Mrozowicz .increment = 0 4118a9867a6SSlawomir Mrozowicz }, 412e32e4fa8SPablo de Lara .iv_size = { 413e32e4fa8SPablo de Lara .min = 12, 414e32e4fa8SPablo de Lara .max = 16, 4158a9867a6SSlawomir Mrozowicz .increment = 4 416e32e4fa8SPablo de Lara } 4178a9867a6SSlawomir Mrozowicz }, } 4188a9867a6SSlawomir Mrozowicz }, } 4198a9867a6SSlawomir Mrozowicz }, 4208a9867a6SSlawomir Mrozowicz { /* 3DES CBC */ 4218a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 4228a9867a6SSlawomir Mrozowicz {.sym = { 4238a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 4248a9867a6SSlawomir Mrozowicz {.cipher = { 4258a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_3DES_CBC, 4268a9867a6SSlawomir Mrozowicz .block_size = 8, 4278a9867a6SSlawomir Mrozowicz .key_size = { 4288a9867a6SSlawomir Mrozowicz .min = 16, 4298a9867a6SSlawomir Mrozowicz .max = 24, 4308a9867a6SSlawomir Mrozowicz .increment = 8 4318a9867a6SSlawomir Mrozowicz }, 4328a9867a6SSlawomir Mrozowicz .iv_size = { 4338a9867a6SSlawomir Mrozowicz .min = 8, 4348a9867a6SSlawomir Mrozowicz .max = 8, 4358a9867a6SSlawomir Mrozowicz .increment = 0 4368a9867a6SSlawomir Mrozowicz } 4378a9867a6SSlawomir Mrozowicz }, } 4388a9867a6SSlawomir Mrozowicz }, } 4398a9867a6SSlawomir Mrozowicz }, 4408a9867a6SSlawomir Mrozowicz { /* 3DES CTR */ 4418a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 4428a9867a6SSlawomir Mrozowicz {.sym = { 4438a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 4448a9867a6SSlawomir Mrozowicz {.cipher = { 4458a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_3DES_CTR, 4468a9867a6SSlawomir Mrozowicz .block_size = 8, 4478a9867a6SSlawomir Mrozowicz .key_size = { 4488a9867a6SSlawomir Mrozowicz .min = 16, 4498a9867a6SSlawomir Mrozowicz .max = 24, 4508a9867a6SSlawomir Mrozowicz .increment = 8 4518a9867a6SSlawomir Mrozowicz }, 4528a9867a6SSlawomir Mrozowicz .iv_size = { 4538a9867a6SSlawomir Mrozowicz .min = 8, 4548a9867a6SSlawomir Mrozowicz .max = 8, 4558a9867a6SSlawomir Mrozowicz .increment = 0 4568a9867a6SSlawomir Mrozowicz } 4578a9867a6SSlawomir Mrozowicz }, } 4588a9867a6SSlawomir Mrozowicz }, } 4598a9867a6SSlawomir Mrozowicz }, 460c1734807SPablo de Lara { /* DES CBC */ 461c1734807SPablo de Lara .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 462c1734807SPablo de Lara {.sym = { 463c1734807SPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 464c1734807SPablo de Lara {.cipher = { 465c1734807SPablo de Lara .algo = RTE_CRYPTO_CIPHER_DES_CBC, 466c1734807SPablo de Lara .block_size = 8, 467c1734807SPablo de Lara .key_size = { 468c1734807SPablo de Lara .min = 8, 469c1734807SPablo de Lara .max = 8, 470c1734807SPablo de Lara .increment = 0 471c1734807SPablo de Lara }, 472c1734807SPablo de Lara .iv_size = { 473c1734807SPablo de Lara .min = 8, 474c1734807SPablo de Lara .max = 8, 475c1734807SPablo de Lara .increment = 0 476c1734807SPablo de Lara } 477c1734807SPablo de Lara }, } 478c1734807SPablo de Lara }, } 479c1734807SPablo de Lara }, 4801dee7bc7SPablo de Lara { /* DES DOCSIS BPI */ 4811dee7bc7SPablo de Lara .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 4821dee7bc7SPablo de Lara {.sym = { 4831dee7bc7SPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 4841dee7bc7SPablo de Lara {.cipher = { 4851dee7bc7SPablo de Lara .algo = RTE_CRYPTO_CIPHER_DES_DOCSISBPI, 4861dee7bc7SPablo de Lara .block_size = 8, 4871dee7bc7SPablo de Lara .key_size = { 4881dee7bc7SPablo de Lara .min = 8, 4891dee7bc7SPablo de Lara .max = 8, 4901dee7bc7SPablo de Lara .increment = 0 4911dee7bc7SPablo de Lara }, 4921dee7bc7SPablo de Lara .iv_size = { 4931dee7bc7SPablo de Lara .min = 8, 4941dee7bc7SPablo de Lara .max = 8, 4951dee7bc7SPablo de Lara .increment = 0 4961dee7bc7SPablo de Lara } 4971dee7bc7SPablo de Lara }, } 4981dee7bc7SPablo de Lara }, } 4991dee7bc7SPablo de Lara }, 5008a9867a6SSlawomir Mrozowicz 5018a9867a6SSlawomir Mrozowicz RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() 5028a9867a6SSlawomir Mrozowicz }; 5038a9867a6SSlawomir Mrozowicz 5048a9867a6SSlawomir Mrozowicz 5058a9867a6SSlawomir Mrozowicz /** Configure device */ 5068a9867a6SSlawomir Mrozowicz static int 50760e686c2SFan Zhang openssl_pmd_config(__rte_unused struct rte_cryptodev *dev, 50860e686c2SFan Zhang __rte_unused struct rte_cryptodev_config *config) 5098a9867a6SSlawomir Mrozowicz { 5108a9867a6SSlawomir Mrozowicz return 0; 5118a9867a6SSlawomir Mrozowicz } 5128a9867a6SSlawomir Mrozowicz 5138a9867a6SSlawomir Mrozowicz /** Start device */ 5148a9867a6SSlawomir Mrozowicz static int 5158a9867a6SSlawomir Mrozowicz openssl_pmd_start(__rte_unused struct rte_cryptodev *dev) 5168a9867a6SSlawomir Mrozowicz { 5178a9867a6SSlawomir Mrozowicz return 0; 5188a9867a6SSlawomir Mrozowicz } 5198a9867a6SSlawomir Mrozowicz 5208a9867a6SSlawomir Mrozowicz /** Stop device */ 5218a9867a6SSlawomir Mrozowicz static void 5228a9867a6SSlawomir Mrozowicz openssl_pmd_stop(__rte_unused struct rte_cryptodev *dev) 5238a9867a6SSlawomir Mrozowicz { 5248a9867a6SSlawomir Mrozowicz } 5258a9867a6SSlawomir Mrozowicz 5268a9867a6SSlawomir Mrozowicz /** Close device */ 5278a9867a6SSlawomir Mrozowicz static int 5288a9867a6SSlawomir Mrozowicz openssl_pmd_close(__rte_unused struct rte_cryptodev *dev) 5298a9867a6SSlawomir Mrozowicz { 5308a9867a6SSlawomir Mrozowicz return 0; 5318a9867a6SSlawomir Mrozowicz } 5328a9867a6SSlawomir Mrozowicz 5338a9867a6SSlawomir Mrozowicz 5348a9867a6SSlawomir Mrozowicz /** Get device statistics */ 5358a9867a6SSlawomir Mrozowicz static void 5368a9867a6SSlawomir Mrozowicz openssl_pmd_stats_get(struct rte_cryptodev *dev, 5378a9867a6SSlawomir Mrozowicz struct rte_cryptodev_stats *stats) 5388a9867a6SSlawomir Mrozowicz { 5398a9867a6SSlawomir Mrozowicz int qp_id; 5408a9867a6SSlawomir Mrozowicz 5418a9867a6SSlawomir Mrozowicz for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { 5428a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = dev->data->queue_pairs[qp_id]; 5438a9867a6SSlawomir Mrozowicz 5448a9867a6SSlawomir Mrozowicz stats->enqueued_count += qp->stats.enqueued_count; 5458a9867a6SSlawomir Mrozowicz stats->dequeued_count += qp->stats.dequeued_count; 5468a9867a6SSlawomir Mrozowicz 5478a9867a6SSlawomir Mrozowicz stats->enqueue_err_count += qp->stats.enqueue_err_count; 5488a9867a6SSlawomir Mrozowicz stats->dequeue_err_count += qp->stats.dequeue_err_count; 5498a9867a6SSlawomir Mrozowicz } 5508a9867a6SSlawomir Mrozowicz } 5518a9867a6SSlawomir Mrozowicz 5528a9867a6SSlawomir Mrozowicz /** Reset device statistics */ 5538a9867a6SSlawomir Mrozowicz static void 5548a9867a6SSlawomir Mrozowicz openssl_pmd_stats_reset(struct rte_cryptodev *dev) 5558a9867a6SSlawomir Mrozowicz { 5568a9867a6SSlawomir Mrozowicz int qp_id; 5578a9867a6SSlawomir Mrozowicz 5588a9867a6SSlawomir Mrozowicz for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { 5598a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = dev->data->queue_pairs[qp_id]; 5608a9867a6SSlawomir Mrozowicz 5618a9867a6SSlawomir Mrozowicz memset(&qp->stats, 0, sizeof(qp->stats)); 5628a9867a6SSlawomir Mrozowicz } 5638a9867a6SSlawomir Mrozowicz } 5648a9867a6SSlawomir Mrozowicz 5658a9867a6SSlawomir Mrozowicz 5668a9867a6SSlawomir Mrozowicz /** Get device info */ 5678a9867a6SSlawomir Mrozowicz static void 5688a9867a6SSlawomir Mrozowicz openssl_pmd_info_get(struct rte_cryptodev *dev, 5698a9867a6SSlawomir Mrozowicz struct rte_cryptodev_info *dev_info) 5708a9867a6SSlawomir Mrozowicz { 5718a9867a6SSlawomir Mrozowicz struct openssl_private *internals = dev->data->dev_private; 5728a9867a6SSlawomir Mrozowicz 5738a9867a6SSlawomir Mrozowicz if (dev_info != NULL) { 5747a364faeSSlawomir Mrozowicz dev_info->driver_id = dev->driver_id; 5758a9867a6SSlawomir Mrozowicz dev_info->feature_flags = dev->feature_flags; 5768a9867a6SSlawomir Mrozowicz dev_info->capabilities = openssl_pmd_capabilities; 5778a9867a6SSlawomir Mrozowicz dev_info->max_nb_queue_pairs = internals->max_nb_qpairs; 5788a9867a6SSlawomir Mrozowicz dev_info->sym.max_nb_sessions = internals->max_nb_sessions; 5798a9867a6SSlawomir Mrozowicz } 5808a9867a6SSlawomir Mrozowicz } 5818a9867a6SSlawomir Mrozowicz 5828a9867a6SSlawomir Mrozowicz /** Release queue pair */ 5838a9867a6SSlawomir Mrozowicz static int 5848a9867a6SSlawomir Mrozowicz openssl_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id) 5858a9867a6SSlawomir Mrozowicz { 5868a9867a6SSlawomir Mrozowicz if (dev->data->queue_pairs[qp_id] != NULL) { 5878a9867a6SSlawomir Mrozowicz rte_free(dev->data->queue_pairs[qp_id]); 5888a9867a6SSlawomir Mrozowicz dev->data->queue_pairs[qp_id] = NULL; 5898a9867a6SSlawomir Mrozowicz } 5908a9867a6SSlawomir Mrozowicz return 0; 5918a9867a6SSlawomir Mrozowicz } 5928a9867a6SSlawomir Mrozowicz 5938a9867a6SSlawomir Mrozowicz /** set a unique name for the queue pair based on it's name, dev_id and qp_id */ 5948a9867a6SSlawomir Mrozowicz static int 5958a9867a6SSlawomir Mrozowicz openssl_pmd_qp_set_unique_name(struct rte_cryptodev *dev, 5968a9867a6SSlawomir Mrozowicz struct openssl_qp *qp) 5978a9867a6SSlawomir Mrozowicz { 5988a9867a6SSlawomir Mrozowicz unsigned int n = snprintf(qp->name, sizeof(qp->name), 5998a9867a6SSlawomir Mrozowicz "openssl_pmd_%u_qp_%u", 6008a9867a6SSlawomir Mrozowicz dev->data->dev_id, qp->id); 6018a9867a6SSlawomir Mrozowicz 6028a9867a6SSlawomir Mrozowicz if (n > sizeof(qp->name)) 6038a9867a6SSlawomir Mrozowicz return -1; 6048a9867a6SSlawomir Mrozowicz 6058a9867a6SSlawomir Mrozowicz return 0; 6068a9867a6SSlawomir Mrozowicz } 6078a9867a6SSlawomir Mrozowicz 6088a9867a6SSlawomir Mrozowicz 6098a9867a6SSlawomir Mrozowicz /** Create a ring to place processed operations on */ 6108a9867a6SSlawomir Mrozowicz static struct rte_ring * 6118a9867a6SSlawomir Mrozowicz openssl_pmd_qp_create_processed_ops_ring(struct openssl_qp *qp, 6128a9867a6SSlawomir Mrozowicz unsigned int ring_size, int socket_id) 6138a9867a6SSlawomir Mrozowicz { 6148a9867a6SSlawomir Mrozowicz struct rte_ring *r; 6158a9867a6SSlawomir Mrozowicz 6168a9867a6SSlawomir Mrozowicz r = rte_ring_lookup(qp->name); 6178a9867a6SSlawomir Mrozowicz if (r) { 618636e7392SBruce Richardson if (rte_ring_get_size(r) >= ring_size) { 6198a9867a6SSlawomir Mrozowicz OPENSSL_LOG_INFO( 6208a9867a6SSlawomir Mrozowicz "Reusing existing ring %s for processed ops", 6218a9867a6SSlawomir Mrozowicz qp->name); 6228a9867a6SSlawomir Mrozowicz return r; 6238a9867a6SSlawomir Mrozowicz } 6248a9867a6SSlawomir Mrozowicz 6258a9867a6SSlawomir Mrozowicz OPENSSL_LOG_ERR( 6268a9867a6SSlawomir Mrozowicz "Unable to reuse existing ring %s for processed ops", 6278a9867a6SSlawomir Mrozowicz qp->name); 6288a9867a6SSlawomir Mrozowicz return NULL; 6298a9867a6SSlawomir Mrozowicz } 6308a9867a6SSlawomir Mrozowicz 6318a9867a6SSlawomir Mrozowicz return rte_ring_create(qp->name, ring_size, socket_id, 6328a9867a6SSlawomir Mrozowicz RING_F_SP_ENQ | RING_F_SC_DEQ); 6338a9867a6SSlawomir Mrozowicz } 6348a9867a6SSlawomir Mrozowicz 6358a9867a6SSlawomir Mrozowicz 6368a9867a6SSlawomir Mrozowicz /** Setup a queue pair */ 6378a9867a6SSlawomir Mrozowicz static int 6388a9867a6SSlawomir Mrozowicz openssl_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id, 6398a9867a6SSlawomir Mrozowicz const struct rte_cryptodev_qp_conf *qp_conf, 640f7db6f82SPablo de Lara int socket_id, struct rte_mempool *session_pool) 6418a9867a6SSlawomir Mrozowicz { 6428a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = NULL; 6438a9867a6SSlawomir Mrozowicz 6448a9867a6SSlawomir Mrozowicz /* Free memory prior to re-allocation if needed. */ 6458a9867a6SSlawomir Mrozowicz if (dev->data->queue_pairs[qp_id] != NULL) 6468a9867a6SSlawomir Mrozowicz openssl_pmd_qp_release(dev, qp_id); 6478a9867a6SSlawomir Mrozowicz 6488a9867a6SSlawomir Mrozowicz /* Allocate the queue pair data structure. */ 6498a9867a6SSlawomir Mrozowicz qp = rte_zmalloc_socket("OPENSSL PMD Queue Pair", sizeof(*qp), 6508a9867a6SSlawomir Mrozowicz RTE_CACHE_LINE_SIZE, socket_id); 6518a9867a6SSlawomir Mrozowicz if (qp == NULL) 6528a9867a6SSlawomir Mrozowicz return -ENOMEM; 6538a9867a6SSlawomir Mrozowicz 6548a9867a6SSlawomir Mrozowicz qp->id = qp_id; 6558a9867a6SSlawomir Mrozowicz dev->data->queue_pairs[qp_id] = qp; 6568a9867a6SSlawomir Mrozowicz 6578a9867a6SSlawomir Mrozowicz if (openssl_pmd_qp_set_unique_name(dev, qp)) 6588a9867a6SSlawomir Mrozowicz goto qp_setup_cleanup; 6598a9867a6SSlawomir Mrozowicz 6608a9867a6SSlawomir Mrozowicz qp->processed_ops = openssl_pmd_qp_create_processed_ops_ring(qp, 6618a9867a6SSlawomir Mrozowicz qp_conf->nb_descriptors, socket_id); 6628a9867a6SSlawomir Mrozowicz if (qp->processed_ops == NULL) 6638a9867a6SSlawomir Mrozowicz goto qp_setup_cleanup; 6648a9867a6SSlawomir Mrozowicz 665f7db6f82SPablo de Lara qp->sess_mp = session_pool; 6668a9867a6SSlawomir Mrozowicz 6678a9867a6SSlawomir Mrozowicz memset(&qp->stats, 0, sizeof(qp->stats)); 6688a9867a6SSlawomir Mrozowicz 6698a9867a6SSlawomir Mrozowicz return 0; 6708a9867a6SSlawomir Mrozowicz 6718a9867a6SSlawomir Mrozowicz qp_setup_cleanup: 6728a9867a6SSlawomir Mrozowicz if (qp) 6738a9867a6SSlawomir Mrozowicz rte_free(qp); 6748a9867a6SSlawomir Mrozowicz 6758a9867a6SSlawomir Mrozowicz return -1; 6768a9867a6SSlawomir Mrozowicz } 6778a9867a6SSlawomir Mrozowicz 6788a9867a6SSlawomir Mrozowicz /** Start queue pair */ 6798a9867a6SSlawomir Mrozowicz static int 6808a9867a6SSlawomir Mrozowicz openssl_pmd_qp_start(__rte_unused struct rte_cryptodev *dev, 6818a9867a6SSlawomir Mrozowicz __rte_unused uint16_t queue_pair_id) 6828a9867a6SSlawomir Mrozowicz { 6838a9867a6SSlawomir Mrozowicz return -ENOTSUP; 6848a9867a6SSlawomir Mrozowicz } 6858a9867a6SSlawomir Mrozowicz 6868a9867a6SSlawomir Mrozowicz /** Stop queue pair */ 6878a9867a6SSlawomir Mrozowicz static int 6888a9867a6SSlawomir Mrozowicz openssl_pmd_qp_stop(__rte_unused struct rte_cryptodev *dev, 6898a9867a6SSlawomir Mrozowicz __rte_unused uint16_t queue_pair_id) 6908a9867a6SSlawomir Mrozowicz { 6918a9867a6SSlawomir Mrozowicz return -ENOTSUP; 6928a9867a6SSlawomir Mrozowicz } 6938a9867a6SSlawomir Mrozowicz 6948a9867a6SSlawomir Mrozowicz /** Return the number of allocated queue pairs */ 6958a9867a6SSlawomir Mrozowicz static uint32_t 6968a9867a6SSlawomir Mrozowicz openssl_pmd_qp_count(struct rte_cryptodev *dev) 6978a9867a6SSlawomir Mrozowicz { 6988a9867a6SSlawomir Mrozowicz return dev->data->nb_queue_pairs; 6998a9867a6SSlawomir Mrozowicz } 7008a9867a6SSlawomir Mrozowicz 7018a9867a6SSlawomir Mrozowicz /** Returns the size of the session structure */ 7028a9867a6SSlawomir Mrozowicz static unsigned 7038a9867a6SSlawomir Mrozowicz openssl_pmd_session_get_size(struct rte_cryptodev *dev __rte_unused) 7048a9867a6SSlawomir Mrozowicz { 7058a9867a6SSlawomir Mrozowicz return sizeof(struct openssl_session); 7068a9867a6SSlawomir Mrozowicz } 7078a9867a6SSlawomir Mrozowicz 7088a9867a6SSlawomir Mrozowicz /** Configure the session from a crypto xform chain */ 709b3bbd9e5SSlawomir Mrozowicz static int 7108a9867a6SSlawomir Mrozowicz openssl_pmd_session_configure(struct rte_cryptodev *dev __rte_unused, 711b3bbd9e5SSlawomir Mrozowicz struct rte_crypto_sym_xform *xform, 712b3bbd9e5SSlawomir Mrozowicz struct rte_cryptodev_sym_session *sess, 713b3bbd9e5SSlawomir Mrozowicz struct rte_mempool *mempool) 7148a9867a6SSlawomir Mrozowicz { 715b3bbd9e5SSlawomir Mrozowicz void *sess_private_data; 71627391b53SPablo de Lara int ret; 717b3bbd9e5SSlawomir Mrozowicz 7188a9867a6SSlawomir Mrozowicz if (unlikely(sess == NULL)) { 7198a9867a6SSlawomir Mrozowicz OPENSSL_LOG_ERR("invalid session struct"); 72027391b53SPablo de Lara return -EINVAL; 721b3bbd9e5SSlawomir Mrozowicz } 722b3bbd9e5SSlawomir Mrozowicz 723b3bbd9e5SSlawomir Mrozowicz if (rte_mempool_get(mempool, &sess_private_data)) { 724b3bbd9e5SSlawomir Mrozowicz CDEV_LOG_ERR( 725b3bbd9e5SSlawomir Mrozowicz "Couldn't get object from session mempool"); 72627391b53SPablo de Lara return -ENOMEM; 7278a9867a6SSlawomir Mrozowicz } 7288a9867a6SSlawomir Mrozowicz 72927391b53SPablo de Lara ret = openssl_set_session_parameters(sess_private_data, xform); 73027391b53SPablo de Lara if (ret != 0) { 7318a9867a6SSlawomir Mrozowicz OPENSSL_LOG_ERR("failed configure session parameters"); 732b3bbd9e5SSlawomir Mrozowicz 733b3bbd9e5SSlawomir Mrozowicz /* Return session to mempool */ 734b3bbd9e5SSlawomir Mrozowicz rte_mempool_put(mempool, sess_private_data); 73527391b53SPablo de Lara return ret; 7368a9867a6SSlawomir Mrozowicz } 7378a9867a6SSlawomir Mrozowicz 738b3bbd9e5SSlawomir Mrozowicz set_session_private_data(sess, dev->driver_id, 739b3bbd9e5SSlawomir Mrozowicz sess_private_data); 740b3bbd9e5SSlawomir Mrozowicz 741b3bbd9e5SSlawomir Mrozowicz return 0; 7428a9867a6SSlawomir Mrozowicz } 7438a9867a6SSlawomir Mrozowicz 7448a9867a6SSlawomir Mrozowicz 7458a9867a6SSlawomir Mrozowicz /** Clear the memory of session so it doesn't leave key material behind */ 7468a9867a6SSlawomir Mrozowicz static void 747b3bbd9e5SSlawomir Mrozowicz openssl_pmd_session_clear(struct rte_cryptodev *dev, 748b3bbd9e5SSlawomir Mrozowicz struct rte_cryptodev_sym_session *sess) 7498a9867a6SSlawomir Mrozowicz { 750b3bbd9e5SSlawomir Mrozowicz uint8_t index = dev->driver_id; 751b3bbd9e5SSlawomir Mrozowicz void *sess_priv = get_session_private_data(sess, index); 752b3bbd9e5SSlawomir Mrozowicz 753b3bbd9e5SSlawomir Mrozowicz /* Zero out the whole structure */ 754b3bbd9e5SSlawomir Mrozowicz if (sess_priv) { 755b3bbd9e5SSlawomir Mrozowicz openssl_reset_session(sess_priv); 756b3bbd9e5SSlawomir Mrozowicz memset(sess_priv, 0, sizeof(struct openssl_session)); 757b3bbd9e5SSlawomir Mrozowicz struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv); 758b3bbd9e5SSlawomir Mrozowicz set_session_private_data(sess, index, NULL); 759b3bbd9e5SSlawomir Mrozowicz rte_mempool_put(sess_mp, sess_priv); 7608a9867a6SSlawomir Mrozowicz } 7618a9867a6SSlawomir Mrozowicz } 7628a9867a6SSlawomir Mrozowicz 7638a9867a6SSlawomir Mrozowicz struct rte_cryptodev_ops openssl_pmd_ops = { 7648a9867a6SSlawomir Mrozowicz .dev_configure = openssl_pmd_config, 7658a9867a6SSlawomir Mrozowicz .dev_start = openssl_pmd_start, 7668a9867a6SSlawomir Mrozowicz .dev_stop = openssl_pmd_stop, 7678a9867a6SSlawomir Mrozowicz .dev_close = openssl_pmd_close, 7688a9867a6SSlawomir Mrozowicz 7698a9867a6SSlawomir Mrozowicz .stats_get = openssl_pmd_stats_get, 7708a9867a6SSlawomir Mrozowicz .stats_reset = openssl_pmd_stats_reset, 7718a9867a6SSlawomir Mrozowicz 7728a9867a6SSlawomir Mrozowicz .dev_infos_get = openssl_pmd_info_get, 7738a9867a6SSlawomir Mrozowicz 7748a9867a6SSlawomir Mrozowicz .queue_pair_setup = openssl_pmd_qp_setup, 7758a9867a6SSlawomir Mrozowicz .queue_pair_release = openssl_pmd_qp_release, 7768a9867a6SSlawomir Mrozowicz .queue_pair_start = openssl_pmd_qp_start, 7778a9867a6SSlawomir Mrozowicz .queue_pair_stop = openssl_pmd_qp_stop, 7788a9867a6SSlawomir Mrozowicz .queue_pair_count = openssl_pmd_qp_count, 7798a9867a6SSlawomir Mrozowicz 7808a9867a6SSlawomir Mrozowicz .session_get_size = openssl_pmd_session_get_size, 7818a9867a6SSlawomir Mrozowicz .session_configure = openssl_pmd_session_configure, 7828a9867a6SSlawomir Mrozowicz .session_clear = openssl_pmd_session_clear 7838a9867a6SSlawomir Mrozowicz }; 7848a9867a6SSlawomir Mrozowicz 7858a9867a6SSlawomir Mrozowicz struct rte_cryptodev_ops *rte_openssl_pmd_ops = &openssl_pmd_ops; 786