1c045d2e5SAnoob Joseph /* SPDX-License-Identifier: BSD-3-Clause 2c045d2e5SAnoob Joseph * Copyright(C) 2021 Marvell. 3c045d2e5SAnoob Joseph */ 4c045d2e5SAnoob Joseph 5c045d2e5SAnoob Joseph #ifndef _ROC_CPT_H_ 6c045d2e5SAnoob Joseph #define _ROC_CPT_H_ 7c045d2e5SAnoob Joseph 8fdbec406SAnoob Joseph #include "hw/cpt.h" 9fdbec406SAnoob Joseph 10fdbec406SAnoob Joseph #include "roc_platform.h" 11fdbec406SAnoob Joseph 121132ad0fSKiran Kumar K #define ROC_AE_CPT_BLOCK_TYPE1 0 131132ad0fSKiran Kumar K #define ROC_AE_CPT_BLOCK_TYPE2 1 141132ad0fSKiran Kumar K 157c67c489SNithin Dabilpuram #define ROC_LOADFVC_MAJOR_OP 0x01UL 167c67c489SNithin Dabilpuram #define ROC_LOADFVC_MINOR_OP 0x08UL 177c67c489SNithin Dabilpuram 18c045d2e5SAnoob Joseph /* Default engine groups */ 19c045d2e5SAnoob Joseph #define ROC_CPT_DFLT_ENG_GRP_SE 0UL 20c045d2e5SAnoob Joseph #define ROC_CPT_DFLT_ENG_GRP_SE_IE 1UL 21c045d2e5SAnoob Joseph #define ROC_CPT_DFLT_ENG_GRP_AE 2UL 22c045d2e5SAnoob Joseph 23c045d2e5SAnoob Joseph #define ROC_CPT_MAX_LFS 64 247658d035STejasree Kondoj #define ROC_CPT_MAX_BLKS 2 25497d780eSAnoob Joseph #define ROC_CN10K_CPT_INST_DW_M1 \ 26497d780eSAnoob Joseph ((uint64_t)(((sizeof(struct cpt_inst_s) / 16) - 1) & 0x7)) 27497d780eSAnoob Joseph #define ROC_CN10K_TWO_CPT_INST_DW_M1 \ 28497d780eSAnoob Joseph ((uint64_t)(((sizeof(struct cpt_inst_s) * 2 / 16) - 1) & 0x7)) 29497d780eSAnoob Joseph 30497d780eSAnoob Joseph /* Vector of sizes in the burst of 16 CPT inst except first in 63:19 of 31497d780eSAnoob Joseph * APT_LMT_ARG_S 32497d780eSAnoob Joseph */ 33497d780eSAnoob Joseph #define ROC_CN10K_CPT_LMT_ARG \ 34d935d82eSAnoob Joseph (ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 0) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 1) | \ 35d935d82eSAnoob Joseph ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 2) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 3) | \ 36d935d82eSAnoob Joseph ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 4) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 5) | \ 37d935d82eSAnoob Joseph ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 6) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 7) | \ 38d935d82eSAnoob Joseph ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 8) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 9) | \ 39d935d82eSAnoob Joseph ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 10) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 11) | \ 40d935d82eSAnoob Joseph ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 12) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 13) | \ 41497d780eSAnoob Joseph ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 14)) 42c045d2e5SAnoob Joseph 43d935d82eSAnoob Joseph /* Vector of sizes in the burst of 2 * 16 CPT inst except first in 63:19 of 44d935d82eSAnoob Joseph * APT_LMT_ARG_S 45d935d82eSAnoob Joseph */ 46d935d82eSAnoob Joseph #define ROC_CN10K_DUAL_CPT_LMT_ARG \ 47d935d82eSAnoob Joseph (ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 0) | \ 48d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 1) | \ 49d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 2) | \ 50d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 3) | \ 51d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 4) | \ 52d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 5) | \ 53d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 6) | \ 54d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 7) | \ 55d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 8) | \ 56d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 9) | \ 57d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 10) | \ 58d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 11) | \ 59d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 12) | \ 60d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 13) | \ 61d935d82eSAnoob Joseph ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 14)) 62d935d82eSAnoob Joseph 63a4585931SKiran Kumar K /* CPT helper macros */ 64a4585931SKiran Kumar K #define ROC_CPT_AH_HDR_LEN 12 65a4585931SKiran Kumar K #define ROC_CPT_AES_GCM_IV_LEN 8 66a4585931SKiran Kumar K #define ROC_CPT_AES_GCM_MAC_LEN 16 67246dea7eSArchana Muniganti #define ROC_CPT_AES_CCM_CTR_LEN 4 68a4585931SKiran Kumar K #define ROC_CPT_AES_CBC_IV_LEN 16 69a4585931SKiran Kumar K #define ROC_CPT_SHA1_HMAC_LEN 12 70b07ee12fSArchana Muniganti #define ROC_CPT_SHA2_HMAC_LEN 16 7105be867bSAnoob Joseph #define ROC_CPT_DES_IV_LEN 8 72a4585931SKiran Kumar K 73a4585931SKiran Kumar K #define ROC_CPT_DES3_KEY_LEN 24 74a4585931SKiran Kumar K #define ROC_CPT_AES128_KEY_LEN 16 75a4585931SKiran Kumar K #define ROC_CPT_AES192_KEY_LEN 24 76a4585931SKiran Kumar K #define ROC_CPT_AES256_KEY_LEN 32 77a4585931SKiran Kumar K #define ROC_CPT_MD5_KEY_LENGTH 16 78a4585931SKiran Kumar K #define ROC_CPT_SHA1_KEY_LENGTH 20 79a4585931SKiran Kumar K #define ROC_CPT_SHA256_KEY_LENGTH 32 80a4585931SKiran Kumar K #define ROC_CPT_SHA384_KEY_LENGTH 48 81a4585931SKiran Kumar K #define ROC_CPT_SHA512_KEY_LENGTH 64 82df34ede8SAnoob Joseph #define ROC_CPT_AES_XCBC_KEY_LENGTH 16 83a4585931SKiran Kumar K #define ROC_CPT_AUTH_KEY_LEN_MAX 64 84a4585931SKiran Kumar K 85a4585931SKiran Kumar K #define ROC_CPT_DES_BLOCK_LENGTH 8 86a4585931SKiran Kumar K #define ROC_CPT_AES_BLOCK_LENGTH 16 87a4585931SKiran Kumar K 88a4585931SKiran Kumar K /* Salt length for AES-CTR/GCM/CCM and AES-GMAC */ 89a4585931SKiran Kumar K #define ROC_CPT_SALT_LEN 4 90a4585931SKiran Kumar K 91a4585931SKiran Kumar K #define ROC_CPT_ESP_HDR_LEN 8 92a4585931SKiran Kumar K #define ROC_CPT_ESP_TRL_LEN 2 93a4585931SKiran Kumar K #define ROC_CPT_AH_HDR_LEN 12 94a4585931SKiran Kumar K #define ROC_CPT_TUNNEL_IPV4_HDR_LEN 20 95a4585931SKiran Kumar K #define ROC_CPT_TUNNEL_IPV6_HDR_LEN 40 96a4585931SKiran Kumar K 972a85deceSNithin Dabilpuram #define ROC_CPT_CCM_AAD_DATA 1 982a85deceSNithin Dabilpuram #define ROC_CPT_CCM_MSG_LEN 4 992a85deceSNithin Dabilpuram #define ROC_CPT_CCM_ICV_LEN 16 1002a85deceSNithin Dabilpuram #define ROC_CPT_CCM_FLAGS \ 1012a85deceSNithin Dabilpuram ((ROC_CPT_CCM_AAD_DATA << 6) | \ 1022a85deceSNithin Dabilpuram (((ROC_CPT_CCM_ICV_LEN - 2) / 2) << 3) | (ROC_CPT_CCM_MSG_LEN - 1)) 1032a85deceSNithin Dabilpuram #define ROC_CPT_CCM_SALT_LEN 3 1042a85deceSNithin Dabilpuram 10571213a8bSSrujana Challa #define ROC_CPT_RES_ALIGN 16 10671213a8bSSrujana Challa 1077658d035STejasree Kondoj enum { 1087658d035STejasree Kondoj ROC_CPT_REVISION_ID_83XX = 0, 1097658d035STejasree Kondoj ROC_CPT_REVISION_ID_96XX_B0 = 1, 1107658d035STejasree Kondoj ROC_CPT_REVISION_ID_96XX_C0 = 2, 1117658d035STejasree Kondoj ROC_CPT_REVISION_ID_98XX = 3, 1127658d035STejasree Kondoj ROC_CPT_REVISION_ID_106XX = 4, 1137658d035STejasree Kondoj }; 1147658d035STejasree Kondoj 115497d780eSAnoob Joseph struct roc_cpt_lmtline { 116497d780eSAnoob Joseph uint64_t io_addr; 117497d780eSAnoob Joseph uint64_t *fc_addr; 118497d780eSAnoob Joseph uintptr_t lmt_base; 11953668249SAnoob Joseph uint32_t fc_thresh; 120497d780eSAnoob Joseph }; 121497d780eSAnoob Joseph 122ed135040SArchana Muniganti struct roc_cpt_lf { 123ed135040SArchana Muniganti /* Input parameters */ 124ed135040SArchana Muniganti uint16_t lf_id; 125ed135040SArchana Muniganti uint32_t nb_desc; 126ed135040SArchana Muniganti /* End of Input parameters */ 127ed135040SArchana Muniganti struct plt_pci_device *pci_dev; 128ed135040SArchana Muniganti struct dev *dev; 129ed135040SArchana Muniganti struct roc_cpt *roc_cpt; 130ed135040SArchana Muniganti uintptr_t rbase; 131ed135040SArchana Muniganti uintptr_t lmt_base; 132ed135040SArchana Muniganti uint16_t msixoff; 133ed135040SArchana Muniganti uint16_t pf_func; 134ed135040SArchana Muniganti uint64_t *fc_addr; 135ed135040SArchana Muniganti uint64_t io_addr; 136ed135040SArchana Muniganti uint8_t *iq_vaddr; 137ed79bf91SVidya Sagar Velumuri struct roc_nix *inl_outb_nix; 13817ab6b52SSrujana Challa uint8_t error_event_pending; 139ed135040SArchana Muniganti } __plt_cache_aligned; 140ed135040SArchana Muniganti 141c045d2e5SAnoob Joseph struct roc_cpt { 142c045d2e5SAnoob Joseph struct plt_pci_device *pci_dev; 143c045d2e5SAnoob Joseph struct roc_cpt_lf *lf[ROC_CPT_MAX_LFS]; 144c045d2e5SAnoob Joseph uint16_t nb_lf; 145c045d2e5SAnoob Joseph uint16_t nb_lf_avail; 146c045d2e5SAnoob Joseph uintptr_t lmt_base; 147c045d2e5SAnoob Joseph /**< CPT device capabilities */ 148c045d2e5SAnoob Joseph union cpt_eng_caps hw_caps[CPT_MAX_ENG_TYPES]; 149c045d2e5SAnoob Joseph uint8_t eng_grp[CPT_MAX_ENG_TYPES]; 1507658d035STejasree Kondoj uint8_t cpt_revision; 1510205db90SSrujana Challa void *opaque; 152c045d2e5SAnoob Joseph #define ROC_CPT_MEM_SZ (6 * 1024) 153c045d2e5SAnoob Joseph uint8_t reserved[ROC_CPT_MEM_SZ] __plt_cache_aligned; 154c045d2e5SAnoob Joseph } __plt_cache_aligned; 155c045d2e5SAnoob Joseph 156147b98e6SVidya Sagar Velumuri struct roc_cpt_rxc_time_cfg { 157147b98e6SVidya Sagar Velumuri uint32_t step; 158147b98e6SVidya Sagar Velumuri uint16_t active_limit; 159147b98e6SVidya Sagar Velumuri uint16_t active_thres; 160147b98e6SVidya Sagar Velumuri uint16_t zombie_limit; 161147b98e6SVidya Sagar Velumuri uint16_t zombie_thres; 162147b98e6SVidya Sagar Velumuri }; 163147b98e6SVidya Sagar Velumuri 1640205db90SSrujana Challa /* CPT MISC interrupt callback */ 1650205db90SSrujana Challa typedef void (*roc_cpt_int_misc_cb_t)(struct roc_cpt_lf *lf, void *args); 1660205db90SSrujana Challa 167779244b1SSrujana Challa struct roc_cpt_inline_ipsec_inb_cfg { 168779244b1SSrujana Challa uint32_t cpt_credit; 169779244b1SSrujana Challa uint16_t opcode; 170779244b1SSrujana Challa uint16_t param1; 171779244b1SSrujana Challa uint16_t param2; 172779244b1SSrujana Challa uint16_t bpid; 173779244b1SSrujana Challa uint32_t credit_th; 174779244b1SSrujana Challa uint8_t egrp; 1759564023dSNithin Dabilpuram uint8_t ctx_ilen_valid : 1; 1769564023dSNithin Dabilpuram uint8_t ctx_ilen : 7; 177779244b1SSrujana Challa }; 178779244b1SSrujana Challa 179147b98e6SVidya Sagar Velumuri int __roc_api roc_cpt_rxc_time_cfg(struct roc_cpt *roc_cpt, 180147b98e6SVidya Sagar Velumuri struct roc_cpt_rxc_time_cfg *cfg); 181c045d2e5SAnoob Joseph int __roc_api roc_cpt_dev_init(struct roc_cpt *roc_cpt); 182c045d2e5SAnoob Joseph int __roc_api roc_cpt_dev_fini(struct roc_cpt *roc_cpt); 183c045d2e5SAnoob Joseph int __roc_api roc_cpt_eng_grp_add(struct roc_cpt *roc_cpt, 184c045d2e5SAnoob Joseph enum cpt_eng_type eng_type); 185d029f353SVidya Sagar Velumuri int __roc_api roc_cpt_dev_configure(struct roc_cpt *roc_cpt, int nb_lf, bool rxc_ena, 186d029f353SVidya Sagar Velumuri uint16_t rx_inject_qp); 187c045d2e5SAnoob Joseph void __roc_api roc_cpt_dev_clear(struct roc_cpt *roc_cpt); 188ed135040SArchana Muniganti int __roc_api roc_cpt_lf_init(struct roc_cpt *roc_cpt, struct roc_cpt_lf *lf); 189ed135040SArchana Muniganti void __roc_api roc_cpt_lf_fini(struct roc_cpt_lf *lf); 190*3be1df02SVidya Sagar Velumuri void __roc_api roc_cpt_lf_reset(struct roc_cpt_lf *lf); 19171213a8bSSrujana Challa int __roc_api roc_cpt_lf_ctx_flush(struct roc_cpt_lf *lf, void *cptr, 19271213a8bSSrujana Challa bool inval); 19371213a8bSSrujana Challa int __roc_api roc_cpt_lf_ctx_reload(struct roc_cpt_lf *lf, void *cptr); 194ed79bf91SVidya Sagar Velumuri int __roc_api roc_cpt_inline_ipsec_cfg(struct dev *dev, uint8_t slot, 195ed79bf91SVidya Sagar Velumuri struct roc_nix *nix); 196779244b1SSrujana Challa int __roc_api roc_cpt_inline_ipsec_inb_cfg_read(struct roc_cpt *roc_cpt, 197779244b1SSrujana Challa struct roc_cpt_inline_ipsec_inb_cfg *cfg); 198ed79bf91SVidya Sagar Velumuri int __roc_api roc_cpt_inline_ipsec_inb_cfg(struct roc_cpt *roc_cpt, 1994d00b8c6SSatha Rao struct roc_cpt_inline_ipsec_inb_cfg *cfg); 200b1a22e5dSAakash Sasidharan int __roc_api roc_cpt_afs_print(struct roc_cpt *roc_cpt); 201b1a22e5dSAakash Sasidharan int __roc_api roc_cpt_lfs_print(struct roc_cpt *roc_cpt); 202ed135040SArchana Muniganti void __roc_api roc_cpt_iq_disable(struct roc_cpt_lf *lf); 2033bf87839SAnkur Dwivedi void __roc_api roc_cpt_iq_enable(struct roc_cpt_lf *lf); 20457af6052SAnoob Joseph int __roc_api roc_cpt_lmtline_init(struct roc_cpt *roc_cpt, struct roc_cpt_lmtline *lmtline, 20557af6052SAnoob Joseph int lf_id, bool is_dual); 206b1a22e5dSAakash Sasidharan 207c758279fSRakesh Kudurumalla void __roc_api roc_cpt_parse_hdr_dump(FILE *file, const struct cpt_parse_hdr_s *cpth); 20857af6052SAnoob Joseph int __roc_api roc_cpt_ctx_write(struct roc_cpt_lf *lf, void *sa_dptr, void *sa_cptr, 20957af6052SAnoob Joseph uint16_t sa_len); 2100205db90SSrujana Challa 2110205db90SSrujana Challa void __roc_api roc_cpt_int_misc_cb_register(roc_cpt_int_misc_cb_t cb, void *args); 2120205db90SSrujana Challa int __roc_api roc_cpt_int_misc_cb_unregister(roc_cpt_int_misc_cb_t cb, void *args); 213c045d2e5SAnoob Joseph #endif /* _ROC_CPT_H_ */ 214