1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright (C) 2020 Marvell International Ltd.
5 #ifndef __OTX2_ETHDEV_SEC_H__
6 #define __OTX2_ETHDEV_SEC_H__
8 #include <rte_ethdev.h>
10 #include "otx2_ipsec_fp.h"
12 #define OTX2_CPT_RES_ALIGN 16
13 #define OTX2_NIX_SEND_DESC_ALIGN 16
14 #define OTX2_CPT_INST_SIZE 64
16 #define OTX2_CPT_EGRP_INLINE_IPSEC 1
18 #define OTX2_CPT_OP_INLINE_IPSEC_OUTB (0x40 | 0x25)
19 #define OTX2_CPT_OP_INLINE_IPSEC_INB (0x40 | 0x26)
20 #define OTX2_CPT_OP_WRITE_HMAC_IPAD_OPAD (0x40 | 0x27)
22 #define OTX2_SEC_CPT_COMP_GOOD 0x1
23 #define OTX2_SEC_UC_COMP_GOOD 0x0
24 #define OTX2_SEC_COMP_GOOD (OTX2_SEC_UC_COMP_GOOD << 8 | \
25 OTX2_SEC_CPT_COMP_GOOD)
32 uint64_t uc_compcode:8;
34 uint64_t reserved_17_63:47;
35 uint64_t reserved_64_127;
41 struct otx2_cpt_inst_s {
47 uint64_t nixtx_addr : 60;
49 uint64_t res_addr : 64;
54 uint64_t rsvd_175_172 : 4;
55 uint64_t rvu_pf_func : 16;
58 uint64_t rsvd_194_193 : 2;
59 uint64_t wqe_ptr : 61;
78 * Security session for inline IPsec protocol offload. This is private data of
81 struct otx2_sec_session_ipsec_ip {
85 * Inbound SA would accessed by crypto block. And so the memory
86 * is allocated differently and shared with the h/w. Only
87 * holding a pointer to this memory in the session private
92 struct otx2_ipsec_fp_out_sa out_sa;
95 /* Address of CPT LMTLINE */
97 /* CPT LF enqueue register address */
98 rte_iova_t cpt_nq_reg;
100 /* Pre calculated lengths and data for a session */
103 uint8_t roundup_byte;
115 /* CPT QP used by SA */
116 struct otx2_cpt_qp *qp;
119 struct otx2_sec_session_ipsec {
120 struct otx2_sec_session_ipsec_ip ip;
123 struct otx2_sec_session {
124 struct otx2_sec_session_ipsec ipsec;
126 /**< Userdata registered by the application */
127 } __rte_cache_aligned;
129 int otx2_eth_sec_ctx_create(struct rte_eth_dev *eth_dev);
131 void otx2_eth_sec_ctx_destroy(struct rte_eth_dev *eth_dev);
133 int otx2_eth_sec_update_tag_type(struct rte_eth_dev *eth_dev);
135 int otx2_eth_sec_init(struct rte_eth_dev *eth_dev);
137 void otx2_eth_sec_fini(struct rte_eth_dev *eth_dev);
139 #endif /* __OTX2_ETHDEV_SEC_H__ */