18df4a5f8SOleksandr Kolomeiets /* 28df4a5f8SOleksandr Kolomeiets * SPDX-License-Identifier: BSD-3-Clause 38df4a5f8SOleksandr Kolomeiets * Copyright(c) 2023 Napatech A/S 48df4a5f8SOleksandr Kolomeiets */ 58df4a5f8SOleksandr Kolomeiets 68df4a5f8SOleksandr Kolomeiets #ifndef _HW_MOD_BACKEND_H_ 78df4a5f8SOleksandr Kolomeiets #define _HW_MOD_BACKEND_H_ 88df4a5f8SOleksandr Kolomeiets 9636b2cfeSOleksandr Kolomeiets #include <stdbool.h> 10636b2cfeSOleksandr Kolomeiets 111d3f62a0SOleksandr Kolomeiets #include "ntlog.h" 121d3f62a0SOleksandr Kolomeiets 13636b2cfeSOleksandr Kolomeiets #include "hw_mod_cat_v18.h" 14636b2cfeSOleksandr Kolomeiets #include "hw_mod_cat_v21.h" 15cec43fabSOleksandr Kolomeiets #include "hw_mod_flm_v25.h" 163005c75dSOleksandr Kolomeiets #include "hw_mod_km_v7.h" 17b95f1cd0SOleksandr Kolomeiets #include "hw_mod_qsl_v7.h" 187d65ee1aSOleksandr Kolomeiets #include "hw_mod_pdb_v9.h" 198c545325SOleksandr Kolomeiets #include "hw_mod_slc_lr_v2.h" 20a5a5d5bbSOleksandr Kolomeiets #include "hw_mod_hsh_v5.h" 217f058028SSerhii Iliushyk #include "hw_mod_tpe_v3.h" 22636b2cfeSOleksandr Kolomeiets 23e3723ca6SOleksandr Kolomeiets #define MAX_PHYS_ADAPTERS 8 24e3723ca6SOleksandr Kolomeiets 256e8b7f11SOleksandr Kolomeiets #define VER_MAJOR(ver) (((ver) >> 16) & 0xffff) 266e8b7f11SOleksandr Kolomeiets #define VER_MINOR(ver) ((ver) & 0xffff) 276e8b7f11SOleksandr Kolomeiets 286e8b7f11SOleksandr Kolomeiets struct flow_api_backend_s; 296e8b7f11SOleksandr Kolomeiets struct common_func_s; 306e8b7f11SOleksandr Kolomeiets 316e8b7f11SOleksandr Kolomeiets void *callocate_mod(struct common_func_s *mod, int sets, ...); 326e8b7f11SOleksandr Kolomeiets void zero_module_cache(struct common_func_s *mod); 336e8b7f11SOleksandr Kolomeiets 346e8b7f11SOleksandr Kolomeiets #define ALL_ENTRIES -1000 35fbe2726fSOleksandr Kolomeiets #define ALL_BANK_ENTRIES -1001 366e8b7f11SOleksandr Kolomeiets 376e8b7f11SOleksandr Kolomeiets #define INDEX_TOO_LARGE (-2) 386e8b7f11SOleksandr Kolomeiets #define INDEX_TOO_LARGE_LOG NT_LOG(INF, FILTER, "ERROR:%s: Index too large", __func__) 396e8b7f11SOleksandr Kolomeiets 406e8b7f11SOleksandr Kolomeiets #define WORD_OFF_TOO_LARGE (-3) 416e8b7f11SOleksandr Kolomeiets #define WORD_OFF_TOO_LARGE_LOG NT_LOG(INF, FILTER, "ERROR:%s: Word offset too large", __func__) 426e8b7f11SOleksandr Kolomeiets 436e8b7f11SOleksandr Kolomeiets #define UNSUP_FIELD (-5) 446e8b7f11SOleksandr Kolomeiets #define UNSUP_FIELD_LOG \ 456e8b7f11SOleksandr Kolomeiets NT_LOG(INF, FILTER, "ERROR:%s: Unsupported field in NIC module", __func__) 466e8b7f11SOleksandr Kolomeiets 476e8b7f11SOleksandr Kolomeiets #define UNSUP_VER (-4) 486e8b7f11SOleksandr Kolomeiets #define UNSUP_VER_LOG \ 496e8b7f11SOleksandr Kolomeiets NT_LOG(INF, FILTER, "ERROR:%s: Unsupported NIC module: %s ver %i.%i", __func__, _MOD_, \ 506e8b7f11SOleksandr Kolomeiets VER_MAJOR(_VER_), VER_MINOR(_VER_)) 516e8b7f11SOleksandr Kolomeiets 526e8b7f11SOleksandr Kolomeiets #define COUNT_ERROR (-4) 536e8b7f11SOleksandr Kolomeiets #define COUNT_ERROR_LOG(_RESOURCE_) \ 546e8b7f11SOleksandr Kolomeiets NT_LOG(INF, FILTER, \ 556e8b7f11SOleksandr Kolomeiets "ERROR:%s: Insufficient resource [ %s ] : NIC module: %s ver %i.%i", __func__, \ 566e8b7f11SOleksandr Kolomeiets #_RESOURCE_, _MOD_, VER_MAJOR(_VER_), VER_MINOR(_VER_)) \ 576e8b7f11SOleksandr Kolomeiets 586e8b7f11SOleksandr Kolomeiets #define NOT_FOUND 0xffffffff 596e8b7f11SOleksandr Kolomeiets 606e8b7f11SOleksandr Kolomeiets enum { 616e8b7f11SOleksandr Kolomeiets EXTRA_INDEXES 626e8b7f11SOleksandr Kolomeiets }; 636e8b7f11SOleksandr Kolomeiets 646e8b7f11SOleksandr Kolomeiets #define GET(cached_val, val) ({ *(val) = *(cached_val); }) 656e8b7f11SOleksandr Kolomeiets 666e8b7f11SOleksandr Kolomeiets #define SET(cached_val, val) ({ *(cached_val) = *(val); }) 676e8b7f11SOleksandr Kolomeiets 686e8b7f11SOleksandr Kolomeiets #define GET_SET(cached_val, val) \ 696e8b7f11SOleksandr Kolomeiets do { \ 706e8b7f11SOleksandr Kolomeiets uint32_t *temp_val = (val); \ 716e8b7f11SOleksandr Kolomeiets typeof(cached_val) *temp_cached_val = &(cached_val); \ 726e8b7f11SOleksandr Kolomeiets if (get) \ 736e8b7f11SOleksandr Kolomeiets GET(temp_cached_val, temp_val); \ 746e8b7f11SOleksandr Kolomeiets else \ 756e8b7f11SOleksandr Kolomeiets SET(temp_cached_val, temp_val); \ 766e8b7f11SOleksandr Kolomeiets } while (0) 776e8b7f11SOleksandr Kolomeiets 786e8b7f11SOleksandr Kolomeiets #define GET_SIGNED(cached_val, val) ({ *(val) = (uint32_t)(*(cached_val)); }) 796e8b7f11SOleksandr Kolomeiets 806e8b7f11SOleksandr Kolomeiets #define SET_SIGNED(cached_val, val) ({ *(cached_val) = (int32_t)(*(val)); }) 816e8b7f11SOleksandr Kolomeiets 826e8b7f11SOleksandr Kolomeiets #define GET_SET_SIGNED(cached_val, val) \ 836e8b7f11SOleksandr Kolomeiets do { \ 846e8b7f11SOleksandr Kolomeiets uint32_t *temp_val = (val); \ 856e8b7f11SOleksandr Kolomeiets typeof(cached_val) *temp_cached_val = &(cached_val); \ 866e8b7f11SOleksandr Kolomeiets if (get) \ 876e8b7f11SOleksandr Kolomeiets GET_SIGNED(temp_cached_val, temp_val); \ 886e8b7f11SOleksandr Kolomeiets else \ 896e8b7f11SOleksandr Kolomeiets SET_SIGNED(temp_cached_val, temp_val); \ 906e8b7f11SOleksandr Kolomeiets } while (0) 916e8b7f11SOleksandr Kolomeiets 926e8b7f11SOleksandr Kolomeiets #define FIND_EQUAL_INDEX(be_module_reg, type, idx, start, nb_elements) \ 936e8b7f11SOleksandr Kolomeiets do { \ 946e8b7f11SOleksandr Kolomeiets typeof(be_module_reg) *temp_be_module = \ 956e8b7f11SOleksandr Kolomeiets (typeof(be_module_reg) *)be_module_reg; \ 966e8b7f11SOleksandr Kolomeiets typeof(idx) tmp_idx = (idx); \ 976e8b7f11SOleksandr Kolomeiets typeof(nb_elements) tmp_nb_elements = (nb_elements); \ 986e8b7f11SOleksandr Kolomeiets unsigned int start_idx = (unsigned int)(start); \ 996e8b7f11SOleksandr Kolomeiets *value = NOT_FOUND; \ 1006e8b7f11SOleksandr Kolomeiets for (unsigned int i = start_idx; i < tmp_nb_elements; i++) { \ 1016e8b7f11SOleksandr Kolomeiets if ((unsigned int)(tmp_idx) == i) \ 1026e8b7f11SOleksandr Kolomeiets continue; \ 1036e8b7f11SOleksandr Kolomeiets if (memcmp(&temp_be_module[tmp_idx], &temp_be_module[i], sizeof(type)) == \ 1046e8b7f11SOleksandr Kolomeiets 0) { \ 1056e8b7f11SOleksandr Kolomeiets *value = i; \ 1066e8b7f11SOleksandr Kolomeiets break; \ 1076e8b7f11SOleksandr Kolomeiets } \ 1086e8b7f11SOleksandr Kolomeiets } \ 1096e8b7f11SOleksandr Kolomeiets } while (0) 1106e8b7f11SOleksandr Kolomeiets 1116e8b7f11SOleksandr Kolomeiets #define DO_COMPARE_INDEXS(be_module_reg, type, idx, cmp_idx) \ 1126e8b7f11SOleksandr Kolomeiets do { \ 1136e8b7f11SOleksandr Kolomeiets typeof(be_module_reg) *temp_be_module = &(be_module_reg); \ 1146e8b7f11SOleksandr Kolomeiets typeof(idx) tmp_idx = (idx); \ 1156e8b7f11SOleksandr Kolomeiets typeof(cmp_idx) tmp_cmp_idx = (cmp_idx); \ 1166e8b7f11SOleksandr Kolomeiets if ((unsigned int)(tmp_idx) != (unsigned int)(tmp_cmp_idx)) { \ 1176e8b7f11SOleksandr Kolomeiets (void)memcmp(temp_be_module + tmp_idx, &temp_be_module[tmp_cmp_idx], \ 1186e8b7f11SOleksandr Kolomeiets sizeof(type)); \ 1196e8b7f11SOleksandr Kolomeiets } \ 1206e8b7f11SOleksandr Kolomeiets } while (0) 1216e8b7f11SOleksandr Kolomeiets 1226e8b7f11SOleksandr Kolomeiets enum km_flm_if_select_e { 1236e8b7f11SOleksandr Kolomeiets KM_FLM_IF_FIRST = 0, 1246e8b7f11SOleksandr Kolomeiets KM_FLM_IF_SECOND = 1 1256e8b7f11SOleksandr Kolomeiets }; 1266e8b7f11SOleksandr Kolomeiets 1276e8b7f11SOleksandr Kolomeiets #define FIELD_START_INDEX 100 1286e8b7f11SOleksandr Kolomeiets 129636b2cfeSOleksandr Kolomeiets #define COMMON_FUNC_INFO_S \ 130636b2cfeSOleksandr Kolomeiets int ver; \ 131636b2cfeSOleksandr Kolomeiets void *base; \ 132636b2cfeSOleksandr Kolomeiets unsigned int alloced_size; \ 133636b2cfeSOleksandr Kolomeiets int debug 134636b2cfeSOleksandr Kolomeiets 1356e8b7f11SOleksandr Kolomeiets struct common_func_s { 1366e8b7f11SOleksandr Kolomeiets COMMON_FUNC_INFO_S; 1376e8b7f11SOleksandr Kolomeiets }; 1386e8b7f11SOleksandr Kolomeiets 139636b2cfeSOleksandr Kolomeiets struct cat_func_s { 140636b2cfeSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 141636b2cfeSOleksandr Kolomeiets uint32_t nb_cat_funcs; 142636b2cfeSOleksandr Kolomeiets uint32_t nb_flow_types; 143636b2cfeSOleksandr Kolomeiets uint32_t nb_pm_ext; 144636b2cfeSOleksandr Kolomeiets uint32_t nb_len; 145636b2cfeSOleksandr Kolomeiets uint32_t kcc_size; 146636b2cfeSOleksandr Kolomeiets uint32_t cts_num; 147636b2cfeSOleksandr Kolomeiets uint32_t kcc_banks; 148636b2cfeSOleksandr Kolomeiets uint32_t kcc_id_bit_size; 149636b2cfeSOleksandr Kolomeiets uint32_t kcc_records; 150636b2cfeSOleksandr Kolomeiets uint32_t km_if_count; 151636b2cfeSOleksandr Kolomeiets int32_t km_if_m0; 152636b2cfeSOleksandr Kolomeiets int32_t km_if_m1; 153636b2cfeSOleksandr Kolomeiets 154636b2cfeSOleksandr Kolomeiets union { 155636b2cfeSOleksandr Kolomeiets struct hw_mod_cat_v18_s v18; 156636b2cfeSOleksandr Kolomeiets struct hw_mod_cat_v21_s v21; 157636b2cfeSOleksandr Kolomeiets }; 158636b2cfeSOleksandr Kolomeiets }; 1596e8b7f11SOleksandr Kolomeiets enum hw_cat_e { 1606e8b7f11SOleksandr Kolomeiets /* 1616e8b7f11SOleksandr Kolomeiets * functions initial CAT v18 1626e8b7f11SOleksandr Kolomeiets */ 1636e8b7f11SOleksandr Kolomeiets /* 00 */ HW_CAT_CFN_SET_ALL_DEFAULTS = 0, 1646e8b7f11SOleksandr Kolomeiets /* 01 */ HW_CAT_CFN_PRESET_ALL, 1656e8b7f11SOleksandr Kolomeiets /* 02 */ HW_CAT_CFN_COMPARE, 1666e8b7f11SOleksandr Kolomeiets /* 03 */ HW_CAT_CFN_FIND, 1676e8b7f11SOleksandr Kolomeiets /* 04 */ HW_CAT_CFN_COPY_FROM, 1686e8b7f11SOleksandr Kolomeiets /* 05 */ HW_CAT_COT_PRESET_ALL, 1696e8b7f11SOleksandr Kolomeiets /* 06 */ HW_CAT_COT_COMPARE, 1706e8b7f11SOleksandr Kolomeiets /* 07 */ HW_CAT_COT_FIND, 1716e8b7f11SOleksandr Kolomeiets /* 08 */ HW_CAT_COT_COPY_FROM, 1726e8b7f11SOleksandr Kolomeiets /* fields */ 1736e8b7f11SOleksandr Kolomeiets /* 00 */ HW_CAT_CFN_ENABLE = FIELD_START_INDEX, 1746e8b7f11SOleksandr Kolomeiets /* 01 */ HW_CAT_CFN_INV, 1756e8b7f11SOleksandr Kolomeiets /* 02 */ HW_CAT_CFN_PTC_INV, 1766e8b7f11SOleksandr Kolomeiets /* 03 */ HW_CAT_CFN_PTC_ISL, 1776e8b7f11SOleksandr Kolomeiets /* 04 */ HW_CAT_CFN_PTC_CFP, 1786e8b7f11SOleksandr Kolomeiets /* 05 */ HW_CAT_CFN_PTC_MAC, 1796e8b7f11SOleksandr Kolomeiets /* 06 */ HW_CAT_CFN_PTC_L2, 1806e8b7f11SOleksandr Kolomeiets /* 07 */ HW_CAT_CFN_PTC_VNTAG, 1816e8b7f11SOleksandr Kolomeiets /* 08 */ HW_CAT_CFN_PTC_VLAN, 1826e8b7f11SOleksandr Kolomeiets /* 09 */ HW_CAT_CFN_PTC_MPLS, 1836e8b7f11SOleksandr Kolomeiets /* 10 */ HW_CAT_CFN_PTC_L3, 1846e8b7f11SOleksandr Kolomeiets /* 11 */ HW_CAT_CFN_PTC_FRAG, 1856e8b7f11SOleksandr Kolomeiets /* 12 */ HW_CAT_CFN_PTC_IP_PROT, 1866e8b7f11SOleksandr Kolomeiets /* 13 */ HW_CAT_CFN_PTC_L4, 1876e8b7f11SOleksandr Kolomeiets /* 14 */ HW_CAT_CFN_PTC_TUNNEL, 1886e8b7f11SOleksandr Kolomeiets /* 15 */ HW_CAT_CFN_PTC_TNL_L2, 1896e8b7f11SOleksandr Kolomeiets /* 16 */ HW_CAT_CFN_PTC_TNL_VLAN, 1906e8b7f11SOleksandr Kolomeiets /* 17 */ HW_CAT_CFN_PTC_TNL_MPLS, 1916e8b7f11SOleksandr Kolomeiets /* 18 */ HW_CAT_CFN_PTC_TNL_L3, 1926e8b7f11SOleksandr Kolomeiets /* 19 */ HW_CAT_CFN_PTC_TNL_FRAG, 1936e8b7f11SOleksandr Kolomeiets /* 20 */ HW_CAT_CFN_PTC_TNL_IP_PROT, 1946e8b7f11SOleksandr Kolomeiets /* 21 */ HW_CAT_CFN_PTC_TNL_L4, 1956e8b7f11SOleksandr Kolomeiets /* 22 */ HW_CAT_CFN_ERR_INV, 1966e8b7f11SOleksandr Kolomeiets /* 23 */ HW_CAT_CFN_ERR_CV, 1976e8b7f11SOleksandr Kolomeiets /* 24 */ HW_CAT_CFN_ERR_FCS, 1986e8b7f11SOleksandr Kolomeiets /* 25 */ HW_CAT_CFN_ERR_TRUNC, 1996e8b7f11SOleksandr Kolomeiets /* 26 */ HW_CAT_CFN_ERR_L3_CS, 2006e8b7f11SOleksandr Kolomeiets /* 27 */ HW_CAT_CFN_ERR_L4_CS, 2016e8b7f11SOleksandr Kolomeiets /* 28 */ HW_CAT_CFN_MAC_PORT, 2026e8b7f11SOleksandr Kolomeiets /* 29 */ HW_CAT_CFN_PM_CMP, 2036e8b7f11SOleksandr Kolomeiets /* 30 */ HW_CAT_CFN_PM_DCT, 2046e8b7f11SOleksandr Kolomeiets /* 31 */ HW_CAT_CFN_PM_EXT_INV, 2056e8b7f11SOleksandr Kolomeiets /* 32 */ HW_CAT_CFN_PM_CMB, 2066e8b7f11SOleksandr Kolomeiets /* 33 */ HW_CAT_CFN_PM_AND_INV, 2076e8b7f11SOleksandr Kolomeiets /* 34 */ HW_CAT_CFN_PM_OR_INV, 2086e8b7f11SOleksandr Kolomeiets /* 35 */ HW_CAT_CFN_PM_INV, 2096e8b7f11SOleksandr Kolomeiets /* 36 */ HW_CAT_CFN_LC, 2106e8b7f11SOleksandr Kolomeiets /* 37 */ HW_CAT_CFN_LC_INV, 2116e8b7f11SOleksandr Kolomeiets /* 38 */ HW_CAT_CFN_KM0_OR, 2126e8b7f11SOleksandr Kolomeiets /* 39 */ HW_CAT_CFN_KM1_OR, 2136e8b7f11SOleksandr Kolomeiets /* 40 */ HW_CAT_KCE_ENABLE_BM, 2146e8b7f11SOleksandr Kolomeiets /* 41 */ HW_CAT_KCS_CATEGORY, 2156e8b7f11SOleksandr Kolomeiets /* 42 */ HW_CAT_FTE_ENABLE_BM, 2166e8b7f11SOleksandr Kolomeiets /* 43 */ HW_CAT_CTE_ENABLE_BM, 2176e8b7f11SOleksandr Kolomeiets /* 44 */ HW_CAT_CTS_CAT_A, 2186e8b7f11SOleksandr Kolomeiets /* 45 */ HW_CAT_CTS_CAT_B, 2196e8b7f11SOleksandr Kolomeiets /* 46 */ HW_CAT_COT_COLOR, 2206e8b7f11SOleksandr Kolomeiets /* 47 */ HW_CAT_COT_KM, 2216e8b7f11SOleksandr Kolomeiets /* 48 */ HW_CAT_CCT_COLOR, 2226e8b7f11SOleksandr Kolomeiets /* 49 */ HW_CAT_CCT_KM, 2236e8b7f11SOleksandr Kolomeiets /* 50 */ HW_CAT_KCC_KEY, 2246e8b7f11SOleksandr Kolomeiets /* 51 */ HW_CAT_KCC_CATEGORY, 2256e8b7f11SOleksandr Kolomeiets /* 52 */ HW_CAT_KCC_ID, 2266e8b7f11SOleksandr Kolomeiets /* 53 */ HW_CAT_EXO_DYN, 2276e8b7f11SOleksandr Kolomeiets /* 54 */ HW_CAT_EXO_OFS, 2286e8b7f11SOleksandr Kolomeiets /* 55 */ HW_CAT_RCK_DATA, 2296e8b7f11SOleksandr Kolomeiets /* 56 */ HW_CAT_LEN_LOWER, 2306e8b7f11SOleksandr Kolomeiets /* 57 */ HW_CAT_LEN_UPPER, 2316e8b7f11SOleksandr Kolomeiets /* 58 */ HW_CAT_LEN_DYN1, 2326e8b7f11SOleksandr Kolomeiets /* 59 */ HW_CAT_LEN_DYN2, 2336e8b7f11SOleksandr Kolomeiets /* 60 */ HW_CAT_LEN_INV, 2346e8b7f11SOleksandr Kolomeiets /* 61 */ HW_CAT_CFN_ERR_TNL_L3_CS, 2356e8b7f11SOleksandr Kolomeiets /* 62 */ HW_CAT_CFN_ERR_TNL_L4_CS, 2366e8b7f11SOleksandr Kolomeiets /* 63 */ HW_CAT_CFN_ERR_TTL_EXP, 2376e8b7f11SOleksandr Kolomeiets /* 64 */ HW_CAT_CFN_ERR_TNL_TTL_EXP, 2386e8b7f11SOleksandr Kolomeiets }; 2396e8b7f11SOleksandr Kolomeiets 2406e8b7f11SOleksandr Kolomeiets bool hw_mod_cat_present(struct flow_api_backend_s *be); 2416e8b7f11SOleksandr Kolomeiets int hw_mod_cat_alloc(struct flow_api_backend_s *be); 2426e8b7f11SOleksandr Kolomeiets void hw_mod_cat_free(struct flow_api_backend_s *be); 2436e8b7f11SOleksandr Kolomeiets int hw_mod_cat_reset(struct flow_api_backend_s *be); 2446e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cfn_flush(struct flow_api_backend_s *be, int start_idx, int count); 2456e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cfn_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index, int word_off, 2466e8b7f11SOleksandr Kolomeiets uint32_t value); 2476e8b7f11SOleksandr Kolomeiets 2486e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cte_flush(struct flow_api_backend_s *be, int start_idx, int count); 2496e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cts_flush(struct flow_api_backend_s *be, int start_idx, int count); 2506e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cot_flush(struct flow_api_backend_s *be, int start_idx, int count); 2516e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cct_flush(struct flow_api_backend_s *be, int start_idx, int count); 2526e8b7f11SOleksandr Kolomeiets int hw_mod_cat_kcc_flush(struct flow_api_backend_s *be, int start_idx, int count); 2536e8b7f11SOleksandr Kolomeiets 2546e8b7f11SOleksandr Kolomeiets int hw_mod_cat_exo_flush(struct flow_api_backend_s *be, int start_idx, int count); 2556e8b7f11SOleksandr Kolomeiets int hw_mod_cat_rck_flush(struct flow_api_backend_s *be, int start_idx, int count); 2566e8b7f11SOleksandr Kolomeiets int hw_mod_cat_len_flush(struct flow_api_backend_s *be, int start_idx, int count); 257636b2cfeSOleksandr Kolomeiets 2583005c75dSOleksandr Kolomeiets struct km_func_s { 2593005c75dSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 2603005c75dSOleksandr Kolomeiets uint32_t nb_categories; 2613005c75dSOleksandr Kolomeiets uint32_t nb_cam_banks; 2623005c75dSOleksandr Kolomeiets uint32_t nb_cam_record_words; 2633005c75dSOleksandr Kolomeiets uint32_t nb_cam_records; 2643005c75dSOleksandr Kolomeiets uint32_t nb_tcam_banks; 2653005c75dSOleksandr Kolomeiets uint32_t nb_tcam_bank_width; 2663005c75dSOleksandr Kolomeiets /* not read from backend, but rather set using version */ 2673005c75dSOleksandr Kolomeiets uint32_t nb_km_rcp_mask_a_word_size; 2683005c75dSOleksandr Kolomeiets /* --- || --- */ 2693005c75dSOleksandr Kolomeiets uint32_t nb_km_rcp_mask_b_word_size; 2703005c75dSOleksandr Kolomeiets union { 2713005c75dSOleksandr Kolomeiets struct hw_mod_km_v7_s v7; 2723005c75dSOleksandr Kolomeiets }; 2733005c75dSOleksandr Kolomeiets }; 274fbe2726fSOleksandr Kolomeiets enum hw_km_e { 275fbe2726fSOleksandr Kolomeiets /* functions */ 276fbe2726fSOleksandr Kolomeiets HW_KM_RCP_PRESET_ALL = 0, 277fbe2726fSOleksandr Kolomeiets HW_KM_CAM_PRESET_ALL, 278fbe2726fSOleksandr Kolomeiets /* to sync and reset hw with cache - force write all entries in a bank */ 279fbe2726fSOleksandr Kolomeiets HW_KM_TCAM_BANK_RESET, 280fbe2726fSOleksandr Kolomeiets /* fields */ 281fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_DYN = FIELD_START_INDEX, 282fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_OFS, 283fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_SEL_A, 284fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_SEL_B, 285fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_DYN, 286fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_OFS, 287fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_SEL_A, 288fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_SEL_B, 289fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_DYN, 290fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_OFS, 291fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_SEL_A, 292fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_SEL_B, 293fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_DYN, 294fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_OFS, 295fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_SEL_A, 296fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_SEL_B, 297fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SWX_CCH, 298fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SWX_SEL_A, 299fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SWX_SEL_B, 300fbe2726fSOleksandr Kolomeiets HW_KM_RCP_MASK_A, 301fbe2726fSOleksandr Kolomeiets HW_KM_RCP_MASK_B, 302fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DUAL, 303fbe2726fSOleksandr Kolomeiets HW_KM_RCP_PAIRED, 304fbe2726fSOleksandr Kolomeiets HW_KM_RCP_EL_A, 305fbe2726fSOleksandr Kolomeiets HW_KM_RCP_EL_B, 306fbe2726fSOleksandr Kolomeiets HW_KM_RCP_INFO_A, 307fbe2726fSOleksandr Kolomeiets HW_KM_RCP_INFO_B, 308fbe2726fSOleksandr Kolomeiets HW_KM_RCP_FTM_A, 309fbe2726fSOleksandr Kolomeiets HW_KM_RCP_FTM_B, 310fbe2726fSOleksandr Kolomeiets HW_KM_RCP_BANK_A, 311fbe2726fSOleksandr Kolomeiets HW_KM_RCP_BANK_B, 312fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KL_A, 313fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KL_B, 314fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KEYWAY_A, 315fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KEYWAY_B, 316fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SYNERGY_MODE, 317fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW0_B_DYN, 318fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW0_B_OFS, 319fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW2_B_DYN, 320fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW2_B_OFS, 321fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW4_B_DYN, 322fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW4_B_OFS, 323fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW5_B_DYN, 324fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW5_B_OFS, 325fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W0, 326fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W1, 327fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W2, 328fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W3, 329fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W4, 330fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W5, 331fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT0, 332fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT1, 333fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT2, 334fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT3, 335fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT4, 336fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT5, 337fbe2726fSOleksandr Kolomeiets HW_KM_TCAM_T, 338fbe2726fSOleksandr Kolomeiets HW_KM_TCI_COLOR, 339fbe2726fSOleksandr Kolomeiets HW_KM_TCI_FT, 340fbe2726fSOleksandr Kolomeiets HW_KM_TCQ_BANK_MASK, 341fbe2726fSOleksandr Kolomeiets HW_KM_TCQ_QUAL 342fbe2726fSOleksandr Kolomeiets }; 343fbe2726fSOleksandr Kolomeiets bool hw_mod_km_present(struct flow_api_backend_s *be); 344fbe2726fSOleksandr Kolomeiets int hw_mod_km_alloc(struct flow_api_backend_s *be); 345fbe2726fSOleksandr Kolomeiets void hw_mod_km_free(struct flow_api_backend_s *be); 346fbe2726fSOleksandr Kolomeiets int hw_mod_km_reset(struct flow_api_backend_s *be); 347fbe2726fSOleksandr Kolomeiets int hw_mod_km_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 348fbe2726fSOleksandr Kolomeiets int hw_mod_km_cam_flush(struct flow_api_backend_s *be, int start_bank, int start_record, 349fbe2726fSOleksandr Kolomeiets int count); 350fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcam_flush(struct flow_api_backend_s *be, int start_bank, int count); 351fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcam_set(struct flow_api_backend_s *be, enum hw_km_e field, int bank, int byte, 352fbe2726fSOleksandr Kolomeiets int byte_val, uint32_t *value_set); 353fbe2726fSOleksandr Kolomeiets int hw_mod_km_tci_flush(struct flow_api_backend_s *be, int start_bank, int start_record, 354fbe2726fSOleksandr Kolomeiets int count); 355fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcq_flush(struct flow_api_backend_s *be, int start_bank, int start_record, 356fbe2726fSOleksandr Kolomeiets int count); 3573005c75dSOleksandr Kolomeiets 358cec43fabSOleksandr Kolomeiets struct flm_func_s { 359cec43fabSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 360cec43fabSOleksandr Kolomeiets uint32_t nb_categories; 361cec43fabSOleksandr Kolomeiets uint32_t nb_size_mb; 362cec43fabSOleksandr Kolomeiets uint32_t nb_entry_size; 363cec43fabSOleksandr Kolomeiets uint32_t nb_variant; 364cec43fabSOleksandr Kolomeiets uint32_t nb_prios; 365cec43fabSOleksandr Kolomeiets uint32_t nb_pst_profiles; 366cec43fabSOleksandr Kolomeiets uint32_t nb_scrub_profiles; 367cec43fabSOleksandr Kolomeiets uint32_t nb_rpp_clock_in_ps; 368cec43fabSOleksandr Kolomeiets uint32_t nb_load_aps_max; 369cec43fabSOleksandr Kolomeiets union { 370cec43fabSOleksandr Kolomeiets struct hw_mod_flm_v25_s v25; 371cec43fabSOleksandr Kolomeiets }; 372cec43fabSOleksandr Kolomeiets }; 373*059dfc39SOleksandr Kolomeiets enum hw_flm_e { 374*059dfc39SOleksandr Kolomeiets /* functions */ 375*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_PRESET_ALL = 0, 376*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_PRESET_ALL, 377*059dfc39SOleksandr Kolomeiets HW_FLM_FLOW_LRN_DATA, 378*059dfc39SOleksandr Kolomeiets HW_FLM_FLOW_INF_STA_DATA, 379*059dfc39SOleksandr Kolomeiets /* Control fields */ 380*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_ENABLE = FIELD_START_INDEX, 381*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_INIT, 382*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_LDS, 383*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_LFS, 384*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_LIS, 385*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_UDS, 386*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_UIS, 387*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_RDS, 388*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_RIS, 389*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_PDS, 390*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_PIS, 391*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_CRCWR, 392*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_CRCRD, 393*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_RBL, 394*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_EAB, 395*059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_SPLIT_SDRAM_USAGE, 396*059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CALIB_SUCCESS, 397*059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CALIB_FAIL, 398*059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_INITDONE, 399*059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_IDLE, 400*059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CRITICAL, 401*059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_PANIC, 402*059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CRCERR, 403*059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_EFT_BP, 404*059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CACHE_BUFFER_CRITICAL, 405*059dfc39SOleksandr Kolomeiets HW_FLM_LOAD_BIN, 406*059dfc39SOleksandr Kolomeiets HW_FLM_LOAD_LPS, 407*059dfc39SOleksandr Kolomeiets HW_FLM_LOAD_APS, 408*059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT0, 409*059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT0, 410*059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT1, 411*059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT1, 412*059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT2, 413*059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT2, 414*059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT3, 415*059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT3, 416*059dfc39SOleksandr Kolomeiets HW_FLM_PST_PRESET_ALL, 417*059dfc39SOleksandr Kolomeiets HW_FLM_PST_BP, 418*059dfc39SOleksandr Kolomeiets HW_FLM_PST_PP, 419*059dfc39SOleksandr Kolomeiets HW_FLM_PST_TP, 420*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_LOOKUP, 421*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW0_DYN, 422*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW0_OFS, 423*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW0_SEL, 424*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW4_DYN, 425*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW4_OFS, 426*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW8_DYN, 427*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW8_OFS, 428*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW8_SEL, 429*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW9_DYN, 430*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW9_OFS, 431*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_MASK, 432*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_KID, 433*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_OPN, 434*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_IPN, 435*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_BYT_DYN, 436*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_BYT_OFS, 437*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_TXPLM, 438*059dfc39SOleksandr Kolomeiets HW_FLM_RCP_AUTO_IPV4_MASK, 439*059dfc39SOleksandr Kolomeiets HW_FLM_BUF_CTRL_LRN_FREE, 440*059dfc39SOleksandr Kolomeiets HW_FLM_BUF_CTRL_INF_AVAIL, 441*059dfc39SOleksandr Kolomeiets HW_FLM_BUF_CTRL_STA_AVAIL, 442*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_LRN_DONE, 443*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_LRN_IGNORE, 444*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_LRN_FAIL, 445*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_UNL_DONE, 446*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_UNL_IGNORE, 447*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_REL_DONE, 448*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_REL_IGNORE, 449*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PRB_DONE, 450*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PRB_IGNORE, 451*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_AUL_DONE, 452*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_AUL_IGNORE, 453*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_AUL_FAIL, 454*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_TUL_DONE, 455*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_FLOWS, 456*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_STA_DONE, /* module ver 0.20 */ 457*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_INF_DONE, /* module ver 0.20 */ 458*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_INF_SKIP, /* module ver 0.20 */ 459*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_HIT, /* module ver 0.20 */ 460*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_MISS, /* module ver 0.20 */ 461*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_UNH, /* module ver 0.20 */ 462*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_DIS, /* module ver 0.20 */ 463*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CSH_HIT, /* module ver 0.20 */ 464*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CSH_MISS, /* module ver 0.20 */ 465*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CSH_UNH, /* module ver 0.20 */ 466*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CUC_START, /* module ver 0.20 */ 467*059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CUC_MOVE, /* module ver 0.20 */ 468*059dfc39SOleksandr Kolomeiets HW_FLM_SCAN_I, /* module ver 0.22 */ 469*059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_PRESET_ALL, 470*059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_T, /* module ver 0.22 */ 471*059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_R, /* module ver 0.24 */ 472*059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_DEL, /* module ver 0.24 */ 473*059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_INF, /* module ver 0.24 */ 474*059dfc39SOleksandr Kolomeiets }; 475*059dfc39SOleksandr Kolomeiets 476*059dfc39SOleksandr Kolomeiets bool hw_mod_flm_present(struct flow_api_backend_s *be); 477*059dfc39SOleksandr Kolomeiets int hw_mod_flm_alloc(struct flow_api_backend_s *be); 478*059dfc39SOleksandr Kolomeiets void hw_mod_flm_free(struct flow_api_backend_s *be); 479*059dfc39SOleksandr Kolomeiets int hw_mod_flm_reset(struct flow_api_backend_s *be); 480*059dfc39SOleksandr Kolomeiets 481*059dfc39SOleksandr Kolomeiets int hw_mod_flm_control_flush(struct flow_api_backend_s *be); 482*059dfc39SOleksandr Kolomeiets int hw_mod_flm_control_set(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t value); 483*059dfc39SOleksandr Kolomeiets 484*059dfc39SOleksandr Kolomeiets int hw_mod_flm_scan_flush(struct flow_api_backend_s *be); 485*059dfc39SOleksandr Kolomeiets 486*059dfc39SOleksandr Kolomeiets int hw_mod_flm_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 487*059dfc39SOleksandr Kolomeiets 488*059dfc39SOleksandr Kolomeiets int hw_mod_flm_scrub_flush(struct flow_api_backend_s *be, int start_idx, int count); 489cec43fabSOleksandr Kolomeiets 490a5a5d5bbSOleksandr Kolomeiets struct hsh_func_s { 491a5a5d5bbSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 492a5a5d5bbSOleksandr Kolomeiets uint32_t nb_rcp;/* number of HSH recipes supported by FPGA */ 493a5a5d5bbSOleksandr Kolomeiets /* indication if Toeplitz is supported by FPGA, i.e. 0 - unsupported, 1 - supported */ 494a5a5d5bbSOleksandr Kolomeiets uint32_t toeplitz; 495a5a5d5bbSOleksandr Kolomeiets union { 496a5a5d5bbSOleksandr Kolomeiets struct hw_mod_hsh_v5_s v5; 497a5a5d5bbSOleksandr Kolomeiets }; 498a5a5d5bbSOleksandr Kolomeiets }; 499a5a5d5bbSOleksandr Kolomeiets 500b95f1cd0SOleksandr Kolomeiets struct qsl_func_s { 501b95f1cd0SOleksandr Kolomeiets COMMON_FUNC_INFO_S; 502b95f1cd0SOleksandr Kolomeiets uint32_t nb_rcp_categories; 503b95f1cd0SOleksandr Kolomeiets uint32_t nb_qst_entries; 504b95f1cd0SOleksandr Kolomeiets union { 505b95f1cd0SOleksandr Kolomeiets struct hw_mod_qsl_v7_s v7; 506b95f1cd0SOleksandr Kolomeiets }; 507b95f1cd0SOleksandr Kolomeiets }; 508b95f1cd0SOleksandr Kolomeiets 5098c545325SOleksandr Kolomeiets struct slc_lr_func_s { 5108c545325SOleksandr Kolomeiets COMMON_FUNC_INFO_S; 5118c545325SOleksandr Kolomeiets union { 5128c545325SOleksandr Kolomeiets struct hw_mod_slc_lr_v2_s v2; 5138c545325SOleksandr Kolomeiets }; 5148c545325SOleksandr Kolomeiets }; 5158c545325SOleksandr Kolomeiets 5167d65ee1aSOleksandr Kolomeiets struct pdb_func_s { 5177d65ee1aSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 5187d65ee1aSOleksandr Kolomeiets uint32_t nb_pdb_rcp_categories; 5197d65ee1aSOleksandr Kolomeiets 5207d65ee1aSOleksandr Kolomeiets union { 5217d65ee1aSOleksandr Kolomeiets struct hw_mod_pdb_v9_s v9; 5227d65ee1aSOleksandr Kolomeiets }; 5237d65ee1aSOleksandr Kolomeiets }; 5247d65ee1aSOleksandr Kolomeiets 5257f058028SSerhii Iliushyk struct tpe_func_s { 5267f058028SSerhii Iliushyk COMMON_FUNC_INFO_S; 5277f058028SSerhii Iliushyk uint32_t nb_rcp_categories; 5287f058028SSerhii Iliushyk uint32_t nb_ifr_categories; 5297f058028SSerhii Iliushyk uint32_t nb_cpy_writers; 5307f058028SSerhii Iliushyk uint32_t nb_rpl_depth; 5317f058028SSerhii Iliushyk uint32_t nb_rpl_ext_categories; 5327f058028SSerhii Iliushyk union { 5337f058028SSerhii Iliushyk struct hw_mod_tpe_v3_s v3; 5347f058028SSerhii Iliushyk }; 5357f058028SSerhii Iliushyk }; 5367f058028SSerhii Iliushyk 537e3723ca6SOleksandr Kolomeiets enum debug_mode_e { 538e3723ca6SOleksandr Kolomeiets FLOW_BACKEND_DEBUG_MODE_NONE = 0x0000, 539e3723ca6SOleksandr Kolomeiets FLOW_BACKEND_DEBUG_MODE_WRITE = 0x0001 540e3723ca6SOleksandr Kolomeiets }; 541e3723ca6SOleksandr Kolomeiets 542e3723ca6SOleksandr Kolomeiets struct flow_api_backend_ops { 543e3723ca6SOleksandr Kolomeiets int version; 544e3723ca6SOleksandr Kolomeiets int (*set_debug_mode)(void *dev, enum debug_mode_e mode); 545e3723ca6SOleksandr Kolomeiets int (*get_nb_phy_port)(void *dev); 546e3723ca6SOleksandr Kolomeiets int (*get_nb_rx_port)(void *dev); 547e3723ca6SOleksandr Kolomeiets int (*get_ltx_avail)(void *dev); 548e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_funcs)(void *dev); 549e3723ca6SOleksandr Kolomeiets int (*get_nb_categories)(void *dev); 550e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_km_if_cnt)(void *dev); 551e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_km_if_m0)(void *dev); 552e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_km_if_m1)(void *dev); 553e3723ca6SOleksandr Kolomeiets 554e3723ca6SOleksandr Kolomeiets int (*get_nb_queues)(void *dev); 555e3723ca6SOleksandr Kolomeiets int (*get_nb_km_flow_types)(void *dev); 556e3723ca6SOleksandr Kolomeiets int (*get_nb_pm_ext)(void *dev); 557e3723ca6SOleksandr Kolomeiets int (*get_nb_len)(void *dev); 558e3723ca6SOleksandr Kolomeiets int (*get_kcc_size)(void *dev); 559e3723ca6SOleksandr Kolomeiets int (*get_kcc_banks)(void *dev); 560e3723ca6SOleksandr Kolomeiets int (*get_nb_km_categories)(void *dev); 561e3723ca6SOleksandr Kolomeiets int (*get_nb_km_cam_banks)(void *dev); 562e3723ca6SOleksandr Kolomeiets int (*get_nb_km_cam_record_words)(void *dev); 563e3723ca6SOleksandr Kolomeiets int (*get_nb_km_cam_records)(void *dev); 564e3723ca6SOleksandr Kolomeiets int (*get_nb_km_tcam_banks)(void *dev); 565e3723ca6SOleksandr Kolomeiets int (*get_nb_km_tcam_bank_width)(void *dev); 566e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_categories)(void *dev); 567e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_size_mb)(void *dev); 568e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_entry_size)(void *dev); 569e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_variant)(void *dev); 570e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_prios)(void *dev); 571e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_pst_profiles)(void *dev); 572e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_scrub_profiles)(void *dev); 573e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_load_aps_max)(void *dev); 574e3723ca6SOleksandr Kolomeiets int (*get_nb_qsl_categories)(void *dev); 575e3723ca6SOleksandr Kolomeiets int (*get_nb_qsl_qst_entries)(void *dev); 576e3723ca6SOleksandr Kolomeiets int (*get_nb_pdb_categories)(void *dev); 577e3723ca6SOleksandr Kolomeiets int (*get_nb_roa_categories)(void *dev); 578e3723ca6SOleksandr Kolomeiets int (*get_nb_tpe_categories)(void *dev); 579e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_cpy_writers)(void *dev); 580e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_cpy_mask_mem)(void *dev); 581e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_rpl_depth)(void *dev); 582e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_rpl_ext_categories)(void *dev); 583e3723ca6SOleksandr Kolomeiets int (*get_nb_tpe_ifr_categories)(void *dev); 584e3723ca6SOleksandr Kolomeiets int (*get_nb_rpp_per_ps)(void *dev); 585e3723ca6SOleksandr Kolomeiets int (*get_nb_hsh_categories)(void *dev); 586e3723ca6SOleksandr Kolomeiets int (*get_nb_hsh_toeplitz)(void *dev); 587e3723ca6SOleksandr Kolomeiets 588e3723ca6SOleksandr Kolomeiets int (*alloc_rx_queue)(void *dev, int queue_id); 589e3723ca6SOleksandr Kolomeiets int (*free_rx_queue)(void *dev, int hw_queue); 590636b2cfeSOleksandr Kolomeiets 591636b2cfeSOleksandr Kolomeiets /* CAT */ 592636b2cfeSOleksandr Kolomeiets bool (*get_cat_present)(void *dev); 593636b2cfeSOleksandr Kolomeiets uint32_t (*get_cat_version)(void *dev); 594636b2cfeSOleksandr Kolomeiets int (*cat_cfn_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt); 595636b2cfeSOleksandr Kolomeiets int (*cat_kce_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index, 596636b2cfeSOleksandr Kolomeiets int cnt); 597636b2cfeSOleksandr Kolomeiets int (*cat_kcs_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int cat_func, 598636b2cfeSOleksandr Kolomeiets int cnt); 599636b2cfeSOleksandr Kolomeiets int (*cat_fte_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index, 600636b2cfeSOleksandr Kolomeiets int cnt); 601636b2cfeSOleksandr Kolomeiets int (*cat_cte_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt); 602636b2cfeSOleksandr Kolomeiets int (*cat_cts_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 603636b2cfeSOleksandr Kolomeiets int (*cat_cot_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt); 604636b2cfeSOleksandr Kolomeiets int (*cat_cct_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 605636b2cfeSOleksandr Kolomeiets int (*cat_exo_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 606636b2cfeSOleksandr Kolomeiets int (*cat_rck_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 607636b2cfeSOleksandr Kolomeiets int (*cat_len_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 608636b2cfeSOleksandr Kolomeiets int (*cat_kcc_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 6093005c75dSOleksandr Kolomeiets 6103005c75dSOleksandr Kolomeiets /* KM */ 6113005c75dSOleksandr Kolomeiets bool (*get_km_present)(void *dev); 6123005c75dSOleksandr Kolomeiets uint32_t (*get_km_version)(void *dev); 6133005c75dSOleksandr Kolomeiets int (*km_rcp_flush)(void *dev, const struct km_func_s *km, int category, int cnt); 6143005c75dSOleksandr Kolomeiets int (*km_cam_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt); 6153005c75dSOleksandr Kolomeiets int (*km_tcam_flush)(void *dev, const struct km_func_s *km, int bank, int byte, int value, 6163005c75dSOleksandr Kolomeiets int cnt); 6173005c75dSOleksandr Kolomeiets int (*km_tci_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt); 6183005c75dSOleksandr Kolomeiets int (*km_tcq_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt); 619cec43fabSOleksandr Kolomeiets 620cec43fabSOleksandr Kolomeiets /* FLM */ 621cec43fabSOleksandr Kolomeiets bool (*get_flm_present)(void *dev); 622cec43fabSOleksandr Kolomeiets uint32_t (*get_flm_version)(void *dev); 623cec43fabSOleksandr Kolomeiets int (*flm_control_flush)(void *dev, const struct flm_func_s *flm); 624cec43fabSOleksandr Kolomeiets int (*flm_status_flush)(void *dev, const struct flm_func_s *flm); 625cec43fabSOleksandr Kolomeiets int (*flm_status_update)(void *dev, const struct flm_func_s *flm); 626cec43fabSOleksandr Kolomeiets int (*flm_scan_flush)(void *dev, const struct flm_func_s *flm); 627cec43fabSOleksandr Kolomeiets int (*flm_load_bin_flush)(void *dev, const struct flm_func_s *flm); 628cec43fabSOleksandr Kolomeiets int (*flm_prio_flush)(void *dev, const struct flm_func_s *flm); 629cec43fabSOleksandr Kolomeiets int (*flm_pst_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt); 630cec43fabSOleksandr Kolomeiets int (*flm_rcp_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt); 631cec43fabSOleksandr Kolomeiets int (*flm_scrub_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt); 632cec43fabSOleksandr Kolomeiets int (*flm_buf_ctrl_update)(void *dev, const struct flm_func_s *flm); 633cec43fabSOleksandr Kolomeiets int (*flm_stat_update)(void *dev, const struct flm_func_s *flm); 634cec43fabSOleksandr Kolomeiets int (*flm_lrn_data_flush)(void *be_dev, const struct flm_func_s *flm, 635cec43fabSOleksandr Kolomeiets const uint32_t *lrn_data, uint32_t records, 636cec43fabSOleksandr Kolomeiets uint32_t *handled_records, uint32_t words_per_record, 637cec43fabSOleksandr Kolomeiets uint32_t *inf_word_cnt, uint32_t *sta_word_cnt); 638cec43fabSOleksandr Kolomeiets int (*flm_inf_sta_data_update)(void *be_dev, const struct flm_func_s *flm, 639cec43fabSOleksandr Kolomeiets uint32_t *inf_data, uint32_t inf_size, 640cec43fabSOleksandr Kolomeiets uint32_t *inf_word_cnt, uint32_t *sta_data, 641cec43fabSOleksandr Kolomeiets uint32_t sta_size, uint32_t *sta_word_cnt); 642a5a5d5bbSOleksandr Kolomeiets 643a5a5d5bbSOleksandr Kolomeiets /* HSH */ 644a5a5d5bbSOleksandr Kolomeiets bool (*get_hsh_present)(void *dev); 645a5a5d5bbSOleksandr Kolomeiets uint32_t (*get_hsh_version)(void *dev); 646a5a5d5bbSOleksandr Kolomeiets int (*hsh_rcp_flush)(void *dev, const struct hsh_func_s *hsh, int category, int cnt); 647b95f1cd0SOleksandr Kolomeiets 648b95f1cd0SOleksandr Kolomeiets /* QSL */ 649b95f1cd0SOleksandr Kolomeiets bool (*get_qsl_present)(void *dev); 650b95f1cd0SOleksandr Kolomeiets uint32_t (*get_qsl_version)(void *dev); 651b95f1cd0SOleksandr Kolomeiets int (*qsl_rcp_flush)(void *dev, const struct qsl_func_s *qsl, int category, int cnt); 652b95f1cd0SOleksandr Kolomeiets int (*qsl_qst_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt); 653b95f1cd0SOleksandr Kolomeiets int (*qsl_qen_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt); 654b95f1cd0SOleksandr Kolomeiets int (*qsl_unmq_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt); 6558c545325SOleksandr Kolomeiets 6568c545325SOleksandr Kolomeiets /* SLC LR */ 6578c545325SOleksandr Kolomeiets bool (*get_slc_lr_present)(void *dev); 6588c545325SOleksandr Kolomeiets uint32_t (*get_slc_lr_version)(void *dev); 6598c545325SOleksandr Kolomeiets int (*slc_lr_rcp_flush)(void *dev, const struct slc_lr_func_s *slc_lr, int category, 6608c545325SOleksandr Kolomeiets int cnt); 6617d65ee1aSOleksandr Kolomeiets 6627d65ee1aSOleksandr Kolomeiets /* PDB */ 6637d65ee1aSOleksandr Kolomeiets bool (*get_pdb_present)(void *dev); 6647d65ee1aSOleksandr Kolomeiets uint32_t (*get_pdb_version)(void *dev); 6657d65ee1aSOleksandr Kolomeiets int (*pdb_rcp_flush)(void *dev, const struct pdb_func_s *pdb, int category, int cnt); 6667d65ee1aSOleksandr Kolomeiets int (*pdb_config_flush)(void *dev, const struct pdb_func_s *pdb); 6677f058028SSerhii Iliushyk 6687f058028SSerhii Iliushyk /* TPE */ 6697f058028SSerhii Iliushyk bool (*get_tpe_present)(void *dev); 6707f058028SSerhii Iliushyk uint32_t (*get_tpe_version)(void *dev); 6717f058028SSerhii Iliushyk int (*tpe_rpp_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 6727f058028SSerhii Iliushyk int (*tpe_rpp_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 6737f058028SSerhii Iliushyk int (*tpe_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 6747f058028SSerhii Iliushyk int (*tpe_ins_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 6757f058028SSerhii Iliushyk int (*tpe_rpl_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 6767f058028SSerhii Iliushyk int (*tpe_rpl_ext_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 6777f058028SSerhii Iliushyk int (*tpe_rpl_rpl_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 6787f058028SSerhii Iliushyk int (*tpe_cpy_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 6797f058028SSerhii Iliushyk int (*tpe_hfu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 6807f058028SSerhii Iliushyk int (*tpe_csu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 681e3723ca6SOleksandr Kolomeiets }; 682e3723ca6SOleksandr Kolomeiets 6838df4a5f8SOleksandr Kolomeiets struct flow_api_backend_s { 6848df4a5f8SOleksandr Kolomeiets void *be_dev; 6851d3f62a0SOleksandr Kolomeiets const struct flow_api_backend_ops *iface; 6867917b0d3SOleksandr Kolomeiets 6876e8b7f11SOleksandr Kolomeiets /* flow filter FPGA modules */ 6886e8b7f11SOleksandr Kolomeiets struct cat_func_s cat; 689fbe2726fSOleksandr Kolomeiets struct km_func_s km; 690*059dfc39SOleksandr Kolomeiets struct flm_func_s flm; 6916e8b7f11SOleksandr Kolomeiets 6927917b0d3SOleksandr Kolomeiets /* NIC attributes */ 6937917b0d3SOleksandr Kolomeiets unsigned int num_phy_ports; 6947917b0d3SOleksandr Kolomeiets unsigned int num_rx_ports; 6957917b0d3SOleksandr Kolomeiets 6967917b0d3SOleksandr Kolomeiets /* flow filter resource capacities */ 6977917b0d3SOleksandr Kolomeiets unsigned int max_categories; 6987917b0d3SOleksandr Kolomeiets unsigned int max_queues; 6998df4a5f8SOleksandr Kolomeiets }; 7008df4a5f8SOleksandr Kolomeiets 7017917b0d3SOleksandr Kolomeiets int flow_api_backend_init(struct flow_api_backend_s *dev, const struct flow_api_backend_ops *iface, 7027917b0d3SOleksandr Kolomeiets void *be_dev); 7037917b0d3SOleksandr Kolomeiets int flow_api_backend_done(struct flow_api_backend_s *dev); 7047917b0d3SOleksandr Kolomeiets 7058df4a5f8SOleksandr Kolomeiets #endif /* _HW_MOD_BACKEND_H_ */ 706