Lines Matching defs:spec

1809 	struct ef4_farch_filter_spec *spec;
1846 ef4_farch_filter_spec_table_id(const struct ef4_farch_filter_spec *spec)
1862 return (spec->type >> 2) + ((spec->flags & EF4_FILTER_FLAG_TX) ? 2 : 0);
1903 table->spec[EF4_FARCH_FILTER_INDEX_UC_DEF].dmaq_id);
1906 !!(table->spec[EF4_FARCH_FILTER_INDEX_UC_DEF].flags &
1910 table->spec[EF4_FARCH_FILTER_INDEX_MC_DEF].dmaq_id);
1913 !!(table->spec[EF4_FARCH_FILTER_INDEX_MC_DEF].flags &
1922 !!(table->spec[EF4_FARCH_FILTER_INDEX_UC_DEF].flags &
1923 table->spec[EF4_FARCH_FILTER_INDEX_MC_DEF].flags &
1963 ef4_farch_filter_from_gen_spec(struct ef4_farch_filter_spec *spec,
1972 spec->priority = gen_spec->priority;
1973 spec->flags = gen_spec->flags;
1974 spec->dmaq_id = gen_spec->dmaq_id;
1996 spec->type = (is_full ? EF4_FARCH_FILTER_TCP_FULL :
2000 spec->type = (is_full ? EF4_FARCH_FILTER_UDP_FULL :
2023 spec->data[0] = ntohl(host1) << 16 | ntohs(port1);
2024 spec->data[1] = ntohs(port2) << 16 | ntohl(host1) >> 16;
2025 spec->data[2] = ntohl(host2);
2034 spec->type = (is_full ? EF4_FARCH_FILTER_MAC_FULL :
2036 spec->data[0] = is_full ? ntohs(gen_spec->outer_vid) : 0;
2037 spec->data[1] = (gen_spec->loc_mac[2] << 24 |
2041 spec->data[2] = (gen_spec->loc_mac[0] << 8 |
2046 spec->type = (is_multicast_ether_addr(gen_spec->loc_mac) ?
2049 memset(spec->data, 0, sizeof(spec->data)); /* ensure equality */
2061 const struct ef4_farch_filter_spec *spec)
2071 gen_spec->priority = spec->priority;
2072 gen_spec->flags = spec->flags;
2073 gen_spec->dmaq_id = spec->dmaq_id;
2075 switch (spec->type) {
2094 (spec->type == EF4_FARCH_FILTER_TCP_FULL ||
2095 spec->type == EF4_FARCH_FILTER_TCP_WILD) ?
2098 host1 = htonl(spec->data[0] >> 16 | spec->data[1] << 16);
2099 port1 = htons(spec->data[0]);
2100 host2 = htonl(spec->data[2]);
2101 port2 = htons(spec->data[1] >> 16);
2102 if (spec->flags & EF4_FILTER_FLAG_TX) {
2128 gen_spec->loc_mac[0] = spec->data[2] >> 8;
2129 gen_spec->loc_mac[1] = spec->data[2];
2130 gen_spec->loc_mac[2] = spec->data[1] >> 24;
2131 gen_spec->loc_mac[3] = spec->data[1] >> 16;
2132 gen_spec->loc_mac[4] = spec->data[1] >> 8;
2133 gen_spec->loc_mac[5] = spec->data[1];
2134 gen_spec->outer_vid = htons(spec->data[0]);
2140 gen_spec->loc_mac[0] = spec->type == EF4_FARCH_FILTER_MC_DEF;
2151 struct ef4_farch_filter_spec *spec)
2156 spec->priority = EF4_FILTER_PRI_AUTO;
2157 spec->flags = (EF4_FILTER_FLAG_RX |
2160 spec->dmaq_id = 0;
2165 struct ef4_farch_filter_spec *spec)
2169 switch (ef4_farch_filter_spec_table_id(spec)) {
2171 bool is_udp = (spec->type == EF4_FARCH_FILTER_UDP_FULL ||
2172 spec->type == EF4_FARCH_FILTER_UDP_WILD);
2176 !!(spec->flags & EF4_FILTER_FLAG_RX_RSS),
2178 !!(spec->flags & EF4_FILTER_FLAG_RX_SCATTER),
2180 FRF_BZ_RXQ_ID, spec->dmaq_id,
2181 EF4_DWORD_2, spec->data[2],
2182 EF4_DWORD_1, spec->data[1],
2183 EF4_DWORD_0, spec->data[0]);
2189 bool is_wild = spec->type == EF4_FARCH_FILTER_MAC_WILD;
2193 !!(spec->flags & EF4_FILTER_FLAG_RX_RSS),
2195 !!(spec->flags & EF4_FILTER_FLAG_RX_SCATTER),
2196 FRF_CZ_RMFT_RXQ_ID, spec->dmaq_id,
2198 FRF_CZ_RMFT_DEST_MAC_HI, spec->data[2],
2199 FRF_CZ_RMFT_DEST_MAC_LO, spec->data[1],
2200 FRF_CZ_RMFT_VLAN_ID, spec->data[0]);
2206 bool is_wild = spec->type == EF4_FARCH_FILTER_MAC_WILD;
2208 FRF_CZ_TMFT_TXQ_ID, spec->dmaq_id,
2210 FRF_CZ_TMFT_SRC_MAC_HI, spec->data[2],
2211 FRF_CZ_TMFT_SRC_MAC_LO, spec->data[1],
2212 FRF_CZ_TMFT_VLAN_ID, spec->data[0]);
2213 data3 = is_wild | spec->dmaq_id << 1;
2221 return spec->data[0] ^ spec->data[1] ^ spec->data[2] ^ data3;
2274 ef4_farch_filter_make_id(const struct ef4_farch_filter_spec *spec,
2279 range = ef4_farch_filter_type_match_pri[spec->type];
2280 if (!(spec->flags & EF4_FILTER_FLAG_RX))
2324 struct ef4_farch_filter_spec spec;
2330 rc = ef4_farch_filter_from_gen_spec(&spec, gen_spec);
2334 table = &state->table[ef4_farch_filter_spec_table_id(&spec)];
2339 "%s: type %d search_limit=%d", __func__, spec.type,
2340 table->search_limit[spec.type]);
2343 /* One filter spec per type */
2347 rep_index = spec.type - EF4_FARCH_FILTER_UC_DEF;
2367 u32 key = ef4_farch_filter_build(&filter, &spec);
2370 unsigned int max_rep_depth = table->search_limit[spec.type];
2372 spec.priority <= EF4_FILTER_PRI_HINT ?
2386 } else if (ef4_farch_filter_equal(&spec,
2387 &table->spec[i])) {
2416 &table->spec[rep_index];
2418 if (spec.priority == saved_spec->priority && !replace_equal) {
2422 if (spec.priority < saved_spec->priority) {
2428 spec.flags |= EF4_FILTER_FLAG_RX_OVER_AUTO;
2436 table->spec[ins_index] = spec;
2441 if (table->search_limit[spec.type] < depth) {
2442 table->search_limit[spec.type] = depth;
2443 if (spec.flags & EF4_FILTER_FLAG_TX)
2462 __func__, spec.type, ins_index, spec.dmaq_id);
2463 rc = ef4_farch_filter_make_id(&spec, ins_index);
2482 memset(&table->spec[filter_idx], 0, sizeof(table->spec[0]));
2506 struct ef4_farch_filter_spec *spec = &table->spec[filter_idx];
2509 spec->priority != priority)
2512 if (spec->flags & EF4_FILTER_FLAG_RX_OVER_AUTO) {
2513 ef4_farch_filter_init_rx_auto(efx, spec);
2555 struct ef4_farch_filter_spec *spec;
2567 spec = &table->spec[filter_idx];
2572 spec->priority == priority) {
2573 ef4_farch_filter_to_gen_spec(spec_buf, spec);
2595 if (table->spec[filter_idx].priority != EF4_FILTER_PRI_AUTO)
2631 table->spec[filter_idx].priority == priority)
2659 table->spec[filter_idx].priority == priority) {
2665 &table->spec[filter_idx], filter_idx);
2696 ef4_farch_filter_build(&filter, &table->spec[filter_idx]);
2715 vfree(state->table[table_id].spec);
2748 table->spec = vzalloc(array_size(sizeof(*table->spec),
2750 if (!table->spec)
2757 struct ef4_farch_filter_spec *spec;
2761 spec = &table->spec[i];
2762 spec->type = EF4_FARCH_FILTER_UC_DEF + i;
2763 ef4_farch_filter_init_rx_auto(efx, spec);
2795 table->spec[filter_idx].dmaq_id >=
2800 table->spec[filter_idx].flags |=
2803 table->spec[filter_idx].flags &=
2810 ef4_farch_filter_build(&filter, &table->spec[filter_idx]);
2837 table->spec[index].priority == EF4_FILTER_PRI_HINT &&
2838 rps_may_expire_flow(efx->net_dev, table->spec[index].dmaq_id,