brintos

brintos / linux-shallow public Read only

0
0
Text · 3.0 KiB · dbbba92 Raw
122 lines · c
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	020#define CHCR_KTLS_KEY_CTX_LEN	1621#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		3530 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_ctx_tx {71	struct chcr_ktls_info *chcr_info;72};73 74struct chcr_ktls_uld_ctx {75	struct list_head entry;76	struct cxgb4_lld_info lldi;77	struct xarray tid_list;78	bool detach;79};80 81static inline struct chcr_ktls_info *82__chcr_get_ktls_tx_info(struct tls_offload_context_tx *octx)83{84	struct chcr_ktls_ctx_tx *priv_ctx;85 86	BUILD_BUG_ON(sizeof(struct chcr_ktls_ctx_tx) > TLS_DRIVER_STATE_SIZE_TX);87	priv_ctx = (struct chcr_ktls_ctx_tx *)octx->driver_state;88	return priv_ctx->chcr_info;89}90 91static inline struct chcr_ktls_info *92chcr_get_ktls_tx_info(struct tls_context *tls_ctx)93{94	struct chcr_ktls_ctx_tx *priv_ctx;95 96	BUILD_BUG_ON(sizeof(struct chcr_ktls_ctx_tx) > TLS_DRIVER_STATE_SIZE_TX);97	priv_ctx = (struct chcr_ktls_ctx_tx *)__tls_driver_ctx(tls_ctx, TLS_OFFLOAD_CTX_DIR_TX);98	return priv_ctx->chcr_info;99}100 101static inline void102chcr_set_ktls_tx_info(struct tls_context *tls_ctx, struct chcr_ktls_info *chcr_info)103{104	struct chcr_ktls_ctx_tx *priv_ctx;105 106	priv_ctx = __tls_driver_ctx(tls_ctx, TLS_OFFLOAD_CTX_DIR_TX);107	priv_ctx->chcr_info = chcr_info;108}109 110static inline int chcr_get_first_rx_qid(struct adapter *adap)111{112	/* u_ctx is saved in adap, fetch it */113	struct chcr_ktls_uld_ctx *u_ctx = adap->uld[CXGB4_ULD_KTLS].handle;114 115	if (!u_ctx)116		return -1;117	return u_ctx->lldi.rxq_ids[0];118}119 120typedef int (*chcr_handler_func)(struct adapter *adap, unsigned char *input);121#endif /* __CHCR_KTLS_H__ */122