fd4ceb226cfc8f000037385422723fd9acaf7358
[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: Fri Jan 29 11:27:48 2021 */
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         .name                    = "INGRESS GENERIC_TABLE_L2_CNTXT_TCAM",
18         .result_num_entries      = 256,
19         .result_num_bytes        = 8,
20         .key_num_bytes           = 0,
21         .num_buckets             = 0,
22         .hash_tbl_entries        = 0,
23         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
24         },
25         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_L2_CNTXT_TCAM << 1 |
26                 BNXT_ULP_DIRECTION_EGRESS] = {
27         .name                    = "EGRESS GENERIC_TABLE_L2_CNTXT_TCAM",
28         .result_num_entries      = 256,
29         .result_num_bytes        = 8,
30         .key_num_bytes           = 0,
31         .num_buckets             = 0,
32         .hash_tbl_entries        = 0,
33         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
34         },
35         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_PROFILE_TCAM << 1 |
36                 BNXT_ULP_DIRECTION_INGRESS] = {
37         .name                    = "INGRESS GENERIC_TABLE_PROFILE_TCAM",
38         .result_num_entries      = 16384,
39         .result_num_bytes        = 16,
40         .key_num_bytes           = 0,
41         .num_buckets             = 0,
42         .hash_tbl_entries        = 0,
43         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
44         },
45         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_PROFILE_TCAM << 1 |
46                 BNXT_ULP_DIRECTION_EGRESS] = {
47         .name                    = "EGRESS GENERIC_TABLE_PROFILE_TCAM",
48         .result_num_entries      = 16384,
49         .result_num_bytes        = 16,
50         .key_num_bytes           = 0,
51         .num_buckets             = 0,
52         .hash_tbl_entries        = 0,
53         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
54         },
55         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_SHARED_MIRROR << 1 |
56                 BNXT_ULP_DIRECTION_INGRESS] = {
57         .name                    = "INGRESS GENERIC_TABLE_SHARED_MIRROR",
58         .result_num_entries      = 16,
59         .result_num_bytes        = 16,
60         .key_num_bytes           = 0,
61         .num_buckets             = 0,
62         .hash_tbl_entries        = 0,
63         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
64         },
65         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_SHARED_MIRROR << 1 |
66                 BNXT_ULP_DIRECTION_EGRESS] = {
67         .name                    = "EGRESS GENERIC_TABLE_SHARED_MIRROR",
68         .result_num_entries      = 16,
69         .result_num_bytes        = 16,
70         .key_num_bytes           = 0,
71         .num_buckets             = 0,
72         .hash_tbl_entries        = 0,
73         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
74         },
75         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_MAC_ADDR_CACHE << 1 |
76                 BNXT_ULP_DIRECTION_INGRESS] = {
77         .name                    = "INGRESS GENERIC_TABLE_MAC_ADDR_CACHE",
78         .result_num_entries      = 256,
79         .result_num_bytes        = 8,
80         .key_num_bytes           = 7,
81         .num_buckets             = 8,
82         .hash_tbl_entries        = 1024,
83         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
84         },
85         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_MAC_ADDR_CACHE << 1 |
86                 BNXT_ULP_DIRECTION_EGRESS] = {
87         .name                    = "EGRESS GENERIC_TABLE_MAC_ADDR_CACHE",
88         .result_num_entries      = 256,
89         .result_num_bytes        = 8,
90         .key_num_bytes           = 7,
91         .num_buckets             = 8,
92         .hash_tbl_entries        = 1024,
93         .result_byte_order       = BNXT_ULP_BYTE_ORDER_LE
94         }
95 };
96
97 /* device tables */
98 const struct bnxt_ulp_template_device_tbls ulp_template_stingray_tbls[] = {
99         [BNXT_ULP_TEMPLATE_TYPE_CLASS] = {
100         .tmpl_list               = ulp_stingray_class_tmpl_list,
101         .tmpl_list_size          = ULP_STINGRAY_CLASS_TMPL_LIST_SIZE,
102         .tbl_list                = ulp_stingray_class_tbl_list,
103         .tbl_list_size           = ULP_STINGRAY_CLASS_TBL_LIST_SIZE,
104         .key_info_list           = ulp_stingray_class_key_info_list,
105         .key_info_list_size      = ULP_STINGRAY_CLASS_KEY_INFO_LIST_SIZE,
106         .ident_list              = ulp_stingray_class_ident_list,
107         .ident_list_size         = ULP_STINGRAY_CLASS_IDENT_LIST_SIZE,
108         .cond_list               = ulp_stingray_class_cond_list,
109         .cond_list_size          = ULP_STINGRAY_CLASS_COND_LIST_SIZE,
110         .result_field_list       = ulp_stingray_class_result_field_list,
111         .result_field_list_size  = ULP_STINGRAY_CLASS_RESULT_FIELD_LIST_SIZE
112         },
113         [BNXT_ULP_TEMPLATE_TYPE_ACTION] = {
114         .tmpl_list               = ulp_stingray_act_tmpl_list,
115         .tmpl_list_size          = ULP_STINGRAY_ACT_TMPL_LIST_SIZE,
116         .tbl_list                = ulp_stingray_act_tbl_list,
117         .tbl_list_size           = ULP_STINGRAY_ACT_TBL_LIST_SIZE,
118         .cond_list               = ulp_stingray_act_cond_list,
119         .cond_list_size          = ULP_STINGRAY_ACT_COND_LIST_SIZE,
120         .result_field_list       = ulp_stingray_act_result_field_list,
121         .result_field_list_size  = ULP_STINGRAY_ACT_RESULT_FIELD_LIST_SIZE
122         }
123 };
124
125 /* device tables */
126 const struct bnxt_ulp_template_device_tbls ulp_template_wh_plus_tbls[] = {
127         [BNXT_ULP_TEMPLATE_TYPE_CLASS] = {
128         .tmpl_list               = ulp_wh_plus_class_tmpl_list,
129         .tmpl_list_size          = ULP_WH_PLUS_CLASS_TMPL_LIST_SIZE,
130         .tbl_list                = ulp_wh_plus_class_tbl_list,
131         .tbl_list_size           = ULP_WH_PLUS_CLASS_TBL_LIST_SIZE,
132         .key_info_list           = ulp_wh_plus_class_key_info_list,
133         .key_info_list_size      = ULP_WH_PLUS_CLASS_KEY_INFO_LIST_SIZE,
134         .ident_list              = ulp_wh_plus_class_ident_list,
135         .ident_list_size         = ULP_WH_PLUS_CLASS_IDENT_LIST_SIZE,
136         .cond_list               = ulp_wh_plus_class_cond_list,
137         .cond_list_size          = ULP_WH_PLUS_CLASS_COND_LIST_SIZE,
138         .result_field_list       = ulp_wh_plus_class_result_field_list,
139         .result_field_list_size  = ULP_WH_PLUS_CLASS_RESULT_FIELD_LIST_SIZE
140         },
141         [BNXT_ULP_TEMPLATE_TYPE_ACTION] = {
142         .tmpl_list               = ulp_wh_plus_act_tmpl_list,
143         .tmpl_list_size          = ULP_WH_PLUS_ACT_TMPL_LIST_SIZE,
144         .tbl_list                = ulp_wh_plus_act_tbl_list,
145         .tbl_list_size           = ULP_WH_PLUS_ACT_TBL_LIST_SIZE,
146         .key_info_list           = ulp_wh_plus_act_key_info_list,
147         .key_info_list_size      = ULP_WH_PLUS_ACT_KEY_INFO_LIST_SIZE,
148         .ident_list              = ulp_wh_plus_act_ident_list,
149         .ident_list_size         = ULP_WH_PLUS_ACT_IDENT_LIST_SIZE,
150         .cond_list               = ulp_wh_plus_act_cond_list,
151         .cond_list_size          = ULP_WH_PLUS_ACT_COND_LIST_SIZE,
152         .result_field_list       = ulp_wh_plus_act_result_field_list,
153         .result_field_list_size  = ULP_WH_PLUS_ACT_RESULT_FIELD_LIST_SIZE
154         }
155 };
156
157 /* List of device specific parameters */
158 struct bnxt_ulp_device_params ulp_device_params[BNXT_ULP_DEVICE_ID_LAST] = {
159         [BNXT_ULP_DEVICE_ID_WH_PLUS] = {
160         .description             = "Whitney_Plus",
161         .byte_order              = BNXT_ULP_BYTE_ORDER_LE,
162         .encap_byte_swap         = 1,
163         .int_flow_db_num_entries = 16384,
164         .ext_flow_db_num_entries = 32768,
165         .mark_db_lfid_entries    = 65536,
166         .mark_db_gfid_entries    = 65536,
167         .flow_count_db_entries   = 16384,
168         .fdb_parent_flow_entries = 2,
169         .num_resources_per_flow  = 8,
170         .num_phy_ports           = 2,
171         .ext_cntr_table_type     = 0,
172         .byte_count_mask         = 0x0000000fffffffff,
173         .packet_count_mask       = 0xffffffff00000000,
174         .byte_count_shift        = 0,
175         .packet_count_shift      = 36,
176         .dev_tbls                = ulp_template_wh_plus_tbls
177         },
178         [BNXT_ULP_DEVICE_ID_STINGRAY] = {
179         .description             = "Stingray",
180         .byte_order              = BNXT_ULP_BYTE_ORDER_LE,
181         .encap_byte_swap         = 1,
182         .int_flow_db_num_entries = 16384,
183         .ext_flow_db_num_entries = 32768,
184         .mark_db_lfid_entries    = 65536,
185         .mark_db_gfid_entries    = 65536,
186         .flow_count_db_entries   = 16384,
187         .fdb_parent_flow_entries = 2,
188         .num_resources_per_flow  = 8,
189         .num_phy_ports           = 2,
190         .ext_cntr_table_type     = 0,
191         .byte_count_mask         = 0x0000000fffffffff,
192         .packet_count_mask       = 0xffffffff00000000,
193         .byte_count_shift        = 0,
194         .packet_count_shift      = 36,
195         .dev_tbls                = ulp_template_stingray_tbls
196         }
197 };
198
199 /* List of device specific parameters */
200 struct bnxt_ulp_glb_resource_info ulp_glb_resource_tbl[] = {
201         [0] = {
202         .resource_func           = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
203         .resource_type           = TF_IDENT_TYPE_PROF_FUNC,
204         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_GLB_PROF_FUNC_ID,
205         .direction               = TF_DIR_RX
206         },
207         [1] = {
208         .resource_func           = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
209         .resource_type           = TF_IDENT_TYPE_PROF_FUNC,
210         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_GLB_PROF_FUNC_ID,
211         .direction               = TF_DIR_TX
212         },
213         [2] = {
214         .resource_func           = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
215         .resource_type           = TF_TBL_TYPE_FULL_ACT_RECORD,
216         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_GLB_LB_AREC_PTR,
217         .direction               = TF_DIR_TX
218         },
219         [3] = {
220         .resource_func           = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
221         .resource_type           = TF_IDENT_TYPE_PROF_FUNC,
222         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_L2_PROF_FUNC_ID,
223         .direction               = TF_DIR_RX
224         },
225         [4] = {
226         .resource_func           = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
227         .resource_type           = TF_IDENT_TYPE_PROF_FUNC,
228         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_L2_PROF_FUNC_ID,
229         .direction               = TF_DIR_TX
230         },
231         [5] = {
232         .resource_func           = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
233         .resource_type           = TF_IDENT_TYPE_PROF_FUNC,
234         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_VXLAN_PROF_FUNC_ID,
235         .direction               = TF_DIR_RX
236         },
237         [6] = {
238         .resource_func           = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
239         .resource_type           = TF_TBL_TYPE_ACT_ENCAP_16B,
240         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_ENCAP_MAC_PTR,
241         .direction               = TF_DIR_RX
242         },
243         [7] = {
244         .resource_func           = BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE,
245         .resource_type           = TF_TBL_TYPE_ACT_ENCAP_16B,
246         .glb_regfile_index       = BNXT_ULP_GLB_RF_IDX_ENCAP_MAC_PTR,
247         .direction               = TF_DIR_TX
248         }
249 };
250
251 /* Lists global action records */
252 uint32_t ulp_glb_template_tbl[] = {
253         BNXT_ULP_DF_TPL_LOOPBACK_ACTION_REC
254 };
255
256 /* Provides act_bitmask */
257 struct bnxt_ulp_shared_act_info ulp_shared_act_info[] = {
258         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_SHARED_MIRROR << 1 |
259                 BNXT_ULP_DIRECTION_INGRESS] = {
260         .act_bitmask             = BNXT_ULP_ACT_BIT_SHARED_SAMPLE
261         },
262         [BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_SHARED_MIRROR << 1 |
263                 BNXT_ULP_DIRECTION_EGRESS] = {
264         .act_bitmask             = BNXT_ULP_ACT_BIT_SHARED_SAMPLE
265         }
266 };
267
268 uint32_t ulp_act_prop_map_table[] = {
269         [BNXT_ULP_ACT_PROP_IDX_ENCAP_TUN_SZ] =
270                 BNXT_ULP_ACT_PROP_SZ_ENCAP_TUN_SZ,
271         [BNXT_ULP_ACT_PROP_IDX_ENCAP_IP_SZ] =
272                 BNXT_ULP_ACT_PROP_SZ_ENCAP_IP_SZ,
273         [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_SZ] =
274                 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG_SZ,
275         [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_TYPE] =
276                 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG_TYPE,
277         [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_NUM] =
278                 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG_NUM,
279         [BNXT_ULP_ACT_PROP_IDX_ENCAP_L3_TYPE] =
280                 BNXT_ULP_ACT_PROP_SZ_ENCAP_L3_TYPE,
281         [BNXT_ULP_ACT_PROP_IDX_MPLS_POP_NUM] =
282                 BNXT_ULP_ACT_PROP_SZ_MPLS_POP_NUM,
283         [BNXT_ULP_ACT_PROP_IDX_MPLS_PUSH_NUM] =
284                 BNXT_ULP_ACT_PROP_SZ_MPLS_PUSH_NUM,
285         [BNXT_ULP_ACT_PROP_IDX_PORT_ID] =
286                 BNXT_ULP_ACT_PROP_SZ_PORT_ID,
287         [BNXT_ULP_ACT_PROP_IDX_VNIC] =
288                 BNXT_ULP_ACT_PROP_SZ_VNIC,
289         [BNXT_ULP_ACT_PROP_IDX_VPORT] =
290                 BNXT_ULP_ACT_PROP_SZ_VPORT,
291         [BNXT_ULP_ACT_PROP_IDX_MARK] =
292                 BNXT_ULP_ACT_PROP_SZ_MARK,
293         [BNXT_ULP_ACT_PROP_IDX_COUNT] =
294                 BNXT_ULP_ACT_PROP_SZ_COUNT,
295         [BNXT_ULP_ACT_PROP_IDX_METER] =
296                 BNXT_ULP_ACT_PROP_SZ_METER,
297         [BNXT_ULP_ACT_PROP_IDX_SET_MAC_SRC] =
298                 BNXT_ULP_ACT_PROP_SZ_SET_MAC_SRC,
299         [BNXT_ULP_ACT_PROP_IDX_SET_MAC_DST] =
300                 BNXT_ULP_ACT_PROP_SZ_SET_MAC_DST,
301         [BNXT_ULP_ACT_PROP_IDX_PUSH_VLAN] =
302                 BNXT_ULP_ACT_PROP_SZ_PUSH_VLAN,
303         [BNXT_ULP_ACT_PROP_IDX_SET_VLAN_PCP] =
304                 BNXT_ULP_ACT_PROP_SZ_SET_VLAN_PCP,
305         [BNXT_ULP_ACT_PROP_IDX_SET_VLAN_VID] =
306                 BNXT_ULP_ACT_PROP_SZ_SET_VLAN_VID,
307         [BNXT_ULP_ACT_PROP_IDX_SET_IPV4_SRC] =
308                 BNXT_ULP_ACT_PROP_SZ_SET_IPV4_SRC,
309         [BNXT_ULP_ACT_PROP_IDX_SET_IPV4_DST] =
310                 BNXT_ULP_ACT_PROP_SZ_SET_IPV4_DST,
311         [BNXT_ULP_ACT_PROP_IDX_SET_IPV6_SRC] =
312                 BNXT_ULP_ACT_PROP_SZ_SET_IPV6_SRC,
313         [BNXT_ULP_ACT_PROP_IDX_SET_IPV6_DST] =
314                 BNXT_ULP_ACT_PROP_SZ_SET_IPV6_DST,
315         [BNXT_ULP_ACT_PROP_IDX_SET_TP_SRC] =
316                 BNXT_ULP_ACT_PROP_SZ_SET_TP_SRC,
317         [BNXT_ULP_ACT_PROP_IDX_SET_TP_DST] =
318                 BNXT_ULP_ACT_PROP_SZ_SET_TP_DST,
319         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_0] =
320                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_0,
321         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_1] =
322                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_1,
323         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_2] =
324                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_2,
325         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_3] =
326                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_3,
327         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_4] =
328                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_4,
329         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_5] =
330                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_5,
331         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_6] =
332                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_6,
333         [BNXT_ULP_ACT_PROP_IDX_OF_PUSH_MPLS_7] =
334                 BNXT_ULP_ACT_PROP_SZ_OF_PUSH_MPLS_7,
335         [BNXT_ULP_ACT_PROP_IDX_ENCAP_L2_DMAC] =
336                 BNXT_ULP_ACT_PROP_SZ_ENCAP_L2_DMAC,
337         [BNXT_ULP_ACT_PROP_IDX_ENCAP_L2_SMAC] =
338                 BNXT_ULP_ACT_PROP_SZ_ENCAP_L2_SMAC,
339         [BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG] =
340                 BNXT_ULP_ACT_PROP_SZ_ENCAP_VTAG,
341         [BNXT_ULP_ACT_PROP_IDX_ENCAP_IP] =
342                 BNXT_ULP_ACT_PROP_SZ_ENCAP_IP,
343         [BNXT_ULP_ACT_PROP_IDX_ENCAP_IP_SRC] =
344                 BNXT_ULP_ACT_PROP_SZ_ENCAP_IP_SRC,
345         [BNXT_ULP_ACT_PROP_IDX_ENCAP_UDP] =
346                 BNXT_ULP_ACT_PROP_SZ_ENCAP_UDP,
347         [BNXT_ULP_ACT_PROP_IDX_ENCAP_TUN] =
348                 BNXT_ULP_ACT_PROP_SZ_ENCAP_TUN,
349         [BNXT_ULP_ACT_PROP_IDX_JUMP] =
350                 BNXT_ULP_ACT_PROP_SZ_JUMP,
351         [BNXT_ULP_ACT_PROP_IDX_SHARED_HANDLE] =
352                 BNXT_ULP_ACT_PROP_SZ_SHARED_HANDLE,
353         [BNXT_ULP_ACT_PROP_IDX_LAST] =
354                 BNXT_ULP_ACT_PROP_SZ_LAST
355 };
356
357 uint8_t ulp_glb_field_tbl[] = {
358         [2048] = 0,
359         [2049] = 1,
360         [2050] = 2,
361         [2052] = 3,
362         [2054] = 4,
363         [2058] = 5,
364         [2060] = 6,
365         [2062] = 7,
366         [2064] = 8,
367         [2066] = 9,
368         [2068] = 10,
369         [2070] = 11,
370         [2072] = 12,
371         [2074] = 13,
372         [2076] = 14,
373         [2176] = 0,
374         [2177] = 1,
375         [2178] = 2,
376         [2180] = 3,
377         [2182] = 4,
378         [2186] = 5,
379         [2188] = 6,
380         [2190] = 7,
381         [2192] = 8,
382         [2194] = 9,
383         [2196] = 10,
384         [2198] = 11,
385         [2200] = 12,
386         [2202] = 13,
387         [2204] = 14,
388         [2232] = 15,
389         [2234] = 16,
390         [2236] = 17,
391         [2238] = 18,
392         [2240] = 19,
393         [2242] = 20,
394         [2244] = 21,
395         [2246] = 22,
396         [2248] = 23,
397         [2304] = 0,
398         [2305] = 1,
399         [2306] = 2,
400         [2308] = 3,
401         [2310] = 4,
402         [2314] = 5,
403         [2316] = 6,
404         [2318] = 7,
405         [2320] = 8,
406         [2322] = 9,
407         [2324] = 10,
408         [2326] = 11,
409         [2328] = 12,
410         [2330] = 13,
411         [2332] = 14,
412         [2378] = 15,
413         [2380] = 16,
414         [2382] = 17,
415         [2384] = 18,
416         [2432] = 0,
417         [2433] = 1,
418         [2434] = 2,
419         [2436] = 3,
420         [2438] = 4,
421         [2462] = 5,
422         [2464] = 6,
423         [2466] = 7,
424         [2468] = 8,
425         [2470] = 9,
426         [2472] = 10,
427         [2474] = 11,
428         [2476] = 12,
429         [2560] = 0,
430         [2561] = 1,
431         [2562] = 2,
432         [2564] = 3,
433         [2566] = 4,
434         [2590] = 5,
435         [2592] = 6,
436         [2594] = 7,
437         [2596] = 8,
438         [2598] = 9,
439         [2600] = 10,
440         [2602] = 11,
441         [2604] = 12,
442         [2616] = 13,
443         [2618] = 14,
444         [2620] = 15,
445         [2622] = 16,
446         [2624] = 17,
447         [2626] = 18,
448         [2628] = 19,
449         [2630] = 20,
450         [2632] = 21,
451         [2688] = 0,
452         [2689] = 1,
453         [2690] = 2,
454         [2692] = 3,
455         [2694] = 4,
456         [2718] = 5,
457         [2720] = 6,
458         [2722] = 7,
459         [2724] = 8,
460         [2726] = 9,
461         [2728] = 10,
462         [2730] = 11,
463         [2732] = 12,
464         [2762] = 13,
465         [2764] = 14,
466         [2766] = 15,
467         [2768] = 16,
468         [2816] = 0,
469         [2817] = 1,
470         [2818] = 2,
471         [2820] = 3,
472         [2822] = 4,
473         [2826] = 8,
474         [2828] = 9,
475         [2830] = 10,
476         [2832] = 11,
477         [2834] = 12,
478         [2836] = 13,
479         [2838] = 14,
480         [2840] = 15,
481         [2842] = 16,
482         [2844] = 17,
483         [2898] = 5,
484         [2902] = 6,
485         [2906] = 7,
486         [2944] = 0,
487         [2945] = 1,
488         [2946] = 2,
489         [2948] = 3,
490         [2950] = 4,
491         [2954] = 8,
492         [2956] = 9,
493         [2958] = 10,
494         [2960] = 11,
495         [2962] = 12,
496         [2964] = 13,
497         [2966] = 14,
498         [2968] = 15,
499         [2970] = 16,
500         [2972] = 17,
501         [3000] = 18,
502         [3002] = 19,
503         [3004] = 20,
504         [3006] = 21,
505         [3008] = 22,
506         [3010] = 23,
507         [3012] = 24,
508         [3014] = 25,
509         [3016] = 26,
510         [3026] = 5,
511         [3030] = 6,
512         [3034] = 7,
513         [3072] = 0,
514         [3073] = 1,
515         [3074] = 2,
516         [3076] = 3,
517         [3078] = 4,
518         [3082] = 8,
519         [3084] = 9,
520         [3086] = 10,
521         [3088] = 11,
522         [3090] = 12,
523         [3092] = 13,
524         [3094] = 14,
525         [3096] = 15,
526         [3098] = 16,
527         [3100] = 17,
528         [3146] = 18,
529         [3148] = 19,
530         [3150] = 20,
531         [3152] = 21,
532         [3154] = 5,
533         [3158] = 6,
534         [3162] = 7,
535         [3200] = 0,
536         [3201] = 1,
537         [3202] = 2,
538         [3204] = 3,
539         [3206] = 4,
540         [3230] = 8,
541         [3232] = 9,
542         [3234] = 10,
543         [3236] = 11,
544         [3238] = 12,
545         [3240] = 13,
546         [3242] = 14,
547         [3244] = 15,
548         [3282] = 5,
549         [3286] = 6,
550         [3290] = 7,
551         [3328] = 0,
552         [3329] = 1,
553         [3330] = 2,
554         [3332] = 3,
555         [3334] = 4,
556         [3358] = 8,
557         [3360] = 9,
558         [3362] = 10,
559         [3364] = 11,
560         [3366] = 12,
561         [3368] = 13,
562         [3370] = 14,
563         [3372] = 15,
564         [3384] = 16,
565         [3386] = 17,
566         [3388] = 18,
567         [3390] = 19,
568         [3392] = 20,
569         [3394] = 21,
570         [3396] = 22,
571         [3398] = 23,
572         [3400] = 24,
573         [3410] = 5,
574         [3414] = 6,
575         [3418] = 7,
576         [3456] = 0,
577         [3457] = 1,
578         [3458] = 2,
579         [3460] = 3,
580         [3462] = 4,
581         [3486] = 8,
582         [3488] = 9,
583         [3490] = 10,
584         [3492] = 11,
585         [3494] = 12,
586         [3496] = 13,
587         [3498] = 14,
588         [3500] = 15,
589         [3530] = 16,
590         [3532] = 17,
591         [3534] = 18,
592         [3536] = 19,
593         [3538] = 5,
594         [3542] = 6,
595         [3546] = 7,
596         [4096] = 0,
597         [4097] = 1,
598         [4098] = 2,
599         [4100] = 3,
600         [4102] = 4,
601         [4106] = 5,
602         [4108] = 6,
603         [4110] = 7,
604         [4112] = 8,
605         [4114] = 9,
606         [4116] = 10,
607         [4118] = 11,
608         [4120] = 12,
609         [4122] = 13,
610         [4124] = 14,
611         [4224] = 0,
612         [4225] = 1,
613         [4226] = 2,
614         [4228] = 3,
615         [4230] = 4,
616         [4234] = 5,
617         [4236] = 6,
618         [4238] = 7,
619         [4240] = 8,
620         [4242] = 9,
621         [4244] = 10,
622         [4246] = 11,
623         [4248] = 12,
624         [4250] = 13,
625         [4252] = 14,
626         [4280] = 15,
627         [4282] = 16,
628         [4284] = 17,
629         [4286] = 18,
630         [4288] = 19,
631         [4290] = 20,
632         [4292] = 21,
633         [4294] = 22,
634         [4296] = 23,
635         [4352] = 0,
636         [4353] = 1,
637         [4354] = 2,
638         [4356] = 3,
639         [4358] = 4,
640         [4362] = 5,
641         [4364] = 6,
642         [4366] = 7,
643         [4368] = 8,
644         [4370] = 9,
645         [4372] = 10,
646         [4374] = 11,
647         [4376] = 12,
648         [4378] = 13,
649         [4380] = 14,
650         [4426] = 15,
651         [4428] = 16,
652         [4430] = 17,
653         [4432] = 18,
654         [4480] = 0,
655         [4481] = 1,
656         [4482] = 2,
657         [4484] = 3,
658         [4486] = 4,
659         [4510] = 5,
660         [4512] = 6,
661         [4514] = 7,
662         [4516] = 8,
663         [4518] = 9,
664         [4520] = 10,
665         [4522] = 11,
666         [4524] = 12,
667         [4608] = 0,
668         [4609] = 1,
669         [4610] = 2,
670         [4612] = 3,
671         [4614] = 4,
672         [4638] = 5,
673         [4640] = 6,
674         [4642] = 7,
675         [4644] = 8,
676         [4646] = 9,
677         [4648] = 10,
678         [4650] = 11,
679         [4652] = 12,
680         [4664] = 13,
681         [4666] = 14,
682         [4668] = 15,
683         [4670] = 16,
684         [4672] = 17,
685         [4674] = 18,
686         [4676] = 19,
687         [4678] = 20,
688         [4680] = 21,
689         [4736] = 0,
690         [4737] = 1,
691         [4738] = 2,
692         [4740] = 3,
693         [4742] = 4,
694         [4766] = 5,
695         [4768] = 6,
696         [4770] = 7,
697         [4772] = 8,
698         [4774] = 9,
699         [4776] = 10,
700         [4778] = 11,
701         [4780] = 12,
702         [4810] = 13,
703         [4812] = 14,
704         [4814] = 15,
705         [4816] = 16,
706         [4864] = 0,
707         [4865] = 1,
708         [4866] = 2,
709         [4868] = 3,
710         [4870] = 4,
711         [4874] = 8,
712         [4876] = 9,
713         [4878] = 10,
714         [4880] = 11,
715         [4882] = 12,
716         [4884] = 13,
717         [4886] = 14,
718         [4888] = 15,
719         [4890] = 16,
720         [4892] = 17,
721         [4946] = 5,
722         [4950] = 6,
723         [4954] = 7,
724         [4992] = 0,
725         [4993] = 1,
726         [4994] = 2,
727         [4996] = 3,
728         [4998] = 4,
729         [5002] = 8,
730         [5004] = 9,
731         [5006] = 10,
732         [5008] = 11,
733         [5010] = 12,
734         [5012] = 13,
735         [5014] = 14,
736         [5016] = 15,
737         [5018] = 16,
738         [5020] = 17,
739         [5048] = 18,
740         [5050] = 19,
741         [5052] = 20,
742         [5054] = 21,
743         [5056] = 22,
744         [5058] = 23,
745         [5060] = 24,
746         [5062] = 25,
747         [5064] = 26,
748         [5074] = 5,
749         [5078] = 6,
750         [5082] = 7,
751         [5120] = 0,
752         [5121] = 1,
753         [5122] = 2,
754         [5124] = 3,
755         [5126] = 4,
756         [5130] = 8,
757         [5132] = 9,
758         [5134] = 10,
759         [5136] = 11,
760         [5138] = 12,
761         [5140] = 13,
762         [5142] = 14,
763         [5144] = 15,
764         [5146] = 16,
765         [5148] = 17,
766         [5194] = 18,
767         [5196] = 19,
768         [5198] = 20,
769         [5200] = 21,
770         [5202] = 5,
771         [5206] = 6,
772         [5210] = 7,
773         [5248] = 0,
774         [5249] = 1,
775         [5250] = 2,
776         [5252] = 3,
777         [5254] = 4,
778         [5278] = 8,
779         [5280] = 9,
780         [5282] = 10,
781         [5284] = 11,
782         [5286] = 12,
783         [5288] = 13,
784         [5290] = 14,
785         [5292] = 15,
786         [5330] = 5,
787         [5334] = 6,
788         [5338] = 7,
789         [5376] = 0,
790         [5377] = 1,
791         [5378] = 2,
792         [5380] = 3,
793         [5382] = 4,
794         [5406] = 8,
795         [5408] = 9,
796         [5410] = 10,
797         [5412] = 11,
798         [5414] = 12,
799         [5416] = 13,
800         [5418] = 14,
801         [5420] = 15,
802         [5432] = 16,
803         [5434] = 17,
804         [5436] = 18,
805         [5438] = 19,
806         [5440] = 20,
807         [5442] = 21,
808         [5444] = 22,
809         [5446] = 23,
810         [5448] = 24,
811         [5458] = 5,
812         [5462] = 6,
813         [5466] = 7,
814         [5504] = 0,
815         [5505] = 1,
816         [5506] = 2,
817         [5508] = 3,
818         [5510] = 4,
819         [5534] = 8,
820         [5536] = 9,
821         [5538] = 10,
822         [5540] = 11,
823         [5542] = 12,
824         [5544] = 13,
825         [5546] = 14,
826         [5548] = 15,
827         [5578] = 16,
828         [5580] = 17,
829         [5582] = 18,
830         [5584] = 19,
831         [5586] = 5,
832         [5590] = 6,
833         [5594] = 7
834 };
835