Lines Matching refs:spec
1878 struct efx_farch_filter_spec *spec; member
1915 efx_farch_filter_spec_table_id(const struct efx_farch_filter_spec *spec) in efx_farch_filter_spec_table_id() argument
1931 return (spec->type >> 2) + ((spec->flags & EFX_FILTER_FLAG_TX) ? 2 : 0); in efx_farch_filter_spec_table_id()
1972 table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].dmaq_id); in efx_farch_filter_push_rx_config()
1975 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags & in efx_farch_filter_push_rx_config()
1979 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].dmaq_id); in efx_farch_filter_push_rx_config()
1982 !!(table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags & in efx_farch_filter_push_rx_config()
1991 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags & in efx_farch_filter_push_rx_config()
1992 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags & in efx_farch_filter_push_rx_config()
2032 efx_farch_filter_from_gen_spec(struct efx_farch_filter_spec *spec, in efx_farch_filter_from_gen_spec() argument
2041 spec->priority = gen_spec->priority; in efx_farch_filter_from_gen_spec()
2042 spec->flags = gen_spec->flags; in efx_farch_filter_from_gen_spec()
2043 spec->dmaq_id = gen_spec->dmaq_id; in efx_farch_filter_from_gen_spec()
2065 spec->type = (is_full ? EFX_FARCH_FILTER_TCP_FULL : in efx_farch_filter_from_gen_spec()
2069 spec->type = (is_full ? EFX_FARCH_FILTER_UDP_FULL : in efx_farch_filter_from_gen_spec()
2092 spec->data[0] = ntohl(host1) << 16 | ntohs(port1); in efx_farch_filter_from_gen_spec()
2093 spec->data[1] = ntohs(port2) << 16 | ntohl(host1) >> 16; in efx_farch_filter_from_gen_spec()
2094 spec->data[2] = ntohl(host2); in efx_farch_filter_from_gen_spec()
2103 spec->type = (is_full ? EFX_FARCH_FILTER_MAC_FULL : in efx_farch_filter_from_gen_spec()
2105 spec->data[0] = is_full ? ntohs(gen_spec->outer_vid) : 0; in efx_farch_filter_from_gen_spec()
2106 spec->data[1] = (gen_spec->loc_mac[2] << 24 | in efx_farch_filter_from_gen_spec()
2110 spec->data[2] = (gen_spec->loc_mac[0] << 8 | in efx_farch_filter_from_gen_spec()
2115 spec->type = (is_multicast_ether_addr(gen_spec->loc_mac) ? in efx_farch_filter_from_gen_spec()
2118 memset(spec->data, 0, sizeof(spec->data)); /* ensure equality */ in efx_farch_filter_from_gen_spec()
2130 const struct efx_farch_filter_spec *spec) in efx_farch_filter_to_gen_spec() argument
2140 gen_spec->priority = spec->priority; in efx_farch_filter_to_gen_spec()
2141 gen_spec->flags = spec->flags; in efx_farch_filter_to_gen_spec()
2142 gen_spec->dmaq_id = spec->dmaq_id; in efx_farch_filter_to_gen_spec()
2144 switch (spec->type) { in efx_farch_filter_to_gen_spec()
2163 (spec->type == EFX_FARCH_FILTER_TCP_FULL || in efx_farch_filter_to_gen_spec()
2164 spec->type == EFX_FARCH_FILTER_TCP_WILD) ? in efx_farch_filter_to_gen_spec()
2167 host1 = htonl(spec->data[0] >> 16 | spec->data[1] << 16); in efx_farch_filter_to_gen_spec()
2168 port1 = htons(spec->data[0]); in efx_farch_filter_to_gen_spec()
2169 host2 = htonl(spec->data[2]); in efx_farch_filter_to_gen_spec()
2170 port2 = htons(spec->data[1] >> 16); in efx_farch_filter_to_gen_spec()
2171 if (spec->flags & EFX_FILTER_FLAG_TX) { in efx_farch_filter_to_gen_spec()
2197 gen_spec->loc_mac[0] = spec->data[2] >> 8; in efx_farch_filter_to_gen_spec()
2198 gen_spec->loc_mac[1] = spec->data[2]; in efx_farch_filter_to_gen_spec()
2199 gen_spec->loc_mac[2] = spec->data[1] >> 24; in efx_farch_filter_to_gen_spec()
2200 gen_spec->loc_mac[3] = spec->data[1] >> 16; in efx_farch_filter_to_gen_spec()
2201 gen_spec->loc_mac[4] = spec->data[1] >> 8; in efx_farch_filter_to_gen_spec()
2202 gen_spec->loc_mac[5] = spec->data[1]; in efx_farch_filter_to_gen_spec()
2203 gen_spec->outer_vid = htons(spec->data[0]); in efx_farch_filter_to_gen_spec()
2209 gen_spec->loc_mac[0] = spec->type == EFX_FARCH_FILTER_MC_DEF; in efx_farch_filter_to_gen_spec()
2220 struct efx_farch_filter_spec *spec) in efx_farch_filter_init_rx_auto() argument
2225 spec->priority = EFX_FILTER_PRI_AUTO; in efx_farch_filter_init_rx_auto()
2226 spec->flags = (EFX_FILTER_FLAG_RX | in efx_farch_filter_init_rx_auto()
2229 spec->dmaq_id = 0; in efx_farch_filter_init_rx_auto()
2234 struct efx_farch_filter_spec *spec) in efx_farch_filter_build() argument
2238 switch (efx_farch_filter_spec_table_id(spec)) { in efx_farch_filter_build()
2240 bool is_udp = (spec->type == EFX_FARCH_FILTER_UDP_FULL || in efx_farch_filter_build()
2241 spec->type == EFX_FARCH_FILTER_UDP_WILD); in efx_farch_filter_build()
2245 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS), in efx_farch_filter_build()
2247 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER), in efx_farch_filter_build()
2249 FRF_BZ_RXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2250 EFX_DWORD_2, spec->data[2], in efx_farch_filter_build()
2251 EFX_DWORD_1, spec->data[1], in efx_farch_filter_build()
2252 EFX_DWORD_0, spec->data[0]); in efx_farch_filter_build()
2258 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD; in efx_farch_filter_build()
2262 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS), in efx_farch_filter_build()
2264 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER), in efx_farch_filter_build()
2265 FRF_CZ_RMFT_RXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2267 FRF_CZ_RMFT_DEST_MAC_HI, spec->data[2], in efx_farch_filter_build()
2268 FRF_CZ_RMFT_DEST_MAC_LO, spec->data[1], in efx_farch_filter_build()
2269 FRF_CZ_RMFT_VLAN_ID, spec->data[0]); in efx_farch_filter_build()
2275 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD; in efx_farch_filter_build()
2277 FRF_CZ_TMFT_TXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2279 FRF_CZ_TMFT_SRC_MAC_HI, spec->data[2], in efx_farch_filter_build()
2280 FRF_CZ_TMFT_SRC_MAC_LO, spec->data[1], in efx_farch_filter_build()
2281 FRF_CZ_TMFT_VLAN_ID, spec->data[0]); in efx_farch_filter_build()
2282 data3 = is_wild | spec->dmaq_id << 1; in efx_farch_filter_build()
2290 return spec->data[0] ^ spec->data[1] ^ spec->data[2] ^ data3; in efx_farch_filter_build()
2343 efx_farch_filter_make_id(const struct efx_farch_filter_spec *spec, in efx_farch_filter_make_id() argument
2348 range = efx_farch_filter_type_match_pri[spec->type]; in efx_farch_filter_make_id()
2349 if (!(spec->flags & EFX_FILTER_FLAG_RX)) in efx_farch_filter_make_id()
2393 struct efx_farch_filter_spec spec; in efx_farch_filter_insert() local
2399 rc = efx_farch_filter_from_gen_spec(&spec, gen_spec); in efx_farch_filter_insert()
2403 table = &state->table[efx_farch_filter_spec_table_id(&spec)]; in efx_farch_filter_insert()
2408 "%s: type %d search_limit=%d", __func__, spec.type, in efx_farch_filter_insert()
2409 table->search_limit[spec.type]); in efx_farch_filter_insert()
2416 rep_index = spec.type - EFX_FARCH_FILTER_UC_DEF; in efx_farch_filter_insert()
2436 u32 key = efx_farch_filter_build(&filter, &spec); in efx_farch_filter_insert()
2439 unsigned int max_rep_depth = table->search_limit[spec.type]; in efx_farch_filter_insert()
2441 spec.priority <= EFX_FILTER_PRI_HINT ? in efx_farch_filter_insert()
2455 } else if (efx_farch_filter_equal(&spec, in efx_farch_filter_insert()
2456 &table->spec[i])) { in efx_farch_filter_insert()
2485 &table->spec[rep_index]; in efx_farch_filter_insert()
2487 if (spec.priority == saved_spec->priority && !replace_equal) { in efx_farch_filter_insert()
2491 if (spec.priority < saved_spec->priority) { in efx_farch_filter_insert()
2497 spec.flags |= EFX_FILTER_FLAG_RX_OVER_AUTO; in efx_farch_filter_insert()
2505 table->spec[ins_index] = spec; in efx_farch_filter_insert()
2510 if (table->search_limit[spec.type] < depth) { in efx_farch_filter_insert()
2511 table->search_limit[spec.type] = depth; in efx_farch_filter_insert()
2512 if (spec.flags & EFX_FILTER_FLAG_TX) in efx_farch_filter_insert()
2531 __func__, spec.type, ins_index, spec.dmaq_id); in efx_farch_filter_insert()
2532 rc = efx_farch_filter_make_id(&spec, ins_index); in efx_farch_filter_insert()
2551 memset(&table->spec[filter_idx], 0, sizeof(table->spec[0])); in efx_farch_filter_table_clear_entry()
2575 struct efx_farch_filter_spec *spec = &table->spec[filter_idx]; in efx_farch_filter_remove() local
2578 spec->priority != priority) in efx_farch_filter_remove()
2581 if (spec->flags & EFX_FILTER_FLAG_RX_OVER_AUTO) { in efx_farch_filter_remove()
2582 efx_farch_filter_init_rx_auto(efx, spec); in efx_farch_filter_remove()
2599 struct efx_farch_filter_spec *spec; in efx_farch_filter_remove_safe() local
2610 spec = &table->spec[filter_idx]; in efx_farch_filter_remove_safe()
2626 struct efx_farch_filter_spec *spec; in efx_farch_filter_get_safe() local
2638 spec = &table->spec[filter_idx]; in efx_farch_filter_get_safe()
2643 spec->priority == priority) { in efx_farch_filter_get_safe()
2644 efx_farch_filter_to_gen_spec(spec_buf, spec); in efx_farch_filter_get_safe()
2666 if (table->spec[filter_idx].priority != EFX_FILTER_PRI_AUTO) in efx_farch_filter_table_clear()
2702 table->spec[filter_idx].priority == priority) in efx_farch_filter_count_rx_used()
2730 table->spec[filter_idx].priority == priority) { in efx_farch_filter_get_rx_ids()
2736 &table->spec[filter_idx], filter_idx); in efx_farch_filter_get_rx_ids()
2767 efx_farch_filter_build(&filter, &table->spec[filter_idx]); in efx_farch_filter_table_restore()
2786 vfree(state->table[table_id].spec); in efx_farch_filter_table_remove()
2837 table->spec = vzalloc(table->size * sizeof(*table->spec)); in efx_farch_filter_table_probe()
2838 if (!table->spec) in efx_farch_filter_table_probe()
2845 struct efx_farch_filter_spec *spec; in efx_farch_filter_table_probe() local
2849 spec = &table->spec[i]; in efx_farch_filter_table_probe()
2850 spec->type = EFX_FARCH_FILTER_UC_DEF + i; in efx_farch_filter_table_probe()
2851 efx_farch_filter_init_rx_auto(efx, spec); in efx_farch_filter_table_probe()
2883 table->spec[filter_idx].dmaq_id >= in efx_farch_filter_update_rx_scatter()
2888 table->spec[filter_idx].flags |= in efx_farch_filter_update_rx_scatter()
2891 table->spec[filter_idx].flags &= in efx_farch_filter_update_rx_scatter()
2898 efx_farch_filter_build(&filter, &table->spec[filter_idx]); in efx_farch_filter_update_rx_scatter()
2925 table->spec[index].priority == EFX_FILTER_PRI_HINT && in efx_farch_filter_rfs_expire_one()
2926 rps_may_expire_flow(efx->net_dev, table->spec[index].dmaq_id, in efx_farch_filter_rfs_expire_one()