git: c6b3a3772c08 - main - cxgbe TOE TLS: Simplify a few routines.

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Mon, 08 Aug 2022 18:22:24 UTC
The branch main has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=c6b3a3772c0872f625ebb43d6a334babc5def5f4

commit c6b3a3772c0872f625ebb43d6a334babc5def5f4
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2022-08-08 18:21:54 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2022-08-08 18:21:54 +0000

    cxgbe TOE TLS: Simplify a few routines.
    
    Remove a few more remnants from the old pre-KTLS support and instead
    assume that each work request sends a single TLS record.
    
    Sponsored by:   Chelsio Communications
---
 sys/dev/cxgbe/tom/t4_tls.c | 33 +++++++++++----------------------
 sys/dev/cxgbe/tom/t4_tls.h |  1 -
 2 files changed, 11 insertions(+), 23 deletions(-)

diff --git a/sys/dev/cxgbe/tom/t4_tls.c b/sys/dev/cxgbe/tom/t4_tls.c
index eb540406a271..deb0c76836e4 100644
--- a/sys/dev/cxgbe/tom/t4_tls.c
+++ b/sys/dev/cxgbe/tom/t4_tls.c
@@ -400,11 +400,7 @@ tls_alloc_ktls(struct toepcb *toep, struct ktls_session *tls, int direction)
 			 V_SCMD_KEY_CTX_INLINE(0) |
 			 V_SCMD_TLS_FRAG_ENABLE(1));
 
-		if (tls->params.cipher_algorithm == CRYPTO_AES_NIST_GCM_16)
-			toep->tls.iv_len = 8;
-		else
-			toep->tls.iv_len = AES_BLOCK_LEN;
-
+		toep->tls.iv_len = explicit_iv_size;
 		toep->tls.frag_size = tls->params.max_frame_len;
 		toep->tls.fcplenmax = get_tp_plen_max(tls);
 		toep->tls.expn_per_ulp = tls->params.tls_hlen +
@@ -509,24 +505,23 @@ tls_uninit_toep(struct toepcb *toep)
 
 static void
 write_tlstx_wr(struct fw_tlstx_data_wr *txwr, struct toepcb *toep,
-    unsigned int immdlen, unsigned int plen, unsigned int expn,
-    unsigned int pdus, uint8_t credits, int shove, int imm_ivs)
+    unsigned int plen, unsigned int expn, uint8_t credits, int shove)
 {
 	struct tls_ofld_info *tls_ofld = &toep->tls;
 	unsigned int len = plen + expn;
 
 	txwr->op_to_immdlen = htobe32(V_WR_OP(FW_TLSTX_DATA_WR) |
 	    V_FW_TLSTX_DATA_WR_COMPL(1) |
-	    V_FW_TLSTX_DATA_WR_IMMDLEN(immdlen));
+	    V_FW_TLSTX_DATA_WR_IMMDLEN(0));
 	txwr->flowid_len16 = htobe32(V_FW_TLSTX_DATA_WR_FLOWID(toep->tid) |
 	    V_FW_TLSTX_DATA_WR_LEN16(credits));
 	txwr->plen = htobe32(len);
 	txwr->lsodisable_to_flags = htobe32(V_TX_ULP_MODE(ULP_MODE_TLS) |
 	    V_TX_URG(0) | /* F_T6_TX_FORCE | */ V_TX_SHOVE(shove));
-	txwr->ctxloc_to_exp = htobe32(V_FW_TLSTX_DATA_WR_NUMIVS(pdus) |
+	txwr->ctxloc_to_exp = htobe32(V_FW_TLSTX_DATA_WR_NUMIVS(1) |
 	    V_FW_TLSTX_DATA_WR_EXP(expn) |
 	    V_FW_TLSTX_DATA_WR_CTXLOC(TLS_SFO_WR_CONTEXTLOC_DDR) |
-	    V_FW_TLSTX_DATA_WR_IVDSGL(!imm_ivs) |
+	    V_FW_TLSTX_DATA_WR_IVDSGL(0) |
 	    V_FW_TLSTX_DATA_WR_KEYSIZE(tls_ofld->tx_key_info_size >> 4));
 	txwr->mfs = htobe16(tls_ofld->frag_size);
 	txwr->adjustedplen_pkd = htobe16(
@@ -539,15 +534,12 @@ write_tlstx_wr(struct fw_tlstx_data_wr *txwr, struct toepcb *toep,
 
 static void
 write_tlstx_cpl(struct cpl_tx_tls_sfo *cpl, struct toepcb *toep,
-    struct tls_hdr *tls_hdr, unsigned int plen, unsigned int pdus)
+    struct tls_hdr *tls_hdr, unsigned int plen, uint64_t seqno)
 {
 	struct tls_ofld_info *tls_ofld = &toep->tls;
 	int data_type, seglen;
 
-	if (plen < tls_ofld->frag_size)
-		seglen = plen;
-	else
-		seglen = tls_ofld->frag_size;
+	seglen = plen;
 	data_type = tls_content_type(tls_hdr->type);
 	cpl->op_to_seg_len = htobe32(V_CPL_TX_TLS_SFO_OPCODE(CPL_TX_TLS_SFO) |
 	    V_CPL_TX_TLS_SFO_DATA_TYPE(data_type) |
@@ -557,10 +549,9 @@ write_tlstx_cpl(struct cpl_tx_tls_sfo *cpl, struct toepcb *toep,
 		cpl->type_protover = htobe32(
 		    V_CPL_TX_TLS_SFO_TYPE(tls_hdr->type));
 	cpl->seqno_numivs = htobe32(tls_ofld->scmd0.seqno_numivs |
-	    V_SCMD_NUM_IVS(pdus));
+	    V_SCMD_NUM_IVS(1));
 	cpl->ivgen_hdrlen = htobe32(tls_ofld->scmd0.ivgen_hdrlen);
-	cpl->scmd1 = htobe64(tls_ofld->tx_seq_no);
-	tls_ofld->tx_seq_no += pdus;
+	cpl->scmd1 = htobe64(seqno);
 }
 
 static int
@@ -820,10 +811,8 @@ t4_push_ktls(struct adapter *sc, struct toepcb *toep, int drop)
 		expn_size = m->m_epg_hdrlen +
 		    m->m_epg_trllen;
 		tls_size = m->m_len - expn_size;
-		write_tlstx_wr(txwr, toep, 0,
-		    tls_size, expn_size, 1, credits, shove, 1);
-		toep->tls.tx_seq_no = m->m_epg_seqno;
-		write_tlstx_cpl(cpl, toep, thdr, tls_size, 1);
+		write_tlstx_wr(txwr, toep, tls_size, expn_size, credits, shove);
+		write_tlstx_cpl(cpl, toep, thdr, tls_size, m->m_epg_seqno);
 
 		idata = (struct ulptx_idata *)(cpl + 1);
 		idata->cmd_more = htobe32(V_ULPTX_CMD(ULP_TX_SC_NOOP));
diff --git a/sys/dev/cxgbe/tom/t4_tls.h b/sys/dev/cxgbe/tom/t4_tls.h
index e5166bf6d9bd..b5b25dd3c6d8 100644
--- a/sys/dev/cxgbe/tom/t4_tls.h
+++ b/sys/dev/cxgbe/tom/t4_tls.h
@@ -76,7 +76,6 @@ struct tls_ofld_info {
 	int key_location;
 	int rx_key_addr;
 	int tx_key_addr;
-	uint64_t tx_seq_no;
 	uint16_t rx_version;
 	unsigned short fcplenmax;
 	unsigned short adjusted_plen;