net/sfc: check mbufs allocated using mempool API for Rx
[dpdk.git] / drivers / crypto / dpaa_sec / dpaa_sec.h
index 93369e4..f4b8784 100644 (file)
@@ -7,8 +7,11 @@
 #ifndef _DPAA_SEC_H_
 #define _DPAA_SEC_H_
 
+#define CRYPTODEV_NAME_DPAA_SEC_PMD    crypto_dpaa_sec
+/**< NXP DPAA - SEC PMD device name */
+
 #define NUM_POOL_CHANNELS      4
-#define DPAA_SEC_BURST         32
+#define DPAA_SEC_BURST         7
 #define DPAA_SEC_ALG_UNSUPPORT (-1)
 #define TDES_CBC_IV_LEN                8
 #define AES_CBC_IV_LEN         16
@@ -23,6 +26,7 @@
 #define CTX_POOL_NUM_BUFS      32000
 #define CTX_POOL_BUF_SIZE      sizeof(struct dpaa_sec_op_ctx)
 #define CTX_POOL_CACHE_SIZE    512
+#define RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS 2048
 
 #define DIR_ENC                 1
 #define DIR_DEC                 0
@@ -91,7 +95,8 @@ typedef struct dpaa_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*/
-       enum rte_crypto_aead_algorithm aead_alg; /*!< Authentication Algorithm*/
+       enum rte_crypto_aead_algorithm aead_alg; /*!< AEAD Algorithm*/
+       enum rte_security_session_protocol proto_alg; /*!< Security Algorithm*/
        union {
                struct {
                        uint8_t *data;  /**< pointer to key data */
@@ -114,6 +119,9 @@ typedef struct dpaa_sec_session_entry {
        } iv;   /**< Initialisation vector parameters */
        uint16_t auth_only_len; /*!< Length of data for Auth only */
        uint32_t digest_length;
+       struct ipsec_encap_pdb encap_pdb;
+       struct ip ip4_hdr;
+       struct ipsec_decap_pdb decap_pdb;
        struct dpaa_sec_qp *qp;
        struct qman_fq *inq;
        struct sec_cdb cdb;     /**< cmd block associated with qp */
@@ -129,8 +137,9 @@ struct dpaa_sec_qp {
        int tx_errs;
 };
 
-#define RTE_DPAA_MAX_NB_SEC_QPS 1
+#define RTE_DPAA_MAX_NB_SEC_QPS 2
 #define RTE_DPAA_MAX_RX_QUEUE RTE_DPAA_SEC_PMD_MAX_NB_SESSIONS
+#define DPAA_MAX_DEQUEUE_NUM_FRAMES 63
 
 /* internal sec queue interface */
 struct dpaa_sec_dev_private {
@@ -141,6 +150,7 @@ struct dpaa_sec_dev_private {
        unsigned char inq_attach[RTE_DPAA_MAX_RX_QUEUE];
        unsigned int max_nb_queue_pairs;
        unsigned int max_nb_sessions;
+       rte_spinlock_t lock;
 };
 
 #define MAX_SG_ENTRIES         16
@@ -177,10 +187,11 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                                        .increment = 1
                                },
                                .digest_size = {
-                                       .min = 16,
+                                       .min = 1,
                                        .max = 16,
-                                       .increment = 0
+                                       .increment = 1
                                },
+                               .iv_size = { 0 }
                        }, }
                }, }
        },
@@ -197,10 +208,11 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                                        .increment = 1
                                },
                                .digest_size = {
-                                       .min = 20,
+                                       .min = 1,
                                        .max = 20,
-                                       .increment = 0
+                                       .increment = 1
                                },
+                               .iv_size = { 0 }
                        }, }
                }, }
        },
@@ -217,10 +229,11 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                                        .increment = 1
                                },
                                .digest_size = {
-                                       .min = 28,
+                                       .min = 1,
                                        .max = 28,
-                                       .increment = 0
+                                       .increment = 1
                                },
+                               .iv_size = { 0 }
                        }, }
                }, }
        },
@@ -237,10 +250,11 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                                        .increment = 1
                                },
                                .digest_size = {
-                                       .min = 32,
+                                       .min = 1,
                                        .max = 32,
-                                       .increment = 0
+                                       .increment = 1
                                },
+                               .iv_size = { 0 }
                        }, }
                }, }
        },
@@ -257,10 +271,11 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                                        .increment = 1
                                },
                                .digest_size = {
-                                       .min = 48,
+                                       .min = 1,
                                        .max = 48,
-                                       .increment = 0
+                                       .increment = 1
                                },
+                               .iv_size = { 0 }
                        }, }
                }, }
        },
@@ -277,10 +292,11 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                                        .increment = 1
                                },
                                .digest_size = {
-                                       .min = 64,
+                                       .min = 1,
                                        .max = 64,
-                                       .increment = 0
+                                       .increment = 1
                                },
+                               .iv_size = { 0 }
                        }, }
                }, }
        },
@@ -288,7 +304,7 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
                .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
                {.sym = {
                        .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
-                       {.auth = {
+                       {.aead = {
                                .algo = RTE_CRYPTO_AEAD_AES_GCM,
                                .block_size = 16,
                                .key_size = {
@@ -378,4 +394,60 @@ static const struct rte_cryptodev_capabilities dpaa_sec_capabilities[] = {
        RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
 };
 
+static const struct rte_security_capability dpaa_sec_security_cap[] = {
+       { /* IPsec Lookaside Protocol offload ESP Transport Egress */
+               .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
+               .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
+               .ipsec = {
+                       .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
+                       .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
+                       .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
+                       .options = { 0 }
+               },
+               .crypto_capabilities = dpaa_sec_capabilities
+       },
+       { /* IPsec Lookaside Protocol offload ESP Tunnel Ingress */
+               .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
+               .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
+               .ipsec = {
+                       .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
+                       .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
+                       .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
+                       .options = { 0 }
+               },
+               .crypto_capabilities = dpaa_sec_capabilities
+       },
+       {
+               .action = RTE_SECURITY_ACTION_TYPE_NONE
+       }
+};
+
+/**
+ * Checksum
+ *
+ * @param buffer calculate chksum for buffer
+ * @param len    buffer length
+ *
+ * @return checksum value in host cpu order
+ */
+static inline uint16_t
+calc_chksum(void *buffer, int len)
+{
+       uint16_t *buf = (uint16_t *)buffer;
+       uint32_t sum = 0;
+       uint16_t result;
+
+       for (sum = 0; len > 1; len -= 2)
+               sum += *buf++;
+
+       if (len == 1)
+               sum += *(unsigned char *)buf;
+
+       sum = (sum >> 16) + (sum & 0xFFFF);
+       sum += (sum >> 16);
+       result = ~sum;
+
+       return  result;
+}
+
 #endif /* _DPAA_SEC_H_ */