net/bnxt: identify duplicate flows
[dpdk.git] / drivers / net / bnxt / tf_ulp / ulp_template_db_wh_plus_act.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2014-2021 Broadcom
3  * All rights reserved.
4  */
5
6 /* date: Wed Nov 18 12:19:40 2020 */
7
8 #include "ulp_template_db_enum.h"
9 #include "ulp_template_db_field.h"
10 #include "ulp_template_struct.h"
11 #include "ulp_template_db_tbl.h"
12
13 /* Mapper templates for header act list */
14 struct bnxt_ulp_mapper_tmpl_info ulp_wh_plus_act_tmpl_list[] = {
15         /* act_tid: 1, wh_plus, ingress */
16         [1] = {
17         .device_name = BNXT_ULP_DEVICE_ID_WH_PLUS,
18         .num_tbls = 4,
19         .start_tbl_idx = 0,
20         .reject_info = {
21                 .cond_list_opcode = BNXT_ULP_COND_LIST_OPC_FALSE,
22                 .cond_start_idx = 0,
23                 .cond_nums = 0 }
24         }
25 };
26
27 struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
28         { /* act_tid: 1, wh_plus, table: int_flow_counter_tbl.0 */
29         .resource_func = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
30         .resource_type = TF_TBL_TYPE_ACT_STATS_64,
31         .resource_sub_type =
32                 BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TABLE_INT_COUNT,
33         .direction = TF_DIR_RX,
34         .execute_info = {
35                 .cond_list_opcode = BNXT_ULP_COND_LIST_OPC_OR,
36                 .cond_start_idx = 0,
37                 .cond_nums = 1 },
38         .tbl_opcode = BNXT_ULP_INDEX_TBL_OPC_ALLOC_REGFILE,
39         .tbl_operand = BNXT_ULP_RF_IDX_FLOW_CNTR_PTR_0,
40         .accept_opcode = BNXT_ULP_ACCEPT_OPC_ALWAYS,
41         .fdb_opcode = BNXT_ULP_FDB_OPC_PUSH,
42         .mark_db_opcode = BNXT_ULP_MARK_DB_OPC_NOP,
43         .result_start_idx = 0,
44         .result_bit_size = 64,
45         .result_num_fields = 1,
46         .encap_num_fields = 0
47         },
48         { /* act_tid: 1, wh_plus, table: int_vtag_encap_record.0 */
49         .resource_func = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
50         .resource_type = TF_TBL_TYPE_ACT_ENCAP_16B,
51         .resource_sub_type =
52                 BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TABLE_NORMAL,
53         .direction = TF_DIR_RX,
54         .mem_type_opcode = BNXT_ULP_MEM_TYPE_OPC_EXECUTE_IF_INT,
55         .execute_info = {
56                 .cond_list_opcode = BNXT_ULP_COND_LIST_OPC_OR,
57                 .cond_start_idx = 1,
58                 .cond_nums = 1 },
59         .tbl_opcode = BNXT_ULP_INDEX_TBL_OPC_ALLOC_WR_REGFILE,
60         .tbl_operand = BNXT_ULP_RF_IDX_ENCAP_PTR_0,
61         .accept_opcode = BNXT_ULP_ACCEPT_OPC_ALWAYS,
62         .fdb_opcode = BNXT_ULP_FDB_OPC_PUSH,
63         .mark_db_opcode = BNXT_ULP_MARK_DB_OPC_NOP,
64         .result_start_idx = 1,
65         .result_bit_size = 0,
66         .result_num_fields = 0,
67         .encap_num_fields = 12
68         },
69         { /* act_tid: 1, wh_plus, table: int_full_act_record.0 */
70         .resource_func = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
71         .resource_type = TF_TBL_TYPE_FULL_ACT_RECORD,
72         .resource_sub_type =
73                 BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TABLE_NORMAL,
74         .direction = TF_DIR_RX,
75         .mem_type_opcode = BNXT_ULP_MEM_TYPE_OPC_EXECUTE_IF_INT,
76         .execute_info = {
77                 .cond_list_opcode = BNXT_ULP_COND_LIST_OPC_TRUE,
78                 .cond_start_idx = 2,
79                 .cond_nums = 0 },
80         .tbl_opcode = BNXT_ULP_INDEX_TBL_OPC_ALLOC_WR_REGFILE,
81         .tbl_operand = BNXT_ULP_RF_IDX_MAIN_ACTION_PTR,
82         .accept_opcode = BNXT_ULP_ACCEPT_OPC_ALWAYS,
83         .fdb_opcode = BNXT_ULP_FDB_OPC_PUSH,
84         .mark_db_opcode = BNXT_ULP_MARK_DB_OPC_NOP,
85         .result_start_idx = 13,
86         .result_bit_size = 128,
87         .result_num_fields = 26,
88         .encap_num_fields = 0
89         },
90         { /* act_tid: 1, wh_plus, table: ext_full_act_record.0 */
91         .resource_func = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
92         .resource_type = TF_TBL_TYPE_EXT,
93         .resource_sub_type =
94                 BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TABLE_NORMAL,
95         .direction = TF_DIR_RX,
96         .mem_type_opcode = BNXT_ULP_MEM_TYPE_OPC_EXECUTE_IF_EXT,
97         .execute_info = {
98                 .cond_list_opcode = BNXT_ULP_COND_LIST_OPC_TRUE,
99                 .cond_start_idx = 2,
100                 .cond_nums = 0 },
101         .tbl_opcode = BNXT_ULP_INDEX_TBL_OPC_ALLOC_WR_REGFILE,
102         .tbl_operand = BNXT_ULP_RF_IDX_MAIN_ACTION_PTR,
103         .accept_opcode = BNXT_ULP_ACCEPT_OPC_ALWAYS,
104         .fdb_opcode = BNXT_ULP_FDB_OPC_PUSH,
105         .mark_db_opcode = BNXT_ULP_MARK_DB_OPC_NOP,
106         .result_start_idx = 39,
107         .result_bit_size = 128,
108         .result_num_fields = 26,
109         .encap_num_fields = 0
110         }
111 };
112
113 struct bnxt_ulp_mapper_cond_info ulp_wh_plus_act_cond_list[] = {
114         {
115         .cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
116         .cond_operand = BNXT_ULP_ACTION_BIT_COUNT
117         },
118         {
119         .cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
120         .cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN
121         }
122 };
123
124 struct bnxt_ulp_mapper_field_info ulp_wh_plus_act_result_field_list[] = {
125         /* act_tid: 1, wh_plus, table: int_flow_counter_tbl.0 */
126         {
127         .description = "count",
128         .field_bit_size = 64,
129         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
130         },
131         /* act_tid: 1, wh_plus, table: int_vtag_encap_record.0 */
132         {
133         .description = "ecv_tun_type",
134         .field_bit_size = 3,
135         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
136         },
137         {
138         .description = "ecv_l4_type",
139         .field_bit_size = 3,
140         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
141         },
142         {
143         .description = "ecv_l3_type",
144         .field_bit_size = 3,
145         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
146         },
147         {
148         .description = "ecv_l2_en",
149         .field_bit_size = 1,
150         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
151         },
152         {
153         .description = "ecv_vtag_type",
154         .field_bit_size = 4,
155         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_CONSTANT,
156         .field_operand = {
157                 BNXT_ULP_WH_PLUS_SYM_ECV_VTAG_TYPE_ADD_1_ENCAP_PRI,
158                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
159                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
160         },
161         {
162         .description = "ecv_custom_en",
163         .field_bit_size = 1,
164         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
165         },
166         {
167         .description = "ecv_valid",
168         .field_bit_size = 1,
169         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
170         },
171         {
172         .description = "vtag_tpid",
173         .field_bit_size = 16,
174         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ACT_PROP,
175         .field_operand = {
176                 (BNXT_ULP_ACT_PROP_IDX_PUSH_VLAN >> 8) & 0xff,
177                 BNXT_ULP_ACT_PROP_IDX_PUSH_VLAN & 0xff,
178                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
179                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
180         },
181         {
182         .description = "vtag_vid",
183         .field_bit_size = 12,
184         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ACT_PROP,
185         .field_operand = {
186                 (BNXT_ULP_ACT_PROP_IDX_SET_VLAN_VID >> 8) & 0xff,
187                 BNXT_ULP_ACT_PROP_IDX_SET_VLAN_VID & 0xff,
188                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
190         },
191         {
192         .description = "vtag_de",
193         .field_bit_size = 1,
194         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
195         },
196         {
197         .description = "vtag_pcp",
198         .field_bit_size = 3,
199         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ACT_PROP,
200         .field_operand = {
201                 (BNXT_ULP_ACT_PROP_IDX_SET_VLAN_PCP >> 8) & 0xff,
202                 BNXT_ULP_ACT_PROP_IDX_SET_VLAN_PCP & 0xff,
203                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
204                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
205         },
206         {
207         .description = "spare",
208         .field_bit_size = 80,
209         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
210         },
211         /* act_tid: 1, wh_plus, table: int_full_act_record.0 */
212         {
213         .description = "flow_cntr_ptr",
214         .field_bit_size = 14,
215         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_REGFILE,
216         .field_operand = {
217                 (BNXT_ULP_RF_IDX_FLOW_CNTR_PTR_0 >> 8) & 0xff,
218                 BNXT_ULP_RF_IDX_FLOW_CNTR_PTR_0 & 0xff,
219                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
220                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
221         },
222         {
223         .description = "age_enable",
224         .field_bit_size = 1,
225         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
226         },
227         {
228         .description = "agg_cntr_en",
229         .field_bit_size = 1,
230         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
231         },
232         {
233         .description = "rate_cntr_en",
234         .field_bit_size = 1,
235         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
236         },
237         {
238         .description = "flow_cntr_en",
239         .field_bit_size = 1,
240         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ACT_BIT,
241         .field_operand = {
242                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 56) & 0xff,
243                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 48) & 0xff,
244                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 40) & 0xff,
245                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 32) & 0xff,
246                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 24) & 0xff,
247                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 16) & 0xff,
248                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 8) & 0xff,
249                 (uint64_t)BNXT_ULP_ACTION_BIT_COUNT & 0xff,
250                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
251         },
252         {
253         .description = "tcpflags_key",
254         .field_bit_size = 8,
255         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
256         },
257         {
258         .description = "tcpflags_mir",
259         .field_bit_size = 1,
260         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
261         },
262         {
263         .description = "tcpflags_match",
264         .field_bit_size = 1,
265         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
266         },
267         {
268         .description = "encap_ptr",
269         .field_bit_size = 11,
270         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_REGFILE,
271         .field_operand = {
272                 (BNXT_ULP_RF_IDX_ENCAP_PTR_0 >> 8) & 0xff,
273                 BNXT_ULP_RF_IDX_ENCAP_PTR_0 & 0xff,
274                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
276         },
277         {
278         .description = "dst_ip_ptr",
279         .field_bit_size = 10,
280         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_REGFILE,
281         .field_operand = {
282                 (BNXT_ULP_RF_IDX_MODIFY_IPV4_DST_PTR_0 >> 8) & 0xff,
283                 BNXT_ULP_RF_IDX_MODIFY_IPV4_DST_PTR_0 & 0xff,
284                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
285                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
286         },
287         {
288         .description = "tcp_dst_port",
289         .field_bit_size = 16,
290         .field_opcode = BNXT_ULP_FIELD_OPC_IF_ACT_BIT_THEN_ACT_PROP_ELSE_CONST,
291         .field_operand = {
292                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 56) & 0xff,
293                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 48) & 0xff,
294                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 40) & 0xff,
295                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 32) & 0xff,
296                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 24) & 0xff,
297                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 16) & 0xff,
298                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 8) & 0xff,
299                 (uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST & 0xff,
300                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
301         .field_operand_true = {
302                 (BNXT_ULP_ACT_PROP_IDX_SET_TP_DST >> 8) & 0xff,
303                 BNXT_ULP_ACT_PROP_IDX_SET_TP_DST & 0xff,
304                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
305                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
306         },
307         {
308         .description = "src_ip_ptr",
309         .field_bit_size = 10,
310         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_REGFILE,
311         .field_operand = {
312                 (BNXT_ULP_RF_IDX_MODIFY_IPV4_SRC_PTR_0 >> 8) & 0xff,
313                 BNXT_ULP_RF_IDX_MODIFY_IPV4_SRC_PTR_0 & 0xff,
314                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
315                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
316         },
317         {
318         .description = "tcp_src_port",
319         .field_bit_size = 16,
320         .field_opcode = BNXT_ULP_FIELD_OPC_IF_ACT_BIT_THEN_ACT_PROP_ELSE_CONST,
321         .field_operand = {
322                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 56) & 0xff,
323                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 48) & 0xff,
324                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 40) & 0xff,
325                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 32) & 0xff,
326                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 24) & 0xff,
327                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 16) & 0xff,
328                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 8) & 0xff,
329                 (uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC & 0xff,
330                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
331         .field_operand_true = {
332                 (BNXT_ULP_ACT_PROP_IDX_SET_TP_SRC >> 8) & 0xff,
333                 BNXT_ULP_ACT_PROP_IDX_SET_TP_SRC & 0xff,
334                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
335                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
336         },
337         {
338         .description = "meter_id",
339         .field_bit_size = 10,
340         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
341         },
342         {
343         .description = "l3_rdir",
344         .field_bit_size = 1,
345         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
346         },
347         {
348         .description = "tl3_rdir",
349         .field_bit_size = 1,
350         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
351         },
352         {
353         .description = "l3_ttl_dec",
354         .field_bit_size = 1,
355         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_COMP_FIELD,
356         .field_operand = {
357                 (BNXT_ULP_CF_IDX_ACT_DEC_TTL >> 8) & 0xff,
358                 BNXT_ULP_CF_IDX_ACT_DEC_TTL & 0xff,
359                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
360                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
361         },
362         {
363         .description = "tl3_ttl_dec",
364         .field_bit_size = 1,
365         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_COMP_FIELD,
366         .field_operand = {
367                 (BNXT_ULP_CF_IDX_ACT_T_DEC_TTL >> 8) & 0xff,
368                 BNXT_ULP_CF_IDX_ACT_T_DEC_TTL & 0xff,
369                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
370                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
371         },
372         {
373         .description = "decap_func",
374         .field_bit_size = 4,
375         .field_opcode = BNXT_ULP_FIELD_OPC_IF_ACT_BIT_THEN_CONST_ELSE_CONST,
376         .field_operand = {
377                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 56) & 0xff,
378                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 48) & 0xff,
379                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 40) & 0xff,
380                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 32) & 0xff,
381                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 24) & 0xff,
382                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 16) & 0xff,
383                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 8) & 0xff,
384                 (uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP & 0xff,
385                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
386         .field_operand_true = {0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
387                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
388         },
389         {
390         .description = "vnic_or_vport",
391         .field_bit_size = 12,
392         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ACT_PROP,
393         .field_operand = {
394                 (BNXT_ULP_ACT_PROP_IDX_VNIC >> 8) & 0xff,
395                 BNXT_ULP_ACT_PROP_IDX_VNIC & 0xff,
396                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
397                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
398         },
399         {
400         .description = "pop_vlan",
401         .field_bit_size = 1,
402         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ACT_BIT,
403         .field_operand = {
404                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 56) & 0xff,
405                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 48) & 0xff,
406                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 40) & 0xff,
407                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 32) & 0xff,
408                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 24) & 0xff,
409                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 16) & 0xff,
410                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 8) & 0xff,
411                 (uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN & 0xff,
412                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
413         },
414         {
415         .description = "meter",
416         .field_bit_size = 1,
417         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
418         },
419         {
420         .description = "mirror",
421         .field_bit_size = 2,
422         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
423         },
424         {
425         .description = "drop",
426         .field_bit_size = 1,
427         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ACT_BIT,
428         .field_operand = {
429                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 56) & 0xff,
430                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 48) & 0xff,
431                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 40) & 0xff,
432                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 32) & 0xff,
433                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 24) & 0xff,
434                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 16) & 0xff,
435                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 8) & 0xff,
436                 (uint64_t)BNXT_ULP_ACTION_BIT_DROP & 0xff,
437                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
438         },
439         {
440         .description = "hit",
441         .field_bit_size = 1,
442         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
443         },
444         {
445         .description = "type",
446         .field_bit_size = 1,
447         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
448         },
449         /* act_tid: 1, wh_plus, table: ext_full_act_record.0 */
450         {
451         .description = "flow_cntr_ptr",
452         .field_bit_size = 14,
453         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_REGFILE,
454         .field_operand = {
455                 (BNXT_ULP_RF_IDX_FLOW_CNTR_PTR_0 >> 8) & 0xff,
456                 BNXT_ULP_RF_IDX_FLOW_CNTR_PTR_0 & 0xff,
457                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
458                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
459         },
460         {
461         .description = "age_enable",
462         .field_bit_size = 1,
463         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
464         },
465         {
466         .description = "agg_cntr_en",
467         .field_bit_size = 1,
468         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
469         },
470         {
471         .description = "rate_cntr_en",
472         .field_bit_size = 1,
473         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
474         },
475         {
476         .description = "flow_cntr_en",
477         .field_bit_size = 1,
478         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ACT_BIT,
479         .field_operand = {
480                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 56) & 0xff,
481                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 48) & 0xff,
482                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 40) & 0xff,
483                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 32) & 0xff,
484                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 24) & 0xff,
485                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 16) & 0xff,
486                 ((uint64_t)BNXT_ULP_ACTION_BIT_COUNT >> 8) & 0xff,
487                 (uint64_t)BNXT_ULP_ACTION_BIT_COUNT & 0xff,
488                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
489         },
490         {
491         .description = "flow_cntr_ext",
492         .field_bit_size = 1,
493         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
494         },
495         {
496         .description = "tcpflags_key",
497         .field_bit_size = 8,
498         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
499         },
500         {
501         .description = "tcpflags_mir",
502         .field_bit_size = 1,
503         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
504         },
505         {
506         .description = "tcpflags_match",
507         .field_bit_size = 1,
508         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
509         },
510         {
511         .description = "encap_ptr",
512         .field_bit_size = 11,
513         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
514         },
515         {
516         .description = "encap_rec_int",
517         .field_bit_size = 1,
518         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
519         },
520         {
521         .description = "dst_ip_ptr",
522         .field_bit_size = 10,
523         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_REGFILE,
524         .field_operand = {
525                 (BNXT_ULP_RF_IDX_MODIFY_IPV4_DST_PTR_0 >> 8) & 0xff,
526                 BNXT_ULP_RF_IDX_MODIFY_IPV4_DST_PTR_0 & 0xff,
527                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
528                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
529         },
530         {
531         .description = "tcp_dst_port",
532         .field_bit_size = 16,
533         .field_opcode = BNXT_ULP_FIELD_OPC_IF_ACT_BIT_THEN_ACT_PROP_ELSE_CONST,
534         .field_operand = {
535                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 56) & 0xff,
536                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 48) & 0xff,
537                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 40) & 0xff,
538                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 32) & 0xff,
539                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 24) & 0xff,
540                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 16) & 0xff,
541                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST >> 8) & 0xff,
542                 (uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_DST & 0xff,
543                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
544         .field_operand_true = {
545                 (BNXT_ULP_ACT_PROP_IDX_SET_TP_DST >> 8) & 0xff,
546                 BNXT_ULP_ACT_PROP_IDX_SET_TP_DST & 0xff,
547                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
548                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
549         },
550         {
551         .description = "src_ip_ptr",
552         .field_bit_size = 10,
553         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_REGFILE,
554         .field_operand = {
555                 (BNXT_ULP_RF_IDX_MODIFY_IPV4_SRC_PTR_0 >> 8) & 0xff,
556                 BNXT_ULP_RF_IDX_MODIFY_IPV4_SRC_PTR_0 & 0xff,
557                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
558                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
559         },
560         {
561         .description = "tcp_src_port",
562         .field_bit_size = 16,
563         .field_opcode = BNXT_ULP_FIELD_OPC_IF_ACT_BIT_THEN_ACT_PROP_ELSE_CONST,
564         .field_operand = {
565                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 56) & 0xff,
566                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 48) & 0xff,
567                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 40) & 0xff,
568                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 32) & 0xff,
569                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 24) & 0xff,
570                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 16) & 0xff,
571                 ((uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC >> 8) & 0xff,
572                 (uint64_t)BNXT_ULP_ACTION_BIT_SET_TP_SRC & 0xff,
573                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
574         .field_operand_true = {
575                 (BNXT_ULP_ACT_PROP_IDX_SET_TP_SRC >> 8) & 0xff,
576                 BNXT_ULP_ACT_PROP_IDX_SET_TP_SRC & 0xff,
577                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
578                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
579         },
580         {
581         .description = "meter_id",
582         .field_bit_size = 10,
583         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
584         },
585         {
586         .description = "l3_rdir",
587         .field_bit_size = 1,
588         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
589         },
590         {
591         .description = "tl3_rdir",
592         .field_bit_size = 1,
593         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
594         },
595         {
596         .description = "l3_ttl_dec",
597         .field_bit_size = 1,
598         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_COMP_FIELD,
599         .field_operand = {
600                 (BNXT_ULP_CF_IDX_ACT_DEC_TTL >> 8) & 0xff,
601                 BNXT_ULP_CF_IDX_ACT_DEC_TTL & 0xff,
602                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
603                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
604         },
605         {
606         .description = "tl3_ttl_dec",
607         .field_bit_size = 1,
608         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_COMP_FIELD,
609         .field_operand = {
610                 (BNXT_ULP_CF_IDX_ACT_T_DEC_TTL >> 8) & 0xff,
611                 BNXT_ULP_CF_IDX_ACT_T_DEC_TTL & 0xff,
612                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
613                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
614         },
615         {
616         .description = "decap_func",
617         .field_bit_size = 4,
618         .field_opcode = BNXT_ULP_FIELD_OPC_IF_ACT_BIT_THEN_CONST_ELSE_CONST,
619         .field_operand = {
620                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 56) & 0xff,
621                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 48) & 0xff,
622                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 40) & 0xff,
623                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 32) & 0xff,
624                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 24) & 0xff,
625                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 16) & 0xff,
626                 ((uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP >> 8) & 0xff,
627                 (uint64_t)BNXT_ULP_ACTION_BIT_VXLAN_DECAP & 0xff,
628                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
629         .field_operand_true = {0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
630                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
631         },
632         {
633         .description = "vnic_or_vport",
634         .field_bit_size = 12,
635         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ACT_PROP,
636         .field_operand = {
637                 (BNXT_ULP_ACT_PROP_IDX_VNIC >> 8) & 0xff,
638                 BNXT_ULP_ACT_PROP_IDX_VNIC & 0xff,
639                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
640                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
641         },
642         {
643         .description = "pop_vlan",
644         .field_bit_size = 1,
645         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ACT_BIT,
646         .field_operand = {
647                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 56) & 0xff,
648                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 48) & 0xff,
649                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 40) & 0xff,
650                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 32) & 0xff,
651                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 24) & 0xff,
652                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 16) & 0xff,
653                 ((uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN >> 8) & 0xff,
654                 (uint64_t)BNXT_ULP_ACTION_BIT_POP_VLAN & 0xff,
655                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
656         },
657         {
658         .description = "meter",
659         .field_bit_size = 1,
660         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
661         },
662         {
663         .description = "mirror",
664         .field_bit_size = 2,
665         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ZERO
666         },
667         {
668         .description = "drop",
669         .field_bit_size = 1,
670         .field_opcode = BNXT_ULP_FIELD_OPC_SET_TO_ACT_BIT,
671         .field_operand = {
672                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 56) & 0xff,
673                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 48) & 0xff,
674                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 40) & 0xff,
675                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 32) & 0xff,
676                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 24) & 0xff,
677                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 16) & 0xff,
678                 ((uint64_t)BNXT_ULP_ACTION_BIT_DROP >> 8) & 0xff,
679                 (uint64_t)BNXT_ULP_ACTION_BIT_DROP & 0xff,
680                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
681         }
682 };