net/bnxt: identify duplicate flows
[dpdk.git] / drivers / net / bnxt / tf_ulp / ulp_template_db_tbl.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2014-2021 Broadcom
3  * All rights reserved.
4  */
5
6 /* date: Mon Nov 23 17:33:02 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 /* Specifies parameters for the cache and shared tables */
14 struct bnxt_ulp_generic_tbl_params ulp_generic_tbl_params[] = {
15         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_L2_CNTXT_TCAM << 1 |
16                 BNXT_ULP_DIRECTION_INGRESS] = {
17         .result_num_entries      = 16384,
18         .result_num_bytes        = 16,
19         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
20         },
21         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_L2_CNTXT_TCAM << 1 |
22                 BNXT_ULP_DIRECTION_EGRESS] = {
23         .result_num_entries      = 16384,
24         .result_num_bytes        = 16,
25         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
26         },
27         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_PROFILE_TCAM << 1 |
28                 BNXT_ULP_DIRECTION_INGRESS] = {
29         .result_num_entries      = 16384,
30         .result_num_bytes        = 16,
31         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
32         },
33         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_PROFILE_TCAM << 1 |
34                 BNXT_ULP_DIRECTION_EGRESS] = {
35         .result_num_entries      = 16384,
36         .result_num_bytes        = 16,
37         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
38         },
39         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_MIRROR_TBL << 1 |
40                 BNXT_ULP_DIRECTION_INGRESS] = {
41         .result_num_entries      = 16,
42         .result_num_bytes        = 16,
43         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
44         },
45         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_MIRROR_TBL << 1 |
46                 BNXT_ULP_DIRECTION_EGRESS] = {
47         .result_num_entries      = 16,
48         .result_num_bytes        = 16,
49         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
50         }
51 };
52
53 /* device tables */
54 const struct bnxt_ulp_template_device_tbls ulp_template_stingray_tbls[] = {
55         [BNXT_ULP_TEMPLATE_TYPE_CLASS] = {
56         .tmpl_list               = ulp_stingray_class_tmpl_list,
57         .tmpl_list_size          = ULP_STINGRAY_CLASS_TMPL_LIST_SIZE,
58         .tbl_list                = ulp_stingray_class_tbl_list,
59         .tbl_list_size           = ULP_STINGRAY_CLASS_TBL_LIST_SIZE,
60         .key_info_list           = ulp_stingray_class_key_info_list,
61         .key_info_list_size      = ULP_STINGRAY_CLASS_KEY_INFO_LIST_SIZE,
62         .ident_list              = ulp_stingray_class_ident_list,
63         .ident_list_size         = ULP_STINGRAY_CLASS_IDENT_LIST_SIZE,
64         .cond_list               = ulp_stingray_class_cond_list,
65         .cond_list_size          = ULP_STINGRAY_CLASS_COND_LIST_SIZE,
66         .result_field_list       = ulp_stingray_class_result_field_list,
67         .result_field_list_size  = ULP_STINGRAY_CLASS_RESULT_FIELD_LIST_SIZE
68         },
69         [BNXT_ULP_TEMPLATE_TYPE_ACTION] = {
70         .tmpl_list               = ulp_stingray_act_tmpl_list,
71         .tmpl_list_size          = ULP_STINGRAY_ACT_TMPL_LIST_SIZE,
72         .tbl_list                = ulp_stingray_act_tbl_list,
73         .tbl_list_size           = ULP_STINGRAY_ACT_TBL_LIST_SIZE,
74         .cond_list               = ulp_stingray_act_cond_list,
75         .cond_list_size          = ULP_STINGRAY_ACT_COND_LIST_SIZE,
76         .result_field_list       = ulp_stingray_act_result_field_list,
77         .result_field_list_size  = ULP_STINGRAY_ACT_RESULT_FIELD_LIST_SIZE
78         }
79 };
80
81 /* device tables */
82 const struct bnxt_ulp_template_device_tbls ulp_template_wh_plus_tbls[] = {
83         [BNXT_ULP_TEMPLATE_TYPE_CLASS] = {
84         .tmpl_list               = ulp_wh_plus_class_tmpl_list,
85         .tmpl_list_size          = ULP_WH_PLUS_CLASS_TMPL_LIST_SIZE,
86         .tbl_list                = ulp_wh_plus_class_tbl_list,
87         .tbl_list_size           = ULP_WH_PLUS_CLASS_TBL_LIST_SIZE,
88         .key_info_list           = ulp_wh_plus_class_key_info_list,
89         .key_info_list_size      = ULP_WH_PLUS_CLASS_KEY_INFO_LIST_SIZE,
90         .ident_list              = ulp_wh_plus_class_ident_list,
91         .ident_list_size         = ULP_WH_PLUS_CLASS_IDENT_LIST_SIZE,
92         .cond_list               = ulp_wh_plus_class_cond_list,
93         .cond_list_size          = ULP_WH_PLUS_CLASS_COND_LIST_SIZE,
94         .result_field_list       = ulp_wh_plus_class_result_field_list,
95         .result_field_list_size  = ULP_WH_PLUS_CLASS_RESULT_FIELD_LIST_SIZE
96         },
97         [BNXT_ULP_TEMPLATE_TYPE_ACTION] = {
98         .tmpl_list               = ulp_wh_plus_act_tmpl_list,
99         .tmpl_list_size          = ULP_WH_PLUS_ACT_TMPL_LIST_SIZE,
100         .tbl_list                = ulp_wh_plus_act_tbl_list,
101         .tbl_list_size           = ULP_WH_PLUS_ACT_TBL_LIST_SIZE,
102         .cond_list               = ulp_wh_plus_act_cond_list,
103         .cond_list_size          = ULP_WH_PLUS_ACT_COND_LIST_SIZE,
104         .result_field_list       = ulp_wh_plus_act_result_field_list,
105         .result_field_list_size  = ULP_WH_PLUS_ACT_RESULT_FIELD_LIST_SIZE
106         }
107 };
108
109 /* List of device specific parameters */
110 struct bnxt_ulp_device_params ulp_device_params[BNXT_ULP_DEVICE_ID_LAST] = {
111         [BNXT_ULP_DEVICE_ID_WH_PLUS] = {
112         .description             = "Whitney_Plus",
113         .byte_order              = BNXT_ULP_BYTE_ORDER_LE,
114         .encap_byte_swap         = 1,
115         .int_flow_db_num_entries = 16384,
116         .ext_flow_db_num_entries = 32768,
117         .mark_db_lfid_entries    = 65536,
118         .mark_db_gfid_entries    = 65536,
119         .flow_count_db_entries   = 16384,
120         .fdb_parent_flow_entries = 2,
121         .num_resources_per_flow  = 8,
122         .num_phy_ports           = 2,
123         .ext_cntr_table_type     = 0,
124         .byte_count_mask         = 0x0000000fffffffff,
125         .packet_count_mask       = 0xffffffff00000000,
126         .byte_count_shift        = 0,
127         .packet_count_shift      = 36,
128         .dev_tbls                = ulp_template_wh_plus_tbls
129         },
130         [BNXT_ULP_DEVICE_ID_STINGRAY] = {
131         .description             = "Stingray",
132         .byte_order              = BNXT_ULP_BYTE_ORDER_LE,
133         .encap_byte_swap         = 1,
134         .int_flow_db_num_entries = 16384,
135         .ext_flow_db_num_entries = 32768,
136         .mark_db_lfid_entries    = 65536,
137         .mark_db_gfid_entries    = 65536,
138         .flow_count_db_entries   = 16384,
139         .fdb_parent_flow_entries = 2,
140         .num_resources_per_flow  = 8,
141         .num_phy_ports           = 2,
142         .ext_cntr_table_type     = 0,
143         .byte_count_mask         = 0x0000000fffffffff,
144         .packet_count_mask       = 0xffffffff00000000,
145         .byte_count_shift        = 0,
146         .packet_count_shift      = 36,
147         .dev_tbls                = ulp_template_stingray_tbls
148         }
149 };
150
151 /* List of device specific parameters */
152 struct bnxt_ulp_glb_resource_info ulp_glb_resource_tbl[] = {
153         [0] = {
154         .resource_func           = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
155         .resource_type           = TF_IDENT_TYPE_PROF_FUNC,
156         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_GLB_PROF_FUNC_ID,
157         .direction               = TF_DIR_RX
158         },
159         [1] = {
160         .resource_func           = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
161         .resource_type           = TF_IDENT_TYPE_PROF_FUNC,
162         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_GLB_PROF_FUNC_ID,
163         .direction               = TF_DIR_TX
164         },
165         [2] = {
166         .resource_func           = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
167         .resource_type           = TF_TBL_TYPE_FULL_ACT_RECORD,
168         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_GLB_LB_AREC_PTR,
169         .direction               = TF_DIR_TX
170         },
171         [3] = {
172         .resource_func           = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
173         .resource_type           = TF_IDENT_TYPE_PROF_FUNC,
174         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_L2_PROF_FUNC_ID,
175         .direction               = TF_DIR_RX
176         },
177         [4] = {
178         .resource_func           = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
179         .resource_type           = TF_IDENT_TYPE_PROF_FUNC,
180         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_L2_PROF_FUNC_ID,
181         .direction               = TF_DIR_TX
182         },
183         [5] = {
184         .resource_func           = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
185         .resource_type           = TF_IDENT_TYPE_PROF_FUNC,
186         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_VXLAN_PROF_FUNC_ID,
187         .direction               = TF_DIR_RX
188         },
189         [6] = {
190         .resource_func           = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
191         .resource_type           = TF_TBL_TYPE_ACT_ENCAP_16B,
192         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_ENCAP_MAC_PTR,
193         .direction               = TF_DIR_RX
194         },
195         [7] = {
196         .resource_func           = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
197         .resource_type           = TF_TBL_TYPE_ACT_ENCAP_16B,
198         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_ENCAP_MAC_PTR,
199         .direction               = TF_DIR_TX
200         }
201 };
202
203 /* Lists global action records */
204 uint32_t ulp_glb_template_tbl[] = {
205         BNXT_ULP_DF_TPL_LOOPBACK_ACTION_REC
206 };
207
208 /* Provides act_bitmask */
209 struct bnxt_ulp_shared_act_info ulp_shared_act_info[] = {
210         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_MIRROR_TBL << 1 |
211                 BNXT_ULP_DIRECTION_INGRESS] = {
212         .act_bitmask             = BNXT_ULP_ACTION_BIT_SHARED_SAMPLE
213         },
214         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_MIRROR_TBL << 1 |
215                 BNXT_ULP_DIRECTION_EGRESS] = {
216         .act_bitmask             = BNXT_ULP_ACTION_BIT_SHARED_SAMPLE
217         }
218 };
219
220 uint32_t ulp_act_prop_map_table[] = {
221         [BNXT_ULP_ACT_PROP_IDX_ENCAP_TUN_SZ] =
222                 BNXT_ULP_ACT_PROP_SZ_ENCAP_TUN_SZ,
223         [BNXT_ULP_ACT_PROP_IDX_ENCAP_IP_SZ] =
224                 BNXT_ULP_ACT_PROP_SZ_ENCAP_IP_SZ,
225         [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_SZ] =
226                 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG_SZ,
227         [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_TYPE] =
228                 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG_TYPE,
229         [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_NUM] =
230                 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG_NUM,
231         [BNXT_ULP_ACT_PROP_IDX_ENCAP_L3_TYPE] =
232                 BNXT_ULP_ACT_PROP_SZ_ENCAP_L3_TYPE,
233         [BNXT_ULP_ACT_PROP_IDX_MPLS_POP_NUM] =
234                 BNXT_ULP_ACT_PROP_SZ_MPLS_POP_NUM,
235         [BNXT_ULP_ACT_PROP_IDX_MPLS_PUSH_NUM] =
236                 BNXT_ULP_ACT_PROP_SZ_MPLS_PUSH_NUM,
237         [BNXT_ULP_ACT_PROP_IDX_PORT_ID] =
238                 BNXT_ULP_ACT_PROP_SZ_PORT_ID,
239         [BNXT_ULP_ACT_PROP_IDX_VNIC] =
240                 BNXT_ULP_ACT_PROP_SZ_VNIC,
241         [BNXT_ULP_ACT_PROP_IDX_VPORT] =
242                 BNXT_ULP_ACT_PROP_SZ_VPORT,
243         [BNXT_ULP_ACT_PROP_IDX_MARK] =
244                 BNXT_ULP_ACT_PROP_SZ_MARK,
245         [BNXT_ULP_ACT_PROP_IDX_COUNT] =
246                 BNXT_ULP_ACT_PROP_SZ_COUNT,
247         [BNXT_ULP_ACT_PROP_IDX_METER] =
248                 BNXT_ULP_ACT_PROP_SZ_METER,
249         [BNXT_ULP_ACT_PROP_IDX_SET_MAC_SRC] =
250                 BNXT_ULP_ACT_PROP_SZ_SET_MAC_SRC,
251         [BNXT_ULP_ACT_PROP_IDX_SET_MAC_DST] =
252                 BNXT_ULP_ACT_PROP_SZ_SET_MAC_DST,
253         [BNXT_ULP_ACT_PROP_IDX_PUSH_VLAN] =
254                 BNXT_ULP_ACT_PROP_SZ_PUSH_VLAN,
255         [BNXT_ULP_ACT_PROP_IDX_SET_VLAN_PCP] =
256                 BNXT_ULP_ACT_PROP_SZ_SET_VLAN_PCP,
257         [BNXT_ULP_ACT_PROP_IDX_SET_VLAN_VID] =
258                 BNXT_ULP_ACT_PROP_SZ_SET_VLAN_VID,
259         [BNXT_ULP_ACT_PROP_IDX_SET_IPV4_SRC] =
260                 BNXT_ULP_ACT_PROP_SZ_SET_IPV4_SRC,
261         [BNXT_ULP_ACT_PROP_IDX_SET_IPV4_DST] =
262                 BNXT_ULP_ACT_PROP_SZ_SET_IPV4_DST,
263         [BNXT_ULP_ACT_PROP_IDX_SET_IPV6_SRC] =
264                 BNXT_ULP_ACT_PROP_SZ_SET_IPV6_SRC,
265         [BNXT_ULP_ACT_PROP_IDX_SET_IPV6_DST] =
266                 BNXT_ULP_ACT_PROP_SZ_SET_IPV6_DST,
267         [BNXT_ULP_ACT_PROP_IDX_SET_TP_SRC] =
268                 BNXT_ULP_ACT_PROP_SZ_SET_TP_SRC,
269         [BNXT_ULP_ACT_PROP_IDX_SET_TP_DST] =
270                 BNXT_ULP_ACT_PROP_SZ_SET_TP_DST,
271         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_0] =
272                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_0,
273         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_1] =
274                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_1,
275         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_2] =
276                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_2,
277         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_3] =
278                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_3,
279         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_4] =
280                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_4,
281         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_5] =
282                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_5,
283         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_6] =
284                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_6,
285         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_7] =
286                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_7,
287         [BNXT_ULP_ACT_PROP_IDX_ENCAP_L2_DMAC] =
288                 BNXT_ULP_ACT_PROP_SZ_ENCAP_L2_DMAC,
289         [BNXT_ULP_ACT_PROP_IDX_ENCAP_L2_SMAC] =
290                 BNXT_ULP_ACT_PROP_SZ_ENCAP_L2_SMAC,
291         [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG] =
292                 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG,
293         [BNXT_ULP_ACT_PROP_IDX_ENCAP_IP] =
294                 BNXT_ULP_ACT_PROP_SZ_ENCAP_IP,
295         [BNXT_ULP_ACT_PROP_IDX_ENCAP_IP_SRC] =
296                 BNXT_ULP_ACT_PROP_SZ_ENCAP_IP_SRC,
297         [BNXT_ULP_ACT_PROP_IDX_ENCAP_UDP] =
298                 BNXT_ULP_ACT_PROP_SZ_ENCAP_UDP,
299         [BNXT_ULP_ACT_PROP_IDX_ENCAP_TUN] =
300                 BNXT_ULP_ACT_PROP_SZ_ENCAP_TUN,
301         [BNXT_ULP_ACT_PROP_IDX_JUMP] =
302                 BNXT_ULP_ACT_PROP_SZ_JUMP,
303         [BNXT_ULP_ACT_PROP_IDX_SHARED_HANDLE] =
304                 BNXT_ULP_ACT_PROP_SZ_SHARED_HANDLE,
305         [BNXT_ULP_ACT_PROP_IDX_LAST] =
306                 BNXT_ULP_ACT_PROP_SZ_LAST
307 };
308
309 uint8_t ulp_glb_field_tbl[] = {
310         [2048] = 0,
311         [2049] = 1,
312         [2050] = 2,
313         [2052] = 3,
314         [2054] = 4,
315         [2056] = 5,
316         [2058] = 6,
317         [2060] = 7,
318         [2062] = 8,
319         [2064] = 9,
320         [2066] = 10,
321         [2068] = 11,
322         [2070] = 12,
323         [2072] = 13,
324         [2074] = 14,
325         [2102] = 15,
326         [2104] = 16,
327         [2106] = 17,
328         [2108] = 18,
329         [2110] = 19,
330         [2112] = 20,
331         [2114] = 21,
332         [2116] = 22,
333         [2118] = 23,
334         [2176] = 0,
335         [2177] = 1,
336         [2178] = 2,
337         [2180] = 3,
338         [2182] = 4,
339         [2184] = 8,
340         [2186] = 9,
341         [2188] = 10,
342         [2190] = 11,
343         [2192] = 12,
344         [2194] = 13,
345         [2196] = 14,
346         [2198] = 15,
347         [2200] = 16,
348         [2202] = 17,
349         [2230] = 18,
350         [2232] = 19,
351         [2234] = 20,
352         [2236] = 21,
353         [2238] = 22,
354         [2240] = 23,
355         [2242] = 24,
356         [2244] = 25,
357         [2246] = 26,
358         [2256] = 5,
359         [2260] = 6,
360         [2264] = 7,
361         [4352] = 0,
362         [4353] = 1,
363         [4354] = 2,
364         [4356] = 3,
365         [4358] = 4,
366         [4360] = 8,
367         [4362] = 9,
368         [4364] = 10,
369         [4366] = 11,
370         [4368] = 12,
371         [4370] = 13,
372         [4372] = 14,
373         [4374] = 15,
374         [4376] = 16,
375         [4378] = 17,
376         [4406] = 18,
377         [4408] = 19,
378         [4410] = 20,
379         [4412] = 21,
380         [4414] = 22,
381         [4416] = 23,
382         [4418] = 24,
383         [4420] = 25,
384         [4422] = 26,
385         [4432] = 5,
386         [4436] = 6,
387         [4440] = 7
388 };
389