#define I40E_HASH_MAP_CUS_PATTERN(pattern, rss_mask, cus_pctype) { \
pattern, rss_mask, true, cus_pctype }
-#define I40E_HASH_L2_RSS_MASK (ETH_RSS_ETH | ETH_RSS_L2_SRC_ONLY | \
+#define I40E_HASH_L2_RSS_MASK (ETH_RSS_VLAN | ETH_RSS_ETH | \
+ ETH_RSS_L2_SRC_ONLY | \
ETH_RSS_L2_DST_ONLY)
#define I40E_HASH_L23_RSS_MASK (I40E_HASH_L2_RSS_MASK | \
- ETH_RSS_VLAN | \
ETH_RSS_L3_SRC_ONLY | \
ETH_RSS_L3_DST_ONLY)
}
/* Check the previous item allows this sub-item. */
- if (prev_item_type >= RTE_DIM(pattern_next_allow_items) ||
+ if (prev_item_type >= (enum rte_flow_item_type)
+ RTE_DIM(pattern_next_allow_items) ||
!(pattern_next_allow_items[prev_item_type] &
- BIT_ULL(pattern->type)))
+ BIT_ULL(pattern->type)))
goto not_sup;
/* For VLAN item, it does no matter about to pattern type
}
prev_item_type = last_item_type;
- assert(last_item_type < RTE_DIM(pattern_item_header));
+ assert(last_item_type < (enum rte_flow_item_type)
+ RTE_DIM(pattern_item_header));
item_hdr = pattern_item_header[last_item_type];
assert(item_hdr);
{
uint32_t reg, reg_val, mask;
- /* For X722, get translated pctype in fd pctype register */
- if (hw->mac.type == I40E_MAC_X722)
- pctype = i40e_read_rx_ctl(hw, I40E_GLQF_FD_PCTYPES(pctype));
-
if (pctype < 32) {
mask = BIT(pctype);
reg = I40E_PFQF_HENA(0);
const struct i40e_rte_flow_rss_conf *rss_conf)
{
struct i40e_hw *hw = &pf->adapter->hw;
- struct rte_eth_dev *dev = pf->adapter->eth_dev;
+ struct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];
struct i40e_queue_region_info *regions = pf->queue_region.region;
uint32_t num = pf->queue_region.queue_region_number;
uint32_t i, region_id_mask = 0;
PMD_DRV_LOG(WARNING,
"RSS key length invalid, must be %u bytes, now set key to default",
(uint32_t)sizeof(rss_conf->key));
- key = (const uint8_t *)rss_key_default;
+
+ memcpy(rss_conf->key, rss_key_default, sizeof(rss_conf->key));
+ } else {
+ memcpy(rss_conf->key, key, sizeof(rss_conf->key));
}
- memcpy(rss_conf->key, key, sizeof(rss_conf->key));
rss_conf->conf.key = rss_conf->key;
rss_conf->conf.key_len = sizeof(rss_conf->key);
}
NULL,
"RSS Queues not supported when pattern specified");
- if (rss_act->func == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ)
+ switch (rss_act->func) {
+ case RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ:
rss_conf->symmetric_enable = true;
- else if (rss_act->func != RTE_ETH_HASH_FUNCTION_DEFAULT)
- return rte_flow_error_set(error, -EINVAL,
- RTE_FLOW_ERROR_TYPE_ACTION_CONF,
- NULL,
- "Only symmetric TOEPLITZ supported when pattern specified");
+ break;
+ case RTE_ETH_HASH_FUNCTION_DEFAULT:
+ case RTE_ETH_HASH_FUNCTION_TOEPLITZ:
+ case RTE_ETH_HASH_FUNCTION_SIMPLE_XOR:
+ break;
+ default:
+ return rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ACTION_CONF,
+ NULL,
+ "RSS hash function not supported "
+ "when pattern specified");
+ }
if (!i40e_hash_validate_rss_types(rss_act->types))
return rte_flow_error_set(error, EINVAL,
struct i40e_rte_flow_rss_conf *rss_conf)
{
struct i40e_hw *hw = &pf->adapter->hw;
+ struct rte_eth_dev *dev;
uint64_t inset;
uint32_t idx;
int ret;
}
if (rss_conf->misc_reset_flags & I40E_HASH_FLOW_RESET_FLAG_REGION) {
- ret = i40e_flush_queue_region_all_conf(pf->adapter->eth_dev,
- hw, pf, 0);
+ dev = &rte_eth_devices[pf->dev_data->port_id];
+ ret = i40e_flush_queue_region_all_conf(dev, hw, pf, 0);
if (ret)
return ret;