1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Marvell OcteonTx2 RVU Admin Function driver
4 * Copyright (C) 2018 Marvell International Ltd.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
27 enum npc_kpu_la_ltype {
30 NPC_LT_LA_IH_NIX_ETHER,
34 NPC_LT_LA_HIGIG2_ETHER,
35 NPC_LT_LA_IH_NIX_HIGIG2_ETHER,
36 NPC_LT_LA_CUSTOM0 = 0xE,
37 NPC_LT_LA_CUSTOM1 = 0xF,
40 enum npc_kpu_lb_ltype {
53 NPC_LT_LB_CUSTOM0 = 0xE,
54 NPC_LT_LB_CUSTOM1 = 0xF,
57 enum npc_kpu_lc_ltype {
68 NPC_LT_LC_CUSTOM0 = 0xE,
69 NPC_LT_LC_CUSTOM1 = 0xF,
72 /* Don't modify Ltypes upto SCTP, otherwise it will
73 * effect flow tag calculation and thus RSS.
75 enum npc_kpu_ld_ltype {
88 NPC_LT_LD_TU_MPLS_IN_NSH,
89 NPC_LT_LD_TU_MPLS_IN_IP,
92 enum npc_kpu_le_ltype {
100 NPC_LT_LE_TU_MPLS_IN_GRE,
101 NPC_LT_LE_TU_NSH_IN_GRE,
102 NPC_LT_LE_TU_MPLS_IN_UDP,
103 NPC_LT_LE_CUSTOM0 = 0xE,
104 NPC_LT_LE_CUSTOM1 = 0xF,
107 enum npc_kpu_lf_ltype {
108 NPC_LT_LF_TU_ETHER = 1,
110 NPC_LT_LF_TU_MPLS_IN_VXLANGPE,
111 NPC_LT_LF_TU_NSH_IN_VXLANGPE,
112 NPC_LT_LF_TU_MPLS_IN_NSH,
113 NPC_LT_LF_TU_3RD_NSH,
114 NPC_LT_LF_CUSTOM0 = 0xE,
115 NPC_LT_LF_CUSTOM1 = 0xF,
118 enum npc_kpu_lg_ltype {
122 NPC_LT_LG_TU_ETHER_IN_NSH,
123 NPC_LT_LG_CUSTOM0 = 0xE,
124 NPC_LT_LG_CUSTOM1 = 0xF,
127 /* Don't modify Ltypes upto SCTP, otherwise it will
128 * effect flow tag calculation and thus RSS.
130 enum npc_kpu_lh_ltype {
131 NPC_LT_LH_TU_TCP = 1,
136 NPC_LT_LH_TU_IGMP = 8,
139 NPC_LT_LH_CUSTOM0 = 0xE,
140 NPC_LT_LH_CUSTOM1 = 0xF,
143 struct npc_kpu_profile_cam {
154 struct npc_kpu_profile_action {
174 struct npc_kpu_profile {
177 const struct npc_kpu_profile_cam *cam;
178 const struct npc_kpu_profile_action *action;
181 /* NPC KPU register formats */
183 #if defined(__BIG_ENDIAN_BITFIELD)
198 struct npc_kpu_action0 {
199 #if defined(__BIG_ENDIAN_BITFIELD)
207 u64 capture_ltype : 4;
208 u64 capture_flags : 8;
210 u64 var_len_offset : 8;
211 u64 var_len_mask : 8;
212 u64 var_len_right : 1;
213 u64 var_len_shift : 3;
215 u64 var_len_shift : 3;
216 u64 var_len_right : 1;
217 u64 var_len_mask : 8;
218 u64 var_len_offset : 8;
220 u64 capture_flags : 8;
221 u64 capture_ltype : 4;
232 struct npc_kpu_action1 {
233 #if defined(__BIG_ENDIAN_BITFIELD)
250 struct npc_kpu_pkind_cpi_def {
251 #if defined(__BIG_ENDIAN_BITFIELD)
282 struct nix_rx_action {
283 #if defined(__BIG_ENDIAN_BITFIELD)
300 /* NPC_AF_INTFX_KEX_CFG field masks */
301 #define NPC_PARSE_NIBBLE GENMASK_ULL(30, 0)
303 /* NIX Receive Vtag Action Structure */
304 #define VTAG0_VALID_BIT BIT_ULL(15)
305 #define VTAG0_TYPE_MASK GENMASK_ULL(14, 12)
306 #define VTAG0_LID_MASK GENMASK_ULL(10, 8)
307 #define VTAG0_RELPTR_MASK GENMASK_ULL(7, 0)
309 struct npc_mcam_kex {
310 /* MKEX Profle Header */
311 u64 mkex_sign; /* "mcam-kex-profile" (8 bytes/ASCII characters) */
312 u8 name[MKEX_NAME_LEN]; /* MKEX Profile name */
313 u64 cpu_model; /* Format as profiled by CPU hardware */
314 u64 kpu_version; /* KPU firmware/profile version */
315 u64 reserved; /* Reserved for extension */
317 /* MKEX Profle Data */
318 u64 keyx_cfg[NPC_MAX_INTF]; /* NPC_AF_INTF(0..1)_KEX_CFG */
319 /* NPC_AF_KEX_LDATA(0..1)_FLAGS_CFG */
320 u64 kex_ld_flags[NPC_MAX_LD];
321 /* NPC_AF_INTF(0..1)_LID(0..7)_LT(0..15)_LD(0..1)_CFG */
322 u64 intf_lid_lt_ld[NPC_MAX_INTF][NPC_MAX_LID][NPC_MAX_LT][NPC_MAX_LD];
323 /* NPC_AF_INTF(0..1)_LDATA(0..1)_FLAGS(0..15)_CFG */
324 u64 intf_ld_flags[NPC_MAX_INTF][NPC_MAX_LD][NPC_MAX_LFL];
333 struct npc_lt_def_ipsec {
341 struct npc_lt_def_cfg {
342 struct npc_lt_def rx_ol2;
343 struct npc_lt_def rx_oip4;
344 struct npc_lt_def rx_iip4;
345 struct npc_lt_def rx_oip6;
346 struct npc_lt_def rx_iip6;
347 struct npc_lt_def rx_otcp;
348 struct npc_lt_def rx_itcp;
349 struct npc_lt_def rx_oudp;
350 struct npc_lt_def rx_iudp;
351 struct npc_lt_def rx_osctp;
352 struct npc_lt_def rx_isctp;
353 struct npc_lt_def_ipsec rx_ipsec[2];
354 struct npc_lt_def pck_ol2;
355 struct npc_lt_def pck_oip4;
356 struct npc_lt_def pck_oip6;
357 struct npc_lt_def pck_iip4;