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> 107fadd2baSOleksandr Kolomeiets #include <string.h> 11636b2cfeSOleksandr Kolomeiets 121d3f62a0SOleksandr Kolomeiets #include "ntlog.h" 131d3f62a0SOleksandr Kolomeiets 14636b2cfeSOleksandr Kolomeiets #include "hw_mod_cat_v18.h" 15636b2cfeSOleksandr Kolomeiets #include "hw_mod_cat_v21.h" 16cec43fabSOleksandr Kolomeiets #include "hw_mod_flm_v25.h" 173005c75dSOleksandr Kolomeiets #include "hw_mod_km_v7.h" 18b95f1cd0SOleksandr Kolomeiets #include "hw_mod_qsl_v7.h" 197d65ee1aSOleksandr Kolomeiets #include "hw_mod_pdb_v9.h" 208c545325SOleksandr Kolomeiets #include "hw_mod_slc_lr_v2.h" 21a5a5d5bbSOleksandr Kolomeiets #include "hw_mod_hsh_v5.h" 227f058028SSerhii Iliushyk #include "hw_mod_tpe_v3.h" 23636b2cfeSOleksandr Kolomeiets 24e3723ca6SOleksandr Kolomeiets #define MAX_PHYS_ADAPTERS 8 25e3723ca6SOleksandr Kolomeiets 266e8b7f11SOleksandr Kolomeiets #define VER_MAJOR(ver) (((ver) >> 16) & 0xffff) 276e8b7f11SOleksandr Kolomeiets #define VER_MINOR(ver) ((ver) & 0xffff) 286e8b7f11SOleksandr Kolomeiets 296e8b7f11SOleksandr Kolomeiets struct flow_api_backend_s; 306e8b7f11SOleksandr Kolomeiets struct common_func_s; 316e8b7f11SOleksandr Kolomeiets 326e8b7f11SOleksandr Kolomeiets void *callocate_mod(struct common_func_s *mod, int sets, ...); 336e8b7f11SOleksandr Kolomeiets void zero_module_cache(struct common_func_s *mod); 346e8b7f11SOleksandr Kolomeiets 356e8b7f11SOleksandr Kolomeiets #define ALL_ENTRIES -1000 36fbe2726fSOleksandr Kolomeiets #define ALL_BANK_ENTRIES -1001 376e8b7f11SOleksandr Kolomeiets 386e8b7f11SOleksandr Kolomeiets #define INDEX_TOO_LARGE (-2) 396e8b7f11SOleksandr Kolomeiets #define INDEX_TOO_LARGE_LOG NT_LOG(INF, FILTER, "ERROR:%s: Index too large", __func__) 406e8b7f11SOleksandr Kolomeiets 416e8b7f11SOleksandr Kolomeiets #define WORD_OFF_TOO_LARGE (-3) 426e8b7f11SOleksandr Kolomeiets #define WORD_OFF_TOO_LARGE_LOG NT_LOG(INF, FILTER, "ERROR:%s: Word offset too large", __func__) 436e8b7f11SOleksandr Kolomeiets 446e8b7f11SOleksandr Kolomeiets #define UNSUP_FIELD (-5) 456e8b7f11SOleksandr Kolomeiets #define UNSUP_FIELD_LOG \ 466e8b7f11SOleksandr Kolomeiets NT_LOG(INF, FILTER, "ERROR:%s: Unsupported field in NIC module", __func__) 476e8b7f11SOleksandr Kolomeiets 486e8b7f11SOleksandr Kolomeiets #define UNSUP_VER (-4) 496e8b7f11SOleksandr Kolomeiets #define UNSUP_VER_LOG \ 506e8b7f11SOleksandr Kolomeiets NT_LOG(INF, FILTER, "ERROR:%s: Unsupported NIC module: %s ver %i.%i", __func__, _MOD_, \ 516e8b7f11SOleksandr Kolomeiets VER_MAJOR(_VER_), VER_MINOR(_VER_)) 526e8b7f11SOleksandr Kolomeiets 536e8b7f11SOleksandr Kolomeiets #define COUNT_ERROR (-4) 546e8b7f11SOleksandr Kolomeiets #define COUNT_ERROR_LOG(_RESOURCE_) \ 556e8b7f11SOleksandr Kolomeiets NT_LOG(INF, FILTER, \ 566e8b7f11SOleksandr Kolomeiets "ERROR:%s: Insufficient resource [ %s ] : NIC module: %s ver %i.%i", __func__, \ 576e8b7f11SOleksandr Kolomeiets #_RESOURCE_, _MOD_, VER_MAJOR(_VER_), VER_MINOR(_VER_)) \ 586e8b7f11SOleksandr Kolomeiets 596e8b7f11SOleksandr Kolomeiets #define NOT_FOUND 0xffffffff 606e8b7f11SOleksandr Kolomeiets 616e8b7f11SOleksandr Kolomeiets enum { 626e8b7f11SOleksandr Kolomeiets EXTRA_INDEXES 636e8b7f11SOleksandr Kolomeiets }; 646e8b7f11SOleksandr Kolomeiets 656e8b7f11SOleksandr Kolomeiets #define GET(cached_val, val) ({ *(val) = *(cached_val); }) 666e8b7f11SOleksandr Kolomeiets 676e8b7f11SOleksandr Kolomeiets #define SET(cached_val, val) ({ *(cached_val) = *(val); }) 686e8b7f11SOleksandr Kolomeiets 696e8b7f11SOleksandr Kolomeiets #define GET_SET(cached_val, val) \ 706e8b7f11SOleksandr Kolomeiets do { \ 716e8b7f11SOleksandr Kolomeiets uint32_t *temp_val = (val); \ 726e8b7f11SOleksandr Kolomeiets typeof(cached_val) *temp_cached_val = &(cached_val); \ 736e8b7f11SOleksandr Kolomeiets if (get) \ 746e8b7f11SOleksandr Kolomeiets GET(temp_cached_val, temp_val); \ 756e8b7f11SOleksandr Kolomeiets else \ 766e8b7f11SOleksandr Kolomeiets SET(temp_cached_val, temp_val); \ 776e8b7f11SOleksandr Kolomeiets } while (0) 786e8b7f11SOleksandr Kolomeiets 796e8b7f11SOleksandr Kolomeiets #define GET_SIGNED(cached_val, val) ({ *(val) = (uint32_t)(*(cached_val)); }) 806e8b7f11SOleksandr Kolomeiets 816e8b7f11SOleksandr Kolomeiets #define SET_SIGNED(cached_val, val) ({ *(cached_val) = (int32_t)(*(val)); }) 826e8b7f11SOleksandr Kolomeiets 836e8b7f11SOleksandr Kolomeiets #define GET_SET_SIGNED(cached_val, val) \ 846e8b7f11SOleksandr Kolomeiets do { \ 856e8b7f11SOleksandr Kolomeiets uint32_t *temp_val = (val); \ 866e8b7f11SOleksandr Kolomeiets typeof(cached_val) *temp_cached_val = &(cached_val); \ 876e8b7f11SOleksandr Kolomeiets if (get) \ 886e8b7f11SOleksandr Kolomeiets GET_SIGNED(temp_cached_val, temp_val); \ 896e8b7f11SOleksandr Kolomeiets else \ 906e8b7f11SOleksandr Kolomeiets SET_SIGNED(temp_cached_val, temp_val); \ 916e8b7f11SOleksandr Kolomeiets } while (0) 926e8b7f11SOleksandr Kolomeiets 936e8b7f11SOleksandr Kolomeiets #define FIND_EQUAL_INDEX(be_module_reg, type, idx, start, nb_elements) \ 946e8b7f11SOleksandr Kolomeiets do { \ 956e8b7f11SOleksandr Kolomeiets typeof(be_module_reg) *temp_be_module = \ 966e8b7f11SOleksandr Kolomeiets (typeof(be_module_reg) *)be_module_reg; \ 976e8b7f11SOleksandr Kolomeiets typeof(idx) tmp_idx = (idx); \ 986e8b7f11SOleksandr Kolomeiets typeof(nb_elements) tmp_nb_elements = (nb_elements); \ 996e8b7f11SOleksandr Kolomeiets unsigned int start_idx = (unsigned int)(start); \ 1006e8b7f11SOleksandr Kolomeiets *value = NOT_FOUND; \ 1016e8b7f11SOleksandr Kolomeiets for (unsigned int i = start_idx; i < tmp_nb_elements; i++) { \ 1026e8b7f11SOleksandr Kolomeiets if ((unsigned int)(tmp_idx) == i) \ 1036e8b7f11SOleksandr Kolomeiets continue; \ 1046e8b7f11SOleksandr Kolomeiets if (memcmp(&temp_be_module[tmp_idx], &temp_be_module[i], sizeof(type)) == \ 1056e8b7f11SOleksandr Kolomeiets 0) { \ 1066e8b7f11SOleksandr Kolomeiets *value = i; \ 1076e8b7f11SOleksandr Kolomeiets break; \ 1086e8b7f11SOleksandr Kolomeiets } \ 1096e8b7f11SOleksandr Kolomeiets } \ 1106e8b7f11SOleksandr Kolomeiets } while (0) 1116e8b7f11SOleksandr Kolomeiets 1126e8b7f11SOleksandr Kolomeiets #define DO_COMPARE_INDEXS(be_module_reg, type, idx, cmp_idx) \ 1136e8b7f11SOleksandr Kolomeiets do { \ 1146e8b7f11SOleksandr Kolomeiets typeof(be_module_reg) *temp_be_module = &(be_module_reg); \ 1156e8b7f11SOleksandr Kolomeiets typeof(idx) tmp_idx = (idx); \ 1166e8b7f11SOleksandr Kolomeiets typeof(cmp_idx) tmp_cmp_idx = (cmp_idx); \ 1176e8b7f11SOleksandr Kolomeiets if ((unsigned int)(tmp_idx) != (unsigned int)(tmp_cmp_idx)) { \ 1186e8b7f11SOleksandr Kolomeiets (void)memcmp(temp_be_module + tmp_idx, &temp_be_module[tmp_cmp_idx], \ 1196e8b7f11SOleksandr Kolomeiets sizeof(type)); \ 1206e8b7f11SOleksandr Kolomeiets } \ 1216e8b7f11SOleksandr Kolomeiets } while (0) 1226e8b7f11SOleksandr Kolomeiets 12329584e9dSSerhii Iliushyk static inline int is_non_zero(const void *addr, size_t n) 12429584e9dSSerhii Iliushyk { 12529584e9dSSerhii Iliushyk size_t i = 0; 12629584e9dSSerhii Iliushyk const uint8_t *p = (const uint8_t *)addr; 12729584e9dSSerhii Iliushyk 12829584e9dSSerhii Iliushyk for (i = 0; i < n; i++) 12929584e9dSSerhii Iliushyk if (p[i] != 0) 13029584e9dSSerhii Iliushyk return 1; 13129584e9dSSerhii Iliushyk 13229584e9dSSerhii Iliushyk return 0; 13329584e9dSSerhii Iliushyk } 13429584e9dSSerhii Iliushyk 1356fec9a9aSSerhii Iliushyk enum frame_offs_e { 1366fec9a9aSSerhii Iliushyk DYN_L2 = 1, 13756232827SDanylo Vodopianov DYN_FIRST_VLAN = 2, 1386fec9a9aSSerhii Iliushyk DYN_L3 = 4, 1396fec9a9aSSerhii Iliushyk DYN_L4 = 7, 1406fec9a9aSSerhii Iliushyk DYN_L4_PAYLOAD = 8, 1416fec9a9aSSerhii Iliushyk DYN_TUN_L3 = 13, 1426fec9a9aSSerhii Iliushyk DYN_TUN_L4 = 16, 143339ca124SDanylo Vodopianov DYN_TUN_L4_PAYLOAD = 17, 1446fec9a9aSSerhii Iliushyk }; 1456fec9a9aSSerhii Iliushyk 1466fec9a9aSSerhii Iliushyk /* Sideband info bit indicator */ 1476fec9a9aSSerhii Iliushyk 1486e8b7f11SOleksandr Kolomeiets enum km_flm_if_select_e { 1496e8b7f11SOleksandr Kolomeiets KM_FLM_IF_FIRST = 0, 1506e8b7f11SOleksandr Kolomeiets KM_FLM_IF_SECOND = 1 1516e8b7f11SOleksandr Kolomeiets }; 1526e8b7f11SOleksandr Kolomeiets 1536e8b7f11SOleksandr Kolomeiets #define FIELD_START_INDEX 100 1546e8b7f11SOleksandr Kolomeiets 155636b2cfeSOleksandr Kolomeiets #define COMMON_FUNC_INFO_S \ 156636b2cfeSOleksandr Kolomeiets int ver; \ 157636b2cfeSOleksandr Kolomeiets void *base; \ 158636b2cfeSOleksandr Kolomeiets unsigned int alloced_size; \ 159636b2cfeSOleksandr Kolomeiets int debug 160636b2cfeSOleksandr Kolomeiets 1616fec9a9aSSerhii Iliushyk enum { 1626fec9a9aSSerhii Iliushyk PROT_OTHER = 0, 1636fec9a9aSSerhii Iliushyk PROT_L2_ETH2 = 1, 1646fec9a9aSSerhii Iliushyk }; 1656fec9a9aSSerhii Iliushyk 1666fec9a9aSSerhii Iliushyk enum { 1676fec9a9aSSerhii Iliushyk PROT_L3_IPV4 = 1, 168b199509aSDanylo Vodopianov PROT_L3_IPV6 = 2 1696fec9a9aSSerhii Iliushyk }; 1706fec9a9aSSerhii Iliushyk 1716fec9a9aSSerhii Iliushyk enum { 172a8fbe919SDanylo Vodopianov PROT_L4_TCP = 1, 173e872a0c9SDanylo Vodopianov PROT_L4_UDP = 2, 174af7ae7aaSDanylo Vodopianov PROT_L4_SCTP = 3, 1756fec9a9aSSerhii Iliushyk PROT_L4_ICMP = 4 1766fec9a9aSSerhii Iliushyk }; 1776fec9a9aSSerhii Iliushyk 1786fec9a9aSSerhii Iliushyk enum { 179c6821abfSDanylo Vodopianov PROT_TUN_GTPV1U = 6, 180c6821abfSDanylo Vodopianov }; 181c6821abfSDanylo Vodopianov 182c6821abfSDanylo Vodopianov enum { 1836fec9a9aSSerhii Iliushyk PROT_TUN_L3_OTHER = 0, 1846fec9a9aSSerhii Iliushyk PROT_TUN_L3_IPV4 = 1, 185b199509aSDanylo Vodopianov PROT_TUN_L3_IPV6 = 2 1866fec9a9aSSerhii Iliushyk }; 1876fec9a9aSSerhii Iliushyk 1886fec9a9aSSerhii Iliushyk enum { 1896fec9a9aSSerhii Iliushyk PROT_TUN_L4_OTHER = 0, 190a8fbe919SDanylo Vodopianov PROT_TUN_L4_TCP = 1, 191e872a0c9SDanylo Vodopianov PROT_TUN_L4_UDP = 2, 192af7ae7aaSDanylo Vodopianov PROT_TUN_L4_SCTP = 3, 1936fec9a9aSSerhii Iliushyk PROT_TUN_L4_ICMP = 4 1946fec9a9aSSerhii Iliushyk }; 1956fec9a9aSSerhii Iliushyk 1966fec9a9aSSerhii Iliushyk 1976fec9a9aSSerhii Iliushyk enum { 1986fec9a9aSSerhii Iliushyk CPY_SELECT_DSCP_IPV4 = 0, 1996fec9a9aSSerhii Iliushyk CPY_SELECT_DSCP_IPV6 = 1, 2006fec9a9aSSerhii Iliushyk CPY_SELECT_RQI_QFI = 2, 2016fec9a9aSSerhii Iliushyk CPY_SELECT_IPV4 = 3, 2026fec9a9aSSerhii Iliushyk CPY_SELECT_PORT = 4, 2036fec9a9aSSerhii Iliushyk CPY_SELECT_TEID = 5, 2046fec9a9aSSerhii Iliushyk }; 2056fec9a9aSSerhii Iliushyk 2066e8b7f11SOleksandr Kolomeiets struct common_func_s { 2076e8b7f11SOleksandr Kolomeiets COMMON_FUNC_INFO_S; 2086e8b7f11SOleksandr Kolomeiets }; 2096e8b7f11SOleksandr Kolomeiets 210636b2cfeSOleksandr Kolomeiets struct cat_func_s { 211636b2cfeSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 212636b2cfeSOleksandr Kolomeiets uint32_t nb_cat_funcs; 213636b2cfeSOleksandr Kolomeiets uint32_t nb_flow_types; 214636b2cfeSOleksandr Kolomeiets uint32_t nb_pm_ext; 215636b2cfeSOleksandr Kolomeiets uint32_t nb_len; 216636b2cfeSOleksandr Kolomeiets uint32_t kcc_size; 217636b2cfeSOleksandr Kolomeiets uint32_t cts_num; 218636b2cfeSOleksandr Kolomeiets uint32_t kcc_banks; 219636b2cfeSOleksandr Kolomeiets uint32_t kcc_id_bit_size; 220636b2cfeSOleksandr Kolomeiets uint32_t kcc_records; 221636b2cfeSOleksandr Kolomeiets uint32_t km_if_count; 222636b2cfeSOleksandr Kolomeiets int32_t km_if_m0; 223636b2cfeSOleksandr Kolomeiets int32_t km_if_m1; 224636b2cfeSOleksandr Kolomeiets 225636b2cfeSOleksandr Kolomeiets union { 226636b2cfeSOleksandr Kolomeiets struct hw_mod_cat_v18_s v18; 227636b2cfeSOleksandr Kolomeiets struct hw_mod_cat_v21_s v21; 228636b2cfeSOleksandr Kolomeiets }; 229636b2cfeSOleksandr Kolomeiets }; 2306e8b7f11SOleksandr Kolomeiets enum hw_cat_e { 2316e8b7f11SOleksandr Kolomeiets /* 2326e8b7f11SOleksandr Kolomeiets * functions initial CAT v18 2336e8b7f11SOleksandr Kolomeiets */ 2346e8b7f11SOleksandr Kolomeiets /* 00 */ HW_CAT_CFN_SET_ALL_DEFAULTS = 0, 2356e8b7f11SOleksandr Kolomeiets /* 01 */ HW_CAT_CFN_PRESET_ALL, 2366e8b7f11SOleksandr Kolomeiets /* 02 */ HW_CAT_CFN_COMPARE, 2376e8b7f11SOleksandr Kolomeiets /* 03 */ HW_CAT_CFN_FIND, 2386e8b7f11SOleksandr Kolomeiets /* 04 */ HW_CAT_CFN_COPY_FROM, 2396e8b7f11SOleksandr Kolomeiets /* 05 */ HW_CAT_COT_PRESET_ALL, 2406e8b7f11SOleksandr Kolomeiets /* 06 */ HW_CAT_COT_COMPARE, 2416e8b7f11SOleksandr Kolomeiets /* 07 */ HW_CAT_COT_FIND, 2426e8b7f11SOleksandr Kolomeiets /* 08 */ HW_CAT_COT_COPY_FROM, 2436e8b7f11SOleksandr Kolomeiets /* fields */ 2446e8b7f11SOleksandr Kolomeiets /* 00 */ HW_CAT_CFN_ENABLE = FIELD_START_INDEX, 2456e8b7f11SOleksandr Kolomeiets /* 01 */ HW_CAT_CFN_INV, 2466e8b7f11SOleksandr Kolomeiets /* 02 */ HW_CAT_CFN_PTC_INV, 2476e8b7f11SOleksandr Kolomeiets /* 03 */ HW_CAT_CFN_PTC_ISL, 2486e8b7f11SOleksandr Kolomeiets /* 04 */ HW_CAT_CFN_PTC_CFP, 2496e8b7f11SOleksandr Kolomeiets /* 05 */ HW_CAT_CFN_PTC_MAC, 2506e8b7f11SOleksandr Kolomeiets /* 06 */ HW_CAT_CFN_PTC_L2, 2516e8b7f11SOleksandr Kolomeiets /* 07 */ HW_CAT_CFN_PTC_VNTAG, 2526e8b7f11SOleksandr Kolomeiets /* 08 */ HW_CAT_CFN_PTC_VLAN, 2536e8b7f11SOleksandr Kolomeiets /* 09 */ HW_CAT_CFN_PTC_MPLS, 2546e8b7f11SOleksandr Kolomeiets /* 10 */ HW_CAT_CFN_PTC_L3, 2556e8b7f11SOleksandr Kolomeiets /* 11 */ HW_CAT_CFN_PTC_FRAG, 2566e8b7f11SOleksandr Kolomeiets /* 12 */ HW_CAT_CFN_PTC_IP_PROT, 2576e8b7f11SOleksandr Kolomeiets /* 13 */ HW_CAT_CFN_PTC_L4, 2586e8b7f11SOleksandr Kolomeiets /* 14 */ HW_CAT_CFN_PTC_TUNNEL, 2596e8b7f11SOleksandr Kolomeiets /* 15 */ HW_CAT_CFN_PTC_TNL_L2, 2606e8b7f11SOleksandr Kolomeiets /* 16 */ HW_CAT_CFN_PTC_TNL_VLAN, 2616e8b7f11SOleksandr Kolomeiets /* 17 */ HW_CAT_CFN_PTC_TNL_MPLS, 2626e8b7f11SOleksandr Kolomeiets /* 18 */ HW_CAT_CFN_PTC_TNL_L3, 2636e8b7f11SOleksandr Kolomeiets /* 19 */ HW_CAT_CFN_PTC_TNL_FRAG, 2646e8b7f11SOleksandr Kolomeiets /* 20 */ HW_CAT_CFN_PTC_TNL_IP_PROT, 2656e8b7f11SOleksandr Kolomeiets /* 21 */ HW_CAT_CFN_PTC_TNL_L4, 2666e8b7f11SOleksandr Kolomeiets /* 22 */ HW_CAT_CFN_ERR_INV, 2676e8b7f11SOleksandr Kolomeiets /* 23 */ HW_CAT_CFN_ERR_CV, 2686e8b7f11SOleksandr Kolomeiets /* 24 */ HW_CAT_CFN_ERR_FCS, 2696e8b7f11SOleksandr Kolomeiets /* 25 */ HW_CAT_CFN_ERR_TRUNC, 2706e8b7f11SOleksandr Kolomeiets /* 26 */ HW_CAT_CFN_ERR_L3_CS, 2716e8b7f11SOleksandr Kolomeiets /* 27 */ HW_CAT_CFN_ERR_L4_CS, 2726e8b7f11SOleksandr Kolomeiets /* 28 */ HW_CAT_CFN_MAC_PORT, 2736e8b7f11SOleksandr Kolomeiets /* 29 */ HW_CAT_CFN_PM_CMP, 2746e8b7f11SOleksandr Kolomeiets /* 30 */ HW_CAT_CFN_PM_DCT, 2756e8b7f11SOleksandr Kolomeiets /* 31 */ HW_CAT_CFN_PM_EXT_INV, 2766e8b7f11SOleksandr Kolomeiets /* 32 */ HW_CAT_CFN_PM_CMB, 2776e8b7f11SOleksandr Kolomeiets /* 33 */ HW_CAT_CFN_PM_AND_INV, 2786e8b7f11SOleksandr Kolomeiets /* 34 */ HW_CAT_CFN_PM_OR_INV, 2796e8b7f11SOleksandr Kolomeiets /* 35 */ HW_CAT_CFN_PM_INV, 2806e8b7f11SOleksandr Kolomeiets /* 36 */ HW_CAT_CFN_LC, 2816e8b7f11SOleksandr Kolomeiets /* 37 */ HW_CAT_CFN_LC_INV, 2826e8b7f11SOleksandr Kolomeiets /* 38 */ HW_CAT_CFN_KM0_OR, 2836e8b7f11SOleksandr Kolomeiets /* 39 */ HW_CAT_CFN_KM1_OR, 2846e8b7f11SOleksandr Kolomeiets /* 40 */ HW_CAT_KCE_ENABLE_BM, 2856e8b7f11SOleksandr Kolomeiets /* 41 */ HW_CAT_KCS_CATEGORY, 2866e8b7f11SOleksandr Kolomeiets /* 42 */ HW_CAT_FTE_ENABLE_BM, 2876e8b7f11SOleksandr Kolomeiets /* 43 */ HW_CAT_CTE_ENABLE_BM, 2886e8b7f11SOleksandr Kolomeiets /* 44 */ HW_CAT_CTS_CAT_A, 2896e8b7f11SOleksandr Kolomeiets /* 45 */ HW_CAT_CTS_CAT_B, 2906e8b7f11SOleksandr Kolomeiets /* 46 */ HW_CAT_COT_COLOR, 2916e8b7f11SOleksandr Kolomeiets /* 47 */ HW_CAT_COT_KM, 2926e8b7f11SOleksandr Kolomeiets /* 48 */ HW_CAT_CCT_COLOR, 2936e8b7f11SOleksandr Kolomeiets /* 49 */ HW_CAT_CCT_KM, 2946e8b7f11SOleksandr Kolomeiets /* 50 */ HW_CAT_KCC_KEY, 2956e8b7f11SOleksandr Kolomeiets /* 51 */ HW_CAT_KCC_CATEGORY, 2966e8b7f11SOleksandr Kolomeiets /* 52 */ HW_CAT_KCC_ID, 2976e8b7f11SOleksandr Kolomeiets /* 53 */ HW_CAT_EXO_DYN, 2986e8b7f11SOleksandr Kolomeiets /* 54 */ HW_CAT_EXO_OFS, 2996e8b7f11SOleksandr Kolomeiets /* 55 */ HW_CAT_RCK_DATA, 3006e8b7f11SOleksandr Kolomeiets /* 56 */ HW_CAT_LEN_LOWER, 3016e8b7f11SOleksandr Kolomeiets /* 57 */ HW_CAT_LEN_UPPER, 3026e8b7f11SOleksandr Kolomeiets /* 58 */ HW_CAT_LEN_DYN1, 3036e8b7f11SOleksandr Kolomeiets /* 59 */ HW_CAT_LEN_DYN2, 3046e8b7f11SOleksandr Kolomeiets /* 60 */ HW_CAT_LEN_INV, 3056e8b7f11SOleksandr Kolomeiets /* 61 */ HW_CAT_CFN_ERR_TNL_L3_CS, 3066e8b7f11SOleksandr Kolomeiets /* 62 */ HW_CAT_CFN_ERR_TNL_L4_CS, 3076e8b7f11SOleksandr Kolomeiets /* 63 */ HW_CAT_CFN_ERR_TTL_EXP, 3086e8b7f11SOleksandr Kolomeiets /* 64 */ HW_CAT_CFN_ERR_TNL_TTL_EXP, 3096e8b7f11SOleksandr Kolomeiets }; 3106e8b7f11SOleksandr Kolomeiets 3116e8b7f11SOleksandr Kolomeiets bool hw_mod_cat_present(struct flow_api_backend_s *be); 3126e8b7f11SOleksandr Kolomeiets int hw_mod_cat_alloc(struct flow_api_backend_s *be); 3136e8b7f11SOleksandr Kolomeiets void hw_mod_cat_free(struct flow_api_backend_s *be); 3146e8b7f11SOleksandr Kolomeiets int hw_mod_cat_reset(struct flow_api_backend_s *be); 3156e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cfn_flush(struct flow_api_backend_s *be, int start_idx, int count); 3166e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cfn_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index, int word_off, 3176e8b7f11SOleksandr Kolomeiets uint32_t value); 318833962ebSDanylo Vodopianov /* KCE/KCS/FTE KM */ 319833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num, 320833962ebSDanylo Vodopianov int start_idx, int count); 321833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_set(struct flow_api_backend_s *be, enum hw_cat_e field, 322833962ebSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t value); 323833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_get(struct flow_api_backend_s *be, enum hw_cat_e field, 324833962ebSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t *value); 325833962ebSDanylo Vodopianov /* KCE/KCS/FTE FLM */ 326833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num, 327833962ebSDanylo Vodopianov int start_idx, int count); 328833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_set(struct flow_api_backend_s *be, enum hw_cat_e field, 329833962ebSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t value); 330833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_get(struct flow_api_backend_s *be, enum hw_cat_e field, 331833962ebSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t *value); 3326e8b7f11SOleksandr Kolomeiets 3336e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cte_flush(struct flow_api_backend_s *be, int start_idx, int count); 334833962ebSDanylo Vodopianov int hw_mod_cat_cte_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index, 335833962ebSDanylo Vodopianov uint32_t value); 336833962ebSDanylo Vodopianov 3376e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cts_flush(struct flow_api_backend_s *be, int start_idx, int count); 338833962ebSDanylo Vodopianov int hw_mod_cat_cts_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index, 339833962ebSDanylo Vodopianov uint32_t value); 340833962ebSDanylo Vodopianov 3416e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cot_flush(struct flow_api_backend_s *be, int start_idx, int count); 342833962ebSDanylo Vodopianov int hw_mod_cat_cot_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index, 343833962ebSDanylo Vodopianov uint32_t value); 344833962ebSDanylo Vodopianov 3456e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cct_flush(struct flow_api_backend_s *be, int start_idx, int count); 346833962ebSDanylo Vodopianov 3476e8b7f11SOleksandr Kolomeiets int hw_mod_cat_kcc_flush(struct flow_api_backend_s *be, int start_idx, int count); 3486e8b7f11SOleksandr Kolomeiets 3496e8b7f11SOleksandr Kolomeiets int hw_mod_cat_exo_flush(struct flow_api_backend_s *be, int start_idx, int count); 3506e8b7f11SOleksandr Kolomeiets int hw_mod_cat_rck_flush(struct flow_api_backend_s *be, int start_idx, int count); 3516e8b7f11SOleksandr Kolomeiets int hw_mod_cat_len_flush(struct flow_api_backend_s *be, int start_idx, int count); 352636b2cfeSOleksandr Kolomeiets 3533005c75dSOleksandr Kolomeiets struct km_func_s { 3543005c75dSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 3553005c75dSOleksandr Kolomeiets uint32_t nb_categories; 3563005c75dSOleksandr Kolomeiets uint32_t nb_cam_banks; 3573005c75dSOleksandr Kolomeiets uint32_t nb_cam_record_words; 3583005c75dSOleksandr Kolomeiets uint32_t nb_cam_records; 3593005c75dSOleksandr Kolomeiets uint32_t nb_tcam_banks; 3603005c75dSOleksandr Kolomeiets uint32_t nb_tcam_bank_width; 3613005c75dSOleksandr Kolomeiets /* not read from backend, but rather set using version */ 3623005c75dSOleksandr Kolomeiets uint32_t nb_km_rcp_mask_a_word_size; 3633005c75dSOleksandr Kolomeiets /* --- || --- */ 3643005c75dSOleksandr Kolomeiets uint32_t nb_km_rcp_mask_b_word_size; 3653005c75dSOleksandr Kolomeiets union { 3663005c75dSOleksandr Kolomeiets struct hw_mod_km_v7_s v7; 3673005c75dSOleksandr Kolomeiets }; 3683005c75dSOleksandr Kolomeiets }; 369fbe2726fSOleksandr Kolomeiets enum hw_km_e { 370fbe2726fSOleksandr Kolomeiets /* functions */ 371fbe2726fSOleksandr Kolomeiets HW_KM_RCP_PRESET_ALL = 0, 372fbe2726fSOleksandr Kolomeiets HW_KM_CAM_PRESET_ALL, 373fbe2726fSOleksandr Kolomeiets /* to sync and reset hw with cache - force write all entries in a bank */ 374fbe2726fSOleksandr Kolomeiets HW_KM_TCAM_BANK_RESET, 375fbe2726fSOleksandr Kolomeiets /* fields */ 376fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_DYN = FIELD_START_INDEX, 377fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_OFS, 378fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_SEL_A, 379fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_SEL_B, 380fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_DYN, 381fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_OFS, 382fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_SEL_A, 383fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_SEL_B, 384fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_DYN, 385fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_OFS, 386fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_SEL_A, 387fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_SEL_B, 388fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_DYN, 389fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_OFS, 390fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_SEL_A, 391fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_SEL_B, 392fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SWX_CCH, 393fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SWX_SEL_A, 394fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SWX_SEL_B, 395fbe2726fSOleksandr Kolomeiets HW_KM_RCP_MASK_A, 396fbe2726fSOleksandr Kolomeiets HW_KM_RCP_MASK_B, 397fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DUAL, 398fbe2726fSOleksandr Kolomeiets HW_KM_RCP_PAIRED, 399fbe2726fSOleksandr Kolomeiets HW_KM_RCP_EL_A, 400fbe2726fSOleksandr Kolomeiets HW_KM_RCP_EL_B, 401fbe2726fSOleksandr Kolomeiets HW_KM_RCP_INFO_A, 402fbe2726fSOleksandr Kolomeiets HW_KM_RCP_INFO_B, 403fbe2726fSOleksandr Kolomeiets HW_KM_RCP_FTM_A, 404fbe2726fSOleksandr Kolomeiets HW_KM_RCP_FTM_B, 405fbe2726fSOleksandr Kolomeiets HW_KM_RCP_BANK_A, 406fbe2726fSOleksandr Kolomeiets HW_KM_RCP_BANK_B, 407fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KL_A, 408fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KL_B, 409fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KEYWAY_A, 410fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KEYWAY_B, 411fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SYNERGY_MODE, 412fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW0_B_DYN, 413fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW0_B_OFS, 414fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW2_B_DYN, 415fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW2_B_OFS, 416fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW4_B_DYN, 417fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW4_B_OFS, 418fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW5_B_DYN, 419fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW5_B_OFS, 420fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W0, 421fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W1, 422fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W2, 423fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W3, 424fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W4, 425fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W5, 426fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT0, 427fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT1, 428fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT2, 429fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT3, 430fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT4, 431fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT5, 432fbe2726fSOleksandr Kolomeiets HW_KM_TCAM_T, 433fbe2726fSOleksandr Kolomeiets HW_KM_TCI_COLOR, 434fbe2726fSOleksandr Kolomeiets HW_KM_TCI_FT, 435fbe2726fSOleksandr Kolomeiets HW_KM_TCQ_BANK_MASK, 436fbe2726fSOleksandr Kolomeiets HW_KM_TCQ_QUAL 437fbe2726fSOleksandr Kolomeiets }; 438fbe2726fSOleksandr Kolomeiets bool hw_mod_km_present(struct flow_api_backend_s *be); 439fbe2726fSOleksandr Kolomeiets int hw_mod_km_alloc(struct flow_api_backend_s *be); 440fbe2726fSOleksandr Kolomeiets void hw_mod_km_free(struct flow_api_backend_s *be); 441fbe2726fSOleksandr Kolomeiets int hw_mod_km_reset(struct flow_api_backend_s *be); 442fbe2726fSOleksandr Kolomeiets int hw_mod_km_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 443fbe2726fSOleksandr Kolomeiets int hw_mod_km_cam_flush(struct flow_api_backend_s *be, int start_bank, int start_record, 444fbe2726fSOleksandr Kolomeiets int count); 445fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcam_flush(struct flow_api_backend_s *be, int start_bank, int count); 446fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcam_set(struct flow_api_backend_s *be, enum hw_km_e field, int bank, int byte, 447fbe2726fSOleksandr Kolomeiets int byte_val, uint32_t *value_set); 448fbe2726fSOleksandr Kolomeiets int hw_mod_km_tci_flush(struct flow_api_backend_s *be, int start_bank, int start_record, 449fbe2726fSOleksandr Kolomeiets int count); 450fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcq_flush(struct flow_api_backend_s *be, int start_bank, int start_record, 451fbe2726fSOleksandr Kolomeiets int count); 4523005c75dSOleksandr Kolomeiets 453cec43fabSOleksandr Kolomeiets struct flm_func_s { 454cec43fabSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 455cec43fabSOleksandr Kolomeiets uint32_t nb_categories; 456cec43fabSOleksandr Kolomeiets uint32_t nb_size_mb; 457cec43fabSOleksandr Kolomeiets uint32_t nb_entry_size; 458cec43fabSOleksandr Kolomeiets uint32_t nb_variant; 459cec43fabSOleksandr Kolomeiets uint32_t nb_prios; 460cec43fabSOleksandr Kolomeiets uint32_t nb_pst_profiles; 461cec43fabSOleksandr Kolomeiets uint32_t nb_scrub_profiles; 462cec43fabSOleksandr Kolomeiets uint32_t nb_rpp_clock_in_ps; 463cec43fabSOleksandr Kolomeiets uint32_t nb_load_aps_max; 464cec43fabSOleksandr Kolomeiets union { 465cec43fabSOleksandr Kolomeiets struct hw_mod_flm_v25_s v25; 466cec43fabSOleksandr Kolomeiets }; 467cec43fabSOleksandr Kolomeiets }; 468059dfc39SOleksandr Kolomeiets enum hw_flm_e { 469059dfc39SOleksandr Kolomeiets /* functions */ 470059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_PRESET_ALL = 0, 471059dfc39SOleksandr Kolomeiets HW_FLM_RCP_PRESET_ALL, 472059dfc39SOleksandr Kolomeiets HW_FLM_FLOW_LRN_DATA, 473059dfc39SOleksandr Kolomeiets HW_FLM_FLOW_INF_STA_DATA, 474059dfc39SOleksandr Kolomeiets /* Control fields */ 475059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_ENABLE = FIELD_START_INDEX, 476059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_INIT, 477059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_LDS, 478059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_LFS, 479059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_LIS, 480059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_UDS, 481059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_UIS, 482059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_RDS, 483059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_RIS, 484059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_PDS, 485059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_PIS, 486059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_CRCWR, 487059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_CRCRD, 488059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_RBL, 489059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_EAB, 490059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_SPLIT_SDRAM_USAGE, 491059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CALIB_SUCCESS, 492059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CALIB_FAIL, 493059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_INITDONE, 494059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_IDLE, 495059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CRITICAL, 496059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_PANIC, 497059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CRCERR, 498059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_EFT_BP, 499059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CACHE_BUFFER_CRITICAL, 500059dfc39SOleksandr Kolomeiets HW_FLM_LOAD_BIN, 501059dfc39SOleksandr Kolomeiets HW_FLM_LOAD_LPS, 502059dfc39SOleksandr Kolomeiets HW_FLM_LOAD_APS, 503059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT0, 504059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT0, 505059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT1, 506059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT1, 507059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT2, 508059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT2, 509059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT3, 510059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT3, 511059dfc39SOleksandr Kolomeiets HW_FLM_PST_PRESET_ALL, 512059dfc39SOleksandr Kolomeiets HW_FLM_PST_BP, 513059dfc39SOleksandr Kolomeiets HW_FLM_PST_PP, 514059dfc39SOleksandr Kolomeiets HW_FLM_PST_TP, 515059dfc39SOleksandr Kolomeiets HW_FLM_RCP_LOOKUP, 516059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW0_DYN, 517059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW0_OFS, 518059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW0_SEL, 519059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW4_DYN, 520059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW4_OFS, 521059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW8_DYN, 522059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW8_OFS, 523059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW8_SEL, 524059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW9_DYN, 525059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW9_OFS, 526059dfc39SOleksandr Kolomeiets HW_FLM_RCP_MASK, 527059dfc39SOleksandr Kolomeiets HW_FLM_RCP_KID, 528059dfc39SOleksandr Kolomeiets HW_FLM_RCP_OPN, 529059dfc39SOleksandr Kolomeiets HW_FLM_RCP_IPN, 530059dfc39SOleksandr Kolomeiets HW_FLM_RCP_BYT_DYN, 531059dfc39SOleksandr Kolomeiets HW_FLM_RCP_BYT_OFS, 532059dfc39SOleksandr Kolomeiets HW_FLM_RCP_TXPLM, 533059dfc39SOleksandr Kolomeiets HW_FLM_RCP_AUTO_IPV4_MASK, 534059dfc39SOleksandr Kolomeiets HW_FLM_BUF_CTRL_LRN_FREE, 535059dfc39SOleksandr Kolomeiets HW_FLM_BUF_CTRL_INF_AVAIL, 536059dfc39SOleksandr Kolomeiets HW_FLM_BUF_CTRL_STA_AVAIL, 537059dfc39SOleksandr Kolomeiets HW_FLM_STAT_LRN_DONE, 538059dfc39SOleksandr Kolomeiets HW_FLM_STAT_LRN_IGNORE, 539059dfc39SOleksandr Kolomeiets HW_FLM_STAT_LRN_FAIL, 540059dfc39SOleksandr Kolomeiets HW_FLM_STAT_UNL_DONE, 541059dfc39SOleksandr Kolomeiets HW_FLM_STAT_UNL_IGNORE, 542059dfc39SOleksandr Kolomeiets HW_FLM_STAT_REL_DONE, 543059dfc39SOleksandr Kolomeiets HW_FLM_STAT_REL_IGNORE, 544059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PRB_DONE, 545059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PRB_IGNORE, 546059dfc39SOleksandr Kolomeiets HW_FLM_STAT_AUL_DONE, 547059dfc39SOleksandr Kolomeiets HW_FLM_STAT_AUL_IGNORE, 548059dfc39SOleksandr Kolomeiets HW_FLM_STAT_AUL_FAIL, 549059dfc39SOleksandr Kolomeiets HW_FLM_STAT_TUL_DONE, 550059dfc39SOleksandr Kolomeiets HW_FLM_STAT_FLOWS, 551059dfc39SOleksandr Kolomeiets HW_FLM_STAT_STA_DONE, /* module ver 0.20 */ 552059dfc39SOleksandr Kolomeiets HW_FLM_STAT_INF_DONE, /* module ver 0.20 */ 553059dfc39SOleksandr Kolomeiets HW_FLM_STAT_INF_SKIP, /* module ver 0.20 */ 554059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_HIT, /* module ver 0.20 */ 555059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_MISS, /* module ver 0.20 */ 556059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_UNH, /* module ver 0.20 */ 557059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_DIS, /* module ver 0.20 */ 558059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CSH_HIT, /* module ver 0.20 */ 559059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CSH_MISS, /* module ver 0.20 */ 560059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CSH_UNH, /* module ver 0.20 */ 561059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CUC_START, /* module ver 0.20 */ 562059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CUC_MOVE, /* module ver 0.20 */ 563059dfc39SOleksandr Kolomeiets HW_FLM_SCAN_I, /* module ver 0.22 */ 564059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_PRESET_ALL, 565059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_T, /* module ver 0.22 */ 566059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_R, /* module ver 0.24 */ 567059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_DEL, /* module ver 0.24 */ 568059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_INF, /* module ver 0.24 */ 569059dfc39SOleksandr Kolomeiets }; 570059dfc39SOleksandr Kolomeiets 571059dfc39SOleksandr Kolomeiets bool hw_mod_flm_present(struct flow_api_backend_s *be); 572059dfc39SOleksandr Kolomeiets int hw_mod_flm_alloc(struct flow_api_backend_s *be); 573059dfc39SOleksandr Kolomeiets void hw_mod_flm_free(struct flow_api_backend_s *be); 574059dfc39SOleksandr Kolomeiets int hw_mod_flm_reset(struct flow_api_backend_s *be); 575059dfc39SOleksandr Kolomeiets 576059dfc39SOleksandr Kolomeiets int hw_mod_flm_control_flush(struct flow_api_backend_s *be); 577059dfc39SOleksandr Kolomeiets int hw_mod_flm_control_set(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t value); 578059dfc39SOleksandr Kolomeiets 579059dfc39SOleksandr Kolomeiets int hw_mod_flm_scan_flush(struct flow_api_backend_s *be); 580059dfc39SOleksandr Kolomeiets 581059dfc39SOleksandr Kolomeiets int hw_mod_flm_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 582059dfc39SOleksandr Kolomeiets 583059dfc39SOleksandr Kolomeiets int hw_mod_flm_scrub_flush(struct flow_api_backend_s *be, int start_idx, int count); 584cec43fabSOleksandr Kolomeiets 585a5a5d5bbSOleksandr Kolomeiets struct hsh_func_s { 586a5a5d5bbSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 587a5a5d5bbSOleksandr Kolomeiets uint32_t nb_rcp;/* number of HSH recipes supported by FPGA */ 588a5a5d5bbSOleksandr Kolomeiets /* indication if Toeplitz is supported by FPGA, i.e. 0 - unsupported, 1 - supported */ 589a5a5d5bbSOleksandr Kolomeiets uint32_t toeplitz; 590a5a5d5bbSOleksandr Kolomeiets union { 591a5a5d5bbSOleksandr Kolomeiets struct hw_mod_hsh_v5_s v5; 592a5a5d5bbSOleksandr Kolomeiets }; 593a5a5d5bbSOleksandr Kolomeiets }; 594afad5ac4SOleksandr Kolomeiets enum hw_hsh_e { 595afad5ac4SOleksandr Kolomeiets /* functions */ 596afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_PRESET_ALL = 0, 597afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_COMPARE, 598afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_FIND, 599afad5ac4SOleksandr Kolomeiets /* fields */ 600afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_LOAD_DIST_TYPE = FIELD_START_INDEX, 601afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_MAC_PORT_MASK, 602afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_SORT, 603afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_QW0_PE, 604afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_QW0_OFS, 605afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_QW4_PE, 606afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_QW4_OFS, 607afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W8_PE, 608afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W8_OFS, 609afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W8_SORT, 610afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W9_PE, 611afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W9_OFS, 612afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W9_SORT, 613afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W9_P, 614afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_P_MASK, 615afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_WORD_MASK, 616afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_SEED, 617afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_TNL_P, 618afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_HSH_VALID, 619afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_HSH_TYPE, 620afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_TOEPLITZ, 621afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_K, 622afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_AUTO_IPV4_MASK 623afad5ac4SOleksandr Kolomeiets }; 624afad5ac4SOleksandr Kolomeiets bool hw_mod_hsh_present(struct flow_api_backend_s *be); 625afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_alloc(struct flow_api_backend_s *be); 626afad5ac4SOleksandr Kolomeiets void hw_mod_hsh_free(struct flow_api_backend_s *be); 627afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_reset(struct flow_api_backend_s *be); 628afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 629a5a5d5bbSOleksandr Kolomeiets 630b95f1cd0SOleksandr Kolomeiets struct qsl_func_s { 631b95f1cd0SOleksandr Kolomeiets COMMON_FUNC_INFO_S; 632b95f1cd0SOleksandr Kolomeiets uint32_t nb_rcp_categories; 633b95f1cd0SOleksandr Kolomeiets uint32_t nb_qst_entries; 634b95f1cd0SOleksandr Kolomeiets union { 635b95f1cd0SOleksandr Kolomeiets struct hw_mod_qsl_v7_s v7; 636b95f1cd0SOleksandr Kolomeiets }; 637b95f1cd0SOleksandr Kolomeiets }; 6380e474ae5SOleksandr Kolomeiets enum hw_qsl_e { 6390e474ae5SOleksandr Kolomeiets /* functions */ 6400e474ae5SOleksandr Kolomeiets HW_QSL_RCP_PRESET_ALL = 0, 6410e474ae5SOleksandr Kolomeiets HW_QSL_RCP_COMPARE, 6420e474ae5SOleksandr Kolomeiets HW_QSL_RCP_FIND, 6430e474ae5SOleksandr Kolomeiets HW_QSL_QST_PRESET_ALL, 6440e474ae5SOleksandr Kolomeiets /* fields */ 6450e474ae5SOleksandr Kolomeiets HW_QSL_RCP_DISCARD = FIELD_START_INDEX, 6460e474ae5SOleksandr Kolomeiets HW_QSL_RCP_DROP, 6470e474ae5SOleksandr Kolomeiets HW_QSL_RCP_TBL_LO, 6480e474ae5SOleksandr Kolomeiets HW_QSL_RCP_TBL_HI, 6490e474ae5SOleksandr Kolomeiets HW_QSL_RCP_TBL_IDX, 6500e474ae5SOleksandr Kolomeiets HW_QSL_RCP_TBL_MSK, 6510e474ae5SOleksandr Kolomeiets HW_QSL_RCP_LR, 6520e474ae5SOleksandr Kolomeiets HW_QSL_RCP_TSA, 6530e474ae5SOleksandr Kolomeiets HW_QSL_RCP_VLI, 6540e474ae5SOleksandr Kolomeiets HW_QSL_QST_QUEUE, 6550e474ae5SOleksandr Kolomeiets HW_QSL_QST_EN, /* Alias: HW_QSL_QST_QEN */ 6560e474ae5SOleksandr Kolomeiets HW_QSL_QST_TX_PORT, 6570e474ae5SOleksandr Kolomeiets HW_QSL_QST_LRE, 6580e474ae5SOleksandr Kolomeiets HW_QSL_QST_TCI, 6590e474ae5SOleksandr Kolomeiets HW_QSL_QST_VEN, 6600e474ae5SOleksandr Kolomeiets HW_QSL_QEN_EN, 6610e474ae5SOleksandr Kolomeiets HW_QSL_UNMQ_DEST_QUEUE, 6620e474ae5SOleksandr Kolomeiets HW_QSL_UNMQ_EN, 6630e474ae5SOleksandr Kolomeiets }; 6640e474ae5SOleksandr Kolomeiets bool hw_mod_qsl_present(struct flow_api_backend_s *be); 6650e474ae5SOleksandr Kolomeiets int hw_mod_qsl_alloc(struct flow_api_backend_s *be); 6660e474ae5SOleksandr Kolomeiets void hw_mod_qsl_free(struct flow_api_backend_s *be); 6670e474ae5SOleksandr Kolomeiets int hw_mod_qsl_reset(struct flow_api_backend_s *be); 6680e474ae5SOleksandr Kolomeiets int hw_mod_qsl_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 669*98e40f83SDanylo Vodopianov int hw_mod_qsl_rcp_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index, 670*98e40f83SDanylo Vodopianov uint32_t value); 6710e474ae5SOleksandr Kolomeiets int hw_mod_qsl_qst_flush(struct flow_api_backend_s *be, int start_idx, int count); 672*98e40f83SDanylo Vodopianov int hw_mod_qsl_qst_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index, 673*98e40f83SDanylo Vodopianov uint32_t value); 6740e474ae5SOleksandr Kolomeiets int hw_mod_qsl_qen_flush(struct flow_api_backend_s *be, int start_idx, int count); 675*98e40f83SDanylo Vodopianov int hw_mod_qsl_qen_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index, 676*98e40f83SDanylo Vodopianov uint32_t value); 677*98e40f83SDanylo Vodopianov int hw_mod_qsl_qen_get(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index, 678*98e40f83SDanylo Vodopianov uint32_t *value); 6790e474ae5SOleksandr Kolomeiets int hw_mod_qsl_unmq_flush(struct flow_api_backend_s *be, int start_idx, int count); 6800e474ae5SOleksandr Kolomeiets int hw_mod_qsl_unmq_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index, 6810e474ae5SOleksandr Kolomeiets uint32_t value); 682b95f1cd0SOleksandr Kolomeiets 6838c545325SOleksandr Kolomeiets struct slc_lr_func_s { 6848c545325SOleksandr Kolomeiets COMMON_FUNC_INFO_S; 6858c545325SOleksandr Kolomeiets union { 6868c545325SOleksandr Kolomeiets struct hw_mod_slc_lr_v2_s v2; 6878c545325SOleksandr Kolomeiets }; 6888c545325SOleksandr Kolomeiets }; 6897fadd2baSOleksandr Kolomeiets enum hw_slc_lr_e { 6907fadd2baSOleksandr Kolomeiets /* functions */ 6917fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_PRESET_ALL = 0, 6927fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_COMPARE, 6937fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_FIND, 6947fadd2baSOleksandr Kolomeiets /* fields */ 6957fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_HEAD_SLC_EN = FIELD_START_INDEX, 6967fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_HEAD_DYN, 6977fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_HEAD_OFS, 6987fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_TAIL_SLC_EN, 6997fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_TAIL_DYN, 7007fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_TAIL_OFS, 7017fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_PCAP 7027fadd2baSOleksandr Kolomeiets }; 7037fadd2baSOleksandr Kolomeiets bool hw_mod_slc_lr_present(struct flow_api_backend_s *be); 7047fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_alloc(struct flow_api_backend_s *be); 7057fadd2baSOleksandr Kolomeiets void hw_mod_slc_lr_free(struct flow_api_backend_s *be); 7067fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_reset(struct flow_api_backend_s *be); 7077fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 708c4d1272bSDanylo Vodopianov int hw_mod_slc_lr_rcp_set(struct flow_api_backend_s *be, enum hw_slc_lr_e field, uint32_t index, 709c4d1272bSDanylo Vodopianov uint32_t value); 7108c545325SOleksandr Kolomeiets 7117d65ee1aSOleksandr Kolomeiets struct pdb_func_s { 7127d65ee1aSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 7137d65ee1aSOleksandr Kolomeiets uint32_t nb_pdb_rcp_categories; 7147d65ee1aSOleksandr Kolomeiets 7157d65ee1aSOleksandr Kolomeiets union { 7167d65ee1aSOleksandr Kolomeiets struct hw_mod_pdb_v9_s v9; 7177d65ee1aSOleksandr Kolomeiets }; 7187d65ee1aSOleksandr Kolomeiets }; 71987ad2151SOleksandr Kolomeiets enum hw_pdb_e { 72087ad2151SOleksandr Kolomeiets /* functions */ 72187ad2151SOleksandr Kolomeiets HW_PDB_RCP_PRESET_ALL = 0, 72287ad2151SOleksandr Kolomeiets HW_PDB_RCP_COMPARE, 72387ad2151SOleksandr Kolomeiets HW_PDB_RCP_FIND, 72487ad2151SOleksandr Kolomeiets /* fields */ 72587ad2151SOleksandr Kolomeiets HW_PDB_RCP_DESCRIPTOR = FIELD_START_INDEX, 72687ad2151SOleksandr Kolomeiets HW_PDB_RCP_DESC_LEN, 72787ad2151SOleksandr Kolomeiets HW_PDB_RCP_TX_PORT, 72887ad2151SOleksandr Kolomeiets HW_PDB_RCP_TX_IGNORE, 72987ad2151SOleksandr Kolomeiets HW_PDB_RCP_TX_NOW, 73087ad2151SOleksandr Kolomeiets HW_PDB_RCP_CRC_OVERWRITE, 73187ad2151SOleksandr Kolomeiets HW_PDB_RCP_ALIGN, 73287ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS0_DYN, 73387ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS0_REL, 73487ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS1_DYN, 73587ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS1_REL, 73687ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS2_DYN, 73787ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS2_REL, 73887ad2151SOleksandr Kolomeiets HW_PDB_RCP_IP_PROT_TNL, 73987ad2151SOleksandr Kolomeiets HW_PDB_RCP_PPC_HSH, 74087ad2151SOleksandr Kolomeiets HW_PDB_RCP_DUPLICATE_EN, 74187ad2151SOleksandr Kolomeiets HW_PDB_RCP_DUPLICATE_BIT, 74287ad2151SOleksandr Kolomeiets HW_PDB_RCP_PCAP_KEEP_FCS, 74387ad2151SOleksandr Kolomeiets HW_PDB_CONFIG_TS_FORMAT, 74487ad2151SOleksandr Kolomeiets HW_PDB_CONFIG_PORT_OFS, 74587ad2151SOleksandr Kolomeiets }; 74687ad2151SOleksandr Kolomeiets bool hw_mod_pdb_present(struct flow_api_backend_s *be); 74787ad2151SOleksandr Kolomeiets int hw_mod_pdb_alloc(struct flow_api_backend_s *be); 74887ad2151SOleksandr Kolomeiets void hw_mod_pdb_free(struct flow_api_backend_s *be); 74987ad2151SOleksandr Kolomeiets int hw_mod_pdb_reset(struct flow_api_backend_s *be); 75087ad2151SOleksandr Kolomeiets int hw_mod_pdb_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 751ef6e148bSDanylo Vodopianov int hw_mod_pdb_rcp_set(struct flow_api_backend_s *be, enum hw_pdb_e field, uint32_t index, 752ef6e148bSDanylo Vodopianov uint32_t value); 753ef6e148bSDanylo Vodopianov 75487ad2151SOleksandr Kolomeiets int hw_mod_pdb_config_flush(struct flow_api_backend_s *be); 7557d65ee1aSOleksandr Kolomeiets 7567f058028SSerhii Iliushyk struct tpe_func_s { 7577f058028SSerhii Iliushyk COMMON_FUNC_INFO_S; 7587f058028SSerhii Iliushyk uint32_t nb_rcp_categories; 7597f058028SSerhii Iliushyk uint32_t nb_ifr_categories; 7607f058028SSerhii Iliushyk uint32_t nb_cpy_writers; 7617f058028SSerhii Iliushyk uint32_t nb_rpl_depth; 7627f058028SSerhii Iliushyk uint32_t nb_rpl_ext_categories; 7637f058028SSerhii Iliushyk union { 7647f058028SSerhii Iliushyk struct hw_mod_tpe_v3_s v3; 7657f058028SSerhii Iliushyk }; 7667f058028SSerhii Iliushyk }; 7674d4e9018SOleksandr Kolomeiets enum hw_tpe_e { 7684d4e9018SOleksandr Kolomeiets /* functions */ 7694d4e9018SOleksandr Kolomeiets HW_TPE_PRESET_ALL = 0, 7704d4e9018SOleksandr Kolomeiets HW_TPE_FIND, 7714d4e9018SOleksandr Kolomeiets HW_TPE_COMPARE, 7724d4e9018SOleksandr Kolomeiets /* Control fields */ 7734d4e9018SOleksandr Kolomeiets HW_TPE_RPP_RCP_EXP = FIELD_START_INDEX, 7744d4e9018SOleksandr Kolomeiets HW_TPE_IFR_RCP_IPV4_EN, 7754d4e9018SOleksandr Kolomeiets HW_TPE_IFR_RCP_IPV4_DF_DROP, 7764d4e9018SOleksandr Kolomeiets HW_TPE_IFR_RCP_IPV6_EN, 7774d4e9018SOleksandr Kolomeiets HW_TPE_IFR_RCP_IPV6_DROP, 7784d4e9018SOleksandr Kolomeiets HW_TPE_IFR_RCP_MTU, 7794d4e9018SOleksandr Kolomeiets HW_TPE_INS_RCP_DYN, 7804d4e9018SOleksandr Kolomeiets HW_TPE_INS_RCP_OFS, 7814d4e9018SOleksandr Kolomeiets HW_TPE_INS_RCP_LEN, 7824d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_DYN, 7834d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_OFS, 7844d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_LEN, 7854d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_RPL_PTR, 7864d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_EXT_PRIO, 7874d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_ETH_TYPE_WR, 7884d4e9018SOleksandr Kolomeiets HW_TPE_RPL_EXT_RPL_PTR, 7894d4e9018SOleksandr Kolomeiets HW_TPE_RPL_EXT_META_RPL_LEN, /* SW only */ 7904d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RPL_VALUE, 7914d4e9018SOleksandr Kolomeiets HW_TPE_CPY_RCP_READER_SELECT, 7924d4e9018SOleksandr Kolomeiets HW_TPE_CPY_RCP_DYN, 7934d4e9018SOleksandr Kolomeiets HW_TPE_CPY_RCP_OFS, 7944d4e9018SOleksandr Kolomeiets HW_TPE_CPY_RCP_LEN, 7954d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_WR, 7964d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_OUTER_L4_LEN, 7974d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_POS_DYN, 7984d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_POS_OFS, 7994d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_ADD_DYN, 8004d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_ADD_OFS, 8014d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_SUB_DYN, 8024d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_WR, 8034d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_POS_DYN, 8044d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_POS_OFS, 8054d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_ADD_DYN, 8064d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_ADD_OFS, 8074d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_SUB_DYN, 8084d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_WR, 8094d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_POS_DYN, 8104d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_POS_OFS, 8114d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_ADD_DYN, 8124d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_ADD_OFS, 8134d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_SUB_DYN, 8144d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_TTL_WR, 8154d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_TTL_POS_DYN, 8164d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_TTL_POS_OFS, 8174d4e9018SOleksandr Kolomeiets HW_TPE_CSU_RCP_OUTER_L3_CMD, 8184d4e9018SOleksandr Kolomeiets HW_TPE_CSU_RCP_OUTER_L4_CMD, 8194d4e9018SOleksandr Kolomeiets HW_TPE_CSU_RCP_INNER_L3_CMD, 8204d4e9018SOleksandr Kolomeiets HW_TPE_CSU_RCP_INNER_L4_CMD, 8214d4e9018SOleksandr Kolomeiets }; 8224d4e9018SOleksandr Kolomeiets bool hw_mod_tpe_present(struct flow_api_backend_s *be); 8234d4e9018SOleksandr Kolomeiets int hw_mod_tpe_alloc(struct flow_api_backend_s *be); 8244d4e9018SOleksandr Kolomeiets void hw_mod_tpe_free(struct flow_api_backend_s *be); 8254d4e9018SOleksandr Kolomeiets int hw_mod_tpe_reset(struct flow_api_backend_s *be); 8264d4e9018SOleksandr Kolomeiets 8274d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpp_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 8284d4e9018SOleksandr Kolomeiets 8294d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpp_ifr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 8304d4e9018SOleksandr Kolomeiets 8314d4e9018SOleksandr Kolomeiets int hw_mod_tpe_ifr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 8324d4e9018SOleksandr Kolomeiets 8334d4e9018SOleksandr Kolomeiets int hw_mod_tpe_ins_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 8344d4e9018SOleksandr Kolomeiets 8354d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 8364d4e9018SOleksandr Kolomeiets 8374d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_ext_flush(struct flow_api_backend_s *be, int start_idx, int count); 8384d4e9018SOleksandr Kolomeiets 8394d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_rpl_flush(struct flow_api_backend_s *be, int start_idx, int count); 8404d4e9018SOleksandr Kolomeiets 8414d4e9018SOleksandr Kolomeiets int hw_mod_tpe_cpy_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 8424d4e9018SOleksandr Kolomeiets 8434d4e9018SOleksandr Kolomeiets int hw_mod_tpe_hfu_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 8444d4e9018SOleksandr Kolomeiets 8454d4e9018SOleksandr Kolomeiets int hw_mod_tpe_csu_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 8467f058028SSerhii Iliushyk 847e3723ca6SOleksandr Kolomeiets enum debug_mode_e { 848e3723ca6SOleksandr Kolomeiets FLOW_BACKEND_DEBUG_MODE_NONE = 0x0000, 849e3723ca6SOleksandr Kolomeiets FLOW_BACKEND_DEBUG_MODE_WRITE = 0x0001 850e3723ca6SOleksandr Kolomeiets }; 851e3723ca6SOleksandr Kolomeiets 852e3723ca6SOleksandr Kolomeiets struct flow_api_backend_ops { 853e3723ca6SOleksandr Kolomeiets int version; 854e3723ca6SOleksandr Kolomeiets int (*set_debug_mode)(void *dev, enum debug_mode_e mode); 855e3723ca6SOleksandr Kolomeiets int (*get_nb_phy_port)(void *dev); 856e3723ca6SOleksandr Kolomeiets int (*get_nb_rx_port)(void *dev); 857e3723ca6SOleksandr Kolomeiets int (*get_ltx_avail)(void *dev); 858e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_funcs)(void *dev); 859e3723ca6SOleksandr Kolomeiets int (*get_nb_categories)(void *dev); 860e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_km_if_cnt)(void *dev); 861e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_km_if_m0)(void *dev); 862e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_km_if_m1)(void *dev); 863e3723ca6SOleksandr Kolomeiets 864e3723ca6SOleksandr Kolomeiets int (*get_nb_queues)(void *dev); 865e3723ca6SOleksandr Kolomeiets int (*get_nb_km_flow_types)(void *dev); 866e3723ca6SOleksandr Kolomeiets int (*get_nb_pm_ext)(void *dev); 867e3723ca6SOleksandr Kolomeiets int (*get_nb_len)(void *dev); 868e3723ca6SOleksandr Kolomeiets int (*get_kcc_size)(void *dev); 869e3723ca6SOleksandr Kolomeiets int (*get_kcc_banks)(void *dev); 870e3723ca6SOleksandr Kolomeiets int (*get_nb_km_categories)(void *dev); 871e3723ca6SOleksandr Kolomeiets int (*get_nb_km_cam_banks)(void *dev); 872e3723ca6SOleksandr Kolomeiets int (*get_nb_km_cam_record_words)(void *dev); 873e3723ca6SOleksandr Kolomeiets int (*get_nb_km_cam_records)(void *dev); 874e3723ca6SOleksandr Kolomeiets int (*get_nb_km_tcam_banks)(void *dev); 875e3723ca6SOleksandr Kolomeiets int (*get_nb_km_tcam_bank_width)(void *dev); 876e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_categories)(void *dev); 877e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_size_mb)(void *dev); 878e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_entry_size)(void *dev); 879e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_variant)(void *dev); 880e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_prios)(void *dev); 881e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_pst_profiles)(void *dev); 882e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_scrub_profiles)(void *dev); 883e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_load_aps_max)(void *dev); 884e3723ca6SOleksandr Kolomeiets int (*get_nb_qsl_categories)(void *dev); 885e3723ca6SOleksandr Kolomeiets int (*get_nb_qsl_qst_entries)(void *dev); 886e3723ca6SOleksandr Kolomeiets int (*get_nb_pdb_categories)(void *dev); 887e3723ca6SOleksandr Kolomeiets int (*get_nb_roa_categories)(void *dev); 888e3723ca6SOleksandr Kolomeiets int (*get_nb_tpe_categories)(void *dev); 889e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_cpy_writers)(void *dev); 890e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_cpy_mask_mem)(void *dev); 891e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_rpl_depth)(void *dev); 892e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_rpl_ext_categories)(void *dev); 893e3723ca6SOleksandr Kolomeiets int (*get_nb_tpe_ifr_categories)(void *dev); 894e3723ca6SOleksandr Kolomeiets int (*get_nb_rpp_per_ps)(void *dev); 895e3723ca6SOleksandr Kolomeiets int (*get_nb_hsh_categories)(void *dev); 896e3723ca6SOleksandr Kolomeiets int (*get_nb_hsh_toeplitz)(void *dev); 897e3723ca6SOleksandr Kolomeiets 898e3723ca6SOleksandr Kolomeiets int (*alloc_rx_queue)(void *dev, int queue_id); 899e3723ca6SOleksandr Kolomeiets int (*free_rx_queue)(void *dev, int hw_queue); 900636b2cfeSOleksandr Kolomeiets 901636b2cfeSOleksandr Kolomeiets /* CAT */ 902636b2cfeSOleksandr Kolomeiets bool (*get_cat_present)(void *dev); 903636b2cfeSOleksandr Kolomeiets uint32_t (*get_cat_version)(void *dev); 904636b2cfeSOleksandr Kolomeiets int (*cat_cfn_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt); 905636b2cfeSOleksandr Kolomeiets int (*cat_kce_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index, 906636b2cfeSOleksandr Kolomeiets int cnt); 907636b2cfeSOleksandr Kolomeiets int (*cat_kcs_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int cat_func, 908636b2cfeSOleksandr Kolomeiets int cnt); 909636b2cfeSOleksandr Kolomeiets int (*cat_fte_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index, 910636b2cfeSOleksandr Kolomeiets int cnt); 911636b2cfeSOleksandr Kolomeiets int (*cat_cte_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt); 912636b2cfeSOleksandr Kolomeiets int (*cat_cts_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 913636b2cfeSOleksandr Kolomeiets int (*cat_cot_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt); 914636b2cfeSOleksandr Kolomeiets int (*cat_cct_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 915636b2cfeSOleksandr Kolomeiets int (*cat_exo_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 916636b2cfeSOleksandr Kolomeiets int (*cat_rck_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 917636b2cfeSOleksandr Kolomeiets int (*cat_len_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 918636b2cfeSOleksandr Kolomeiets int (*cat_kcc_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 9193005c75dSOleksandr Kolomeiets 9203005c75dSOleksandr Kolomeiets /* KM */ 9213005c75dSOleksandr Kolomeiets bool (*get_km_present)(void *dev); 9223005c75dSOleksandr Kolomeiets uint32_t (*get_km_version)(void *dev); 9233005c75dSOleksandr Kolomeiets int (*km_rcp_flush)(void *dev, const struct km_func_s *km, int category, int cnt); 9243005c75dSOleksandr Kolomeiets int (*km_cam_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt); 9253005c75dSOleksandr Kolomeiets int (*km_tcam_flush)(void *dev, const struct km_func_s *km, int bank, int byte, int value, 9263005c75dSOleksandr Kolomeiets int cnt); 9273005c75dSOleksandr Kolomeiets int (*km_tci_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt); 9283005c75dSOleksandr Kolomeiets int (*km_tcq_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt); 929cec43fabSOleksandr Kolomeiets 930cec43fabSOleksandr Kolomeiets /* FLM */ 931cec43fabSOleksandr Kolomeiets bool (*get_flm_present)(void *dev); 932cec43fabSOleksandr Kolomeiets uint32_t (*get_flm_version)(void *dev); 933cec43fabSOleksandr Kolomeiets int (*flm_control_flush)(void *dev, const struct flm_func_s *flm); 934cec43fabSOleksandr Kolomeiets int (*flm_status_flush)(void *dev, const struct flm_func_s *flm); 935cec43fabSOleksandr Kolomeiets int (*flm_status_update)(void *dev, const struct flm_func_s *flm); 936cec43fabSOleksandr Kolomeiets int (*flm_scan_flush)(void *dev, const struct flm_func_s *flm); 937cec43fabSOleksandr Kolomeiets int (*flm_load_bin_flush)(void *dev, const struct flm_func_s *flm); 938cec43fabSOleksandr Kolomeiets int (*flm_prio_flush)(void *dev, const struct flm_func_s *flm); 939cec43fabSOleksandr Kolomeiets int (*flm_pst_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt); 940cec43fabSOleksandr Kolomeiets int (*flm_rcp_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt); 941cec43fabSOleksandr Kolomeiets int (*flm_scrub_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt); 942cec43fabSOleksandr Kolomeiets int (*flm_buf_ctrl_update)(void *dev, const struct flm_func_s *flm); 943cec43fabSOleksandr Kolomeiets int (*flm_stat_update)(void *dev, const struct flm_func_s *flm); 944cec43fabSOleksandr Kolomeiets int (*flm_lrn_data_flush)(void *be_dev, const struct flm_func_s *flm, 945cec43fabSOleksandr Kolomeiets const uint32_t *lrn_data, uint32_t records, 946cec43fabSOleksandr Kolomeiets uint32_t *handled_records, uint32_t words_per_record, 947cec43fabSOleksandr Kolomeiets uint32_t *inf_word_cnt, uint32_t *sta_word_cnt); 948cec43fabSOleksandr Kolomeiets int (*flm_inf_sta_data_update)(void *be_dev, const struct flm_func_s *flm, 949cec43fabSOleksandr Kolomeiets uint32_t *inf_data, uint32_t inf_size, 950cec43fabSOleksandr Kolomeiets uint32_t *inf_word_cnt, uint32_t *sta_data, 951cec43fabSOleksandr Kolomeiets uint32_t sta_size, uint32_t *sta_word_cnt); 952a5a5d5bbSOleksandr Kolomeiets 953a5a5d5bbSOleksandr Kolomeiets /* HSH */ 954a5a5d5bbSOleksandr Kolomeiets bool (*get_hsh_present)(void *dev); 955a5a5d5bbSOleksandr Kolomeiets uint32_t (*get_hsh_version)(void *dev); 956a5a5d5bbSOleksandr Kolomeiets int (*hsh_rcp_flush)(void *dev, const struct hsh_func_s *hsh, int category, int cnt); 957b95f1cd0SOleksandr Kolomeiets 958b95f1cd0SOleksandr Kolomeiets /* QSL */ 959b95f1cd0SOleksandr Kolomeiets bool (*get_qsl_present)(void *dev); 960b95f1cd0SOleksandr Kolomeiets uint32_t (*get_qsl_version)(void *dev); 961b95f1cd0SOleksandr Kolomeiets int (*qsl_rcp_flush)(void *dev, const struct qsl_func_s *qsl, int category, int cnt); 962b95f1cd0SOleksandr Kolomeiets int (*qsl_qst_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt); 963b95f1cd0SOleksandr Kolomeiets int (*qsl_qen_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt); 964b95f1cd0SOleksandr Kolomeiets int (*qsl_unmq_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt); 9658c545325SOleksandr Kolomeiets 9668c545325SOleksandr Kolomeiets /* SLC LR */ 9678c545325SOleksandr Kolomeiets bool (*get_slc_lr_present)(void *dev); 9688c545325SOleksandr Kolomeiets uint32_t (*get_slc_lr_version)(void *dev); 9698c545325SOleksandr Kolomeiets int (*slc_lr_rcp_flush)(void *dev, const struct slc_lr_func_s *slc_lr, int category, 9708c545325SOleksandr Kolomeiets int cnt); 9717d65ee1aSOleksandr Kolomeiets 9727d65ee1aSOleksandr Kolomeiets /* PDB */ 9737d65ee1aSOleksandr Kolomeiets bool (*get_pdb_present)(void *dev); 9747d65ee1aSOleksandr Kolomeiets uint32_t (*get_pdb_version)(void *dev); 9757d65ee1aSOleksandr Kolomeiets int (*pdb_rcp_flush)(void *dev, const struct pdb_func_s *pdb, int category, int cnt); 9767d65ee1aSOleksandr Kolomeiets int (*pdb_config_flush)(void *dev, const struct pdb_func_s *pdb); 9777f058028SSerhii Iliushyk 9787f058028SSerhii Iliushyk /* TPE */ 9797f058028SSerhii Iliushyk bool (*get_tpe_present)(void *dev); 9807f058028SSerhii Iliushyk uint32_t (*get_tpe_version)(void *dev); 9817f058028SSerhii Iliushyk int (*tpe_rpp_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 9827f058028SSerhii Iliushyk int (*tpe_rpp_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 9837f058028SSerhii Iliushyk int (*tpe_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 9847f058028SSerhii Iliushyk int (*tpe_ins_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 9857f058028SSerhii Iliushyk int (*tpe_rpl_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 9867f058028SSerhii Iliushyk int (*tpe_rpl_ext_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 9877f058028SSerhii Iliushyk int (*tpe_rpl_rpl_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 9887f058028SSerhii Iliushyk int (*tpe_cpy_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 9897f058028SSerhii Iliushyk int (*tpe_hfu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 9907f058028SSerhii Iliushyk int (*tpe_csu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 991e3723ca6SOleksandr Kolomeiets }; 992e3723ca6SOleksandr Kolomeiets 9938df4a5f8SOleksandr Kolomeiets struct flow_api_backend_s { 9948df4a5f8SOleksandr Kolomeiets void *be_dev; 9951d3f62a0SOleksandr Kolomeiets const struct flow_api_backend_ops *iface; 9967917b0d3SOleksandr Kolomeiets 9976e8b7f11SOleksandr Kolomeiets /* flow filter FPGA modules */ 9986e8b7f11SOleksandr Kolomeiets struct cat_func_s cat; 999fbe2726fSOleksandr Kolomeiets struct km_func_s km; 1000059dfc39SOleksandr Kolomeiets struct flm_func_s flm; 1001afad5ac4SOleksandr Kolomeiets struct hsh_func_s hsh; 10020e474ae5SOleksandr Kolomeiets struct qsl_func_s qsl; 10037fadd2baSOleksandr Kolomeiets struct slc_lr_func_s slc_lr; 100487ad2151SOleksandr Kolomeiets struct pdb_func_s pdb; 10054d4e9018SOleksandr Kolomeiets struct tpe_func_s tpe; 10066e8b7f11SOleksandr Kolomeiets 10077917b0d3SOleksandr Kolomeiets /* NIC attributes */ 10087917b0d3SOleksandr Kolomeiets unsigned int num_phy_ports; 10097917b0d3SOleksandr Kolomeiets unsigned int num_rx_ports; 10107917b0d3SOleksandr Kolomeiets 10117917b0d3SOleksandr Kolomeiets /* flow filter resource capacities */ 10127917b0d3SOleksandr Kolomeiets unsigned int max_categories; 10137917b0d3SOleksandr Kolomeiets unsigned int max_queues; 10148df4a5f8SOleksandr Kolomeiets }; 10158df4a5f8SOleksandr Kolomeiets 10167917b0d3SOleksandr Kolomeiets int flow_api_backend_init(struct flow_api_backend_s *dev, const struct flow_api_backend_ops *iface, 10177917b0d3SOleksandr Kolomeiets void *be_dev); 10187917b0d3SOleksandr Kolomeiets int flow_api_backend_done(struct flow_api_backend_s *dev); 10197917b0d3SOleksandr Kolomeiets 10208df4a5f8SOleksandr Kolomeiets #endif /* _HW_MOD_BACKEND_H_ */ 1021