1
2
3
4
5#ifndef __NPC_HW_H__
6#define __NPC_HW_H__
7
8
9
10#define NPC_AF_CFG (0x0ull)
11#define NPC_AF_ACTIVE_PC (0x10ull)
12#define NPC_AF_CONST (0x20ull)
13#define NPC_AF_CONST1 (0x30ull)
14#define NPC_AF_BLK_RST (0x40ull)
15#define NPC_AF_MCAM_SCRUB_CTL (0xa0ull)
16#define NPC_AF_KCAM_SCRUB_CTL (0xb0ull)
17#define NPC_AF_KPUX_CFG(a) (0x500ull | (uint64_t)(a) << 3)
18#define NPC_AF_PCK_CFG (0x600ull)
19#define NPC_AF_PCK_DEF_OL2 (0x610ull)
20#define NPC_AF_PCK_DEF_OIP4 (0x620ull)
21#define NPC_AF_PCK_DEF_OIP6 (0x630ull)
22#define NPC_AF_PCK_DEF_IIP4 (0x640ull)
23#define NPC_AF_KEX_LDATAX_FLAGS_CFG(a) (0x800ull | (uint64_t)(a) << 3)
24#define NPC_AF_INTFX_KEX_CFG(a) (0x1010ull | (uint64_t)(a) << 8)
25#define NPC_AF_PKINDX_ACTION0(a) (0x80000ull | (uint64_t)(a) << 6)
26#define NPC_AF_PKINDX_ACTION1(a) (0x80008ull | (uint64_t)(a) << 6)
27#define NPC_AF_PKINDX_CPI_DEFX(a, b) \
28 (0x80020ull | (uint64_t)(a) << 6 | (uint64_t)(b) << 3)
29#define NPC_AF_CHLEN90B_PKIND (0x3bull)
30#define NPC_AF_KPUX_ENTRYX_CAMX(a, b, c) \
31 (0x100000ull | (uint64_t)(a) << 14 | (uint64_t)(b) << 6 | \
32 (uint64_t)(c) << 3)
33#define NPC_AF_KPUX_ENTRYX_ACTION0(a, b) \
34 (0x100020ull | (uint64_t)(a) << 14 | (uint64_t)(b) << 6)
35#define NPC_AF_KPUX_ENTRYX_ACTION1(a, b) \
36 (0x100028ull | (uint64_t)(a) << 14 | (uint64_t)(b) << 6)
37#define NPC_AF_KPUX_ENTRY_DISX(a, b) \
38 (0x180000ull | (uint64_t)(a) << 6 | (uint64_t)(b) << 3)
39#define NPC_AF_CPIX_CFG(a) (0x200000ull | (uint64_t)(a) << 3)
40#define NPC_AF_INTFX_LIDX_LTX_LDX_CFG(a, b, c, d) \
41 (0x900000ull | (uint64_t)(a) << 16 | (uint64_t)(b) << 12 | \
42 (uint64_t)(c) << 5 | (uint64_t)(d) << 3)
43#define NPC_AF_INTFX_LDATAX_FLAGSX_CFG(a, b, c) \
44 (0x980000ull | (uint64_t)(a) << 16 | (uint64_t)(b) << 12 | \
45 (uint64_t)(c) << 3)
46#define NPC_AF_MCAMEX_BANKX_CAMX_INTF(a, b, c) \
47 (0x1000000ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 | \
48 (uint64_t)(c) << 3)
49#define NPC_AF_MCAMEX_BANKX_CAMX_W0(a, b, c) \
50 (0x1000010ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 | \
51 (uint64_t)(c) << 3)
52#define NPC_AF_MCAMEX_BANKX_CAMX_W1(a, b, c) \
53 (0x1000020ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 | \
54 (uint64_t)(c) << 3)
55#define NPC_AF_MCAMEX_BANKX_CFG(a, b) \
56 (0x1800000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4)
57#define NPC_AF_MCAMEX_BANKX_STAT_ACT(a, b) \
58 (0x1880000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4)
59#define NPC_AF_MATCH_STATX(a) (0x1880008ull | (uint64_t)(a) << 8)
60#define NPC_AF_INTFX_MISS_STAT_ACT(a) (0x1880040ull + 0x8 * (uint64_t)(a))
61#define NPC_AF_MCAMEX_BANKX_ACTION(a, b) \
62 (0x1900000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4)
63#define NPC_AF_MCAMEX_BANKX_TAG_ACT(a, b) \
64 (0x1900008ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4)
65#define NPC_AF_INTFX_MISS_ACT(a) (0x1a00000ull | (uint64_t)(a) << 4)
66#define NPC_AF_INTFX_MISS_TAG_ACT(a) (0x1b00008ull | (uint64_t)(a) << 4)
67#define NPC_AF_MCAM_BANKX_HITX(a, b) \
68 (0x1c80000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4)
69#define NPC_AF_LKUP_CTL (0x2000000ull)
70#define NPC_AF_LKUP_DATAX(a) (0x2000200ull | (uint64_t)(a) << 4)
71#define NPC_AF_LKUP_RESULTX(a) (0x2000400ull | (uint64_t)(a) << 4)
72#define NPC_AF_INTFX_STAT(a) (0x2000800ull | (uint64_t)(a) << 4)
73#define NPC_AF_DBG_CTL (0x3000000ull)
74#define NPC_AF_DBG_STATUS (0x3000010ull)
75#define NPC_AF_KPUX_DBG(a) (0x3000020ull | (uint64_t)(a) << 8)
76#define NPC_AF_IKPU_ERR_CTL (0x3000080ull)
77#define NPC_AF_KPUX_ERR_CTL(a) (0x30000a0ull | (uint64_t)(a) << 8)
78#define NPC_AF_MCAM_DBG (0x3001000ull)
79#define NPC_AF_DBG_DATAX(a) (0x3001400ull | (uint64_t)(a) << 4)
80#define NPC_AF_DBG_RESULTX(a) (0x3001800ull | (uint64_t)(a) << 4)
81
82
83
84#define NPC_INTF_NIX0_RX (0x0ull)
85#define NPC_INTF_NIX0_TX (0x1ull)
86
87#define NPC_LKUPOP_PKT (0x0ull)
88#define NPC_LKUPOP_KEY (0x1ull)
89
90#define NPC_MCAM_KEY_X1 (0x0ull)
91#define NPC_MCAM_KEY_X2 (0x1ull)
92#define NPC_MCAM_KEY_X4 (0x2ull)
93
94#ifndef __NPC_ERRLEVELS__
95#define __NPC_ERRLEVELS__
96
97enum NPC_ERRLEV_E {
98 NPC_ERRLEV_RE = 0,
99 NPC_ERRLEV_LA = 1,
100 NPC_ERRLEV_LB = 2,
101 NPC_ERRLEV_LC = 3,
102 NPC_ERRLEV_LD = 4,
103 NPC_ERRLEV_LE = 5,
104 NPC_ERRLEV_LF = 6,
105 NPC_ERRLEV_LG = 7,
106 NPC_ERRLEV_LH = 8,
107 NPC_ERRLEV_R9 = 9,
108 NPC_ERRLEV_R10 = 10,
109 NPC_ERRLEV_R11 = 11,
110 NPC_ERRLEV_R12 = 12,
111 NPC_ERRLEV_R13 = 13,
112 NPC_ERRLEV_R14 = 14,
113 NPC_ERRLEV_NIX = 15,
114 NPC_ERRLEV_ENUM_LAST = 16,
115};
116
117#endif
118
119enum npc_kpu_err_code {
120 NPC_EC_NOERR = 0,
121 NPC_EC_UNK,
122 NPC_EC_IH_LENGTH,
123 NPC_EC_EDSA_UNK,
124 NPC_EC_L2_K1,
125 NPC_EC_L2_K2,
126 NPC_EC_L2_K3,
127 NPC_EC_L2_K3_ETYPE_UNK,
128 NPC_EC_L2_K4,
129 NPC_EC_MPLS_2MANY,
130 NPC_EC_MPLS_UNK,
131 NPC_EC_NSH_UNK,
132 NPC_EC_IP_TTL_0,
133 NPC_EC_IP_FRAG_OFFSET_1,
134 NPC_EC_IP_VER,
135 NPC_EC_IP6_HOP_0,
136 NPC_EC_IP6_VER,
137 NPC_EC_TCP_FLAGS_FIN_ONLY,
138 NPC_EC_TCP_FLAGS_ZERO,
139 NPC_EC_TCP_FLAGS_RST_FIN,
140 NPC_EC_TCP_FLAGS_URG_SYN,
141 NPC_EC_TCP_FLAGS_RST_SYN,
142 NPC_EC_TCP_FLAGS_SYN_FIN,
143 NPC_EC_VXLAN,
144 NPC_EC_NVGRE,
145 NPC_EC_GRE,
146 NPC_EC_GRE_VER1,
147 NPC_EC_L4,
148 NPC_EC_OIP4_CSUM,
149 NPC_EC_IIP4_CSUM,
150 NPC_EC_LAST
151};
152
153enum NPC_LID_E {
154 NPC_LID_LA = 0,
155 NPC_LID_LB,
156 NPC_LID_LC,
157 NPC_LID_LD,
158 NPC_LID_LE,
159 NPC_LID_LF,
160 NPC_LID_LG,
161 NPC_LID_LH,
162};
163
164#ifndef __NPC_LT_TYPES__
165#define __NPC_LT_TYPES__
166#define NPC_LT_NA 0
167
168enum npc_kpu_la_ltype {
169 NPC_LT_LA_8023 = 1,
170 NPC_LT_LA_ETHER,
171 NPC_LT_LA_IH_NIX_ETHER,
172 NPC_LT_LA_HIGIG2_ETHER = 7,
173 NPC_LT_LA_IH_NIX_HIGIG2_ETHER,
174 NPC_LT_LA_CUSTOM_L2_90B_ETHER,
175 NPC_LT_LA_CPT_HDR,
176 NPC_LT_LA_CUSTOM_L2_24B_ETHER,
177 NPC_LT_LA_CUSTOM_PRE_L2_ETHER,
178 NPC_LT_LA_CUSTOM0 = 0xE,
179 NPC_LT_LA_CUSTOM1 = 0xF,
180};
181
182enum npc_kpu_lb_ltype {
183 NPC_LT_LB_ETAG = 1,
184 NPC_LT_LB_CTAG,
185 NPC_LT_LB_STAG_QINQ,
186 NPC_LT_LB_BTAG,
187 NPC_LT_LB_PPPOE,
188 NPC_LT_LB_DSA,
189 NPC_LT_LB_DSA_VLAN,
190 NPC_LT_LB_EDSA,
191 NPC_LT_LB_EDSA_VLAN,
192 NPC_LT_LB_EXDSA,
193 NPC_LT_LB_EXDSA_VLAN,
194 NPC_LT_LB_FDSA,
195 NPC_LT_LB_VLAN_EXDSA,
196 NPC_LT_LB_CUSTOM0 = 0xE,
197 NPC_LT_LB_CUSTOM1 = 0xF,
198};
199
200enum npc_kpu_lc_ltype {
201 NPC_LT_LC_PTP = 1,
202 NPC_LT_LC_IP,
203 NPC_LT_LC_IP_OPT,
204 NPC_LT_LC_IP6,
205 NPC_LT_LC_IP6_EXT,
206 NPC_LT_LC_ARP,
207 NPC_LT_LC_RARP,
208 NPC_LT_LC_MPLS,
209 NPC_LT_LC_NSH,
210 NPC_LT_LC_FCOE,
211 NPC_LT_LC_NGIO,
212 NPC_LT_LC_CUSTOM0 = 0xE,
213 NPC_LT_LC_CUSTOM1 = 0xF,
214};
215
216
217
218
219enum npc_kpu_ld_ltype {
220 NPC_LT_LD_TCP = 1,
221 NPC_LT_LD_UDP,
222 NPC_LT_LD_ICMP,
223 NPC_LT_LD_SCTP,
224 NPC_LT_LD_ICMP6,
225 NPC_LT_LD_CUSTOM0,
226 NPC_LT_LD_CUSTOM1,
227 NPC_LT_LD_IGMP = 8,
228 NPC_LT_LD_AH,
229 NPC_LT_LD_GRE,
230 NPC_LT_LD_NVGRE,
231 NPC_LT_LD_NSH,
232 NPC_LT_LD_TU_MPLS_IN_NSH,
233 NPC_LT_LD_TU_MPLS_IN_IP,
234};
235
236enum npc_kpu_le_ltype {
237 NPC_LT_LE_VXLAN = 1,
238 NPC_LT_LE_GENEVE,
239 NPC_LT_LE_ESP,
240 NPC_LT_LE_GTPU = 4,
241 NPC_LT_LE_VXLANGPE,
242 NPC_LT_LE_GTPC,
243 NPC_LT_LE_NSH,
244 NPC_LT_LE_TU_MPLS_IN_GRE,
245 NPC_LT_LE_TU_NSH_IN_GRE,
246 NPC_LT_LE_TU_MPLS_IN_UDP,
247 NPC_LT_LE_CUSTOM0 = 0xE,
248 NPC_LT_LE_CUSTOM1 = 0xF,
249};
250
251#endif
252
253enum npc_kpu_lf_ltype {
254 NPC_LT_LF_TU_ETHER = 1,
255 NPC_LT_LF_TU_PPP,
256 NPC_LT_LF_TU_MPLS_IN_VXLANGPE,
257 NPC_LT_LF_TU_NSH_IN_VXLANGPE,
258 NPC_LT_LF_TU_MPLS_IN_NSH,
259 NPC_LT_LF_TU_3RD_NSH,
260 NPC_LT_LF_CUSTOM0 = 0xE,
261 NPC_LT_LF_CUSTOM1 = 0xF,
262};
263
264enum npc_kpu_lg_ltype {
265 NPC_LT_LG_TU_IP = 1,
266 NPC_LT_LG_TU_IP6,
267 NPC_LT_LG_TU_ARP,
268 NPC_LT_LG_TU_ETHER_IN_NSH,
269 NPC_LT_LG_CUSTOM0 = 0xE,
270 NPC_LT_LG_CUSTOM1 = 0xF,
271};
272
273
274
275
276enum npc_kpu_lh_ltype {
277 NPC_LT_LH_TU_TCP = 1,
278 NPC_LT_LH_TU_UDP,
279 NPC_LT_LH_TU_ICMP,
280 NPC_LT_LH_TU_SCTP,
281 NPC_LT_LH_TU_ICMP6,
282 NPC_LT_LH_TU_IGMP = 8,
283 NPC_LT_LH_TU_ESP,
284 NPC_LT_LH_TU_AH,
285 NPC_LT_LH_CUSTOM0 = 0xE,
286 NPC_LT_LH_CUSTOM1 = 0xF,
287};
288
289enum npc_kpu_lb_uflag {
290 NPC_F_LB_U_UNK_ETYPE = 0x80,
291 NPC_F_LB_U_MORE_TAG = 0x40,
292};
293
294enum npc_kpu_lb_lflag {
295 NPC_F_LB_L_WITH_CTAG = 1,
296 NPC_F_LB_L_WITH_CTAG_UNK,
297 NPC_F_LB_L_WITH_STAG_CTAG,
298 NPC_F_LB_L_WITH_STAG_STAG,
299 NPC_F_LB_L_WITH_QINQ_CTAG,
300 NPC_F_LB_L_WITH_QINQ_QINQ,
301 NPC_F_LB_L_WITH_ITAG,
302 NPC_F_LB_L_WITH_ITAG_STAG,
303 NPC_F_LB_L_WITH_ITAG_CTAG,
304 NPC_F_LB_L_WITH_ITAG_UNK,
305 NPC_F_LB_L_WITH_BTAG_ITAG,
306 NPC_F_LB_L_WITH_STAG,
307 NPC_F_LB_L_WITH_QINQ,
308 NPC_F_LB_L_DSA,
309 NPC_F_LB_L_DSA_VLAN,
310 NPC_F_LB_L_EDSA,
311 NPC_F_LB_L_EDSA_VLAN,
312 NPC_F_LB_L_EXDSA,
313 NPC_F_LB_L_EXDSA_VLAN,
314 NPC_F_LB_L_FDSA,
315};
316
317enum npc_kpu_lc_uflag {
318 NPC_F_LC_U_UNK_PROTO = 0x10,
319 NPC_F_LC_U_IP_FRAG = 0x20,
320 NPC_F_LC_U_IP6_FRAG = 0x40,
321};
322
323enum npc_kpu_lc_lflag {
324 NPC_F_LC_L_IP_IN_IP = 1,
325 NPC_F_LC_L_6TO4,
326 NPC_F_LC_L_MPLS_IN_IP,
327 NPC_F_LC_L_IP6_TUN_IP6,
328 NPC_F_LC_L_IP6_MPLS_IN_IP,
329 NPC_F_LC_L_MPLS_4_LABELS,
330 NPC_F_LC_L_MPLS_3_LABELS,
331 NPC_F_LC_L_MPLS_2_LABELS,
332 NPC_F_LC_L_EXT_HOP,
333 NPC_F_LC_L_EXT_DEST,
334 NPC_F_LC_L_EXT_ROUT,
335 NPC_F_LC_L_EXT_MOBILITY,
336 NPC_F_LC_L_EXT_HOSTID,
337 NPC_F_LC_L_EXT_SHIM6,
338};
339
340
341struct npc_kpu_profile_cam {
342 uint8_t state;
343 uint8_t state_mask;
344 uint16_t dp0;
345 uint16_t dp0_mask;
346 uint16_t dp1;
347 uint16_t dp1_mask;
348 uint16_t dp2;
349 uint16_t dp2_mask;
350};
351
352struct npc_kpu_profile_action {
353 uint8_t errlev;
354 uint8_t errcode;
355 uint8_t dp0_offset;
356 uint8_t dp1_offset;
357 uint8_t dp2_offset;
358 uint8_t bypass_count;
359 uint8_t parse_done;
360 uint8_t next_state;
361 uint8_t ptr_advance;
362 uint8_t cap_ena;
363 uint8_t lid;
364 uint8_t ltype;
365 uint8_t flags;
366 uint8_t offset;
367 uint8_t mask;
368 uint8_t right;
369 uint8_t shift;
370};
371
372struct npc_kpu_profile {
373 int cam_entries;
374 int action_entries;
375 struct npc_kpu_profile_cam *cam;
376 struct npc_kpu_profile_action *action;
377};
378
379
380struct npc_kpu_cam {
381 uint64_t dp0_data : 16;
382 uint64_t dp1_data : 16;
383 uint64_t dp2_data : 16;
384 uint64_t state : 8;
385 uint64_t rsvd_63_56 : 8;
386};
387
388struct npc_kpu_action0 {
389 uint64_t var_len_shift : 3;
390 uint64_t var_len_right : 1;
391 uint64_t var_len_mask : 8;
392 uint64_t var_len_offset : 8;
393 uint64_t ptr_advance : 8;
394 uint64_t capture_flags : 8;
395 uint64_t capture_ltype : 4;
396 uint64_t capture_lid : 3;
397 uint64_t rsvd_43 : 1;
398 uint64_t next_state : 8;
399 uint64_t parse_done : 1;
400 uint64_t capture_ena : 1;
401 uint64_t byp_count : 3;
402 uint64_t rsvd_63_57 : 7;
403};
404
405struct npc_kpu_action1 {
406 uint64_t dp0_offset : 8;
407 uint64_t dp1_offset : 8;
408 uint64_t dp2_offset : 8;
409 uint64_t errcode : 8;
410 uint64_t errlev : 4;
411 uint64_t rsvd_63_36 : 28;
412};
413
414struct npc_kpu_pkind_cpi_def {
415 uint64_t cpi_base : 10;
416 uint64_t rsvd_11_10 : 2;
417 uint64_t add_shift : 3;
418 uint64_t rsvd_15 : 1;
419 uint64_t add_mask : 8;
420 uint64_t add_offset : 8;
421 uint64_t flags_mask : 8;
422 uint64_t flags_match : 8;
423 uint64_t ltype_mask : 4;
424 uint64_t ltype_match : 4;
425 uint64_t lid : 3;
426 uint64_t rsvd_62_59 : 4;
427 uint64_t ena : 1;
428};
429
430struct nix_rx_action {
431 uint64_t op : 4;
432 uint64_t pf_func : 16;
433 uint64_t index : 20;
434 uint64_t match_id : 16;
435 uint64_t flow_key_alg : 5;
436 uint64_t rsvd_63_61 : 3;
437};
438
439struct nix_tx_action {
440 uint64_t op : 4;
441 uint64_t rsvd_11_4 : 8;
442 uint64_t index : 20;
443 uint64_t match_id : 16;
444 uint64_t rsvd_63_48 : 16;
445};
446
447
448struct npc_layer_info_s {
449 uint32_t lptr : 8;
450 uint32_t flags : 8;
451 uint32_t ltype : 4;
452 uint32_t rsvd_31_20 : 12;
453};
454
455
456struct npc_layer_kex_s {
457 uint16_t flags : 8;
458 uint16_t ltype : 4;
459 uint16_t rsvd_15_12 : 4;
460};
461
462
463struct npc_mcam_key_x1_s {
464 uint64_t intf : 2;
465 uint64_t rsvd_63_2 : 62;
466 uint64_t kw0 : 64;
467 uint64_t kw1 : 48;
468 uint64_t rsvd_191_176 : 16;
469};
470
471
472struct npc_mcam_key_x2_s {
473 uint64_t intf : 2;
474 uint64_t rsvd_63_2 : 62;
475 uint64_t kw0 : 64;
476 uint64_t kw1 : 64;
477 uint64_t kw2 : 64;
478 uint64_t kw3 : 32;
479 uint64_t rsvd_319_288 : 32;
480};
481
482
483struct npc_mcam_key_x4_s {
484 uint64_t intf : 2;
485 uint64_t rsvd_63_2 : 62;
486 uint64_t kw0 : 64;
487 uint64_t kw1 : 64;
488 uint64_t kw2 : 64;
489 uint64_t kw3 : 64;
490 uint64_t kw4 : 64;
491 uint64_t kw5 : 64;
492 uint64_t kw6 : 64;
493};
494
495
496struct npc_parse_kex_s {
497 uint64_t chan : 12;
498 uint64_t errlev : 4;
499 uint64_t errcode : 8;
500 uint64_t l2m : 1;
501 uint64_t l2b : 1;
502 uint64_t l3m : 1;
503 uint64_t l3b : 1;
504 uint64_t la : 12;
505 uint64_t lb : 12;
506 uint64_t lc : 12;
507 uint64_t ld : 12;
508 uint64_t le : 12;
509 uint64_t lf : 12;
510 uint64_t lg : 12;
511 uint64_t lh : 12;
512 uint64_t rsvd_127_124 : 4;
513};
514
515
516struct npc_result_s {
517 uint64_t intf : 2;
518 uint64_t pkind : 6;
519 uint64_t chan : 12;
520 uint64_t errlev : 4;
521 uint64_t errcode : 8;
522 uint64_t l2m : 1;
523 uint64_t l2b : 1;
524 uint64_t l3m : 1;
525 uint64_t l3b : 1;
526 uint64_t eoh_ptr : 8;
527 uint64_t rsvd_63_44 : 20;
528 uint64_t action : 64;
529 uint64_t vtag_action : 64;
530 uint64_t la : 20;
531 uint64_t lb : 20;
532 uint64_t lc : 20;
533 uint64_t rsvd_255_252 : 4;
534 uint64_t ld : 20;
535 uint64_t le : 20;
536 uint64_t lf : 20;
537 uint64_t rsvd_319_316 : 4;
538 uint64_t lg : 20;
539 uint64_t lh : 20;
540 uint64_t rsvd_383_360 : 24;
541};
542
543#endif
544