numam-dpdk/drivers/net/octeontx2/otx2_ethdev_sec.h
Vamsi Attunuru fb9f56f3e3 net/octeontx2: sync inline tag type
Tag type configuration for the inline processed packets is set during
ethdev configuration, it might conflict with tag type configuration
done during Rx adapter configuration which would be setup later.

This conflict is fixed as part of flow rule creation by updating
tag type config of inline same as Rx adapter configured tag type.

Signed-off-by: Ankur Dwivedi <adwivedi@marvell.com>
Signed-off-by: Anoob Joseph <anoobj@marvell.com>
Signed-off-by: Archana Muniganti <marchana@marvell.com>
Signed-off-by: Tejasree Kondoj <ktejasree@marvell.com>
Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
2020-02-05 15:20:51 +01:00

140 lines
2.9 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright (C) 2020 Marvell International Ltd.
*/
#ifndef __OTX2_ETHDEV_SEC_H__
#define __OTX2_ETHDEV_SEC_H__
#include <rte_ethdev.h>
#include "otx2_ipsec_fp.h"
#define OTX2_CPT_RES_ALIGN 16
#define OTX2_NIX_SEND_DESC_ALIGN 16
#define OTX2_CPT_INST_SIZE 64
#define OTX2_CPT_EGRP_INLINE_IPSEC 1
#define OTX2_CPT_OP_INLINE_IPSEC_OUTB (0x40 | 0x25)
#define OTX2_CPT_OP_INLINE_IPSEC_INB (0x40 | 0x26)
#define OTX2_CPT_OP_WRITE_HMAC_IPAD_OPAD (0x40 | 0x27)
#define OTX2_SEC_CPT_COMP_GOOD 0x1
#define OTX2_SEC_UC_COMP_GOOD 0x0
#define OTX2_SEC_COMP_GOOD (OTX2_SEC_UC_COMP_GOOD << 8 | \
OTX2_SEC_CPT_COMP_GOOD)
/* CPT Result */
struct otx2_cpt_res {
union {
struct {
uint64_t compcode:8;
uint64_t uc_compcode:8;
uint64_t doneint:1;
uint64_t reserved_17_63:47;
uint64_t reserved_64_127;
};
uint16_t u16[8];
};
};
struct otx2_cpt_inst_s {
union {
struct {
/* W0 */
uint64_t nixtxl : 3;
uint64_t doneint : 1;
uint64_t nixtx_addr : 60;
/* W1 */
uint64_t res_addr : 64;
/* W2 */
uint64_t tag : 32;
uint64_t tt : 2;
uint64_t grp : 10;
uint64_t rsvd_175_172 : 4;
uint64_t rvu_pf_func : 16;
/* W3 */
uint64_t qord : 1;
uint64_t rsvd_194_193 : 2;
uint64_t wqe_ptr : 61;
/* W4 */
uint64_t dlen : 16;
uint64_t param2 : 16;
uint64_t param1 : 16;
uint64_t opcode : 16;
/* W5 */
uint64_t dptr : 64;
/* W6 */
uint64_t rptr : 64;
/* W7 */
uint64_t cptr : 61;
uint64_t egrp : 3;
};
uint64_t u64[8];
};
};
/*
* Security session for inline IPsec protocol offload. This is private data of
* inline capable PMD.
*/
struct otx2_sec_session_ipsec_ip {
RTE_STD_C11
union {
/*
* Inbound SA would accessed by crypto block. And so the memory
* is allocated differently and shared with the h/w. Only
* holding a pointer to this memory in the session private
* space.
*/
void *in_sa;
/* Outbound SA */
struct otx2_ipsec_fp_out_sa out_sa;
};
/* Address of CPT LMTLINE */
void *cpt_lmtline;
/* CPT LF enqueue register address */
rte_iova_t cpt_nq_reg;
/* Pre calculated lengths and data for a session */
uint8_t partial_len;
uint8_t roundup_len;
uint8_t roundup_byte;
uint16_t ip_id;
union {
uint64_t esn;
struct {
uint32_t seq;
uint32_t esn_hi;
};
};
uint64_t inst_w7;
/* CPT QP used by SA */
struct otx2_cpt_qp *qp;
};
struct otx2_sec_session_ipsec {
struct otx2_sec_session_ipsec_ip ip;
};
struct otx2_sec_session {
struct otx2_sec_session_ipsec ipsec;
void *userdata;
/**< Userdata registered by the application */
} __rte_cache_aligned;
int otx2_eth_sec_ctx_create(struct rte_eth_dev *eth_dev);
void otx2_eth_sec_ctx_destroy(struct rte_eth_dev *eth_dev);
int otx2_eth_sec_update_tag_type(struct rte_eth_dev *eth_dev);
int otx2_eth_sec_init(struct rte_eth_dev *eth_dev);
void otx2_eth_sec_fini(struct rte_eth_dev *eth_dev);
#endif /* __OTX2_ETHDEV_SEC_H__ */