New upstream version 17.08
[deb_dpdk.git] / drivers / crypto / dpaa2_sec / dpaa2_sec_priv.h
index f5c6169..3849a05 100644 (file)
@@ -2,7 +2,7 @@
  *   BSD LICENSE
  *
  *   Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
- *   Copyright (c) 2016 NXP. All rights reserved.
+ *   Copyright 2016 NXP.
  *
  *   Redistribution and use in source and binary forms, with or without
  *   modification, are permitted provided that the following conditions
 #ifndef _RTE_DPAA2_SEC_PMD_PRIVATE_H_
 #define _RTE_DPAA2_SEC_PMD_PRIVATE_H_
 
+#define CRYPTODEV_NAME_DPAA2_SEC_PMD   crypto_dpaa2_sec
+/**< NXP DPAA2 - SEC PMD device name */
+
 #define MAX_QUEUES             64
 #define MAX_DESC_SIZE          64
 /** private data structure for each DPAA2_SEC device */
 struct dpaa2_sec_dev_private {
        void *mc_portal; /**< MC Portal for configuring this device */
        void *hw; /**< Hardware handle for this device.Used by NADK framework */
+       struct rte_mempool *fle_pool; /* per device memory pool for FLE */
        int32_t hw_id; /**< An unique ID of this device instance */
        int32_t vfio_fd; /**< File descriptor received via VFIO */
        uint16_t token; /**< Token required by DPxxx objects */
@@ -128,6 +132,7 @@ struct sec_flc_desc {
 };
 
 struct ctxt_priv {
+       struct rte_mempool *fle_pool; /* per device memory pool for FLE */
        struct sec_flc_desc flc_desc[0];
 };
 
@@ -135,6 +140,7 @@ enum dpaa2_sec_op_type {
        DPAA2_SEC_NONE,  /*!< No Cipher operations*/
        DPAA2_SEC_CIPHER,/*!< CIPHER operations */
        DPAA2_SEC_AUTH,  /*!< Authentication Operations */
+       DPAA2_SEC_AEAD,  /*!< AEAD (AES-GCM/CCM) type operations */
        DPAA2_SEC_CIPHER_HASH,  /*!< Authenticated Encryption with
                                 * associated data
                                 */
@@ -147,30 +153,9 @@ enum dpaa2_sec_op_type {
        DPAA2_SEC_MAX
 };
 
-struct dpaa2_sec_cipher_ctxt {
-       struct {
-               uint8_t *data;
-               uint16_t length;
-       } iv;   /**< Initialisation vector parameters */
-       uint8_t *init_counter;  /*!< Set initial counter for CTR mode */
-};
-
-struct dpaa2_sec_auth_ctxt {
-       uint8_t trunc_len;              /*!< Length for output ICV, should
-                                        * be 0 if no truncation required
-                                        */
-};
-
 struct dpaa2_sec_aead_ctxt {
-       struct {
-               uint8_t *data;
-               uint16_t length;
-       } iv;   /**< Initialisation vector parameters */
        uint16_t auth_only_len; /*!< Length of data for Auth only */
        uint8_t auth_cipher_text;       /**< Authenticate/cipher ordering */
-       uint8_t trunc_len;              /*!< Length for output ICV, should
-                                        * be 0 if no truncation required
-                                        */
 };
 
 typedef struct dpaa2_sec_session_entry {
@@ -179,18 +164,29 @@ typedef struct dpaa2_sec_session_entry {
        uint8_t dir;         /*!< Operation Direction */
        enum rte_crypto_cipher_algorithm cipher_alg; /*!< Cipher Algorithm*/
        enum rte_crypto_auth_algorithm auth_alg; /*!< Authentication Algorithm*/
+       union {
+               struct {
+                       uint8_t *data;  /**< pointer to key data */
+                       size_t length;  /**< key length in bytes */
+               } aead_key;
+               struct {
+                       struct {
+                               uint8_t *data;  /**< pointer to key data */
+                               size_t length;  /**< key length in bytes */
+                       } cipher_key;
+                       struct {
+                               uint8_t *data;  /**< pointer to key data */
+                               size_t length;  /**< key length in bytes */
+                       } auth_key;
+               };
+       };
        struct {
-               uint8_t *data;  /**< pointer to key data */
-               size_t length;  /**< key length in bytes */
-       } cipher_key;
-       struct {
-               uint8_t *data;  /**< pointer to key data */
-               size_t length;  /**< key length in bytes */
-       } auth_key;
+               uint16_t length; /**< IV length in bytes */
+               uint16_t offset; /**< IV offset in bytes */
+       } iv;
+       uint16_t digest_length;
        uint8_t status;
        union {
-               struct dpaa2_sec_cipher_ctxt cipher_ctxt;
-               struct dpaa2_sec_auth_ctxt auth_ctxt;
                struct dpaa2_sec_aead_ctxt aead_ctxt;
        } ext_params;
 } dpaa2_sec_session;
@@ -204,16 +200,16 @@ static const struct rte_cryptodev_capabilities dpaa2_sec_capabilities[] = {
                                .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
                                .block_size = 64,
                                .key_size = {
-                                       .min = 64,
+                                       .min = 1,
                                        .max = 64,
-                                       .increment = 0
+                                       .increment = 1
                                },
                                .digest_size = {
                                        .min = 16,
                                        .max = 16,
                                        .increment = 0
                                },
-                               .aad_size = { 0 }
+                               .iv_size = { 0 }
                        }, }
                }, }
        },
@@ -225,16 +221,16 @@ static const struct rte_cryptodev_capabilities dpaa2_sec_capabilities[] = {
                                .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
                                .block_size = 64,
                                .key_size = {
-                                       .min = 64,
+                                       .min = 1,
                                        .max = 64,
-                                       .increment = 0
+                                       .increment = 1
                                },
                                .digest_size = {
                                        .min = 20,
                                        .max = 20,
                                        .increment = 0
                                },
-                               .aad_size = { 0 }
+                               .iv_size = { 0 }
                        }, }
                }, }
        },
@@ -246,16 +242,16 @@ static const struct rte_cryptodev_capabilities dpaa2_sec_capabilities[] = {
                                .algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
                                .block_size = 64,
                                .key_size = {
-                                       .min = 64,
+                                       .min = 1,
                                        .max = 64,
-                                       .increment = 0
+                                       .increment = 1
                                },
                                .digest_size = {
                                        .min = 28,
                                        .max = 28,
                                        .increment = 0
                                },
-                               .aad_size = { 0 }
+                               .iv_size = { 0 }
                        }, }
                }, }
        },
@@ -267,16 +263,16 @@ static const struct rte_cryptodev_capabilities dpaa2_sec_capabilities[] = {
                                .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
                                .block_size = 64,
                                .key_size = {
-                                       .min = 64,
+                                       .min = 1,
                                        .max = 64,
-                                       .increment = 0
+                                       .increment = 1
                                },
                                .digest_size = {
                                                .min = 32,
                                                .max = 32,
                                                .increment = 0
-                                       },
-                                       .aad_size = { 0 }
+                               },
+                               .iv_size = { 0 }
                                }, }
                        }, }
                },
@@ -288,16 +284,16 @@ static const struct rte_cryptodev_capabilities dpaa2_sec_capabilities[] = {
                                .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
                                .block_size = 128,
                                .key_size = {
-                                       .min = 128,
+                                       .min = 1,
                                        .max = 128,
-                                       .increment = 0
+                                       .increment = 1
                                },
                                .digest_size = {
                                        .min = 48,
                                        .max = 48,
                                        .increment = 0
                                },
-                               .aad_size = { 0 }
+                               .iv_size = { 0 }
                        }, }
                }, }
        },
@@ -309,16 +305,46 @@ static const struct rte_cryptodev_capabilities dpaa2_sec_capabilities[] = {
                                .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
                                .block_size = 128,
                                .key_size = {
-                                       .min = 128,
+                                       .min = 1,
                                        .max = 128,
-                                       .increment = 0
+                                       .increment = 1
                                },
                                .digest_size = {
                                        .min = 64,
                                        .max = 64,
                                        .increment = 0
                                },
-                               .aad_size = { 0 }
+                               .iv_size = { 0 }
+                       }, }
+               }, }
+       },
+       {       /* AES GCM */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
+                       {.aead = {
+                               .algo = RTE_CRYPTO_AEAD_AES_GCM,
+                               .block_size = 16,
+                               .key_size = {
+                                       .min = 16,
+                                       .max = 32,
+                                       .increment = 8
+                               },
+                               .digest_size = {
+                                       .min = 8,
+                                       .max = 16,
+                                       .increment = 4
+                               },
+                               .aad_size = {
+                                       .min = 0,
+                                       .max = 240,
+                                       .increment = 1
+                               },
+                               .iv_size = {
+                                       .min = 12,
+                                       .max = 12,
+                                       .increment = 0
+                               },
                        }, }
                }, }
        },
@@ -342,6 +368,26 @@ static const struct rte_cryptodev_capabilities dpaa2_sec_capabilities[] = {
                        }, }
                }, }
        },
+       {       /* AES CTR */
+               .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
+               {.sym = {
+                       .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
+                       {.cipher = {
+                               .algo = RTE_CRYPTO_CIPHER_AES_CTR,
+                               .block_size = 16,
+                               .key_size = {
+                                       .min = 16,
+                                       .max = 32,
+                                       .increment = 8
+                               },
+                               .iv_size = {
+                                       .min = 16,
+                                       .max = 16,
+                                       .increment = 0
+                               },
+                       }, }
+               }, }
+       },
        {       /* 3DES CBC */
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {