Lines Matching refs:spec

1876 	struct efx_farch_filter_spec *spec;  member
1914 efx_farch_filter_spec_table_id(const struct efx_farch_filter_spec *spec) in efx_farch_filter_spec_table_id() argument
1930 return (spec->type >> 2) + ((spec->flags & EFX_FILTER_FLAG_TX) ? 2 : 0); in efx_farch_filter_spec_table_id()
1971 table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].dmaq_id); in efx_farch_filter_push_rx_config()
1974 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags & in efx_farch_filter_push_rx_config()
1978 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].dmaq_id); in efx_farch_filter_push_rx_config()
1981 !!(table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags & in efx_farch_filter_push_rx_config()
1990 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags & in efx_farch_filter_push_rx_config()
1991 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags & in efx_farch_filter_push_rx_config()
2031 efx_farch_filter_from_gen_spec(struct efx_farch_filter_spec *spec, in efx_farch_filter_from_gen_spec() argument
2039 spec->priority = gen_spec->priority; in efx_farch_filter_from_gen_spec()
2040 spec->flags = gen_spec->flags; in efx_farch_filter_from_gen_spec()
2041 spec->dmaq_id = gen_spec->dmaq_id; in efx_farch_filter_from_gen_spec()
2063 spec->type = (is_full ? EFX_FARCH_FILTER_TCP_FULL : in efx_farch_filter_from_gen_spec()
2067 spec->type = (is_full ? EFX_FARCH_FILTER_UDP_FULL : in efx_farch_filter_from_gen_spec()
2090 spec->data[0] = ntohl(host1) << 16 | ntohs(port1); in efx_farch_filter_from_gen_spec()
2091 spec->data[1] = ntohs(port2) << 16 | ntohl(host1) >> 16; in efx_farch_filter_from_gen_spec()
2092 spec->data[2] = ntohl(host2); in efx_farch_filter_from_gen_spec()
2101 spec->type = (is_full ? EFX_FARCH_FILTER_MAC_FULL : in efx_farch_filter_from_gen_spec()
2103 spec->data[0] = is_full ? ntohs(gen_spec->outer_vid) : 0; in efx_farch_filter_from_gen_spec()
2104 spec->data[1] = (gen_spec->loc_mac[2] << 24 | in efx_farch_filter_from_gen_spec()
2108 spec->data[2] = (gen_spec->loc_mac[0] << 8 | in efx_farch_filter_from_gen_spec()
2113 spec->type = (is_multicast_ether_addr(gen_spec->loc_mac) ? in efx_farch_filter_from_gen_spec()
2116 memset(spec->data, 0, sizeof(spec->data)); /* ensure equality */ in efx_farch_filter_from_gen_spec()
2128 const struct efx_farch_filter_spec *spec) in efx_farch_filter_to_gen_spec() argument
2138 gen_spec->priority = spec->priority; in efx_farch_filter_to_gen_spec()
2139 gen_spec->flags = spec->flags; in efx_farch_filter_to_gen_spec()
2140 gen_spec->dmaq_id = spec->dmaq_id; in efx_farch_filter_to_gen_spec()
2142 switch (spec->type) { in efx_farch_filter_to_gen_spec()
2161 (spec->type == EFX_FARCH_FILTER_TCP_FULL || in efx_farch_filter_to_gen_spec()
2162 spec->type == EFX_FARCH_FILTER_TCP_WILD) ? in efx_farch_filter_to_gen_spec()
2165 host1 = htonl(spec->data[0] >> 16 | spec->data[1] << 16); in efx_farch_filter_to_gen_spec()
2166 port1 = htons(spec->data[0]); in efx_farch_filter_to_gen_spec()
2167 host2 = htonl(spec->data[2]); in efx_farch_filter_to_gen_spec()
2168 port2 = htons(spec->data[1] >> 16); in efx_farch_filter_to_gen_spec()
2169 if (spec->flags & EFX_FILTER_FLAG_TX) { in efx_farch_filter_to_gen_spec()
2195 gen_spec->loc_mac[0] = spec->data[2] >> 8; in efx_farch_filter_to_gen_spec()
2196 gen_spec->loc_mac[1] = spec->data[2]; in efx_farch_filter_to_gen_spec()
2197 gen_spec->loc_mac[2] = spec->data[1] >> 24; in efx_farch_filter_to_gen_spec()
2198 gen_spec->loc_mac[3] = spec->data[1] >> 16; in efx_farch_filter_to_gen_spec()
2199 gen_spec->loc_mac[4] = spec->data[1] >> 8; in efx_farch_filter_to_gen_spec()
2200 gen_spec->loc_mac[5] = spec->data[1]; in efx_farch_filter_to_gen_spec()
2201 gen_spec->outer_vid = htons(spec->data[0]); in efx_farch_filter_to_gen_spec()
2207 gen_spec->loc_mac[0] = spec->type == EFX_FARCH_FILTER_MC_DEF; in efx_farch_filter_to_gen_spec()
2218 struct efx_farch_filter_spec *spec) in efx_farch_filter_init_rx_auto() argument
2223 spec->priority = EFX_FILTER_PRI_AUTO; in efx_farch_filter_init_rx_auto()
2224 spec->flags = (EFX_FILTER_FLAG_RX | in efx_farch_filter_init_rx_auto()
2227 spec->dmaq_id = 0; in efx_farch_filter_init_rx_auto()
2232 struct efx_farch_filter_spec *spec) in efx_farch_filter_build() argument
2236 switch (efx_farch_filter_spec_table_id(spec)) { in efx_farch_filter_build()
2238 bool is_udp = (spec->type == EFX_FARCH_FILTER_UDP_FULL || in efx_farch_filter_build()
2239 spec->type == EFX_FARCH_FILTER_UDP_WILD); in efx_farch_filter_build()
2243 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS), in efx_farch_filter_build()
2245 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER), in efx_farch_filter_build()
2247 FRF_BZ_RXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2248 EFX_DWORD_2, spec->data[2], in efx_farch_filter_build()
2249 EFX_DWORD_1, spec->data[1], in efx_farch_filter_build()
2250 EFX_DWORD_0, spec->data[0]); in efx_farch_filter_build()
2256 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD; in efx_farch_filter_build()
2260 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS), in efx_farch_filter_build()
2262 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER), in efx_farch_filter_build()
2263 FRF_CZ_RMFT_RXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2265 FRF_CZ_RMFT_DEST_MAC_HI, spec->data[2], in efx_farch_filter_build()
2266 FRF_CZ_RMFT_DEST_MAC_LO, spec->data[1], in efx_farch_filter_build()
2267 FRF_CZ_RMFT_VLAN_ID, spec->data[0]); in efx_farch_filter_build()
2273 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD; in efx_farch_filter_build()
2275 FRF_CZ_TMFT_TXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2277 FRF_CZ_TMFT_SRC_MAC_HI, spec->data[2], in efx_farch_filter_build()
2278 FRF_CZ_TMFT_SRC_MAC_LO, spec->data[1], in efx_farch_filter_build()
2279 FRF_CZ_TMFT_VLAN_ID, spec->data[0]); in efx_farch_filter_build()
2280 data3 = is_wild | spec->dmaq_id << 1; in efx_farch_filter_build()
2288 return spec->data[0] ^ spec->data[1] ^ spec->data[2] ^ data3; in efx_farch_filter_build()
2341 efx_farch_filter_make_id(const struct efx_farch_filter_spec *spec, in efx_farch_filter_make_id() argument
2346 range = efx_farch_filter_type_match_pri[spec->type]; in efx_farch_filter_make_id()
2347 if (!(spec->flags & EFX_FILTER_FLAG_RX)) in efx_farch_filter_make_id()
2391 struct efx_farch_filter_spec spec; in efx_farch_filter_insert() local
2397 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()
2410 "%s: type %d search_limit=%d", __func__, spec.type, in efx_farch_filter_insert()
2411 table->search_limit[spec.type]); in efx_farch_filter_insert()
2418 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()
2453 } else if (efx_farch_filter_equal(&spec, in efx_farch_filter_insert()
2454 &table->spec[i])) { in efx_farch_filter_insert()
2483 &table->spec[rep_index]; in efx_farch_filter_insert()
2485 if (spec.priority == saved_spec->priority && !replace_equal) { in efx_farch_filter_insert()
2489 if (spec.priority < saved_spec->priority) { in efx_farch_filter_insert()
2495 spec.flags |= EFX_FILTER_FLAG_RX_OVER_AUTO; in efx_farch_filter_insert()
2503 table->spec[ins_index] = spec; in efx_farch_filter_insert()
2508 if (table->search_limit[spec.type] < depth) { in efx_farch_filter_insert()
2509 table->search_limit[spec.type] = depth; in efx_farch_filter_insert()
2510 if (spec.flags & EFX_FILTER_FLAG_TX) in efx_farch_filter_insert()
2529 __func__, spec.type, ins_index, spec.dmaq_id); in efx_farch_filter_insert()
2530 rc = efx_farch_filter_make_id(&spec, ins_index); in efx_farch_filter_insert()
2549 memset(&table->spec[filter_idx], 0, sizeof(table->spec[0])); in efx_farch_filter_table_clear_entry()
2573 struct efx_farch_filter_spec *spec = &table->spec[filter_idx]; in efx_farch_filter_remove() local
2576 spec->priority != priority) in efx_farch_filter_remove()
2579 if (spec->flags & EFX_FILTER_FLAG_RX_OVER_AUTO) { in efx_farch_filter_remove()
2580 efx_farch_filter_init_rx_auto(efx, spec); in efx_farch_filter_remove()
2597 struct efx_farch_filter_spec *spec; in efx_farch_filter_remove_safe() local
2609 spec = &table->spec[filter_idx]; in efx_farch_filter_remove_safe()
2624 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()
2641 spec->priority == priority) { in efx_farch_filter_get_safe()
2642 efx_farch_filter_to_gen_spec(spec_buf, spec); in efx_farch_filter_get_safe()
2662 if (table->spec[filter_idx].priority != EFX_FILTER_PRI_AUTO) in efx_farch_filter_table_clear()
2698 table->spec[filter_idx].priority == priority) in efx_farch_filter_count_rx_used()
2726 table->spec[filter_idx].priority == priority) { in efx_farch_filter_get_rx_ids()
2732 &table->spec[filter_idx], filter_idx); in efx_farch_filter_get_rx_ids()
2763 efx_farch_filter_build(&filter, &table->spec[filter_idx]); in efx_farch_filter_table_restore()
2782 vfree(state->table[table_id].spec); in efx_farch_filter_table_remove()
2830 table->spec = vzalloc(array_size(sizeof(*table->spec), in efx_farch_filter_table_probe()
2832 if (!table->spec) in efx_farch_filter_table_probe()
2839 struct efx_farch_filter_spec *spec; in efx_farch_filter_table_probe() local
2843 spec = &table->spec[i]; in efx_farch_filter_table_probe()
2844 spec->type = EFX_FARCH_FILTER_UC_DEF + i; in efx_farch_filter_table_probe()
2845 efx_farch_filter_init_rx_auto(efx, spec); in efx_farch_filter_table_probe()
2877 table->spec[filter_idx].dmaq_id >= in efx_farch_filter_update_rx_scatter()
2882 table->spec[filter_idx].flags |= in efx_farch_filter_update_rx_scatter()
2885 table->spec[filter_idx].flags &= in efx_farch_filter_update_rx_scatter()
2892 efx_farch_filter_build(&filter, &table->spec[filter_idx]); in efx_farch_filter_update_rx_scatter()
2917 table->spec[index].priority == EFX_FILTER_PRI_HINT) { in efx_farch_filter_rfs_expire_one()
2919 struct efx_filter_spec spec; in efx_farch_filter_rfs_expire_one() local
2921 efx_farch_filter_to_gen_spec(&spec, &table->spec[index]); in efx_farch_filter_rfs_expire_one()
2928 rule = efx_rps_hash_find(efx, &spec); in efx_farch_filter_rfs_expire_one()
2938 if (force || rps_may_expire_flow(efx->net_dev, spec.dmaq_id, in efx_farch_filter_rfs_expire_one()
2942 efx_rps_hash_del(efx, &spec); in efx_farch_filter_rfs_expire_one()