1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* Copyright (C) 2020 Chelsio Communications. All rights reserved. */ 3 4#ifndef __CHCR_KTLS_H__ 5#define __CHCR_KTLS_H__ 6 7#include "cxgb4.h" 8#include "t4_msg.h" 9#include "t4_tcb.h" 10#include "l2t.h" 11#include "chcr_common.h" 12#include "cxgb4_uld.h" 13#include "clip_tbl.h" 14 15#define CHCR_KTLS_DRV_MODULE_NAME "ch_ktls" 16#define CHCR_KTLS_DRV_VERSION "1.0.0.0-ko" 17#define CHCR_KTLS_DRV_DESC "Chelsio NIC TLS ULD Driver" 18 19#define CHCR_TCB_STATE_CLOSED 0 20#define CHCR_KTLS_KEY_CTX_LEN 16 21#define CHCR_SET_TCB_FIELD_LEN sizeof(struct cpl_set_tcb_field) 22#define CHCR_PLAIN_TX_DATA_LEN (sizeof(struct fw_ulptx_wr) +\ 23 sizeof(struct ulp_txpkt) +\ 24 sizeof(struct ulptx_idata) +\ 25 sizeof(struct cpl_tx_data)) 26 27#define CHCR_KTLS_WR_SIZE (CHCR_PLAIN_TX_DATA_LEN +\ 28 sizeof(struct cpl_tx_sec_pdu)) 29#define FALLBACK 35 30 31enum ch_ktls_open_state { 32 CH_KTLS_OPEN_SUCCESS = 0, 33 CH_KTLS_OPEN_PENDING = 1, 34 CH_KTLS_OPEN_FAILURE = 2, 35}; 36 37struct chcr_ktls_info { 38 struct sock *sk; 39 spinlock_t lock; /* lock for pending_close */ 40 struct ktls_key_ctx key_ctx; 41 struct adapter *adap; 42 struct l2t_entry *l2te; 43 struct net_device *netdev; 44 struct completion completion; 45 u64 iv; 46 u64 record_no; 47 int tid; 48 int atid; 49 int rx_qid; 50 u32 iv_size; 51 u32 prev_seq; 52 u32 prev_ack; 53 u32 salt_size; 54 u32 key_ctx_len; 55 u32 scmd0_seqno_numivs; 56 u32 scmd0_ivgen_hdrlen; 57 u32 tcp_start_seq_number; 58 u32 scmd0_short_seqno_numivs; 59 u32 scmd0_short_ivgen_hdrlen; 60 u16 prev_win; 61 u8 tx_chan; 62 u8 smt_idx; 63 u8 port_id; 64 u8 ip_family; 65 u8 first_qset; 66 enum ch_ktls_open_state open_state; 67 bool pending_close; 68}; 69 70struct chcr_ktls_ofld_ctx_tx { 71 struct tls_offload_context_tx base; 72 struct chcr_ktls_info *chcr_info; 73}; 74 75struct chcr_ktls_uld_ctx { 76 struct list_head entry; 77 struct cxgb4_lld_info lldi; 78 struct xarray tid_list; 79 bool detach; 80}; 81 82static inline struct chcr_ktls_ofld_ctx_tx * 83chcr_get_ktls_tx_context(struct tls_context *tls_ctx) 84{ 85 BUILD_BUG_ON(sizeof(struct chcr_ktls_ofld_ctx_tx) > 86 TLS_OFFLOAD_CONTEXT_SIZE_TX); 87 return container_of(tls_offload_ctx_tx(tls_ctx), 88 struct chcr_ktls_ofld_ctx_tx, 89 base); 90} 91 92static inline int chcr_get_first_rx_qid(struct adapter *adap) 93{ 94 /* u_ctx is saved in adap, fetch it */ 95 struct chcr_ktls_uld_ctx *u_ctx = adap->uld[CXGB4_ULD_KTLS].handle; 96 97 if (!u_ctx) 98 return -1; 99 return u_ctx->lldi.rxq_ids[0]; 100} 101 102typedef int (*chcr_handler_func)(struct adapter *adap, unsigned char *input); 103#endif /* __CHCR_KTLS_H__ */ 104