Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright(C) 2021 Marvell.
3 : : */
4 : : #ifndef _ROC_NIX_INL_H_
5 : : #define _ROC_NIX_INL_H_
6 : :
7 : : /* ON INB HW area */
8 : : #define ROC_NIX_INL_ON_IPSEC_INB_HW_SZ \
9 : : PLT_ALIGN(sizeof(struct roc_ie_on_inb_sa), ROC_ALIGN)
10 : : /* ON INB SW reserved area */
11 : : #define ROC_NIX_INL_ON_IPSEC_INB_SW_RSVD 640
12 : : #define ROC_NIX_INL_ON_IPSEC_INB_SA_SZ \
13 : : (ROC_NIX_INL_ON_IPSEC_INB_HW_SZ + ROC_NIX_INL_ON_IPSEC_INB_SW_RSVD)
14 : : #define ROC_NIX_INL_ON_IPSEC_INB_SA_SZ_LOG2 10
15 : :
16 : : /* ON OUTB HW area */
17 : : #define ROC_NIX_INL_ON_IPSEC_OUTB_HW_SZ \
18 : : PLT_ALIGN(sizeof(struct roc_ie_on_outb_sa), ROC_ALIGN)
19 : : /* ON OUTB SW reserved area */
20 : : #define ROC_NIX_INL_ON_IPSEC_OUTB_SW_RSVD 256
21 : : #define ROC_NIX_INL_ON_IPSEC_OUTB_SA_SZ \
22 : : (ROC_NIX_INL_ON_IPSEC_OUTB_HW_SZ + ROC_NIX_INL_ON_IPSEC_OUTB_SW_RSVD)
23 : : #define ROC_NIX_INL_ON_IPSEC_OUTB_SA_SZ_LOG2 9
24 : :
25 : : #define ROC_NIX_INL_SA_SOFT_EXP_ERR_MAX_POLL_COUNT 25
26 : :
27 : : #define ROC_NIX_SOFT_EXP_ERR_RING_MAX_ENTRY_LOG2 16
28 : :
29 : : #define ROC_NIX_SOFT_EXP_PER_PORT_MAX_RINGS 4
30 : :
31 : : #define ROC_NIX_MAX_TOTAL_OUTB_IPSEC_SA \
32 : : (ROC_IPSEC_ERR_RING_MAX_ENTRY * ROC_NIX_SOFT_EXP_PER_PORT_MAX_RINGS)
33 : :
34 : : #define ROC_NIX_INL_MAX_SOFT_EXP_RNGS \
35 : : (PLT_MAX_ETHPORTS * ROC_NIX_SOFT_EXP_PER_PORT_MAX_RINGS)
36 : : #define ROC_NIX_INL_INB_CUSTOM_SA_SZ 512
37 : :
38 : : /* Reassembly configuration */
39 : : #define ROC_NIX_INL_REAS_STEP_MAX 0xFFFFF
40 : : #define ROC_NIX_INL_REAS_STEP_DFLT 0x3E8 /* 1 ms */
41 : : #define ROC_NIX_INL_REAS_ACTIVE_LIMIT 0xFFF
42 : : #define ROC_NIX_INL_REAS_ACTIVE_THRESHOLD 10
43 : : #define ROC_NIX_INL_REAS_ZOMBIE_LIMIT 0xFFF
44 : : #define ROC_NIX_INL_REAS_ZOMBIE_THRESHOLD 10
45 : :
46 : : #define ROC_NIX_INL_RXC_QUE_BLK_THR 0x40UL
47 : :
48 : : enum nix_inl_event_type {
49 : : NIX_INL_INB_CPT_CQ = 1,
50 : : NIX_INL_OUTB_CPT_CQ,
51 : : NIX_INL_SSO,
52 : : NIX_INL_SOFT_EXPIRY_THRD,
53 : : };
54 : :
55 : : enum comp_ptr {
56 : : WQE_PTR_CPTR,
57 : : CPTR_WQE_PTR,
58 : : WQE_PTR_ANTI_REPLAY,
59 : : CPTR_ANTI_REPLAY,
60 : : };
61 : :
62 : : static inline struct roc_ie_on_inb_sa *
63 : : roc_nix_inl_on_ipsec_inb_sa(uintptr_t base, uint64_t idx)
64 : : {
65 : 0 : uint64_t off = idx << ROC_NIX_INL_ON_IPSEC_INB_SA_SZ_LOG2;
66 : :
67 : 0 : return PLT_PTR_ADD(base, off);
68 : : }
69 : :
70 : : static inline struct roc_ie_on_outb_sa *
71 : : roc_nix_inl_on_ipsec_outb_sa(uintptr_t base, uint64_t idx)
72 : : {
73 : 0 : uint64_t off = idx << ROC_NIX_INL_ON_IPSEC_OUTB_SA_SZ_LOG2;
74 : :
75 : 0 : return PLT_PTR_ADD(base, off);
76 : : }
77 : :
78 : : static inline void *
79 : : roc_nix_inl_on_ipsec_inb_sa_sw_rsvd(void *sa)
80 : : {
81 [ # # # # : 0 : return PLT_PTR_ADD(sa, ROC_NIX_INL_ON_IPSEC_INB_HW_SZ);
# # # # #
# # # # #
# # ]
82 : : }
83 : :
84 : : static inline void *
85 : : roc_nix_inl_on_ipsec_outb_sa_sw_rsvd(void *sa)
86 : : {
87 : 0 : return PLT_PTR_ADD(sa, ROC_NIX_INL_ON_IPSEC_OUTB_HW_SZ);
88 : : }
89 : :
90 : : /* Inline device SSO Work callback */
91 : : typedef void (*roc_nix_inl_sso_work_cb_t)(uint64_t *gw, void *args, enum nix_inl_event_type type,
92 : : void *cq_s, uint32_t port_id);
93 : :
94 : : typedef int (*roc_nix_inl_meta_pool_cb_t)(uint64_t *aura_handle, uintptr_t *mpool,
95 : : uint32_t blk_sz, uint32_t nb_bufs, bool destroy,
96 : : const char *mempool_name);
97 : : typedef int (*roc_nix_inl_custom_meta_pool_cb_t)(uintptr_t pmpool, uintptr_t *mpool,
98 : : const char *mempool_name, uint64_t *aura_handle,
99 : : uint32_t blk_sz, uint32_t nb_bufs, bool destroy);
100 : :
101 : : struct roc_nix_inl_dev {
102 : : /* Input parameters */
103 : : struct plt_pci_device *pci_dev;
104 : : uint32_t ipsec_in_min_spi;
105 : : uint32_t ipsec_in_max_spi;
106 : : bool selftest;
107 : : bool is_multi_channel;
108 : : uint16_t channel;
109 : : uint16_t chan_mask;
110 : : uint16_t wqe_skip;
111 : : uint8_t spb_drop_pc;
112 : : uint8_t lpb_drop_pc;
113 : : uint32_t soft_exp_poll_freq; /* Polling disabled if 0 */
114 : : uint8_t cpt_cq_enable;
115 : : uint32_t nb_meta_bufs;
116 : : uint32_t meta_buf_sz;
117 : : uint32_t max_ipsec_rules;
118 : : uint8_t rx_inj_ena; /* Rx Inject Enable */
119 : : uint8_t custom_inb_sa;
120 : : uint8_t nb_inb_cptlfs;
121 : : int8_t res_addr_offset; /* CPT result address offset */
122 : :
123 : : /* End of input parameters */
124 : :
125 : : #define ROC_NIX_INL_MEM_SZ (6144)
126 : : uint8_t reserved[ROC_NIX_INL_MEM_SZ] __plt_cache_aligned;
127 : : } __plt_cache_aligned;
128 : :
129 : : struct roc_nix_inl_dev_q {
130 : : uint32_t nb_desc;
131 : : uintptr_t rbase;
132 : : uintptr_t lmt_base;
133 : : uint64_t __plt_atomic *fc_addr;
134 : : uint64_t io_addr;
135 : : int32_t fc_addr_sw;
136 : : } __plt_cache_aligned;
137 : :
138 : : struct roc_nix_cpt_lf_stats {
139 : : uint64_t enc_pkts;
140 : : uint64_t enc_bytes;
141 : : uint64_t dec_pkts;
142 : : uint64_t dec_bytes;
143 : : };
144 : :
145 : : /* NIX Inline Device API */
146 : : int __roc_api roc_nix_inl_dev_init(struct roc_nix_inl_dev *roc_inl_dev);
147 : : int __roc_api roc_nix_inl_dev_fini(struct roc_nix_inl_dev *roc_inl_dev);
148 : : void __roc_api roc_nix_inl_dev_dump(struct roc_nix_inl_dev *roc_inl_dev, FILE *file);
149 : : bool __roc_api roc_nix_inl_dev_is_probed(void);
150 : : void __roc_api roc_nix_inl_dev_lock(void);
151 : : void __roc_api roc_nix_inl_dev_unlock(void);
152 : : int __roc_api roc_nix_inl_dev_xaq_realloc(uint64_t aura_handle);
153 : : int __roc_api roc_nix_inl_dev_stats_get(struct roc_nix_stats *stats);
154 : : int __roc_api roc_nix_inl_dev_stats_reset(void);
155 : : int __roc_api roc_nix_inl_dev_cpt_setup(bool use_inl_dev_sso);
156 : : int __roc_api roc_nix_inl_dev_cpt_release(void);
157 : : bool __roc_api roc_nix_inl_dev_is_multi_channel(void);
158 : :
159 : : /* NIX Inline Inbound API */
160 : : int __roc_api roc_nix_inl_inb_init(struct roc_nix *roc_nix);
161 : : int __roc_api roc_nix_inl_inb_fini(struct roc_nix *roc_nix);
162 : : bool __roc_api roc_nix_inl_inb_is_enabled(struct roc_nix *roc_nix);
163 : : uintptr_t __roc_api roc_nix_inl_inb_sa_base_get(struct roc_nix *roc_nix,
164 : : bool inl_dev_sa);
165 : : uint16_t roc_nix_inl_inb_ipsec_profile_id_get(struct roc_nix *roc_nix, bool inb_inl_dev);
166 : : uint16_t __roc_api roc_nix_inl_inb_reass_profile_id_get(struct roc_nix *roc_nix, bool inb_inl_dev);
167 : : bool __roc_api roc_nix_inl_inb_rx_inject_enable(struct roc_nix *roc_nix, bool inl_dev_sa);
168 : : uint32_t __roc_api roc_nix_inl_inb_spi_range(struct roc_nix *roc_nix,
169 : : bool inl_dev_sa, uint32_t *min,
170 : : uint32_t *max);
171 : : uint32_t __roc_api roc_nix_inl_inb_sa_sz(struct roc_nix *roc_nix,
172 : : bool inl_dev_sa);
173 : : uintptr_t __roc_api roc_nix_inl_inb_sa_get(struct roc_nix *roc_nix,
174 : : bool inl_dev_sa, uint32_t spi);
175 : : void __roc_api roc_nix_inb_mode_set(struct roc_nix *roc_nix, bool use_inl_dev);
176 : : void __roc_api roc_nix_inl_inb_set(struct roc_nix *roc_nix, bool ena);
177 : : int __roc_api roc_nix_inl_dev_rq_get(struct roc_nix_rq *rq, bool ena);
178 : : int __roc_api roc_nix_inl_dev_rq_put(struct roc_nix_rq *rq);
179 : : bool __roc_api roc_nix_inb_is_with_inl_dev(struct roc_nix *roc_nix);
180 : : struct roc_nix_rq *__roc_api roc_nix_inl_dev_rq(struct roc_nix *roc_nix);
181 : : int __roc_api roc_nix_inl_inb_tag_update(struct roc_nix *roc_nix, uint32_t tag_const, uint8_t tt);
182 : : int __roc_api roc_nix_reassembly_configure(struct roc_cpt_rxc_time_cfg *req_cfg,
183 : : uint32_t max_wait_time);
184 : : int __roc_api roc_nix_inl_ts_pkind_set(struct roc_nix *roc_nix, bool ts_ena, bool inb_inl_dev,
185 : : uint8_t profile_id);
186 : : int __roc_api roc_nix_inl_rq_ena_dis(struct roc_nix *roc_nix, bool ena);
187 : : int __roc_api roc_nix_inl_meta_aura_check(struct roc_nix *roc_nix, struct roc_nix_rq *rq);
188 : :
189 : : /* NIX Inline Outbound API */
190 : : int __roc_api roc_nix_inl_outb_init(struct roc_nix *roc_nix);
191 : : int __roc_api roc_nix_inl_outb_fini(struct roc_nix *roc_nix);
192 : : bool __roc_api roc_nix_inl_outb_is_enabled(struct roc_nix *roc_nix);
193 : : uintptr_t __roc_api roc_nix_inl_outb_sa_base_get(struct roc_nix *roc_nix);
194 : : struct roc_cpt_lf *__roc_api
195 : : roc_nix_inl_outb_lf_base_get(struct roc_nix *roc_nix);
196 : : struct roc_cpt_lf *__roc_api roc_nix_inl_inb_inj_lf_get(struct roc_nix *roc_nix);
197 : : uint16_t __roc_api roc_nix_inl_outb_sso_pffunc_get(struct roc_nix *roc_nix);
198 : : int __roc_api roc_nix_inl_cb_register(roc_nix_inl_sso_work_cb_t cb, void *args);
199 : : int __roc_api roc_nix_inl_cb_unregister(roc_nix_inl_sso_work_cb_t cb,
200 : : void *args);
201 : : int __roc_api roc_nix_inl_outb_soft_exp_poll_switch(struct roc_nix *roc_nix,
202 : : bool poll);
203 : : uint64_t *__roc_api roc_nix_inl_outb_ring_base_get(struct roc_nix *roc_nix);
204 : : void __roc_api roc_nix_inl_meta_pool_cb_register(roc_nix_inl_meta_pool_cb_t cb);
205 : : void __roc_api roc_nix_inl_custom_meta_pool_cb_register(roc_nix_inl_custom_meta_pool_cb_t cb);
206 : :
207 : : /* NIX Inline/Outbound API */
208 : : enum roc_nix_inl_sa_sync_op {
209 : : ROC_NIX_INL_SA_OP_FLUSH,
210 : : ROC_NIX_INL_SA_OP_FLUSH_INVAL,
211 : : ROC_NIX_INL_SA_OP_RELOAD,
212 : : };
213 : :
214 : : int __roc_api roc_nix_inl_sa_sync(struct roc_nix *roc_nix, void *sa, bool inb,
215 : : enum roc_nix_inl_sa_sync_op op);
216 : : int __roc_api roc_nix_inl_ctx_write(struct roc_nix *roc_nix, void *sa_dptr,
217 : : void *sa_cptr, bool inb, uint16_t sa_len);
218 : : void __roc_api roc_nix_inl_outb_cpt_lfs_dump(struct roc_nix *roc_nix, FILE *file);
219 : : uint64_t __roc_api roc_nix_inl_eng_caps_get(struct roc_nix *roc_nix);
220 : : void *__roc_api roc_nix_inl_dev_qptr_get(uint8_t qid);
221 : : uint8_t __roc_api roc_nix_inl_is_cq_ena(struct roc_nix *roc_nix);
222 : :
223 : : enum roc_nix_cpt_lf_stats_type {
224 : : ROC_NIX_CPT_LF_STATS_INL_DEV,
225 : : ROC_NIX_CPT_LF_STATS_KERNEL,
226 : : ROC_NIX_CPT_LF_STATS_ETHDEV = 2,
227 : : };
228 : : int __roc_api roc_nix_inl_cpt_lf_stats_get(struct roc_nix *roc_nix,
229 : : enum roc_nix_cpt_lf_stats_type type,
230 : : struct roc_nix_cpt_lf_stats *stats, uint16_t idx);
231 : : #endif /* _ROC_NIX_INL_H_ */
|