Lines Matching refs:spec

1873 	struct efx_farch_filter_spec *spec;  member
1911 efx_farch_filter_spec_table_id(const struct efx_farch_filter_spec *spec) in efx_farch_filter_spec_table_id() argument
1927 return (spec->type >> 2) + ((spec->flags & EFX_FILTER_FLAG_TX) ? 2 : 0); in efx_farch_filter_spec_table_id()
1968 table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].dmaq_id); in efx_farch_filter_push_rx_config()
1971 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags & in efx_farch_filter_push_rx_config()
1975 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].dmaq_id); in efx_farch_filter_push_rx_config()
1978 !!(table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags & in efx_farch_filter_push_rx_config()
1987 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags & in efx_farch_filter_push_rx_config()
1988 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags & in efx_farch_filter_push_rx_config()
2028 efx_farch_filter_from_gen_spec(struct efx_farch_filter_spec *spec, in efx_farch_filter_from_gen_spec() argument
2036 spec->priority = gen_spec->priority; in efx_farch_filter_from_gen_spec()
2037 spec->flags = gen_spec->flags; in efx_farch_filter_from_gen_spec()
2038 spec->dmaq_id = gen_spec->dmaq_id; in efx_farch_filter_from_gen_spec()
2060 spec->type = (is_full ? EFX_FARCH_FILTER_TCP_FULL : in efx_farch_filter_from_gen_spec()
2064 spec->type = (is_full ? EFX_FARCH_FILTER_UDP_FULL : in efx_farch_filter_from_gen_spec()
2087 spec->data[0] = ntohl(host1) << 16 | ntohs(port1); in efx_farch_filter_from_gen_spec()
2088 spec->data[1] = ntohs(port2) << 16 | ntohl(host1) >> 16; in efx_farch_filter_from_gen_spec()
2089 spec->data[2] = ntohl(host2); in efx_farch_filter_from_gen_spec()
2098 spec->type = (is_full ? EFX_FARCH_FILTER_MAC_FULL : in efx_farch_filter_from_gen_spec()
2100 spec->data[0] = is_full ? ntohs(gen_spec->outer_vid) : 0; in efx_farch_filter_from_gen_spec()
2101 spec->data[1] = (gen_spec->loc_mac[2] << 24 | in efx_farch_filter_from_gen_spec()
2105 spec->data[2] = (gen_spec->loc_mac[0] << 8 | in efx_farch_filter_from_gen_spec()
2110 spec->type = (is_multicast_ether_addr(gen_spec->loc_mac) ? in efx_farch_filter_from_gen_spec()
2113 memset(spec->data, 0, sizeof(spec->data)); /* ensure equality */ in efx_farch_filter_from_gen_spec()
2125 const struct efx_farch_filter_spec *spec) in efx_farch_filter_to_gen_spec() argument
2135 gen_spec->priority = spec->priority; in efx_farch_filter_to_gen_spec()
2136 gen_spec->flags = spec->flags; in efx_farch_filter_to_gen_spec()
2137 gen_spec->dmaq_id = spec->dmaq_id; in efx_farch_filter_to_gen_spec()
2139 switch (spec->type) { in efx_farch_filter_to_gen_spec()
2158 (spec->type == EFX_FARCH_FILTER_TCP_FULL || in efx_farch_filter_to_gen_spec()
2159 spec->type == EFX_FARCH_FILTER_TCP_WILD) ? in efx_farch_filter_to_gen_spec()
2162 host1 = htonl(spec->data[0] >> 16 | spec->data[1] << 16); in efx_farch_filter_to_gen_spec()
2163 port1 = htons(spec->data[0]); in efx_farch_filter_to_gen_spec()
2164 host2 = htonl(spec->data[2]); in efx_farch_filter_to_gen_spec()
2165 port2 = htons(spec->data[1] >> 16); in efx_farch_filter_to_gen_spec()
2166 if (spec->flags & EFX_FILTER_FLAG_TX) { in efx_farch_filter_to_gen_spec()
2192 gen_spec->loc_mac[0] = spec->data[2] >> 8; in efx_farch_filter_to_gen_spec()
2193 gen_spec->loc_mac[1] = spec->data[2]; in efx_farch_filter_to_gen_spec()
2194 gen_spec->loc_mac[2] = spec->data[1] >> 24; in efx_farch_filter_to_gen_spec()
2195 gen_spec->loc_mac[3] = spec->data[1] >> 16; in efx_farch_filter_to_gen_spec()
2196 gen_spec->loc_mac[4] = spec->data[1] >> 8; in efx_farch_filter_to_gen_spec()
2197 gen_spec->loc_mac[5] = spec->data[1]; in efx_farch_filter_to_gen_spec()
2198 gen_spec->outer_vid = htons(spec->data[0]); in efx_farch_filter_to_gen_spec()
2204 gen_spec->loc_mac[0] = spec->type == EFX_FARCH_FILTER_MC_DEF; in efx_farch_filter_to_gen_spec()
2215 struct efx_farch_filter_spec *spec) in efx_farch_filter_init_rx_auto() argument
2220 spec->priority = EFX_FILTER_PRI_AUTO; in efx_farch_filter_init_rx_auto()
2221 spec->flags = (EFX_FILTER_FLAG_RX | in efx_farch_filter_init_rx_auto()
2224 spec->dmaq_id = 0; in efx_farch_filter_init_rx_auto()
2229 struct efx_farch_filter_spec *spec) in efx_farch_filter_build() argument
2233 switch (efx_farch_filter_spec_table_id(spec)) { in efx_farch_filter_build()
2235 bool is_udp = (spec->type == EFX_FARCH_FILTER_UDP_FULL || in efx_farch_filter_build()
2236 spec->type == EFX_FARCH_FILTER_UDP_WILD); in efx_farch_filter_build()
2240 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS), in efx_farch_filter_build()
2242 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER), in efx_farch_filter_build()
2244 FRF_BZ_RXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2245 EFX_DWORD_2, spec->data[2], in efx_farch_filter_build()
2246 EFX_DWORD_1, spec->data[1], in efx_farch_filter_build()
2247 EFX_DWORD_0, spec->data[0]); in efx_farch_filter_build()
2253 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD; in efx_farch_filter_build()
2257 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS), in efx_farch_filter_build()
2259 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER), in efx_farch_filter_build()
2260 FRF_CZ_RMFT_RXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2262 FRF_CZ_RMFT_DEST_MAC_HI, spec->data[2], in efx_farch_filter_build()
2263 FRF_CZ_RMFT_DEST_MAC_LO, spec->data[1], in efx_farch_filter_build()
2264 FRF_CZ_RMFT_VLAN_ID, spec->data[0]); in efx_farch_filter_build()
2270 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD; in efx_farch_filter_build()
2272 FRF_CZ_TMFT_TXQ_ID, spec->dmaq_id, in efx_farch_filter_build()
2274 FRF_CZ_TMFT_SRC_MAC_HI, spec->data[2], in efx_farch_filter_build()
2275 FRF_CZ_TMFT_SRC_MAC_LO, spec->data[1], in efx_farch_filter_build()
2276 FRF_CZ_TMFT_VLAN_ID, spec->data[0]); in efx_farch_filter_build()
2277 data3 = is_wild | spec->dmaq_id << 1; in efx_farch_filter_build()
2285 return spec->data[0] ^ spec->data[1] ^ spec->data[2] ^ data3; in efx_farch_filter_build()
2338 efx_farch_filter_make_id(const struct efx_farch_filter_spec *spec, in efx_farch_filter_make_id() argument
2343 range = efx_farch_filter_type_match_pri[spec->type]; in efx_farch_filter_make_id()
2344 if (!(spec->flags & EFX_FILTER_FLAG_RX)) in efx_farch_filter_make_id()
2388 struct efx_farch_filter_spec spec; in efx_farch_filter_insert() local
2394 rc = efx_farch_filter_from_gen_spec(&spec, gen_spec); in efx_farch_filter_insert()
2400 table = &state->table[efx_farch_filter_spec_table_id(&spec)]; in efx_farch_filter_insert()
2407 "%s: type %d search_limit=%d", __func__, spec.type, in efx_farch_filter_insert()
2408 table->search_limit[spec.type]); in efx_farch_filter_insert()
2415 rep_index = spec.type - EFX_FARCH_FILTER_UC_DEF; in efx_farch_filter_insert()
2433 u32 key = efx_farch_filter_build(&filter, &spec); in efx_farch_filter_insert()
2436 unsigned int max_rep_depth = table->search_limit[spec.type]; in efx_farch_filter_insert()
2438 spec.priority <= EFX_FILTER_PRI_HINT ? in efx_farch_filter_insert()
2450 } else if (efx_farch_filter_equal(&spec, in efx_farch_filter_insert()
2451 &table->spec[i])) { in efx_farch_filter_insert()
2480 &table->spec[rep_index]; in efx_farch_filter_insert()
2482 if (spec.priority == saved_spec->priority && !replace_equal) { in efx_farch_filter_insert()
2486 if (spec.priority < saved_spec->priority) { in efx_farch_filter_insert()
2492 spec.flags |= EFX_FILTER_FLAG_RX_OVER_AUTO; in efx_farch_filter_insert()
2500 table->spec[ins_index] = spec; in efx_farch_filter_insert()
2505 if (table->search_limit[spec.type] < depth) { in efx_farch_filter_insert()
2506 table->search_limit[spec.type] = depth; in efx_farch_filter_insert()
2507 if (spec.flags & EFX_FILTER_FLAG_TX) in efx_farch_filter_insert()
2526 __func__, spec.type, ins_index, spec.dmaq_id); in efx_farch_filter_insert()
2527 rc = efx_farch_filter_make_id(&spec, ins_index); in efx_farch_filter_insert()
2546 memset(&table->spec[filter_idx], 0, sizeof(table->spec[0])); in efx_farch_filter_table_clear_entry()
2570 struct efx_farch_filter_spec *spec = &table->spec[filter_idx]; in efx_farch_filter_remove() local
2573 spec->priority != priority) in efx_farch_filter_remove()
2576 if (spec->flags & EFX_FILTER_FLAG_RX_OVER_AUTO) { in efx_farch_filter_remove()
2577 efx_farch_filter_init_rx_auto(efx, spec); in efx_farch_filter_remove()
2594 struct efx_farch_filter_spec *spec; in efx_farch_filter_remove_safe() local
2606 spec = &table->spec[filter_idx]; in efx_farch_filter_remove_safe()
2621 struct efx_farch_filter_spec *spec; in efx_farch_filter_get_safe() local
2635 spec = &table->spec[filter_idx]; in efx_farch_filter_get_safe()
2638 spec->priority == priority) { in efx_farch_filter_get_safe()
2639 efx_farch_filter_to_gen_spec(spec_buf, spec); in efx_farch_filter_get_safe()
2659 if (table->spec[filter_idx].priority != EFX_FILTER_PRI_AUTO) in efx_farch_filter_table_clear()
2695 table->spec[filter_idx].priority == priority) in efx_farch_filter_count_rx_used()
2723 table->spec[filter_idx].priority == priority) { in efx_farch_filter_get_rx_ids()
2729 &table->spec[filter_idx], filter_idx); in efx_farch_filter_get_rx_ids()
2760 efx_farch_filter_build(&filter, &table->spec[filter_idx]); in efx_farch_filter_table_restore()
2779 vfree(state->table[table_id].spec); in efx_farch_filter_table_remove()
2827 table->spec = vzalloc(array_size(sizeof(*table->spec), in efx_farch_filter_table_probe()
2829 if (!table->spec) in efx_farch_filter_table_probe()
2836 struct efx_farch_filter_spec *spec; in efx_farch_filter_table_probe() local
2840 spec = &table->spec[i]; in efx_farch_filter_table_probe()
2841 spec->type = EFX_FARCH_FILTER_UC_DEF + i; in efx_farch_filter_table_probe()
2842 efx_farch_filter_init_rx_auto(efx, spec); in efx_farch_filter_table_probe()
2874 table->spec[filter_idx].dmaq_id >= in efx_farch_filter_update_rx_scatter()
2879 table->spec[filter_idx].flags |= in efx_farch_filter_update_rx_scatter()
2882 table->spec[filter_idx].flags &= in efx_farch_filter_update_rx_scatter()
2889 efx_farch_filter_build(&filter, &table->spec[filter_idx]); in efx_farch_filter_update_rx_scatter()
2914 table->spec[index].priority == EFX_FILTER_PRI_HINT) { in efx_farch_filter_rfs_expire_one()
2916 struct efx_filter_spec spec; in efx_farch_filter_rfs_expire_one() local
2918 efx_farch_filter_to_gen_spec(&spec, &table->spec[index]); in efx_farch_filter_rfs_expire_one()
2925 rule = efx_rps_hash_find(efx, &spec); in efx_farch_filter_rfs_expire_one()
2935 if (force || rps_may_expire_flow(efx->net_dev, spec.dmaq_id, in efx_farch_filter_rfs_expire_one()
2939 efx_rps_hash_del(efx, &spec); in efx_farch_filter_rfs_expire_one()