LCOV - code coverage report
Current view: top level - drivers/crypto/ccp - ccp_pmd_ops.c (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 99 0.0 %
Date: 2024-12-01 18:57:19 Functions: 0 14 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 34 0.0 %

           Branch data     Line data    Source code
       1                 :            : /*   SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  *   Copyright(c) 2018 Advanced Micro Devices, Inc. All rights reserved.
       3                 :            :  */
       4                 :            : 
       5                 :            : #include <string.h>
       6                 :            : 
       7                 :            : #include <rte_common.h>
       8                 :            : #include <cryptodev_pmd.h>
       9                 :            : #include <rte_malloc.h>
      10                 :            : 
      11                 :            : #include "ccp_pmd_private.h"
      12                 :            : #include "ccp_dev.h"
      13                 :            : #include "ccp_crypto.h"
      14                 :            : 
      15                 :            : #define CCP_BASE_SYM_CRYPTO_CAPABILITIES                                \
      16                 :            :         {       /* SHA1 */                                              \
      17                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
      18                 :            :                 {.sym = {                                               \
      19                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
      20                 :            :                         {.auth = {                                      \
      21                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA1,          \
      22                 :            :                                  .block_size = 64,                      \
      23                 :            :                                  .key_size = {                          \
      24                 :            :                                          .min = 0,                      \
      25                 :            :                                          .max = 0,                      \
      26                 :            :                                          .increment = 0                 \
      27                 :            :                                  },                                     \
      28                 :            :                                  .digest_size = {                       \
      29                 :            :                                          .min = 20,                     \
      30                 :            :                                          .max = 20,                     \
      31                 :            :                                          .increment = 0                 \
      32                 :            :                                  },                                     \
      33                 :            :                                  .aad_size = { 0 }                      \
      34                 :            :                          }, }                                           \
      35                 :            :                 }, }                                                    \
      36                 :            :         },                                                              \
      37                 :            :         {       /* SHA1 HMAC */                                         \
      38                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
      39                 :            :                 {.sym = {                                               \
      40                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
      41                 :            :                         {.auth = {                                      \
      42                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,     \
      43                 :            :                                  .block_size = 64,                      \
      44                 :            :                                  .key_size = {                          \
      45                 :            :                                          .min = 1,                      \
      46                 :            :                                          .max = 64,                     \
      47                 :            :                                          .increment = 1                 \
      48                 :            :                                  },                                     \
      49                 :            :                                  .digest_size = {                       \
      50                 :            :                                          .min = 1,                      \
      51                 :            :                                          .max = 20,                     \
      52                 :            :                                          .increment = 1                 \
      53                 :            :                                  },                                     \
      54                 :            :                                  .aad_size = { 0 }                      \
      55                 :            :                          }, }                                           \
      56                 :            :                 }, }                                                    \
      57                 :            :         },                                                              \
      58                 :            :         {       /* SHA224 */                                            \
      59                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
      60                 :            :                 {.sym = {                                               \
      61                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
      62                 :            :                         {.auth = {                                      \
      63                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA224,        \
      64                 :            :                                  .block_size = 64,                      \
      65                 :            :                                  .key_size = {                          \
      66                 :            :                                          .min = 0,                      \
      67                 :            :                                          .max = 0,                      \
      68                 :            :                                          .increment = 0                 \
      69                 :            :                                  },                                     \
      70                 :            :                                  .digest_size = {                       \
      71                 :            :                                          .min = 28,                     \
      72                 :            :                                          .max = 28,                     \
      73                 :            :                                          .increment = 0                 \
      74                 :            :                                  },                                     \
      75                 :            :                                  .aad_size = { 0 }                      \
      76                 :            :                          }, }                                           \
      77                 :            :                 }, }                                                    \
      78                 :            :         },                                                              \
      79                 :            :         {       /* SHA224 HMAC */                                       \
      80                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
      81                 :            :                 {.sym = {                                               \
      82                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
      83                 :            :                         {.auth = {                                      \
      84                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA224_HMAC,   \
      85                 :            :                                  .block_size = 64,                      \
      86                 :            :                                  .key_size = {                          \
      87                 :            :                                          .min = 1,                      \
      88                 :            :                                          .max = 64,                     \
      89                 :            :                                          .increment = 1                 \
      90                 :            :                                  },                                     \
      91                 :            :                                  .digest_size = {                       \
      92                 :            :                                          .min = 1,                     \
      93                 :            :                                          .max = 28,                     \
      94                 :            :                                          .increment = 1                 \
      95                 :            :                                  },                                     \
      96                 :            :                                  .aad_size = { 0 }                      \
      97                 :            :                          }, }                                           \
      98                 :            :                 }, }                                                    \
      99                 :            :         },                                                              \
     100                 :            :         {       /* SHA3-224 */                                          \
     101                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     102                 :            :                 {.sym = {                                               \
     103                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     104                 :            :                         {.auth = {                                      \
     105                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA3_224,      \
     106                 :            :                                  .block_size = 144,                     \
     107                 :            :                                  .key_size = {                          \
     108                 :            :                                          .min = 0,                      \
     109                 :            :                                          .max = 0,                      \
     110                 :            :                                          .increment = 0                 \
     111                 :            :                                  },                                     \
     112                 :            :                                  .digest_size = {                       \
     113                 :            :                                          .min = 28,                     \
     114                 :            :                                          .max = 28,                     \
     115                 :            :                                          .increment = 0                 \
     116                 :            :                                  },                                     \
     117                 :            :                                  .aad_size = { 0 }                      \
     118                 :            :                          }, }                                           \
     119                 :            :                 }, }                                                    \
     120                 :            :         },                                                              \
     121                 :            :         {       /* SHA3-224  HMAC*/                                     \
     122                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     123                 :            :                 {.sym = {                                               \
     124                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     125                 :            :                         {.auth = {                                      \
     126                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA3_224_HMAC, \
     127                 :            :                                  .block_size = 144,                     \
     128                 :            :                                  .key_size = {                          \
     129                 :            :                                          .min = 1,                      \
     130                 :            :                                          .max = 144,                    \
     131                 :            :                                          .increment = 1                 \
     132                 :            :                                  },                                     \
     133                 :            :                                  .digest_size = {                       \
     134                 :            :                                          .min = 28,                     \
     135                 :            :                                          .max = 28,                     \
     136                 :            :                                          .increment = 0                 \
     137                 :            :                                  },                                     \
     138                 :            :                                  .aad_size = { 0 }                      \
     139                 :            :                          }, }                                           \
     140                 :            :                 }, }                                                    \
     141                 :            :         },                                                              \
     142                 :            :         {       /* SHA256 */                                            \
     143                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     144                 :            :                 {.sym = {                                               \
     145                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     146                 :            :                         {.auth = {                                      \
     147                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA256,        \
     148                 :            :                                  .block_size = 64,                      \
     149                 :            :                                  .key_size = {                          \
     150                 :            :                                          .min = 0,                      \
     151                 :            :                                          .max = 0,                      \
     152                 :            :                                          .increment = 0                 \
     153                 :            :                                  },                                     \
     154                 :            :                                  .digest_size = {                       \
     155                 :            :                                          .min = 32,                     \
     156                 :            :                                          .max = 32,                     \
     157                 :            :                                          .increment = 0                 \
     158                 :            :                                  },                                     \
     159                 :            :                                  .aad_size = { 0 }                      \
     160                 :            :                          }, }                                           \
     161                 :            :                 }, }                                                    \
     162                 :            :         },                                                              \
     163                 :            :         {       /* SHA256 HMAC */                                       \
     164                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     165                 :            :                 {.sym = {                                               \
     166                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     167                 :            :                         {.auth = {                                      \
     168                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,   \
     169                 :            :                                  .block_size = 64,                      \
     170                 :            :                                  .key_size = {                          \
     171                 :            :                                          .min = 1,                      \
     172                 :            :                                          .max = 64,                     \
     173                 :            :                                          .increment = 1                 \
     174                 :            :                                  },                                     \
     175                 :            :                                  .digest_size = {                       \
     176                 :            :                                          .min = 1,                     \
     177                 :            :                                          .max = 32,                     \
     178                 :            :                                          .increment = 1                 \
     179                 :            :                                  },                                     \
     180                 :            :                                  .aad_size = { 0 }                      \
     181                 :            :                          }, }                                           \
     182                 :            :                 }, }                                                    \
     183                 :            :         },                                                              \
     184                 :            :         {       /* SHA3-256 */                                          \
     185                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     186                 :            :                 {.sym = {                                               \
     187                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     188                 :            :                         {.auth = {                                      \
     189                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA3_256,      \
     190                 :            :                                  .block_size = 136,                     \
     191                 :            :                                  .key_size = {                          \
     192                 :            :                                          .min = 0,                      \
     193                 :            :                                          .max = 0,                      \
     194                 :            :                                          .increment = 0                 \
     195                 :            :                                  },                                     \
     196                 :            :                                  .digest_size = {                       \
     197                 :            :                                          .min = 32,                     \
     198                 :            :                                          .max = 32,                     \
     199                 :            :                                          .increment = 0                 \
     200                 :            :                                  },                                     \
     201                 :            :                                  .aad_size = { 0 }                      \
     202                 :            :                          }, }                                           \
     203                 :            :                 }, }                                                    \
     204                 :            :         },                                                              \
     205                 :            :         {       /* SHA3-256-HMAC */                                     \
     206                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     207                 :            :                 {.sym = {                                               \
     208                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     209                 :            :                         {.auth = {                                      \
     210                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA3_256_HMAC, \
     211                 :            :                                  .block_size = 136,                     \
     212                 :            :                                  .key_size = {                          \
     213                 :            :                                          .min = 1,                      \
     214                 :            :                                          .max = 136,                    \
     215                 :            :                                          .increment = 1                 \
     216                 :            :                                  },                                     \
     217                 :            :                                  .digest_size = {                       \
     218                 :            :                                          .min = 32,                     \
     219                 :            :                                          .max = 32,                     \
     220                 :            :                                          .increment = 0                 \
     221                 :            :                                  },                                     \
     222                 :            :                                  .aad_size = { 0 }                      \
     223                 :            :                          }, }                                           \
     224                 :            :                 }, }                                                    \
     225                 :            :         },                                                              \
     226                 :            :         {       /* SHA384 */                                            \
     227                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     228                 :            :                 {.sym = {                                               \
     229                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     230                 :            :                         {.auth = {                                      \
     231                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA384,        \
     232                 :            :                                  .block_size = 128,                     \
     233                 :            :                                  .key_size = {                          \
     234                 :            :                                          .min = 0,                      \
     235                 :            :                                          .max = 0,                      \
     236                 :            :                                          .increment = 0                 \
     237                 :            :                                  },                                     \
     238                 :            :                                  .digest_size = {                       \
     239                 :            :                                          .min = 48,                     \
     240                 :            :                                          .max = 48,                     \
     241                 :            :                                          .increment = 0                 \
     242                 :            :                                  },                                     \
     243                 :            :                                  .aad_size = { 0 }                      \
     244                 :            :                          }, }                                           \
     245                 :            :                 }, }                                                    \
     246                 :            :         },                                                              \
     247                 :            :         {       /* SHA384 HMAC */                                       \
     248                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     249                 :            :                 {.sym = {                                               \
     250                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     251                 :            :                         {.auth = {                                      \
     252                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,   \
     253                 :            :                                  .block_size = 128,                     \
     254                 :            :                                  .key_size = {                          \
     255                 :            :                                          .min = 1,                      \
     256                 :            :                                          .max = 128,                    \
     257                 :            :                                          .increment = 1                 \
     258                 :            :                                  },                                     \
     259                 :            :                                  .digest_size = {                       \
     260                 :            :                                          .min = 1,                     \
     261                 :            :                                          .max = 48,                     \
     262                 :            :                                          .increment = 1                 \
     263                 :            :                                  },                                     \
     264                 :            :                                  .aad_size = { 0 }                      \
     265                 :            :                          }, }                                           \
     266                 :            :                 }, }                                                    \
     267                 :            :         },                                                              \
     268                 :            :         {       /* SHA3-384 */                                          \
     269                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     270                 :            :                 {.sym = {                                               \
     271                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     272                 :            :                         {.auth = {                                      \
     273                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA3_384,      \
     274                 :            :                                  .block_size = 104,                     \
     275                 :            :                                  .key_size = {                          \
     276                 :            :                                          .min = 0,                      \
     277                 :            :                                          .max = 0,                      \
     278                 :            :                                          .increment = 0                 \
     279                 :            :                                  },                                     \
     280                 :            :                                  .digest_size = {                       \
     281                 :            :                                          .min = 48,                     \
     282                 :            :                                          .max = 48,                     \
     283                 :            :                                          .increment = 0                 \
     284                 :            :                                  },                                     \
     285                 :            :                                  .aad_size = { 0 }                      \
     286                 :            :                          }, }                                           \
     287                 :            :                 }, }                                                    \
     288                 :            :         },                                                              \
     289                 :            :         {       /* SHA3-384-HMAC */                                     \
     290                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     291                 :            :                 {.sym = {                                               \
     292                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     293                 :            :                         {.auth = {                                      \
     294                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA3_384_HMAC, \
     295                 :            :                                  .block_size = 104,                     \
     296                 :            :                                  .key_size = {                          \
     297                 :            :                                          .min = 1,                      \
     298                 :            :                                          .max = 104,                    \
     299                 :            :                                          .increment = 1                 \
     300                 :            :                                  },                                     \
     301                 :            :                                  .digest_size = {                       \
     302                 :            :                                          .min = 48,                     \
     303                 :            :                                          .max = 48,                     \
     304                 :            :                                          .increment = 0                 \
     305                 :            :                                  },                                     \
     306                 :            :                                  .aad_size = { 0 }                      \
     307                 :            :                          }, }                                           \
     308                 :            :                 }, }                                                    \
     309                 :            :         },                                                              \
     310                 :            :         {       /* SHA512  */                                           \
     311                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     312                 :            :                 {.sym = {                                               \
     313                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     314                 :            :                         {.auth = {                                      \
     315                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA512,        \
     316                 :            :                                  .block_size = 128,                     \
     317                 :            :                                  .key_size = {                          \
     318                 :            :                                          .min = 0,                      \
     319                 :            :                                          .max = 0,                      \
     320                 :            :                                          .increment = 0                 \
     321                 :            :                                  },                                     \
     322                 :            :                                  .digest_size = {                       \
     323                 :            :                                          .min = 64,                     \
     324                 :            :                                          .max = 64,                     \
     325                 :            :                                          .increment = 0                 \
     326                 :            :                                  },                                     \
     327                 :            :                                  .aad_size = { 0 }                      \
     328                 :            :                          }, }                                           \
     329                 :            :                 }, }                                                    \
     330                 :            :         },                                                              \
     331                 :            :         {       /* SHA512 HMAC */                                       \
     332                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     333                 :            :                 {.sym = {                                               \
     334                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     335                 :            :                         {.auth = {                                      \
     336                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,   \
     337                 :            :                                  .block_size = 128,                     \
     338                 :            :                                  .key_size = {                          \
     339                 :            :                                          .min = 1,                      \
     340                 :            :                                          .max = 128,                    \
     341                 :            :                                          .increment = 1                 \
     342                 :            :                                  },                                     \
     343                 :            :                                  .digest_size = {                       \
     344                 :            :                                          .min = 1,                     \
     345                 :            :                                          .max = 64,                     \
     346                 :            :                                          .increment = 1                 \
     347                 :            :                                  },                                     \
     348                 :            :                                  .aad_size = { 0 }                      \
     349                 :            :                          }, }                                           \
     350                 :            :                 }, }                                                    \
     351                 :            :         },                                                              \
     352                 :            :         {       /* SHA3-512  */                                         \
     353                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     354                 :            :                 {.sym = {                                               \
     355                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     356                 :            :                         {.auth = {                                      \
     357                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA3_512,      \
     358                 :            :                                  .block_size = 72,                      \
     359                 :            :                                  .key_size = {                          \
     360                 :            :                                          .min = 0,                      \
     361                 :            :                                          .max = 0,                      \
     362                 :            :                                          .increment = 0                 \
     363                 :            :                                  },                                     \
     364                 :            :                                  .digest_size = {                       \
     365                 :            :                                          .min = 64,                     \
     366                 :            :                                          .max = 64,                     \
     367                 :            :                                          .increment = 0                 \
     368                 :            :                                  },                                     \
     369                 :            :                                  .aad_size = { 0 }                      \
     370                 :            :                          }, }                                           \
     371                 :            :                 }, }                                                    \
     372                 :            :         },                                                              \
     373                 :            :         {       /* SHA3-512-HMAC  */                                    \
     374                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     375                 :            :                 {.sym = {                                               \
     376                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     377                 :            :                         {.auth = {                                      \
     378                 :            :                                  .algo = RTE_CRYPTO_AUTH_SHA3_512_HMAC, \
     379                 :            :                                  .block_size = 72,                      \
     380                 :            :                                  .key_size = {                          \
     381                 :            :                                          .min = 1,                      \
     382                 :            :                                          .max = 72,                     \
     383                 :            :                                          .increment = 1                 \
     384                 :            :                                  },                                     \
     385                 :            :                                  .digest_size = {                       \
     386                 :            :                                          .min = 1,                     \
     387                 :            :                                          .max = 64,                     \
     388                 :            :                                          .increment = 1                 \
     389                 :            :                                  },                                     \
     390                 :            :                                  .aad_size = { 0 }                      \
     391                 :            :                         }, }                                            \
     392                 :            :                 }, }                                                    \
     393                 :            :         },                                                              \
     394                 :            :         {       /*AES-CMAC */                                           \
     395                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     396                 :            :                 {.sym = {                                               \
     397                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     398                 :            :                         {.auth = {                                      \
     399                 :            :                                  .algo = RTE_CRYPTO_AUTH_AES_CMAC,      \
     400                 :            :                                  .block_size = 16,                      \
     401                 :            :                                  .key_size = {                          \
     402                 :            :                                          .min = 16,                     \
     403                 :            :                                          .max = 32,                     \
     404                 :            :                                          .increment = 8                 \
     405                 :            :                                  },                                     \
     406                 :            :                                  .digest_size = {                       \
     407                 :            :                                          .min = 16,                     \
     408                 :            :                                          .max = 16,                     \
     409                 :            :                                          .increment = 0                 \
     410                 :            :                                  },                                     \
     411                 :            :                         }, }                                            \
     412                 :            :                 }, }                                                    \
     413                 :            :         },                                                              \
     414                 :            :         {       /* AES ECB */                                           \
     415                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     416                 :            :                 {.sym = {                                               \
     417                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,      \
     418                 :            :                         {.cipher = {                                    \
     419                 :            :                                 .algo = RTE_CRYPTO_CIPHER_AES_ECB,      \
     420                 :            :                                 .block_size = 16,                       \
     421                 :            :                                 .key_size = {                           \
     422                 :            :                                    .min = 16,                           \
     423                 :            :                                    .max = 32,                           \
     424                 :            :                                    .increment = 8                       \
     425                 :            :                                 },                                      \
     426                 :            :                                 .iv_size = {                            \
     427                 :            :                                    .min = 0,                            \
     428                 :            :                                    .max = 0,                            \
     429                 :            :                                    .increment = 0                       \
     430                 :            :                                 }                                       \
     431                 :            :                         }, }                                            \
     432                 :            :                 }, }                                                    \
     433                 :            :         },                                                              \
     434                 :            :         {       /* AES CBC */                                           \
     435                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     436                 :            :                 {.sym = {                                               \
     437                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,      \
     438                 :            :                         {.cipher = {                                    \
     439                 :            :                                 .algo = RTE_CRYPTO_CIPHER_AES_CBC,      \
     440                 :            :                                 .block_size = 16,                       \
     441                 :            :                                 .key_size = {                           \
     442                 :            :                                         .min = 16,                      \
     443                 :            :                                         .max = 32,                      \
     444                 :            :                                         .increment = 8                  \
     445                 :            :                                 },                                      \
     446                 :            :                                 .iv_size = {                            \
     447                 :            :                                         .min = 16,                      \
     448                 :            :                                         .max = 16,                      \
     449                 :            :                                         .increment = 0                  \
     450                 :            :                                 }                                       \
     451                 :            :                         }, }                                            \
     452                 :            :                 }, }                                                    \
     453                 :            :         },                                                              \
     454                 :            :         {       /* AES CTR */                                           \
     455                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     456                 :            :                 {.sym = {                                               \
     457                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,      \
     458                 :            :                         {.cipher = {                                    \
     459                 :            :                                 .algo = RTE_CRYPTO_CIPHER_AES_CTR,      \
     460                 :            :                                 .block_size = 16,                       \
     461                 :            :                                 .key_size = {                           \
     462                 :            :                                         .min = 16,                      \
     463                 :            :                                         .max = 32,                      \
     464                 :            :                                         .increment = 8                  \
     465                 :            :                                 },                                      \
     466                 :            :                                 .iv_size = {                            \
     467                 :            :                                         .min = 16,                      \
     468                 :            :                                         .max = 16,                      \
     469                 :            :                                         .increment = 0                  \
     470                 :            :                                 }                                       \
     471                 :            :                         }, }                                            \
     472                 :            :                 }, }                                                    \
     473                 :            :         },                                                              \
     474                 :            :         {       /* 3DES CBC */                                          \
     475                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     476                 :            :                 {.sym = {                                               \
     477                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,      \
     478                 :            :                         {.cipher = {                                    \
     479                 :            :                                 .algo = RTE_CRYPTO_CIPHER_3DES_CBC,     \
     480                 :            :                                 .block_size = 8,                        \
     481                 :            :                                 .key_size = {                           \
     482                 :            :                                         .min = 16,                      \
     483                 :            :                                         .max = 24,                      \
     484                 :            :                                         .increment = 8                  \
     485                 :            :                                 },                                      \
     486                 :            :                                 .iv_size = {                            \
     487                 :            :                                         .min = 8,                       \
     488                 :            :                                         .max = 8,                       \
     489                 :            :                                         .increment = 0                  \
     490                 :            :                                 }                                       \
     491                 :            :                         }, }                                            \
     492                 :            :                 }, }                                                    \
     493                 :            :         },                                                              \
     494                 :            :         {       /* AES GCM */                                           \
     495                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     496                 :            :                 {.sym = {                                               \
     497                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,        \
     498                 :            :                         {.aead = {                                      \
     499                 :            :                                  .algo = RTE_CRYPTO_AEAD_AES_GCM,       \
     500                 :            :                                  .block_size = 16,                      \
     501                 :            :                                  .key_size = {                          \
     502                 :            :                                          .min = 16,                     \
     503                 :            :                                          .max = 32,                     \
     504                 :            :                                          .increment = 8                 \
     505                 :            :                                  },                                     \
     506                 :            :                                  .digest_size = {                       \
     507                 :            :                                          .min = 16,                     \
     508                 :            :                                          .max = 16,                     \
     509                 :            :                                          .increment = 0                 \
     510                 :            :                                  },                                     \
     511                 :            :                                  .aad_size = {                          \
     512                 :            :                                          .min = 0,                      \
     513                 :            :                                          .max = 65535,                  \
     514                 :            :                                          .increment = 1                 \
     515                 :            :                                  },                                     \
     516                 :            :                                  .iv_size = {                           \
     517                 :            :                                          .min = 12,                     \
     518                 :            :                                          .max = 16,                     \
     519                 :            :                                          .increment = 4                 \
     520                 :            :                                  },                                     \
     521                 :            :                         }, }                                            \
     522                 :            :                 }, }                                                    \
     523                 :            :         }
     524                 :            : 
     525                 :            : #define CCP_EXTRA_SYM_CRYPTO_CAPABILITIES                               \
     526                 :            :         {       /* MD5 HMAC */                                          \
     527                 :            :                 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,                     \
     528                 :            :                 {.sym = {                                               \
     529                 :            :                         .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,        \
     530                 :            :                         {.auth = {                                      \
     531                 :            :                                  .algo = RTE_CRYPTO_AUTH_MD5_HMAC,      \
     532                 :            :                                  .block_size = 64,                      \
     533                 :            :                                  .key_size = {                          \
     534                 :            :                                          .min = 1,                      \
     535                 :            :                                          .max = 64,                     \
     536                 :            :                                          .increment = 1                 \
     537                 :            :                                  },                                     \
     538                 :            :                                  .digest_size = {                       \
     539                 :            :                                          .min = 1,                      \
     540                 :            :                                          .max = 16,                     \
     541                 :            :                                          .increment = 1                 \
     542                 :            :                                  },                                     \
     543                 :            :                                  .aad_size = { 0 }                      \
     544                 :            :                         }, }                                            \
     545                 :            :                 }, }                                                    \
     546                 :            :         }
     547                 :            : 
     548                 :            : static const struct rte_cryptodev_capabilities ccp_crypto_cap[] = {
     549                 :            :         CCP_BASE_SYM_CRYPTO_CAPABILITIES,
     550                 :            :         RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
     551                 :            : };
     552                 :            : 
     553                 :            : static const struct rte_cryptodev_capabilities ccp_crypto_cap_complete[] = {
     554                 :            :         CCP_EXTRA_SYM_CRYPTO_CAPABILITIES,
     555                 :            :         CCP_BASE_SYM_CRYPTO_CAPABILITIES,
     556                 :            :         RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
     557                 :            : };
     558                 :            : 
     559                 :            : static int
     560                 :          0 : ccp_pmd_config(struct rte_cryptodev *dev __rte_unused,
     561                 :            :                struct rte_cryptodev_config *config __rte_unused)
     562                 :            : {
     563                 :          0 :         return 0;
     564                 :            : }
     565                 :            : 
     566                 :            : static int
     567                 :          0 : ccp_pmd_start(struct rte_cryptodev *dev)
     568                 :            : {
     569                 :          0 :         return ccp_dev_start(dev);
     570                 :            : }
     571                 :            : 
     572                 :            : static void
     573                 :          0 : ccp_pmd_stop(struct rte_cryptodev *dev __rte_unused)
     574                 :            : {
     575                 :            : 
     576                 :          0 : }
     577                 :            : 
     578                 :            : static int
     579                 :          0 : ccp_pmd_close(struct rte_cryptodev *dev __rte_unused)
     580                 :            : {
     581                 :          0 :         return 0;
     582                 :            : }
     583                 :            : 
     584                 :            : static void
     585                 :          0 : ccp_pmd_stats_get(struct rte_cryptodev *dev,
     586                 :            :                   struct rte_cryptodev_stats *stats)
     587                 :            : {
     588                 :            :         int qp_id;
     589                 :            : 
     590         [ #  # ]:          0 :         for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {
     591                 :          0 :                 struct ccp_qp *qp = dev->data->queue_pairs[qp_id];
     592                 :            : 
     593                 :          0 :                 stats->enqueued_count += qp->qp_stats.enqueued_count;
     594                 :          0 :                 stats->dequeued_count += qp->qp_stats.dequeued_count;
     595                 :            : 
     596                 :          0 :                 stats->enqueue_err_count += qp->qp_stats.enqueue_err_count;
     597                 :          0 :                 stats->dequeue_err_count += qp->qp_stats.dequeue_err_count;
     598                 :            :         }
     599                 :            : 
     600                 :          0 : }
     601                 :            : 
     602                 :            : static void
     603                 :          0 : ccp_pmd_stats_reset(struct rte_cryptodev *dev)
     604                 :            : {
     605                 :            :         int qp_id;
     606                 :            : 
     607         [ #  # ]:          0 :         for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) {
     608                 :          0 :                 struct ccp_qp *qp = dev->data->queue_pairs[qp_id];
     609                 :            : 
     610                 :          0 :                 memset(&qp->qp_stats, 0, sizeof(qp->qp_stats));
     611                 :            :         }
     612                 :          0 : }
     613                 :            : 
     614                 :            : static void
     615                 :          0 : ccp_pmd_info_get(struct rte_cryptodev *dev,
     616                 :            :                  struct rte_cryptodev_info *dev_info)
     617                 :            : {
     618                 :          0 :         struct ccp_private *internals = dev->data->dev_private;
     619                 :            : 
     620         [ #  # ]:          0 :         if (dev_info != NULL) {
     621                 :          0 :                 dev_info->driver_id = dev->driver_id;
     622                 :          0 :                 dev_info->feature_flags = dev->feature_flags;
     623                 :          0 :                 dev_info->capabilities = ccp_crypto_cap;
     624         [ #  # ]:          0 :                 if (internals->auth_opt == 1)
     625                 :          0 :                         dev_info->capabilities = ccp_crypto_cap_complete;
     626                 :          0 :                 dev_info->max_nb_queue_pairs = internals->max_nb_qpairs;
     627                 :            :                 /* No limit of number of sessions */
     628                 :          0 :                 dev_info->sym.max_nb_sessions = 0;
     629                 :            :         }
     630                 :          0 : }
     631                 :            : 
     632                 :            : static int
     633                 :          0 : ccp_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
     634                 :            : {
     635                 :            :         struct ccp_qp *qp;
     636                 :            : 
     637         [ #  # ]:          0 :         if (dev->data->queue_pairs[qp_id] != NULL) {
     638                 :            :                 qp = (struct ccp_qp *)dev->data->queue_pairs[qp_id];
     639                 :          0 :                 rte_ring_free(qp->processed_pkts);
     640                 :          0 :                 rte_mempool_free(qp->batch_mp);
     641                 :          0 :                 rte_free(qp);
     642                 :          0 :                 dev->data->queue_pairs[qp_id] = NULL;
     643                 :            :         }
     644                 :          0 :         return 0;
     645                 :            : }
     646                 :            : 
     647                 :            : static int
     648                 :          0 : ccp_pmd_qp_set_unique_name(struct rte_cryptodev *dev,
     649                 :            :                 struct ccp_qp *qp)
     650                 :            : {
     651                 :          0 :         unsigned int n = snprintf(qp->name, sizeof(qp->name),
     652                 :            :                         "ccp_pmd_%u_qp_%u",
     653         [ #  # ]:          0 :                         dev->data->dev_id, qp->id);
     654                 :            : 
     655         [ #  # ]:          0 :         if (n > sizeof(qp->name))
     656                 :          0 :                 return -1;
     657                 :            : 
     658                 :            :         return 0;
     659                 :            : }
     660                 :            : 
     661                 :            : static struct rte_ring *
     662                 :          0 : ccp_pmd_qp_create_batch_info_ring(struct ccp_qp *qp,
     663                 :            :                                   unsigned int ring_size, int socket_id)
     664                 :            : {
     665                 :            :         struct rte_ring *r;
     666                 :            : 
     667                 :          0 :         r = rte_ring_lookup(qp->name);
     668         [ #  # ]:          0 :         if (r) {
     669         [ #  # ]:          0 :                 if (r->size >= ring_size) {
     670                 :            :                         CCP_LOG_INFO(
     671                 :            :                                 "Reusing ring %s for processed packets",
     672                 :            :                                 qp->name);
     673                 :            :                         return r;
     674                 :            :                 }
     675                 :            :                 CCP_LOG_INFO(
     676                 :            :                         "Unable to reuse ring %s for processed packets",
     677                 :            :                          qp->name);
     678                 :          0 :                 return NULL;
     679                 :            :         }
     680                 :            : 
     681                 :          0 :         return rte_ring_create(qp->name, ring_size, socket_id,
     682                 :            :                         RING_F_SP_ENQ | RING_F_SC_DEQ);
     683                 :            : }
     684                 :            : 
     685                 :            : static int
     686                 :          0 : ccp_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
     687                 :            :                  const struct rte_cryptodev_qp_conf *qp_conf,
     688                 :            :                  int socket_id)
     689                 :            : {
     690                 :          0 :         struct ccp_private *internals = dev->data->dev_private;
     691                 :            :         struct ccp_qp *qp;
     692                 :            :         int retval = 0;
     693                 :            : 
     694         [ #  # ]:          0 :         if (qp_id >= internals->max_nb_qpairs) {
     695                 :          0 :                 CCP_LOG_ERR("Invalid qp_id %u, should be less than %u",
     696                 :            :                             qp_id, internals->max_nb_qpairs);
     697                 :          0 :                 return (-EINVAL);
     698                 :            :         }
     699                 :            : 
     700                 :            :         /* Free memory prior to re-allocation if needed. */
     701         [ #  # ]:          0 :         if (dev->data->queue_pairs[qp_id] != NULL)
     702                 :          0 :                 ccp_pmd_qp_release(dev, qp_id);
     703                 :            : 
     704                 :            :         /* Allocate the queue pair data structure. */
     705                 :          0 :         qp = rte_zmalloc_socket("CCP Crypto PMD Queue Pair", sizeof(*qp),
     706                 :            :                                         RTE_CACHE_LINE_SIZE, socket_id);
     707         [ #  # ]:          0 :         if (qp == NULL) {
     708                 :          0 :                 CCP_LOG_ERR("Failed to allocate queue pair memory");
     709                 :          0 :                 return (-ENOMEM);
     710                 :            :         }
     711                 :            : 
     712                 :          0 :         qp->dev = dev;
     713                 :          0 :         qp->id = qp_id;
     714                 :          0 :         dev->data->queue_pairs[qp_id] = qp;
     715                 :            : 
     716                 :          0 :         retval = ccp_pmd_qp_set_unique_name(dev, qp);
     717         [ #  # ]:          0 :         if (retval) {
     718                 :          0 :                 CCP_LOG_ERR("Failed to create unique name for ccp qp");
     719                 :          0 :                 goto qp_setup_cleanup;
     720                 :            :         }
     721                 :            : 
     722                 :          0 :         qp->processed_pkts = ccp_pmd_qp_create_batch_info_ring(qp,
     723                 :          0 :                         qp_conf->nb_descriptors, socket_id);
     724         [ #  # ]:          0 :         if (qp->processed_pkts == NULL) {
     725                 :          0 :                 CCP_LOG_ERR("Failed to create batch info ring");
     726                 :          0 :                 goto qp_setup_cleanup;
     727                 :            :         }
     728                 :            : 
     729                 :          0 :         qp->sess_mp = qp_conf->mp_session;
     730                 :            : 
     731                 :            :         /* mempool for batch info */
     732                 :          0 :         qp->batch_mp = rte_mempool_create(
     733                 :          0 :                                 qp->name,
     734                 :          0 :                                 qp_conf->nb_descriptors,
     735                 :            :                                 sizeof(struct ccp_batch_info),
     736                 :            :                                 RTE_CACHE_LINE_SIZE,
     737                 :            :                                 0, NULL, NULL, NULL, NULL,
     738                 :            :                                 SOCKET_ID_ANY, 0);
     739         [ #  # ]:          0 :         if (qp->batch_mp == NULL)
     740                 :          0 :                 goto qp_setup_cleanup;
     741                 :          0 :         memset(&qp->qp_stats, 0, sizeof(qp->qp_stats));
     742                 :          0 :         return 0;
     743                 :            : 
     744                 :          0 : qp_setup_cleanup:
     745                 :          0 :         dev->data->queue_pairs[qp_id] = NULL;
     746                 :          0 :         rte_free(qp);
     747                 :          0 :         return -1;
     748                 :            : }
     749                 :            : 
     750                 :            : static unsigned
     751                 :          0 : ccp_pmd_sym_session_get_size(struct rte_cryptodev *dev __rte_unused)
     752                 :            : {
     753                 :          0 :         return sizeof(struct ccp_session);
     754                 :            : }
     755                 :            : 
     756                 :            : static int
     757                 :          0 : ccp_pmd_sym_session_configure(struct rte_cryptodev *dev,
     758                 :            :                           struct rte_crypto_sym_xform *xform,
     759                 :            :                           struct rte_cryptodev_sym_session *sess)
     760                 :            : {
     761                 :            :         int ret;
     762                 :            :         void *sess_private_data;
     763                 :            :         struct ccp_private *internals;
     764                 :            : 
     765         [ #  # ]:          0 :         if (unlikely(sess == NULL || xform == NULL)) {
     766                 :          0 :                 CCP_LOG_ERR("Invalid session struct or xform");
     767                 :          0 :                 return -ENOMEM;
     768                 :            :         }
     769                 :            : 
     770                 :          0 :         sess_private_data = CRYPTODEV_GET_SYM_SESS_PRIV(sess);
     771                 :            : 
     772                 :          0 :         internals = (struct ccp_private *)dev->data->dev_private;
     773                 :          0 :         ret = ccp_set_session_parameters(sess_private_data, xform, internals);
     774         [ #  # ]:          0 :         if (ret != 0) {
     775                 :          0 :                 CCP_LOG_ERR("failed configure session parameters");
     776                 :          0 :                 return ret;
     777                 :            :         }
     778                 :            : 
     779                 :            :         return 0;
     780                 :            : }
     781                 :            : 
     782                 :            : static void
     783                 :          0 : ccp_pmd_sym_session_clear(struct rte_cryptodev *dev __rte_unused,
     784                 :            :                       struct rte_cryptodev_sym_session *sess __rte_unused)
     785                 :          0 : {}
     786                 :            : 
     787                 :            : struct rte_cryptodev_ops ccp_ops = {
     788                 :            :                 .dev_configure          = ccp_pmd_config,
     789                 :            :                 .dev_start              = ccp_pmd_start,
     790                 :            :                 .dev_stop               = ccp_pmd_stop,
     791                 :            :                 .dev_close              = ccp_pmd_close,
     792                 :            : 
     793                 :            :                 .stats_get              = ccp_pmd_stats_get,
     794                 :            :                 .stats_reset            = ccp_pmd_stats_reset,
     795                 :            : 
     796                 :            :                 .dev_infos_get          = ccp_pmd_info_get,
     797                 :            : 
     798                 :            :                 .queue_pair_setup       = ccp_pmd_qp_setup,
     799                 :            :                 .queue_pair_release     = ccp_pmd_qp_release,
     800                 :            : 
     801                 :            :                 .sym_session_get_size   = ccp_pmd_sym_session_get_size,
     802                 :            :                 .sym_session_configure  = ccp_pmd_sym_session_configure,
     803                 :            :                 .sym_session_clear      = ccp_pmd_sym_session_clear,
     804                 :            : };
     805                 :            : 
     806                 :            : struct rte_cryptodev_ops *ccp_pmd_ops = &ccp_ops;

Generated by: LCOV version 1.14