1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2021 Marvell.
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 | \
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 | \
46 #define NPC_AF_MCAMEX_BANKX_CAMX_INTF(a, b, c) \
47 (0x1000000ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 | \
49 #define NPC_AF_MCAMEX_BANKX_CAMX_W0(a, b, c) \
50 (0x1000010ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 | \
52 #define NPC_AF_MCAMEX_BANKX_CAMX_W1(a, b, c) \
53 (0x1000020ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 | \
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)
84 #define NPC_INTF_NIX0_RX (0x0ull)
85 #define NPC_INTF_NIX0_TX (0x1ull)
87 #define NPC_LKUPOP_PKT (0x0ull)
88 #define NPC_LKUPOP_KEY (0x1ull)
90 #define NPC_MCAM_KEY_X1 (0x0ull)
91 #define NPC_MCAM_KEY_X2 (0x1ull)
92 #define NPC_MCAM_KEY_X4 (0x2ull)
94 #ifndef __NPC_ERRLEVELS__
95 #define __NPC_ERRLEVELS__
114 NPC_ERRLEV_ENUM_LAST = 16,
119 enum npc_kpu_err_code {
120 NPC_EC_NOERR = 0, /* has to be zero */
127 NPC_EC_L2_K3_ETYPE_UNK,
133 NPC_EC_IP_FRAG_OFFSET_1,
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,
150 NPC_EC_LAST /* has to be the last item */
164 #ifndef __NPC_LT_TYPES__
165 #define __NPC_LT_TYPES__
168 enum npc_kpu_la_ltype {
171 NPC_LT_LA_IH_NIX_ETHER,
172 NPC_LT_LA_IH_8_ETHER,
173 NPC_LT_LA_IH_4_ETHER,
174 NPC_LT_LA_IH_2_ETHER,
175 NPC_LT_LA_HIGIG2_ETHER,
176 NPC_LT_LA_IH_NIX_HIGIG2_ETHER,
177 NPC_LT_LA_CH_LEN_90B_ETHER,
179 NPC_LT_LA_CUSTOM0 = 0xE,
180 NPC_LT_LA_CUSTOM1 = 0xF,
183 enum npc_kpu_lb_ltype {
194 NPC_LT_LB_EXDSA_VLAN,
196 NPC_LT_LB_VLAN_EXDSA,
197 NPC_LT_LB_CUSTOM0 = 0xE,
198 NPC_LT_LB_CUSTOM1 = 0xF,
201 enum npc_kpu_lc_ltype {
213 NPC_LT_LC_CUSTOM0 = 0xE,
214 NPC_LT_LC_CUSTOM1 = 0xF,
217 /* Don't modify Ltypes up to SCTP, otherwise it will
218 * effect flow tag calculation and thus RSS.
220 enum npc_kpu_ld_ltype {
233 NPC_LT_LD_TU_MPLS_IN_NSH,
234 NPC_LT_LD_TU_MPLS_IN_IP,
237 enum npc_kpu_le_ltype {
245 NPC_LT_LE_TU_MPLS_IN_GRE,
246 NPC_LT_LE_TU_NSH_IN_GRE,
247 NPC_LT_LE_TU_MPLS_IN_UDP,
248 NPC_LT_LE_CUSTOM0 = 0xE,
249 NPC_LT_LE_CUSTOM1 = 0xF,
254 enum npc_kpu_lf_ltype {
255 NPC_LT_LF_TU_ETHER = 1,
257 NPC_LT_LF_TU_MPLS_IN_VXLANGPE,
258 NPC_LT_LF_TU_NSH_IN_VXLANGPE,
259 NPC_LT_LF_TU_MPLS_IN_NSH,
260 NPC_LT_LF_TU_3RD_NSH,
261 NPC_LT_LF_CUSTOM0 = 0xE,
262 NPC_LT_LF_CUSTOM1 = 0xF,
265 enum npc_kpu_lg_ltype {
269 NPC_LT_LG_TU_ETHER_IN_NSH,
270 NPC_LT_LG_CUSTOM0 = 0xE,
271 NPC_LT_LG_CUSTOM1 = 0xF,
274 /* Don't modify Ltypes up to SCTP, otherwise it will
275 * effect flow tag calculation and thus RSS.
277 enum npc_kpu_lh_ltype {
278 NPC_LT_LH_TU_TCP = 1,
283 NPC_LT_LH_TU_IGMP = 8,
286 NPC_LT_LH_CUSTOM0 = 0xE,
287 NPC_LT_LH_CUSTOM1 = 0xF,
290 enum npc_kpu_lb_uflag {
291 NPC_F_LB_U_UNK_ETYPE = 0x80,
292 NPC_F_LB_U_MORE_TAG = 0x40,
295 enum npc_kpu_lb_lflag {
296 NPC_F_LB_L_WITH_CTAG = 1,
297 NPC_F_LB_L_WITH_CTAG_UNK,
298 NPC_F_LB_L_WITH_STAG_CTAG,
299 NPC_F_LB_L_WITH_STAG_STAG,
300 NPC_F_LB_L_WITH_QINQ_CTAG,
301 NPC_F_LB_L_WITH_QINQ_QINQ,
302 NPC_F_LB_L_WITH_ITAG,
303 NPC_F_LB_L_WITH_ITAG_STAG,
304 NPC_F_LB_L_WITH_ITAG_CTAG,
305 NPC_F_LB_L_WITH_ITAG_UNK,
306 NPC_F_LB_L_WITH_BTAG_ITAG,
307 NPC_F_LB_L_WITH_STAG,
308 NPC_F_LB_L_WITH_QINQ,
312 NPC_F_LB_L_EDSA_VLAN,
314 NPC_F_LB_L_EXDSA_VLAN,
318 enum npc_kpu_lc_uflag {
319 NPC_F_LC_U_UNK_PROTO = 0x10,
320 NPC_F_LC_U_IP_FRAG = 0x20,
321 NPC_F_LC_U_IP6_FRAG = 0x40,
324 /* Structures definitions */
325 struct npc_kpu_profile_cam {
336 struct npc_kpu_profile_action {
342 uint8_t bypass_count;
356 struct npc_kpu_profile {
359 struct npc_kpu_profile_cam *cam;
360 struct npc_kpu_profile_action *action;
363 /* NPC KPU register formats */
365 uint64_t dp0_data : 16;
366 uint64_t dp1_data : 16;
367 uint64_t dp2_data : 16;
369 uint64_t rsvd_63_56 : 8;
372 struct npc_kpu_action0 {
373 uint64_t var_len_shift : 3;
374 uint64_t var_len_right : 1;
375 uint64_t var_len_mask : 8;
376 uint64_t var_len_offset : 8;
377 uint64_t ptr_advance : 8;
378 uint64_t capture_flags : 8;
379 uint64_t capture_ltype : 4;
380 uint64_t capture_lid : 3;
381 uint64_t rsvd_43 : 1;
382 uint64_t next_state : 8;
383 uint64_t parse_done : 1;
384 uint64_t capture_ena : 1;
385 uint64_t byp_count : 3;
386 uint64_t rsvd_63_57 : 7;
389 struct npc_kpu_action1 {
390 uint64_t dp0_offset : 8;
391 uint64_t dp1_offset : 8;
392 uint64_t dp2_offset : 8;
393 uint64_t errcode : 8;
395 uint64_t rsvd_63_36 : 28;
398 struct npc_kpu_pkind_cpi_def {
399 uint64_t cpi_base : 10;
400 uint64_t rsvd_11_10 : 2;
401 uint64_t add_shift : 3;
402 uint64_t rsvd_15 : 1;
403 uint64_t add_mask : 8;
404 uint64_t add_offset : 8;
405 uint64_t flags_mask : 8;
406 uint64_t flags_match : 8;
407 uint64_t ltype_mask : 4;
408 uint64_t ltype_match : 4;
410 uint64_t rsvd_62_59 : 4;
414 struct nix_rx_action {
416 uint64_t pf_func : 16;
418 uint64_t match_id : 16;
419 uint64_t flow_key_alg : 5;
420 uint64_t rsvd_63_61 : 3;
423 struct nix_tx_action {
425 uint64_t rsvd_11_4 : 8;
427 uint64_t match_id : 16;
428 uint64_t rsvd_63_48 : 16;
431 /* NPC layer parse information structure */
432 struct npc_layer_info_s {
436 uint32_t rsvd_31_20 : 12;
439 /* NPC layer mcam search key extract structure */
440 struct npc_layer_kex_s {
443 uint16_t rsvd_15_12 : 4;
446 /* NPC mcam search key x1 structure */
447 struct npc_mcam_key_x1_s {
449 uint64_t rsvd_63_2 : 62;
450 uint64_t kw0 : 64; /* W1 */
452 uint64_t rsvd_191_176 : 16;
455 /* NPC mcam search key x2 structure */
456 struct npc_mcam_key_x2_s {
458 uint64_t rsvd_63_2 : 62;
459 uint64_t kw0 : 64; /* W1 */
460 uint64_t kw1 : 64; /* W2 */
461 uint64_t kw2 : 64; /* W3 */
463 uint64_t rsvd_319_288 : 32;
466 /* NPC mcam search key x4 structure */
467 struct npc_mcam_key_x4_s {
469 uint64_t rsvd_63_2 : 62;
470 uint64_t kw0 : 64; /* W1 */
471 uint64_t kw1 : 64; /* W2 */
472 uint64_t kw2 : 64; /* W3 */
473 uint64_t kw3 : 64; /* W4 */
474 uint64_t kw4 : 64; /* W5 */
475 uint64_t kw5 : 64; /* W6 */
476 uint64_t kw6 : 64; /* W7 */
479 /* NPC parse key extract structure */
480 struct npc_parse_kex_s {
483 uint64_t errcode : 8;
496 uint64_t rsvd_127_124 : 4;
499 /* NPC result structure */
500 struct npc_result_s {
505 uint64_t errcode : 8;
510 uint64_t eoh_ptr : 8;
511 uint64_t rsvd_63_44 : 20;
512 uint64_t action : 64; /* W1 */
513 uint64_t vtag_action : 64; /* W2 */
517 uint64_t rsvd_255_252 : 4;
521 uint64_t rsvd_319_316 : 4;
524 uint64_t rsvd_383_360 : 24;
527 #endif /* __NPC_HW_H__ */