1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2017-2018 Chelsio Communications, Inc.
5 * All rights reserved.
6 * Written by: John Baldwin <jhb@FreeBSD.org>, Atul Gupta
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * $FreeBSD$
30 *
31 */
32
33#ifndef __T4_TLS_H__
34#define __T4_TLS_H__
35
36#define TLS1_VERSION                    0x0301
37#define TLS1_1_VERSION                  0x0302
38#define TLS1_2_VERSION                  0x0303
39#define TLS_MAX_VERSION                 TLS1_2_VERSION
40
41#define DTLS1_VERSION                   0xFEFF
42#define DTLS1_2_VERSION                 0xFEFD
43#define DTLS_MAX_VERSION                DTLS1_2_VERSION
44#define DTLS1_VERSION_MAJOR             0xFE
45
46/* Custom socket options for TLS+TOE. */
47
48#define MAX_MAC_KSZ		64	/*512 bits */
49#define MAX_CIPHER_KSZ		32	/* 256 bits */
50#define CIPHER_BLOCK_SZ		16
51#define SALT_SIZE		4
52
53/* Can accomodate 16, 11-15 are reserved */
54enum {
55    CHSSL_SHA_NOP,
56    CHSSL_SHA1,
57    CHSSL_SHA224,
58    CHSSL_SHA256,
59    CHSSL_GHASH,
60    CHSSL_SHA512_224,
61    CHSSL_SHA512_256,
62    CHSSL_SHA512_384,
63    CHSSL_SHA512_512,
64    CHSSL_CBCMAC,
65    CHSSL_CMAC,
66};
67
68/* Can accomodate 16, 8-15 are reserved */
69enum {
70    CHSSL_CIPH_NOP,
71    CHSSL_AES_CBC,
72    CHSSL_AES_GCM,
73    CHSSL_AES_CTR,
74    CHSSL_AES_GEN,
75    CHSSL_IPSEC_ESP,
76    CHSSL_AES_XTS,
77    CHSSL_AES_CCM,
78};
79
80/* Key Context Programming Operation type */
81#define KEY_WRITE_RX			0x1
82#define KEY_WRITE_TX			0x2
83#define KEY_DELETE_RX			0x4
84#define KEY_DELETE_TX			0x8
85
86#define S_KEY_CLR_LOC		4
87#define M_KEY_CLR_LOC		0xf
88#define V_KEY_CLR_LOC(x)	((x) << S_KEY_CLR_LOC)
89#define G_KEY_CLR_LOC(x)	(((x) >> S_KEY_CLR_LOC) & M_KEY_CLR_LOC)
90#define F_KEY_CLR_LOC		V_KEY_CLR_LOC(1U)
91
92#define S_KEY_GET_LOC           0
93#define M_KEY_GET_LOC           0xf
94#define V_KEY_GET_LOC(x)        ((x) << S_KEY_GET_LOC)
95#define G_KEY_GET_LOC(x)        (((x) >> S_KEY_GET_LOC) & M_KEY_GET_LOC)
96
97struct tls_ofld_state {
98    unsigned char enc_mode;
99    unsigned char mac_mode;
100    unsigned char key_loc;
101    unsigned char ofld_mode;
102    unsigned char auth_mode;
103    unsigned char resv[3];
104};
105
106struct tls_tx_ctxt {
107    unsigned char   salt[SALT_SIZE];
108    unsigned char key[MAX_CIPHER_KSZ];
109    unsigned char ipad[MAX_MAC_KSZ];
110    unsigned char opad[MAX_MAC_KSZ];
111};
112
113struct tls_rx_ctxt {
114    unsigned char   salt[SALT_SIZE];
115    unsigned char key[MAX_CIPHER_KSZ];
116    unsigned char ipad[MAX_MAC_KSZ];
117    unsigned char opad[MAX_MAC_KSZ];
118};
119
120struct tls_key_context {
121    struct tls_tx_ctxt tx;
122    struct tls_rx_ctxt rx;
123
124    unsigned char l_p_key;
125    unsigned char hmac_ctrl;
126    unsigned char mac_first;
127    unsigned char iv_size;
128    unsigned char iv_ctrl;
129    unsigned char iv_algo;
130    unsigned char tx_seq_no;
131    unsigned char rx_seq_no;
132
133    struct tls_ofld_state state;
134
135    unsigned int tx_key_info_size;
136    unsigned int rx_key_info_size;
137    unsigned int frag_size;
138    unsigned int mac_secret_size;
139    unsigned int cipher_secret_size;
140    int proto_ver;
141    unsigned int sock_fd;
142    unsigned short dtls_epoch;
143    unsigned short rsv;
144};
145
146/* Set with 'struct tls_key_context'. */
147#define	TCP_TLSOM_SET_TLS_CONTEXT	(TCP_VENDOR)
148
149/* Get returns int of enabled (1) / disabled (0). */
150#define	TCP_TLSOM_GET_TLS_TOM		(TCP_VENDOR + 1)
151
152enum {
153	TLS_TOM_NONE = 0,
154	TLS_TOM_TXONLY,
155	TLS_TOM_BOTH
156};
157
158/* Set with no value. */
159#define	TCP_TLSOM_CLR_TLS_TOM		(TCP_VENDOR + 2)
160
161/* Set with no value. */
162#define	TCP_TLSOM_CLR_QUIES		(TCP_VENDOR + 3)
163
164#ifdef _KERNEL
165/* Timeouts for handshake timer in seconds. */
166#define TLS_SRV_HELLO_DONE		9
167#define TLS_SRV_HELLO_RD_TM		5
168#define TLS_SRV_HELLO_BKOFF_TM		15
169
170#define CONTENT_TYPE_CCS		20
171#define CONTENT_TYPE_ALERT		21
172#define CONTENT_TYPE_HANDSHAKE		22
173#define CONTENT_TYPE_APP_DATA		23
174#define CONTENT_TYPE_HEARTBEAT		24
175#define CONTENT_TYPE_KEY_CONTEXT	32
176#define CONTENT_TYPE_ERROR		127
177
178#define GCM_TAG_SIZE			16
179#define AEAD_EXPLICIT_DATA_SIZE		8
180#define TLS_HEADER_LENGTH		5
181#define TP_TX_PG_SZ			65536
182#define FC_TP_PLEN_MAX			17408
183
184#define IPAD_SIZE			64
185#define OPAD_SIZE			64
186#define KEY_SIZE			32
187#define CIPHER_BLOCK_SIZE		16
188#define HDR_KCTX_SIZE   (IPAD_SIZE + OPAD_SIZE + KEY_SIZE)
189
190#define KEY_IN_DDR_SIZE			16
191#define	TLS_KEY_CONTEXT_SZ	roundup2(sizeof(struct tls_tx_ctxt), 32)
192
193/* MAC KEY SIZE */
194#define SHA_NOP				0
195#define SHA_GHASH			16
196#define SHA_224				28
197#define SHA_256				32
198#define SHA_384				48
199#define SHA_512				64
200#define SHA1				20
201
202/* CIPHER KEY SIZE */
203#define AES_NOP				0
204#define AES_128				16
205#define AES_192				24
206#define AES_256				32
207
208enum {
209	TLS_1_2_VERSION,
210	TLS_1_1_VERSION,
211	DTLS_1_2_VERSION,
212	TLS_VERSION_MAX,
213};
214
215enum {
216	CH_EVP_CIPH_STREAM_CIPHER,
217	CH_EVP_CIPH_CBC_MODE,
218	CH_EVP_CIPH_GCM_MODE,
219	CH_EVP_CIPH_CTR_MODE,
220};
221
222enum {
223	TLS_SFO_WR_CONTEXTLOC_DSGL,
224	TLS_SFO_WR_CONTEXTLOC_IMMEDIATE,
225	TLS_SFO_WR_CONTEXTLOC_DDR,
226};
227
228enum {
229	CPL_TX_TLS_SFO_TYPE_CCS,
230	CPL_TX_TLS_SFO_TYPE_ALERT,
231	CPL_TX_TLS_SFO_TYPE_HANDSHAKE,
232	CPL_TX_TLS_SFO_TYPE_DATA,
233	CPL_TX_TLS_SFO_TYPE_HEARTBEAT,	/* XXX: Shouldn't this be "CUSTOM"? */
234};
235
236enum {
237	CH_CK_SIZE_128,
238	CH_CK_SIZE_192,
239	CH_CK_SIZE_256,
240	CH_CK_SIZE_NOP,
241};
242
243enum {
244	CH_MK_SIZE_128,
245	CH_MK_SIZE_160,
246	CH_MK_SIZE_192,
247	CH_MK_SIZE_256,
248	CH_MK_SIZE_512,
249	CH_MK_SIZE_NOP,
250};
251
252struct tls_scmd {
253	__be32 seqno_numivs;
254	__be32 ivgen_hdrlen;
255};
256
257struct tls_ofld_info {
258	struct tls_key_context k_ctx;
259	int key_location;
260	int mac_length;
261	int rx_key_addr;
262	int tx_key_addr;
263	uint64_t tx_seq_no;
264	unsigned short fcplenmax;
265	unsigned short adjusted_plen;
266	unsigned short expn_per_ulp;
267	unsigned short pdus_per_ulp;
268	struct tls_scmd scmd0;
269	u_int sb_off;
270	struct callout handshake_timer;
271};
272
273struct tls_key_req {
274	__be32 wr_hi;
275	__be32 wr_mid;
276        __be32 ftid;
277        __u8   reneg_to_write_rx;
278        __u8   protocol;
279        __be16 mfs;
280	/* master command */
281	__be32 cmd;
282	__be32 len16;             /* command length */
283	__be32 dlen;              /* data length in 32-byte units */
284	__be32 kaddr;
285	/* sub-command */
286	__be32 sc_more;
287	__be32 sc_len;
288}__packed;
289
290struct tls_keyctx {
291        union key_ctx {
292                struct tx_keyctx_hdr {
293                        __u8   ctxlen;
294                        __u8   r2;
295                        __be16 dualck_to_txvalid;
296                        __u8   txsalt[4];
297                        __be64 r5;
298                } txhdr;
299                struct rx_keyctx_hdr {
300                        __u8   flitcnt_hmacctrl;
301                        __u8   protover_ciphmode;
302                        __u8   authmode_to_rxvalid;
303                        __u8   ivpresent_to_rxmk_size;
304                        __u8   rxsalt[4];
305                        __be64 ivinsert_to_authinsrt;
306                } rxhdr;
307        } u;
308        struct keys {
309                __u8   edkey[32];
310                __u8   ipad[64];
311                __u8   opad[64];
312        } keys;
313};
314
315#define S_TLS_KEYCTX_TX_WR_DUALCK    12
316#define M_TLS_KEYCTX_TX_WR_DUALCK    0x1
317#define V_TLS_KEYCTX_TX_WR_DUALCK(x) ((x) << S_TLS_KEYCTX_TX_WR_DUALCK)
318#define G_TLS_KEYCTX_TX_WR_DUALCK(x) \
319    (((x) >> S_TLS_KEYCTX_TX_WR_DUALCK) & M_TLS_KEYCTX_TX_WR_DUALCK)
320#define F_TLS_KEYCTX_TX_WR_DUALCK    V_TLS_KEYCTX_TX_WR_DUALCK(1U)
321
322#define S_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT 11
323#define M_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT 0x1
324#define V_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT(x) \
325    ((x) << S_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT)
326#define G_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT(x) \
327    (((x) >> S_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT) & \
328     M_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT)
329#define F_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT \
330    V_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT(1U)
331
332#define S_TLS_KEYCTX_TX_WR_SALT_PRESENT 10
333#define M_TLS_KEYCTX_TX_WR_SALT_PRESENT 0x1
334#define V_TLS_KEYCTX_TX_WR_SALT_PRESENT(x) \
335    ((x) << S_TLS_KEYCTX_TX_WR_SALT_PRESENT)
336#define G_TLS_KEYCTX_TX_WR_SALT_PRESENT(x) \
337    (((x) >> S_TLS_KEYCTX_TX_WR_SALT_PRESENT) & \
338     M_TLS_KEYCTX_TX_WR_SALT_PRESENT)
339#define F_TLS_KEYCTX_TX_WR_SALT_PRESENT \
340    V_TLS_KEYCTX_TX_WR_SALT_PRESENT(1U)
341
342#define S_TLS_KEYCTX_TX_WR_TXCK_SIZE 6
343#define M_TLS_KEYCTX_TX_WR_TXCK_SIZE 0xf
344#define V_TLS_KEYCTX_TX_WR_TXCK_SIZE(x) \
345    ((x) << S_TLS_KEYCTX_TX_WR_TXCK_SIZE)
346#define G_TLS_KEYCTX_TX_WR_TXCK_SIZE(x) \
347    (((x) >> S_TLS_KEYCTX_TX_WR_TXCK_SIZE) & \
348     M_TLS_KEYCTX_TX_WR_TXCK_SIZE)
349
350#define S_TLS_KEYCTX_TX_WR_TXMK_SIZE 2
351#define M_TLS_KEYCTX_TX_WR_TXMK_SIZE 0xf
352#define V_TLS_KEYCTX_TX_WR_TXMK_SIZE(x) \
353    ((x) << S_TLS_KEYCTX_TX_WR_TXMK_SIZE)
354#define G_TLS_KEYCTX_TX_WR_TXMK_SIZE(x) \
355    (((x) >> S_TLS_KEYCTX_TX_WR_TXMK_SIZE) & \
356     M_TLS_KEYCTX_TX_WR_TXMK_SIZE)
357
358#define S_TLS_KEYCTX_TX_WR_TXVALID   0
359#define M_TLS_KEYCTX_TX_WR_TXVALID   0x1
360#define V_TLS_KEYCTX_TX_WR_TXVALID(x) \
361    ((x) << S_TLS_KEYCTX_TX_WR_TXVALID)
362#define G_TLS_KEYCTX_TX_WR_TXVALID(x) \
363    (((x) >> S_TLS_KEYCTX_TX_WR_TXVALID) & M_TLS_KEYCTX_TX_WR_TXVALID)
364#define F_TLS_KEYCTX_TX_WR_TXVALID   V_TLS_KEYCTX_TX_WR_TXVALID(1U)
365
366#define S_TLS_KEYCTX_TX_WR_FLITCNT   3
367#define M_TLS_KEYCTX_TX_WR_FLITCNT   0x1f
368#define V_TLS_KEYCTX_TX_WR_FLITCNT(x) \
369    ((x) << S_TLS_KEYCTX_TX_WR_FLITCNT)
370#define G_TLS_KEYCTX_TX_WR_FLITCNT(x) \
371    (((x) >> S_TLS_KEYCTX_TX_WR_FLITCNT) & M_TLS_KEYCTX_TX_WR_FLITCNT)
372
373#define S_TLS_KEYCTX_TX_WR_HMACCTRL  0
374#define M_TLS_KEYCTX_TX_WR_HMACCTRL  0x7
375#define V_TLS_KEYCTX_TX_WR_HMACCTRL(x) \
376    ((x) << S_TLS_KEYCTX_TX_WR_HMACCTRL)
377#define G_TLS_KEYCTX_TX_WR_HMACCTRL(x) \
378    (((x) >> S_TLS_KEYCTX_TX_WR_HMACCTRL) & M_TLS_KEYCTX_TX_WR_HMACCTRL)
379
380#define S_TLS_KEYCTX_TX_WR_PROTOVER  4
381#define M_TLS_KEYCTX_TX_WR_PROTOVER  0xf
382#define V_TLS_KEYCTX_TX_WR_PROTOVER(x) \
383    ((x) << S_TLS_KEYCTX_TX_WR_PROTOVER)
384#define G_TLS_KEYCTX_TX_WR_PROTOVER(x) \
385    (((x) >> S_TLS_KEYCTX_TX_WR_PROTOVER) & M_TLS_KEYCTX_TX_WR_PROTOVER)
386
387#define S_TLS_KEYCTX_TX_WR_CIPHMODE  0
388#define M_TLS_KEYCTX_TX_WR_CIPHMODE  0xf
389#define V_TLS_KEYCTX_TX_WR_CIPHMODE(x) \
390    ((x) << S_TLS_KEYCTX_TX_WR_CIPHMODE)
391#define G_TLS_KEYCTX_TX_WR_CIPHMODE(x) \
392    (((x) >> S_TLS_KEYCTX_TX_WR_CIPHMODE) & M_TLS_KEYCTX_TX_WR_CIPHMODE)
393
394#define S_TLS_KEYCTX_TX_WR_AUTHMODE  4
395#define M_TLS_KEYCTX_TX_WR_AUTHMODE  0xf
396#define V_TLS_KEYCTX_TX_WR_AUTHMODE(x) \
397    ((x) << S_TLS_KEYCTX_TX_WR_AUTHMODE)
398#define G_TLS_KEYCTX_TX_WR_AUTHMODE(x) \
399    (((x) >> S_TLS_KEYCTX_TX_WR_AUTHMODE) & M_TLS_KEYCTX_TX_WR_AUTHMODE)
400
401#define S_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL 3
402#define M_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL 0x1
403#define V_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL(x) \
404    ((x) << S_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL)
405#define G_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL(x) \
406    (((x) >> S_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL) & \
407     M_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL)
408#define F_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL \
409    V_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL(1U)
410
411#define S_TLS_KEYCTX_TX_WR_SEQNUMCTRL 1
412#define M_TLS_KEYCTX_TX_WR_SEQNUMCTRL 0x3
413#define V_TLS_KEYCTX_TX_WR_SEQNUMCTRL(x) \
414    ((x) << S_TLS_KEYCTX_TX_WR_SEQNUMCTRL)
415#define G_TLS_KEYCTX_TX_WR_SEQNUMCTRL(x) \
416    (((x) >> S_TLS_KEYCTX_TX_WR_SEQNUMCTRL) & \
417     M_TLS_KEYCTX_TX_WR_SEQNUMCTRL)
418
419#define S_TLS_KEYCTX_TX_WR_RXVALID   0
420#define M_TLS_KEYCTX_TX_WR_RXVALID   0x1
421#define V_TLS_KEYCTX_TX_WR_RXVALID(x) \
422    ((x) << S_TLS_KEYCTX_TX_WR_RXVALID)
423#define G_TLS_KEYCTX_TX_WR_RXVALID(x) \
424    (((x) >> S_TLS_KEYCTX_TX_WR_RXVALID) & M_TLS_KEYCTX_TX_WR_RXVALID)
425#define F_TLS_KEYCTX_TX_WR_RXVALID   V_TLS_KEYCTX_TX_WR_RXVALID(1U)
426
427#define S_TLS_KEYCTX_TX_WR_IVPRESENT 7
428#define M_TLS_KEYCTX_TX_WR_IVPRESENT 0x1
429#define V_TLS_KEYCTX_TX_WR_IVPRESENT(x) \
430    ((x) << S_TLS_KEYCTX_TX_WR_IVPRESENT)
431#define G_TLS_KEYCTX_TX_WR_IVPRESENT(x) \
432    (((x) >> S_TLS_KEYCTX_TX_WR_IVPRESENT) & \
433     M_TLS_KEYCTX_TX_WR_IVPRESENT)
434#define F_TLS_KEYCTX_TX_WR_IVPRESENT V_TLS_KEYCTX_TX_WR_IVPRESENT(1U)
435
436#define S_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT 6
437#define M_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT 0x1
438#define V_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT(x) \
439    ((x) << S_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT)
440#define G_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT(x) \
441    (((x) >> S_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT) & \
442     M_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT)
443#define F_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT \
444    V_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT(1U)
445
446#define S_TLS_KEYCTX_TX_WR_RXCK_SIZE 3
447#define M_TLS_KEYCTX_TX_WR_RXCK_SIZE 0x7
448#define V_TLS_KEYCTX_TX_WR_RXCK_SIZE(x) \
449    ((x) << S_TLS_KEYCTX_TX_WR_RXCK_SIZE)
450#define G_TLS_KEYCTX_TX_WR_RXCK_SIZE(x) \
451    (((x) >> S_TLS_KEYCTX_TX_WR_RXCK_SIZE) & \
452     M_TLS_KEYCTX_TX_WR_RXCK_SIZE)
453
454#define S_TLS_KEYCTX_TX_WR_RXMK_SIZE 0
455#define M_TLS_KEYCTX_TX_WR_RXMK_SIZE 0x7
456#define V_TLS_KEYCTX_TX_WR_RXMK_SIZE(x) \
457    ((x) << S_TLS_KEYCTX_TX_WR_RXMK_SIZE)
458#define G_TLS_KEYCTX_TX_WR_RXMK_SIZE(x) \
459    (((x) >> S_TLS_KEYCTX_TX_WR_RXMK_SIZE) & \
460     M_TLS_KEYCTX_TX_WR_RXMK_SIZE)
461
462#define S_TLS_KEYCTX_TX_WR_IVINSERT  55
463#define M_TLS_KEYCTX_TX_WR_IVINSERT  0x1ffULL
464#define V_TLS_KEYCTX_TX_WR_IVINSERT(x) \
465    ((x) << S_TLS_KEYCTX_TX_WR_IVINSERT)
466#define G_TLS_KEYCTX_TX_WR_IVINSERT(x) \
467    (((x) >> S_TLS_KEYCTX_TX_WR_IVINSERT) & M_TLS_KEYCTX_TX_WR_IVINSERT)
468
469#define S_TLS_KEYCTX_TX_WR_AADSTRTOFST 47
470#define M_TLS_KEYCTX_TX_WR_AADSTRTOFST 0xffULL
471#define V_TLS_KEYCTX_TX_WR_AADSTRTOFST(x) \
472    ((x) << S_TLS_KEYCTX_TX_WR_AADSTRTOFST)
473#define G_TLS_KEYCTX_TX_WR_AADSTRTOFST(x) \
474    (((x) >> S_TLS_KEYCTX_TX_WR_AADSTRTOFST) & \
475     M_TLS_KEYCTX_TX_WR_AADSTRTOFST)
476
477#define S_TLS_KEYCTX_TX_WR_AADSTOPOFST 39
478#define M_TLS_KEYCTX_TX_WR_AADSTOPOFST 0xffULL
479#define V_TLS_KEYCTX_TX_WR_AADSTOPOFST(x) \
480    ((x) << S_TLS_KEYCTX_TX_WR_AADSTOPOFST)
481#define G_TLS_KEYCTX_TX_WR_AADSTOPOFST(x) \
482    (((x) >> S_TLS_KEYCTX_TX_WR_AADSTOPOFST) & \
483     M_TLS_KEYCTX_TX_WR_AADSTOPOFST)
484
485#define S_TLS_KEYCTX_TX_WR_CIPHERSRTOFST 30
486#define M_TLS_KEYCTX_TX_WR_CIPHERSRTOFST 0x1ffULL
487#define V_TLS_KEYCTX_TX_WR_CIPHERSRTOFST(x) \
488    ((x) << S_TLS_KEYCTX_TX_WR_CIPHERSRTOFST)
489#define G_TLS_KEYCTX_TX_WR_CIPHERSRTOFST(x) \
490    (((x) >> S_TLS_KEYCTX_TX_WR_CIPHERSRTOFST) & \
491     M_TLS_KEYCTX_TX_WR_CIPHERSRTOFST)
492
493#define S_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST 23
494#define M_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST 0x7f
495#define V_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST(x) \
496    ((x) << S_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST)
497#define G_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST(x) \
498    (((x) >> S_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST) & \
499     M_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST)
500
501#define S_TLS_KEYCTX_TX_WR_AUTHSRTOFST 14
502#define M_TLS_KEYCTX_TX_WR_AUTHSRTOFST 0x1ff
503#define V_TLS_KEYCTX_TX_WR_AUTHSRTOFST(x) \
504    ((x) << S_TLS_KEYCTX_TX_WR_AUTHSRTOFST)
505#define G_TLS_KEYCTX_TX_WR_AUTHSRTOFST(x) \
506    (((x) >> S_TLS_KEYCTX_TX_WR_AUTHSRTOFST) & \
507     M_TLS_KEYCTX_TX_WR_AUTHSRTOFST)
508
509#define S_TLS_KEYCTX_TX_WR_AUTHSTOPOFST 7
510#define M_TLS_KEYCTX_TX_WR_AUTHSTOPOFST 0x7f
511#define V_TLS_KEYCTX_TX_WR_AUTHSTOPOFST(x) \
512    ((x) << S_TLS_KEYCTX_TX_WR_AUTHSTOPOFST)
513#define G_TLS_KEYCTX_TX_WR_AUTHSTOPOFST(x) \
514    (((x) >> S_TLS_KEYCTX_TX_WR_AUTHSTOPOFST) & \
515     M_TLS_KEYCTX_TX_WR_AUTHSTOPOFST)
516
517#define S_TLS_KEYCTX_TX_WR_AUTHINSRT 0
518#define M_TLS_KEYCTX_TX_WR_AUTHINSRT 0x7f
519#define V_TLS_KEYCTX_TX_WR_AUTHINSRT(x) \
520    ((x) << S_TLS_KEYCTX_TX_WR_AUTHINSRT)
521#define G_TLS_KEYCTX_TX_WR_AUTHINSRT(x) \
522    (((x) >> S_TLS_KEYCTX_TX_WR_AUTHINSRT) & \
523     M_TLS_KEYCTX_TX_WR_AUTHINSRT)
524
525struct tls_hdr {
526	__u8   type;
527	__be16 version;
528	__be16 length;
529} __packed;
530
531struct tlsrx_hdr_pkt {
532	__u8   type;
533	__be16 version;
534	__be16 length;
535
536	__be64 tls_seq;
537	__be16 reserved1;
538	__u8   res_to_mac_error;
539} __packed;
540
541/* res_to_mac_error fields */
542#define S_TLSRX_HDR_PKT_INTERNAL_ERROR   4
543#define M_TLSRX_HDR_PKT_INTERNAL_ERROR   0x1
544#define V_TLSRX_HDR_PKT_INTERNAL_ERROR(x) \
545	((x) << S_TLSRX_HDR_PKT_INTERNAL_ERROR)
546#define G_TLSRX_HDR_PKT_INTERNAL_ERROR(x) \
547(((x) >> S_TLSRX_HDR_PKT_INTERNAL_ERROR) & M_TLSRX_HDR_PKT_INTERNAL_ERROR)
548#define F_TLSRX_HDR_PKT_INTERNAL_ERROR   V_TLSRX_HDR_PKT_INTERNAL_ERROR(1U)
549
550#define S_TLSRX_HDR_PKT_SPP_ERROR        3
551#define M_TLSRX_HDR_PKT_SPP_ERROR        0x1
552#define V_TLSRX_HDR_PKT_SPP_ERROR(x)     ((x) << S_TLSRX_HDR_PKT_SPP_ERROR)
553#define G_TLSRX_HDR_PKT_SPP_ERROR(x)     \
554(((x) >> S_TLSRX_HDR_PKT_SPP_ERROR) & M_TLSRX_HDR_PKT_SPP_ERROR)
555#define F_TLSRX_HDR_PKT_SPP_ERROR        V_TLSRX_HDR_PKT_SPP_ERROR(1U)
556
557#define S_TLSRX_HDR_PKT_CCDX_ERROR       2
558#define M_TLSRX_HDR_PKT_CCDX_ERROR       0x1
559#define V_TLSRX_HDR_PKT_CCDX_ERROR(x)    ((x) << S_TLSRX_HDR_PKT_CCDX_ERROR)
560#define G_TLSRX_HDR_PKT_CCDX_ERROR(x)    \
561(((x) >> S_TLSRX_HDR_PKT_CCDX_ERROR) & M_TLSRX_HDR_PKT_CCDX_ERROR)
562#define F_TLSRX_HDR_PKT_CCDX_ERROR       V_TLSRX_HDR_PKT_CCDX_ERROR(1U)
563
564#define S_TLSRX_HDR_PKT_PAD_ERROR        1
565#define M_TLSRX_HDR_PKT_PAD_ERROR        0x1
566#define V_TLSRX_HDR_PKT_PAD_ERROR(x)     ((x) << S_TLSRX_HDR_PKT_PAD_ERROR)
567#define G_TLSRX_HDR_PKT_PAD_ERROR(x)     \
568(((x) >> S_TLSRX_HDR_PKT_PAD_ERROR) & M_TLSRX_HDR_PKT_PAD_ERROR)
569#define F_TLSRX_HDR_PKT_PAD_ERROR        V_TLSRX_HDR_PKT_PAD_ERROR(1U)
570
571#define S_TLSRX_HDR_PKT_MAC_ERROR        0
572#define M_TLSRX_HDR_PKT_MAC_ERROR        0x1
573#define V_TLSRX_HDR_PKT_MAC_ERROR(x)     ((x) << S_TLSRX_HDR_PKT_MAC_ERROR)
574#define G_TLSRX_HDR_PKT_MAC_ERROR(x)     \
575(((x) >> S_TLSRX_HDR_PKT_MAC_ERROR) & M_TLSRX_HDR_PKT_MAC_ERROR)
576#define F_TLSRX_HDR_PKT_MAC_ERROR        V_TLSRX_HDR_PKT_MAC_ERROR(1U)
577
578#define M_TLSRX_HDR_PKT_ERROR		0x1F
579
580#endif /* _KERNEL */
581
582#endif /* !__T4_TLS_H__ */
583