xref: /dpdk/drivers/common/cnxk/roc_nix_inl.h (revision 03b152389fb15f96e25d9acd87b84c9c22cf8b2b)
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