Lines Matching defs:spec
1875 struct efx_farch_filter_spec *spec;
1913 efx_farch_filter_spec_table_id(const struct efx_farch_filter_spec *spec)
1929 return (spec->type >> 2) + ((spec->flags & EFX_FILTER_FLAG_TX) ? 2 : 0);
1970 table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].dmaq_id);
1973 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags &
1977 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].dmaq_id);
1980 !!(table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags &
1989 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags &
1990 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags &
2030 efx_farch_filter_from_gen_spec(struct efx_farch_filter_spec *spec,
2038 spec->priority = gen_spec->priority;
2039 spec->flags = gen_spec->flags;
2040 spec->dmaq_id = gen_spec->dmaq_id;
2062 spec->type = (is_full ? EFX_FARCH_FILTER_TCP_FULL :
2066 spec->type = (is_full ? EFX_FARCH_FILTER_UDP_FULL :
2089 spec->data[0] = ntohl(host1) << 16 | ntohs(port1);
2090 spec->data[1] = ntohs(port2) << 16 | ntohl(host1) >> 16;
2091 spec->data[2] = ntohl(host2);
2100 spec->type = (is_full ? EFX_FARCH_FILTER_MAC_FULL :
2102 spec->data[0] = is_full ? ntohs(gen_spec->outer_vid) : 0;
2103 spec->data[1] = (gen_spec->loc_mac[2] << 24 |
2107 spec->data[2] = (gen_spec->loc_mac[0] << 8 |
2112 spec->type = (is_multicast_ether_addr(gen_spec->loc_mac) ?
2115 memset(spec->data, 0, sizeof(spec->data)); /* ensure equality */
2127 const struct efx_farch_filter_spec *spec)
2137 gen_spec->priority = spec->priority;
2138 gen_spec->flags = spec->flags;
2139 gen_spec->dmaq_id = spec->dmaq_id;
2141 switch (spec->type) {
2160 (spec->type == EFX_FARCH_FILTER_TCP_FULL ||
2161 spec->type == EFX_FARCH_FILTER_TCP_WILD) ?
2164 host1 = htonl(spec->data[0] >> 16 | spec->data[1] << 16);
2165 port1 = htons(spec->data[0]);
2166 host2 = htonl(spec->data[2]);
2167 port2 = htons(spec->data[1] >> 16);
2168 if (spec->flags & EFX_FILTER_FLAG_TX) {
2194 gen_spec->loc_mac[0] = spec->data[2] >> 8;
2195 gen_spec->loc_mac[1] = spec->data[2];
2196 gen_spec->loc_mac[2] = spec->data[1] >> 24;
2197 gen_spec->loc_mac[3] = spec->data[1] >> 16;
2198 gen_spec->loc_mac[4] = spec->data[1] >> 8;
2199 gen_spec->loc_mac[5] = spec->data[1];
2200 gen_spec->outer_vid = htons(spec->data[0]);
2206 gen_spec->loc_mac[0] = spec->type == EFX_FARCH_FILTER_MC_DEF;
2217 struct efx_farch_filter_spec *spec)
2222 spec->priority = EFX_FILTER_PRI_AUTO;
2223 spec->flags = (EFX_FILTER_FLAG_RX |
2226 spec->dmaq_id = 0;
2231 struct efx_farch_filter_spec *spec)
2235 switch (efx_farch_filter_spec_table_id(spec)) {
2237 bool is_udp = (spec->type == EFX_FARCH_FILTER_UDP_FULL ||
2238 spec->type == EFX_FARCH_FILTER_UDP_WILD);
2242 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS),
2244 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER),
2246 FRF_BZ_RXQ_ID, spec->dmaq_id,
2247 EFX_DWORD_2, spec->data[2],
2248 EFX_DWORD_1, spec->data[1],
2249 EFX_DWORD_0, spec->data[0]);
2255 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD;
2259 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS),
2261 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER),
2262 FRF_CZ_RMFT_RXQ_ID, spec->dmaq_id,
2264 FRF_CZ_RMFT_DEST_MAC_HI, spec->data[2],
2265 FRF_CZ_RMFT_DEST_MAC_LO, spec->data[1],
2266 FRF_CZ_RMFT_VLAN_ID, spec->data[0]);
2272 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD;
2274 FRF_CZ_TMFT_TXQ_ID, spec->dmaq_id,
2276 FRF_CZ_TMFT_SRC_MAC_HI, spec->data[2],
2277 FRF_CZ_TMFT_SRC_MAC_LO, spec->data[1],
2278 FRF_CZ_TMFT_VLAN_ID, spec->data[0]);
2279 data3 = is_wild | spec->dmaq_id << 1;
2287 return spec->data[0] ^ spec->data[1] ^ spec->data[2] ^ data3;
2340 efx_farch_filter_make_id(const struct efx_farch_filter_spec *spec,
2345 range = efx_farch_filter_type_match_pri[spec->type];
2346 if (!(spec->flags & EFX_FILTER_FLAG_RX))
2390 struct efx_farch_filter_spec spec;
2396 rc = efx_farch_filter_from_gen_spec(&spec, gen_spec);
2402 table = &state->table[efx_farch_filter_spec_table_id(&spec)];
2409 "%s: type %d search_limit=%d", __func__, spec.type,
2410 table->search_limit[spec.type]);
2413 /* One filter spec per type */
2417 rep_index = spec.type - EFX_FARCH_FILTER_UC_DEF;
2435 u32 key = efx_farch_filter_build(&filter, &spec);
2438 unsigned int max_rep_depth = table->search_limit[spec.type];
2440 spec.priority <= EFX_FILTER_PRI_HINT ?
2452 } else if (efx_farch_filter_equal(&spec,
2453 &table->spec[i])) {
2482 &table->spec[rep_index];
2484 if (spec.priority == saved_spec->priority && !replace_equal) {
2488 if (spec.priority < saved_spec->priority) {
2494 spec.flags |= EFX_FILTER_FLAG_RX_OVER_AUTO;
2502 table->spec[ins_index] = spec;
2507 if (table->search_limit[spec.type] < depth) {
2508 table->search_limit[spec.type] = depth;
2509 if (spec.flags & EFX_FILTER_FLAG_TX)
2528 __func__, spec.type, ins_index, spec.dmaq_id);
2529 rc = efx_farch_filter_make_id(&spec, ins_index);
2548 memset(&table->spec[filter_idx], 0, sizeof(table->spec[0]));
2572 struct efx_farch_filter_spec *spec = &table->spec[filter_idx];
2575 spec->priority != priority)
2578 if (spec->flags & EFX_FILTER_FLAG_RX_OVER_AUTO) {
2579 efx_farch_filter_init_rx_auto(efx, spec);
2621 struct efx_farch_filter_spec *spec;
2635 spec = &table->spec[filter_idx];
2638 spec->priority == priority) {
2639 efx_farch_filter_to_gen_spec(spec_buf, spec);
2659 if (table->spec[filter_idx].priority != EFX_FILTER_PRI_AUTO)
2695 table->spec[filter_idx].priority == priority)
2723 table->spec[filter_idx].priority == priority) {
2729 &table->spec[filter_idx], filter_idx);
2760 efx_farch_filter_build(&filter, &table->spec[filter_idx]);
2779 vfree(state->table[table_id].spec);
2827 table->spec = vzalloc(array_size(sizeof(*table->spec),
2829 if (!table->spec)
2836 struct efx_farch_filter_spec *spec;
2840 spec = &table->spec[i];
2841 spec->type = EFX_FARCH_FILTER_UC_DEF + i;
2842 efx_farch_filter_init_rx_auto(efx, spec);
2874 table->spec[filter_idx].dmaq_id >=
2879 table->spec[filter_idx].flags |=
2882 table->spec[filter_idx].flags &=
2889 efx_farch_filter_build(&filter, &table->spec[filter_idx]);
2914 table->spec[index].priority == EFX_FILTER_PRI_HINT) {
2916 struct efx_filter_spec spec;
2918 efx_farch_filter_to_gen_spec(&spec, &table->spec[index]);
2925 rule = efx_rps_hash_find(efx, &spec);
2935 if (force || rps_may_expire_flow(efx->net_dev, spec.dmaq_id,
2939 efx_rps_hash_del(efx, &spec);