1330884Sjhb/*-
2330884Sjhb * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3330884Sjhb *
4330884Sjhb * Copyright (c) 2017-2018 Chelsio Communications, Inc.
5330884Sjhb * All rights reserved.
6330884Sjhb * Written by: John Baldwin <jhb@FreeBSD.org>, Atul Gupta
7330884Sjhb *
8330884Sjhb * Redistribution and use in source and binary forms, with or without
9330884Sjhb * modification, are permitted provided that the following conditions
10330884Sjhb * are met:
11330884Sjhb * 1. Redistributions of source code must retain the above copyright
12330884Sjhb *    notice, this list of conditions and the following disclaimer.
13330884Sjhb * 2. Redistributions in binary form must reproduce the above copyright
14330884Sjhb *    notice, this list of conditions and the following disclaimer in the
15330884Sjhb *    documentation and/or other materials provided with the distribution.
16330884Sjhb *
17330884Sjhb * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18330884Sjhb * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19330884Sjhb * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20330884Sjhb * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21330884Sjhb * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22330884Sjhb * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23330884Sjhb * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24330884Sjhb * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25330884Sjhb * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26330884Sjhb * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27330884Sjhb * SUCH DAMAGE.
28330884Sjhb *
29330884Sjhb * $FreeBSD: stable/11/sys/dev/cxgbe/tom/t4_tls.h 345664 2019-03-28 23:43:38Z jhb $
30330884Sjhb *
31330884Sjhb */
32330884Sjhb
33330884Sjhb#ifndef __T4_TLS_H__
34330884Sjhb#define __T4_TLS_H__
35330884Sjhb
36330884Sjhb#define TLS1_VERSION                    0x0301
37330884Sjhb#define TLS1_1_VERSION                  0x0302
38330884Sjhb#define TLS1_2_VERSION                  0x0303
39330884Sjhb#define TLS_MAX_VERSION                 TLS1_2_VERSION
40330884Sjhb
41330884Sjhb#define DTLS1_VERSION                   0xFEFF
42330884Sjhb#define DTLS1_2_VERSION                 0xFEFD
43330884Sjhb#define DTLS_MAX_VERSION                DTLS1_2_VERSION
44330884Sjhb#define DTLS1_VERSION_MAJOR             0xFE
45330884Sjhb
46330884Sjhb/* Custom socket options for TLS+TOE. */
47330884Sjhb
48330884Sjhb#define MAX_MAC_KSZ		64	/*512 bits */
49330884Sjhb#define MAX_CIPHER_KSZ		32	/* 256 bits */
50330884Sjhb#define CIPHER_BLOCK_SZ		16
51330884Sjhb#define SALT_SIZE		4
52330884Sjhb
53330884Sjhb/* Can accomodate 16, 11-15 are reserved */
54330884Sjhbenum {
55330884Sjhb    CHSSL_SHA_NOP,
56330884Sjhb    CHSSL_SHA1,
57330884Sjhb    CHSSL_SHA224,
58330884Sjhb    CHSSL_SHA256,
59330884Sjhb    CHSSL_GHASH,
60330884Sjhb    CHSSL_SHA512_224,
61330884Sjhb    CHSSL_SHA512_256,
62330884Sjhb    CHSSL_SHA512_384,
63330884Sjhb    CHSSL_SHA512_512,
64330884Sjhb    CHSSL_CBCMAC,
65330884Sjhb    CHSSL_CMAC,
66330884Sjhb};
67330884Sjhb
68330884Sjhb/* Can accomodate 16, 8-15 are reserved */
69330884Sjhbenum {
70330884Sjhb    CHSSL_CIPH_NOP,
71330884Sjhb    CHSSL_AES_CBC,
72330884Sjhb    CHSSL_AES_GCM,
73330884Sjhb    CHSSL_AES_CTR,
74330884Sjhb    CHSSL_AES_GEN,
75330884Sjhb    CHSSL_IPSEC_ESP,
76330884Sjhb    CHSSL_AES_XTS,
77330884Sjhb    CHSSL_AES_CCM,
78330884Sjhb};
79330884Sjhb
80330884Sjhb/* Key Context Programming Operation type */
81330884Sjhb#define KEY_WRITE_RX			0x1
82330884Sjhb#define KEY_WRITE_TX			0x2
83330884Sjhb#define KEY_DELETE_RX			0x4
84330884Sjhb#define KEY_DELETE_TX			0x8
85330884Sjhb
86330884Sjhb#define S_KEY_CLR_LOC		4
87330884Sjhb#define M_KEY_CLR_LOC		0xf
88330884Sjhb#define V_KEY_CLR_LOC(x)	((x) << S_KEY_CLR_LOC)
89330884Sjhb#define G_KEY_CLR_LOC(x)	(((x) >> S_KEY_CLR_LOC) & M_KEY_CLR_LOC)
90330884Sjhb#define F_KEY_CLR_LOC		V_KEY_CLR_LOC(1U)
91330884Sjhb
92330884Sjhb#define S_KEY_GET_LOC           0
93330884Sjhb#define M_KEY_GET_LOC           0xf
94330884Sjhb#define V_KEY_GET_LOC(x)        ((x) << S_KEY_GET_LOC)
95330884Sjhb#define G_KEY_GET_LOC(x)        (((x) >> S_KEY_GET_LOC) & M_KEY_GET_LOC)
96330884Sjhb
97330884Sjhbstruct tls_ofld_state {
98330884Sjhb    unsigned char enc_mode;
99330884Sjhb    unsigned char mac_mode;
100330884Sjhb    unsigned char key_loc;
101330884Sjhb    unsigned char ofld_mode;
102330884Sjhb    unsigned char auth_mode;
103330884Sjhb    unsigned char resv[3];
104330884Sjhb};
105330884Sjhb
106330884Sjhbstruct tls_tx_ctxt {
107330884Sjhb    unsigned char   salt[SALT_SIZE];
108330884Sjhb    unsigned char key[MAX_CIPHER_KSZ];
109330884Sjhb    unsigned char ipad[MAX_MAC_KSZ];
110330884Sjhb    unsigned char opad[MAX_MAC_KSZ];
111330884Sjhb};
112330884Sjhb
113330884Sjhbstruct tls_rx_ctxt {
114330884Sjhb    unsigned char   salt[SALT_SIZE];
115330884Sjhb    unsigned char key[MAX_CIPHER_KSZ];
116330884Sjhb    unsigned char ipad[MAX_MAC_KSZ];
117330884Sjhb    unsigned char opad[MAX_MAC_KSZ];
118330884Sjhb};
119330884Sjhb
120330884Sjhbstruct tls_key_context {
121330884Sjhb    struct tls_tx_ctxt tx;
122330884Sjhb    struct tls_rx_ctxt rx;
123330884Sjhb
124330884Sjhb    unsigned char l_p_key;
125330884Sjhb    unsigned char hmac_ctrl;
126330884Sjhb    unsigned char mac_first;
127330884Sjhb    unsigned char iv_size;
128330884Sjhb    unsigned char iv_ctrl;
129330884Sjhb    unsigned char iv_algo;
130330884Sjhb    unsigned char tx_seq_no;
131330884Sjhb    unsigned char rx_seq_no;
132330884Sjhb
133330884Sjhb    struct tls_ofld_state state;
134330884Sjhb
135330884Sjhb    unsigned int tx_key_info_size;
136330884Sjhb    unsigned int rx_key_info_size;
137330884Sjhb    unsigned int frag_size;
138330884Sjhb    unsigned int mac_secret_size;
139330884Sjhb    unsigned int cipher_secret_size;
140330884Sjhb    int proto_ver;
141330884Sjhb    unsigned int sock_fd;
142330884Sjhb    unsigned short dtls_epoch;
143330884Sjhb    unsigned short rsv;
144330884Sjhb};
145330884Sjhb
146330884Sjhb/* Set with 'struct tls_key_context'. */
147330884Sjhb#define	TCP_TLSOM_SET_TLS_CONTEXT	(TCP_VENDOR)
148330884Sjhb
149330884Sjhb/* Get returns int of enabled (1) / disabled (0). */
150330884Sjhb#define	TCP_TLSOM_GET_TLS_TOM		(TCP_VENDOR + 1)
151330884Sjhb
152330884Sjhbenum {
153330884Sjhb	TLS_TOM_NONE = 0,
154330884Sjhb	TLS_TOM_TXONLY,
155330884Sjhb	TLS_TOM_BOTH
156330884Sjhb};
157330884Sjhb
158330884Sjhb/* Set with no value. */
159330884Sjhb#define	TCP_TLSOM_CLR_TLS_TOM		(TCP_VENDOR + 2)
160330884Sjhb
161330884Sjhb/* Set with no value. */
162330884Sjhb#define	TCP_TLSOM_CLR_QUIES		(TCP_VENDOR + 3)
163330884Sjhb
164330884Sjhb#ifdef _KERNEL
165330884Sjhb/* Timeouts for handshake timer in seconds. */
166330884Sjhb#define TLS_SRV_HELLO_DONE		9
167330884Sjhb#define TLS_SRV_HELLO_RD_TM		5
168330884Sjhb#define TLS_SRV_HELLO_BKOFF_TM		15
169330884Sjhb
170330884Sjhb#define CONTENT_TYPE_CCS		20
171330884Sjhb#define CONTENT_TYPE_ALERT		21
172330884Sjhb#define CONTENT_TYPE_HANDSHAKE		22
173330884Sjhb#define CONTENT_TYPE_APP_DATA		23
174330884Sjhb#define CONTENT_TYPE_HEARTBEAT		24
175330884Sjhb#define CONTENT_TYPE_KEY_CONTEXT	32
176330884Sjhb#define CONTENT_TYPE_ERROR		127
177330884Sjhb
178330884Sjhb#define GCM_TAG_SIZE			16
179330884Sjhb#define AEAD_EXPLICIT_DATA_SIZE		8
180330884Sjhb#define TLS_HEADER_LENGTH		5
181330884Sjhb#define TP_TX_PG_SZ			65536
182330884Sjhb#define FC_TP_PLEN_MAX			17408
183330884Sjhb
184330884Sjhb#define IPAD_SIZE			64
185330884Sjhb#define OPAD_SIZE			64
186330884Sjhb#define KEY_SIZE			32
187330884Sjhb#define CIPHER_BLOCK_SIZE		16
188330884Sjhb#define HDR_KCTX_SIZE   (IPAD_SIZE + OPAD_SIZE + KEY_SIZE)
189330884Sjhb
190330884Sjhb#define KEY_IN_DDR_SIZE			16
191330884Sjhb#define	TLS_KEY_CONTEXT_SZ	roundup2(sizeof(struct tls_tx_ctxt), 32)
192330884Sjhb
193330884Sjhb/* MAC KEY SIZE */
194330884Sjhb#define SHA_NOP				0
195330884Sjhb#define SHA_GHASH			16
196330884Sjhb#define SHA_224				28
197330884Sjhb#define SHA_256				32
198330884Sjhb#define SHA_384				48
199330884Sjhb#define SHA_512				64
200330884Sjhb#define SHA1				20
201330884Sjhb
202330884Sjhb/* CIPHER KEY SIZE */
203330884Sjhb#define AES_NOP				0
204330884Sjhb#define AES_128				16
205330884Sjhb#define AES_192				24
206330884Sjhb#define AES_256				32
207330884Sjhb
208330884Sjhbenum {
209330884Sjhb	TLS_1_2_VERSION,
210330884Sjhb	TLS_1_1_VERSION,
211330884Sjhb	DTLS_1_2_VERSION,
212330884Sjhb	TLS_VERSION_MAX,
213330884Sjhb};
214330884Sjhb
215330884Sjhbenum {
216330884Sjhb	CH_EVP_CIPH_STREAM_CIPHER,
217330884Sjhb	CH_EVP_CIPH_CBC_MODE,
218330884Sjhb	CH_EVP_CIPH_GCM_MODE,
219330884Sjhb	CH_EVP_CIPH_CTR_MODE,
220330884Sjhb};
221330884Sjhb
222330884Sjhbenum {
223330884Sjhb	TLS_SFO_WR_CONTEXTLOC_DSGL,
224330884Sjhb	TLS_SFO_WR_CONTEXTLOC_IMMEDIATE,
225330884Sjhb	TLS_SFO_WR_CONTEXTLOC_DDR,
226330884Sjhb};
227330884Sjhb
228330884Sjhbenum {
229330884Sjhb	CPL_TX_TLS_SFO_TYPE_CCS,
230330884Sjhb	CPL_TX_TLS_SFO_TYPE_ALERT,
231330884Sjhb	CPL_TX_TLS_SFO_TYPE_HANDSHAKE,
232330884Sjhb	CPL_TX_TLS_SFO_TYPE_DATA,
233330884Sjhb	CPL_TX_TLS_SFO_TYPE_HEARTBEAT,	/* XXX: Shouldn't this be "CUSTOM"? */
234330884Sjhb};
235330884Sjhb
236330884Sjhbenum {
237330884Sjhb	CH_CK_SIZE_128,
238330884Sjhb	CH_CK_SIZE_192,
239330884Sjhb	CH_CK_SIZE_256,
240330884Sjhb	CH_CK_SIZE_NOP,
241330884Sjhb};
242330884Sjhb
243330884Sjhbenum {
244330884Sjhb	CH_MK_SIZE_128,
245330884Sjhb	CH_MK_SIZE_160,
246330884Sjhb	CH_MK_SIZE_192,
247330884Sjhb	CH_MK_SIZE_256,
248330884Sjhb	CH_MK_SIZE_512,
249330884Sjhb	CH_MK_SIZE_NOP,
250330884Sjhb};
251330884Sjhb
252330884Sjhb#define SCMD_ENCDECCTRL_ENCRYPT 0
253330884Sjhb#define SCMD_ENCDECCTRL_DECRYPT 1
254330884Sjhb
255330884Sjhb#define SCMD_CIPH_MODE_NOP			0
256330884Sjhb#define SCMD_CIPH_MODE_AES_CBC			1
257330884Sjhb#define SCMD_CIPH_MODE_AES_GCM			2
258330884Sjhb#define SCMD_CIPH_MODE_AES_CTR			3
259330884Sjhb#define SCMD_CIPH_MODE_AES_GEN			4
260330884Sjhb#define SCMD_CIPH_MODE_AES_CCM			7
261330884Sjhb
262330884Sjhbstruct tls_scmd {
263330884Sjhb	__be32 seqno_numivs;
264330884Sjhb	__be32 ivgen_hdrlen;
265330884Sjhb};
266330884Sjhb
267330884Sjhbstruct tls_ofld_info {
268330884Sjhb	struct tls_key_context k_ctx;
269330884Sjhb	int key_location;
270330884Sjhb	int mac_length;
271330884Sjhb	int rx_key_addr;
272330884Sjhb	int tx_key_addr;
273330884Sjhb	uint64_t tx_seq_no;
274330884Sjhb	unsigned short fcplenmax;
275330884Sjhb	unsigned short adjusted_plen;
276330884Sjhb	unsigned short expn_per_ulp;
277330884Sjhb	unsigned short pdus_per_ulp;
278330884Sjhb	struct tls_scmd scmd0;
279330884Sjhb	u_int sb_off;
280330884Sjhb	struct callout handshake_timer;
281330884Sjhb	u_int rcv_over;
282330884Sjhb};
283330884Sjhb
284330884Sjhbstruct tls_key_req {
285330884Sjhb	__be32 wr_hi;
286330884Sjhb	__be32 wr_mid;
287330884Sjhb        __be32 ftid;
288330884Sjhb        __u8   reneg_to_write_rx;
289330884Sjhb        __u8   protocol;
290330884Sjhb        __be16 mfs;
291330884Sjhb	/* master command */
292330884Sjhb	__be32 cmd;
293330884Sjhb	__be32 len16;             /* command length */
294330884Sjhb	__be32 dlen;              /* data length in 32-byte units */
295330884Sjhb	__be32 kaddr;
296330884Sjhb	/* sub-command */
297330884Sjhb	__be32 sc_more;
298330884Sjhb	__be32 sc_len;
299330884Sjhb}__packed;
300330884Sjhb
301330884Sjhbstruct tls_keyctx {
302330884Sjhb        union key_ctx {
303330884Sjhb                struct tx_keyctx_hdr {
304330884Sjhb                        __u8   ctxlen;
305330884Sjhb                        __u8   r2;
306330884Sjhb                        __be16 dualck_to_txvalid;
307330884Sjhb                        __u8   txsalt[4];
308330884Sjhb                        __be64 r5;
309330884Sjhb                } txhdr;
310330884Sjhb                struct rx_keyctx_hdr {
311330884Sjhb                        __u8   flitcnt_hmacctrl;
312330884Sjhb                        __u8   protover_ciphmode;
313330884Sjhb                        __u8   authmode_to_rxvalid;
314330884Sjhb                        __u8   ivpresent_to_rxmk_size;
315330884Sjhb                        __u8   rxsalt[4];
316330884Sjhb                        __be64 ivinsert_to_authinsrt;
317330884Sjhb                } rxhdr;
318330884Sjhb        } u;
319330884Sjhb        struct keys {
320330884Sjhb                __u8   edkey[32];
321330884Sjhb                __u8   ipad[64];
322330884Sjhb                __u8   opad[64];
323330884Sjhb        } keys;
324330884Sjhb};
325330884Sjhb
326330884Sjhb#define S_TLS_KEYCTX_TX_WR_DUALCK    12
327330884Sjhb#define M_TLS_KEYCTX_TX_WR_DUALCK    0x1
328330884Sjhb#define V_TLS_KEYCTX_TX_WR_DUALCK(x) ((x) << S_TLS_KEYCTX_TX_WR_DUALCK)
329330884Sjhb#define G_TLS_KEYCTX_TX_WR_DUALCK(x) \
330330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_DUALCK) & M_TLS_KEYCTX_TX_WR_DUALCK)
331330884Sjhb#define F_TLS_KEYCTX_TX_WR_DUALCK    V_TLS_KEYCTX_TX_WR_DUALCK(1U)
332330884Sjhb
333330884Sjhb#define S_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT 11
334330884Sjhb#define M_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT 0x1
335330884Sjhb#define V_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT(x) \
336330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT)
337330884Sjhb#define G_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT(x) \
338330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT) & \
339330884Sjhb     M_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT)
340330884Sjhb#define F_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT \
341330884Sjhb    V_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT(1U)
342330884Sjhb
343330884Sjhb#define S_TLS_KEYCTX_TX_WR_SALT_PRESENT 10
344330884Sjhb#define M_TLS_KEYCTX_TX_WR_SALT_PRESENT 0x1
345330884Sjhb#define V_TLS_KEYCTX_TX_WR_SALT_PRESENT(x) \
346330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_SALT_PRESENT)
347330884Sjhb#define G_TLS_KEYCTX_TX_WR_SALT_PRESENT(x) \
348330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_SALT_PRESENT) & \
349330884Sjhb     M_TLS_KEYCTX_TX_WR_SALT_PRESENT)
350330884Sjhb#define F_TLS_KEYCTX_TX_WR_SALT_PRESENT \
351330884Sjhb    V_TLS_KEYCTX_TX_WR_SALT_PRESENT(1U)
352330884Sjhb
353330884Sjhb#define S_TLS_KEYCTX_TX_WR_TXCK_SIZE 6
354330884Sjhb#define M_TLS_KEYCTX_TX_WR_TXCK_SIZE 0xf
355330884Sjhb#define V_TLS_KEYCTX_TX_WR_TXCK_SIZE(x) \
356330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_TXCK_SIZE)
357330884Sjhb#define G_TLS_KEYCTX_TX_WR_TXCK_SIZE(x) \
358330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_TXCK_SIZE) & \
359330884Sjhb     M_TLS_KEYCTX_TX_WR_TXCK_SIZE)
360330884Sjhb
361330884Sjhb#define S_TLS_KEYCTX_TX_WR_TXMK_SIZE 2
362330884Sjhb#define M_TLS_KEYCTX_TX_WR_TXMK_SIZE 0xf
363330884Sjhb#define V_TLS_KEYCTX_TX_WR_TXMK_SIZE(x) \
364330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_TXMK_SIZE)
365330884Sjhb#define G_TLS_KEYCTX_TX_WR_TXMK_SIZE(x) \
366330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_TXMK_SIZE) & \
367330884Sjhb     M_TLS_KEYCTX_TX_WR_TXMK_SIZE)
368330884Sjhb
369330884Sjhb#define S_TLS_KEYCTX_TX_WR_TXVALID   0
370330884Sjhb#define M_TLS_KEYCTX_TX_WR_TXVALID   0x1
371330884Sjhb#define V_TLS_KEYCTX_TX_WR_TXVALID(x) \
372330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_TXVALID)
373330884Sjhb#define G_TLS_KEYCTX_TX_WR_TXVALID(x) \
374330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_TXVALID) & M_TLS_KEYCTX_TX_WR_TXVALID)
375330884Sjhb#define F_TLS_KEYCTX_TX_WR_TXVALID   V_TLS_KEYCTX_TX_WR_TXVALID(1U)
376330884Sjhb
377330884Sjhb#define S_TLS_KEYCTX_TX_WR_FLITCNT   3
378330884Sjhb#define M_TLS_KEYCTX_TX_WR_FLITCNT   0x1f
379330884Sjhb#define V_TLS_KEYCTX_TX_WR_FLITCNT(x) \
380330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_FLITCNT)
381330884Sjhb#define G_TLS_KEYCTX_TX_WR_FLITCNT(x) \
382330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_FLITCNT) & M_TLS_KEYCTX_TX_WR_FLITCNT)
383330884Sjhb
384330884Sjhb#define S_TLS_KEYCTX_TX_WR_HMACCTRL  0
385330884Sjhb#define M_TLS_KEYCTX_TX_WR_HMACCTRL  0x7
386330884Sjhb#define V_TLS_KEYCTX_TX_WR_HMACCTRL(x) \
387330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_HMACCTRL)
388330884Sjhb#define G_TLS_KEYCTX_TX_WR_HMACCTRL(x) \
389330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_HMACCTRL) & M_TLS_KEYCTX_TX_WR_HMACCTRL)
390330884Sjhb
391330884Sjhb#define S_TLS_KEYCTX_TX_WR_PROTOVER  4
392330884Sjhb#define M_TLS_KEYCTX_TX_WR_PROTOVER  0xf
393330884Sjhb#define V_TLS_KEYCTX_TX_WR_PROTOVER(x) \
394330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_PROTOVER)
395330884Sjhb#define G_TLS_KEYCTX_TX_WR_PROTOVER(x) \
396330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_PROTOVER) & M_TLS_KEYCTX_TX_WR_PROTOVER)
397330884Sjhb
398330884Sjhb#define S_TLS_KEYCTX_TX_WR_CIPHMODE  0
399330884Sjhb#define M_TLS_KEYCTX_TX_WR_CIPHMODE  0xf
400330884Sjhb#define V_TLS_KEYCTX_TX_WR_CIPHMODE(x) \
401330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_CIPHMODE)
402330884Sjhb#define G_TLS_KEYCTX_TX_WR_CIPHMODE(x) \
403330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_CIPHMODE) & M_TLS_KEYCTX_TX_WR_CIPHMODE)
404330884Sjhb
405330884Sjhb#define S_TLS_KEYCTX_TX_WR_AUTHMODE  4
406330884Sjhb#define M_TLS_KEYCTX_TX_WR_AUTHMODE  0xf
407330884Sjhb#define V_TLS_KEYCTX_TX_WR_AUTHMODE(x) \
408330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_AUTHMODE)
409330884Sjhb#define G_TLS_KEYCTX_TX_WR_AUTHMODE(x) \
410330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_AUTHMODE) & M_TLS_KEYCTX_TX_WR_AUTHMODE)
411330884Sjhb
412330884Sjhb#define S_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL 3
413330884Sjhb#define M_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL 0x1
414330884Sjhb#define V_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL(x) \
415330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL)
416330884Sjhb#define G_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL(x) \
417330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL) & \
418330884Sjhb     M_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL)
419330884Sjhb#define F_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL \
420330884Sjhb    V_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL(1U)
421330884Sjhb
422330884Sjhb#define S_TLS_KEYCTX_TX_WR_SEQNUMCTRL 1
423330884Sjhb#define M_TLS_KEYCTX_TX_WR_SEQNUMCTRL 0x3
424330884Sjhb#define V_TLS_KEYCTX_TX_WR_SEQNUMCTRL(x) \
425330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_SEQNUMCTRL)
426330884Sjhb#define G_TLS_KEYCTX_TX_WR_SEQNUMCTRL(x) \
427330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_SEQNUMCTRL) & \
428330884Sjhb     M_TLS_KEYCTX_TX_WR_SEQNUMCTRL)
429330884Sjhb
430330884Sjhb#define S_TLS_KEYCTX_TX_WR_RXVALID   0
431330884Sjhb#define M_TLS_KEYCTX_TX_WR_RXVALID   0x1
432330884Sjhb#define V_TLS_KEYCTX_TX_WR_RXVALID(x) \
433330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_RXVALID)
434330884Sjhb#define G_TLS_KEYCTX_TX_WR_RXVALID(x) \
435330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_RXVALID) & M_TLS_KEYCTX_TX_WR_RXVALID)
436330884Sjhb#define F_TLS_KEYCTX_TX_WR_RXVALID   V_TLS_KEYCTX_TX_WR_RXVALID(1U)
437330884Sjhb
438330884Sjhb#define S_TLS_KEYCTX_TX_WR_IVPRESENT 7
439330884Sjhb#define M_TLS_KEYCTX_TX_WR_IVPRESENT 0x1
440330884Sjhb#define V_TLS_KEYCTX_TX_WR_IVPRESENT(x) \
441330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_IVPRESENT)
442330884Sjhb#define G_TLS_KEYCTX_TX_WR_IVPRESENT(x) \
443330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_IVPRESENT) & \
444330884Sjhb     M_TLS_KEYCTX_TX_WR_IVPRESENT)
445330884Sjhb#define F_TLS_KEYCTX_TX_WR_IVPRESENT V_TLS_KEYCTX_TX_WR_IVPRESENT(1U)
446330884Sjhb
447330884Sjhb#define S_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT 6
448330884Sjhb#define M_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT 0x1
449330884Sjhb#define V_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT(x) \
450330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT)
451330884Sjhb#define G_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT(x) \
452330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT) & \
453330884Sjhb     M_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT)
454330884Sjhb#define F_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT \
455330884Sjhb    V_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT(1U)
456330884Sjhb
457330884Sjhb#define S_TLS_KEYCTX_TX_WR_RXCK_SIZE 3
458330884Sjhb#define M_TLS_KEYCTX_TX_WR_RXCK_SIZE 0x7
459330884Sjhb#define V_TLS_KEYCTX_TX_WR_RXCK_SIZE(x) \
460330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_RXCK_SIZE)
461330884Sjhb#define G_TLS_KEYCTX_TX_WR_RXCK_SIZE(x) \
462330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_RXCK_SIZE) & \
463330884Sjhb     M_TLS_KEYCTX_TX_WR_RXCK_SIZE)
464330884Sjhb
465330884Sjhb#define S_TLS_KEYCTX_TX_WR_RXMK_SIZE 0
466330884Sjhb#define M_TLS_KEYCTX_TX_WR_RXMK_SIZE 0x7
467330884Sjhb#define V_TLS_KEYCTX_TX_WR_RXMK_SIZE(x) \
468330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_RXMK_SIZE)
469330884Sjhb#define G_TLS_KEYCTX_TX_WR_RXMK_SIZE(x) \
470330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_RXMK_SIZE) & \
471330884Sjhb     M_TLS_KEYCTX_TX_WR_RXMK_SIZE)
472330884Sjhb
473330884Sjhb#define S_TLS_KEYCTX_TX_WR_IVINSERT  55
474330884Sjhb#define M_TLS_KEYCTX_TX_WR_IVINSERT  0x1ffULL
475330884Sjhb#define V_TLS_KEYCTX_TX_WR_IVINSERT(x) \
476330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_IVINSERT)
477330884Sjhb#define G_TLS_KEYCTX_TX_WR_IVINSERT(x) \
478330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_IVINSERT) & M_TLS_KEYCTX_TX_WR_IVINSERT)
479330884Sjhb
480330884Sjhb#define S_TLS_KEYCTX_TX_WR_AADSTRTOFST 47
481330884Sjhb#define M_TLS_KEYCTX_TX_WR_AADSTRTOFST 0xffULL
482330884Sjhb#define V_TLS_KEYCTX_TX_WR_AADSTRTOFST(x) \
483330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_AADSTRTOFST)
484330884Sjhb#define G_TLS_KEYCTX_TX_WR_AADSTRTOFST(x) \
485330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_AADSTRTOFST) & \
486330884Sjhb     M_TLS_KEYCTX_TX_WR_AADSTRTOFST)
487330884Sjhb
488330884Sjhb#define S_TLS_KEYCTX_TX_WR_AADSTOPOFST 39
489330884Sjhb#define M_TLS_KEYCTX_TX_WR_AADSTOPOFST 0xffULL
490330884Sjhb#define V_TLS_KEYCTX_TX_WR_AADSTOPOFST(x) \
491330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_AADSTOPOFST)
492330884Sjhb#define G_TLS_KEYCTX_TX_WR_AADSTOPOFST(x) \
493330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_AADSTOPOFST) & \
494330884Sjhb     M_TLS_KEYCTX_TX_WR_AADSTOPOFST)
495330884Sjhb
496330884Sjhb#define S_TLS_KEYCTX_TX_WR_CIPHERSRTOFST 30
497330884Sjhb#define M_TLS_KEYCTX_TX_WR_CIPHERSRTOFST 0x1ffULL
498330884Sjhb#define V_TLS_KEYCTX_TX_WR_CIPHERSRTOFST(x) \
499330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_CIPHERSRTOFST)
500330884Sjhb#define G_TLS_KEYCTX_TX_WR_CIPHERSRTOFST(x) \
501330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_CIPHERSRTOFST) & \
502330884Sjhb     M_TLS_KEYCTX_TX_WR_CIPHERSRTOFST)
503330884Sjhb
504330884Sjhb#define S_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST 23
505330884Sjhb#define M_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST 0x7f
506330884Sjhb#define V_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST(x) \
507330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST)
508330884Sjhb#define G_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST(x) \
509330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST) & \
510330884Sjhb     M_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST)
511330884Sjhb
512330884Sjhb#define S_TLS_KEYCTX_TX_WR_AUTHSRTOFST 14
513330884Sjhb#define M_TLS_KEYCTX_TX_WR_AUTHSRTOFST 0x1ff
514330884Sjhb#define V_TLS_KEYCTX_TX_WR_AUTHSRTOFST(x) \
515330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_AUTHSRTOFST)
516330884Sjhb#define G_TLS_KEYCTX_TX_WR_AUTHSRTOFST(x) \
517330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_AUTHSRTOFST) & \
518330884Sjhb     M_TLS_KEYCTX_TX_WR_AUTHSRTOFST)
519330884Sjhb
520330884Sjhb#define S_TLS_KEYCTX_TX_WR_AUTHSTOPOFST 7
521330884Sjhb#define M_TLS_KEYCTX_TX_WR_AUTHSTOPOFST 0x7f
522330884Sjhb#define V_TLS_KEYCTX_TX_WR_AUTHSTOPOFST(x) \
523330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_AUTHSTOPOFST)
524330884Sjhb#define G_TLS_KEYCTX_TX_WR_AUTHSTOPOFST(x) \
525330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_AUTHSTOPOFST) & \
526330884Sjhb     M_TLS_KEYCTX_TX_WR_AUTHSTOPOFST)
527330884Sjhb
528330884Sjhb#define S_TLS_KEYCTX_TX_WR_AUTHINSRT 0
529330884Sjhb#define M_TLS_KEYCTX_TX_WR_AUTHINSRT 0x7f
530330884Sjhb#define V_TLS_KEYCTX_TX_WR_AUTHINSRT(x) \
531330884Sjhb    ((x) << S_TLS_KEYCTX_TX_WR_AUTHINSRT)
532330884Sjhb#define G_TLS_KEYCTX_TX_WR_AUTHINSRT(x) \
533330884Sjhb    (((x) >> S_TLS_KEYCTX_TX_WR_AUTHINSRT) & \
534330884Sjhb     M_TLS_KEYCTX_TX_WR_AUTHINSRT)
535330884Sjhb
536330884Sjhbstruct tls_hdr {
537330884Sjhb	__u8   type;
538330884Sjhb	__be16 version;
539330884Sjhb	__be16 length;
540330884Sjhb} __packed;
541330884Sjhb
542330884Sjhbstruct tlsrx_hdr_pkt {
543330884Sjhb	__u8   type;
544330884Sjhb	__be16 version;
545330884Sjhb	__be16 length;
546330884Sjhb
547330884Sjhb	__be64 tls_seq;
548330884Sjhb	__be16 reserved1;
549330884Sjhb	__u8   res_to_mac_error;
550330884Sjhb} __packed;
551330884Sjhb
552330884Sjhb/* res_to_mac_error fields */
553330884Sjhb#define S_TLSRX_HDR_PKT_INTERNAL_ERROR   4
554330884Sjhb#define M_TLSRX_HDR_PKT_INTERNAL_ERROR   0x1
555330884Sjhb#define V_TLSRX_HDR_PKT_INTERNAL_ERROR(x) \
556330884Sjhb	((x) << S_TLSRX_HDR_PKT_INTERNAL_ERROR)
557330884Sjhb#define G_TLSRX_HDR_PKT_INTERNAL_ERROR(x) \
558330884Sjhb(((x) >> S_TLSRX_HDR_PKT_INTERNAL_ERROR) & M_TLSRX_HDR_PKT_INTERNAL_ERROR)
559330884Sjhb#define F_TLSRX_HDR_PKT_INTERNAL_ERROR   V_TLSRX_HDR_PKT_INTERNAL_ERROR(1U)
560330884Sjhb
561330884Sjhb#define S_TLSRX_HDR_PKT_SPP_ERROR        3
562330884Sjhb#define M_TLSRX_HDR_PKT_SPP_ERROR        0x1
563330884Sjhb#define V_TLSRX_HDR_PKT_SPP_ERROR(x)     ((x) << S_TLSRX_HDR_PKT_SPP_ERROR)
564330884Sjhb#define G_TLSRX_HDR_PKT_SPP_ERROR(x)     \
565330884Sjhb(((x) >> S_TLSRX_HDR_PKT_SPP_ERROR) & M_TLSRX_HDR_PKT_SPP_ERROR)
566330884Sjhb#define F_TLSRX_HDR_PKT_SPP_ERROR        V_TLSRX_HDR_PKT_SPP_ERROR(1U)
567330884Sjhb
568330884Sjhb#define S_TLSRX_HDR_PKT_CCDX_ERROR       2
569330884Sjhb#define M_TLSRX_HDR_PKT_CCDX_ERROR       0x1
570330884Sjhb#define V_TLSRX_HDR_PKT_CCDX_ERROR(x)    ((x) << S_TLSRX_HDR_PKT_CCDX_ERROR)
571330884Sjhb#define G_TLSRX_HDR_PKT_CCDX_ERROR(x)    \
572330884Sjhb(((x) >> S_TLSRX_HDR_PKT_CCDX_ERROR) & M_TLSRX_HDR_PKT_CCDX_ERROR)
573330884Sjhb#define F_TLSRX_HDR_PKT_CCDX_ERROR       V_TLSRX_HDR_PKT_CCDX_ERROR(1U)
574330884Sjhb
575330884Sjhb#define S_TLSRX_HDR_PKT_PAD_ERROR        1
576330884Sjhb#define M_TLSRX_HDR_PKT_PAD_ERROR        0x1
577330884Sjhb#define V_TLSRX_HDR_PKT_PAD_ERROR(x)     ((x) << S_TLSRX_HDR_PKT_PAD_ERROR)
578330884Sjhb#define G_TLSRX_HDR_PKT_PAD_ERROR(x)     \
579330884Sjhb(((x) >> S_TLSRX_HDR_PKT_PAD_ERROR) & M_TLSRX_HDR_PKT_PAD_ERROR)
580330884Sjhb#define F_TLSRX_HDR_PKT_PAD_ERROR        V_TLSRX_HDR_PKT_PAD_ERROR(1U)
581330884Sjhb
582330884Sjhb#define S_TLSRX_HDR_PKT_MAC_ERROR        0
583330884Sjhb#define M_TLSRX_HDR_PKT_MAC_ERROR        0x1
584330884Sjhb#define V_TLSRX_HDR_PKT_MAC_ERROR(x)     ((x) << S_TLSRX_HDR_PKT_MAC_ERROR)
585330884Sjhb#define G_TLSRX_HDR_PKT_MAC_ERROR(x)     \
586330884Sjhb(((x) >> S_TLSRX_HDR_PKT_MAC_ERROR) & M_TLSRX_HDR_PKT_MAC_ERROR)
587330884Sjhb#define F_TLSRX_HDR_PKT_MAC_ERROR        V_TLSRX_HDR_PKT_MAC_ERROR(1U)
588330884Sjhb
589330884Sjhb#define M_TLSRX_HDR_PKT_ERROR		0x1F
590330884Sjhb
591330884Sjhb#endif /* _KERNEL */
592330884Sjhb
593330884Sjhb#endif /* !__T4_TLS_H__ */
594