Lines Matching refs:spec
1896 struct efx_farch_filter_spec *spec; member
1933 efx_farch_filter_spec_table_id(const struct efx_farch_filter_spec *spec) in efx_farch_filter_spec_table_id() argument
1949 return (spec->type >> 2) + ((spec->flags & EFX_FILTER_FLAG_TX) ? 2 : 0); in efx_farch_filter_spec_table_id()
1990 table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].dmaq_id); in efx_farch_filter_push_rx_config()
1993 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags & in efx_farch_filter_push_rx_config()
1997 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].dmaq_id); in efx_farch_filter_push_rx_config()
2000 !!(table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags & in efx_farch_filter_push_rx_config()
2009 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags & in efx_farch_filter_push_rx_config()
2010 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags & in efx_farch_filter_push_rx_config()
2050 efx_farch_filter_from_gen_spec(struct efx_farch_filter_spec *spec, in efx_farch_filter_from_gen_spec() argument
2059 spec->priority = gen_spec->priority; in efx_farch_filter_from_gen_spec()
2060 spec->flags = gen_spec->flags; in efx_farch_filter_from_gen_spec()
2061 spec->dmaq_id = gen_spec->dmaq_id; in efx_farch_filter_from_gen_spec()
2083 spec->type = (is_full ? EFX_FARCH_FILTER_TCP_FULL : in efx_farch_filter_from_gen_spec()
2087 spec->type = (is_full ? EFX_FARCH_FILTER_UDP_FULL : in efx_farch_filter_from_gen_spec()
2110 spec->data[0] = ntohl(host1) << 16 | ntohs(port1); in efx_farch_filter_from_gen_spec()
2111 spec->data[1] = ntohs(port2) << 16 | ntohl(host1) >> 16; in efx_farch_filter_from_gen_spec()
2112 spec->data[2] = ntohl(host2); in efx_farch_filter_from_gen_spec()
2121 spec->type = (is_full ? EFX_FARCH_FILTER_MAC_FULL : in efx_farch_filter_from_gen_spec()
2123 spec->data[0] = is_full ? ntohs(gen_spec->outer_vid) : 0; in efx_farch_filter_from_gen_spec()
2124 spec->data[1] = (gen_spec->loc_mac[2] << 24 | in efx_farch_filter_from_gen_spec()
2128 spec->data[2] = (gen_spec->loc_mac[0] << 8 | in efx_farch_filter_from_gen_spec()
2133 spec->type = (is_multicast_ether_addr(gen_spec->loc_mac) ? in efx_farch_filter_from_gen_spec()
2136 memset(spec->data, 0, sizeof(spec->data)); /* ensure equality */ in efx_farch_filter_from_gen_spec()
2148 const struct efx_farch_filter_spec *spec) in efx_farch_filter_to_gen_spec() argument
2158 gen_spec->priority = spec->priority; in efx_farch_filter_to_gen_spec()
2159 gen_spec->flags = spec->flags; in efx_farch_filter_to_gen_spec()
2160 gen_spec->dmaq_id = spec->dmaq_id; in efx_farch_filter_to_gen_spec()
2162 switch (spec->type) { in efx_farch_filter_to_gen_spec()
2181 (spec->type == EFX_FARCH_FILTER_TCP_FULL || in efx_farch_filter_to_gen_spec()
2182 spec->type == EFX_FARCH_FILTER_TCP_WILD) ? in efx_farch_filter_to_gen_spec()
2185 host1 = htonl(spec->data[0] >> 16 | spec->data[1] << 16); in efx_farch_filter_to_gen_spec()
2186 port1 = htons(spec->data[0]); in efx_farch_filter_to_gen_spec()
2187 host2 = htonl(spec->data[2]); in efx_farch_filter_to_gen_spec()
2188 port2 = htons(spec->data[1] >> 16); in efx_farch_filter_to_gen_spec()
2189 if (spec->flags & EFX_FILTER_FLAG_TX) { in efx_farch_filter_to_gen_spec()
2215 gen_spec->loc_mac[0] = spec->data[2] >> 8; in efx_farch_filter_to_gen_spec()
2216 gen_spec->loc_mac[1] = spec->data[2]; in efx_farch_filter_to_gen_spec()
2217 gen_spec->loc_mac[2] = spec->data[1] >> 24; in efx_farch_filter_to_gen_spec()
2218 gen_spec->loc_mac[3] = spec->data[1] >> 16; in efx_farch_filter_to_gen_spec()
2219 gen_spec->loc_mac[4] = spec->data[1] >> 8; in efx_farch_filter_to_gen_spec()
2220 gen_spec->loc_mac[5] = spec->data[1]; in efx_farch_filter_to_gen_spec()
2221 gen_spec->outer_vid = htons(spec->data[0]); in efx_farch_filter_to_gen_spec()
2227 gen_spec->loc_mac[0] = spec->type == EFX_FARCH_FILTER_MC_DEF; in efx_farch_filter_to_gen_spec()
2238 struct efx_farch_filter_spec *spec) in efx_farch_filter_init_rx_auto() argument
2243 spec->priority = EFX_FILTER_PRI_AUTO; in efx_farch_filter_init_rx_auto()
2244 spec->flags = (EFX_FILTER_FLAG_RX | in efx_farch_filter_init_rx_auto()
2247 spec->dmaq_id = 0; in efx_farch_filter_init_rx_auto()
2252 struct efx_farch_filter_spec *spec) in efx_farch_filter_build() argument
2256 switch (efx_farch_filter_spec_table_id(spec)) { in efx_farch_filter_build()
2258 bool is_udp = (spec->type == EFX_FARCH_FILTER_UDP_FULL || in efx_farch_filter_build()
2259 spec->type == EFX_FARCH_FILTER_UDP_WILD); in efx_farch_filter_build()
2263 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS), in efx_farch_filter_build()
2265 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER), in efx_farch_filter_build()
2267 FRF_BZ_RXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2268 EFX_DWORD_2, spec->data[2], in efx_farch_filter_build()
2269 EFX_DWORD_1, spec->data[1], in efx_farch_filter_build()
2270 EFX_DWORD_0, spec->data[0]); in efx_farch_filter_build()
2276 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD; in efx_farch_filter_build()
2280 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS), in efx_farch_filter_build()
2282 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER), in efx_farch_filter_build()
2283 FRF_CZ_RMFT_RXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2285 FRF_CZ_RMFT_DEST_MAC_HI, spec->data[2], in efx_farch_filter_build()
2286 FRF_CZ_RMFT_DEST_MAC_LO, spec->data[1], in efx_farch_filter_build()
2287 FRF_CZ_RMFT_VLAN_ID, spec->data[0]); in efx_farch_filter_build()
2293 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD; in efx_farch_filter_build()
2295 FRF_CZ_TMFT_TXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2297 FRF_CZ_TMFT_SRC_MAC_HI, spec->data[2], in efx_farch_filter_build()
2298 FRF_CZ_TMFT_SRC_MAC_LO, spec->data[1], in efx_farch_filter_build()
2299 FRF_CZ_TMFT_VLAN_ID, spec->data[0]); in efx_farch_filter_build()
2300 data3 = is_wild | spec->dmaq_id << 1; in efx_farch_filter_build()
2308 return spec->data[0] ^ spec->data[1] ^ spec->data[2] ^ data3; in efx_farch_filter_build()
2361 efx_farch_filter_make_id(const struct efx_farch_filter_spec *spec, in efx_farch_filter_make_id() argument
2366 range = efx_farch_filter_type_match_pri[spec->type]; in efx_farch_filter_make_id()
2367 if (!(spec->flags & EFX_FILTER_FLAG_RX)) in efx_farch_filter_make_id()
2411 struct efx_farch_filter_spec spec; in efx_farch_filter_insert() local
2417 rc = efx_farch_filter_from_gen_spec(&spec, gen_spec); in efx_farch_filter_insert()
2421 table = &state->table[efx_farch_filter_spec_table_id(&spec)]; in efx_farch_filter_insert()
2426 "%s: type %d search_limit=%d", __func__, spec.type, in efx_farch_filter_insert()
2427 table->search_limit[spec.type]); in efx_farch_filter_insert()
2434 rep_index = spec.type - EFX_FARCH_FILTER_UC_DEF; in efx_farch_filter_insert()
2454 u32 key = efx_farch_filter_build(&filter, &spec); in efx_farch_filter_insert()
2457 unsigned int max_rep_depth = table->search_limit[spec.type]; in efx_farch_filter_insert()
2459 spec.priority <= EFX_FILTER_PRI_HINT ? in efx_farch_filter_insert()
2473 } else if (efx_farch_filter_equal(&spec, in efx_farch_filter_insert()
2474 &table->spec[i])) { in efx_farch_filter_insert()
2503 &table->spec[rep_index]; in efx_farch_filter_insert()
2505 if (spec.priority == saved_spec->priority && !replace_equal) { in efx_farch_filter_insert()
2509 if (spec.priority < saved_spec->priority) { in efx_farch_filter_insert()
2515 spec.flags |= EFX_FILTER_FLAG_RX_OVER_AUTO; in efx_farch_filter_insert()
2523 table->spec[ins_index] = spec; in efx_farch_filter_insert()
2528 if (table->search_limit[spec.type] < depth) { in efx_farch_filter_insert()
2529 table->search_limit[spec.type] = depth; in efx_farch_filter_insert()
2530 if (spec.flags & EFX_FILTER_FLAG_TX) in efx_farch_filter_insert()
2549 __func__, spec.type, ins_index, spec.dmaq_id); in efx_farch_filter_insert()
2550 rc = efx_farch_filter_make_id(&spec, ins_index); in efx_farch_filter_insert()
2569 memset(&table->spec[filter_idx], 0, sizeof(table->spec[0])); in efx_farch_filter_table_clear_entry()
2593 struct efx_farch_filter_spec *spec = &table->spec[filter_idx]; in efx_farch_filter_remove() local
2596 spec->priority != priority) in efx_farch_filter_remove()
2599 if (spec->flags & EFX_FILTER_FLAG_RX_OVER_AUTO) { in efx_farch_filter_remove()
2600 efx_farch_filter_init_rx_auto(efx, spec); in efx_farch_filter_remove()
2617 struct efx_farch_filter_spec *spec; in efx_farch_filter_remove_safe() local
2628 spec = &table->spec[filter_idx]; in efx_farch_filter_remove_safe()
2644 struct efx_farch_filter_spec *spec; in efx_farch_filter_get_safe() local
2656 spec = &table->spec[filter_idx]; in efx_farch_filter_get_safe()
2661 spec->priority == priority) { in efx_farch_filter_get_safe()
2662 efx_farch_filter_to_gen_spec(spec_buf, spec); in efx_farch_filter_get_safe()
2684 if (table->spec[filter_idx].priority != EFX_FILTER_PRI_AUTO) in efx_farch_filter_table_clear()
2720 table->spec[filter_idx].priority == priority) in efx_farch_filter_count_rx_used()
2748 table->spec[filter_idx].priority == priority) { in efx_farch_filter_get_rx_ids()
2754 &table->spec[filter_idx], filter_idx); in efx_farch_filter_get_rx_ids()
2785 efx_farch_filter_build(&filter, &table->spec[filter_idx]); in efx_farch_filter_table_restore()
2804 vfree(state->table[table_id].spec); in efx_farch_filter_table_remove()
2855 table->spec = vzalloc(table->size * sizeof(*table->spec)); in efx_farch_filter_table_probe()
2856 if (!table->spec) in efx_farch_filter_table_probe()
2863 struct efx_farch_filter_spec *spec; in efx_farch_filter_table_probe() local
2867 spec = &table->spec[i]; in efx_farch_filter_table_probe()
2868 spec->type = EFX_FARCH_FILTER_UC_DEF + i; in efx_farch_filter_table_probe()
2869 efx_farch_filter_init_rx_auto(efx, spec); in efx_farch_filter_table_probe()
2901 table->spec[filter_idx].dmaq_id >= in efx_farch_filter_update_rx_scatter()
2906 table->spec[filter_idx].flags |= in efx_farch_filter_update_rx_scatter()
2909 table->spec[filter_idx].flags &= in efx_farch_filter_update_rx_scatter()
2916 efx_farch_filter_build(&filter, &table->spec[filter_idx]); in efx_farch_filter_update_rx_scatter()
2943 table->spec[index].priority == EFX_FILTER_PRI_HINT && in efx_farch_filter_rfs_expire_one()
2944 rps_may_expire_flow(efx->net_dev, table->spec[index].dmaq_id, in efx_farch_filter_rfs_expire_one()