net/i40e: fix flow director on X710
Because some registers are only supported by X722, for example,
I40E_GLQF_FD_PCTYPES, the driver needs to use the mac type to distinguish
the behavior of X722 from X710 and other NICs, or it would result in
errors on X710.
Fixes: 8c5cb3c115
("net/i40e: add packet type translation for X722")
Signed-off-by: Jeff Guo <jia.guo@intel.com>
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
This commit is contained in:
parent
aaffc740ec
commit
4675752f1d
@ -6164,7 +6164,7 @@ i40e_vsi_delete_mac(struct i40e_vsi *vsi, struct ether_addr *addr)
|
||||
|
||||
/* Configure hash enable flags for RSS */
|
||||
uint64_t
|
||||
i40e_config_hena(uint64_t flags)
|
||||
i40e_config_hena(uint64_t flags, enum i40e_mac_type type)
|
||||
{
|
||||
uint64_t hena = 0;
|
||||
|
||||
@ -6173,42 +6173,42 @@ i40e_config_hena(uint64_t flags)
|
||||
|
||||
if (flags & ETH_RSS_FRAG_IPV4)
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_FRAG_IPV4;
|
||||
if (flags & ETH_RSS_NONFRAG_IPV4_TCP)
|
||||
#ifdef X722_SUPPORT
|
||||
hena |= (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK);
|
||||
#else
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP;
|
||||
#endif
|
||||
if (flags & ETH_RSS_NONFRAG_IPV4_UDP)
|
||||
#ifdef X722_SUPPORT
|
||||
hena |= (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_UNICAST_IPV4_UDP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV4_UDP);
|
||||
#else
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP;
|
||||
#endif
|
||||
if (flags & ETH_RSS_NONFRAG_IPV4_TCP) {
|
||||
if (type == I40E_MAC_X722) {
|
||||
hena |= (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK);
|
||||
} else
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP;
|
||||
}
|
||||
if (flags & ETH_RSS_NONFRAG_IPV4_UDP) {
|
||||
if (type == I40E_MAC_X722) {
|
||||
hena |= (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_UNICAST_IPV4_UDP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV4_UDP);
|
||||
} else
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP;
|
||||
}
|
||||
if (flags & ETH_RSS_NONFRAG_IPV4_SCTP)
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_SCTP;
|
||||
if (flags & ETH_RSS_NONFRAG_IPV4_OTHER)
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_OTHER;
|
||||
if (flags & ETH_RSS_FRAG_IPV6)
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_FRAG_IPV6;
|
||||
if (flags & ETH_RSS_NONFRAG_IPV6_TCP)
|
||||
#ifdef X722_SUPPORT
|
||||
hena |= (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP_SYN_NO_ACK);
|
||||
#else
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP;
|
||||
#endif
|
||||
if (flags & ETH_RSS_NONFRAG_IPV6_UDP)
|
||||
#ifdef X722_SUPPORT
|
||||
hena |= (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_UNICAST_IPV6_UDP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV6_UDP);
|
||||
#else
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP;
|
||||
#endif
|
||||
if (flags & ETH_RSS_NONFRAG_IPV6_TCP) {
|
||||
if (type == I40E_MAC_X722) {
|
||||
hena |= (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP_SYN_NO_ACK);
|
||||
} else
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP;
|
||||
}
|
||||
if (flags & ETH_RSS_NONFRAG_IPV6_UDP) {
|
||||
if (type == I40E_MAC_X722) {
|
||||
hena |= (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_UNICAST_IPV6_UDP) |
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV6_UDP);
|
||||
} else
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP;
|
||||
}
|
||||
if (flags & ETH_RSS_NONFRAG_IPV6_SCTP)
|
||||
hena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_SCTP;
|
||||
if (flags & ETH_RSS_NONFRAG_IPV6_OTHER)
|
||||
@ -6282,7 +6282,10 @@ i40e_pf_disable_rss(struct i40e_pf *pf)
|
||||
|
||||
hena = (uint64_t)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(0));
|
||||
hena |= ((uint64_t)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(1))) << 32;
|
||||
hena &= ~I40E_RSS_HENA_ALL;
|
||||
if (hw->mac.type == I40E_MAC_X722)
|
||||
hena &= ~I40E_RSS_HENA_ALL_X722;
|
||||
else
|
||||
hena &= ~I40E_RSS_HENA_ALL;
|
||||
i40e_write_rx_ctl(hw, I40E_PFQF_HENA(0), (uint32_t)hena);
|
||||
i40e_write_rx_ctl(hw, I40E_PFQF_HENA(1), (uint32_t)(hena >> 32));
|
||||
I40E_WRITE_FLUSH(hw);
|
||||
@ -6369,8 +6372,11 @@ i40e_hw_rss_hash_set(struct i40e_pf *pf, struct rte_eth_rss_conf *rss_conf)
|
||||
rss_hf = rss_conf->rss_hf;
|
||||
hena = (uint64_t)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(0));
|
||||
hena |= ((uint64_t)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(1))) << 32;
|
||||
hena &= ~I40E_RSS_HENA_ALL;
|
||||
hena |= i40e_config_hena(rss_hf);
|
||||
if (hw->mac.type == I40E_MAC_X722)
|
||||
hena &= ~I40E_RSS_HENA_ALL_X722;
|
||||
else
|
||||
hena &= ~I40E_RSS_HENA_ALL;
|
||||
hena |= i40e_config_hena(rss_hf, hw->mac.type);
|
||||
i40e_write_rx_ctl(hw, I40E_PFQF_HENA(0), (uint32_t)hena);
|
||||
i40e_write_rx_ctl(hw, I40E_PFQF_HENA(1), (uint32_t)(hena >> 32));
|
||||
I40E_WRITE_FLUSH(hw);
|
||||
@ -6389,7 +6395,9 @@ i40e_dev_rss_hash_update(struct rte_eth_dev *dev,
|
||||
|
||||
hena = (uint64_t)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(0));
|
||||
hena |= ((uint64_t)i40e_read_rx_ctl(hw, I40E_PFQF_HENA(1))) << 32;
|
||||
if (!(hena & I40E_RSS_HENA_ALL)) { /* RSS disabled */
|
||||
if (!(hena & ((hw->mac.type == I40E_MAC_X722)
|
||||
? I40E_RSS_HENA_ALL_X722
|
||||
: I40E_RSS_HENA_ALL))) { /* RSS disabled */
|
||||
if (rss_hf != 0) /* Enable RSS */
|
||||
return -EINVAL;
|
||||
return 0; /* Nothing to do */
|
||||
@ -7690,8 +7698,14 @@ i40e_filter_input_set_init(struct i40e_pf *pf)
|
||||
|
||||
for (pctype = I40E_FILTER_PCTYPE_NONF_IPV4_UDP;
|
||||
pctype <= I40E_FILTER_PCTYPE_L2_PAYLOAD; pctype++) {
|
||||
if (!I40E_VALID_PCTYPE(pctype))
|
||||
continue;
|
||||
if (hw->mac.type == I40E_MAC_X722) {
|
||||
if (!I40E_VALID_PCTYPE_X722(pctype))
|
||||
continue;
|
||||
} else {
|
||||
if (!I40E_VALID_PCTYPE(pctype))
|
||||
continue;
|
||||
}
|
||||
|
||||
input_set = i40e_get_default_input_set(pctype);
|
||||
|
||||
num = i40e_generate_inset_mask_reg(input_set, mask_reg,
|
||||
@ -7757,14 +7771,13 @@ i40e_hash_filter_inset_select(struct i40e_hw *hw,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
#ifdef X722_SUPPORT
|
||||
/* get translated pctype value in fd pctype register */
|
||||
pctype = (enum i40e_filter_pctype)i40e_read_rx_ctl(hw,
|
||||
I40E_GLQF_FD_PCTYPES((int)i40e_flowtype_to_pctype(
|
||||
conf->flow_type)));
|
||||
#else
|
||||
pctype = i40e_flowtype_to_pctype(conf->flow_type);
|
||||
#endif
|
||||
if (hw->mac.type == I40E_MAC_X722) {
|
||||
/* get translated pctype value in fd pctype register */
|
||||
pctype = (enum i40e_filter_pctype)i40e_read_rx_ctl(hw,
|
||||
I40E_GLQF_FD_PCTYPES((int)i40e_flowtype_to_pctype(
|
||||
conf->flow_type)));
|
||||
} else
|
||||
pctype = i40e_flowtype_to_pctype(conf->flow_type);
|
||||
|
||||
ret = i40e_parse_input_set(&input_set, pctype, conf->field,
|
||||
conf->inset_size);
|
||||
|
@ -149,30 +149,17 @@ enum i40e_flxpld_layer_idx {
|
||||
ETH_RSS_NONFRAG_IPV6_OTHER | \
|
||||
ETH_RSS_L2_PAYLOAD)
|
||||
|
||||
/* All bits of RSS hash enable */
|
||||
#ifdef X722_SUPPORT
|
||||
#define I40E_RSS_HENA_ALL ( \
|
||||
/* All bits of RSS hash enable for X722*/
|
||||
#define I40E_RSS_HENA_ALL_X722 ( \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_UNICAST_IPV4_UDP) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV4_UDP) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_SCTP) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_OTHER) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_FRAG_IPV4) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_UNICAST_IPV6_UDP) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV6_UDP) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP_SYN_NO_ACK) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_SCTP) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_OTHER) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_FRAG_IPV6) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_FCOE_OX) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_FCOE_RX) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_FCOE_OTHER) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_L2_PAYLOAD))
|
||||
#else
|
||||
I40E_RSS_HENA_ALL)
|
||||
|
||||
/* All bits of RSS hash enable */
|
||||
#define I40E_RSS_HENA_ALL ( \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP) | \
|
||||
@ -188,7 +175,6 @@ enum i40e_flxpld_layer_idx {
|
||||
(1ULL << I40E_FILTER_PCTYPE_FCOE_RX) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_FCOE_OTHER) | \
|
||||
(1ULL << I40E_FILTER_PCTYPE_L2_PAYLOAD))
|
||||
#endif
|
||||
|
||||
#define I40E_MISC_VEC_ID RTE_INTR_VEC_ZERO_OFFSET
|
||||
#define I40E_RX_VEC_START RTE_INTR_VEC_RXTX_OFFSET
|
||||
@ -601,7 +587,7 @@ int i40e_vsi_vlan_pvid_set(struct i40e_vsi *vsi,
|
||||
struct i40e_vsi_vlan_pvid_info *info);
|
||||
int i40e_vsi_config_vlan_stripping(struct i40e_vsi *vsi, bool on);
|
||||
int i40e_vsi_config_vlan_filter(struct i40e_vsi *vsi, bool on);
|
||||
uint64_t i40e_config_hena(uint64_t flags);
|
||||
uint64_t i40e_config_hena(uint64_t flags, enum i40e_mac_type type);
|
||||
uint64_t i40e_parse_hena(uint64_t flags);
|
||||
enum i40e_status_code i40e_fdir_setup_tx_resources(struct i40e_pf *pf);
|
||||
enum i40e_status_code i40e_fdir_setup_rx_resources(struct i40e_pf *pf);
|
||||
@ -723,8 +709,7 @@ i40e_calc_itr_interval(int16_t interval)
|
||||
(flow_type) == RTE_ETH_FLOW_NONFRAG_IPV6_OTHER || \
|
||||
(flow_type) == RTE_ETH_FLOW_L2_PAYLOAD)
|
||||
|
||||
#ifdef X722_SUPPORT
|
||||
#define I40E_VALID_PCTYPE(pctype) \
|
||||
#define I40E_VALID_PCTYPE_X722(pctype) \
|
||||
((pctype) == I40E_FILTER_PCTYPE_FRAG_IPV4 || \
|
||||
(pctype) == I40E_FILTER_PCTYPE_NONF_IPV4_TCP || \
|
||||
(pctype) == I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK || \
|
||||
@ -742,7 +727,7 @@ i40e_calc_itr_interval(int16_t interval)
|
||||
(pctype) == I40E_FILTER_PCTYPE_NONF_IPV6_SCTP || \
|
||||
(pctype) == I40E_FILTER_PCTYPE_NONF_IPV6_OTHER || \
|
||||
(pctype) == I40E_FILTER_PCTYPE_L2_PAYLOAD)
|
||||
#else
|
||||
|
||||
#define I40E_VALID_PCTYPE(pctype) \
|
||||
((pctype) == I40E_FILTER_PCTYPE_FRAG_IPV4 || \
|
||||
(pctype) == I40E_FILTER_PCTYPE_NONF_IPV4_TCP || \
|
||||
@ -755,7 +740,6 @@ i40e_calc_itr_interval(int16_t interval)
|
||||
(pctype) == I40E_FILTER_PCTYPE_NONF_IPV6_SCTP || \
|
||||
(pctype) == I40E_FILTER_PCTYPE_NONF_IPV6_OTHER || \
|
||||
(pctype) == I40E_FILTER_PCTYPE_L2_PAYLOAD)
|
||||
#endif
|
||||
|
||||
#define I40E_PHY_TYPE_SUPPORT_40G(phy_type) \
|
||||
(((phy_type) & I40E_CAP_PHY_TYPE_40GBASE_KR4) || \
|
||||
|
@ -2548,8 +2548,11 @@ i40evf_hw_rss_hash_set(struct i40e_vf *vf, struct rte_eth_rss_conf *rss_conf)
|
||||
rss_hf = rss_conf->rss_hf;
|
||||
hena = (uint64_t)i40e_read_rx_ctl(hw, I40E_VFQF_HENA(0));
|
||||
hena |= ((uint64_t)i40e_read_rx_ctl(hw, I40E_VFQF_HENA(1))) << 32;
|
||||
hena &= ~I40E_RSS_HENA_ALL;
|
||||
hena |= i40e_config_hena(rss_hf);
|
||||
if (hw->mac.type == I40E_MAC_X722)
|
||||
hena &= ~I40E_RSS_HENA_ALL_X722;
|
||||
else
|
||||
hena &= ~I40E_RSS_HENA_ALL;
|
||||
hena |= i40e_config_hena(rss_hf, hw->mac.type);
|
||||
i40e_write_rx_ctl(hw, I40E_VFQF_HENA(0), (uint32_t)hena);
|
||||
i40e_write_rx_ctl(hw, I40E_VFQF_HENA(1), (uint32_t)(hena >> 32));
|
||||
I40EVF_WRITE_FLUSH(hw);
|
||||
@ -2565,7 +2568,10 @@ i40evf_disable_rss(struct i40e_vf *vf)
|
||||
|
||||
hena = (uint64_t)i40e_read_rx_ctl(hw, I40E_VFQF_HENA(0));
|
||||
hena |= ((uint64_t)i40e_read_rx_ctl(hw, I40E_VFQF_HENA(1))) << 32;
|
||||
hena &= ~I40E_RSS_HENA_ALL;
|
||||
if (hw->mac.type == I40E_MAC_X722)
|
||||
hena &= ~I40E_RSS_HENA_ALL_X722;
|
||||
else
|
||||
hena &= ~I40E_RSS_HENA_ALL;
|
||||
i40e_write_rx_ctl(hw, I40E_VFQF_HENA(0), (uint32_t)hena);
|
||||
i40e_write_rx_ctl(hw, I40E_VFQF_HENA(1), (uint32_t)(hena >> 32));
|
||||
I40EVF_WRITE_FLUSH(hw);
|
||||
@ -2626,7 +2632,9 @@ i40evf_dev_rss_hash_update(struct rte_eth_dev *dev,
|
||||
|
||||
hena = (uint64_t)i40e_read_rx_ctl(hw, I40E_VFQF_HENA(0));
|
||||
hena |= ((uint64_t)i40e_read_rx_ctl(hw, I40E_VFQF_HENA(1))) << 32;
|
||||
if (!(hena & I40E_RSS_HENA_ALL)) { /* RSS disabled */
|
||||
if (!(hena & ((hw->mac.type == I40E_MAC_X722)
|
||||
? I40E_RSS_HENA_ALL_X722
|
||||
: I40E_RSS_HENA_ALL))) { /* RSS disabled */
|
||||
if (rss_hf != 0) /* Enable RSS */
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
|
@ -353,8 +353,15 @@ i40e_init_flx_pld(struct i40e_pf *pf)
|
||||
/* initialize the masks */
|
||||
for (pctype = I40E_FILTER_PCTYPE_NONF_IPV4_UDP;
|
||||
pctype <= I40E_FILTER_PCTYPE_L2_PAYLOAD; pctype++) {
|
||||
if (!I40E_VALID_PCTYPE((enum i40e_filter_pctype)pctype))
|
||||
continue;
|
||||
if (hw->mac.type == I40E_MAC_X722) {
|
||||
if (!I40E_VALID_PCTYPE_X722(
|
||||
(enum i40e_filter_pctype)pctype))
|
||||
continue;
|
||||
} else {
|
||||
if (!I40E_VALID_PCTYPE(
|
||||
(enum i40e_filter_pctype)pctype))
|
||||
continue;
|
||||
}
|
||||
pf->fdir.flex_mask[pctype].word_mask = 0;
|
||||
i40e_write_rx_ctl(hw, I40E_PRTQF_FD_FLXINSET(pctype), 0);
|
||||
for (i = 0; i < I40E_FDIR_BITMASK_NUM_WORD; i++) {
|
||||
@ -664,14 +671,16 @@ i40e_fdir_configure(struct rte_eth_dev *dev)
|
||||
i40e_set_flx_pld_cfg(pf, &conf->flex_set[i]);
|
||||
/* configure flex mask*/
|
||||
for (i = 0; i < conf->nb_flexmasks; i++) {
|
||||
#ifdef X722_SUPPORT
|
||||
/* get translated pctype value in fd pctype register */
|
||||
pctype = (enum i40e_filter_pctype)i40e_read_rx_ctl(hw,
|
||||
I40E_GLQF_FD_PCTYPES((int)i40e_flowtype_to_pctype(
|
||||
conf->flex_mask[i].flow_type)));
|
||||
#else
|
||||
pctype = i40e_flowtype_to_pctype(conf->flex_mask[i].flow_type);
|
||||
#endif
|
||||
if (hw->mac.type == I40E_MAC_X722) {
|
||||
/* get translated pctype value in fd pctype register */
|
||||
pctype = (enum i40e_filter_pctype)i40e_read_rx_ctl(
|
||||
hw, I40E_GLQF_FD_PCTYPES(
|
||||
(int)i40e_flowtype_to_pctype(
|
||||
conf->flex_mask[i].flow_type)));
|
||||
} else
|
||||
pctype = i40e_flowtype_to_pctype(
|
||||
conf->flex_mask[i].flow_type);
|
||||
|
||||
i40e_set_flex_mask_on_pctype(pf, pctype, &conf->flex_mask[i]);
|
||||
}
|
||||
|
||||
@ -1053,14 +1062,14 @@ i40e_add_del_fdir_filter(struct rte_eth_dev *dev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef X722_SUPPORT
|
||||
/* get translated pctype value in fd pctype register */
|
||||
pctype = (enum i40e_filter_pctype)i40e_read_rx_ctl(hw,
|
||||
I40E_GLQF_FD_PCTYPES((int)i40e_flowtype_to_pctype(
|
||||
filter->input.flow_type)));
|
||||
#else
|
||||
pctype = i40e_flowtype_to_pctype(filter->input.flow_type);
|
||||
#endif
|
||||
if (hw->mac.type == I40E_MAC_X722) {
|
||||
/* get translated pctype value in fd pctype register */
|
||||
pctype = (enum i40e_filter_pctype)i40e_read_rx_ctl(
|
||||
hw, I40E_GLQF_FD_PCTYPES(
|
||||
(int)i40e_flowtype_to_pctype(
|
||||
filter->input.flow_type)));
|
||||
} else
|
||||
pctype = i40e_flowtype_to_pctype(filter->input.flow_type);
|
||||
|
||||
ret = i40e_fdir_filter_programming(pf, pctype, filter, add);
|
||||
if (ret < 0) {
|
||||
@ -1290,6 +1299,7 @@ i40e_fdir_info_get_flex_mask(struct i40e_pf *pf,
|
||||
{
|
||||
struct i40e_fdir_flex_mask *mask;
|
||||
struct rte_eth_fdir_flex_mask *ptr = flex_mask;
|
||||
struct i40e_hw *hw = I40E_PF_TO_HW(pf);
|
||||
uint16_t flow_type;
|
||||
uint8_t i, j;
|
||||
uint16_t off_bytes, mask_tmp;
|
||||
@ -1298,8 +1308,13 @@ i40e_fdir_info_get_flex_mask(struct i40e_pf *pf,
|
||||
i <= I40E_FILTER_PCTYPE_L2_PAYLOAD;
|
||||
i++) {
|
||||
mask = &pf->fdir.flex_mask[i];
|
||||
if (!I40E_VALID_PCTYPE((enum i40e_filter_pctype)i))
|
||||
continue;
|
||||
if (hw->mac.type == I40E_MAC_X722) {
|
||||
if (!I40E_VALID_PCTYPE_X722((enum i40e_filter_pctype)i))
|
||||
continue;
|
||||
} else {
|
||||
if (!I40E_VALID_PCTYPE((enum i40e_filter_pctype)i))
|
||||
continue;
|
||||
}
|
||||
flow_type = i40e_pctype_to_flowtype((enum i40e_filter_pctype)i);
|
||||
for (j = 0; j < I40E_FDIR_MAX_FLEXWORD_NUM; j++) {
|
||||
if (mask->word_mask & I40E_FLEX_WORD_MASK(j)) {
|
||||
|
Loading…
Reference in New Issue
Block a user