crypto/armv8: remove redundant assert definition
[dpdk.git] / drivers / crypto / armv8 / armv8_pmd_private.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Cavium, Inc
3  */
4
5 #ifndef _ARMV8_PMD_PRIVATE_H_
6 #define _ARMV8_PMD_PRIVATE_H_
7
8 #include "AArch64cryptolib.h"
9
10 #define CRYPTODEV_NAME_ARMV8_PMD        crypto_armv8
11 /**< ARMv8 Crypto PMD device name */
12
13 extern int crypto_armv8_log_type;
14
15 #define ARMV8_CRYPTO_LOG_ERR(fmt, args...)                      \
16         rte_log(RTE_LOG_ERR, crypto_armv8_log_type,             \
17                         "[%s] %s() line %u: " fmt "\n",         \
18                         RTE_STR(CRYPTODEV_NAME_ARMV8_PMD),      \
19                         __func__, __LINE__, ## args)
20
21 #define ARMV8_CRYPTO_LOG_INFO(fmt, args...)                     \
22         rte_log(RTE_LOG_INFO, crypto_armv8_log_type,            \
23                         "[%s] %s() line %u: " fmt "\n",         \
24                         RTE_STR(CRYPTODEV_NAME_ARMV8_PMD),      \
25                         __func__, __LINE__, ## args)
26
27 #define ARMV8_CRYPTO_LOG_DBG(fmt, args...)                      \
28         rte_log(RTE_LOG_DEBUG, crypto_armv8_log_type,           \
29                         "[%s] %s() line %u: " fmt "\n",         \
30                         RTE_STR(CRYPTODEV_NAME_ARMV8_PMD),      \
31                         __func__, __LINE__, ## args)
32
33 #define NBBY            8               /* Number of bits in a byte */
34 #define BYTE_LENGTH(x)  ((x) / NBBY)    /* Number of bytes in x (round down) */
35
36 /* Maximum length for digest (SHA-256 needs 32 bytes) */
37 #define DIGEST_LENGTH_MAX 32
38
39 /** ARMv8 operation order mode enumerator */
40 enum armv8_crypto_chain_order {
41         ARMV8_CRYPTO_CHAIN_CIPHER_AUTH,
42         ARMV8_CRYPTO_CHAIN_AUTH_CIPHER,
43         ARMV8_CRYPTO_CHAIN_NOT_SUPPORTED,
44         ARMV8_CRYPTO_CHAIN_LIST_END = ARMV8_CRYPTO_CHAIN_NOT_SUPPORTED
45 };
46
47 /** ARMv8 cipher operation enumerator */
48 enum armv8_crypto_cipher_operation {
49         ARMV8_CRYPTO_CIPHER_OP_ENCRYPT = RTE_CRYPTO_CIPHER_OP_ENCRYPT,
50         ARMV8_CRYPTO_CIPHER_OP_DECRYPT = RTE_CRYPTO_CIPHER_OP_DECRYPT,
51         ARMV8_CRYPTO_CIPHER_OP_NOT_SUPPORTED,
52         ARMV8_CRYPTO_CIPHER_OP_LIST_END = ARMV8_CRYPTO_CIPHER_OP_NOT_SUPPORTED
53 };
54
55 enum armv8_crypto_cipher_keylen {
56         ARMV8_CRYPTO_CIPHER_KEYLEN_128,
57         ARMV8_CRYPTO_CIPHER_KEYLEN_192,
58         ARMV8_CRYPTO_CIPHER_KEYLEN_256,
59         ARMV8_CRYPTO_CIPHER_KEYLEN_NOT_SUPPORTED,
60         ARMV8_CRYPTO_CIPHER_KEYLEN_LIST_END =
61                 ARMV8_CRYPTO_CIPHER_KEYLEN_NOT_SUPPORTED
62 };
63
64 /** ARMv8 auth mode enumerator */
65 enum armv8_crypto_auth_mode {
66         ARMV8_CRYPTO_AUTH_AS_AUTH,
67         ARMV8_CRYPTO_AUTH_AS_HMAC,
68         ARMV8_CRYPTO_AUTH_AS_CIPHER,
69         ARMV8_CRYPTO_AUTH_NOT_SUPPORTED,
70         ARMV8_CRYPTO_AUTH_LIST_END = ARMV8_CRYPTO_AUTH_NOT_SUPPORTED
71 };
72
73 #define CRYPTO_ORDER_MAX                ARMV8_CRYPTO_CHAIN_LIST_END
74 #define CRYPTO_CIPHER_OP_MAX            ARMV8_CRYPTO_CIPHER_OP_LIST_END
75 #define CRYPTO_CIPHER_KEYLEN_MAX        ARMV8_CRYPTO_CIPHER_KEYLEN_LIST_END
76 #define CRYPTO_CIPHER_MAX               RTE_CRYPTO_CIPHER_LIST_END
77 #define CRYPTO_AUTH_MAX                 RTE_CRYPTO_AUTH_LIST_END
78
79 #define HMAC_IPAD_VALUE                 (0x36)
80 #define HMAC_OPAD_VALUE                 (0x5C)
81
82 #define SHA256_AUTH_KEY_LENGTH          (BYTE_LENGTH(256))
83 #define SHA256_BLOCK_SIZE               (BYTE_LENGTH(512))
84
85 #define SHA1_AUTH_KEY_LENGTH            (BYTE_LENGTH(160))
86 #define SHA1_BLOCK_SIZE                 (BYTE_LENGTH(512))
87
88 #define SHA_AUTH_KEY_MAX                SHA256_AUTH_KEY_LENGTH
89 #define SHA_BLOCK_MAX                   SHA256_BLOCK_SIZE
90
91 typedef int (*crypto_func_t)(uint8_t *, uint8_t *, uint64_t,
92                                 uint8_t *, uint8_t *, uint64_t,
93                                 armv8_cipher_digest_t *);
94
95 typedef void (*crypto_key_sched_t)(uint8_t *, const uint8_t *);
96
97 /** private data structure for each ARMv8 crypto device */
98 struct armv8_crypto_private {
99         unsigned int max_nb_qpairs;
100         /**< Max number of queue pairs */
101 };
102
103 /** ARMv8 crypto queue pair */
104 struct armv8_crypto_qp {
105         uint16_t id;
106         /**< Queue Pair Identifier */
107         struct rte_ring *processed_ops;
108         /**< Ring for placing process packets */
109         struct rte_mempool *sess_mp;
110         /**< Session Mempool */
111         struct rte_mempool *sess_mp_priv;
112        /**< Session Private Data Mempool */
113         struct rte_cryptodev_stats stats;
114         /**< Queue pair statistics */
115         char name[RTE_CRYPTODEV_NAME_MAX_LEN];
116         /**< Unique Queue Pair Name */
117         uint8_t temp_digest[DIGEST_LENGTH_MAX];
118         /**< Buffer used to store the digest generated
119          * by the driver when verifying a digest provided
120          * by the user (using authentication verify operation)
121          */
122 } __rte_cache_aligned;
123
124 /** ARMv8 crypto private session structure */
125 struct armv8_crypto_session {
126         enum armv8_crypto_chain_order chain_order;
127         /**< chain order mode */
128         crypto_func_t crypto_func;
129         /**< cryptographic function to use for this session */
130
131         /** Cipher Parameters */
132         struct {
133                 enum rte_crypto_cipher_operation direction;
134                 /**< cipher operation direction */
135                 enum rte_crypto_cipher_algorithm algo;
136                 /**< cipher algorithm */
137                 struct {
138                         uint16_t length;
139                         uint16_t offset;
140                 } iv;
141                 /**< IV parameters */
142
143                 struct {
144                         uint8_t data[256];
145                         /**< key data */
146                         size_t length;
147                         /**< key length in bytes */
148                 } key;
149
150                 crypto_key_sched_t key_sched;
151                 /**< Key schedule function */
152         } cipher;
153
154         /** Authentication Parameters */
155         struct {
156                 enum rte_crypto_auth_operation operation;
157                 /**< auth operation generate or verify */
158                 enum armv8_crypto_auth_mode mode;
159                 /**< auth operation mode */
160
161                 union {
162                         struct {
163                                 /* Add data if needed */
164                         } auth;
165
166                         struct {
167                                 uint8_t i_key_pad[SHA_BLOCK_MAX]
168                                                         __rte_cache_aligned;
169                                 /**< inner pad (max supported block length) */
170                                 uint8_t o_key_pad[SHA_BLOCK_MAX]
171                                                         __rte_cache_aligned;
172                                 /**< outer pad (max supported block length) */
173                                 uint8_t key[SHA_BLOCK_MAX];
174                                 /**< HMAC key (max supported block length)*/
175                         } hmac;
176                 };
177                 uint16_t digest_length;
178                 /* Digest length */
179         } auth;
180
181 } __rte_cache_aligned;
182
183 /** Set and validate ARMv8 crypto session parameters */
184 extern int armv8_crypto_set_session_parameters(
185                 struct armv8_crypto_session *sess,
186                 const struct rte_crypto_sym_xform *xform);
187
188 /** device specific operations function pointer structure */
189 extern struct rte_cryptodev_ops *rte_armv8_crypto_pmd_ops;
190
191 #endif /* _ARMV8_PMD_PRIVATE_H_ */