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