xref: /dpdk/drivers/crypto/cnxk/cn10k_cryptodev_sec.h (revision 27595cd83053b2d39634a159d6709b3ce3cdf3b0)
13f84076aSAnoob Joseph /* SPDX-License-Identifier: BSD-3-Clause
23f84076aSAnoob Joseph  * Copyright(C) 2024 Marvell.
33f84076aSAnoob Joseph  */
43f84076aSAnoob Joseph 
53f84076aSAnoob Joseph #ifndef __CN10K_CRYPTODEV_SEC_H__
63f84076aSAnoob Joseph #define __CN10K_CRYPTODEV_SEC_H__
73f84076aSAnoob Joseph 
8f343cddfSAnoob Joseph #include <rte_common.h>
93f84076aSAnoob Joseph #include <rte_security.h>
103f84076aSAnoob Joseph 
113f84076aSAnoob Joseph #include "roc_constants.h"
123f84076aSAnoob Joseph #include "roc_cpt.h"
133f84076aSAnoob Joseph 
143f84076aSAnoob Joseph #include "cn10k_ipsec.h"
15ffa1a704SVidya Sagar Velumuri #include "cn10k_tls.h"
163f84076aSAnoob Joseph 
173f84076aSAnoob Joseph #define SEC_SESS_SIZE sizeof(struct rte_security_session)
183f84076aSAnoob Joseph 
199a126e7cSVidya Sagar Velumuri struct cn10k_tls_opt {
209a126e7cSVidya Sagar Velumuri 	uint16_t pad_shift : 3;
219a126e7cSVidya Sagar Velumuri 	uint16_t enable_padding : 1;
229a126e7cSVidya Sagar Velumuri 	uint16_t tail_fetch_len : 2;
239a126e7cSVidya Sagar Velumuri 	uint16_t tls_ver : 2;
249a126e7cSVidya Sagar Velumuri 	uint16_t is_write : 1;
259a126e7cSVidya Sagar Velumuri 	uint16_t mac_len : 7;
269a126e7cSVidya Sagar Velumuri };
279a126e7cSVidya Sagar Velumuri 
__rte_aligned(ROC_ALIGN)28*27595cd8STyler Retzlaff struct __rte_aligned(ROC_ALIGN) cn10k_sec_session {
293f84076aSAnoob Joseph 	uint8_t rte_sess[SEC_SESS_SIZE];
303f84076aSAnoob Joseph 
313f84076aSAnoob Joseph 	/** PMD private space */
32f343cddfSAnoob Joseph 	alignas(RTE_CACHE_LINE_MIN_SIZE) RTE_MARKER cacheline1;
333f84076aSAnoob Joseph 
343f84076aSAnoob Joseph 	/** Pre-populated CPT inst words */
353f84076aSAnoob Joseph 	struct cnxk_cpt_inst_tmpl inst;
363f84076aSAnoob Joseph 	uint16_t max_extended_len;
373f84076aSAnoob Joseph 	uint16_t iv_offset;
38f343cddfSAnoob Joseph 	uint8_t proto;
393f84076aSAnoob Joseph 	uint8_t iv_length;
403f84076aSAnoob Joseph 	union {
419a126e7cSVidya Sagar Velumuri 		uint16_t u16;
429a126e7cSVidya Sagar Velumuri 		struct cn10k_tls_opt tls_opt;
433f84076aSAnoob Joseph 		struct {
443f84076aSAnoob Joseph 			uint8_t ip_csum;
45f343cddfSAnoob Joseph 			uint8_t is_outbound : 1;
463f84076aSAnoob Joseph 		} ipsec;
473f84076aSAnoob Joseph 	};
483f84076aSAnoob Joseph 	/** Queue pair */
493f84076aSAnoob Joseph 	struct cnxk_cpt_qp *qp;
503f84076aSAnoob Joseph 	/** Userdata to be set for Rx inject */
513f84076aSAnoob Joseph 	void *userdata;
523f84076aSAnoob Joseph 
533f84076aSAnoob Joseph 	/**
543f84076aSAnoob Joseph 	 * End of SW mutable area
553f84076aSAnoob Joseph 	 */
563f84076aSAnoob Joseph 	union {
573f84076aSAnoob Joseph 		struct cn10k_ipsec_sa sa;
58ffa1a704SVidya Sagar Velumuri 		struct cn10k_tls_record tls_rec;
593f84076aSAnoob Joseph 	};
60*27595cd8STyler Retzlaff };
613f84076aSAnoob Joseph 
623f84076aSAnoob Joseph static inline uint64_t
cpt_inst_w7_get(struct roc_cpt * roc_cpt,void * cptr)633f84076aSAnoob Joseph cpt_inst_w7_get(struct roc_cpt *roc_cpt, void *cptr)
643f84076aSAnoob Joseph {
653f84076aSAnoob Joseph 	union cpt_inst_w7 w7;
663f84076aSAnoob Joseph 
673f84076aSAnoob Joseph 	w7.u64 = 0;
683f84076aSAnoob Joseph 	w7.s.egrp = roc_cpt->eng_grp[CPT_ENG_TYPE_IE];
693f84076aSAnoob Joseph 	w7.s.ctx_val = 1;
703f84076aSAnoob Joseph 	w7.s.cptr = (uint64_t)cptr;
713f84076aSAnoob Joseph 	rte_mb();
723f84076aSAnoob Joseph 
733f84076aSAnoob Joseph 	return w7.u64;
743f84076aSAnoob Joseph }
753f84076aSAnoob Joseph 
763f84076aSAnoob Joseph void cn10k_sec_ops_override(void);
773f84076aSAnoob Joseph 
783f84076aSAnoob Joseph #endif /* __CN10K_CRYPTODEV_SEC_H__ */
79