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 /* Sideband info bit indicator */ 1369bd46cf2SDanylo Vodopianov #define SWX_INFO (1 << 6) 1376fec9a9aSSerhii Iliushyk 1386e8b7f11SOleksandr Kolomeiets enum km_flm_if_select_e { 1396e8b7f11SOleksandr Kolomeiets KM_FLM_IF_FIRST = 0, 1406e8b7f11SOleksandr Kolomeiets KM_FLM_IF_SECOND = 1 1416e8b7f11SOleksandr Kolomeiets }; 1426e8b7f11SOleksandr Kolomeiets 1436e8b7f11SOleksandr Kolomeiets #define FIELD_START_INDEX 100 1446e8b7f11SOleksandr Kolomeiets 145636b2cfeSOleksandr Kolomeiets #define COMMON_FUNC_INFO_S \ 146636b2cfeSOleksandr Kolomeiets int ver; \ 147636b2cfeSOleksandr Kolomeiets void *base; \ 148636b2cfeSOleksandr Kolomeiets unsigned int alloced_size; \ 149636b2cfeSOleksandr Kolomeiets int debug 150636b2cfeSOleksandr Kolomeiets 1519bd46cf2SDanylo Vodopianov enum frame_offs_e { 1527fa0bf29SDanylo Vodopianov DYN_SOF = 0, 1539bd46cf2SDanylo Vodopianov DYN_L2 = 1, 1549bd46cf2SDanylo Vodopianov DYN_FIRST_VLAN = 2, 1557fa0bf29SDanylo Vodopianov DYN_MPLS = 3, 1569bd46cf2SDanylo Vodopianov DYN_L3 = 4, 1577fa0bf29SDanylo Vodopianov DYN_ID_IPV4_6 = 5, 1587fa0bf29SDanylo Vodopianov DYN_FINAL_IP_DST = 6, 1599bd46cf2SDanylo Vodopianov DYN_L4 = 7, 1609bd46cf2SDanylo Vodopianov DYN_L4_PAYLOAD = 8, 1617fa0bf29SDanylo Vodopianov DYN_TUN_PAYLOAD = 9, 1627fa0bf29SDanylo Vodopianov DYN_TUN_L2 = 10, 1637fa0bf29SDanylo Vodopianov DYN_TUN_VLAN = 11, 1647fa0bf29SDanylo Vodopianov DYN_TUN_MPLS = 12, 1659bd46cf2SDanylo Vodopianov DYN_TUN_L3 = 13, 1667fa0bf29SDanylo Vodopianov DYN_TUN_ID_IPV4_6 = 14, 1677fa0bf29SDanylo Vodopianov DYN_TUN_FINAL_IP_DST = 15, 1689bd46cf2SDanylo Vodopianov DYN_TUN_L4 = 16, 1699bd46cf2SDanylo Vodopianov DYN_TUN_L4_PAYLOAD = 17, 1707fa0bf29SDanylo Vodopianov DYN_EOF = 18, 1717fa0bf29SDanylo Vodopianov DYN_L3_PAYLOAD_END = 19, 1727fa0bf29SDanylo Vodopianov DYN_TUN_L3_PAYLOAD_END = 20, 1739bd46cf2SDanylo Vodopianov SB_VNI = SWX_INFO | 1, 1749bd46cf2SDanylo Vodopianov SB_MAC_PORT = SWX_INFO | 2, 1759bd46cf2SDanylo Vodopianov SB_KCC_ID = SWX_INFO | 3 1769bd46cf2SDanylo Vodopianov }; 1779bd46cf2SDanylo Vodopianov 1789bd46cf2SDanylo Vodopianov enum { 1799bd46cf2SDanylo Vodopianov QW0_SEL_EXCLUDE = 0, 1809bd46cf2SDanylo Vodopianov QW0_SEL_FIRST32 = 1, 1819bd46cf2SDanylo Vodopianov QW0_SEL_FIRST64 = 3, 1829bd46cf2SDanylo Vodopianov QW0_SEL_ALL128 = 4, 1839bd46cf2SDanylo Vodopianov }; 1849bd46cf2SDanylo Vodopianov 1859bd46cf2SDanylo Vodopianov enum { 1869bd46cf2SDanylo Vodopianov QW4_SEL_EXCLUDE = 0, 1879bd46cf2SDanylo Vodopianov QW4_SEL_FIRST32 = 1, 1889bd46cf2SDanylo Vodopianov QW4_SEL_FIRST64 = 2, 1899bd46cf2SDanylo Vodopianov QW4_SEL_ALL128 = 3, 1909bd46cf2SDanylo Vodopianov }; 1919bd46cf2SDanylo Vodopianov 1929bd46cf2SDanylo Vodopianov enum { 1939bd46cf2SDanylo Vodopianov DW8_SEL_EXCLUDE = 0, 1949bd46cf2SDanylo Vodopianov DW8_SEL_FIRST32 = 3, 1959bd46cf2SDanylo Vodopianov }; 1969bd46cf2SDanylo Vodopianov 1979bd46cf2SDanylo Vodopianov enum { 1989bd46cf2SDanylo Vodopianov DW10_SEL_EXCLUDE = 0, 1999bd46cf2SDanylo Vodopianov DW10_SEL_FIRST32 = 2, 2009bd46cf2SDanylo Vodopianov }; 2019bd46cf2SDanylo Vodopianov 2029bd46cf2SDanylo Vodopianov enum { 2039bd46cf2SDanylo Vodopianov SWX_SEL_EXCLUDE = 0, 2049bd46cf2SDanylo Vodopianov SWX_SEL_ALL32 = 1, 2059bd46cf2SDanylo Vodopianov }; 2069bd46cf2SDanylo Vodopianov 2076fec9a9aSSerhii Iliushyk enum { 2086fec9a9aSSerhii Iliushyk PROT_OTHER = 0, 2096fec9a9aSSerhii Iliushyk PROT_L2_ETH2 = 1, 2106fec9a9aSSerhii Iliushyk }; 2116fec9a9aSSerhii Iliushyk 2126fec9a9aSSerhii Iliushyk enum { 2136fec9a9aSSerhii Iliushyk PROT_L3_IPV4 = 1, 214b199509aSDanylo Vodopianov PROT_L3_IPV6 = 2 2156fec9a9aSSerhii Iliushyk }; 2166fec9a9aSSerhii Iliushyk 2176fec9a9aSSerhii Iliushyk enum { 218a8fbe919SDanylo Vodopianov PROT_L4_TCP = 1, 219e872a0c9SDanylo Vodopianov PROT_L4_UDP = 2, 220af7ae7aaSDanylo Vodopianov PROT_L4_SCTP = 3, 2216fec9a9aSSerhii Iliushyk PROT_L4_ICMP = 4 2226fec9a9aSSerhii Iliushyk }; 2236fec9a9aSSerhii Iliushyk 2246fec9a9aSSerhii Iliushyk enum { 225c6821abfSDanylo Vodopianov PROT_TUN_GTPV1U = 6, 226c6821abfSDanylo Vodopianov }; 227c6821abfSDanylo Vodopianov 228c6821abfSDanylo Vodopianov enum { 2296fec9a9aSSerhii Iliushyk PROT_TUN_L3_OTHER = 0, 2306fec9a9aSSerhii Iliushyk PROT_TUN_L3_IPV4 = 1, 231b199509aSDanylo Vodopianov PROT_TUN_L3_IPV6 = 2 2326fec9a9aSSerhii Iliushyk }; 2336fec9a9aSSerhii Iliushyk 2346fec9a9aSSerhii Iliushyk enum { 2356fec9a9aSSerhii Iliushyk PROT_TUN_L4_OTHER = 0, 236a8fbe919SDanylo Vodopianov PROT_TUN_L4_TCP = 1, 237e872a0c9SDanylo Vodopianov PROT_TUN_L4_UDP = 2, 238af7ae7aaSDanylo Vodopianov PROT_TUN_L4_SCTP = 3, 2396fec9a9aSSerhii Iliushyk PROT_TUN_L4_ICMP = 4 2406fec9a9aSSerhii Iliushyk }; 2416fec9a9aSSerhii Iliushyk 2426fec9a9aSSerhii Iliushyk 2436fec9a9aSSerhii Iliushyk enum { 2447fa0bf29SDanylo Vodopianov HASH_HASH_NONE = 0, 2457fa0bf29SDanylo Vodopianov HASH_5TUPLE = 8, 2467fa0bf29SDanylo Vodopianov }; 2477fa0bf29SDanylo Vodopianov 2487fa0bf29SDanylo Vodopianov enum { 2496fec9a9aSSerhii Iliushyk CPY_SELECT_DSCP_IPV4 = 0, 2506fec9a9aSSerhii Iliushyk CPY_SELECT_DSCP_IPV6 = 1, 2516fec9a9aSSerhii Iliushyk CPY_SELECT_RQI_QFI = 2, 2526fec9a9aSSerhii Iliushyk CPY_SELECT_IPV4 = 3, 2536fec9a9aSSerhii Iliushyk CPY_SELECT_PORT = 4, 2546fec9a9aSSerhii Iliushyk CPY_SELECT_TEID = 5, 2556fec9a9aSSerhii Iliushyk }; 2566fec9a9aSSerhii Iliushyk 2576e8b7f11SOleksandr Kolomeiets struct common_func_s { 2586e8b7f11SOleksandr Kolomeiets COMMON_FUNC_INFO_S; 2596e8b7f11SOleksandr Kolomeiets }; 2606e8b7f11SOleksandr Kolomeiets 261636b2cfeSOleksandr Kolomeiets struct cat_func_s { 262636b2cfeSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 263636b2cfeSOleksandr Kolomeiets uint32_t nb_cat_funcs; 264636b2cfeSOleksandr Kolomeiets uint32_t nb_flow_types; 265636b2cfeSOleksandr Kolomeiets uint32_t nb_pm_ext; 266636b2cfeSOleksandr Kolomeiets uint32_t nb_len; 267636b2cfeSOleksandr Kolomeiets uint32_t kcc_size; 268636b2cfeSOleksandr Kolomeiets uint32_t cts_num; 269636b2cfeSOleksandr Kolomeiets uint32_t kcc_banks; 270636b2cfeSOleksandr Kolomeiets uint32_t kcc_id_bit_size; 271636b2cfeSOleksandr Kolomeiets uint32_t kcc_records; 272636b2cfeSOleksandr Kolomeiets uint32_t km_if_count; 273636b2cfeSOleksandr Kolomeiets int32_t km_if_m0; 274636b2cfeSOleksandr Kolomeiets int32_t km_if_m1; 275636b2cfeSOleksandr Kolomeiets 276636b2cfeSOleksandr Kolomeiets union { 277636b2cfeSOleksandr Kolomeiets struct hw_mod_cat_v18_s v18; 278636b2cfeSOleksandr Kolomeiets struct hw_mod_cat_v21_s v21; 279636b2cfeSOleksandr Kolomeiets }; 280636b2cfeSOleksandr Kolomeiets }; 2816e8b7f11SOleksandr Kolomeiets enum hw_cat_e { 2826e8b7f11SOleksandr Kolomeiets /* 2836e8b7f11SOleksandr Kolomeiets * functions initial CAT v18 2846e8b7f11SOleksandr Kolomeiets */ 2856e8b7f11SOleksandr Kolomeiets /* 00 */ HW_CAT_CFN_SET_ALL_DEFAULTS = 0, 2866e8b7f11SOleksandr Kolomeiets /* 01 */ HW_CAT_CFN_PRESET_ALL, 2876e8b7f11SOleksandr Kolomeiets /* 02 */ HW_CAT_CFN_COMPARE, 2886e8b7f11SOleksandr Kolomeiets /* 03 */ HW_CAT_CFN_FIND, 2896e8b7f11SOleksandr Kolomeiets /* 04 */ HW_CAT_CFN_COPY_FROM, 2906e8b7f11SOleksandr Kolomeiets /* 05 */ HW_CAT_COT_PRESET_ALL, 2916e8b7f11SOleksandr Kolomeiets /* 06 */ HW_CAT_COT_COMPARE, 2926e8b7f11SOleksandr Kolomeiets /* 07 */ HW_CAT_COT_FIND, 2936e8b7f11SOleksandr Kolomeiets /* 08 */ HW_CAT_COT_COPY_FROM, 2946e8b7f11SOleksandr Kolomeiets /* fields */ 2956e8b7f11SOleksandr Kolomeiets /* 00 */ HW_CAT_CFN_ENABLE = FIELD_START_INDEX, 2966e8b7f11SOleksandr Kolomeiets /* 01 */ HW_CAT_CFN_INV, 2976e8b7f11SOleksandr Kolomeiets /* 02 */ HW_CAT_CFN_PTC_INV, 2986e8b7f11SOleksandr Kolomeiets /* 03 */ HW_CAT_CFN_PTC_ISL, 2996e8b7f11SOleksandr Kolomeiets /* 04 */ HW_CAT_CFN_PTC_CFP, 3006e8b7f11SOleksandr Kolomeiets /* 05 */ HW_CAT_CFN_PTC_MAC, 3016e8b7f11SOleksandr Kolomeiets /* 06 */ HW_CAT_CFN_PTC_L2, 3026e8b7f11SOleksandr Kolomeiets /* 07 */ HW_CAT_CFN_PTC_VNTAG, 3036e8b7f11SOleksandr Kolomeiets /* 08 */ HW_CAT_CFN_PTC_VLAN, 3046e8b7f11SOleksandr Kolomeiets /* 09 */ HW_CAT_CFN_PTC_MPLS, 3056e8b7f11SOleksandr Kolomeiets /* 10 */ HW_CAT_CFN_PTC_L3, 3066e8b7f11SOleksandr Kolomeiets /* 11 */ HW_CAT_CFN_PTC_FRAG, 3076e8b7f11SOleksandr Kolomeiets /* 12 */ HW_CAT_CFN_PTC_IP_PROT, 3086e8b7f11SOleksandr Kolomeiets /* 13 */ HW_CAT_CFN_PTC_L4, 3096e8b7f11SOleksandr Kolomeiets /* 14 */ HW_CAT_CFN_PTC_TUNNEL, 3106e8b7f11SOleksandr Kolomeiets /* 15 */ HW_CAT_CFN_PTC_TNL_L2, 3116e8b7f11SOleksandr Kolomeiets /* 16 */ HW_CAT_CFN_PTC_TNL_VLAN, 3126e8b7f11SOleksandr Kolomeiets /* 17 */ HW_CAT_CFN_PTC_TNL_MPLS, 3136e8b7f11SOleksandr Kolomeiets /* 18 */ HW_CAT_CFN_PTC_TNL_L3, 3146e8b7f11SOleksandr Kolomeiets /* 19 */ HW_CAT_CFN_PTC_TNL_FRAG, 3156e8b7f11SOleksandr Kolomeiets /* 20 */ HW_CAT_CFN_PTC_TNL_IP_PROT, 3166e8b7f11SOleksandr Kolomeiets /* 21 */ HW_CAT_CFN_PTC_TNL_L4, 3176e8b7f11SOleksandr Kolomeiets /* 22 */ HW_CAT_CFN_ERR_INV, 3186e8b7f11SOleksandr Kolomeiets /* 23 */ HW_CAT_CFN_ERR_CV, 3196e8b7f11SOleksandr Kolomeiets /* 24 */ HW_CAT_CFN_ERR_FCS, 3206e8b7f11SOleksandr Kolomeiets /* 25 */ HW_CAT_CFN_ERR_TRUNC, 3216e8b7f11SOleksandr Kolomeiets /* 26 */ HW_CAT_CFN_ERR_L3_CS, 3226e8b7f11SOleksandr Kolomeiets /* 27 */ HW_CAT_CFN_ERR_L4_CS, 3236e8b7f11SOleksandr Kolomeiets /* 28 */ HW_CAT_CFN_MAC_PORT, 3246e8b7f11SOleksandr Kolomeiets /* 29 */ HW_CAT_CFN_PM_CMP, 3256e8b7f11SOleksandr Kolomeiets /* 30 */ HW_CAT_CFN_PM_DCT, 3266e8b7f11SOleksandr Kolomeiets /* 31 */ HW_CAT_CFN_PM_EXT_INV, 3276e8b7f11SOleksandr Kolomeiets /* 32 */ HW_CAT_CFN_PM_CMB, 3286e8b7f11SOleksandr Kolomeiets /* 33 */ HW_CAT_CFN_PM_AND_INV, 3296e8b7f11SOleksandr Kolomeiets /* 34 */ HW_CAT_CFN_PM_OR_INV, 3306e8b7f11SOleksandr Kolomeiets /* 35 */ HW_CAT_CFN_PM_INV, 3316e8b7f11SOleksandr Kolomeiets /* 36 */ HW_CAT_CFN_LC, 3326e8b7f11SOleksandr Kolomeiets /* 37 */ HW_CAT_CFN_LC_INV, 3336e8b7f11SOleksandr Kolomeiets /* 38 */ HW_CAT_CFN_KM0_OR, 3346e8b7f11SOleksandr Kolomeiets /* 39 */ HW_CAT_CFN_KM1_OR, 3356e8b7f11SOleksandr Kolomeiets /* 40 */ HW_CAT_KCE_ENABLE_BM, 3366e8b7f11SOleksandr Kolomeiets /* 41 */ HW_CAT_KCS_CATEGORY, 3376e8b7f11SOleksandr Kolomeiets /* 42 */ HW_CAT_FTE_ENABLE_BM, 3386e8b7f11SOleksandr Kolomeiets /* 43 */ HW_CAT_CTE_ENABLE_BM, 3396e8b7f11SOleksandr Kolomeiets /* 44 */ HW_CAT_CTS_CAT_A, 3406e8b7f11SOleksandr Kolomeiets /* 45 */ HW_CAT_CTS_CAT_B, 3416e8b7f11SOleksandr Kolomeiets /* 46 */ HW_CAT_COT_COLOR, 3426e8b7f11SOleksandr Kolomeiets /* 47 */ HW_CAT_COT_KM, 3436e8b7f11SOleksandr Kolomeiets /* 48 */ HW_CAT_CCT_COLOR, 3446e8b7f11SOleksandr Kolomeiets /* 49 */ HW_CAT_CCT_KM, 3456e8b7f11SOleksandr Kolomeiets /* 50 */ HW_CAT_KCC_KEY, 3466e8b7f11SOleksandr Kolomeiets /* 51 */ HW_CAT_KCC_CATEGORY, 3476e8b7f11SOleksandr Kolomeiets /* 52 */ HW_CAT_KCC_ID, 3486e8b7f11SOleksandr Kolomeiets /* 53 */ HW_CAT_EXO_DYN, 3496e8b7f11SOleksandr Kolomeiets /* 54 */ HW_CAT_EXO_OFS, 3506e8b7f11SOleksandr Kolomeiets /* 55 */ HW_CAT_RCK_DATA, 3516e8b7f11SOleksandr Kolomeiets /* 56 */ HW_CAT_LEN_LOWER, 3526e8b7f11SOleksandr Kolomeiets /* 57 */ HW_CAT_LEN_UPPER, 3536e8b7f11SOleksandr Kolomeiets /* 58 */ HW_CAT_LEN_DYN1, 3546e8b7f11SOleksandr Kolomeiets /* 59 */ HW_CAT_LEN_DYN2, 3556e8b7f11SOleksandr Kolomeiets /* 60 */ HW_CAT_LEN_INV, 3566e8b7f11SOleksandr Kolomeiets /* 61 */ HW_CAT_CFN_ERR_TNL_L3_CS, 3576e8b7f11SOleksandr Kolomeiets /* 62 */ HW_CAT_CFN_ERR_TNL_L4_CS, 3586e8b7f11SOleksandr Kolomeiets /* 63 */ HW_CAT_CFN_ERR_TTL_EXP, 3596e8b7f11SOleksandr Kolomeiets /* 64 */ HW_CAT_CFN_ERR_TNL_TTL_EXP, 3606e8b7f11SOleksandr Kolomeiets }; 3616e8b7f11SOleksandr Kolomeiets 3626e8b7f11SOleksandr Kolomeiets bool hw_mod_cat_present(struct flow_api_backend_s *be); 3636e8b7f11SOleksandr Kolomeiets int hw_mod_cat_alloc(struct flow_api_backend_s *be); 3646e8b7f11SOleksandr Kolomeiets void hw_mod_cat_free(struct flow_api_backend_s *be); 3656e8b7f11SOleksandr Kolomeiets int hw_mod_cat_reset(struct flow_api_backend_s *be); 3666e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cfn_flush(struct flow_api_backend_s *be, int start_idx, int count); 3676e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cfn_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index, int word_off, 3686e8b7f11SOleksandr Kolomeiets uint32_t value); 369833962ebSDanylo Vodopianov /* KCE/KCS/FTE KM */ 370deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_km_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num, 371deda5e0fSDanylo Vodopianov int start_idx, int count); 372deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_km_set(struct flow_api_backend_s *be, enum hw_cat_e field, 373deda5e0fSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t value); 374deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_km_get(struct flow_api_backend_s *be, enum hw_cat_e field, 375deda5e0fSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t *value); 376deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_km_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num, 377deda5e0fSDanylo Vodopianov int start_idx, int count); 378deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_km_set(struct flow_api_backend_s *be, enum hw_cat_e field, 379deda5e0fSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t value); 380deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_km_get(struct flow_api_backend_s *be, enum hw_cat_e field, 381deda5e0fSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t *value); 382833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num, 383833962ebSDanylo Vodopianov int start_idx, int count); 384833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_set(struct flow_api_backend_s *be, enum hw_cat_e field, 385833962ebSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t value); 386833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_get(struct flow_api_backend_s *be, enum hw_cat_e field, 387833962ebSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t *value); 388833962ebSDanylo Vodopianov /* KCE/KCS/FTE FLM */ 389deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_flm_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num, 390deda5e0fSDanylo Vodopianov int start_idx, int count); 391deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_flm_set(struct flow_api_backend_s *be, enum hw_cat_e field, 392deda5e0fSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t value); 393deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_flm_get(struct flow_api_backend_s *be, enum hw_cat_e field, 394deda5e0fSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t *value); 395deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_flm_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num, 396deda5e0fSDanylo Vodopianov int start_idx, int count); 397deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_flm_set(struct flow_api_backend_s *be, enum hw_cat_e field, 398deda5e0fSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t value); 399deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_flm_get(struct flow_api_backend_s *be, enum hw_cat_e field, 400deda5e0fSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t *value); 401833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num, 402833962ebSDanylo Vodopianov int start_idx, int count); 403833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_set(struct flow_api_backend_s *be, enum hw_cat_e field, 404833962ebSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t value); 405833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_get(struct flow_api_backend_s *be, enum hw_cat_e field, 406833962ebSDanylo Vodopianov enum km_flm_if_select_e if_num, int index, uint32_t *value); 4076e8b7f11SOleksandr Kolomeiets 4086e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cte_flush(struct flow_api_backend_s *be, int start_idx, int count); 409833962ebSDanylo Vodopianov int hw_mod_cat_cte_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index, 410833962ebSDanylo Vodopianov uint32_t value); 411deda5e0fSDanylo Vodopianov int hw_mod_cat_cte_get(struct flow_api_backend_s *be, enum hw_cat_e field, int index, 412deda5e0fSDanylo Vodopianov uint32_t *value); 413833962ebSDanylo Vodopianov 4146e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cts_flush(struct flow_api_backend_s *be, int start_idx, int count); 415833962ebSDanylo Vodopianov int hw_mod_cat_cts_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index, 416833962ebSDanylo Vodopianov uint32_t value); 417deda5e0fSDanylo Vodopianov int hw_mod_cat_cts_get(struct flow_api_backend_s *be, enum hw_cat_e field, int index, 418deda5e0fSDanylo Vodopianov uint32_t *value); 419833962ebSDanylo Vodopianov 4206e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cot_flush(struct flow_api_backend_s *be, int start_idx, int count); 421833962ebSDanylo Vodopianov int hw_mod_cat_cot_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index, 422833962ebSDanylo Vodopianov uint32_t value); 423833962ebSDanylo Vodopianov 4246e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cct_flush(struct flow_api_backend_s *be, int start_idx, int count); 425833962ebSDanylo Vodopianov 4266e8b7f11SOleksandr Kolomeiets int hw_mod_cat_kcc_flush(struct flow_api_backend_s *be, int start_idx, int count); 4276e8b7f11SOleksandr Kolomeiets 4286e8b7f11SOleksandr Kolomeiets int hw_mod_cat_exo_flush(struct flow_api_backend_s *be, int start_idx, int count); 4296e8b7f11SOleksandr Kolomeiets int hw_mod_cat_rck_flush(struct flow_api_backend_s *be, int start_idx, int count); 4306e8b7f11SOleksandr Kolomeiets int hw_mod_cat_len_flush(struct flow_api_backend_s *be, int start_idx, int count); 431636b2cfeSOleksandr Kolomeiets 4323005c75dSOleksandr Kolomeiets struct km_func_s { 4333005c75dSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 4343005c75dSOleksandr Kolomeiets uint32_t nb_categories; 4353005c75dSOleksandr Kolomeiets uint32_t nb_cam_banks; 4363005c75dSOleksandr Kolomeiets uint32_t nb_cam_record_words; 4373005c75dSOleksandr Kolomeiets uint32_t nb_cam_records; 4383005c75dSOleksandr Kolomeiets uint32_t nb_tcam_banks; 4393005c75dSOleksandr Kolomeiets uint32_t nb_tcam_bank_width; 4403005c75dSOleksandr Kolomeiets /* not read from backend, but rather set using version */ 4413005c75dSOleksandr Kolomeiets uint32_t nb_km_rcp_mask_a_word_size; 4423005c75dSOleksandr Kolomeiets /* --- || --- */ 4433005c75dSOleksandr Kolomeiets uint32_t nb_km_rcp_mask_b_word_size; 4443005c75dSOleksandr Kolomeiets union { 4453005c75dSOleksandr Kolomeiets struct hw_mod_km_v7_s v7; 4463005c75dSOleksandr Kolomeiets }; 4473005c75dSOleksandr Kolomeiets }; 448fbe2726fSOleksandr Kolomeiets enum hw_km_e { 449fbe2726fSOleksandr Kolomeiets /* functions */ 450fbe2726fSOleksandr Kolomeiets HW_KM_RCP_PRESET_ALL = 0, 451fbe2726fSOleksandr Kolomeiets HW_KM_CAM_PRESET_ALL, 452fbe2726fSOleksandr Kolomeiets /* to sync and reset hw with cache - force write all entries in a bank */ 453fbe2726fSOleksandr Kolomeiets HW_KM_TCAM_BANK_RESET, 454fbe2726fSOleksandr Kolomeiets /* fields */ 455fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_DYN = FIELD_START_INDEX, 456fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_OFS, 457fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_SEL_A, 458fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW0_SEL_B, 459fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_DYN, 460fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_OFS, 461fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_SEL_A, 462fbe2726fSOleksandr Kolomeiets HW_KM_RCP_QW4_SEL_B, 463fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_DYN, 464fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_OFS, 465fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_SEL_A, 466fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW8_SEL_B, 467fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_DYN, 468fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_OFS, 469fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_SEL_A, 470fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW10_SEL_B, 471fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SWX_CCH, 472fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SWX_SEL_A, 473fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SWX_SEL_B, 474fbe2726fSOleksandr Kolomeiets HW_KM_RCP_MASK_A, 475fbe2726fSOleksandr Kolomeiets HW_KM_RCP_MASK_B, 476fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DUAL, 477fbe2726fSOleksandr Kolomeiets HW_KM_RCP_PAIRED, 478fbe2726fSOleksandr Kolomeiets HW_KM_RCP_EL_A, 479fbe2726fSOleksandr Kolomeiets HW_KM_RCP_EL_B, 480fbe2726fSOleksandr Kolomeiets HW_KM_RCP_INFO_A, 481fbe2726fSOleksandr Kolomeiets HW_KM_RCP_INFO_B, 482fbe2726fSOleksandr Kolomeiets HW_KM_RCP_FTM_A, 483fbe2726fSOleksandr Kolomeiets HW_KM_RCP_FTM_B, 484fbe2726fSOleksandr Kolomeiets HW_KM_RCP_BANK_A, 485fbe2726fSOleksandr Kolomeiets HW_KM_RCP_BANK_B, 486fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KL_A, 487fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KL_B, 488fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KEYWAY_A, 489fbe2726fSOleksandr Kolomeiets HW_KM_RCP_KEYWAY_B, 490fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SYNERGY_MODE, 491fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW0_B_DYN, 492fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW0_B_OFS, 493fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW2_B_DYN, 494fbe2726fSOleksandr Kolomeiets HW_KM_RCP_DW2_B_OFS, 495fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW4_B_DYN, 496fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW4_B_OFS, 497fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW5_B_DYN, 498fbe2726fSOleksandr Kolomeiets HW_KM_RCP_SW5_B_OFS, 499fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W0, 500fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W1, 501fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W2, 502fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W3, 503fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W4, 504fbe2726fSOleksandr Kolomeiets HW_KM_CAM_W5, 505fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT0, 506fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT1, 507fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT2, 508fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT3, 509fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT4, 510fbe2726fSOleksandr Kolomeiets HW_KM_CAM_FT5, 511fbe2726fSOleksandr Kolomeiets HW_KM_TCAM_T, 512fbe2726fSOleksandr Kolomeiets HW_KM_TCI_COLOR, 513fbe2726fSOleksandr Kolomeiets HW_KM_TCI_FT, 514fbe2726fSOleksandr Kolomeiets HW_KM_TCQ_BANK_MASK, 515fbe2726fSOleksandr Kolomeiets HW_KM_TCQ_QUAL 516fbe2726fSOleksandr Kolomeiets }; 517fbe2726fSOleksandr Kolomeiets bool hw_mod_km_present(struct flow_api_backend_s *be); 518fbe2726fSOleksandr Kolomeiets int hw_mod_km_alloc(struct flow_api_backend_s *be); 519fbe2726fSOleksandr Kolomeiets void hw_mod_km_free(struct flow_api_backend_s *be); 520fbe2726fSOleksandr Kolomeiets int hw_mod_km_reset(struct flow_api_backend_s *be); 521fbe2726fSOleksandr Kolomeiets int hw_mod_km_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 5229bd46cf2SDanylo Vodopianov int hw_mod_km_rcp_set(struct flow_api_backend_s *be, enum hw_km_e field, int index, int word_off, 5239bd46cf2SDanylo Vodopianov uint32_t value); 5249bd46cf2SDanylo Vodopianov int hw_mod_km_rcp_get(struct flow_api_backend_s *be, enum hw_km_e field, int index, int word_off, 5259bd46cf2SDanylo Vodopianov uint32_t *value); 526fbe2726fSOleksandr Kolomeiets int hw_mod_km_cam_flush(struct flow_api_backend_s *be, int start_bank, int start_record, 527fbe2726fSOleksandr Kolomeiets int count); 5289bd46cf2SDanylo Vodopianov int hw_mod_km_cam_set(struct flow_api_backend_s *be, enum hw_km_e field, int bank, int record, 5299bd46cf2SDanylo Vodopianov uint32_t value); 5309bd46cf2SDanylo Vodopianov 531fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcam_flush(struct flow_api_backend_s *be, int start_bank, int count); 532fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcam_set(struct flow_api_backend_s *be, enum hw_km_e field, int bank, int byte, 533fbe2726fSOleksandr Kolomeiets int byte_val, uint32_t *value_set); 5349bd46cf2SDanylo Vodopianov int hw_mod_km_tcam_get(struct flow_api_backend_s *be, enum hw_km_e field, int bank, int byte, 5359bd46cf2SDanylo Vodopianov int byte_val, uint32_t *value_set); 536fbe2726fSOleksandr Kolomeiets int hw_mod_km_tci_flush(struct flow_api_backend_s *be, int start_bank, int start_record, 537fbe2726fSOleksandr Kolomeiets int count); 5389bd46cf2SDanylo Vodopianov int hw_mod_km_tci_set(struct flow_api_backend_s *be, enum hw_km_e field, int bank, int record, 5399bd46cf2SDanylo Vodopianov uint32_t value); 540fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcq_flush(struct flow_api_backend_s *be, int start_bank, int start_record, 541fbe2726fSOleksandr Kolomeiets int count); 5423005c75dSOleksandr Kolomeiets 543cec43fabSOleksandr Kolomeiets struct flm_func_s { 544cec43fabSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 545cec43fabSOleksandr Kolomeiets uint32_t nb_categories; 546cec43fabSOleksandr Kolomeiets uint32_t nb_size_mb; 547cec43fabSOleksandr Kolomeiets uint32_t nb_entry_size; 548cec43fabSOleksandr Kolomeiets uint32_t nb_variant; 549cec43fabSOleksandr Kolomeiets uint32_t nb_prios; 550cec43fabSOleksandr Kolomeiets uint32_t nb_pst_profiles; 551cec43fabSOleksandr Kolomeiets uint32_t nb_scrub_profiles; 552cec43fabSOleksandr Kolomeiets uint32_t nb_rpp_clock_in_ps; 553cec43fabSOleksandr Kolomeiets uint32_t nb_load_aps_max; 554cec43fabSOleksandr Kolomeiets union { 555cec43fabSOleksandr Kolomeiets struct hw_mod_flm_v25_s v25; 556cec43fabSOleksandr Kolomeiets }; 557cec43fabSOleksandr Kolomeiets }; 558059dfc39SOleksandr Kolomeiets enum hw_flm_e { 559059dfc39SOleksandr Kolomeiets /* functions */ 560059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_PRESET_ALL = 0, 561059dfc39SOleksandr Kolomeiets HW_FLM_RCP_PRESET_ALL, 562059dfc39SOleksandr Kolomeiets HW_FLM_FLOW_LRN_DATA, 563059dfc39SOleksandr Kolomeiets HW_FLM_FLOW_INF_STA_DATA, 564059dfc39SOleksandr Kolomeiets /* Control fields */ 565059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_ENABLE = FIELD_START_INDEX, 566059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_INIT, 567059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_LDS, 568059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_LFS, 569059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_LIS, 570059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_UDS, 571059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_UIS, 572059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_RDS, 573059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_RIS, 574059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_PDS, 575059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_PIS, 576059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_CRCWR, 577059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_CRCRD, 578059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_RBL, 579059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_EAB, 580059dfc39SOleksandr Kolomeiets HW_FLM_CONTROL_SPLIT_SDRAM_USAGE, 581059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CALIB_SUCCESS, 582059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CALIB_FAIL, 583059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_INITDONE, 584059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_IDLE, 585059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CRITICAL, 586059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_PANIC, 587059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CRCERR, 588059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_EFT_BP, 589059dfc39SOleksandr Kolomeiets HW_FLM_STATUS_CACHE_BUFFER_CRITICAL, 590059dfc39SOleksandr Kolomeiets HW_FLM_LOAD_BIN, 591059dfc39SOleksandr Kolomeiets HW_FLM_LOAD_LPS, 592059dfc39SOleksandr Kolomeiets HW_FLM_LOAD_APS, 593059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT0, 594059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT0, 595059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT1, 596059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT1, 597059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT2, 598059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT2, 599059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_LIMIT3, 600059dfc39SOleksandr Kolomeiets HW_FLM_PRIO_FT3, 601059dfc39SOleksandr Kolomeiets HW_FLM_PST_PRESET_ALL, 602059dfc39SOleksandr Kolomeiets HW_FLM_PST_BP, 603059dfc39SOleksandr Kolomeiets HW_FLM_PST_PP, 604059dfc39SOleksandr Kolomeiets HW_FLM_PST_TP, 605059dfc39SOleksandr Kolomeiets HW_FLM_RCP_LOOKUP, 606059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW0_DYN, 607059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW0_OFS, 608059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW0_SEL, 609059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW4_DYN, 610059dfc39SOleksandr Kolomeiets HW_FLM_RCP_QW4_OFS, 611059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW8_DYN, 612059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW8_OFS, 613059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW8_SEL, 614059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW9_DYN, 615059dfc39SOleksandr Kolomeiets HW_FLM_RCP_SW9_OFS, 616059dfc39SOleksandr Kolomeiets HW_FLM_RCP_MASK, 617059dfc39SOleksandr Kolomeiets HW_FLM_RCP_KID, 618059dfc39SOleksandr Kolomeiets HW_FLM_RCP_OPN, 619059dfc39SOleksandr Kolomeiets HW_FLM_RCP_IPN, 620059dfc39SOleksandr Kolomeiets HW_FLM_RCP_BYT_DYN, 621059dfc39SOleksandr Kolomeiets HW_FLM_RCP_BYT_OFS, 622059dfc39SOleksandr Kolomeiets HW_FLM_RCP_TXPLM, 623059dfc39SOleksandr Kolomeiets HW_FLM_RCP_AUTO_IPV4_MASK, 624059dfc39SOleksandr Kolomeiets HW_FLM_BUF_CTRL_LRN_FREE, 625059dfc39SOleksandr Kolomeiets HW_FLM_BUF_CTRL_INF_AVAIL, 626059dfc39SOleksandr Kolomeiets HW_FLM_BUF_CTRL_STA_AVAIL, 627059dfc39SOleksandr Kolomeiets HW_FLM_STAT_LRN_DONE, 628059dfc39SOleksandr Kolomeiets HW_FLM_STAT_LRN_IGNORE, 629059dfc39SOleksandr Kolomeiets HW_FLM_STAT_LRN_FAIL, 630059dfc39SOleksandr Kolomeiets HW_FLM_STAT_UNL_DONE, 631059dfc39SOleksandr Kolomeiets HW_FLM_STAT_UNL_IGNORE, 632059dfc39SOleksandr Kolomeiets HW_FLM_STAT_REL_DONE, 633059dfc39SOleksandr Kolomeiets HW_FLM_STAT_REL_IGNORE, 634059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PRB_DONE, 635059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PRB_IGNORE, 636059dfc39SOleksandr Kolomeiets HW_FLM_STAT_AUL_DONE, 637059dfc39SOleksandr Kolomeiets HW_FLM_STAT_AUL_IGNORE, 638059dfc39SOleksandr Kolomeiets HW_FLM_STAT_AUL_FAIL, 639059dfc39SOleksandr Kolomeiets HW_FLM_STAT_TUL_DONE, 640059dfc39SOleksandr Kolomeiets HW_FLM_STAT_FLOWS, 641059dfc39SOleksandr Kolomeiets HW_FLM_STAT_STA_DONE, /* module ver 0.20 */ 642059dfc39SOleksandr Kolomeiets HW_FLM_STAT_INF_DONE, /* module ver 0.20 */ 643059dfc39SOleksandr Kolomeiets HW_FLM_STAT_INF_SKIP, /* module ver 0.20 */ 644059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_HIT, /* module ver 0.20 */ 645059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_MISS, /* module ver 0.20 */ 646059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_UNH, /* module ver 0.20 */ 647059dfc39SOleksandr Kolomeiets HW_FLM_STAT_PCK_DIS, /* module ver 0.20 */ 648059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CSH_HIT, /* module ver 0.20 */ 649059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CSH_MISS, /* module ver 0.20 */ 650059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CSH_UNH, /* module ver 0.20 */ 651059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CUC_START, /* module ver 0.20 */ 652059dfc39SOleksandr Kolomeiets HW_FLM_STAT_CUC_MOVE, /* module ver 0.20 */ 653059dfc39SOleksandr Kolomeiets HW_FLM_SCAN_I, /* module ver 0.22 */ 654059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_PRESET_ALL, 655059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_T, /* module ver 0.22 */ 656059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_R, /* module ver 0.24 */ 657059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_DEL, /* module ver 0.24 */ 658059dfc39SOleksandr Kolomeiets HW_FLM_SCRUB_INF, /* module ver 0.24 */ 659059dfc39SOleksandr Kolomeiets }; 660059dfc39SOleksandr Kolomeiets 661059dfc39SOleksandr Kolomeiets bool hw_mod_flm_present(struct flow_api_backend_s *be); 662059dfc39SOleksandr Kolomeiets int hw_mod_flm_alloc(struct flow_api_backend_s *be); 663059dfc39SOleksandr Kolomeiets void hw_mod_flm_free(struct flow_api_backend_s *be); 664059dfc39SOleksandr Kolomeiets int hw_mod_flm_reset(struct flow_api_backend_s *be); 665059dfc39SOleksandr Kolomeiets 666059dfc39SOleksandr Kolomeiets int hw_mod_flm_control_flush(struct flow_api_backend_s *be); 667059dfc39SOleksandr Kolomeiets int hw_mod_flm_control_set(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t value); 668059dfc39SOleksandr Kolomeiets 669deda5e0fSDanylo Vodopianov int hw_mod_flm_status_update(struct flow_api_backend_s *be); 670deda5e0fSDanylo Vodopianov int hw_mod_flm_status_get(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t *value); 671deda5e0fSDanylo Vodopianov 672059dfc39SOleksandr Kolomeiets int hw_mod_flm_scan_flush(struct flow_api_backend_s *be); 673deda5e0fSDanylo Vodopianov int hw_mod_flm_scan_set(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t value); 674deda5e0fSDanylo Vodopianov 675deda5e0fSDanylo Vodopianov int hw_mod_flm_load_bin_flush(struct flow_api_backend_s *be); 676deda5e0fSDanylo Vodopianov int hw_mod_flm_load_bin_set(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t value); 677deda5e0fSDanylo Vodopianov 678deda5e0fSDanylo Vodopianov int hw_mod_flm_prio_flush(struct flow_api_backend_s *be); 679deda5e0fSDanylo Vodopianov int hw_mod_flm_prio_set(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t value); 680deda5e0fSDanylo Vodopianov 681deda5e0fSDanylo Vodopianov int hw_mod_flm_pst_flush(struct flow_api_backend_s *be, int start_idx, int count); 682deda5e0fSDanylo Vodopianov int hw_mod_flm_pst_set(struct flow_api_backend_s *be, enum hw_flm_e field, int index, 683deda5e0fSDanylo Vodopianov uint32_t value); 684059dfc39SOleksandr Kolomeiets 685059dfc39SOleksandr Kolomeiets int hw_mod_flm_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 686866d8d06SDanylo Vodopianov int hw_mod_flm_rcp_set_mask(struct flow_api_backend_s *be, enum hw_flm_e field, int index, 687866d8d06SDanylo Vodopianov uint32_t *value); 688866d8d06SDanylo Vodopianov int hw_mod_flm_rcp_set(struct flow_api_backend_s *be, enum hw_flm_e field, int index, 689866d8d06SDanylo Vodopianov uint32_t value); 690059dfc39SOleksandr Kolomeiets 691c0d44442SDanylo Vodopianov int hw_mod_flm_buf_ctrl_update(struct flow_api_backend_s *be); 692c0d44442SDanylo Vodopianov int hw_mod_flm_buf_ctrl_get(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t *value); 693c0d44442SDanylo Vodopianov 694e7e49ce6SDanylo Vodopianov int hw_mod_flm_stat_update(struct flow_api_backend_s *be); 695e7e49ce6SDanylo Vodopianov int hw_mod_flm_stat_get(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t *value); 696e7e49ce6SDanylo Vodopianov 69796c8249bSDanylo Vodopianov int hw_mod_flm_lrn_data_set_flush(struct flow_api_backend_s *be, enum hw_flm_e field, 69896c8249bSDanylo Vodopianov const uint32_t *value, uint32_t records, 69996c8249bSDanylo Vodopianov uint32_t *handled_records, uint32_t *inf_word_cnt, 70096c8249bSDanylo Vodopianov uint32_t *sta_word_cnt); 701c0d44442SDanylo Vodopianov int hw_mod_flm_inf_sta_data_update_get(struct flow_api_backend_s *be, enum hw_flm_e field, 702c0d44442SDanylo Vodopianov uint32_t *inf_value, uint32_t inf_size, 703c0d44442SDanylo Vodopianov uint32_t *inf_word_cnt, uint32_t *sta_value, 704c0d44442SDanylo Vodopianov uint32_t sta_size, uint32_t *sta_word_cnt); 70596c8249bSDanylo Vodopianov 706c0d44442SDanylo Vodopianov uint32_t hw_mod_flm_scrub_timeout_decode(uint32_t t_enc); 707c0d44442SDanylo Vodopianov uint32_t hw_mod_flm_scrub_timeout_encode(uint32_t t); 708059dfc39SOleksandr Kolomeiets int hw_mod_flm_scrub_flush(struct flow_api_backend_s *be, int start_idx, int count); 709c0d44442SDanylo Vodopianov int hw_mod_flm_scrub_set(struct flow_api_backend_s *be, enum hw_flm_e field, int index, 710c0d44442SDanylo Vodopianov uint32_t value); 711cec43fabSOleksandr Kolomeiets 712a5a5d5bbSOleksandr Kolomeiets struct hsh_func_s { 713a5a5d5bbSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 714a5a5d5bbSOleksandr Kolomeiets uint32_t nb_rcp;/* number of HSH recipes supported by FPGA */ 715a5a5d5bbSOleksandr Kolomeiets /* indication if Toeplitz is supported by FPGA, i.e. 0 - unsupported, 1 - supported */ 716a5a5d5bbSOleksandr Kolomeiets uint32_t toeplitz; 717a5a5d5bbSOleksandr Kolomeiets union { 718a5a5d5bbSOleksandr Kolomeiets struct hw_mod_hsh_v5_s v5; 719a5a5d5bbSOleksandr Kolomeiets }; 720a5a5d5bbSOleksandr Kolomeiets }; 721afad5ac4SOleksandr Kolomeiets enum hw_hsh_e { 722afad5ac4SOleksandr Kolomeiets /* functions */ 723afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_PRESET_ALL = 0, 724afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_COMPARE, 725afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_FIND, 726afad5ac4SOleksandr Kolomeiets /* fields */ 727afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_LOAD_DIST_TYPE = FIELD_START_INDEX, 728afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_MAC_PORT_MASK, 729afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_SORT, 730afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_QW0_PE, 731afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_QW0_OFS, 732afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_QW4_PE, 733afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_QW4_OFS, 734afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W8_PE, 735afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W8_OFS, 736afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W8_SORT, 737afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W9_PE, 738afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W9_OFS, 739afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W9_SORT, 740afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_W9_P, 741afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_P_MASK, 742afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_WORD_MASK, 743afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_SEED, 744afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_TNL_P, 745afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_HSH_VALID, 746afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_HSH_TYPE, 747afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_TOEPLITZ, 748afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_K, 749afad5ac4SOleksandr Kolomeiets HW_HSH_RCP_AUTO_IPV4_MASK 750afad5ac4SOleksandr Kolomeiets }; 751afad5ac4SOleksandr Kolomeiets bool hw_mod_hsh_present(struct flow_api_backend_s *be); 752afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_alloc(struct flow_api_backend_s *be); 753afad5ac4SOleksandr Kolomeiets void hw_mod_hsh_free(struct flow_api_backend_s *be); 754afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_reset(struct flow_api_backend_s *be); 755afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 7567fa0bf29SDanylo Vodopianov int hw_mod_hsh_rcp_set(struct flow_api_backend_s *be, enum hw_hsh_e field, uint32_t index, 7577fa0bf29SDanylo Vodopianov uint32_t word_off, uint32_t value); 758a5a5d5bbSOleksandr Kolomeiets 759b95f1cd0SOleksandr Kolomeiets struct qsl_func_s { 760b95f1cd0SOleksandr Kolomeiets COMMON_FUNC_INFO_S; 761b95f1cd0SOleksandr Kolomeiets uint32_t nb_rcp_categories; 762b95f1cd0SOleksandr Kolomeiets uint32_t nb_qst_entries; 763b95f1cd0SOleksandr Kolomeiets union { 764b95f1cd0SOleksandr Kolomeiets struct hw_mod_qsl_v7_s v7; 765b95f1cd0SOleksandr Kolomeiets }; 766b95f1cd0SOleksandr Kolomeiets }; 7670e474ae5SOleksandr Kolomeiets enum hw_qsl_e { 7680e474ae5SOleksandr Kolomeiets /* functions */ 7690e474ae5SOleksandr Kolomeiets HW_QSL_RCP_PRESET_ALL = 0, 7700e474ae5SOleksandr Kolomeiets HW_QSL_RCP_COMPARE, 7710e474ae5SOleksandr Kolomeiets HW_QSL_RCP_FIND, 7720e474ae5SOleksandr Kolomeiets HW_QSL_QST_PRESET_ALL, 7730e474ae5SOleksandr Kolomeiets /* fields */ 7740e474ae5SOleksandr Kolomeiets HW_QSL_RCP_DISCARD = FIELD_START_INDEX, 7750e474ae5SOleksandr Kolomeiets HW_QSL_RCP_DROP, 7760e474ae5SOleksandr Kolomeiets HW_QSL_RCP_TBL_LO, 7770e474ae5SOleksandr Kolomeiets HW_QSL_RCP_TBL_HI, 7780e474ae5SOleksandr Kolomeiets HW_QSL_RCP_TBL_IDX, 7790e474ae5SOleksandr Kolomeiets HW_QSL_RCP_TBL_MSK, 7800e474ae5SOleksandr Kolomeiets HW_QSL_RCP_LR, 7810e474ae5SOleksandr Kolomeiets HW_QSL_RCP_TSA, 7820e474ae5SOleksandr Kolomeiets HW_QSL_RCP_VLI, 7830e474ae5SOleksandr Kolomeiets HW_QSL_QST_QUEUE, 7840e474ae5SOleksandr Kolomeiets HW_QSL_QST_EN, /* Alias: HW_QSL_QST_QEN */ 7850e474ae5SOleksandr Kolomeiets HW_QSL_QST_TX_PORT, 7860e474ae5SOleksandr Kolomeiets HW_QSL_QST_LRE, 7870e474ae5SOleksandr Kolomeiets HW_QSL_QST_TCI, 7880e474ae5SOleksandr Kolomeiets HW_QSL_QST_VEN, 7890e474ae5SOleksandr Kolomeiets HW_QSL_QEN_EN, 7900e474ae5SOleksandr Kolomeiets HW_QSL_UNMQ_DEST_QUEUE, 7910e474ae5SOleksandr Kolomeiets HW_QSL_UNMQ_EN, 7920e474ae5SOleksandr Kolomeiets }; 7930e474ae5SOleksandr Kolomeiets bool hw_mod_qsl_present(struct flow_api_backend_s *be); 7940e474ae5SOleksandr Kolomeiets int hw_mod_qsl_alloc(struct flow_api_backend_s *be); 7950e474ae5SOleksandr Kolomeiets void hw_mod_qsl_free(struct flow_api_backend_s *be); 7960e474ae5SOleksandr Kolomeiets int hw_mod_qsl_reset(struct flow_api_backend_s *be); 7970e474ae5SOleksandr Kolomeiets int hw_mod_qsl_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 79898e40f83SDanylo Vodopianov int hw_mod_qsl_rcp_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index, 79998e40f83SDanylo Vodopianov uint32_t value); 8000e474ae5SOleksandr Kolomeiets int hw_mod_qsl_qst_flush(struct flow_api_backend_s *be, int start_idx, int count); 80198e40f83SDanylo Vodopianov int hw_mod_qsl_qst_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index, 80298e40f83SDanylo Vodopianov uint32_t value); 8030e474ae5SOleksandr Kolomeiets int hw_mod_qsl_qen_flush(struct flow_api_backend_s *be, int start_idx, int count); 80498e40f83SDanylo Vodopianov int hw_mod_qsl_qen_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index, 80598e40f83SDanylo Vodopianov uint32_t value); 80698e40f83SDanylo Vodopianov int hw_mod_qsl_qen_get(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index, 80798e40f83SDanylo Vodopianov uint32_t *value); 8080e474ae5SOleksandr Kolomeiets int hw_mod_qsl_unmq_flush(struct flow_api_backend_s *be, int start_idx, int count); 8090e474ae5SOleksandr Kolomeiets int hw_mod_qsl_unmq_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index, 8100e474ae5SOleksandr Kolomeiets uint32_t value); 811b95f1cd0SOleksandr Kolomeiets 8128c545325SOleksandr Kolomeiets struct slc_lr_func_s { 8138c545325SOleksandr Kolomeiets COMMON_FUNC_INFO_S; 8148c545325SOleksandr Kolomeiets union { 8158c545325SOleksandr Kolomeiets struct hw_mod_slc_lr_v2_s v2; 8168c545325SOleksandr Kolomeiets }; 8178c545325SOleksandr Kolomeiets }; 8187fadd2baSOleksandr Kolomeiets enum hw_slc_lr_e { 8197fadd2baSOleksandr Kolomeiets /* functions */ 8207fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_PRESET_ALL = 0, 8217fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_COMPARE, 8227fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_FIND, 8237fadd2baSOleksandr Kolomeiets /* fields */ 8247fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_HEAD_SLC_EN = FIELD_START_INDEX, 8257fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_HEAD_DYN, 8267fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_HEAD_OFS, 8277fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_TAIL_SLC_EN, 8287fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_TAIL_DYN, 8297fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_TAIL_OFS, 8307fadd2baSOleksandr Kolomeiets HW_SLC_LR_RCP_PCAP 8317fadd2baSOleksandr Kolomeiets }; 8327fadd2baSOleksandr Kolomeiets bool hw_mod_slc_lr_present(struct flow_api_backend_s *be); 8337fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_alloc(struct flow_api_backend_s *be); 8347fadd2baSOleksandr Kolomeiets void hw_mod_slc_lr_free(struct flow_api_backend_s *be); 8357fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_reset(struct flow_api_backend_s *be); 8367fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 837c4d1272bSDanylo Vodopianov int hw_mod_slc_lr_rcp_set(struct flow_api_backend_s *be, enum hw_slc_lr_e field, uint32_t index, 838c4d1272bSDanylo Vodopianov uint32_t value); 8398c545325SOleksandr Kolomeiets 8407d65ee1aSOleksandr Kolomeiets struct pdb_func_s { 8417d65ee1aSOleksandr Kolomeiets COMMON_FUNC_INFO_S; 8427d65ee1aSOleksandr Kolomeiets uint32_t nb_pdb_rcp_categories; 8437d65ee1aSOleksandr Kolomeiets 8447d65ee1aSOleksandr Kolomeiets union { 8457d65ee1aSOleksandr Kolomeiets struct hw_mod_pdb_v9_s v9; 8467d65ee1aSOleksandr Kolomeiets }; 8477d65ee1aSOleksandr Kolomeiets }; 84887ad2151SOleksandr Kolomeiets enum hw_pdb_e { 84987ad2151SOleksandr Kolomeiets /* functions */ 85087ad2151SOleksandr Kolomeiets HW_PDB_RCP_PRESET_ALL = 0, 85187ad2151SOleksandr Kolomeiets HW_PDB_RCP_COMPARE, 85287ad2151SOleksandr Kolomeiets HW_PDB_RCP_FIND, 85387ad2151SOleksandr Kolomeiets /* fields */ 85487ad2151SOleksandr Kolomeiets HW_PDB_RCP_DESCRIPTOR = FIELD_START_INDEX, 85587ad2151SOleksandr Kolomeiets HW_PDB_RCP_DESC_LEN, 85687ad2151SOleksandr Kolomeiets HW_PDB_RCP_TX_PORT, 85787ad2151SOleksandr Kolomeiets HW_PDB_RCP_TX_IGNORE, 85887ad2151SOleksandr Kolomeiets HW_PDB_RCP_TX_NOW, 85987ad2151SOleksandr Kolomeiets HW_PDB_RCP_CRC_OVERWRITE, 86087ad2151SOleksandr Kolomeiets HW_PDB_RCP_ALIGN, 86187ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS0_DYN, 86287ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS0_REL, 86387ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS1_DYN, 86487ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS1_REL, 86587ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS2_DYN, 86687ad2151SOleksandr Kolomeiets HW_PDB_RCP_OFS2_REL, 86787ad2151SOleksandr Kolomeiets HW_PDB_RCP_IP_PROT_TNL, 86887ad2151SOleksandr Kolomeiets HW_PDB_RCP_PPC_HSH, 86987ad2151SOleksandr Kolomeiets HW_PDB_RCP_DUPLICATE_EN, 87087ad2151SOleksandr Kolomeiets HW_PDB_RCP_DUPLICATE_BIT, 87187ad2151SOleksandr Kolomeiets HW_PDB_RCP_PCAP_KEEP_FCS, 87287ad2151SOleksandr Kolomeiets HW_PDB_CONFIG_TS_FORMAT, 87387ad2151SOleksandr Kolomeiets HW_PDB_CONFIG_PORT_OFS, 87487ad2151SOleksandr Kolomeiets }; 87587ad2151SOleksandr Kolomeiets bool hw_mod_pdb_present(struct flow_api_backend_s *be); 87687ad2151SOleksandr Kolomeiets int hw_mod_pdb_alloc(struct flow_api_backend_s *be); 87787ad2151SOleksandr Kolomeiets void hw_mod_pdb_free(struct flow_api_backend_s *be); 87887ad2151SOleksandr Kolomeiets int hw_mod_pdb_reset(struct flow_api_backend_s *be); 87987ad2151SOleksandr Kolomeiets int hw_mod_pdb_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 880ef6e148bSDanylo Vodopianov int hw_mod_pdb_rcp_set(struct flow_api_backend_s *be, enum hw_pdb_e field, uint32_t index, 881ef6e148bSDanylo Vodopianov uint32_t value); 882ef6e148bSDanylo Vodopianov 88387ad2151SOleksandr Kolomeiets int hw_mod_pdb_config_flush(struct flow_api_backend_s *be); 8847d65ee1aSOleksandr Kolomeiets 8857f058028SSerhii Iliushyk struct tpe_func_s { 8867f058028SSerhii Iliushyk COMMON_FUNC_INFO_S; 8877f058028SSerhii Iliushyk uint32_t nb_rcp_categories; 8887f058028SSerhii Iliushyk uint32_t nb_ifr_categories; 8897f058028SSerhii Iliushyk uint32_t nb_cpy_writers; 8907f058028SSerhii Iliushyk uint32_t nb_rpl_depth; 8917f058028SSerhii Iliushyk uint32_t nb_rpl_ext_categories; 8927f058028SSerhii Iliushyk union { 8937f058028SSerhii Iliushyk struct hw_mod_tpe_v3_s v3; 8947f058028SSerhii Iliushyk }; 8957f058028SSerhii Iliushyk }; 8964d4e9018SOleksandr Kolomeiets enum hw_tpe_e { 8974d4e9018SOleksandr Kolomeiets /* functions */ 8984d4e9018SOleksandr Kolomeiets HW_TPE_PRESET_ALL = 0, 8994d4e9018SOleksandr Kolomeiets HW_TPE_FIND, 9004d4e9018SOleksandr Kolomeiets HW_TPE_COMPARE, 9014d4e9018SOleksandr Kolomeiets /* Control fields */ 9024d4e9018SOleksandr Kolomeiets HW_TPE_RPP_RCP_EXP = FIELD_START_INDEX, 9034d4e9018SOleksandr Kolomeiets HW_TPE_IFR_RCP_IPV4_EN, 9044d4e9018SOleksandr Kolomeiets HW_TPE_IFR_RCP_IPV4_DF_DROP, 9054d4e9018SOleksandr Kolomeiets HW_TPE_IFR_RCP_IPV6_EN, 9064d4e9018SOleksandr Kolomeiets HW_TPE_IFR_RCP_IPV6_DROP, 9074d4e9018SOleksandr Kolomeiets HW_TPE_IFR_RCP_MTU, 9084d4e9018SOleksandr Kolomeiets HW_TPE_INS_RCP_DYN, 9094d4e9018SOleksandr Kolomeiets HW_TPE_INS_RCP_OFS, 9104d4e9018SOleksandr Kolomeiets HW_TPE_INS_RCP_LEN, 9114d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_DYN, 9124d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_OFS, 9134d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_LEN, 9144d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_RPL_PTR, 9154d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_EXT_PRIO, 9164d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RCP_ETH_TYPE_WR, 9174d4e9018SOleksandr Kolomeiets HW_TPE_RPL_EXT_RPL_PTR, 9184d4e9018SOleksandr Kolomeiets HW_TPE_RPL_EXT_META_RPL_LEN, /* SW only */ 9194d4e9018SOleksandr Kolomeiets HW_TPE_RPL_RPL_VALUE, 9204d4e9018SOleksandr Kolomeiets HW_TPE_CPY_RCP_READER_SELECT, 9214d4e9018SOleksandr Kolomeiets HW_TPE_CPY_RCP_DYN, 9224d4e9018SOleksandr Kolomeiets HW_TPE_CPY_RCP_OFS, 9234d4e9018SOleksandr Kolomeiets HW_TPE_CPY_RCP_LEN, 9244d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_WR, 9254d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_OUTER_L4_LEN, 9264d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_POS_DYN, 9274d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_POS_OFS, 9284d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_ADD_DYN, 9294d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_ADD_OFS, 9304d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_A_SUB_DYN, 9314d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_WR, 9324d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_POS_DYN, 9334d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_POS_OFS, 9344d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_ADD_DYN, 9354d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_ADD_OFS, 9364d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_B_SUB_DYN, 9374d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_WR, 9384d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_POS_DYN, 9394d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_POS_OFS, 9404d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_ADD_DYN, 9414d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_ADD_OFS, 9424d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_LEN_C_SUB_DYN, 9434d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_TTL_WR, 9444d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_TTL_POS_DYN, 9454d4e9018SOleksandr Kolomeiets HW_TPE_HFU_RCP_TTL_POS_OFS, 9464d4e9018SOleksandr Kolomeiets HW_TPE_CSU_RCP_OUTER_L3_CMD, 9474d4e9018SOleksandr Kolomeiets HW_TPE_CSU_RCP_OUTER_L4_CMD, 9484d4e9018SOleksandr Kolomeiets HW_TPE_CSU_RCP_INNER_L3_CMD, 9494d4e9018SOleksandr Kolomeiets HW_TPE_CSU_RCP_INNER_L4_CMD, 9504d4e9018SOleksandr Kolomeiets }; 9514d4e9018SOleksandr Kolomeiets bool hw_mod_tpe_present(struct flow_api_backend_s *be); 9524d4e9018SOleksandr Kolomeiets int hw_mod_tpe_alloc(struct flow_api_backend_s *be); 9534d4e9018SOleksandr Kolomeiets void hw_mod_tpe_free(struct flow_api_backend_s *be); 9544d4e9018SOleksandr Kolomeiets int hw_mod_tpe_reset(struct flow_api_backend_s *be); 9554d4e9018SOleksandr Kolomeiets 9564d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpp_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 9570b98e4c1SDanylo Vodopianov int hw_mod_tpe_rpp_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index, 9580b98e4c1SDanylo Vodopianov uint32_t value); 9594d4e9018SOleksandr Kolomeiets 9604d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpp_ifr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 961*6019656dSOleksandr Kolomeiets int hw_mod_tpe_rpp_ifr_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index, 962*6019656dSOleksandr Kolomeiets uint32_t value); 9634d4e9018SOleksandr Kolomeiets 9644d4e9018SOleksandr Kolomeiets int hw_mod_tpe_ifr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 965*6019656dSOleksandr Kolomeiets int hw_mod_tpe_ifr_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index, 966*6019656dSOleksandr Kolomeiets uint32_t value); 9674d4e9018SOleksandr Kolomeiets 9684d4e9018SOleksandr Kolomeiets int hw_mod_tpe_ins_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 9690b98e4c1SDanylo Vodopianov int hw_mod_tpe_ins_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index, 9700b98e4c1SDanylo Vodopianov uint32_t value); 9714d4e9018SOleksandr Kolomeiets 9724d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 9730b98e4c1SDanylo Vodopianov int hw_mod_tpe_rpl_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index, 9740b98e4c1SDanylo Vodopianov uint32_t value); 9754d4e9018SOleksandr Kolomeiets 9764d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_ext_flush(struct flow_api_backend_s *be, int start_idx, int count); 9770b98e4c1SDanylo Vodopianov int hw_mod_tpe_rpl_ext_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index, 9780b98e4c1SDanylo Vodopianov uint32_t value); 9794d4e9018SOleksandr Kolomeiets 9804d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_rpl_flush(struct flow_api_backend_s *be, int start_idx, int count); 9810b98e4c1SDanylo Vodopianov int hw_mod_tpe_rpl_rpl_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index, 9820b98e4c1SDanylo Vodopianov uint32_t *value); 9834d4e9018SOleksandr Kolomeiets 9844d4e9018SOleksandr Kolomeiets int hw_mod_tpe_cpy_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 9850b98e4c1SDanylo Vodopianov int hw_mod_tpe_cpy_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index, 9860b98e4c1SDanylo Vodopianov uint32_t value); 9874d4e9018SOleksandr Kolomeiets 9884d4e9018SOleksandr Kolomeiets int hw_mod_tpe_hfu_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 9890b98e4c1SDanylo Vodopianov int hw_mod_tpe_hfu_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index, 9900b98e4c1SDanylo Vodopianov uint32_t value); 9914d4e9018SOleksandr Kolomeiets 9924d4e9018SOleksandr Kolomeiets int hw_mod_tpe_csu_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count); 9930b98e4c1SDanylo Vodopianov int hw_mod_tpe_csu_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index, 9940b98e4c1SDanylo Vodopianov uint32_t value); 9957f058028SSerhii Iliushyk 996e3723ca6SOleksandr Kolomeiets enum debug_mode_e { 997e3723ca6SOleksandr Kolomeiets FLOW_BACKEND_DEBUG_MODE_NONE = 0x0000, 998e3723ca6SOleksandr Kolomeiets FLOW_BACKEND_DEBUG_MODE_WRITE = 0x0001 999e3723ca6SOleksandr Kolomeiets }; 1000e3723ca6SOleksandr Kolomeiets 1001e3723ca6SOleksandr Kolomeiets struct flow_api_backend_ops { 1002e3723ca6SOleksandr Kolomeiets int version; 1003e3723ca6SOleksandr Kolomeiets int (*set_debug_mode)(void *dev, enum debug_mode_e mode); 1004e3723ca6SOleksandr Kolomeiets int (*get_nb_phy_port)(void *dev); 1005e3723ca6SOleksandr Kolomeiets int (*get_nb_rx_port)(void *dev); 1006e3723ca6SOleksandr Kolomeiets int (*get_ltx_avail)(void *dev); 1007e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_funcs)(void *dev); 1008e3723ca6SOleksandr Kolomeiets int (*get_nb_categories)(void *dev); 1009e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_km_if_cnt)(void *dev); 1010e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_km_if_m0)(void *dev); 1011e3723ca6SOleksandr Kolomeiets int (*get_nb_cat_km_if_m1)(void *dev); 1012e3723ca6SOleksandr Kolomeiets 1013e3723ca6SOleksandr Kolomeiets int (*get_nb_queues)(void *dev); 1014e3723ca6SOleksandr Kolomeiets int (*get_nb_km_flow_types)(void *dev); 1015e3723ca6SOleksandr Kolomeiets int (*get_nb_pm_ext)(void *dev); 1016e3723ca6SOleksandr Kolomeiets int (*get_nb_len)(void *dev); 1017e3723ca6SOleksandr Kolomeiets int (*get_kcc_size)(void *dev); 1018e3723ca6SOleksandr Kolomeiets int (*get_kcc_banks)(void *dev); 1019e3723ca6SOleksandr Kolomeiets int (*get_nb_km_categories)(void *dev); 1020e3723ca6SOleksandr Kolomeiets int (*get_nb_km_cam_banks)(void *dev); 1021e3723ca6SOleksandr Kolomeiets int (*get_nb_km_cam_record_words)(void *dev); 1022e3723ca6SOleksandr Kolomeiets int (*get_nb_km_cam_records)(void *dev); 1023e3723ca6SOleksandr Kolomeiets int (*get_nb_km_tcam_banks)(void *dev); 1024e3723ca6SOleksandr Kolomeiets int (*get_nb_km_tcam_bank_width)(void *dev); 1025e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_categories)(void *dev); 1026e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_size_mb)(void *dev); 1027e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_entry_size)(void *dev); 1028e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_variant)(void *dev); 1029e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_prios)(void *dev); 1030e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_pst_profiles)(void *dev); 1031e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_scrub_profiles)(void *dev); 1032e3723ca6SOleksandr Kolomeiets int (*get_nb_flm_load_aps_max)(void *dev); 1033e3723ca6SOleksandr Kolomeiets int (*get_nb_qsl_categories)(void *dev); 1034e3723ca6SOleksandr Kolomeiets int (*get_nb_qsl_qst_entries)(void *dev); 1035e3723ca6SOleksandr Kolomeiets int (*get_nb_pdb_categories)(void *dev); 1036e3723ca6SOleksandr Kolomeiets int (*get_nb_roa_categories)(void *dev); 1037e3723ca6SOleksandr Kolomeiets int (*get_nb_tpe_categories)(void *dev); 1038e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_cpy_writers)(void *dev); 1039e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_cpy_mask_mem)(void *dev); 1040e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_rpl_depth)(void *dev); 1041e3723ca6SOleksandr Kolomeiets int (*get_nb_tx_rpl_ext_categories)(void *dev); 1042e3723ca6SOleksandr Kolomeiets int (*get_nb_tpe_ifr_categories)(void *dev); 1043e3723ca6SOleksandr Kolomeiets int (*get_nb_rpp_per_ps)(void *dev); 1044e3723ca6SOleksandr Kolomeiets int (*get_nb_hsh_categories)(void *dev); 1045e3723ca6SOleksandr Kolomeiets int (*get_nb_hsh_toeplitz)(void *dev); 1046e3723ca6SOleksandr Kolomeiets 1047e3723ca6SOleksandr Kolomeiets int (*alloc_rx_queue)(void *dev, int queue_id); 1048e3723ca6SOleksandr Kolomeiets int (*free_rx_queue)(void *dev, int hw_queue); 1049636b2cfeSOleksandr Kolomeiets 1050636b2cfeSOleksandr Kolomeiets /* CAT */ 1051636b2cfeSOleksandr Kolomeiets bool (*get_cat_present)(void *dev); 1052636b2cfeSOleksandr Kolomeiets uint32_t (*get_cat_version)(void *dev); 1053636b2cfeSOleksandr Kolomeiets int (*cat_cfn_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt); 1054636b2cfeSOleksandr Kolomeiets int (*cat_kce_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index, 1055636b2cfeSOleksandr Kolomeiets int cnt); 1056636b2cfeSOleksandr Kolomeiets int (*cat_kcs_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int cat_func, 1057636b2cfeSOleksandr Kolomeiets int cnt); 1058636b2cfeSOleksandr Kolomeiets int (*cat_fte_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index, 1059636b2cfeSOleksandr Kolomeiets int cnt); 1060636b2cfeSOleksandr Kolomeiets int (*cat_cte_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt); 1061636b2cfeSOleksandr Kolomeiets int (*cat_cts_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 1062636b2cfeSOleksandr Kolomeiets int (*cat_cot_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt); 1063636b2cfeSOleksandr Kolomeiets int (*cat_cct_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 1064636b2cfeSOleksandr Kolomeiets int (*cat_exo_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 1065636b2cfeSOleksandr Kolomeiets int (*cat_rck_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 1066636b2cfeSOleksandr Kolomeiets int (*cat_len_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 1067636b2cfeSOleksandr Kolomeiets int (*cat_kcc_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt); 10683005c75dSOleksandr Kolomeiets 10693005c75dSOleksandr Kolomeiets /* KM */ 10703005c75dSOleksandr Kolomeiets bool (*get_km_present)(void *dev); 10713005c75dSOleksandr Kolomeiets uint32_t (*get_km_version)(void *dev); 10723005c75dSOleksandr Kolomeiets int (*km_rcp_flush)(void *dev, const struct km_func_s *km, int category, int cnt); 10733005c75dSOleksandr Kolomeiets int (*km_cam_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt); 10743005c75dSOleksandr Kolomeiets int (*km_tcam_flush)(void *dev, const struct km_func_s *km, int bank, int byte, int value, 10753005c75dSOleksandr Kolomeiets int cnt); 10763005c75dSOleksandr Kolomeiets int (*km_tci_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt); 10773005c75dSOleksandr Kolomeiets int (*km_tcq_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt); 1078cec43fabSOleksandr Kolomeiets 1079cec43fabSOleksandr Kolomeiets /* FLM */ 1080cec43fabSOleksandr Kolomeiets bool (*get_flm_present)(void *dev); 1081cec43fabSOleksandr Kolomeiets uint32_t (*get_flm_version)(void *dev); 1082cec43fabSOleksandr Kolomeiets int (*flm_control_flush)(void *dev, const struct flm_func_s *flm); 1083cec43fabSOleksandr Kolomeiets int (*flm_status_flush)(void *dev, const struct flm_func_s *flm); 1084cec43fabSOleksandr Kolomeiets int (*flm_status_update)(void *dev, const struct flm_func_s *flm); 1085cec43fabSOleksandr Kolomeiets int (*flm_scan_flush)(void *dev, const struct flm_func_s *flm); 1086cec43fabSOleksandr Kolomeiets int (*flm_load_bin_flush)(void *dev, const struct flm_func_s *flm); 1087cec43fabSOleksandr Kolomeiets int (*flm_prio_flush)(void *dev, const struct flm_func_s *flm); 1088cec43fabSOleksandr Kolomeiets int (*flm_pst_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt); 1089cec43fabSOleksandr Kolomeiets int (*flm_rcp_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt); 1090cec43fabSOleksandr Kolomeiets int (*flm_scrub_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt); 1091cec43fabSOleksandr Kolomeiets int (*flm_buf_ctrl_update)(void *dev, const struct flm_func_s *flm); 1092cec43fabSOleksandr Kolomeiets int (*flm_stat_update)(void *dev, const struct flm_func_s *flm); 1093cec43fabSOleksandr Kolomeiets int (*flm_lrn_data_flush)(void *be_dev, const struct flm_func_s *flm, 1094cec43fabSOleksandr Kolomeiets const uint32_t *lrn_data, uint32_t records, 1095cec43fabSOleksandr Kolomeiets uint32_t *handled_records, uint32_t words_per_record, 1096cec43fabSOleksandr Kolomeiets uint32_t *inf_word_cnt, uint32_t *sta_word_cnt); 1097cec43fabSOleksandr Kolomeiets int (*flm_inf_sta_data_update)(void *be_dev, const struct flm_func_s *flm, 1098cec43fabSOleksandr Kolomeiets uint32_t *inf_data, uint32_t inf_size, 1099cec43fabSOleksandr Kolomeiets uint32_t *inf_word_cnt, uint32_t *sta_data, 1100cec43fabSOleksandr Kolomeiets uint32_t sta_size, uint32_t *sta_word_cnt); 1101a5a5d5bbSOleksandr Kolomeiets 1102a5a5d5bbSOleksandr Kolomeiets /* HSH */ 1103a5a5d5bbSOleksandr Kolomeiets bool (*get_hsh_present)(void *dev); 1104a5a5d5bbSOleksandr Kolomeiets uint32_t (*get_hsh_version)(void *dev); 1105a5a5d5bbSOleksandr Kolomeiets int (*hsh_rcp_flush)(void *dev, const struct hsh_func_s *hsh, int category, int cnt); 1106b95f1cd0SOleksandr Kolomeiets 1107b95f1cd0SOleksandr Kolomeiets /* QSL */ 1108b95f1cd0SOleksandr Kolomeiets bool (*get_qsl_present)(void *dev); 1109b95f1cd0SOleksandr Kolomeiets uint32_t (*get_qsl_version)(void *dev); 1110b95f1cd0SOleksandr Kolomeiets int (*qsl_rcp_flush)(void *dev, const struct qsl_func_s *qsl, int category, int cnt); 1111b95f1cd0SOleksandr Kolomeiets int (*qsl_qst_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt); 1112b95f1cd0SOleksandr Kolomeiets int (*qsl_qen_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt); 1113b95f1cd0SOleksandr Kolomeiets int (*qsl_unmq_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt); 11148c545325SOleksandr Kolomeiets 11158c545325SOleksandr Kolomeiets /* SLC LR */ 11168c545325SOleksandr Kolomeiets bool (*get_slc_lr_present)(void *dev); 11178c545325SOleksandr Kolomeiets uint32_t (*get_slc_lr_version)(void *dev); 11188c545325SOleksandr Kolomeiets int (*slc_lr_rcp_flush)(void *dev, const struct slc_lr_func_s *slc_lr, int category, 11198c545325SOleksandr Kolomeiets int cnt); 11207d65ee1aSOleksandr Kolomeiets 11217d65ee1aSOleksandr Kolomeiets /* PDB */ 11227d65ee1aSOleksandr Kolomeiets bool (*get_pdb_present)(void *dev); 11237d65ee1aSOleksandr Kolomeiets uint32_t (*get_pdb_version)(void *dev); 11247d65ee1aSOleksandr Kolomeiets int (*pdb_rcp_flush)(void *dev, const struct pdb_func_s *pdb, int category, int cnt); 11257d65ee1aSOleksandr Kolomeiets int (*pdb_config_flush)(void *dev, const struct pdb_func_s *pdb); 11267f058028SSerhii Iliushyk 11277f058028SSerhii Iliushyk /* TPE */ 11287f058028SSerhii Iliushyk bool (*get_tpe_present)(void *dev); 11297f058028SSerhii Iliushyk uint32_t (*get_tpe_version)(void *dev); 11307f058028SSerhii Iliushyk int (*tpe_rpp_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 11317f058028SSerhii Iliushyk int (*tpe_rpp_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 11327f058028SSerhii Iliushyk int (*tpe_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 11337f058028SSerhii Iliushyk int (*tpe_ins_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 11347f058028SSerhii Iliushyk int (*tpe_rpl_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 11357f058028SSerhii Iliushyk int (*tpe_rpl_ext_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 11367f058028SSerhii Iliushyk int (*tpe_rpl_rpl_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 11377f058028SSerhii Iliushyk int (*tpe_cpy_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 11387f058028SSerhii Iliushyk int (*tpe_hfu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 11397f058028SSerhii Iliushyk int (*tpe_csu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt); 1140e3723ca6SOleksandr Kolomeiets }; 1141e3723ca6SOleksandr Kolomeiets 11428df4a5f8SOleksandr Kolomeiets struct flow_api_backend_s { 11438df4a5f8SOleksandr Kolomeiets void *be_dev; 11441d3f62a0SOleksandr Kolomeiets const struct flow_api_backend_ops *iface; 11457917b0d3SOleksandr Kolomeiets 11466e8b7f11SOleksandr Kolomeiets /* flow filter FPGA modules */ 11476e8b7f11SOleksandr Kolomeiets struct cat_func_s cat; 1148fbe2726fSOleksandr Kolomeiets struct km_func_s km; 1149059dfc39SOleksandr Kolomeiets struct flm_func_s flm; 1150afad5ac4SOleksandr Kolomeiets struct hsh_func_s hsh; 11510e474ae5SOleksandr Kolomeiets struct qsl_func_s qsl; 11527fadd2baSOleksandr Kolomeiets struct slc_lr_func_s slc_lr; 115387ad2151SOleksandr Kolomeiets struct pdb_func_s pdb; 11544d4e9018SOleksandr Kolomeiets struct tpe_func_s tpe; 11556e8b7f11SOleksandr Kolomeiets 11567917b0d3SOleksandr Kolomeiets /* NIC attributes */ 11577917b0d3SOleksandr Kolomeiets unsigned int num_phy_ports; 11587917b0d3SOleksandr Kolomeiets unsigned int num_rx_ports; 11597917b0d3SOleksandr Kolomeiets 11607917b0d3SOleksandr Kolomeiets /* flow filter resource capacities */ 11617917b0d3SOleksandr Kolomeiets unsigned int max_categories; 11627917b0d3SOleksandr Kolomeiets unsigned int max_queues; 11638df4a5f8SOleksandr Kolomeiets }; 11648df4a5f8SOleksandr Kolomeiets 11657917b0d3SOleksandr Kolomeiets int flow_api_backend_init(struct flow_api_backend_s *dev, const struct flow_api_backend_ops *iface, 11667917b0d3SOleksandr Kolomeiets void *be_dev); 11677917b0d3SOleksandr Kolomeiets int flow_api_backend_done(struct flow_api_backend_s *dev); 11687917b0d3SOleksandr Kolomeiets 11698df4a5f8SOleksandr Kolomeiets #endif /* _HW_MOD_BACKEND_H_ */ 1170