xref: /linux/drivers/net/ethernet/marvell/octeontx2/af/cn20k/struct.h (revision 8f7aa3d3c7323f4ca2768a9e74ebbe359c4f8f88)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Marvell RVU Admin Function driver
3  *
4  * Copyright (C) 2024 Marvell.
5  *
6  */
7 
8 #ifndef STRUCT_H
9 #define STRUCT_H
10 
11 #define NIX_MAX_CTX_SIZE		128
12 
13 /*
14  * CN20k RVU PF MBOX Interrupt Vector Enumeration
15  *
16  * Vectors 0 - 3 are compatible with pre cn20k and hence
17  * existing macros are being reused.
18  */
19 enum rvu_mbox_pf_int_vec_e {
20 	RVU_MBOX_PF_INT_VEC_VFPF_MBOX0	= 0x4,
21 	RVU_MBOX_PF_INT_VEC_VFPF_MBOX1	= 0x5,
22 	RVU_MBOX_PF_INT_VEC_VFPF1_MBOX0	= 0x6,
23 	RVU_MBOX_PF_INT_VEC_VFPF1_MBOX1	= 0x7,
24 	RVU_MBOX_PF_INT_VEC_AFPF_MBOX	= 0x8,
25 	RVU_MBOX_PF_INT_VEC_CNT		= 0x9,
26 };
27 
28 /* RVU Admin function Interrupt Vector Enumeration */
29 enum rvu_af_cn20k_int_vec_e {
30 	RVU_AF_CN20K_INT_VEC_POISON		= 0x0,
31 	RVU_AF_CN20K_INT_VEC_PFFLR0		= 0x1,
32 	RVU_AF_CN20K_INT_VEC_PFFLR1		= 0x2,
33 	RVU_AF_CN20K_INT_VEC_PFME0		= 0x3,
34 	RVU_AF_CN20K_INT_VEC_PFME1		= 0x4,
35 	RVU_AF_CN20K_INT_VEC_GEN		= 0x5,
36 	RVU_AF_CN20K_INT_VEC_PFAF_MBOX0		= 0x6,
37 	RVU_AF_CN20K_INT_VEC_PFAF_MBOX1		= 0x7,
38 	RVU_AF_CN20K_INT_VEC_PFAF1_MBOX0	= 0x8,
39 	RVU_AF_CN20K_INT_VEC_PFAF1_MBOX1	= 0x9,
40 	RVU_AF_CN20K_INT_VEC_CNT		= 0xa,
41 };
42 
43 struct nix_cn20k_sq_ctx_s {
44 	u64 ena                         :  1; /* W0 */
45 	u64 qint_idx                    :  6;
46 	u64 substream                   : 20;
47 	u64 sdp_mcast                   :  1;
48 	u64 cq                          : 20;
49 	u64 sqe_way_mask                : 16;
50 	u64 smq                         : 11; /* W1 */
51 	u64 cq_ena                      :  1;
52 	u64 xoff                        :  1;
53 	u64 sso_ena                     :  1;
54 	u64 smq_rr_weight               : 14;
55 	u64 default_chan                : 12;
56 	u64 sqb_count                   : 16;
57 	u64 reserved_120_120            :  1;
58 	u64 smq_rr_count_lb             :  7;
59 	u64 smq_rr_count_ub             : 25; /* W2 */
60 	u64 sqb_aura                    : 20;
61 	u64 sq_int                      :  8;
62 	u64 sq_int_ena                  :  8;
63 	u64 sqe_stype                   :  2;
64 	u64 reserved_191_191            :  1;
65 	u64 max_sqe_size                :  2; /* W3 */
66 	u64 cq_limit                    :  8;
67 	u64 lmt_dis                     :  1;
68 	u64 mnq_dis                     :  1;
69 	u64 smq_next_sq                 : 20;
70 	u64 smq_lso_segnum              :  8;
71 	u64 tail_offset                 :  6;
72 	u64 smenq_offset                :  6;
73 	u64 head_offset                 :  6;
74 	u64 smenq_next_sqb_vld          :  1;
75 	u64 smq_pend                    :  1;
76 	u64 smq_next_sq_vld             :  1;
77 	u64 reserved_253_255            :  3;
78 	u64 next_sqb                    : 64; /* W4 */
79 	u64 tail_sqb                    : 64; /* W5 */
80 	u64 smenq_sqb                   : 64; /* W6 */
81 	u64 smenq_next_sqb              : 64; /* W7 */
82 	u64 head_sqb                    : 64; /* W8 */
83 	u64 reserved_576_583            :  8; /* W9 */
84 	u64 vfi_lso_total               : 18;
85 	u64 vfi_lso_sizem1              :  3;
86 	u64 vfi_lso_sb                  :  8;
87 	u64 vfi_lso_mps                 : 14;
88 	u64 vfi_lso_vlan0_ins_ena       :  1;
89 	u64 vfi_lso_vlan1_ins_ena       :  1;
90 	u64 vfi_lso_vld                 :  1;
91 	u64 reserved_630_639            : 10;
92 	u64 scm_lso_rem                 : 18; /* W10 */
93 	u64 reserved_658_703            : 46;
94 	u64 octs                        : 48; /* W11 */
95 	u64 reserved_752_767            : 16;
96 	u64 pkts                        : 48; /* W12 */
97 	u64 reserved_816_831            : 16;
98 	u64 aged_drop_octs              : 32; /* W13 */
99 	u64 aged_drop_pkts              : 32;
100 	u64 dropped_octs                : 48; /* W14 */
101 	u64 reserved_944_959            : 16;
102 	u64 dropped_pkts                : 48; /* W15 */
103 	u64 reserved_1008_1023          : 16;
104 };
105 
106 static_assert(sizeof(struct nix_cn20k_sq_ctx_s) == NIX_MAX_CTX_SIZE);
107 
108 struct nix_cn20k_cq_ctx_s {
109 	u64 base                        : 64; /* W0 */
110 	u64 lbp_ena                     :  1; /* W1 */
111 	u64 lbpid_low                   :  3;
112 	u64 bp_ena                      :  1;
113 	u64 lbpid_med                   :  3;
114 	u64 bpid                        :  9;
115 	u64 lbpid_high                  :  3;
116 	u64 qint_idx                    :  7;
117 	u64 cq_err                      :  1;
118 	u64 cint_idx                    :  7;
119 	u64 avg_con                     :  9;
120 	u64 wrptr                       : 20;
121 	u64 tail                        : 20; /* W2 */
122 	u64 head                        : 20;
123 	u64 avg_level                   :  8;
124 	u64 update_time                 : 16;
125 	u64 bp                          :  8; /* W3 */
126 	u64 drop                        :  8;
127 	u64 drop_ena                    :  1;
128 	u64 ena                         :  1;
129 	u64 cpt_drop_err_en             :  1;
130 	u64 reserved_211_211            :  1;
131 	u64 msh_dst                     : 11;
132 	u64 msh_valid                   :  1;
133 	u64 stash_thresh                :  4;
134 	u64 lbp_frac                    :  4;
135 	u64 caching                     :  1;
136 	u64 stashing                    :  1;
137 	u64 reserved_234_235            :  2;
138 	u64 qsize                       :  4;
139 	u64 cq_err_int                  :  8;
140 	u64 cq_err_int_ena              :  8;
141 	u64 bpid_ext                    :  2; /* W4 */
142 	u64 reserved_258_259            :  2;
143 	u64 lbpid_ext                   :  2;
144 	u64 reserved_262_319            : 58;
145 	u64 reserved_320_383            : 64; /* W5 */
146 	u64 reserved_384_447            : 64; /* W6 */
147 	u64 reserved_448_511            : 64; /* W7 */
148 	u64 padding[8];
149 };
150 
151 static_assert(sizeof(struct nix_cn20k_sq_ctx_s) == NIX_MAX_CTX_SIZE);
152 
153 struct nix_cn20k_rq_ctx_s {
154 	u64 ena                         :  1;
155 	u64 sso_ena                     :  1;
156 	u64 ipsech_ena                  :  1;
157 	u64 ena_wqwd                    :  1;
158 	u64 cq                          : 20;
159 	u64 reserved_24_34              : 11;
160 	u64 port_il4_dis                :  1;
161 	u64 port_ol4_dis                :  1;
162 	u64 lenerr_dis                  :  1;
163 	u64 csum_il4_dis                :  1;
164 	u64 csum_ol4_dis                :  1;
165 	u64 len_il4_dis                 :  1;
166 	u64 len_il3_dis                 :  1;
167 	u64 len_ol4_dis                 :  1;
168 	u64 len_ol3_dis                 :  1;
169 	u64 wqe_aura                    : 20;
170 	u64 spb_aura                    : 20;
171 	u64 lpb_aura                    : 20;
172 	u64 sso_grp                     : 10;
173 	u64 sso_tt                      :  2;
174 	u64 pb_caching                  :  2;
175 	u64 wqe_caching                 :  1;
176 	u64 xqe_drop_ena                :  1;
177 	u64 spb_drop_ena                :  1;
178 	u64 lpb_drop_ena                :  1;
179 	u64 pb_stashing                 :  1;
180 	u64 ipsecd_drop_en              :  1;
181 	u64 chi_ena                     :  1;
182 	u64 reserved_125_127            :  3;
183 	u64 band_prof_id_l              : 10;
184 	u64 sso_fc_ena                  :  1;
185 	u64 policer_ena                 :  1;
186 	u64 spb_sizem1                  :  6;
187 	u64 wqe_skip                    :  2;
188 	u64 spb_high_sizem1             :  3;
189 	u64 spb_ena                     :  1;
190 	u64 lpb_sizem1                  : 12;
191 	u64 first_skip                  :  7;
192 	u64 reserved_171_171            :  1;
193 	u64 later_skip                  :  6;
194 	u64 xqe_imm_size                :  6;
195 	u64 band_prof_id_h              :  4;
196 	u64 reserved_188_189            :  2;
197 	u64 xqe_imm_copy                :  1;
198 	u64 xqe_hdr_split               :  1;
199 	u64 xqe_drop                    :  8;
200 	u64 xqe_pass                    :  8;
201 	u64 wqe_pool_drop               :  8;
202 	u64 wqe_pool_pass               :  8;
203 	u64 spb_aura_drop               :  8;
204 	u64 spb_aura_pass               :  8;
205 	u64 spb_pool_drop               :  8;
206 	u64 spb_pool_pass               :  8;
207 	u64 lpb_aura_drop               :  8;
208 	u64 lpb_aura_pass               :  8;
209 	u64 lpb_pool_drop               :  8;
210 	u64 lpb_pool_pass               :  8;
211 	u64 reserved_288_291            :  4;
212 	u64 rq_int                      :  8;
213 	u64 rq_int_ena                  :  8;
214 	u64 qint_idx                    :  7;
215 	u64 reserved_315_319            :  5;
216 	u64 ltag                        : 24;
217 	u64 good_utag                   :  8;
218 	u64 bad_utag                    :  8;
219 	u64 flow_tagw                   :  6;
220 	u64 ipsec_vwqe                  :  1;
221 	u64 vwqe_ena                    :  1;
222 	u64 vtime_wait                  :  8;
223 	u64 max_vsize_exp               :  4;
224 	u64 vwqe_skip                   :  2;
225 	u64 reserved_382_383            :  2;
226 	u64 octs                        : 48;
227 	u64 reserved_432_447            : 16;
228 	u64 pkts                        : 48;
229 	u64 reserved_496_511            : 16;
230 	u64 drop_octs                   : 48;
231 	u64 reserved_560_575            : 16;
232 	u64 drop_pkts                   : 48;
233 	u64 reserved_624_639            : 16;
234 	u64 re_pkts                     : 48;
235 	u64 reserved_688_703            : 16;
236 	u64 reserved_704_767            : 64;
237 	u64 reserved_768_831            : 64;
238 	u64 reserved_832_895            : 64;
239 	u64 reserved_896_959            : 64;
240 	u64 reserved_960_1023           : 64;
241 };
242 
243 static_assert(sizeof(struct nix_cn20k_rq_ctx_s) == NIX_MAX_CTX_SIZE);
244 
245 struct npa_cn20k_aura_s {
246 	u64 pool_addr;			/* W0 */
247 	u64 ena                   : 1;  /* W1 */
248 	u64 reserved_65           : 2;
249 	u64 pool_caching          : 1;
250 	u64 reserved_68           : 16;
251 	u64 avg_con               : 9;
252 	u64 reserved_93           : 1;
253 	u64 pool_drop_ena         : 1;
254 	u64 aura_drop_ena         : 1;
255 	u64 bp_ena                : 1;
256 	u64 reserved_97_103       : 7;
257 	u64 aura_drop             : 8;
258 	u64 shift                 : 6;
259 	u64 reserved_118_119      : 2;
260 	u64 avg_level             : 8;
261 	u64 count                 : 36; /* W2 */
262 	u64 reserved_164_167      : 4;
263 	u64 bpid                  : 12;
264 	u64 reserved_180_191      : 12;
265 	u64 limit                 : 36; /* W3 */
266 	u64 reserved_228_231      : 4;
267 	u64 bp                    : 7;
268 	u64 reserved_239_243      : 5;
269 	u64 fc_ena                : 1;
270 	u64 fc_up_crossing        : 1;
271 	u64 fc_stype              : 2;
272 	u64 fc_hyst_bits          : 4;
273 	u64 reserved_252_255      : 4;
274 	u64 fc_addr;			/* W4 */
275 	u64 pool_drop             : 8;  /* W5 */
276 	u64 update_time           : 16;
277 	u64 err_int               : 8;
278 	u64 err_int_ena           : 8;
279 	u64 thresh_int            : 1;
280 	u64 thresh_int_ena        : 1;
281 	u64 thresh_up             : 1;
282 	u64 reserved_363          : 1;
283 	u64 thresh_qint_idx       : 7;
284 	u64 reserved_371          : 1;
285 	u64 err_qint_idx          : 7;
286 	u64 reserved_379_383      : 5;
287 	u64 thresh                : 36; /* W6*/
288 	u64 rsvd_423_420          : 4;
289 	u64 fc_msh_dst            : 11;
290 	u64 reserved_435_438      : 4;
291 	u64 op_dpc_ena            : 1;
292 	u64 op_dpc_set            : 5;
293 	u64 reserved_445_445      : 1;
294 	u64 stream_ctx            : 1;
295 	u64 unified_ctx           : 1;
296 	u64 reserved_448_511;		/* W7 */
297 	u64 padding[8];
298 };
299 
300 static_assert(sizeof(struct npa_cn20k_aura_s) == NIX_MAX_CTX_SIZE);
301 
302 struct npa_cn20k_pool_s {
303 	u64 stack_base;			/* W0 */
304 	u64 ena                   : 1;
305 	u64 nat_align             : 1;
306 	u64 reserved_66_67        : 2;
307 	u64 stack_caching         : 1;
308 	u64 reserved_69_87        : 19;
309 	u64 buf_offset            : 12;
310 	u64 reserved_100_103      : 4;
311 	u64 buf_size              : 12;
312 	u64 reserved_116_119      : 4;
313 	u64 ref_cnt_prof          : 3;
314 	u64 reserved_123_127      : 5;
315 	u64 stack_max_pages       : 32;
316 	u64 stack_pages           : 32;
317 	uint64_t bp_0             : 7;
318 	uint64_t bp_1             : 7;
319 	uint64_t bp_2             : 7;
320 	uint64_t bp_3             : 7;
321 	uint64_t bp_4             : 7;
322 	uint64_t bp_5             : 7;
323 	uint64_t bp_6             : 7;
324 	uint64_t bp_7             : 7;
325 	uint64_t bp_ena_0         : 1;
326 	uint64_t bp_ena_1         : 1;
327 	uint64_t bp_ena_2         : 1;
328 	uint64_t bp_ena_3         : 1;
329 	uint64_t bp_ena_4         : 1;
330 	uint64_t bp_ena_5         : 1;
331 	uint64_t bp_ena_6         : 1;
332 	uint64_t bp_ena_7         : 1;
333 	u64 stack_offset          : 4;
334 	u64 reserved_260_263      : 4;
335 	u64 shift                 : 6;
336 	u64 reserved_270_271      : 2;
337 	u64 avg_level             : 8;
338 	u64 avg_con               : 9;
339 	u64 fc_ena                : 1;
340 	u64 fc_stype              : 2;
341 	u64 fc_hyst_bits          : 4;
342 	u64 fc_up_crossing        : 1;
343 	u64 reserved_297_299      : 3;
344 	u64 update_time           : 16;
345 	u64 reserved_316_319      : 4;
346 	u64 fc_addr;			/* W5 */
347 	u64 ptr_start;			/* W6 */
348 	u64 ptr_end;			/* W7 */
349 	u64 bpid_0                : 12;
350 	u64 reserved_524_535      : 12;
351 	u64 err_int               : 8;
352 	u64 err_int_ena           : 8;
353 	u64 thresh_int            : 1;
354 	u64 thresh_int_ena        : 1;
355 	u64 thresh_up             : 1;
356 	u64 reserved_555          : 1;
357 	u64 thresh_qint_idx       : 7;
358 	u64 reserved_563          : 1;
359 	u64 err_qint_idx          : 7;
360 	u64 reserved_571_575      : 5;
361 	u64 thresh                : 36;
362 	u64 rsvd_612_615	  : 4;
363 	u64 fc_msh_dst		  : 11;
364 	u64 reserved_627_630      : 4;
365 	u64 op_dpc_ena            : 1;
366 	u64 op_dpc_set            : 5;
367 	u64 reserved_637_637      : 1;
368 	u64 stream_ctx            : 1;
369 	u64 reserved_639          : 1;
370 	u64 reserved_640_703;		/* W10 */
371 	u64 reserved_704_767;		/* W11 */
372 	u64 reserved_768_831;		/* W12 */
373 	u64 reserved_832_895;		/* W13 */
374 	u64 reserved_896_959;		/* W14 */
375 	u64 reserved_960_1023;		/* W15 */
376 };
377 
378 static_assert(sizeof(struct npa_cn20k_pool_s) == NIX_MAX_CTX_SIZE);
379 
380 #endif
381