Lines Matching defs:spec
1878 struct efx_farch_filter_spec *spec;
1916 efx_farch_filter_spec_table_id(const struct efx_farch_filter_spec *spec)
1932 return (spec->type >> 2) + ((spec->flags & EFX_FILTER_FLAG_TX) ? 2 : 0);
1973 table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].dmaq_id);
1976 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags &
1980 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].dmaq_id);
1983 !!(table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags &
1992 !!(table->spec[EFX_FARCH_FILTER_INDEX_UC_DEF].flags &
1993 table->spec[EFX_FARCH_FILTER_INDEX_MC_DEF].flags &
2033 efx_farch_filter_from_gen_spec(struct efx_farch_filter_spec *spec,
2041 spec->priority = gen_spec->priority;
2042 spec->flags = gen_spec->flags;
2043 spec->dmaq_id = gen_spec->dmaq_id;
2065 spec->type = (is_full ? EFX_FARCH_FILTER_TCP_FULL :
2069 spec->type = (is_full ? EFX_FARCH_FILTER_UDP_FULL :
2092 spec->data[0] = ntohl(host1) << 16 | ntohs(port1);
2093 spec->data[1] = ntohs(port2) << 16 | ntohl(host1) >> 16;
2094 spec->data[2] = ntohl(host2);
2103 spec->type = (is_full ? EFX_FARCH_FILTER_MAC_FULL :
2105 spec->data[0] = is_full ? ntohs(gen_spec->outer_vid) : 0;
2106 spec->data[1] = (gen_spec->loc_mac[2] << 24 |
2110 spec->data[2] = (gen_spec->loc_mac[0] << 8 |
2115 spec->type = (is_multicast_ether_addr(gen_spec->loc_mac) ?
2118 memset(spec->data, 0, sizeof(spec->data)); /* ensure equality */
2130 const struct efx_farch_filter_spec *spec)
2140 gen_spec->priority = spec->priority;
2141 gen_spec->flags = spec->flags;
2142 gen_spec->dmaq_id = spec->dmaq_id;
2144 switch (spec->type) {
2163 (spec->type == EFX_FARCH_FILTER_TCP_FULL ||
2164 spec->type == EFX_FARCH_FILTER_TCP_WILD) ?
2167 host1 = htonl(spec->data[0] >> 16 | spec->data[1] << 16);
2168 port1 = htons(spec->data[0]);
2169 host2 = htonl(spec->data[2]);
2170 port2 = htons(spec->data[1] >> 16);
2171 if (spec->flags & EFX_FILTER_FLAG_TX) {
2197 gen_spec->loc_mac[0] = spec->data[2] >> 8;
2198 gen_spec->loc_mac[1] = spec->data[2];
2199 gen_spec->loc_mac[2] = spec->data[1] >> 24;
2200 gen_spec->loc_mac[3] = spec->data[1] >> 16;
2201 gen_spec->loc_mac[4] = spec->data[1] >> 8;
2202 gen_spec->loc_mac[5] = spec->data[1];
2203 gen_spec->outer_vid = htons(spec->data[0]);
2209 gen_spec->loc_mac[0] = spec->type == EFX_FARCH_FILTER_MC_DEF;
2220 struct efx_farch_filter_spec *spec)
2225 spec->priority = EFX_FILTER_PRI_AUTO;
2226 spec->flags = (EFX_FILTER_FLAG_RX |
2229 spec->dmaq_id = 0;
2234 struct efx_farch_filter_spec *spec)
2238 switch (efx_farch_filter_spec_table_id(spec)) {
2240 bool is_udp = (spec->type == EFX_FARCH_FILTER_UDP_FULL ||
2241 spec->type == EFX_FARCH_FILTER_UDP_WILD);
2245 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS),
2247 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER),
2249 FRF_BZ_RXQ_ID, spec->dmaq_id,
2250 EFX_DWORD_2, spec->data[2],
2251 EFX_DWORD_1, spec->data[1],
2252 EFX_DWORD_0, spec->data[0]);
2258 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD;
2262 !!(spec->flags & EFX_FILTER_FLAG_RX_RSS),
2264 !!(spec->flags & EFX_FILTER_FLAG_RX_SCATTER),
2265 FRF_CZ_RMFT_RXQ_ID, spec->dmaq_id,
2267 FRF_CZ_RMFT_DEST_MAC_HI, spec->data[2],
2268 FRF_CZ_RMFT_DEST_MAC_LO, spec->data[1],
2269 FRF_CZ_RMFT_VLAN_ID, spec->data[0]);
2275 bool is_wild = spec->type == EFX_FARCH_FILTER_MAC_WILD;
2277 FRF_CZ_TMFT_TXQ_ID, spec->dmaq_id,
2279 FRF_CZ_TMFT_SRC_MAC_HI, spec->data[2],
2280 FRF_CZ_TMFT_SRC_MAC_LO, spec->data[1],
2281 FRF_CZ_TMFT_VLAN_ID, spec->data[0]);
2282 data3 = is_wild | spec->dmaq_id << 1;
2290 return spec->data[0] ^ spec->data[1] ^ spec->data[2] ^ data3;
2343 efx_farch_filter_make_id(const struct efx_farch_filter_spec *spec,
2348 range = efx_farch_filter_type_match_pri[spec->type];
2349 if (!(spec->flags & EFX_FILTER_FLAG_RX))
2393 struct efx_farch_filter_spec spec;
2399 rc = efx_farch_filter_from_gen_spec(&spec, gen_spec);
2405 table = &state->table[efx_farch_filter_spec_table_id(&spec)];
2412 "%s: type %d search_limit=%d", __func__, spec.type,
2413 table->search_limit[spec.type]);
2416 /* One filter spec per type */
2420 rep_index = spec.type - EFX_FARCH_FILTER_UC_DEF;
2438 u32 key = efx_farch_filter_build(&filter, &spec);
2441 unsigned int max_rep_depth = table->search_limit[spec.type];
2443 spec.priority <= EFX_FILTER_PRI_HINT ?
2455 } else if (efx_farch_filter_equal(&spec,
2456 &table->spec[i])) {
2485 &table->spec[rep_index];
2487 if (spec.priority == saved_spec->priority && !replace_equal) {
2491 if (spec.priority < saved_spec->priority) {
2497 spec.flags |= EFX_FILTER_FLAG_RX_OVER_AUTO;
2505 table->spec[ins_index] = spec;
2510 if (table->search_limit[spec.type] < depth) {
2511 table->search_limit[spec.type] = depth;
2512 if (spec.flags & EFX_FILTER_FLAG_TX)
2531 __func__, spec.type, ins_index, spec.dmaq_id);
2532 rc = efx_farch_filter_make_id(&spec, ins_index);
2551 memset(&table->spec[filter_idx], 0, sizeof(table->spec[0]));
2575 struct efx_farch_filter_spec *spec = &table->spec[filter_idx];
2578 spec->priority != priority)
2581 if (spec->flags & EFX_FILTER_FLAG_RX_OVER_AUTO) {
2582 efx_farch_filter_init_rx_auto(efx, spec);
2624 struct efx_farch_filter_spec *spec;
2638 spec = &table->spec[filter_idx];
2641 spec->priority == priority) {
2642 efx_farch_filter_to_gen_spec(spec_buf, spec);
2662 if (table->spec[filter_idx].priority != EFX_FILTER_PRI_AUTO)
2698 table->spec[filter_idx].priority == priority)
2726 table->spec[filter_idx].priority == priority) {
2732 &table->spec[filter_idx], filter_idx);
2763 efx_farch_filter_build(&filter, &table->spec[filter_idx]);
2782 vfree(state->table[table_id].spec);
2828 table->spec = vzalloc(array_size(sizeof(*table->spec),
2830 if (!table->spec)
2837 struct efx_farch_filter_spec *spec;
2841 spec = &table->spec[i];
2842 spec->type = EFX_FARCH_FILTER_UC_DEF + i;
2843 efx_farch_filter_init_rx_auto(efx, spec);
2875 table->spec[filter_idx].dmaq_id >=
2880 table->spec[filter_idx].flags |=
2883 table->spec[filter_idx].flags &=
2890 efx_farch_filter_build(&filter, &table->spec[filter_idx]);
2915 table->spec[index].priority == EFX_FILTER_PRI_HINT) {
2917 struct efx_filter_spec spec;
2919 efx_farch_filter_to_gen_spec(&spec, &table->spec[index]);
2926 rule = efx_siena_rps_hash_find(efx, &spec);
2937 if (force || rps_may_expire_flow(efx->net_dev, spec.dmaq_id,
2941 efx_siena_rps_hash_del(efx, &spec);