1*8a9867a6SSlawomir Mrozowicz /*- 2*8a9867a6SSlawomir Mrozowicz * BSD LICENSE 3*8a9867a6SSlawomir Mrozowicz * 4*8a9867a6SSlawomir Mrozowicz * Copyright(c) 2016 Intel Corporation. All rights reserved. 5*8a9867a6SSlawomir Mrozowicz * 6*8a9867a6SSlawomir Mrozowicz * Redistribution and use in source and binary forms, with or without 7*8a9867a6SSlawomir Mrozowicz * modification, are permitted provided that the following conditions 8*8a9867a6SSlawomir Mrozowicz * are met: 9*8a9867a6SSlawomir Mrozowicz * 10*8a9867a6SSlawomir Mrozowicz * * Redistributions of source code must retain the above copyright 11*8a9867a6SSlawomir Mrozowicz * notice, this list of conditions and the following disclaimer. 12*8a9867a6SSlawomir Mrozowicz * * Redistributions in binary form must reproduce the above copyright 13*8a9867a6SSlawomir Mrozowicz * notice, this list of conditions and the following disclaimer in 14*8a9867a6SSlawomir Mrozowicz * the documentation and/or other materials provided with the 15*8a9867a6SSlawomir Mrozowicz * distribution. 16*8a9867a6SSlawomir Mrozowicz * * Neither the name of Intel Corporation nor the names of its 17*8a9867a6SSlawomir Mrozowicz * contributors may be used to endorse or promote products derived 18*8a9867a6SSlawomir Mrozowicz * from this software without specific prior written permission. 19*8a9867a6SSlawomir Mrozowicz * 20*8a9867a6SSlawomir Mrozowicz * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21*8a9867a6SSlawomir Mrozowicz * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22*8a9867a6SSlawomir Mrozowicz * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23*8a9867a6SSlawomir Mrozowicz * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24*8a9867a6SSlawomir Mrozowicz * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25*8a9867a6SSlawomir Mrozowicz * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26*8a9867a6SSlawomir Mrozowicz * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27*8a9867a6SSlawomir Mrozowicz * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28*8a9867a6SSlawomir Mrozowicz * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29*8a9867a6SSlawomir Mrozowicz * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30*8a9867a6SSlawomir Mrozowicz * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31*8a9867a6SSlawomir Mrozowicz */ 32*8a9867a6SSlawomir Mrozowicz 33*8a9867a6SSlawomir Mrozowicz #include <string.h> 34*8a9867a6SSlawomir Mrozowicz 35*8a9867a6SSlawomir Mrozowicz #include <rte_common.h> 36*8a9867a6SSlawomir Mrozowicz #include <rte_malloc.h> 37*8a9867a6SSlawomir Mrozowicz #include <rte_cryptodev_pmd.h> 38*8a9867a6SSlawomir Mrozowicz 39*8a9867a6SSlawomir Mrozowicz #include "rte_openssl_pmd_private.h" 40*8a9867a6SSlawomir Mrozowicz 41*8a9867a6SSlawomir Mrozowicz 42*8a9867a6SSlawomir Mrozowicz static const struct rte_cryptodev_capabilities openssl_pmd_capabilities[] = { 43*8a9867a6SSlawomir Mrozowicz { /* MD5 HMAC */ 44*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 45*8a9867a6SSlawomir Mrozowicz {.sym = { 46*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 47*8a9867a6SSlawomir Mrozowicz {.auth = { 48*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_MD5_HMAC, 49*8a9867a6SSlawomir Mrozowicz .block_size = 64, 50*8a9867a6SSlawomir Mrozowicz .key_size = { 51*8a9867a6SSlawomir Mrozowicz .min = 64, 52*8a9867a6SSlawomir Mrozowicz .max = 64, 53*8a9867a6SSlawomir Mrozowicz .increment = 0 54*8a9867a6SSlawomir Mrozowicz }, 55*8a9867a6SSlawomir Mrozowicz .digest_size = { 56*8a9867a6SSlawomir Mrozowicz .min = 16, 57*8a9867a6SSlawomir Mrozowicz .max = 16, 58*8a9867a6SSlawomir Mrozowicz .increment = 0 59*8a9867a6SSlawomir Mrozowicz }, 60*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 61*8a9867a6SSlawomir Mrozowicz }, } 62*8a9867a6SSlawomir Mrozowicz }, } 63*8a9867a6SSlawomir Mrozowicz }, 64*8a9867a6SSlawomir Mrozowicz { /* MD5 */ 65*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 66*8a9867a6SSlawomir Mrozowicz {.sym = { 67*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 68*8a9867a6SSlawomir Mrozowicz {.auth = { 69*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_MD5, 70*8a9867a6SSlawomir Mrozowicz .block_size = 64, 71*8a9867a6SSlawomir Mrozowicz .key_size = { 72*8a9867a6SSlawomir Mrozowicz .min = 0, 73*8a9867a6SSlawomir Mrozowicz .max = 0, 74*8a9867a6SSlawomir Mrozowicz .increment = 0 75*8a9867a6SSlawomir Mrozowicz }, 76*8a9867a6SSlawomir Mrozowicz .digest_size = { 77*8a9867a6SSlawomir Mrozowicz .min = 16, 78*8a9867a6SSlawomir Mrozowicz .max = 16, 79*8a9867a6SSlawomir Mrozowicz .increment = 0 80*8a9867a6SSlawomir Mrozowicz }, 81*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 82*8a9867a6SSlawomir Mrozowicz }, } 83*8a9867a6SSlawomir Mrozowicz }, } 84*8a9867a6SSlawomir Mrozowicz }, 85*8a9867a6SSlawomir Mrozowicz { /* SHA1 HMAC */ 86*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 87*8a9867a6SSlawomir Mrozowicz {.sym = { 88*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 89*8a9867a6SSlawomir Mrozowicz {.auth = { 90*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA1_HMAC, 91*8a9867a6SSlawomir Mrozowicz .block_size = 64, 92*8a9867a6SSlawomir Mrozowicz .key_size = { 93*8a9867a6SSlawomir Mrozowicz .min = 64, 94*8a9867a6SSlawomir Mrozowicz .max = 64, 95*8a9867a6SSlawomir Mrozowicz .increment = 0 96*8a9867a6SSlawomir Mrozowicz }, 97*8a9867a6SSlawomir Mrozowicz .digest_size = { 98*8a9867a6SSlawomir Mrozowicz .min = 20, 99*8a9867a6SSlawomir Mrozowicz .max = 20, 100*8a9867a6SSlawomir Mrozowicz .increment = 0 101*8a9867a6SSlawomir Mrozowicz }, 102*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 103*8a9867a6SSlawomir Mrozowicz }, } 104*8a9867a6SSlawomir Mrozowicz }, } 105*8a9867a6SSlawomir Mrozowicz }, 106*8a9867a6SSlawomir Mrozowicz { /* SHA1 */ 107*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 108*8a9867a6SSlawomir Mrozowicz {.sym = { 109*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 110*8a9867a6SSlawomir Mrozowicz {.auth = { 111*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA1, 112*8a9867a6SSlawomir Mrozowicz .block_size = 64, 113*8a9867a6SSlawomir Mrozowicz .key_size = { 114*8a9867a6SSlawomir Mrozowicz .min = 0, 115*8a9867a6SSlawomir Mrozowicz .max = 0, 116*8a9867a6SSlawomir Mrozowicz .increment = 0 117*8a9867a6SSlawomir Mrozowicz }, 118*8a9867a6SSlawomir Mrozowicz .digest_size = { 119*8a9867a6SSlawomir Mrozowicz .min = 20, 120*8a9867a6SSlawomir Mrozowicz .max = 20, 121*8a9867a6SSlawomir Mrozowicz .increment = 0 122*8a9867a6SSlawomir Mrozowicz }, 123*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 124*8a9867a6SSlawomir Mrozowicz }, } 125*8a9867a6SSlawomir Mrozowicz }, } 126*8a9867a6SSlawomir Mrozowicz }, 127*8a9867a6SSlawomir Mrozowicz { /* SHA224 HMAC */ 128*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 129*8a9867a6SSlawomir Mrozowicz {.sym = { 130*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 131*8a9867a6SSlawomir Mrozowicz {.auth = { 132*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA224_HMAC, 133*8a9867a6SSlawomir Mrozowicz .block_size = 64, 134*8a9867a6SSlawomir Mrozowicz .key_size = { 135*8a9867a6SSlawomir Mrozowicz .min = 64, 136*8a9867a6SSlawomir Mrozowicz .max = 64, 137*8a9867a6SSlawomir Mrozowicz .increment = 0 138*8a9867a6SSlawomir Mrozowicz }, 139*8a9867a6SSlawomir Mrozowicz .digest_size = { 140*8a9867a6SSlawomir Mrozowicz .min = 28, 141*8a9867a6SSlawomir Mrozowicz .max = 28, 142*8a9867a6SSlawomir Mrozowicz .increment = 0 143*8a9867a6SSlawomir Mrozowicz }, 144*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 145*8a9867a6SSlawomir Mrozowicz }, } 146*8a9867a6SSlawomir Mrozowicz }, } 147*8a9867a6SSlawomir Mrozowicz }, 148*8a9867a6SSlawomir Mrozowicz { /* SHA224 */ 149*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 150*8a9867a6SSlawomir Mrozowicz {.sym = { 151*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 152*8a9867a6SSlawomir Mrozowicz {.auth = { 153*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA224, 154*8a9867a6SSlawomir Mrozowicz .block_size = 64, 155*8a9867a6SSlawomir Mrozowicz .key_size = { 156*8a9867a6SSlawomir Mrozowicz .min = 0, 157*8a9867a6SSlawomir Mrozowicz .max = 0, 158*8a9867a6SSlawomir Mrozowicz .increment = 0 159*8a9867a6SSlawomir Mrozowicz }, 160*8a9867a6SSlawomir Mrozowicz .digest_size = { 161*8a9867a6SSlawomir Mrozowicz .min = 28, 162*8a9867a6SSlawomir Mrozowicz .max = 28, 163*8a9867a6SSlawomir Mrozowicz .increment = 0 164*8a9867a6SSlawomir Mrozowicz }, 165*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 166*8a9867a6SSlawomir Mrozowicz }, } 167*8a9867a6SSlawomir Mrozowicz }, } 168*8a9867a6SSlawomir Mrozowicz }, 169*8a9867a6SSlawomir Mrozowicz { /* SHA256 HMAC */ 170*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 171*8a9867a6SSlawomir Mrozowicz {.sym = { 172*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 173*8a9867a6SSlawomir Mrozowicz {.auth = { 174*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA256_HMAC, 175*8a9867a6SSlawomir Mrozowicz .block_size = 64, 176*8a9867a6SSlawomir Mrozowicz .key_size = { 177*8a9867a6SSlawomir Mrozowicz .min = 64, 178*8a9867a6SSlawomir Mrozowicz .max = 64, 179*8a9867a6SSlawomir Mrozowicz .increment = 0 180*8a9867a6SSlawomir Mrozowicz }, 181*8a9867a6SSlawomir Mrozowicz .digest_size = { 182*8a9867a6SSlawomir Mrozowicz .min = 32, 183*8a9867a6SSlawomir Mrozowicz .max = 32, 184*8a9867a6SSlawomir Mrozowicz .increment = 0 185*8a9867a6SSlawomir Mrozowicz }, 186*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 187*8a9867a6SSlawomir Mrozowicz }, } 188*8a9867a6SSlawomir Mrozowicz }, } 189*8a9867a6SSlawomir Mrozowicz }, 190*8a9867a6SSlawomir Mrozowicz { /* SHA256 */ 191*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 192*8a9867a6SSlawomir Mrozowicz {.sym = { 193*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 194*8a9867a6SSlawomir Mrozowicz {.auth = { 195*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA256, 196*8a9867a6SSlawomir Mrozowicz .block_size = 64, 197*8a9867a6SSlawomir Mrozowicz .key_size = { 198*8a9867a6SSlawomir Mrozowicz .min = 0, 199*8a9867a6SSlawomir Mrozowicz .max = 0, 200*8a9867a6SSlawomir Mrozowicz .increment = 0 201*8a9867a6SSlawomir Mrozowicz }, 202*8a9867a6SSlawomir Mrozowicz .digest_size = { 203*8a9867a6SSlawomir Mrozowicz .min = 32, 204*8a9867a6SSlawomir Mrozowicz .max = 32, 205*8a9867a6SSlawomir Mrozowicz .increment = 0 206*8a9867a6SSlawomir Mrozowicz }, 207*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 208*8a9867a6SSlawomir Mrozowicz }, } 209*8a9867a6SSlawomir Mrozowicz }, } 210*8a9867a6SSlawomir Mrozowicz }, 211*8a9867a6SSlawomir Mrozowicz { /* SHA384 HMAC */ 212*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 213*8a9867a6SSlawomir Mrozowicz {.sym = { 214*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 215*8a9867a6SSlawomir Mrozowicz {.auth = { 216*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA384_HMAC, 217*8a9867a6SSlawomir Mrozowicz .block_size = 128, 218*8a9867a6SSlawomir Mrozowicz .key_size = { 219*8a9867a6SSlawomir Mrozowicz .min = 128, 220*8a9867a6SSlawomir Mrozowicz .max = 128, 221*8a9867a6SSlawomir Mrozowicz .increment = 0 222*8a9867a6SSlawomir Mrozowicz }, 223*8a9867a6SSlawomir Mrozowicz .digest_size = { 224*8a9867a6SSlawomir Mrozowicz .min = 48, 225*8a9867a6SSlawomir Mrozowicz .max = 48, 226*8a9867a6SSlawomir Mrozowicz .increment = 0 227*8a9867a6SSlawomir Mrozowicz }, 228*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 229*8a9867a6SSlawomir Mrozowicz }, } 230*8a9867a6SSlawomir Mrozowicz }, } 231*8a9867a6SSlawomir Mrozowicz }, 232*8a9867a6SSlawomir Mrozowicz { /* SHA384 */ 233*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 234*8a9867a6SSlawomir Mrozowicz {.sym = { 235*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 236*8a9867a6SSlawomir Mrozowicz {.auth = { 237*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA384, 238*8a9867a6SSlawomir Mrozowicz .block_size = 128, 239*8a9867a6SSlawomir Mrozowicz .key_size = { 240*8a9867a6SSlawomir Mrozowicz .min = 0, 241*8a9867a6SSlawomir Mrozowicz .max = 0, 242*8a9867a6SSlawomir Mrozowicz .increment = 0 243*8a9867a6SSlawomir Mrozowicz }, 244*8a9867a6SSlawomir Mrozowicz .digest_size = { 245*8a9867a6SSlawomir Mrozowicz .min = 48, 246*8a9867a6SSlawomir Mrozowicz .max = 48, 247*8a9867a6SSlawomir Mrozowicz .increment = 0 248*8a9867a6SSlawomir Mrozowicz }, 249*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 250*8a9867a6SSlawomir Mrozowicz }, } 251*8a9867a6SSlawomir Mrozowicz }, } 252*8a9867a6SSlawomir Mrozowicz }, 253*8a9867a6SSlawomir Mrozowicz { /* SHA512 HMAC */ 254*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 255*8a9867a6SSlawomir Mrozowicz {.sym = { 256*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 257*8a9867a6SSlawomir Mrozowicz {.auth = { 258*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA512_HMAC, 259*8a9867a6SSlawomir Mrozowicz .block_size = 128, 260*8a9867a6SSlawomir Mrozowicz .key_size = { 261*8a9867a6SSlawomir Mrozowicz .min = 128, 262*8a9867a6SSlawomir Mrozowicz .max = 128, 263*8a9867a6SSlawomir Mrozowicz .increment = 0 264*8a9867a6SSlawomir Mrozowicz }, 265*8a9867a6SSlawomir Mrozowicz .digest_size = { 266*8a9867a6SSlawomir Mrozowicz .min = 64, 267*8a9867a6SSlawomir Mrozowicz .max = 64, 268*8a9867a6SSlawomir Mrozowicz .increment = 0 269*8a9867a6SSlawomir Mrozowicz }, 270*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 271*8a9867a6SSlawomir Mrozowicz }, } 272*8a9867a6SSlawomir Mrozowicz }, } 273*8a9867a6SSlawomir Mrozowicz }, 274*8a9867a6SSlawomir Mrozowicz { /* SHA512 */ 275*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 276*8a9867a6SSlawomir Mrozowicz {.sym = { 277*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 278*8a9867a6SSlawomir Mrozowicz {.auth = { 279*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA512, 280*8a9867a6SSlawomir Mrozowicz .block_size = 128, 281*8a9867a6SSlawomir Mrozowicz .key_size = { 282*8a9867a6SSlawomir Mrozowicz .min = 0, 283*8a9867a6SSlawomir Mrozowicz .max = 0, 284*8a9867a6SSlawomir Mrozowicz .increment = 0 285*8a9867a6SSlawomir Mrozowicz }, 286*8a9867a6SSlawomir Mrozowicz .digest_size = { 287*8a9867a6SSlawomir Mrozowicz .min = 64, 288*8a9867a6SSlawomir Mrozowicz .max = 64, 289*8a9867a6SSlawomir Mrozowicz .increment = 0 290*8a9867a6SSlawomir Mrozowicz }, 291*8a9867a6SSlawomir Mrozowicz .aad_size = { 0 } 292*8a9867a6SSlawomir Mrozowicz }, } 293*8a9867a6SSlawomir Mrozowicz }, } 294*8a9867a6SSlawomir Mrozowicz }, 295*8a9867a6SSlawomir Mrozowicz { /* AES CBC */ 296*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 297*8a9867a6SSlawomir Mrozowicz {.sym = { 298*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 299*8a9867a6SSlawomir Mrozowicz {.cipher = { 300*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_AES_CBC, 301*8a9867a6SSlawomir Mrozowicz .block_size = 16, 302*8a9867a6SSlawomir Mrozowicz .key_size = { 303*8a9867a6SSlawomir Mrozowicz .min = 16, 304*8a9867a6SSlawomir Mrozowicz .max = 32, 305*8a9867a6SSlawomir Mrozowicz .increment = 8 306*8a9867a6SSlawomir Mrozowicz }, 307*8a9867a6SSlawomir Mrozowicz .iv_size = { 308*8a9867a6SSlawomir Mrozowicz .min = 16, 309*8a9867a6SSlawomir Mrozowicz .max = 16, 310*8a9867a6SSlawomir Mrozowicz .increment = 0 311*8a9867a6SSlawomir Mrozowicz } 312*8a9867a6SSlawomir Mrozowicz }, } 313*8a9867a6SSlawomir Mrozowicz }, } 314*8a9867a6SSlawomir Mrozowicz }, 315*8a9867a6SSlawomir Mrozowicz { /* AES CTR */ 316*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 317*8a9867a6SSlawomir Mrozowicz {.sym = { 318*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 319*8a9867a6SSlawomir Mrozowicz {.cipher = { 320*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_AES_CTR, 321*8a9867a6SSlawomir Mrozowicz .block_size = 16, 322*8a9867a6SSlawomir Mrozowicz .key_size = { 323*8a9867a6SSlawomir Mrozowicz .min = 16, 324*8a9867a6SSlawomir Mrozowicz .max = 32, 325*8a9867a6SSlawomir Mrozowicz .increment = 8 326*8a9867a6SSlawomir Mrozowicz }, 327*8a9867a6SSlawomir Mrozowicz .iv_size = { 328*8a9867a6SSlawomir Mrozowicz .min = 16, 329*8a9867a6SSlawomir Mrozowicz .max = 16, 330*8a9867a6SSlawomir Mrozowicz .increment = 0 331*8a9867a6SSlawomir Mrozowicz } 332*8a9867a6SSlawomir Mrozowicz }, } 333*8a9867a6SSlawomir Mrozowicz }, } 334*8a9867a6SSlawomir Mrozowicz }, 335*8a9867a6SSlawomir Mrozowicz { /* AES GCM (AUTH) */ 336*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 337*8a9867a6SSlawomir Mrozowicz {.sym = { 338*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 339*8a9867a6SSlawomir Mrozowicz {.auth = { 340*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_AES_GCM, 341*8a9867a6SSlawomir Mrozowicz .block_size = 16, 342*8a9867a6SSlawomir Mrozowicz .key_size = { 343*8a9867a6SSlawomir Mrozowicz .min = 16, 344*8a9867a6SSlawomir Mrozowicz .max = 32, 345*8a9867a6SSlawomir Mrozowicz .increment = 8 346*8a9867a6SSlawomir Mrozowicz }, 347*8a9867a6SSlawomir Mrozowicz .digest_size = { 348*8a9867a6SSlawomir Mrozowicz .min = 16, 349*8a9867a6SSlawomir Mrozowicz .max = 16, 350*8a9867a6SSlawomir Mrozowicz .increment = 0 351*8a9867a6SSlawomir Mrozowicz }, 352*8a9867a6SSlawomir Mrozowicz .aad_size = { 353*8a9867a6SSlawomir Mrozowicz .min = 8, 354*8a9867a6SSlawomir Mrozowicz .max = 12, 355*8a9867a6SSlawomir Mrozowicz .increment = 4 356*8a9867a6SSlawomir Mrozowicz } 357*8a9867a6SSlawomir Mrozowicz }, } 358*8a9867a6SSlawomir Mrozowicz }, } 359*8a9867a6SSlawomir Mrozowicz }, 360*8a9867a6SSlawomir Mrozowicz { /* AES GCM (CIPHER) */ 361*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 362*8a9867a6SSlawomir Mrozowicz {.sym = { 363*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 364*8a9867a6SSlawomir Mrozowicz {.cipher = { 365*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_AES_GCM, 366*8a9867a6SSlawomir Mrozowicz .block_size = 16, 367*8a9867a6SSlawomir Mrozowicz .key_size = { 368*8a9867a6SSlawomir Mrozowicz .min = 16, 369*8a9867a6SSlawomir Mrozowicz .max = 16, 370*8a9867a6SSlawomir Mrozowicz .increment = 0 371*8a9867a6SSlawomir Mrozowicz }, 372*8a9867a6SSlawomir Mrozowicz .iv_size = { 373*8a9867a6SSlawomir Mrozowicz .min = 12, 374*8a9867a6SSlawomir Mrozowicz .max = 16, 375*8a9867a6SSlawomir Mrozowicz .increment = 4 376*8a9867a6SSlawomir Mrozowicz } 377*8a9867a6SSlawomir Mrozowicz }, } 378*8a9867a6SSlawomir Mrozowicz }, } 379*8a9867a6SSlawomir Mrozowicz }, 380*8a9867a6SSlawomir Mrozowicz { /* AES GMAC (AUTH) */ 381*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 382*8a9867a6SSlawomir Mrozowicz {.sym = { 383*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 384*8a9867a6SSlawomir Mrozowicz {.auth = { 385*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_AES_GMAC, 386*8a9867a6SSlawomir Mrozowicz .block_size = 16, 387*8a9867a6SSlawomir Mrozowicz .key_size = { 388*8a9867a6SSlawomir Mrozowicz .min = 16, 389*8a9867a6SSlawomir Mrozowicz .max = 32, 390*8a9867a6SSlawomir Mrozowicz .increment = 8 391*8a9867a6SSlawomir Mrozowicz }, 392*8a9867a6SSlawomir Mrozowicz .digest_size = { 393*8a9867a6SSlawomir Mrozowicz .min = 16, 394*8a9867a6SSlawomir Mrozowicz .max = 16, 395*8a9867a6SSlawomir Mrozowicz .increment = 0 396*8a9867a6SSlawomir Mrozowicz }, 397*8a9867a6SSlawomir Mrozowicz .aad_size = { 398*8a9867a6SSlawomir Mrozowicz .min = 8, 399*8a9867a6SSlawomir Mrozowicz .max = 65532, 400*8a9867a6SSlawomir Mrozowicz .increment = 4 401*8a9867a6SSlawomir Mrozowicz } 402*8a9867a6SSlawomir Mrozowicz }, } 403*8a9867a6SSlawomir Mrozowicz }, } 404*8a9867a6SSlawomir Mrozowicz }, 405*8a9867a6SSlawomir Mrozowicz { /* 3DES CBC */ 406*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 407*8a9867a6SSlawomir Mrozowicz {.sym = { 408*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 409*8a9867a6SSlawomir Mrozowicz {.cipher = { 410*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_3DES_CBC, 411*8a9867a6SSlawomir Mrozowicz .block_size = 8, 412*8a9867a6SSlawomir Mrozowicz .key_size = { 413*8a9867a6SSlawomir Mrozowicz .min = 16, 414*8a9867a6SSlawomir Mrozowicz .max = 24, 415*8a9867a6SSlawomir Mrozowicz .increment = 8 416*8a9867a6SSlawomir Mrozowicz }, 417*8a9867a6SSlawomir Mrozowicz .iv_size = { 418*8a9867a6SSlawomir Mrozowicz .min = 8, 419*8a9867a6SSlawomir Mrozowicz .max = 8, 420*8a9867a6SSlawomir Mrozowicz .increment = 0 421*8a9867a6SSlawomir Mrozowicz } 422*8a9867a6SSlawomir Mrozowicz }, } 423*8a9867a6SSlawomir Mrozowicz }, } 424*8a9867a6SSlawomir Mrozowicz }, 425*8a9867a6SSlawomir Mrozowicz { /* 3DES CTR */ 426*8a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 427*8a9867a6SSlawomir Mrozowicz {.sym = { 428*8a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 429*8a9867a6SSlawomir Mrozowicz {.cipher = { 430*8a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_3DES_CTR, 431*8a9867a6SSlawomir Mrozowicz .block_size = 8, 432*8a9867a6SSlawomir Mrozowicz .key_size = { 433*8a9867a6SSlawomir Mrozowicz .min = 16, 434*8a9867a6SSlawomir Mrozowicz .max = 24, 435*8a9867a6SSlawomir Mrozowicz .increment = 8 436*8a9867a6SSlawomir Mrozowicz }, 437*8a9867a6SSlawomir Mrozowicz .iv_size = { 438*8a9867a6SSlawomir Mrozowicz .min = 8, 439*8a9867a6SSlawomir Mrozowicz .max = 8, 440*8a9867a6SSlawomir Mrozowicz .increment = 0 441*8a9867a6SSlawomir Mrozowicz } 442*8a9867a6SSlawomir Mrozowicz }, } 443*8a9867a6SSlawomir Mrozowicz }, } 444*8a9867a6SSlawomir Mrozowicz }, 445*8a9867a6SSlawomir Mrozowicz 446*8a9867a6SSlawomir Mrozowicz RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() 447*8a9867a6SSlawomir Mrozowicz }; 448*8a9867a6SSlawomir Mrozowicz 449*8a9867a6SSlawomir Mrozowicz 450*8a9867a6SSlawomir Mrozowicz /** Configure device */ 451*8a9867a6SSlawomir Mrozowicz static int 452*8a9867a6SSlawomir Mrozowicz openssl_pmd_config(__rte_unused struct rte_cryptodev *dev) 453*8a9867a6SSlawomir Mrozowicz { 454*8a9867a6SSlawomir Mrozowicz return 0; 455*8a9867a6SSlawomir Mrozowicz } 456*8a9867a6SSlawomir Mrozowicz 457*8a9867a6SSlawomir Mrozowicz /** Start device */ 458*8a9867a6SSlawomir Mrozowicz static int 459*8a9867a6SSlawomir Mrozowicz openssl_pmd_start(__rte_unused struct rte_cryptodev *dev) 460*8a9867a6SSlawomir Mrozowicz { 461*8a9867a6SSlawomir Mrozowicz return 0; 462*8a9867a6SSlawomir Mrozowicz } 463*8a9867a6SSlawomir Mrozowicz 464*8a9867a6SSlawomir Mrozowicz /** Stop device */ 465*8a9867a6SSlawomir Mrozowicz static void 466*8a9867a6SSlawomir Mrozowicz openssl_pmd_stop(__rte_unused struct rte_cryptodev *dev) 467*8a9867a6SSlawomir Mrozowicz { 468*8a9867a6SSlawomir Mrozowicz } 469*8a9867a6SSlawomir Mrozowicz 470*8a9867a6SSlawomir Mrozowicz /** Close device */ 471*8a9867a6SSlawomir Mrozowicz static int 472*8a9867a6SSlawomir Mrozowicz openssl_pmd_close(__rte_unused struct rte_cryptodev *dev) 473*8a9867a6SSlawomir Mrozowicz { 474*8a9867a6SSlawomir Mrozowicz return 0; 475*8a9867a6SSlawomir Mrozowicz } 476*8a9867a6SSlawomir Mrozowicz 477*8a9867a6SSlawomir Mrozowicz 478*8a9867a6SSlawomir Mrozowicz /** Get device statistics */ 479*8a9867a6SSlawomir Mrozowicz static void 480*8a9867a6SSlawomir Mrozowicz openssl_pmd_stats_get(struct rte_cryptodev *dev, 481*8a9867a6SSlawomir Mrozowicz struct rte_cryptodev_stats *stats) 482*8a9867a6SSlawomir Mrozowicz { 483*8a9867a6SSlawomir Mrozowicz int qp_id; 484*8a9867a6SSlawomir Mrozowicz 485*8a9867a6SSlawomir Mrozowicz for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { 486*8a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = dev->data->queue_pairs[qp_id]; 487*8a9867a6SSlawomir Mrozowicz 488*8a9867a6SSlawomir Mrozowicz stats->enqueued_count += qp->stats.enqueued_count; 489*8a9867a6SSlawomir Mrozowicz stats->dequeued_count += qp->stats.dequeued_count; 490*8a9867a6SSlawomir Mrozowicz 491*8a9867a6SSlawomir Mrozowicz stats->enqueue_err_count += qp->stats.enqueue_err_count; 492*8a9867a6SSlawomir Mrozowicz stats->dequeue_err_count += qp->stats.dequeue_err_count; 493*8a9867a6SSlawomir Mrozowicz } 494*8a9867a6SSlawomir Mrozowicz } 495*8a9867a6SSlawomir Mrozowicz 496*8a9867a6SSlawomir Mrozowicz /** Reset device statistics */ 497*8a9867a6SSlawomir Mrozowicz static void 498*8a9867a6SSlawomir Mrozowicz openssl_pmd_stats_reset(struct rte_cryptodev *dev) 499*8a9867a6SSlawomir Mrozowicz { 500*8a9867a6SSlawomir Mrozowicz int qp_id; 501*8a9867a6SSlawomir Mrozowicz 502*8a9867a6SSlawomir Mrozowicz for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { 503*8a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = dev->data->queue_pairs[qp_id]; 504*8a9867a6SSlawomir Mrozowicz 505*8a9867a6SSlawomir Mrozowicz memset(&qp->stats, 0, sizeof(qp->stats)); 506*8a9867a6SSlawomir Mrozowicz } 507*8a9867a6SSlawomir Mrozowicz } 508*8a9867a6SSlawomir Mrozowicz 509*8a9867a6SSlawomir Mrozowicz 510*8a9867a6SSlawomir Mrozowicz /** Get device info */ 511*8a9867a6SSlawomir Mrozowicz static void 512*8a9867a6SSlawomir Mrozowicz openssl_pmd_info_get(struct rte_cryptodev *dev, 513*8a9867a6SSlawomir Mrozowicz struct rte_cryptodev_info *dev_info) 514*8a9867a6SSlawomir Mrozowicz { 515*8a9867a6SSlawomir Mrozowicz struct openssl_private *internals = dev->data->dev_private; 516*8a9867a6SSlawomir Mrozowicz 517*8a9867a6SSlawomir Mrozowicz if (dev_info != NULL) { 518*8a9867a6SSlawomir Mrozowicz dev_info->dev_type = dev->dev_type; 519*8a9867a6SSlawomir Mrozowicz dev_info->feature_flags = dev->feature_flags; 520*8a9867a6SSlawomir Mrozowicz dev_info->capabilities = openssl_pmd_capabilities; 521*8a9867a6SSlawomir Mrozowicz dev_info->max_nb_queue_pairs = internals->max_nb_qpairs; 522*8a9867a6SSlawomir Mrozowicz dev_info->sym.max_nb_sessions = internals->max_nb_sessions; 523*8a9867a6SSlawomir Mrozowicz } 524*8a9867a6SSlawomir Mrozowicz } 525*8a9867a6SSlawomir Mrozowicz 526*8a9867a6SSlawomir Mrozowicz /** Release queue pair */ 527*8a9867a6SSlawomir Mrozowicz static int 528*8a9867a6SSlawomir Mrozowicz openssl_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id) 529*8a9867a6SSlawomir Mrozowicz { 530*8a9867a6SSlawomir Mrozowicz if (dev->data->queue_pairs[qp_id] != NULL) { 531*8a9867a6SSlawomir Mrozowicz rte_free(dev->data->queue_pairs[qp_id]); 532*8a9867a6SSlawomir Mrozowicz dev->data->queue_pairs[qp_id] = NULL; 533*8a9867a6SSlawomir Mrozowicz } 534*8a9867a6SSlawomir Mrozowicz return 0; 535*8a9867a6SSlawomir Mrozowicz } 536*8a9867a6SSlawomir Mrozowicz 537*8a9867a6SSlawomir Mrozowicz /** set a unique name for the queue pair based on it's name, dev_id and qp_id */ 538*8a9867a6SSlawomir Mrozowicz static int 539*8a9867a6SSlawomir Mrozowicz openssl_pmd_qp_set_unique_name(struct rte_cryptodev *dev, 540*8a9867a6SSlawomir Mrozowicz struct openssl_qp *qp) 541*8a9867a6SSlawomir Mrozowicz { 542*8a9867a6SSlawomir Mrozowicz unsigned int n = snprintf(qp->name, sizeof(qp->name), 543*8a9867a6SSlawomir Mrozowicz "openssl_pmd_%u_qp_%u", 544*8a9867a6SSlawomir Mrozowicz dev->data->dev_id, qp->id); 545*8a9867a6SSlawomir Mrozowicz 546*8a9867a6SSlawomir Mrozowicz if (n > sizeof(qp->name)) 547*8a9867a6SSlawomir Mrozowicz return -1; 548*8a9867a6SSlawomir Mrozowicz 549*8a9867a6SSlawomir Mrozowicz return 0; 550*8a9867a6SSlawomir Mrozowicz } 551*8a9867a6SSlawomir Mrozowicz 552*8a9867a6SSlawomir Mrozowicz 553*8a9867a6SSlawomir Mrozowicz /** Create a ring to place processed operations on */ 554*8a9867a6SSlawomir Mrozowicz static struct rte_ring * 555*8a9867a6SSlawomir Mrozowicz openssl_pmd_qp_create_processed_ops_ring(struct openssl_qp *qp, 556*8a9867a6SSlawomir Mrozowicz unsigned int ring_size, int socket_id) 557*8a9867a6SSlawomir Mrozowicz { 558*8a9867a6SSlawomir Mrozowicz struct rte_ring *r; 559*8a9867a6SSlawomir Mrozowicz 560*8a9867a6SSlawomir Mrozowicz r = rte_ring_lookup(qp->name); 561*8a9867a6SSlawomir Mrozowicz if (r) { 562*8a9867a6SSlawomir Mrozowicz if (r->prod.size >= ring_size) { 563*8a9867a6SSlawomir Mrozowicz OPENSSL_LOG_INFO( 564*8a9867a6SSlawomir Mrozowicz "Reusing existing ring %s for processed ops", 565*8a9867a6SSlawomir Mrozowicz qp->name); 566*8a9867a6SSlawomir Mrozowicz return r; 567*8a9867a6SSlawomir Mrozowicz } 568*8a9867a6SSlawomir Mrozowicz 569*8a9867a6SSlawomir Mrozowicz OPENSSL_LOG_ERR( 570*8a9867a6SSlawomir Mrozowicz "Unable to reuse existing ring %s for processed ops", 571*8a9867a6SSlawomir Mrozowicz qp->name); 572*8a9867a6SSlawomir Mrozowicz return NULL; 573*8a9867a6SSlawomir Mrozowicz } 574*8a9867a6SSlawomir Mrozowicz 575*8a9867a6SSlawomir Mrozowicz return rte_ring_create(qp->name, ring_size, socket_id, 576*8a9867a6SSlawomir Mrozowicz RING_F_SP_ENQ | RING_F_SC_DEQ); 577*8a9867a6SSlawomir Mrozowicz } 578*8a9867a6SSlawomir Mrozowicz 579*8a9867a6SSlawomir Mrozowicz 580*8a9867a6SSlawomir Mrozowicz /** Setup a queue pair */ 581*8a9867a6SSlawomir Mrozowicz static int 582*8a9867a6SSlawomir Mrozowicz openssl_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id, 583*8a9867a6SSlawomir Mrozowicz const struct rte_cryptodev_qp_conf *qp_conf, 584*8a9867a6SSlawomir Mrozowicz int socket_id) 585*8a9867a6SSlawomir Mrozowicz { 586*8a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = NULL; 587*8a9867a6SSlawomir Mrozowicz 588*8a9867a6SSlawomir Mrozowicz /* Free memory prior to re-allocation if needed. */ 589*8a9867a6SSlawomir Mrozowicz if (dev->data->queue_pairs[qp_id] != NULL) 590*8a9867a6SSlawomir Mrozowicz openssl_pmd_qp_release(dev, qp_id); 591*8a9867a6SSlawomir Mrozowicz 592*8a9867a6SSlawomir Mrozowicz /* Allocate the queue pair data structure. */ 593*8a9867a6SSlawomir Mrozowicz qp = rte_zmalloc_socket("OPENSSL PMD Queue Pair", sizeof(*qp), 594*8a9867a6SSlawomir Mrozowicz RTE_CACHE_LINE_SIZE, socket_id); 595*8a9867a6SSlawomir Mrozowicz if (qp == NULL) 596*8a9867a6SSlawomir Mrozowicz return -ENOMEM; 597*8a9867a6SSlawomir Mrozowicz 598*8a9867a6SSlawomir Mrozowicz qp->id = qp_id; 599*8a9867a6SSlawomir Mrozowicz dev->data->queue_pairs[qp_id] = qp; 600*8a9867a6SSlawomir Mrozowicz 601*8a9867a6SSlawomir Mrozowicz if (openssl_pmd_qp_set_unique_name(dev, qp)) 602*8a9867a6SSlawomir Mrozowicz goto qp_setup_cleanup; 603*8a9867a6SSlawomir Mrozowicz 604*8a9867a6SSlawomir Mrozowicz qp->processed_ops = openssl_pmd_qp_create_processed_ops_ring(qp, 605*8a9867a6SSlawomir Mrozowicz qp_conf->nb_descriptors, socket_id); 606*8a9867a6SSlawomir Mrozowicz if (qp->processed_ops == NULL) 607*8a9867a6SSlawomir Mrozowicz goto qp_setup_cleanup; 608*8a9867a6SSlawomir Mrozowicz 609*8a9867a6SSlawomir Mrozowicz qp->sess_mp = dev->data->session_pool; 610*8a9867a6SSlawomir Mrozowicz 611*8a9867a6SSlawomir Mrozowicz memset(&qp->stats, 0, sizeof(qp->stats)); 612*8a9867a6SSlawomir Mrozowicz 613*8a9867a6SSlawomir Mrozowicz return 0; 614*8a9867a6SSlawomir Mrozowicz 615*8a9867a6SSlawomir Mrozowicz qp_setup_cleanup: 616*8a9867a6SSlawomir Mrozowicz if (qp) 617*8a9867a6SSlawomir Mrozowicz rte_free(qp); 618*8a9867a6SSlawomir Mrozowicz 619*8a9867a6SSlawomir Mrozowicz return -1; 620*8a9867a6SSlawomir Mrozowicz } 621*8a9867a6SSlawomir Mrozowicz 622*8a9867a6SSlawomir Mrozowicz /** Start queue pair */ 623*8a9867a6SSlawomir Mrozowicz static int 624*8a9867a6SSlawomir Mrozowicz openssl_pmd_qp_start(__rte_unused struct rte_cryptodev *dev, 625*8a9867a6SSlawomir Mrozowicz __rte_unused uint16_t queue_pair_id) 626*8a9867a6SSlawomir Mrozowicz { 627*8a9867a6SSlawomir Mrozowicz return -ENOTSUP; 628*8a9867a6SSlawomir Mrozowicz } 629*8a9867a6SSlawomir Mrozowicz 630*8a9867a6SSlawomir Mrozowicz /** Stop queue pair */ 631*8a9867a6SSlawomir Mrozowicz static int 632*8a9867a6SSlawomir Mrozowicz openssl_pmd_qp_stop(__rte_unused struct rte_cryptodev *dev, 633*8a9867a6SSlawomir Mrozowicz __rte_unused uint16_t queue_pair_id) 634*8a9867a6SSlawomir Mrozowicz { 635*8a9867a6SSlawomir Mrozowicz return -ENOTSUP; 636*8a9867a6SSlawomir Mrozowicz } 637*8a9867a6SSlawomir Mrozowicz 638*8a9867a6SSlawomir Mrozowicz /** Return the number of allocated queue pairs */ 639*8a9867a6SSlawomir Mrozowicz static uint32_t 640*8a9867a6SSlawomir Mrozowicz openssl_pmd_qp_count(struct rte_cryptodev *dev) 641*8a9867a6SSlawomir Mrozowicz { 642*8a9867a6SSlawomir Mrozowicz return dev->data->nb_queue_pairs; 643*8a9867a6SSlawomir Mrozowicz } 644*8a9867a6SSlawomir Mrozowicz 645*8a9867a6SSlawomir Mrozowicz /** Returns the size of the session structure */ 646*8a9867a6SSlawomir Mrozowicz static unsigned 647*8a9867a6SSlawomir Mrozowicz openssl_pmd_session_get_size(struct rte_cryptodev *dev __rte_unused) 648*8a9867a6SSlawomir Mrozowicz { 649*8a9867a6SSlawomir Mrozowicz return sizeof(struct openssl_session); 650*8a9867a6SSlawomir Mrozowicz } 651*8a9867a6SSlawomir Mrozowicz 652*8a9867a6SSlawomir Mrozowicz /** Configure the session from a crypto xform chain */ 653*8a9867a6SSlawomir Mrozowicz static void * 654*8a9867a6SSlawomir Mrozowicz openssl_pmd_session_configure(struct rte_cryptodev *dev __rte_unused, 655*8a9867a6SSlawomir Mrozowicz struct rte_crypto_sym_xform *xform, void *sess) 656*8a9867a6SSlawomir Mrozowicz { 657*8a9867a6SSlawomir Mrozowicz if (unlikely(sess == NULL)) { 658*8a9867a6SSlawomir Mrozowicz OPENSSL_LOG_ERR("invalid session struct"); 659*8a9867a6SSlawomir Mrozowicz return NULL; 660*8a9867a6SSlawomir Mrozowicz } 661*8a9867a6SSlawomir Mrozowicz 662*8a9867a6SSlawomir Mrozowicz if (openssl_set_session_parameters( 663*8a9867a6SSlawomir Mrozowicz sess, xform) != 0) { 664*8a9867a6SSlawomir Mrozowicz OPENSSL_LOG_ERR("failed configure session parameters"); 665*8a9867a6SSlawomir Mrozowicz return NULL; 666*8a9867a6SSlawomir Mrozowicz } 667*8a9867a6SSlawomir Mrozowicz 668*8a9867a6SSlawomir Mrozowicz return sess; 669*8a9867a6SSlawomir Mrozowicz } 670*8a9867a6SSlawomir Mrozowicz 671*8a9867a6SSlawomir Mrozowicz 672*8a9867a6SSlawomir Mrozowicz /** Clear the memory of session so it doesn't leave key material behind */ 673*8a9867a6SSlawomir Mrozowicz static void 674*8a9867a6SSlawomir Mrozowicz openssl_pmd_session_clear(struct rte_cryptodev *dev __rte_unused, void *sess) 675*8a9867a6SSlawomir Mrozowicz { 676*8a9867a6SSlawomir Mrozowicz /* 677*8a9867a6SSlawomir Mrozowicz * Current just resetting the whole data structure, need to investigate 678*8a9867a6SSlawomir Mrozowicz * whether a more selective reset of key would be more performant 679*8a9867a6SSlawomir Mrozowicz */ 680*8a9867a6SSlawomir Mrozowicz if (sess) { 681*8a9867a6SSlawomir Mrozowicz openssl_reset_session(sess); 682*8a9867a6SSlawomir Mrozowicz memset(sess, 0, sizeof(struct openssl_session)); 683*8a9867a6SSlawomir Mrozowicz } 684*8a9867a6SSlawomir Mrozowicz } 685*8a9867a6SSlawomir Mrozowicz 686*8a9867a6SSlawomir Mrozowicz struct rte_cryptodev_ops openssl_pmd_ops = { 687*8a9867a6SSlawomir Mrozowicz .dev_configure = openssl_pmd_config, 688*8a9867a6SSlawomir Mrozowicz .dev_start = openssl_pmd_start, 689*8a9867a6SSlawomir Mrozowicz .dev_stop = openssl_pmd_stop, 690*8a9867a6SSlawomir Mrozowicz .dev_close = openssl_pmd_close, 691*8a9867a6SSlawomir Mrozowicz 692*8a9867a6SSlawomir Mrozowicz .stats_get = openssl_pmd_stats_get, 693*8a9867a6SSlawomir Mrozowicz .stats_reset = openssl_pmd_stats_reset, 694*8a9867a6SSlawomir Mrozowicz 695*8a9867a6SSlawomir Mrozowicz .dev_infos_get = openssl_pmd_info_get, 696*8a9867a6SSlawomir Mrozowicz 697*8a9867a6SSlawomir Mrozowicz .queue_pair_setup = openssl_pmd_qp_setup, 698*8a9867a6SSlawomir Mrozowicz .queue_pair_release = openssl_pmd_qp_release, 699*8a9867a6SSlawomir Mrozowicz .queue_pair_start = openssl_pmd_qp_start, 700*8a9867a6SSlawomir Mrozowicz .queue_pair_stop = openssl_pmd_qp_stop, 701*8a9867a6SSlawomir Mrozowicz .queue_pair_count = openssl_pmd_qp_count, 702*8a9867a6SSlawomir Mrozowicz 703*8a9867a6SSlawomir Mrozowicz .session_get_size = openssl_pmd_session_get_size, 704*8a9867a6SSlawomir Mrozowicz .session_configure = openssl_pmd_session_configure, 705*8a9867a6SSlawomir Mrozowicz .session_clear = openssl_pmd_session_clear 706*8a9867a6SSlawomir Mrozowicz }; 707*8a9867a6SSlawomir Mrozowicz 708*8a9867a6SSlawomir Mrozowicz struct rte_cryptodev_ops *rte_openssl_pmd_ops = &openssl_pmd_ops; 709