ff003b2ebd82b2b871864ec406222489444f9c89
[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: Tue Dec  1 10:17:11 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_ACT_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_ACT_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         [2076] = 5,
316         [2078] = 6,
317         [2080] = 7,
318         [2082] = 8,
319         [2084] = 9,
320         [2086] = 10,
321         [2088] = 11,
322         [2090] = 12,
323         [2102] = 13,
324         [2104] = 14,
325         [2106] = 15,
326         [2108] = 16,
327         [2110] = 17,
328         [2112] = 18,
329         [2114] = 19,
330         [2116] = 20,
331         [2118] = 21,
332         [2176] = 0,
333         [2177] = 1,
334         [2178] = 2,
335         [2180] = 3,
336         [2182] = 4,
337         [2204] = 8,
338         [2206] = 9,
339         [2208] = 10,
340         [2210] = 11,
341         [2212] = 12,
342         [2214] = 13,
343         [2216] = 14,
344         [2218] = 15,
345         [2230] = 16,
346         [2232] = 17,
347         [2234] = 18,
348         [2236] = 19,
349         [2238] = 20,
350         [2240] = 21,
351         [2242] = 22,
352         [2244] = 23,
353         [2246] = 24,
354         [2256] = 5,
355         [2260] = 6,
356         [2264] = 7,
357         [2304] = 0,
358         [2305] = 1,
359         [2306] = 2,
360         [2308] = 3,
361         [2310] = 4,
362         [2312] = 5,
363         [2314] = 6,
364         [2316] = 7,
365         [2318] = 8,
366         [2320] = 9,
367         [2322] = 10,
368         [2324] = 11,
369         [2326] = 12,
370         [2328] = 13,
371         [2330] = 14,
372         [2358] = 15,
373         [2360] = 16,
374         [2362] = 17,
375         [2364] = 18,
376         [2366] = 19,
377         [2368] = 20,
378         [2370] = 21,
379         [2372] = 22,
380         [2374] = 23,
381         [2432] = 0,
382         [2433] = 1,
383         [2434] = 2,
384         [2436] = 3,
385         [2438] = 4,
386         [2460] = 5,
387         [2462] = 6,
388         [2464] = 7,
389         [2466] = 8,
390         [2468] = 9,
391         [2470] = 10,
392         [2472] = 11,
393         [2474] = 12,
394         [2504] = 13,
395         [2506] = 14,
396         [2508] = 15,
397         [2510] = 16,
398         [2560] = 0,
399         [2561] = 1,
400         [2562] = 2,
401         [2564] = 3,
402         [2566] = 4,
403         [2568] = 8,
404         [2570] = 9,
405         [2572] = 10,
406         [2574] = 11,
407         [2576] = 12,
408         [2578] = 13,
409         [2580] = 14,
410         [2582] = 15,
411         [2584] = 16,
412         [2586] = 17,
413         [2614] = 18,
414         [2616] = 19,
415         [2618] = 20,
416         [2620] = 21,
417         [2622] = 22,
418         [2624] = 23,
419         [2626] = 24,
420         [2628] = 25,
421         [2630] = 26,
422         [2640] = 5,
423         [2644] = 6,
424         [2648] = 7,
425         [2688] = 0,
426         [2689] = 1,
427         [2690] = 2,
428         [2692] = 3,
429         [2694] = 4,
430         [2716] = 8,
431         [2718] = 9,
432         [2720] = 10,
433         [2722] = 11,
434         [2724] = 12,
435         [2726] = 13,
436         [2728] = 14,
437         [2730] = 15,
438         [2760] = 16,
439         [2762] = 17,
440         [2764] = 18,
441         [2766] = 19,
442         [2768] = 5,
443         [2772] = 6,
444         [2776] = 7,
445         [2816] = 0,
446         [2817] = 1,
447         [2818] = 2,
448         [2820] = 3,
449         [2822] = 4,
450         [2824] = 5,
451         [2826] = 6,
452         [2828] = 7,
453         [2830] = 8,
454         [2832] = 9,
455         [2834] = 10,
456         [2836] = 11,
457         [2838] = 12,
458         [2840] = 13,
459         [2842] = 14,
460         [2888] = 15,
461         [2890] = 16,
462         [2892] = 17,
463         [2894] = 18,
464         [2944] = 0,
465         [2945] = 1,
466         [2946] = 2,
467         [2948] = 3,
468         [2950] = 4,
469         [2952] = 8,
470         [2954] = 9,
471         [2956] = 10,
472         [2958] = 11,
473         [2960] = 12,
474         [2962] = 13,
475         [2964] = 14,
476         [2966] = 15,
477         [2968] = 16,
478         [2970] = 17,
479         [3016] = 18,
480         [3018] = 19,
481         [3020] = 20,
482         [3022] = 21,
483         [3024] = 5,
484         [3028] = 6,
485         [3032] = 7
486 };
487