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: stable/11/sys/dev/cxgbe/tom/t4_tls.h 345664 2019-03-28 23:43:38Z jhb $ 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 252#define SCMD_ENCDECCTRL_ENCRYPT 0 253#define SCMD_ENCDECCTRL_DECRYPT 1 254 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 261 262struct tls_scmd { 263 __be32 seqno_numivs; 264 __be32 ivgen_hdrlen; 265}; 266 267struct tls_ofld_info { 268 struct tls_key_context k_ctx; 269 int key_location; 270 int mac_length; 271 int rx_key_addr; 272 int tx_key_addr; 273 uint64_t tx_seq_no; 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; 279 u_int sb_off; 280 struct callout handshake_timer; 281 u_int rcv_over; 282}; 283 284struct tls_key_req { 285 __be32 wr_hi; 286 __be32 wr_mid; 287 __be32 ftid; 288 __u8 reneg_to_write_rx; 289 __u8 protocol; 290 __be16 mfs; 291 /* master command */ 292 __be32 cmd; 293 __be32 len16; /* command length */ 294 __be32 dlen; /* data length in 32-byte units */ 295 __be32 kaddr; 296 /* sub-command */ 297 __be32 sc_more; 298 __be32 sc_len; 299}__packed; 300 301struct tls_keyctx { 302 union key_ctx { 303 struct tx_keyctx_hdr { 304 __u8 ctxlen; 305 __u8 r2; 306 __be16 dualck_to_txvalid; 307 __u8 txsalt[4]; 308 __be64 r5; 309 } txhdr; 310 struct rx_keyctx_hdr { 311 __u8 flitcnt_hmacctrl; 312 __u8 protover_ciphmode; 313 __u8 authmode_to_rxvalid; 314 __u8 ivpresent_to_rxmk_size; 315 __u8 rxsalt[4]; 316 __be64 ivinsert_to_authinsrt; 317 } rxhdr; 318 } u; 319 struct keys { 320 __u8 edkey[32]; 321 __u8 ipad[64]; 322 __u8 opad[64]; 323 } keys; 324}; 325 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) 332 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) 342 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) 352 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) 360 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) 368 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) 376 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) 383 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) 390 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) 397 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) 404 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) 411 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) 421 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) 429 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) 437 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) 446 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) 456 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) 464 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) 472 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) 479 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) 487 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) 495 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) 503 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) 511 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) 519 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) 527 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) 535 536struct tls_hdr { 537 __u8 type; 538 __be16 version; 539 __be16 length; 540} __packed; 541 542struct tlsrx_hdr_pkt { 543 __u8 type; 544 __be16 version; 545 __be16 length; 546 547 __be64 tls_seq; 548 __be16 reserved1; 549 __u8 res_to_mac_error; 550} __packed; 551 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) 560 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) 567 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) 574 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) 581 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) 588 589#define M_TLSRX_HDR_PKT_ERROR 0x1F 590 591#endif /* _KERNEL */ 592 593#endif /* !__T4_TLS_H__ */ 594