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