1cfb4f964SNithin Dabilpuram /* SPDX-License-Identifier: BSD-3-Clause 2cfb4f964SNithin Dabilpuram * Copyright(C) 2021 Marvell. 3cfb4f964SNithin Dabilpuram */ 4cfb4f964SNithin Dabilpuram #ifndef _ROC_NIX_INL_H_ 5cfb4f964SNithin Dabilpuram #define _ROC_NIX_INL_H_ 6cfb4f964SNithin Dabilpuram 74440eb88SVidya Sagar Velumuri /* ON INB HW area */ 84440eb88SVidya Sagar Velumuri #define ROC_NIX_INL_ON_IPSEC_INB_HW_SZ \ 94440eb88SVidya Sagar Velumuri PLT_ALIGN(sizeof(struct roc_ie_on_inb_sa), ROC_ALIGN) 104440eb88SVidya Sagar Velumuri /* ON INB SW reserved area */ 114440eb88SVidya Sagar Velumuri #define ROC_NIX_INL_ON_IPSEC_INB_SW_RSVD 640 124440eb88SVidya Sagar Velumuri #define ROC_NIX_INL_ON_IPSEC_INB_SA_SZ \ 134440eb88SVidya Sagar Velumuri (ROC_NIX_INL_ON_IPSEC_INB_HW_SZ + ROC_NIX_INL_ON_IPSEC_INB_SW_RSVD) 144440eb88SVidya Sagar Velumuri #define ROC_NIX_INL_ON_IPSEC_INB_SA_SZ_LOG2 10 154440eb88SVidya Sagar Velumuri 16930d9417SNithin Dabilpuram /* ON OUTB HW area */ 174440eb88SVidya Sagar Velumuri #define ROC_NIX_INL_ON_IPSEC_OUTB_HW_SZ \ 184440eb88SVidya Sagar Velumuri PLT_ALIGN(sizeof(struct roc_ie_on_outb_sa), ROC_ALIGN) 19930d9417SNithin Dabilpuram /* ON OUTB SW reserved area */ 204440eb88SVidya Sagar Velumuri #define ROC_NIX_INL_ON_IPSEC_OUTB_SW_RSVD 256 214440eb88SVidya Sagar Velumuri #define ROC_NIX_INL_ON_IPSEC_OUTB_SA_SZ \ 224440eb88SVidya Sagar Velumuri (ROC_NIX_INL_ON_IPSEC_OUTB_HW_SZ + ROC_NIX_INL_ON_IPSEC_OUTB_SW_RSVD) 234440eb88SVidya Sagar Velumuri #define ROC_NIX_INL_ON_IPSEC_OUTB_SA_SZ_LOG2 9 244440eb88SVidya Sagar Velumuri 25bea5d990SVamsi Attunuru #define ROC_NIX_INL_SA_SOFT_EXP_ERR_MAX_POLL_COUNT 25 26bea5d990SVamsi Attunuru 27bea5d990SVamsi Attunuru #define ROC_NIX_SOFT_EXP_ERR_RING_MAX_ENTRY_LOG2 16 28bea5d990SVamsi Attunuru 29bea5d990SVamsi Attunuru #define ROC_NIX_SOFT_EXP_PER_PORT_MAX_RINGS 4 30bea5d990SVamsi Attunuru 31bea5d990SVamsi Attunuru #define ROC_NIX_MAX_TOTAL_OUTB_IPSEC_SA \ 32bea5d990SVamsi Attunuru (ROC_IPSEC_ERR_RING_MAX_ENTRY * ROC_NIX_SOFT_EXP_PER_PORT_MAX_RINGS) 33bea5d990SVamsi Attunuru 34bea5d990SVamsi Attunuru #define ROC_NIX_INL_MAX_SOFT_EXP_RNGS \ 35bea5d990SVamsi Attunuru (PLT_MAX_ETHPORTS * ROC_NIX_SOFT_EXP_PER_PORT_MAX_RINGS) 36*03b15238SSrujana Challa #define ROC_NIX_INL_INB_CUSTOM_SA_SZ 512 37bea5d990SVamsi Attunuru 38582085edSVidya Sagar Velumuri /* Reassembly configuration */ 39582085edSVidya Sagar Velumuri #define ROC_NIX_INL_REAS_ACTIVE_LIMIT 0xFFF 40582085edSVidya Sagar Velumuri #define ROC_NIX_INL_REAS_ACTIVE_THRESHOLD 10 41582085edSVidya Sagar Velumuri #define ROC_NIX_INL_REAS_ZOMBIE_LIMIT 0xFFF 42582085edSVidya Sagar Velumuri #define ROC_NIX_INL_REAS_ZOMBIE_THRESHOLD 10 43582085edSVidya Sagar Velumuri 444440eb88SVidya Sagar Velumuri static inline struct roc_ie_on_inb_sa * 454440eb88SVidya Sagar Velumuri roc_nix_inl_on_ipsec_inb_sa(uintptr_t base, uint64_t idx) 464440eb88SVidya Sagar Velumuri { 474440eb88SVidya Sagar Velumuri uint64_t off = idx << ROC_NIX_INL_ON_IPSEC_INB_SA_SZ_LOG2; 484440eb88SVidya Sagar Velumuri 494440eb88SVidya Sagar Velumuri return PLT_PTR_ADD(base, off); 504440eb88SVidya Sagar Velumuri } 514440eb88SVidya Sagar Velumuri 524440eb88SVidya Sagar Velumuri static inline struct roc_ie_on_outb_sa * 534440eb88SVidya Sagar Velumuri roc_nix_inl_on_ipsec_outb_sa(uintptr_t base, uint64_t idx) 544440eb88SVidya Sagar Velumuri { 554440eb88SVidya Sagar Velumuri uint64_t off = idx << ROC_NIX_INL_ON_IPSEC_OUTB_SA_SZ_LOG2; 564440eb88SVidya Sagar Velumuri 574440eb88SVidya Sagar Velumuri return PLT_PTR_ADD(base, off); 584440eb88SVidya Sagar Velumuri } 594440eb88SVidya Sagar Velumuri 604440eb88SVidya Sagar Velumuri static inline void * 614440eb88SVidya Sagar Velumuri roc_nix_inl_on_ipsec_inb_sa_sw_rsvd(void *sa) 624440eb88SVidya Sagar Velumuri { 634440eb88SVidya Sagar Velumuri return PLT_PTR_ADD(sa, ROC_NIX_INL_ON_IPSEC_INB_HW_SZ); 644440eb88SVidya Sagar Velumuri } 654440eb88SVidya Sagar Velumuri 664440eb88SVidya Sagar Velumuri static inline void * 674440eb88SVidya Sagar Velumuri roc_nix_inl_on_ipsec_outb_sa_sw_rsvd(void *sa) 684440eb88SVidya Sagar Velumuri { 694440eb88SVidya Sagar Velumuri return PLT_PTR_ADD(sa, ROC_NIX_INL_ON_IPSEC_OUTB_HW_SZ); 704440eb88SVidya Sagar Velumuri } 714440eb88SVidya Sagar Velumuri 72cfb4f964SNithin Dabilpuram /* Inline device SSO Work callback */ 73bea5d990SVamsi Attunuru typedef void (*roc_nix_inl_sso_work_cb_t)(uint64_t *gw, void *args, 74bea5d990SVamsi Attunuru uint32_t soft_exp_event); 75cfb4f964SNithin Dabilpuram 764fb24a62SRahul Bhansali typedef int (*roc_nix_inl_meta_pool_cb_t)(uint64_t *aura_handle, uintptr_t *mpool, 774fb24a62SRahul Bhansali uint32_t blk_sz, uint32_t nb_bufs, bool destroy, 784fb24a62SRahul Bhansali const char *mempool_name); 797ea18718SRahul Bhansali typedef int (*roc_nix_inl_custom_meta_pool_cb_t)(uintptr_t pmpool, uintptr_t *mpool, 807ea18718SRahul Bhansali const char *mempool_name, uint64_t *aura_handle, 817ea18718SRahul Bhansali uint32_t blk_sz, uint32_t nb_bufs, bool destroy); 820f3f3ad8SNithin Dabilpuram 83bbcd191cSNithin Dabilpuram struct roc_nix_inl_dev { 84bbcd191cSNithin Dabilpuram /* Input parameters */ 85bbcd191cSNithin Dabilpuram struct plt_pci_device *pci_dev; 86fe5846bcSNithin Dabilpuram uint32_t ipsec_in_min_spi; 87fe5846bcSNithin Dabilpuram uint32_t ipsec_in_max_spi; 88bbcd191cSNithin Dabilpuram bool selftest; 8957f7b982SSatheesh Paul bool is_multi_channel; 9057f7b982SSatheesh Paul uint16_t channel; 9157f7b982SSatheesh Paul uint16_t chan_mask; 92bbcd191cSNithin Dabilpuram bool attach_cptlf; 9375315881SNithin Dabilpuram uint16_t wqe_skip; 94c8c967e1SNithin Dabilpuram uint8_t spb_drop_pc; 95c8c967e1SNithin Dabilpuram uint8_t lpb_drop_pc; 96aa728ea4SNithin Dabilpuram uint32_t soft_exp_poll_freq; /* Polling disabled if 0 */ 970f3f3ad8SNithin Dabilpuram uint32_t nb_meta_bufs; 980f3f3ad8SNithin Dabilpuram uint32_t meta_buf_sz; 99df5cf15fSKiran Kumar K uint32_t max_ipsec_rules; 1004b8eb5bdSRahul Bhansali uint8_t rx_inj_ena; /* Rx Inject Enable */ 101*03b15238SSrujana Challa uint8_t custom_inb_sa; 102bbcd191cSNithin Dabilpuram /* End of input parameters */ 103bbcd191cSNithin Dabilpuram 104de8c60d1SSrujana Challa #define ROC_NIX_INL_MEM_SZ (2048) 105bbcd191cSNithin Dabilpuram uint8_t reserved[ROC_NIX_INL_MEM_SZ] __plt_cache_aligned; 106bbcd191cSNithin Dabilpuram } __plt_cache_aligned; 107bbcd191cSNithin Dabilpuram 108de8c60d1SSrujana Challa struct roc_nix_inl_dev_q { 109de8c60d1SSrujana Challa uint32_t nb_desc; 110de8c60d1SSrujana Challa uintptr_t rbase; 111de8c60d1SSrujana Challa uintptr_t lmt_base; 112de8c60d1SSrujana Challa uint64_t *fc_addr; 113de8c60d1SSrujana Challa uint64_t io_addr; 114de8c60d1SSrujana Challa int32_t fc_addr_sw; 115de8c60d1SSrujana Challa } __plt_cache_aligned; 116de8c60d1SSrujana Challa 117d8c8ad3aSSrujana Challa struct roc_nix_cpt_lf_stats { 118d8c8ad3aSSrujana Challa uint64_t enc_pkts; 119d8c8ad3aSSrujana Challa uint64_t enc_bytes; 120d8c8ad3aSSrujana Challa uint64_t dec_pkts; 121d8c8ad3aSSrujana Challa uint64_t dec_bytes; 122d8c8ad3aSSrujana Challa }; 123d8c8ad3aSSrujana Challa 124bbcd191cSNithin Dabilpuram /* NIX Inline Device API */ 125bbcd191cSNithin Dabilpuram int __roc_api roc_nix_inl_dev_init(struct roc_nix_inl_dev *roc_inl_dev); 126bbcd191cSNithin Dabilpuram int __roc_api roc_nix_inl_dev_fini(struct roc_nix_inl_dev *roc_inl_dev); 1274006ac1fSRakesh Kudurumalla void __roc_api roc_nix_inl_dev_dump(struct roc_nix_inl_dev *roc_inl_dev, FILE *file); 128ee48f711SNithin Dabilpuram bool __roc_api roc_nix_inl_dev_is_probed(void); 129ee48f711SNithin Dabilpuram void __roc_api roc_nix_inl_dev_lock(void); 130ee48f711SNithin Dabilpuram void __roc_api roc_nix_inl_dev_unlock(void); 1317e9a9490SNithin Dabilpuram int __roc_api roc_nix_inl_dev_xaq_realloc(uint64_t aura_handle); 13279dc6f32SKommula Shiva Shankar int __roc_api roc_nix_inl_dev_stats_get(struct roc_nix_stats *stats); 1338881cf1cSNithin Dabilpuram int __roc_api roc_nix_inl_dev_cpt_setup(bool use_inl_dev_sso); 1348881cf1cSNithin Dabilpuram int __roc_api roc_nix_inl_dev_cpt_release(void); 1355351a5f0SNithin Dabilpuram bool __roc_api roc_nix_inl_dev_is_multi_channel(void); 136ee48f711SNithin Dabilpuram 137ee48f711SNithin Dabilpuram /* NIX Inline Inbound API */ 138ee48f711SNithin Dabilpuram int __roc_api roc_nix_inl_inb_init(struct roc_nix *roc_nix); 139ee48f711SNithin Dabilpuram int __roc_api roc_nix_inl_inb_fini(struct roc_nix *roc_nix); 140ee48f711SNithin Dabilpuram bool __roc_api roc_nix_inl_inb_is_enabled(struct roc_nix *roc_nix); 141ee48f711SNithin Dabilpuram uintptr_t __roc_api roc_nix_inl_inb_sa_base_get(struct roc_nix *roc_nix, 142ee48f711SNithin Dabilpuram bool inl_dev_sa); 1434b8eb5bdSRahul Bhansali bool __roc_api roc_nix_inl_inb_rx_inject_enable(struct roc_nix *roc_nix, bool inl_dev_sa); 144fe5846bcSNithin Dabilpuram uint32_t __roc_api roc_nix_inl_inb_spi_range(struct roc_nix *roc_nix, 145fe5846bcSNithin Dabilpuram bool inl_dev_sa, uint32_t *min, 146fe5846bcSNithin Dabilpuram uint32_t *max); 147ee48f711SNithin Dabilpuram uint32_t __roc_api roc_nix_inl_inb_sa_sz(struct roc_nix *roc_nix, 148ee48f711SNithin Dabilpuram bool inl_dev_sa); 149ee48f711SNithin Dabilpuram uintptr_t __roc_api roc_nix_inl_inb_sa_get(struct roc_nix *roc_nix, 150ee48f711SNithin Dabilpuram bool inl_dev_sa, uint32_t spi); 151ee48f711SNithin Dabilpuram void __roc_api roc_nix_inb_mode_set(struct roc_nix *roc_nix, bool use_inl_dev); 1520f3f3ad8SNithin Dabilpuram void __roc_api roc_nix_inl_inb_set(struct roc_nix *roc_nix, bool ena); 153da1ec390SNithin Dabilpuram int __roc_api roc_nix_inl_dev_rq_get(struct roc_nix_rq *rq, bool ena); 154ee48f711SNithin Dabilpuram int __roc_api roc_nix_inl_dev_rq_put(struct roc_nix_rq *rq); 155ee48f711SNithin Dabilpuram bool __roc_api roc_nix_inb_is_with_inl_dev(struct roc_nix *roc_nix); 1563c100e0eSNithin Dabilpuram struct roc_nix_rq *__roc_api roc_nix_inl_dev_rq(struct roc_nix *roc_nix); 157ee48f711SNithin Dabilpuram int __roc_api roc_nix_inl_inb_tag_update(struct roc_nix *roc_nix, 158ee48f711SNithin Dabilpuram uint32_t tag_const, uint8_t tt); 159582085edSVidya Sagar Velumuri int __roc_api roc_nix_reassembly_configure(uint32_t max_wait_time, 160582085edSVidya Sagar Velumuri uint16_t max_frags); 161064e7903SVidya Sagar Velumuri int __roc_api roc_nix_inl_ts_pkind_set(struct roc_nix *roc_nix, bool ts_ena, 162064e7903SVidya Sagar Velumuri bool inb_inl_dev); 163da1ec390SNithin Dabilpuram int __roc_api roc_nix_inl_rq_ena_dis(struct roc_nix *roc_nix, bool ena); 1644fb24a62SRahul Bhansali int __roc_api roc_nix_inl_meta_aura_check(struct roc_nix *roc_nix, struct roc_nix_rq *rq); 165ee48f711SNithin Dabilpuram 166ee48f711SNithin Dabilpuram /* NIX Inline Outbound API */ 167ee48f711SNithin Dabilpuram int __roc_api roc_nix_inl_outb_init(struct roc_nix *roc_nix); 168ee48f711SNithin Dabilpuram int __roc_api roc_nix_inl_outb_fini(struct roc_nix *roc_nix); 169ee48f711SNithin Dabilpuram bool __roc_api roc_nix_inl_outb_is_enabled(struct roc_nix *roc_nix); 170ee48f711SNithin Dabilpuram uintptr_t __roc_api roc_nix_inl_outb_sa_base_get(struct roc_nix *roc_nix); 171ee48f711SNithin Dabilpuram struct roc_cpt_lf *__roc_api 172ee48f711SNithin Dabilpuram roc_nix_inl_outb_lf_base_get(struct roc_nix *roc_nix); 1734b8eb5bdSRahul Bhansali struct roc_cpt_lf *__roc_api roc_nix_inl_inb_inj_lf_get(struct roc_nix *roc_nix); 174ee48f711SNithin Dabilpuram uint16_t __roc_api roc_nix_inl_outb_sso_pffunc_get(struct roc_nix *roc_nix); 175ee48f711SNithin Dabilpuram int __roc_api roc_nix_inl_cb_register(roc_nix_inl_sso_work_cb_t cb, void *args); 176ee48f711SNithin Dabilpuram int __roc_api roc_nix_inl_cb_unregister(roc_nix_inl_sso_work_cb_t cb, 177ee48f711SNithin Dabilpuram void *args); 178bea5d990SVamsi Attunuru int __roc_api roc_nix_inl_outb_soft_exp_poll_switch(struct roc_nix *roc_nix, 179bea5d990SVamsi Attunuru bool poll); 180da1ec390SNithin Dabilpuram uint64_t *__roc_api roc_nix_inl_outb_ring_base_get(struct roc_nix *roc_nix); 1810f3f3ad8SNithin Dabilpuram void __roc_api roc_nix_inl_meta_pool_cb_register(roc_nix_inl_meta_pool_cb_t cb); 1827ea18718SRahul Bhansali void __roc_api roc_nix_inl_custom_meta_pool_cb_register(roc_nix_inl_custom_meta_pool_cb_t cb); 183da1ec390SNithin Dabilpuram 184ee48f711SNithin Dabilpuram /* NIX Inline/Outbound API */ 185ee48f711SNithin Dabilpuram enum roc_nix_inl_sa_sync_op { 186ee48f711SNithin Dabilpuram ROC_NIX_INL_SA_OP_FLUSH, 187ee48f711SNithin Dabilpuram ROC_NIX_INL_SA_OP_FLUSH_INVAL, 188ee48f711SNithin Dabilpuram ROC_NIX_INL_SA_OP_RELOAD, 189ee48f711SNithin Dabilpuram }; 190ee48f711SNithin Dabilpuram 191ee48f711SNithin Dabilpuram int __roc_api roc_nix_inl_sa_sync(struct roc_nix *roc_nix, void *sa, bool inb, 192ee48f711SNithin Dabilpuram enum roc_nix_inl_sa_sync_op op); 19371213a8bSSrujana Challa int __roc_api roc_nix_inl_ctx_write(struct roc_nix *roc_nix, void *sa_dptr, 19471213a8bSSrujana Challa void *sa_cptr, bool inb, uint16_t sa_len); 1954006ac1fSRakesh Kudurumalla void __roc_api roc_nix_inl_outb_cpt_lfs_dump(struct roc_nix *roc_nix, FILE *file); 1967c67c489SNithin Dabilpuram uint64_t __roc_api roc_nix_inl_eng_caps_get(struct roc_nix *roc_nix); 197de8c60d1SSrujana Challa void *__roc_api roc_nix_inl_dev_qptr_get(uint8_t qid); 198bbcd191cSNithin Dabilpuram 199d8c8ad3aSSrujana Challa enum roc_nix_cpt_lf_stats_type { 200d8c8ad3aSSrujana Challa ROC_NIX_CPT_LF_STATS_INL_DEV, 201d8c8ad3aSSrujana Challa ROC_NIX_CPT_LF_STATS_KERNEL, 202d8c8ad3aSSrujana Challa ROC_NIX_CPT_LF_STATS_ETHDEV = 2, 203d8c8ad3aSSrujana Challa }; 204d8c8ad3aSSrujana Challa int __roc_api roc_nix_inl_cpt_lf_stats_get(struct roc_nix *roc_nix, 205d8c8ad3aSSrujana Challa enum roc_nix_cpt_lf_stats_type type, 206d8c8ad3aSSrujana Challa struct roc_nix_cpt_lf_stats *stats, uint16_t idx); 207cfb4f964SNithin Dabilpuram #endif /* _ROC_NIX_INL_H_ */ 208