2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
4 * Copyright (c) 2017-2018 Chelsio Communications, Inc.
6 * Written by: John Baldwin <jhb@FreeBSD.org>, Atul Gupta
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
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.
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
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
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
46 /* Custom socket options for TLS+TOE. */
48 #define MAX_MAC_KSZ 64 /*512 bits */
49 #define MAX_CIPHER_KSZ 32 /* 256 bits */
50 #define CIPHER_BLOCK_SZ 16
53 /* Can accomodate 16, 11-15 are reserved */
68 /* Can accomodate 16, 8-15 are reserved */
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
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)
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)
97 struct 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];
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];
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];
120 struct tls_key_context {
121 struct tls_tx_ctxt tx;
122 struct tls_rx_ctxt rx;
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;
133 struct tls_ofld_state state;
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;
141 unsigned int sock_fd;
142 unsigned short dtls_epoch;
146 /* Set with 'struct tls_key_context'. */
147 #define TCP_TLSOM_SET_TLS_CONTEXT (TCP_VENDOR)
149 /* Get returns int of enabled (1) / disabled (0). */
150 #define TCP_TLSOM_GET_TLS_TOM (TCP_VENDOR + 1)
158 /* Set with no value. */
159 #define TCP_TLSOM_CLR_TLS_TOM (TCP_VENDOR + 2)
161 /* Set with no value. */
162 #define TCP_TLSOM_CLR_QUIES (TCP_VENDOR + 3)
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
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
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
187 #define CIPHER_BLOCK_SIZE 16
188 #define HDR_KCTX_SIZE (IPAD_SIZE + OPAD_SIZE + KEY_SIZE)
190 #define KEY_IN_DDR_SIZE 16
191 #define TLS_KEY_CONTEXT_SZ roundup2(sizeof(struct tls_tx_ctxt), 32)
202 /* CIPHER KEY SIZE */
216 CH_EVP_CIPH_STREAM_CIPHER,
217 CH_EVP_CIPH_CBC_MODE,
218 CH_EVP_CIPH_GCM_MODE,
219 CH_EVP_CIPH_CTR_MODE,
223 TLS_SFO_WR_CONTEXTLOC_DSGL,
224 TLS_SFO_WR_CONTEXTLOC_IMMEDIATE,
225 TLS_SFO_WR_CONTEXTLOC_DDR,
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"? */
252 #define SCMD_ENCDECCTRL_ENCRYPT 0
253 #define SCMD_ENCDECCTRL_DECRYPT 1
255 #define SCMD_CIPH_MODE_NOP 0
256 #define SCMD_CIPH_MODE_AES_CBC 1
257 #define SCMD_CIPH_MODE_AES_GCM 2
258 #define SCMD_CIPH_MODE_AES_CTR 3
259 #define SCMD_CIPH_MODE_AES_GEN 4
260 #define SCMD_CIPH_MODE_AES_CCM 7
267 struct tls_ofld_info {
268 struct tls_key_context k_ctx;
274 unsigned short fcplenmax;
275 unsigned short adjusted_plen;
276 unsigned short expn_per_ulp;
277 unsigned short pdus_per_ulp;
278 struct tls_scmd scmd0;
280 struct callout handshake_timer;
288 __u8 reneg_to_write_rx;
293 __be32 len16; /* command length */
294 __be32 dlen; /* data length in 32-byte units */
303 struct tx_keyctx_hdr {
306 __be16 dualck_to_txvalid;
310 struct rx_keyctx_hdr {
311 __u8 flitcnt_hmacctrl;
312 __u8 protover_ciphmode;
313 __u8 authmode_to_rxvalid;
314 __u8 ivpresent_to_rxmk_size;
316 __be64 ivinsert_to_authinsrt;
326 #define S_TLS_KEYCTX_TX_WR_DUALCK 12
327 #define M_TLS_KEYCTX_TX_WR_DUALCK 0x1
328 #define V_TLS_KEYCTX_TX_WR_DUALCK(x) ((x) << S_TLS_KEYCTX_TX_WR_DUALCK)
329 #define G_TLS_KEYCTX_TX_WR_DUALCK(x) \
330 (((x) >> S_TLS_KEYCTX_TX_WR_DUALCK) & M_TLS_KEYCTX_TX_WR_DUALCK)
331 #define F_TLS_KEYCTX_TX_WR_DUALCK V_TLS_KEYCTX_TX_WR_DUALCK(1U)
333 #define S_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT 11
334 #define M_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT 0x1
335 #define V_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT(x) \
336 ((x) << S_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT)
337 #define G_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT(x) \
338 (((x) >> S_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT) & \
339 M_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT)
340 #define F_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT \
341 V_TLS_KEYCTX_TX_WR_TXOPAD_PRESENT(1U)
343 #define S_TLS_KEYCTX_TX_WR_SALT_PRESENT 10
344 #define M_TLS_KEYCTX_TX_WR_SALT_PRESENT 0x1
345 #define V_TLS_KEYCTX_TX_WR_SALT_PRESENT(x) \
346 ((x) << S_TLS_KEYCTX_TX_WR_SALT_PRESENT)
347 #define G_TLS_KEYCTX_TX_WR_SALT_PRESENT(x) \
348 (((x) >> S_TLS_KEYCTX_TX_WR_SALT_PRESENT) & \
349 M_TLS_KEYCTX_TX_WR_SALT_PRESENT)
350 #define F_TLS_KEYCTX_TX_WR_SALT_PRESENT \
351 V_TLS_KEYCTX_TX_WR_SALT_PRESENT(1U)
353 #define S_TLS_KEYCTX_TX_WR_TXCK_SIZE 6
354 #define M_TLS_KEYCTX_TX_WR_TXCK_SIZE 0xf
355 #define V_TLS_KEYCTX_TX_WR_TXCK_SIZE(x) \
356 ((x) << S_TLS_KEYCTX_TX_WR_TXCK_SIZE)
357 #define G_TLS_KEYCTX_TX_WR_TXCK_SIZE(x) \
358 (((x) >> S_TLS_KEYCTX_TX_WR_TXCK_SIZE) & \
359 M_TLS_KEYCTX_TX_WR_TXCK_SIZE)
361 #define S_TLS_KEYCTX_TX_WR_TXMK_SIZE 2
362 #define M_TLS_KEYCTX_TX_WR_TXMK_SIZE 0xf
363 #define V_TLS_KEYCTX_TX_WR_TXMK_SIZE(x) \
364 ((x) << S_TLS_KEYCTX_TX_WR_TXMK_SIZE)
365 #define G_TLS_KEYCTX_TX_WR_TXMK_SIZE(x) \
366 (((x) >> S_TLS_KEYCTX_TX_WR_TXMK_SIZE) & \
367 M_TLS_KEYCTX_TX_WR_TXMK_SIZE)
369 #define S_TLS_KEYCTX_TX_WR_TXVALID 0
370 #define M_TLS_KEYCTX_TX_WR_TXVALID 0x1
371 #define V_TLS_KEYCTX_TX_WR_TXVALID(x) \
372 ((x) << S_TLS_KEYCTX_TX_WR_TXVALID)
373 #define G_TLS_KEYCTX_TX_WR_TXVALID(x) \
374 (((x) >> S_TLS_KEYCTX_TX_WR_TXVALID) & M_TLS_KEYCTX_TX_WR_TXVALID)
375 #define F_TLS_KEYCTX_TX_WR_TXVALID V_TLS_KEYCTX_TX_WR_TXVALID(1U)
377 #define S_TLS_KEYCTX_TX_WR_FLITCNT 3
378 #define M_TLS_KEYCTX_TX_WR_FLITCNT 0x1f
379 #define V_TLS_KEYCTX_TX_WR_FLITCNT(x) \
380 ((x) << S_TLS_KEYCTX_TX_WR_FLITCNT)
381 #define G_TLS_KEYCTX_TX_WR_FLITCNT(x) \
382 (((x) >> S_TLS_KEYCTX_TX_WR_FLITCNT) & M_TLS_KEYCTX_TX_WR_FLITCNT)
384 #define S_TLS_KEYCTX_TX_WR_HMACCTRL 0
385 #define M_TLS_KEYCTX_TX_WR_HMACCTRL 0x7
386 #define V_TLS_KEYCTX_TX_WR_HMACCTRL(x) \
387 ((x) << S_TLS_KEYCTX_TX_WR_HMACCTRL)
388 #define G_TLS_KEYCTX_TX_WR_HMACCTRL(x) \
389 (((x) >> S_TLS_KEYCTX_TX_WR_HMACCTRL) & M_TLS_KEYCTX_TX_WR_HMACCTRL)
391 #define S_TLS_KEYCTX_TX_WR_PROTOVER 4
392 #define M_TLS_KEYCTX_TX_WR_PROTOVER 0xf
393 #define V_TLS_KEYCTX_TX_WR_PROTOVER(x) \
394 ((x) << S_TLS_KEYCTX_TX_WR_PROTOVER)
395 #define G_TLS_KEYCTX_TX_WR_PROTOVER(x) \
396 (((x) >> S_TLS_KEYCTX_TX_WR_PROTOVER) & M_TLS_KEYCTX_TX_WR_PROTOVER)
398 #define S_TLS_KEYCTX_TX_WR_CIPHMODE 0
399 #define M_TLS_KEYCTX_TX_WR_CIPHMODE 0xf
400 #define V_TLS_KEYCTX_TX_WR_CIPHMODE(x) \
401 ((x) << S_TLS_KEYCTX_TX_WR_CIPHMODE)
402 #define G_TLS_KEYCTX_TX_WR_CIPHMODE(x) \
403 (((x) >> S_TLS_KEYCTX_TX_WR_CIPHMODE) & M_TLS_KEYCTX_TX_WR_CIPHMODE)
405 #define S_TLS_KEYCTX_TX_WR_AUTHMODE 4
406 #define M_TLS_KEYCTX_TX_WR_AUTHMODE 0xf
407 #define V_TLS_KEYCTX_TX_WR_AUTHMODE(x) \
408 ((x) << S_TLS_KEYCTX_TX_WR_AUTHMODE)
409 #define G_TLS_KEYCTX_TX_WR_AUTHMODE(x) \
410 (((x) >> S_TLS_KEYCTX_TX_WR_AUTHMODE) & M_TLS_KEYCTX_TX_WR_AUTHMODE)
412 #define S_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL 3
413 #define M_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL 0x1
414 #define V_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL(x) \
415 ((x) << S_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL)
416 #define G_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL(x) \
417 (((x) >> S_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL) & \
418 M_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL)
419 #define F_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL \
420 V_TLS_KEYCTX_TX_WR_CIPHAUTHSEQCTRL(1U)
422 #define S_TLS_KEYCTX_TX_WR_SEQNUMCTRL 1
423 #define M_TLS_KEYCTX_TX_WR_SEQNUMCTRL 0x3
424 #define V_TLS_KEYCTX_TX_WR_SEQNUMCTRL(x) \
425 ((x) << S_TLS_KEYCTX_TX_WR_SEQNUMCTRL)
426 #define G_TLS_KEYCTX_TX_WR_SEQNUMCTRL(x) \
427 (((x) >> S_TLS_KEYCTX_TX_WR_SEQNUMCTRL) & \
428 M_TLS_KEYCTX_TX_WR_SEQNUMCTRL)
430 #define S_TLS_KEYCTX_TX_WR_RXVALID 0
431 #define M_TLS_KEYCTX_TX_WR_RXVALID 0x1
432 #define V_TLS_KEYCTX_TX_WR_RXVALID(x) \
433 ((x) << S_TLS_KEYCTX_TX_WR_RXVALID)
434 #define G_TLS_KEYCTX_TX_WR_RXVALID(x) \
435 (((x) >> S_TLS_KEYCTX_TX_WR_RXVALID) & M_TLS_KEYCTX_TX_WR_RXVALID)
436 #define F_TLS_KEYCTX_TX_WR_RXVALID V_TLS_KEYCTX_TX_WR_RXVALID(1U)
438 #define S_TLS_KEYCTX_TX_WR_IVPRESENT 7
439 #define M_TLS_KEYCTX_TX_WR_IVPRESENT 0x1
440 #define V_TLS_KEYCTX_TX_WR_IVPRESENT(x) \
441 ((x) << S_TLS_KEYCTX_TX_WR_IVPRESENT)
442 #define G_TLS_KEYCTX_TX_WR_IVPRESENT(x) \
443 (((x) >> S_TLS_KEYCTX_TX_WR_IVPRESENT) & \
444 M_TLS_KEYCTX_TX_WR_IVPRESENT)
445 #define F_TLS_KEYCTX_TX_WR_IVPRESENT V_TLS_KEYCTX_TX_WR_IVPRESENT(1U)
447 #define S_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT 6
448 #define M_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT 0x1
449 #define V_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT(x) \
450 ((x) << S_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT)
451 #define G_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT(x) \
452 (((x) >> S_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT) & \
453 M_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT)
454 #define F_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT \
455 V_TLS_KEYCTX_TX_WR_RXOPAD_PRESENT(1U)
457 #define S_TLS_KEYCTX_TX_WR_RXCK_SIZE 3
458 #define M_TLS_KEYCTX_TX_WR_RXCK_SIZE 0x7
459 #define V_TLS_KEYCTX_TX_WR_RXCK_SIZE(x) \
460 ((x) << S_TLS_KEYCTX_TX_WR_RXCK_SIZE)
461 #define G_TLS_KEYCTX_TX_WR_RXCK_SIZE(x) \
462 (((x) >> S_TLS_KEYCTX_TX_WR_RXCK_SIZE) & \
463 M_TLS_KEYCTX_TX_WR_RXCK_SIZE)
465 #define S_TLS_KEYCTX_TX_WR_RXMK_SIZE 0
466 #define M_TLS_KEYCTX_TX_WR_RXMK_SIZE 0x7
467 #define V_TLS_KEYCTX_TX_WR_RXMK_SIZE(x) \
468 ((x) << S_TLS_KEYCTX_TX_WR_RXMK_SIZE)
469 #define G_TLS_KEYCTX_TX_WR_RXMK_SIZE(x) \
470 (((x) >> S_TLS_KEYCTX_TX_WR_RXMK_SIZE) & \
471 M_TLS_KEYCTX_TX_WR_RXMK_SIZE)
473 #define S_TLS_KEYCTX_TX_WR_IVINSERT 55
474 #define M_TLS_KEYCTX_TX_WR_IVINSERT 0x1ffULL
475 #define V_TLS_KEYCTX_TX_WR_IVINSERT(x) \
476 ((x) << S_TLS_KEYCTX_TX_WR_IVINSERT)
477 #define G_TLS_KEYCTX_TX_WR_IVINSERT(x) \
478 (((x) >> S_TLS_KEYCTX_TX_WR_IVINSERT) & M_TLS_KEYCTX_TX_WR_IVINSERT)
480 #define S_TLS_KEYCTX_TX_WR_AADSTRTOFST 47
481 #define M_TLS_KEYCTX_TX_WR_AADSTRTOFST 0xffULL
482 #define V_TLS_KEYCTX_TX_WR_AADSTRTOFST(x) \
483 ((x) << S_TLS_KEYCTX_TX_WR_AADSTRTOFST)
484 #define G_TLS_KEYCTX_TX_WR_AADSTRTOFST(x) \
485 (((x) >> S_TLS_KEYCTX_TX_WR_AADSTRTOFST) & \
486 M_TLS_KEYCTX_TX_WR_AADSTRTOFST)
488 #define S_TLS_KEYCTX_TX_WR_AADSTOPOFST 39
489 #define M_TLS_KEYCTX_TX_WR_AADSTOPOFST 0xffULL
490 #define V_TLS_KEYCTX_TX_WR_AADSTOPOFST(x) \
491 ((x) << S_TLS_KEYCTX_TX_WR_AADSTOPOFST)
492 #define G_TLS_KEYCTX_TX_WR_AADSTOPOFST(x) \
493 (((x) >> S_TLS_KEYCTX_TX_WR_AADSTOPOFST) & \
494 M_TLS_KEYCTX_TX_WR_AADSTOPOFST)
496 #define S_TLS_KEYCTX_TX_WR_CIPHERSRTOFST 30
497 #define M_TLS_KEYCTX_TX_WR_CIPHERSRTOFST 0x1ffULL
498 #define V_TLS_KEYCTX_TX_WR_CIPHERSRTOFST(x) \
499 ((x) << S_TLS_KEYCTX_TX_WR_CIPHERSRTOFST)
500 #define G_TLS_KEYCTX_TX_WR_CIPHERSRTOFST(x) \
501 (((x) >> S_TLS_KEYCTX_TX_WR_CIPHERSRTOFST) & \
502 M_TLS_KEYCTX_TX_WR_CIPHERSRTOFST)
504 #define S_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST 23
505 #define M_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST 0x7f
506 #define V_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST(x) \
507 ((x) << S_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST)
508 #define G_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST(x) \
509 (((x) >> S_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST) & \
510 M_TLS_KEYCTX_TX_WR_CIPHERSTOPOFST)
512 #define S_TLS_KEYCTX_TX_WR_AUTHSRTOFST 14
513 #define M_TLS_KEYCTX_TX_WR_AUTHSRTOFST 0x1ff
514 #define V_TLS_KEYCTX_TX_WR_AUTHSRTOFST(x) \
515 ((x) << S_TLS_KEYCTX_TX_WR_AUTHSRTOFST)
516 #define G_TLS_KEYCTX_TX_WR_AUTHSRTOFST(x) \
517 (((x) >> S_TLS_KEYCTX_TX_WR_AUTHSRTOFST) & \
518 M_TLS_KEYCTX_TX_WR_AUTHSRTOFST)
520 #define S_TLS_KEYCTX_TX_WR_AUTHSTOPOFST 7
521 #define M_TLS_KEYCTX_TX_WR_AUTHSTOPOFST 0x7f
522 #define V_TLS_KEYCTX_TX_WR_AUTHSTOPOFST(x) \
523 ((x) << S_TLS_KEYCTX_TX_WR_AUTHSTOPOFST)
524 #define G_TLS_KEYCTX_TX_WR_AUTHSTOPOFST(x) \
525 (((x) >> S_TLS_KEYCTX_TX_WR_AUTHSTOPOFST) & \
526 M_TLS_KEYCTX_TX_WR_AUTHSTOPOFST)
528 #define S_TLS_KEYCTX_TX_WR_AUTHINSRT 0
529 #define M_TLS_KEYCTX_TX_WR_AUTHINSRT 0x7f
530 #define V_TLS_KEYCTX_TX_WR_AUTHINSRT(x) \
531 ((x) << S_TLS_KEYCTX_TX_WR_AUTHINSRT)
532 #define G_TLS_KEYCTX_TX_WR_AUTHINSRT(x) \
533 (((x) >> S_TLS_KEYCTX_TX_WR_AUTHINSRT) & \
534 M_TLS_KEYCTX_TX_WR_AUTHINSRT)
542 struct tlsrx_hdr_pkt {
549 __u8 res_to_mac_error;
552 /* res_to_mac_error fields */
553 #define S_TLSRX_HDR_PKT_INTERNAL_ERROR 4
554 #define M_TLSRX_HDR_PKT_INTERNAL_ERROR 0x1
555 #define V_TLSRX_HDR_PKT_INTERNAL_ERROR(x) \
556 ((x) << S_TLSRX_HDR_PKT_INTERNAL_ERROR)
557 #define G_TLSRX_HDR_PKT_INTERNAL_ERROR(x) \
558 (((x) >> S_TLSRX_HDR_PKT_INTERNAL_ERROR) & M_TLSRX_HDR_PKT_INTERNAL_ERROR)
559 #define F_TLSRX_HDR_PKT_INTERNAL_ERROR V_TLSRX_HDR_PKT_INTERNAL_ERROR(1U)
561 #define S_TLSRX_HDR_PKT_SPP_ERROR 3
562 #define M_TLSRX_HDR_PKT_SPP_ERROR 0x1
563 #define V_TLSRX_HDR_PKT_SPP_ERROR(x) ((x) << S_TLSRX_HDR_PKT_SPP_ERROR)
564 #define G_TLSRX_HDR_PKT_SPP_ERROR(x) \
565 (((x) >> S_TLSRX_HDR_PKT_SPP_ERROR) & M_TLSRX_HDR_PKT_SPP_ERROR)
566 #define F_TLSRX_HDR_PKT_SPP_ERROR V_TLSRX_HDR_PKT_SPP_ERROR(1U)
568 #define S_TLSRX_HDR_PKT_CCDX_ERROR 2
569 #define M_TLSRX_HDR_PKT_CCDX_ERROR 0x1
570 #define V_TLSRX_HDR_PKT_CCDX_ERROR(x) ((x) << S_TLSRX_HDR_PKT_CCDX_ERROR)
571 #define G_TLSRX_HDR_PKT_CCDX_ERROR(x) \
572 (((x) >> S_TLSRX_HDR_PKT_CCDX_ERROR) & M_TLSRX_HDR_PKT_CCDX_ERROR)
573 #define F_TLSRX_HDR_PKT_CCDX_ERROR V_TLSRX_HDR_PKT_CCDX_ERROR(1U)
575 #define S_TLSRX_HDR_PKT_PAD_ERROR 1
576 #define M_TLSRX_HDR_PKT_PAD_ERROR 0x1
577 #define V_TLSRX_HDR_PKT_PAD_ERROR(x) ((x) << S_TLSRX_HDR_PKT_PAD_ERROR)
578 #define G_TLSRX_HDR_PKT_PAD_ERROR(x) \
579 (((x) >> S_TLSRX_HDR_PKT_PAD_ERROR) & M_TLSRX_HDR_PKT_PAD_ERROR)
580 #define F_TLSRX_HDR_PKT_PAD_ERROR V_TLSRX_HDR_PKT_PAD_ERROR(1U)
582 #define S_TLSRX_HDR_PKT_MAC_ERROR 0
583 #define M_TLSRX_HDR_PKT_MAC_ERROR 0x1
584 #define V_TLSRX_HDR_PKT_MAC_ERROR(x) ((x) << S_TLSRX_HDR_PKT_MAC_ERROR)
585 #define G_TLSRX_HDR_PKT_MAC_ERROR(x) \
586 (((x) >> S_TLSRX_HDR_PKT_MAC_ERROR) & M_TLSRX_HDR_PKT_MAC_ERROR)
587 #define F_TLSRX_HDR_PKT_MAC_ERROR V_TLSRX_HDR_PKT_MAC_ERROR(1U)
589 #define M_TLSRX_HDR_PKT_ERROR 0x1F
593 #endif /* !__T4_TLS_H__ */