1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2014-2020 Broadcom
6 #include "ulp_template_db_enum.h"
7 #include "ulp_template_db_field.h"
8 #include "ulp_template_struct.h"
9 #include "ulp_rte_parser.h"
10 #include "ulp_template_db_tbl.h"
12 uint32_t ulp_act_prop_map_table[] = {
13 [BNXT_ULP_ACT_PROP_IDX_ENCAP_TUN_SZ] =
14 BNXT_ULP_ACT_PROP_SZ_ENCAP_TUN_SZ,
15 [BNXT_ULP_ACT_PROP_IDX_ENCAP_IP_SZ] =
16 BNXT_ULP_ACT_PROP_SZ_ENCAP_IP_SZ,
17 [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_SZ] =
18 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG_SZ,
19 [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_TYPE] =
20 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG_TYPE,
21 [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_NUM] =
22 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG_NUM,
23 [BNXT_ULP_ACT_PROP_IDX_ENCAP_L3_TYPE] =
24 BNXT_ULP_ACT_PROP_SZ_ENCAP_L3_TYPE,
25 [BNXT_ULP_ACT_PROP_IDX_MPLS_POP_NUM] =
26 BNXT_ULP_ACT_PROP_SZ_MPLS_POP_NUM,
27 [BNXT_ULP_ACT_PROP_IDX_MPLS_PUSH_NUM] =
28 BNXT_ULP_ACT_PROP_SZ_MPLS_PUSH_NUM,
29 [BNXT_ULP_ACT_PROP_IDX_PORT_ID] =
30 BNXT_ULP_ACT_PROP_SZ_PORT_ID,
31 [BNXT_ULP_ACT_PROP_IDX_VNIC] =
32 BNXT_ULP_ACT_PROP_SZ_VNIC,
33 [BNXT_ULP_ACT_PROP_IDX_VPORT] =
34 BNXT_ULP_ACT_PROP_SZ_VPORT,
35 [BNXT_ULP_ACT_PROP_IDX_MARK] =
36 BNXT_ULP_ACT_PROP_SZ_MARK,
37 [BNXT_ULP_ACT_PROP_IDX_COUNT] =
38 BNXT_ULP_ACT_PROP_SZ_COUNT,
39 [BNXT_ULP_ACT_PROP_IDX_METER] =
40 BNXT_ULP_ACT_PROP_SZ_METER,
41 [BNXT_ULP_ACT_PROP_IDX_SET_MAC_SRC] =
42 BNXT_ULP_ACT_PROP_SZ_SET_MAC_SRC,
43 [BNXT_ULP_ACT_PROP_IDX_SET_MAC_DST] =
44 BNXT_ULP_ACT_PROP_SZ_SET_MAC_DST,
45 [BNXT_ULP_ACT_PROP_IDX_PUSH_VLAN] =
46 BNXT_ULP_ACT_PROP_SZ_PUSH_VLAN,
47 [BNXT_ULP_ACT_PROP_IDX_SET_VLAN_PCP] =
48 BNXT_ULP_ACT_PROP_SZ_SET_VLAN_PCP,
49 [BNXT_ULP_ACT_PROP_IDX_SET_VLAN_VID] =
50 BNXT_ULP_ACT_PROP_SZ_SET_VLAN_VID,
51 [BNXT_ULP_ACT_PROP_IDX_SET_IPV4_SRC] =
52 BNXT_ULP_ACT_PROP_SZ_SET_IPV4_SRC,
53 [BNXT_ULP_ACT_PROP_IDX_SET_IPV4_DST] =
54 BNXT_ULP_ACT_PROP_SZ_SET_IPV4_DST,
55 [BNXT_ULP_ACT_PROP_IDX_SET_IPV6_SRC] =
56 BNXT_ULP_ACT_PROP_SZ_SET_IPV6_SRC,
57 [BNXT_ULP_ACT_PROP_IDX_SET_IPV6_DST] =
58 BNXT_ULP_ACT_PROP_SZ_SET_IPV6_DST,
59 [BNXT_ULP_ACT_PROP_IDX_SET_TP_SRC] =
60 BNXT_ULP_ACT_PROP_SZ_SET_TP_SRC,
61 [BNXT_ULP_ACT_PROP_IDX_SET_TP_DST] =
62 BNXT_ULP_ACT_PROP_SZ_SET_TP_DST,
63 [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_0] =
64 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_0,
65 [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_1] =
66 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_1,
67 [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_2] =
68 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_2,
69 [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_3] =
70 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_3,
71 [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_4] =
72 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_4,
73 [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_5] =
74 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_5,
75 [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_6] =
76 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_6,
77 [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_7] =
78 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_7,
79 [BNXT_ULP_ACT_PROP_IDX_ENCAP_L2_DMAC] =
80 BNXT_ULP_ACT_PROP_SZ_ENCAP_L2_DMAC,
81 [BNXT_ULP_ACT_PROP_IDX_ENCAP_L2_SMAC] =
82 BNXT_ULP_ACT_PROP_SZ_ENCAP_L2_SMAC,
83 [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG] =
84 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG,
85 [BNXT_ULP_ACT_PROP_IDX_ENCAP_IP] =
86 BNXT_ULP_ACT_PROP_SZ_ENCAP_IP,
87 [BNXT_ULP_ACT_PROP_IDX_ENCAP_IP_SRC] =
88 BNXT_ULP_ACT_PROP_SZ_ENCAP_IP_SRC,
89 [BNXT_ULP_ACT_PROP_IDX_ENCAP_UDP] =
90 BNXT_ULP_ACT_PROP_SZ_ENCAP_UDP,
91 [BNXT_ULP_ACT_PROP_IDX_ENCAP_TUN] =
92 BNXT_ULP_ACT_PROP_SZ_ENCAP_TUN,
93 [BNXT_ULP_ACT_PROP_IDX_LAST] =
94 BNXT_ULP_ACT_PROP_SZ_LAST
97 struct bnxt_ulp_rte_act_info ulp_act_info[] = {
98 [RTE_FLOW_ACTION_TYPE_END] = {
99 .act_type = BNXT_ULP_ACT_TYPE_END,
100 .proto_act_func = NULL
102 [RTE_FLOW_ACTION_TYPE_VOID] = {
103 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
104 .proto_act_func = ulp_rte_void_act_handler
106 [RTE_FLOW_ACTION_TYPE_PASSTHRU] = {
107 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
108 .proto_act_func = NULL
110 [RTE_FLOW_ACTION_TYPE_JUMP] = {
111 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
112 .proto_act_func = NULL
114 [RTE_FLOW_ACTION_TYPE_MARK] = {
115 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
116 .proto_act_func = ulp_rte_mark_act_handler
118 [RTE_FLOW_ACTION_TYPE_FLAG] = {
119 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
120 .proto_act_func = NULL
122 [RTE_FLOW_ACTION_TYPE_QUEUE] = {
123 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
124 .proto_act_func = NULL
126 [RTE_FLOW_ACTION_TYPE_DROP] = {
127 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
128 .proto_act_func = ulp_rte_drop_act_handler
130 [RTE_FLOW_ACTION_TYPE_COUNT] = {
131 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
132 .proto_act_func = ulp_rte_count_act_handler
134 [RTE_FLOW_ACTION_TYPE_RSS] = {
135 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
136 .proto_act_func = ulp_rte_rss_act_handler
138 [RTE_FLOW_ACTION_TYPE_PF] = {
139 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
140 .proto_act_func = ulp_rte_pf_act_handler
142 [RTE_FLOW_ACTION_TYPE_VF] = {
143 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
144 .proto_act_func = ulp_rte_vf_act_handler
146 [RTE_FLOW_ACTION_TYPE_PHY_PORT] = {
147 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
148 .proto_act_func = ulp_rte_phy_port_act_handler
150 [RTE_FLOW_ACTION_TYPE_PORT_ID] = {
151 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
152 .proto_act_func = ulp_rte_port_id_act_handler
154 [RTE_FLOW_ACTION_TYPE_METER] = {
155 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
156 .proto_act_func = NULL
158 [RTE_FLOW_ACTION_TYPE_SECURITY] = {
159 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
160 .proto_act_func = NULL
162 [RTE_FLOW_ACTION_TYPE_OF_SET_MPLS_TTL] = {
163 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
164 .proto_act_func = NULL
166 [RTE_FLOW_ACTION_TYPE_OF_DEC_MPLS_TTL] = {
167 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
168 .proto_act_func = NULL
170 [RTE_FLOW_ACTION_TYPE_OF_SET_NW_TTL] = {
171 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
172 .proto_act_func = NULL
174 [RTE_FLOW_ACTION_TYPE_OF_DEC_NW_TTL] = {
175 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
176 .proto_act_func = NULL
178 [RTE_FLOW_ACTION_TYPE_OF_COPY_TTL_OUT] = {
179 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
180 .proto_act_func = NULL
182 [RTE_FLOW_ACTION_TYPE_OF_COPY_TTL_IN] = {
183 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
184 .proto_act_func = NULL
186 [RTE_FLOW_ACTION_TYPE_OF_POP_VLAN] = {
187 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
188 .proto_act_func = ulp_rte_of_pop_vlan_act_handler
190 [RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN] = {
191 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
192 .proto_act_func = ulp_rte_of_push_vlan_act_handler
194 [RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID] = {
195 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
196 .proto_act_func = ulp_rte_of_set_vlan_vid_act_handler
198 [RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP] = {
199 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
200 .proto_act_func = ulp_rte_of_set_vlan_pcp_act_handler
202 [RTE_FLOW_ACTION_TYPE_OF_POP_MPLS] = {
203 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
204 .proto_act_func = NULL
206 [RTE_FLOW_ACTION_TYPE_OF_PUSH_MPLS] = {
207 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
208 .proto_act_func = NULL
210 [RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP] = {
211 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
212 .proto_act_func = ulp_rte_vxlan_encap_act_handler
214 [RTE_FLOW_ACTION_TYPE_VXLAN_DECAP] = {
215 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
216 .proto_act_func = ulp_rte_vxlan_decap_act_handler
218 [RTE_FLOW_ACTION_TYPE_NVGRE_ENCAP] = {
219 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
220 .proto_act_func = NULL
222 [RTE_FLOW_ACTION_TYPE_NVGRE_DECAP] = {
223 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
224 .proto_act_func = NULL
226 [RTE_FLOW_ACTION_TYPE_RAW_ENCAP] = {
227 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
228 .proto_act_func = NULL
230 [RTE_FLOW_ACTION_TYPE_RAW_DECAP] = {
231 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
232 .proto_act_func = NULL
234 [RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC] = {
235 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
236 .proto_act_func = ulp_rte_set_ipv4_src_act_handler
238 [RTE_FLOW_ACTION_TYPE_SET_IPV4_DST] = {
239 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
240 .proto_act_func = ulp_rte_set_ipv4_dst_act_handler
242 [RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC] = {
243 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
244 .proto_act_func = NULL
246 [RTE_FLOW_ACTION_TYPE_SET_IPV6_DST] = {
247 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
248 .proto_act_func = NULL
250 [RTE_FLOW_ACTION_TYPE_SET_TP_SRC] = {
251 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
252 .proto_act_func = ulp_rte_set_tp_src_act_handler
254 [RTE_FLOW_ACTION_TYPE_SET_TP_DST] = {
255 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
256 .proto_act_func = ulp_rte_set_tp_dst_act_handler
258 [RTE_FLOW_ACTION_TYPE_MAC_SWAP] = {
259 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
260 .proto_act_func = NULL
262 [RTE_FLOW_ACTION_TYPE_DEC_TTL] = {
263 .act_type = BNXT_ULP_ACT_TYPE_SUPPORTED,
264 .proto_act_func = ulp_rte_dec_ttl_act_handler
266 [RTE_FLOW_ACTION_TYPE_SET_TTL] = {
267 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
268 .proto_act_func = NULL
270 [RTE_FLOW_ACTION_TYPE_SET_MAC_SRC] = {
271 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
272 .proto_act_func = NULL
274 [RTE_FLOW_ACTION_TYPE_SET_MAC_DST] = {
275 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
276 .proto_act_func = NULL
278 [RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ] = {
279 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
280 .proto_act_func = NULL
282 [RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ] = {
283 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
284 .proto_act_func = NULL
286 [RTE_FLOW_ACTION_TYPE_INC_TCP_ACK] = {
287 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
288 .proto_act_func = NULL
290 [RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK] = {
291 .act_type = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,
292 .proto_act_func = NULL
296 struct bnxt_ulp_cache_tbl_params ulp_cache_tbl_params[] = {
297 [BNXT_ULP_RESOURCE_SUB_TYPE_CACHE_TYPE_L2_CNTXT_TCAM << 1 |
301 [BNXT_ULP_RESOURCE_SUB_TYPE_CACHE_TYPE_L2_CNTXT_TCAM << 1 |
305 [BNXT_ULP_RESOURCE_SUB_TYPE_CACHE_TYPE_PROFILE_TCAM << 1 |
309 [BNXT_ULP_RESOURCE_SUB_TYPE_CACHE_TYPE_PROFILE_TCAM << 1 |
315 const struct ulp_template_device_tbls ulp_template_stingray_tbls[] = {
316 [BNXT_ULP_TEMPLATE_TYPE_CLASS] = {
317 .tmpl_list = ulp_stingray_class_tmpl_list,
318 .tbl_list = ulp_stingray_class_tbl_list,
319 .key_field_list = ulp_stingray_class_key_field_list,
320 .result_field_list = ulp_stingray_class_result_field_list,
321 .ident_list = ulp_stingray_class_ident_list
323 [BNXT_ULP_TEMPLATE_TYPE_ACTION] = {
324 .tmpl_list = ulp_stingray_act_tmpl_list,
325 .tbl_list = ulp_stingray_act_tbl_list,
326 .result_field_list = ulp_stingray_act_result_field_list
330 const struct ulp_template_device_tbls ulp_template_wh_plus_tbls[] = {
331 [BNXT_ULP_TEMPLATE_TYPE_CLASS] = {
332 .tmpl_list = ulp_wh_plus_class_tmpl_list,
333 .tbl_list = ulp_wh_plus_class_tbl_list,
334 .key_field_list = ulp_wh_plus_class_key_field_list,
335 .result_field_list = ulp_wh_plus_class_result_field_list,
336 .ident_list = ulp_wh_plus_class_ident_list
338 [BNXT_ULP_TEMPLATE_TYPE_ACTION] = {
339 .tmpl_list = ulp_wh_plus_act_tmpl_list,
340 .tbl_list = ulp_wh_plus_act_tbl_list,
341 .result_field_list = ulp_wh_plus_act_result_field_list
345 struct bnxt_ulp_device_params ulp_device_params[BNXT_ULP_DEVICE_ID_LAST] = {
346 [BNXT_ULP_DEVICE_ID_WH_PLUS] = {
347 .byte_order = BNXT_ULP_BYTE_ORDER_LE,
348 .encap_byte_swap = 1,
349 .int_flow_db_num_entries = 16384,
350 .ext_flow_db_num_entries = 32768,
351 .mark_db_lfid_entries = 65536,
352 .mark_db_gfid_entries = 65536,
353 .flow_count_db_entries = 16384,
354 .fdb_parent_flow_entries = 2,
355 .num_resources_per_flow = 8,
357 .ext_cntr_table_type = 0,
358 .byte_count_mask = 0x0000000fffffffff,
359 .packet_count_mask = 0xffffffff00000000,
360 .byte_count_shift = 0,
361 .packet_count_shift = 36,
362 .dev_tbls = ulp_template_wh_plus_tbls
364 [BNXT_ULP_DEVICE_ID_STINGRAY] = {
365 .byte_order = BNXT_ULP_BYTE_ORDER_LE,
366 .encap_byte_swap = 1,
367 .int_flow_db_num_entries = 16384,
368 .ext_flow_db_num_entries = 32768,
369 .mark_db_lfid_entries = 65536,
370 .mark_db_gfid_entries = 65536,
371 .flow_count_db_entries = 16384,
372 .num_resources_per_flow = 8,
374 .ext_cntr_table_type = 0,
375 .byte_count_mask = 0x0000000fffffffff,
376 .packet_count_mask = 0xffffffff00000000,
377 .byte_count_shift = 0,
378 .packet_count_shift = 36,
379 .dev_tbls = ulp_template_stingray_tbls
383 struct bnxt_ulp_glb_resource_info ulp_glb_resource_tbl[] = {
385 .resource_func = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
386 .resource_type = TF_IDENT_TYPE_PROF_FUNC,
387 .glb_regfile_index = BNXT_ULP_GLB_REGFILE_INDEX_GLB_PROF_FUNC_ID,
388 .direction = TF_DIR_RX
391 .resource_func = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
392 .resource_type = TF_IDENT_TYPE_PROF_FUNC,
393 .glb_regfile_index = BNXT_ULP_GLB_REGFILE_INDEX_GLB_PROF_FUNC_ID,
394 .direction = TF_DIR_TX
397 .resource_func = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
398 .resource_type = TF_TBL_TYPE_FULL_ACT_RECORD,
399 .glb_regfile_index = BNXT_ULP_GLB_REGFILE_INDEX_GLB_LB_AREC_PTR,
400 .direction = TF_DIR_TX
403 .resource_func = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
404 .resource_type = TF_IDENT_TYPE_PROF_FUNC,
405 .glb_regfile_index = BNXT_ULP_GLB_REGFILE_INDEX_L2_PROF_FUNC_ID,
406 .direction = TF_DIR_RX
409 .resource_func = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
410 .resource_type = TF_IDENT_TYPE_PROF_FUNC,
411 .glb_regfile_index = BNXT_ULP_GLB_REGFILE_INDEX_L2_PROF_FUNC_ID,
412 .direction = TF_DIR_TX
415 .resource_func = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
416 .resource_type = TF_IDENT_TYPE_PROF_FUNC,
417 .glb_regfile_index = BNXT_ULP_GLB_REGFILE_INDEX_VXLAN_PROF_FUNC_ID,
418 .direction = TF_DIR_RX
421 .resource_func = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
422 .resource_type = TF_TBL_TYPE_ACT_ENCAP_16B,
423 .glb_regfile_index = BNXT_ULP_GLB_REGFILE_INDEX_ENCAP_MAC_PTR,
424 .direction = TF_DIR_RX
427 .resource_func = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
428 .resource_type = TF_TBL_TYPE_ACT_ENCAP_16B,
429 .glb_regfile_index = BNXT_ULP_GLB_REGFILE_INDEX_ENCAP_MAC_PTR,
430 .direction = TF_DIR_TX
434 struct bnxt_ulp_rte_hdr_info ulp_hdr_info[] = {
435 [RTE_FLOW_ITEM_TYPE_END] = {
436 .hdr_type = BNXT_ULP_HDR_TYPE_END,
437 .proto_hdr_func = NULL
439 [RTE_FLOW_ITEM_TYPE_VOID] = {
440 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
441 .proto_hdr_func = ulp_rte_void_hdr_handler
443 [RTE_FLOW_ITEM_TYPE_INVERT] = {
444 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
445 .proto_hdr_func = NULL
447 [RTE_FLOW_ITEM_TYPE_ANY] = {
448 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
449 .proto_hdr_func = NULL
451 [RTE_FLOW_ITEM_TYPE_PF] = {
452 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
453 .proto_hdr_func = ulp_rte_pf_hdr_handler
455 [RTE_FLOW_ITEM_TYPE_VF] = {
456 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
457 .proto_hdr_func = ulp_rte_vf_hdr_handler
459 [RTE_FLOW_ITEM_TYPE_PHY_PORT] = {
460 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
461 .proto_hdr_func = ulp_rte_phy_port_hdr_handler
463 [RTE_FLOW_ITEM_TYPE_PORT_ID] = {
464 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
465 .proto_hdr_func = ulp_rte_port_id_hdr_handler
467 [RTE_FLOW_ITEM_TYPE_RAW] = {
468 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
469 .proto_hdr_func = NULL
471 [RTE_FLOW_ITEM_TYPE_ETH] = {
472 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
473 .proto_hdr_func = ulp_rte_eth_hdr_handler
475 [RTE_FLOW_ITEM_TYPE_VLAN] = {
476 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
477 .proto_hdr_func = ulp_rte_vlan_hdr_handler
479 [RTE_FLOW_ITEM_TYPE_IPV4] = {
480 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
481 .proto_hdr_func = ulp_rte_ipv4_hdr_handler
483 [RTE_FLOW_ITEM_TYPE_IPV6] = {
484 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
485 .proto_hdr_func = ulp_rte_ipv6_hdr_handler
487 [RTE_FLOW_ITEM_TYPE_ICMP] = {
488 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
489 .proto_hdr_func = NULL
491 [RTE_FLOW_ITEM_TYPE_UDP] = {
492 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
493 .proto_hdr_func = ulp_rte_udp_hdr_handler
495 [RTE_FLOW_ITEM_TYPE_TCP] = {
496 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
497 .proto_hdr_func = ulp_rte_tcp_hdr_handler
499 [RTE_FLOW_ITEM_TYPE_SCTP] = {
500 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
501 .proto_hdr_func = NULL
503 [RTE_FLOW_ITEM_TYPE_VXLAN] = {
504 .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED,
505 .proto_hdr_func = ulp_rte_vxlan_hdr_handler
507 [RTE_FLOW_ITEM_TYPE_E_TAG] = {
508 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
509 .proto_hdr_func = NULL
511 [RTE_FLOW_ITEM_TYPE_NVGRE] = {
512 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
513 .proto_hdr_func = NULL
515 [RTE_FLOW_ITEM_TYPE_MPLS] = {
516 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
517 .proto_hdr_func = NULL
519 [RTE_FLOW_ITEM_TYPE_GRE] = {
520 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
521 .proto_hdr_func = NULL
523 [RTE_FLOW_ITEM_TYPE_FUZZY] = {
524 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
525 .proto_hdr_func = NULL
527 [RTE_FLOW_ITEM_TYPE_GTP] = {
528 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
529 .proto_hdr_func = NULL
531 [RTE_FLOW_ITEM_TYPE_GTPC] = {
532 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
533 .proto_hdr_func = NULL
535 [RTE_FLOW_ITEM_TYPE_GTPU] = {
536 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
537 .proto_hdr_func = NULL
539 [RTE_FLOW_ITEM_TYPE_ESP] = {
540 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
541 .proto_hdr_func = NULL
543 [RTE_FLOW_ITEM_TYPE_GENEVE] = {
544 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
545 .proto_hdr_func = NULL
547 [RTE_FLOW_ITEM_TYPE_VXLAN_GPE] = {
548 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
549 .proto_hdr_func = NULL
551 [RTE_FLOW_ITEM_TYPE_ARP_ETH_IPV4] = {
552 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
553 .proto_hdr_func = NULL
555 [RTE_FLOW_ITEM_TYPE_IPV6_EXT] = {
556 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
557 .proto_hdr_func = NULL
559 [RTE_FLOW_ITEM_TYPE_ICMP6] = {
560 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
561 .proto_hdr_func = NULL
563 [RTE_FLOW_ITEM_TYPE_ICMP6_ND_NS] = {
564 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
565 .proto_hdr_func = NULL
567 [RTE_FLOW_ITEM_TYPE_ICMP6_ND_NA] = {
568 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
569 .proto_hdr_func = NULL
571 [RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT] = {
572 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
573 .proto_hdr_func = NULL
575 [RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_SLA_ETH] = {
576 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
577 .proto_hdr_func = NULL
579 [RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_TLA_ETH] = {
580 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
581 .proto_hdr_func = NULL
583 [RTE_FLOW_ITEM_TYPE_MARK] = {
584 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
585 .proto_hdr_func = NULL
587 [RTE_FLOW_ITEM_TYPE_META] = {
588 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
589 .proto_hdr_func = NULL
591 [RTE_FLOW_ITEM_TYPE_GRE_KEY] = {
592 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
593 .proto_hdr_func = NULL
595 [RTE_FLOW_ITEM_TYPE_GTP_PSC] = {
596 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
597 .proto_hdr_func = NULL
599 [RTE_FLOW_ITEM_TYPE_PPPOES] = {
600 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
601 .proto_hdr_func = NULL
603 [RTE_FLOW_ITEM_TYPE_PPPOED] = {
604 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
605 .proto_hdr_func = NULL
607 [RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID] = {
608 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
609 .proto_hdr_func = NULL
611 [RTE_FLOW_ITEM_TYPE_NSH] = {
612 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
613 .proto_hdr_func = NULL
615 [RTE_FLOW_ITEM_TYPE_IGMP] = {
616 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
617 .proto_hdr_func = NULL
619 [RTE_FLOW_ITEM_TYPE_AH] = {
620 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
621 .proto_hdr_func = NULL
623 [RTE_FLOW_ITEM_TYPE_HIGIG2] = {
624 .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
625 .proto_hdr_func = NULL
629 uint32_t bnxt_ulp_encap_vtag_map[] = {
630 BNXT_ULP_SYM_ECV_VTAG_TYPE_NOP,
631 BNXT_ULP_SYM_ECV_VTAG_TYPE_ADD_1_ENCAP_PRI,
632 BNXT_ULP_SYM_ECV_VTAG_TYPE_ADD_2_ENCAP_PRI
635 uint32_t ulp_glb_template_tbl[] = {
636 BNXT_ULP_DF_TPL_LOOPBACK_ACTION_REC