From patchwork Wed Jun 2 15:56:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anoob Joseph X-Patchwork-Id: 93804 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D12ACA0524; Wed, 2 Jun 2021 17:57:44 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D277740FDF; Wed, 2 Jun 2021 17:57:28 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 0A30B410E5 for ; Wed, 2 Jun 2021 17:57:26 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 152FpLdg019794; Wed, 2 Jun 2021 08:57:26 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=Cv8HOXez++Is9Wb6clDSpv0IeZF1w9a8zlfYdtw8Mdw=; b=ODQpzL4fp0TFHwAlkyQmWPvRYqtKohZjVmeS/TmXUFCuia9rhujoHawp7B8WPXrskBY8 qRd3DMv5QVqaktaUcWjuRipEIpyeMHSgjuKzClCiRyRz0I7qrIjWRzKCoeeuMZDAAA4n dKs16BYiDFIzvOQU3Y8nF4HvI7iPkuXPxVT5bNxQ88U38P/ge3a8hiC0kpXwx3Eo+zy4 Bbvr/4rgHHwqo7LYujzLBK5SCWXibY2JH4y47cQOzRqG35zW6v6KYupZsAg5b/mdg+aB 62bFhrHRhG/oS210fziv5qKxDmScA1TTvpgoRWi4ybyxY+tXB7C0fsuf5ZCf/4Mdyva2 AA== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0b-0016f401.pphosted.com with ESMTP id 38wufguhes-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Wed, 02 Jun 2021 08:57:26 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 2 Jun 2021 08:57:24 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 2 Jun 2021 08:57:23 -0700 Received: from HY-LT1002.marvell.com (unknown [10.193.70.1]) by maili.marvell.com (Postfix) with ESMTP id A512C3F703F; Wed, 2 Jun 2021 08:57:20 -0700 (PDT) From: Anoob Joseph To: Akhil Goyal , Thomas Monjalon CC: Srujana Challa , Jerin Jacob , Ankur Dwivedi , Tejasree Kondoj , , Anoob Joseph Date: Wed, 2 Jun 2021 21:26:22 +0530 Message-ID: <1622649385-22652-9-git-send-email-anoobj@marvell.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1622649385-22652-1-git-send-email-anoobj@marvell.com> References: <1622649385-22652-1-git-send-email-anoobj@marvell.com> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: YmLpha2PF9lZVte71csXRhlD6K59GmwF X-Proofpoint-GUID: YmLpha2PF9lZVte71csXRhlD6K59GmwF X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391, 18.0.761 definitions=2021-06-02_08:2021-06-02, 2021-06-02 signatures=0 Subject: [dpdk-dev] [PATCH 08/11] common/cnxk: add IE microcode defines X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Srujana Challa Microcode IE opcodes support IPsec operations. Add defines and structs defined by microcode. Signed-off-by: Anoob Joseph Signed-off-by: Srujana Challa Signed-off-by: Tejasree Kondoj --- drivers/common/cnxk/roc_api.h | 2 + drivers/common/cnxk/roc_ie.h | 19 ++ drivers/common/cnxk/roc_ie_on.h | 18 ++ drivers/common/cnxk/roc_ie_ot.h | 588 +++++++++++++++++++++++++++++++++++++ drivers/common/cnxk/roc_platform.h | 1 + 5 files changed, 628 insertions(+) create mode 100644 drivers/common/cnxk/roc_ie.h create mode 100644 drivers/common/cnxk/roc_ie_on.h create mode 100644 drivers/common/cnxk/roc_ie_ot.h diff --git a/drivers/common/cnxk/roc_api.h b/drivers/common/cnxk/roc_api.h index 6511614..d545bb9 100644 --- a/drivers/common/cnxk/roc_api.h +++ b/drivers/common/cnxk/roc_api.h @@ -110,6 +110,8 @@ #include "roc_cpt.h" /* CPT microcode */ +#include "roc_ie_on.h" +#include "roc_ie_ot.h" #include "roc_se.h" #endif /* _ROC_API_H_ */ diff --git a/drivers/common/cnxk/roc_ie.h b/drivers/common/cnxk/roc_ie.h new file mode 100644 index 0000000..a330ea1 --- /dev/null +++ b/drivers/common/cnxk/roc_ie.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#ifndef __ROC_IE_H__ +#define __ROC_IE_H__ + +/* CNXK IPSEC helper macros */ +#define ROC_IE_AH_HDR_LEN 12 +#define ROC_IE_AES_GCM_IV_LEN 8 +#define ROC_IE_AES_GCM_MAC_LEN 16 +#define ROC_IE_AES_CBC_IV_LEN 16 +#define ROC_IE_SHA1_HMAC_LEN 12 +#define ROC_IE_AUTH_KEY_LEN_MAX 64 + +#define ROC_IE_AES_GCM_ROUNDUP_BYTE_LEN 4 +#define ROC_IE_AES_CBC_ROUNDUP_BYTE_LEN 16 + +#endif /* __ROC_IE_H__ */ diff --git a/drivers/common/cnxk/roc_ie_on.h b/drivers/common/cnxk/roc_ie_on.h new file mode 100644 index 0000000..72ea037 --- /dev/null +++ b/drivers/common/cnxk/roc_ie_on.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#ifndef __ROC_IE_ON_H__ +#define __ROC_IE_ON_H__ + +/* CN9K IPSEC LA opcodes */ +#define ROC_IE_ONL_MAJOR_OP_WRITE_IPSEC_OUTBOUND 0x20 +#define ROC_IE_ONL_MAJOR_OP_WRITE_IPSEC_INBOUND 0x21 +#define ROC_IE_ONL_MAJOR_OP_PROCESS_OUTBOUND_IPSEC 0x23 +#define ROC_IE_ONL_MAJOR_OP_PROCESS_INBOUND_IPSEC 0x24 + +/* CN9K IPSEC FP opcodes */ +#define ROC_IE_ONF_MAJOR_OP_PROCESS_OUTBOUND_IPSEC 0x25 +#define ROC_IE_ONF_MAJOR_OP_PROCESS_INBOUND_IPSEC 0x26 + +#endif /* __ROC_IE_ON_H__ */ diff --git a/drivers/common/cnxk/roc_ie_ot.h b/drivers/common/cnxk/roc_ie_ot.h new file mode 100644 index 0000000..1b382de --- /dev/null +++ b/drivers/common/cnxk/roc_ie_ot.h @@ -0,0 +1,588 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#ifndef __ROC_IE_OT_H__ +#define __ROC_IE_OT_H__ + +/* CN10K IPSEC opcodes */ +#define ROC_IE_OT_MAJOR_OP_PROCESS_OUTBOUND_IPSEC 0x28 +#define ROC_IE_OT_MAJOR_OP_PROCESS_INBOUND_IPSEC 0x29 + +enum roc_ie_ot_ucc_ipsec { + ROC_IE_OT_UCC_SUCCESS = 0x00, + ROC_IE_OT_UCC_SUCCESS_PKT_IP_GOODCSUM = 0x02, + ROC_IE_OT_UCC_ERR_SA_INVAL = 0x03, + ROC_IE_OT_UCC_SUCCESS_PKT_IP_BADCSUM = 0x04, + ROC_IE_OT_UCC_ERR_SA_EXPIRED = 0x05, + ROC_IE_OT_UCC_SUCCESS_PKT_L4_GOODCSUM = 0x06, + ROC_IE_OT_UCC_ERR_SA_OVERFLOW = 0x07, + ROC_IE_OT_UCC_SUCCESS_PKT_L4_BADCSUM = 0x08, + ROC_IE_OT_UCC_ERR_SA_ESP_BAD_ALGO = 0x09, + ROC_IE_OT_UCC_SUCCESS_PKT_UDPESP_NZCSUM = 0x0a, + ROC_IE_OT_UCC_ERR_SA_ESP_BAD_KEYS = 0x0b, + ROC_IE_OT_UCC_SUCCESS_SA_SOFTEXP_FIRST = 0x0c, + ROC_IE_OT_UCC_ERR_SA_AH_BAD_ALGO = 0x0d, + ROC_IE_OT_UCC_SUCCESS_SA_SOFTEXP_AGAIN = 0x0e, + ROC_IE_OT_UCC_ERR_SA_AH_BAD_KEYS = 0x0f, + ROC_IE_OT_UCC_ERR_SA_BAD_IP = 0x11, + ROC_IE_OT_UCC_ERR_SA_BAD_CTX = 0x13, + ROC_IE_OT_UCC_ERR_AOP_IPSEC = 0x17, + ROC_IE_OT_UCC_ERR_PKT_IP = 0x23, + ROC_IE_OT_UCC_ERR_PKT_IP6_BAD_EXT = 0x25, + ROC_IE_OT_UCC_ERR_PKT_IP6_HBH = 0x27, + ROC_IE_OT_UCC_ERR_PKT_IP6_BIGEXT = 0x29, + ROC_IE_OT_UCC_ERR_PKT_IP_FRAG = 0x2b, + ROC_IE_OT_UCC_ERR_PKT_IP_ULP = 0x2d, + ROC_IE_OT_UCC_ERR_PKT_SA_MISMATCH = 0x2f, + ROC_IE_OT_UCC_ERR_PKT_SPI_MISMATCH = 0x31, + ROC_IE_OT_UCC_ERR_PKT_ESP_BADPAD = 0x33, + ROC_IE_OT_UCC_ERR_PKT_BADICV = 0x35, + ROC_IE_OT_UCC_ERR_PKT_REPLAY_SEQ = 0x37, + ROC_IE_OT_UCC_ERR_PKT_REPLAY_WINDOW = 0x39, + ROC_IE_OT_UCC_ERR_PKT_BADNH = 0x3b, + ROC_IE_OT_UCC_ERR_PKT_SA_PORT_MISMATCH = 0x3d, +}; + +enum { + ROC_IE_OT_SA_AR_WIN_DISABLED = 0, + ROC_IE_OT_SA_AR_WIN_64 = 1, + ROC_IE_OT_SA_AR_WIN_128 = 2, + ROC_IE_OT_SA_AR_WIN_256 = 3, + ROC_IE_OT_SA_AR_WIN_512 = 4, + ROC_IE_OT_SA_AR_WIN_1024 = 5, + ROC_IE_OT_SA_AR_WIN_2048 = 6, + ROC_IE_OT_SA_AR_WIN_4096 = 7, +}; + +enum { + ROC_IE_OT_SA_PKT_FMT_FULL = 0, + ROC_IE_OT_SA_PKT_FMT_META = 1, +}; + +enum { + ROC_IE_OT_SA_PKT_OUTPUT_DECRYPTED = 0, + ROC_IE_OT_SA_PKT_OUTPUT_NO_FRAG = 1, + ROC_IE_OT_SA_PKT_OUTPUT_HW_BASED_DEFRAG = 2, + ROC_IE_OT_SA_PKT_OUTPUT_UCODE_BASED_DEFRAG = 3, +}; + +enum { + ROC_IE_OT_SA_DEFRAG_ALL = 0, + ROC_IE_OT_SA_DEFRAG_IN_ORDER = 1, + ROC_IE_OT_SA_DEFRAG_IN_REV_ORDER = 2, +}; + +enum { + ROC_IE_OT_SA_IV_SRC_DEFAULT = 0, + ROC_IE_OT_SA_IV_SRC_ENC_CTR = 1, + ROC_IE_OT_SA_IV_SRC_FROM_SA = 2, +}; + +enum { + ROC_IE_OT_SA_COPY_FROM_SA = 0, + ROC_IE_OT_SA_COPY_FROM_INNER_IP_HDR = 1, +}; + +enum { + ROC_IE_OT_SA_DIR_INBOUND = 0, + ROC_IE_OT_SA_DIR_OUTBOUND = 1, +}; + +enum { + ROC_IE_OT_SA_IP_VERSION_4 = 0, + ROC_IE_OT_SA_IP_VERSION_6 = 1, +}; + +enum { + ROC_IE_OT_SA_MODE_TRANSPORT = 0, + ROC_IE_OT_SA_MODE_TUNNEL = 1, +}; + +enum { + ROC_IE_OT_SA_PROTOCOL_AH = 0, + ROC_IE_OT_SA_PROTOCOL_ESP = 1, +}; + +enum { + ROC_IE_OT_SA_AES_KEY_LEN_128 = 1, + ROC_IE_OT_SA_AES_KEY_LEN_192 = 2, + ROC_IE_OT_SA_AES_KEY_LEN_256 = 3, +}; + +enum { + ROC_IE_OT_SA_ENC_NULL = 0, + ROC_IE_OT_SA_ENC_3DES_CBC = 2, + ROC_IE_OT_SA_ENC_AES_CBC = 3, + ROC_IE_OT_SA_ENC_AES_CTR = 4, + ROC_IE_OT_SA_ENC_AES_GCM = 5, + ROC_IE_OT_SA_ENC_AES_CCM = 6, +}; + +enum { + ROC_IE_OT_SA_AUTH_NULL = 0, + ROC_IE_OT_SA_AUTH_SHA1 = 2, + ROC_IE_OT_SA_AUTH_SHA2_256 = 4, + ROC_IE_OT_SA_AUTH_SHA2_384 = 5, + ROC_IE_OT_SA_AUTH_SHA2_512 = 6, + ROC_IE_OT_SA_AUTH_AES_GMAC = 7, + ROC_IE_OT_SA_AUTH_AES_XCBC_128 = 8, +}; + +enum { + ROC_IE_OT_SA_ENCAP_NONE = 0, + ROC_IE_OT_SA_ENCAP_UDP = 1, + ROC_IE_OT_SA_ENCAP_TCP = 2, +}; + +enum { + ROC_IE_OT_SA_LIFE_UNIT_OCTETS = 0, + ROC_IE_OT_SA_LIFE_UNIT_PKTS = 1, +}; + +enum { + ROC_IE_OT_SA_IP_HDR_VERIFY_DISABLED = 0, + ROC_IE_OT_SA_IP_HDR_VERIFY_DST_ADDR = 1, + ROC_IE_OT_SA_IP_HDR_VERIFY_SRC_DST_ADDR = 2, +}; + +enum { + ROC_IE_OT_REAS_STS_SUCCESS = 0, + ROC_IE_OT_REAS_STS_TIMEOUT = 1, + ROC_IE_OT_REAS_STS_EVICT = 2, + ROC_IE_OT_REAS_STS_BAD_ORDER = 3, + ROC_IE_OT_REAS_STS_TOO_MANY = 4, + ROC_IE_OT_REAS_STS_HSH_EVICT = 5, + ROC_IE_OT_REAS_STS_OVERLAP = 6, + ROC_IE_OT_REAS_STS_ZOMBIE = 7, + ROC_IE_OT_REAS_STS_L3P_ERR = 8, + ROC_IE_OT_REAS_STS_MAX = 9 +}; +/* Context units in bytes */ +#define ROC_CTX_UNIT_8B 8 +#define ROC_CTX_UNIT_128B 128 +#define ROC_CTX_MAX_CKEY_LEN 32 +#define ROC_CTX_MAX_OPAD_IPAD_LEN 128 + +/* Anti reply window size supported */ +#define ROC_AR_WIN_SIZE_MIN 64 +#define ROC_AR_WIN_SIZE_MAX 4096 +#define ROC_LOG_MIN_AR_WIN_SIZE_M1 5 + +/* u64 array size to fit anti replay window bits */ +#define ROC_AR_WINBITS_SZ \ + (PLT_ALIGN_CEIL(ROC_AR_WIN_SIZE_MAX, BITS_PER_LONG_LONG) / \ + BITS_PER_LONG_LONG) + +/* Common bit fields between inbound and outbound SA */ +union roc_ot_ipsec_sa_word2 { + struct { + uint64_t valid : 1; + uint64_t dir : 1; + uint64_t outer_ip_ver : 1; + uint64_t rsvd0 : 1; + uint64_t mode : 1; + uint64_t protocol : 1; + uint64_t aes_key_len : 2; + + uint64_t enc_type : 3; + uint64_t life_unit : 1; + uint64_t auth_type : 4; + + uint64_t encap_type : 2; + uint64_t rsvd1 : 6; + + uint64_t rsvd2 : 7; + uint64_t async_mode : 1; + + uint64_t spi : 32; + } s; + uint64_t u64; +}; + +PLT_STATIC_ASSERT(sizeof(union roc_ot_ipsec_sa_word2) == 1 * sizeof(uint64_t)); + +union roc_ot_ipsec_outer_ip_hdr { + struct { + uint32_t dst_addr; + uint32_t src_addr; + } ipv4; + struct { + uint8_t src_addr[16]; + uint8_t dst_addr[16]; + } ipv6; +}; + +struct roc_ot_ipsec_inb_ctx_update_reg { + uint64_t ar_base; + uint64_t ar_valid_mask; + uint64_t hard_life; + uint64_t soft_life; + uint64_t mib_octs; + uint64_t mib_pkts; + uint64_t ar_winbits[ROC_AR_WINBITS_SZ]; +}; + +union roc_ot_ipsec_outb_iv { + uint64_t u64[2]; + uint8_t iv_dbg[16]; + struct { + uint8_t iv_dbg1[4]; + uint8_t salt[4]; + + uint32_t rsvd; + uint8_t iv_dbg2[4]; + } s; +}; + +struct roc_ot_ipsec_outb_ctx_update_reg { + uint64_t rsvd; + uint64_t esn_val; + uint64_t hard_life; + uint64_t soft_life; + uint64_t mib_octs; + uint64_t mib_pkts; +}; + +struct roc_ot_ipsec_inb_sa { + /* Word0 */ + union { + struct { + uint64_t ar_win : 3; + uint64_t hard_life_dec : 1; + uint64_t soft_life_dec : 1; + uint64_t count_glb_octets : 1; + uint64_t count_glb_pkts : 1; + uint64_t count_mib_bytes : 1; + + uint64_t count_mib_pkts : 1; + uint64_t hw_ctx_off : 7; + + uint64_t ctx_id : 16; + + uint64_t orig_pkt_fabs : 1; + uint64_t orig_pkt_free : 1; + uint64_t pkind : 6; + + uint64_t rsvd0 : 1; + uint64_t et_ovrwr : 1; + uint64_t pkt_output : 2; + uint64_t pkt_format : 1; + uint64_t defrag_opt : 2; + uint64_t x2p_dst : 1; + + uint64_t ctx_push_size : 7; + uint64_t rsvd1 : 1; + + uint64_t ctx_hdr_size : 2; + uint64_t aop_valid : 1; + uint64_t rsvd2 : 1; + uint64_t ctx_size : 4; + } s; + uint64_t u64; + } w0; + + /* Word1 */ + union { + struct { + uint64_t orig_pkt_aura : 20; + uint64_t rsvd3 : 4; + uint64_t orig_pkt_foff : 8; + uint64_t cookie : 32; + } s; + uint64_t u64; + } w1; + + /* Word 2 */ + union { + struct { + uint64_t valid : 1; + uint64_t dir : 1; + uint64_t outer_ip_ver : 1; + uint64_t rsvd4 : 1; + uint64_t ipsec_mode : 1; + uint64_t ipsec_protocol : 1; + uint64_t aes_key_len : 2; + + uint64_t enc_type : 3; + uint64_t life_unit : 1; + uint64_t auth_type : 4; + + uint64_t encap_type : 2; + uint64_t et_ovrwr_ddr_en : 1; + uint64_t esn_en : 1; + uint64_t tport_l4_incr_csum : 1; + uint64_t ip_hdr_verify : 2; + uint64_t rsvd5 : 1; + + uint64_t rsvd6 : 7; + uint64_t async_mode : 1; + + uint64_t spi : 32; + } s; + uint64_t u64; + } w2; + + /* Word3 */ + uint64_t rsvd7; + + /* Word4 - Word7 */ + uint8_t cipher_key[ROC_CTX_MAX_CKEY_LEN]; + + /* Word8 - Word9 */ + union { + struct { + uint32_t rsvd8; + uint8_t salt[4]; + } s; + uint64_t u64; + } w8; + uint64_t rsvd9; + + /* Word10 */ + union { + struct { + uint64_t rsvd10 : 32; + uint64_t udp_src_port : 16; + uint64_t udp_dst_port : 16; + } s; + uint64_t u64; + } w10; + + /* Word11 - Word14 */ + union roc_ot_ipsec_outer_ip_hdr outer_hdr; + + /* Word15 - Word30 */ + uint8_t hmac_opad_ipad[ROC_CTX_MAX_OPAD_IPAD_LEN]; + + /* Word31 - Word100 */ + struct roc_ot_ipsec_inb_ctx_update_reg ctx; +}; + +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_inb_sa, w1) == + 1 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_inb_sa, w2) == + 2 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_inb_sa, cipher_key) == + 4 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_inb_sa, w8) == + 8 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_inb_sa, w10) == + 10 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_inb_sa, outer_hdr) == + 11 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_inb_sa, hmac_opad_ipad) == + 15 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_inb_sa, ctx) == + 31 * sizeof(uint64_t)); + +struct roc_ot_ipsec_outb_sa { + /* Word0 */ + union { + struct { + uint64_t esn_en : 1; + uint64_t ip_id : 1; + uint64_t rsvd0 : 1; + uint64_t hard_life_dec : 1; + uint64_t soft_life_dec : 1; + uint64_t count_glb_octets : 1; + uint64_t count_glb_pkts : 1; + uint64_t count_mib_bytes : 1; + + uint64_t count_mib_pkts : 1; + uint64_t hw_ctx_off : 7; + + uint64_t rsvd1 : 32; + + uint64_t ctx_push_size : 7; + uint64_t rsvd2 : 1; + + uint64_t ctx_hdr_size : 2; + uint64_t aop_valid : 1; + uint64_t rsvd3 : 1; + uint64_t ctx_size : 4; + } s; + uint64_t u64; + } w0; + + /* Word1 */ + union { + struct { + uint64_t rsvd4 : 32; + uint64_t cookie : 32; + } s; + uint64_t u64; + } w1; + + /* Word 2 */ + union { + struct { + uint64_t valid : 1; + uint64_t dir : 1; + uint64_t outer_ip_ver : 1; + uint64_t rsvd5 : 1; + uint64_t ipsec_mode : 1; + uint64_t ipsec_protocol : 1; + uint64_t aes_key_len : 2; + + uint64_t enc_type : 3; + uint64_t life_unit : 1; + uint64_t auth_type : 4; + + uint64_t encap_type : 2; + uint64_t ipv4_df_src_or_ipv6_flw_lbl_src : 1; + uint64_t dscp_src : 1; + uint64_t iv_src : 2; + uint64_t ipid_gen : 1; + uint64_t rsvd6 : 1; + + uint64_t rsvd7 : 7; + uint64_t async_mode : 1; + + uint64_t spi : 32; + } s; + uint64_t u64; + } w2; + + /* Word3 */ + uint64_t rsvd8; + + /* Word4 - Word7 */ + uint8_t cipher_key[ROC_CTX_MAX_CKEY_LEN]; + + /* Word8 - Word9 */ + union roc_ot_ipsec_outb_iv iv; + + /* Word10 */ + union { + struct { + uint64_t rsvd9 : 4; + uint64_t ipv4_df_or_ipv6_flw_lbl : 20; + + uint64_t dscp : 6; + uint64_t rsvd10 : 2; + + uint64_t udp_dst_port : 16; + + uint64_t udp_src_port : 16; + } s; + uint64_t u64; + } w10; + + /* Word11 - Word14 */ + union roc_ot_ipsec_outer_ip_hdr outer_hdr; + + /* Word15 - Word30 */ + uint8_t hmac_opad_ipad[ROC_CTX_MAX_OPAD_IPAD_LEN]; + + /* Word31 - Word36 */ + struct roc_ot_ipsec_outb_ctx_update_reg ctx; +}; + +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_outb_sa, w1) == + 1 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_outb_sa, w2) == + 2 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_outb_sa, cipher_key) == + 4 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_outb_sa, iv) == + 8 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_outb_sa, w10) == + 10 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_outb_sa, outer_hdr) == + 11 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_outb_sa, hmac_opad_ipad) == + 15 * sizeof(uint64_t)); +PLT_STATIC_ASSERT(offsetof(struct roc_ot_ipsec_outb_sa, ctx) == + 31 * sizeof(uint64_t)); + +struct roc_ot_cpt_parse_hdr_s { + /* WORD 0 */ + union { + uint64_t u64; + struct { + uint8_t pad_len : 3; + uint8_t num_frags : 3; + uint8_t pkt_out : 2; + + uint8_t err_sum : 1; + uint8_t reas_sts : 4; + uint8_t reserved_53 : 1; + uint8_t et_owr : 1; + uint8_t pkt_fmt : 1; + + uint16_t match_id : 16; + + uint32_t cookie : 32; + }; + } w0; + + /* WORD 1 */ + uint64_t wqe_ptr; + + /* WORD 2 */ + union { + uint64_t u64; + struct { + uint8_t fi_pad : 3; + uint8_t fi_offset : 5; + uint8_t il3_off; + uint16_t orig_pf_func; + uint16_t reserved_145_160; + uint16_t frag_age; + }; + } w2; + + /* WORD 3 */ + union { + uint64_t u64; + struct { + uint32_t spi; + uint16_t reserved_209_224; + uint8_t uc_ccode; + uint8_t hw_ccode; + }; + } w3; + + /* WORD 4 */ + union { + uint64_t u64; + uint64_t esn; + uint64_t frag1_wqe_ptr; + }; +}; + +union roc_ot_frag_info { + uint16_t info; + struct { + uint16_t f_off : 13; + uint16_t f_mf : 1; + uint16_t f_rsv : 2; + }; +}; + +struct roc_ot_cpt_frag_info_s { + /* WORD 0 */ + union { + uint64_t u64; + struct { + union roc_ot_frag_info f3; + union roc_ot_frag_info f2; + union roc_ot_frag_info f1; + union roc_ot_frag_info f0; + }; + } w0; + + /* WORD 1 */ + union { + uint64_t u64; + struct { + uint16_t frag_size3; + uint16_t frag_size2; + uint16_t frag_size1; + uint16_t frag_size0; + }; + } w1; +}; + +#endif /* __ROC_IE_OT_H__ */ diff --git a/drivers/common/cnxk/roc_platform.h b/drivers/common/cnxk/roc_platform.h index 524585f..97da87a 100644 --- a/drivers/common/cnxk/roc_platform.h +++ b/drivers/common/cnxk/roc_platform.h @@ -49,6 +49,7 @@ #define PLT_MODEL_MZ_NAME "roc_model_mz" #define PLT_CACHE_LINE_SIZE RTE_CACHE_LINE_SIZE #define BITMASK_ULL GENMASK_ULL +#define PLT_ALIGN_CEIL RTE_ALIGN_CEIL /** Divide ceil */ #define PLT_DIV_CEIL(x, y) \