summaryrefslogtreecommitdiffstats
path: root/src/dpdk/drivers/net/i40e/i40e_ethdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dpdk/drivers/net/i40e/i40e_ethdev.c')
-rw-r--r--src/dpdk/drivers/net/i40e/i40e_ethdev.c81
1 files changed, 53 insertions, 28 deletions
diff --git a/src/dpdk/drivers/net/i40e/i40e_ethdev.c b/src/dpdk/drivers/net/i40e/i40e_ethdev.c
index f8ee5a60..8bf8554a 100644
--- a/src/dpdk/drivers/net/i40e/i40e_ethdev.c
+++ b/src/dpdk/drivers/net/i40e/i40e_ethdev.c
@@ -1048,7 +1048,7 @@ eth_i40e_dev_init(struct rte_eth_dev *dev)
intr_handle = &pci_dev->intr_handle;
rte_eth_copy_pci_info(dev, pci_dev);
- dev->data->dev_flags = RTE_ETH_DEV_DETACHABLE;
+ dev->data->dev_flags |= RTE_ETH_DEV_DETACHABLE;
pf->adapter = I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
pf->adapter->eth_dev = dev;
@@ -2223,11 +2223,11 @@ i40e_dev_link_update(struct rte_eth_dev *dev,
}
link.link_status = link_status.link_info & I40E_AQ_LINK_UP;
- if (!wait_to_complete)
+ if (!wait_to_complete || link.link_status)
break;
rte_delay_ms(CHECK_INTERVAL);
- } while (!link.link_status && rep_cnt--);
+ } while (--rep_cnt);
if (!link.link_status)
goto out;
@@ -6777,6 +6777,12 @@ i40e_tunnel_filter_convert(struct i40e_aqc_add_remove_cloud_filters_element_data
ether_addr_copy((struct ether_addr *)&cld_filter->inner_mac,
(struct ether_addr *)&tunnel_filter->input.inner_mac);
tunnel_filter->input.inner_vlan = cld_filter->inner_vlan;
+ if ((rte_le_to_cpu_16(cld_filter->flags) &
+ I40E_AQC_ADD_CLOUD_FLAGS_IPV6) ==
+ I40E_AQC_ADD_CLOUD_FLAGS_IPV6)
+ tunnel_filter->input.ip_type = I40E_TUNNEL_IPTYPE_IPV6;
+ else
+ tunnel_filter->input.ip_type = I40E_TUNNEL_IPTYPE_IPV4;
tunnel_filter->input.flags = cld_filter->flags;
tunnel_filter->input.tenant_id = cld_filter->tenant_id;
tunnel_filter->queue = cld_filter->queue_number;
@@ -8804,6 +8810,10 @@ i40e_pctype_to_flowtype(enum i40e_filter_pctype pctype)
#define I40E_GL_SWR_PRI_JOIN_MAP_2_VALUE 0x011f0200
#define I40E_GL_SWR_PRI_JOIN_MAP_2 0x26CE08
+/* For X722 */
+#define I40E_X722_GL_SWR_PRI_JOIN_MAP_0_VALUE 0x20000200
+#define I40E_X722_GL_SWR_PRI_JOIN_MAP_2_VALUE 0x013F0200
+
/* For X710 */
#define I40E_GL_SWR_PM_UP_THR_EF_VALUE 0x03030303
/* For XL710 */
@@ -8826,7 +8836,6 @@ i40e_dev_sync_phy_type(struct i40e_hw *hw)
return 0;
}
-
static void
i40e_configure_registers(struct i40e_hw *hw)
{
@@ -8834,8 +8843,8 @@ i40e_configure_registers(struct i40e_hw *hw)
uint32_t addr;
uint64_t val;
} reg_table[] = {
- {I40E_GL_SWR_PRI_JOIN_MAP_0, I40E_GL_SWR_PRI_JOIN_MAP_0_VALUE},
- {I40E_GL_SWR_PRI_JOIN_MAP_2, I40E_GL_SWR_PRI_JOIN_MAP_2_VALUE},
+ {I40E_GL_SWR_PRI_JOIN_MAP_0, 0},
+ {I40E_GL_SWR_PRI_JOIN_MAP_2, 0},
{I40E_GL_SWR_PM_UP_THR, 0}, /* Compute value dynamically */
};
uint64_t reg;
@@ -8843,6 +8852,24 @@ i40e_configure_registers(struct i40e_hw *hw)
int ret;
for (i = 0; i < RTE_DIM(reg_table); i++) {
+ if (reg_table[i].addr == I40E_GL_SWR_PRI_JOIN_MAP_0) {
+ if (hw->mac.type == I40E_MAC_X722) /* For X722 */
+ reg_table[i].val =
+ I40E_X722_GL_SWR_PRI_JOIN_MAP_0_VALUE;
+ else /* For X710/XL710/XXV710 */
+ reg_table[i].val =
+ I40E_GL_SWR_PRI_JOIN_MAP_0_VALUE;
+ }
+
+ if (reg_table[i].addr == I40E_GL_SWR_PRI_JOIN_MAP_2) {
+ if (hw->mac.type == I40E_MAC_X722) /* For X722 */
+ reg_table[i].val =
+ I40E_X722_GL_SWR_PRI_JOIN_MAP_2_VALUE;
+ else /* For X710/XL710/XXV710 */
+ reg_table[i].val =
+ I40E_GL_SWR_PRI_JOIN_MAP_2_VALUE;
+ }
+
if (reg_table[i].addr == I40E_GL_SWR_PM_UP_THR) {
if (I40E_PHY_TYPE_SUPPORT_40G(hw->phy.phy_types) || /* For XL710 */
I40E_PHY_TYPE_SUPPORT_25G(hw->phy.phy_types)) /* For XXV710 */
@@ -10338,16 +10365,14 @@ i40e_filter_restore(struct i40e_pf *pf)
i40e_fdir_filter_restore(pf);
}
-static int
-is_i40e_pmd(const char *driver_name)
+static bool
+is_device_supported(struct rte_eth_dev *dev, struct eth_driver *drv)
{
- if (!strstr(driver_name, "i40e"))
- return -ENOTSUP;
-
- if (strstr(driver_name, "i40e_vf"))
- return -ENOTSUP;
+ if (strcmp(dev->driver->pci_drv.driver.name,
+ drv->pci_drv.driver.name))
+ return false;
- return 0;
+ return true;
}
int
@@ -10360,7 +10385,7 @@ rte_pmd_i40e_ping_vfs(uint8_t port, uint16_t vf)
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -10389,7 +10414,7 @@ rte_pmd_i40e_set_vf_mac_anti_spoof(uint8_t port, uint16_t vf_id, uint8_t on)
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -10493,7 +10518,7 @@ rte_pmd_i40e_set_vf_vlan_anti_spoof(uint8_t port, uint16_t vf_id, uint8_t on)
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -10751,7 +10776,7 @@ rte_pmd_i40e_set_tx_loopback(uint8_t port, uint8_t on)
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -10793,7 +10818,7 @@ rte_pmd_i40e_set_vf_unicast_promisc(uint8_t port, uint16_t vf_id, uint8_t on)
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -10834,7 +10859,7 @@ rte_pmd_i40e_set_vf_multicast_promisc(uint8_t port, uint16_t vf_id, uint8_t on)
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -10880,7 +10905,7 @@ rte_pmd_i40e_set_vf_mac_addr(uint8_t port, uint16_t vf_id,
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -10917,7 +10942,7 @@ rte_pmd_i40e_set_vf_vlan_stripq(uint8_t port, uint16_t vf_id, uint8_t on)
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -10960,7 +10985,7 @@ int rte_pmd_i40e_set_vf_vlan_insert(uint8_t port, uint16_t vf_id,
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -11024,7 +11049,7 @@ int rte_pmd_i40e_set_vf_broadcast(uint8_t port, uint16_t vf_id,
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -11080,7 +11105,7 @@ int rte_pmd_i40e_set_vf_vlan_tag(uint8_t port, uint16_t vf_id, uint8_t on)
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -11143,7 +11168,7 @@ int rte_pmd_i40e_set_vf_vlan_filter(uint8_t port, uint16_t vlan_id,
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
if (vlan_id > ETHER_MAX_VLAN_ID) {
@@ -11206,7 +11231,7 @@ rte_pmd_i40e_get_vf_stats(uint8_t port,
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -11250,7 +11275,7 @@ rte_pmd_i40e_reset_vf_stats(uint8_t port,
dev = &rte_eth_devices[port];
- if (is_i40e_pmd(dev->data->drv_name))
+ if (!is_device_supported(dev, &rte_i40e_pmd))
return -ENOTSUP;
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);